package info.justaway;
import android.app.NotificationManager;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ListView;
import de.greenrobot.event.EventBus;
import info.justaway.adapter.TwitterAdapter;
import info.justaway.event.AlertDialogEvent;
import info.justaway.event.model.StreamingDestroyStatusEvent;
import info.justaway.event.action.StatusActionEvent;
import info.justaway.listener.StatusClickListener;
import info.justaway.listener.StatusLongClickListener;
import info.justaway.model.Row;
import info.justaway.model.TwitterManager;
import info.justaway.util.MessageUtil;
import twitter4j.Status;
/**
* ツイート表示用のアクティビティ
*/
public class StatusActivity extends FragmentActivity {
private ProgressDialog mProgressDialog;
private TwitterAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
// インテント経由での起動をサポート
Intent intent = getIntent();
if (intent.getBooleanExtra("notification", false)) {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancelAll();
}
long statusId;
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri == null || uri.getPath() == null) {
return;
}
if (uri.getPath().contains("photo")) {
Intent scaleImage = new Intent(this, ScaleImageActivity.class);
scaleImage.putExtra("url", uri.toString());
startActivity(scaleImage);
finish();
return;
} else if (uri.getPath().contains("video")) {
Intent videoActivity = new Intent(this, VideoActivity.class);
videoActivity.putExtra("statusUrl", uri.toString());
startActivity(videoActivity);
finish();
return;
} else {
statusId = Long.parseLong(uri.getLastPathSegment());
}
} else {
statusId = intent.getLongExtra("id", -1L);
}
setContentView(R.layout.activity_status);
ListView listView = (ListView) findViewById(R.id.list);
// コンテキストメニューを使える様にする為の指定、但しデフォルトではロングタップで開く
registerForContextMenu(listView);
// Status(ツイート)をViewに描写するアダプター
mAdapter = new TwitterAdapter(this, R.layout.row_tweet);
listView.setAdapter(mAdapter);
listView.setOnItemClickListener(new StatusClickListener(this));
listView.setOnItemLongClickListener(new StatusLongClickListener(this));
if (statusId > 0) {
showProgressDialog(getString(R.string.progress_loading));
new LoadTask().execute(statusId);
} else {
Status status = (Status) intent.getSerializableExtra("status");
if (status != null) {
mAdapter.add(Row.newStatus(status));
long inReplyToStatusId = status.getInReplyToStatusId();
if (inReplyToStatusId > 0) {
showProgressDialog(getString(R.string.progress_loading));
new LoadTask().execute(inReplyToStatusId);
}
}
}
}
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
protected void onPause() {
EventBus.getDefault().unregister(this);
super.onPause();
}
@SuppressWarnings("UnusedDeclaration")
public void onEventMainThread(AlertDialogEvent event) {
event.getDialogFragment().show(getSupportFragmentManager(), "dialog");
}
@SuppressWarnings("UnusedDeclaration")
public void onEventMainThread(StatusActionEvent event) {
mAdapter.notifyDataSetChanged();
}
@SuppressWarnings("UnusedDeclaration")
public void onEventMainThread(StreamingDestroyStatusEvent event) {
mAdapter.removeStatus(event.getStatusId());
}
private void showProgressDialog(String message) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(message);
mProgressDialog.show();
}
private void dismissProgressDialog() {
if (mProgressDialog != null)
mProgressDialog.dismiss();
}
private class LoadTask extends AsyncTask<Long, Void, Status> {
public LoadTask() {
super();
}
@Override
protected twitter4j.Status doInBackground(Long... params) {
try {
return TwitterManager.getTwitter().showStatus(params[0]);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(twitter4j.Status status) {
dismissProgressDialog();
if (status != null) {
mAdapter.add(Row.newStatus(status));
mAdapter.notifyDataSetChanged();
Long inReplyToStatusId = status.getInReplyToStatusId();
if (inReplyToStatusId > 0) {
new LoadTask().execute(inReplyToStatusId);
}
} else {
MessageUtil.showToast(R.string.toast_load_data_failure);
}
}
}
}