package im.zico.wingtwitter.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.transition.Explode;
import android.transition.Slide;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toolbar;
import java.io.File;
import java.net.URI;
import im.zico.wingtwitter.R;
import im.zico.wingtwitter.WingApp;
import twitter4j.AsyncTwitter;
import twitter4j.GeoLocation;
import twitter4j.Status;
import twitter4j.StatusUpdate;
import twitter4j.TwitterAdapter;
import twitter4j.TwitterListener;
public class TweetComposeActivity extends Activity implements View.OnClickListener {
private ImageView photoV, locationV, mentionV, topicV;
private View updateV;
private EditText tweetEdt;
private ImageView photoAdded;
private TextView textCounter;
private long inReplyId = 0;
AsyncTwitter asyncTwitter;
private File photo;
public static void showDialog(Activity activity, Bundle bundles) {
Intent intent = new Intent(activity, TweetComposeActivity.class);
intent.putExtras(bundles);
activity.startActivity(intent);
activity.overridePendingTransition(R.anim.grow_from_bottom_right, 0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compose);
photoV = (ImageView) findViewById(R.id.compose_add_photo);
locationV = (ImageView) findViewById(R.id.compose_enable_location);
mentionV = (ImageView) findViewById(R.id.compose_add_mention);
topicV = (ImageView) findViewById(R.id.compose_add_topic);
tweetEdt = (EditText) findViewById(R.id.compose_tweet_edt);
photoAdded = (ImageView) findViewById(R.id.compose_photo_added);
updateV = findViewById(R.id.compose_update_tweet);
textCounter = (TextView) findViewById(R.id.compose_header_text_counter);
if (getIntent().hasExtra("user")) {
tweetEdt.append(getIntent().getStringExtra("user") + " ");
inReplyId = getIntent().getLongExtra("inReplyId", 0);
}
if (getIntent().hasExtra("quote")) {
tweetEdt.setText(getIntent().getStringExtra("quote"));
}
asyncTwitter = WingApp.newTwitterInstance();
asyncTwitter.addListener(listener);
photoV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("DEBUG", "photo click ... ");
}
});
photoV.setOnClickListener(this);
locationV.setOnClickListener(this);
mentionV.setOnClickListener(this);
topicV.setOnClickListener(this);
updateV.setOnClickListener(this);
tweetEdt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
textCounter.setText((140 - s.toString().length()) + "");
if (s.toString().length() > 140) {
textCounter.setTextColor(getResources().getColor(R.color.accent));
}
}
});
}
@Override
public void onClick(View v) {
Log.d("DEBUG", "click ... ");
switch (v.getId()) {
case R.id.compose_add_photo:
AlertDialog.Builder builder = new AlertDialog.Builder(TweetComposeActivity.this)
.setItems(R.array.dialog_add_photos, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
// Find the last picture
String[] projection = new String[]{
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA,
MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
MediaStore.Images.ImageColumns.DATE_TAKEN,
MediaStore.Images.ImageColumns.MIME_TYPE
};
final Cursor cursor = getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
dialog.cancel();
if(cursor.moveToFirst()) {
String photoPath = cursor.getString(1);
photo = new File(photoPath);
if (photo.exists()) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bm = BitmapFactory.decodeFile(photoPath, options);
photoAdded.setImageBitmap(bm);
}
}
break;
case 1:
break;
case 2:
break;
}
}
});
builder.create().show();
break;
case R.id.compose_enable_location:
break;
case R.id.compose_add_mention:
int _cur = tweetEdt.getSelectionStart();
String _currentS = tweetEdt.getText().toString();
tweetEdt.setText(_currentS.substring(0, _cur)
+ (_cur==0 ? "@" : " @")
+ _currentS.substring(_cur));
tweetEdt.setSelection(_cur + (_cur==0 ? 1 : 2));
break;
case R.id.compose_add_topic:
int curs = tweetEdt.getSelectionStart();
String currentS = tweetEdt.getText().toString();
tweetEdt.setText(currentS.substring(0, curs)
+ "#"
+ currentS.substring(curs));
tweetEdt.setSelection(curs + 1);
break;
case R.id.compose_update_tweet:
Log.d("DEBUG", "Update Status ... ");
updateTweet();
break;
}
}
private void updateTweet() {
StatusUpdate status = new StatusUpdate(tweetEdt.getText().toString());
if(inReplyId != 0) status.setInReplyToStatusId(inReplyId);
if(photo != null) status.setMedia(photo);
status.setLocation(new GeoLocation(40, 120));
asyncTwitter.updateStatus(status);
}
private TwitterListener listener = new TwitterAdapter(){
@Override
public void updatedStatus(Status status) {
super.updatedStatus(status);
Log.d("DEBUG", "Update Successful");
}
};
@Override
public void finish() {
super.finish();
overridePendingTransition(0, R.anim.back_to_bottom_right);
}
}