package com.athena.asm; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.view.KeyEvent; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.athena.asm.fragment.PostListFragment; import com.athena.asm.util.StringUtility; import com.athena.asm.viewmodel.PostListViewModel; public class PostListActivity extends SherlockFragmentActivity implements ProgressDialogProvider, OnOpenActivityFragmentListener { public static final int RETURN_FROM_FULL_IMAGE = 101; private ProgressDialog m_pdialog; private PostListViewModel m_viewModel; private PostListFragment m_fragment; @Override protected void onCreate(Bundle savedInstanceState) { setTheme(aSMApplication.THEME); super.onCreate(savedInstanceState); //requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.post_list_activity); // http://stackoverflow.com/questions/8181157/castingproblem-with-findfragmentbyid FragmentManager fm = getSupportFragmentManager(); m_fragment = (PostListFragment) fm.findFragmentById(R.id.post_list_fragment); getSupportActionBar().setDisplayShowHomeEnabled(false); //getSupportActionBar().setDisplayHomeAsUpEnabled(true); aSMApplication application = (aSMApplication) getApplication(); m_viewModel = application.getPostListViewModel(); setRequestedOrientation(aSMApplication.ORIENTATION); } // @Override // public void onConfigurationChanged(Configuration newConfig) { // // do nothing to stop onCreated // super.onConfigurationChanged(newConfig); // } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent i = new Intent(); Bundle b = new Bundle(); b.putBoolean(StringUtility.REFRESH_BOARD, ((aSMApplication) getApplication()).getPostListViewModel().isToRefreshBoard()); i.putExtras(b); this.setResult(RESULT_OK, i); this.finish(); return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) { return m_fragment.onKeyDown(keyCode); } else { return super.onKeyDown(keyCode, event); } } // http://stackoverflow.com/questions/4500354/control-volume-keys @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // disable the beep sound when volume up/down is pressed if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP) || (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) { return true; } return super.onKeyUp(keyCode, event); } public void showProgressDialog() { if (m_pdialog == null) { m_pdialog = new ProgressDialog(this); m_pdialog.setMessage("努力加载中..."); m_pdialog.show(); } } public void dismissProgressDialog() { if (m_pdialog != null) { m_pdialog.cancel(); m_pdialog = null; } } public void doFinishBackToBoard(String boardEngName, String boardChsName) { Intent i = new Intent(); i.putExtra("board_eng_name", boardEngName); i.putExtra("board_chs_name", boardChsName); setResult(Activity.RESULT_OK, i); finish(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case Activity.RESULT_OK: Bundle b = data.getExtras(); m_viewModel.setIsToRefreshBoard(b.getBoolean(StringUtility.REFRESH_BOARD)); break; case PostListActivity.RETURN_FROM_FULL_IMAGE: // refresh current list m_viewModel.notifyPostListChanged(); break; default: break; } } @Override public void onOpenActivityOrFragment(String target, Bundle bundle) { Intent intent = new Intent(); intent.putExtras(bundle); if (target.equals(ActivityFragmentTargets.WRITE_POST)) { int writeType = bundle.getInt(StringUtility.WRITE_TYPE); if (writeType == WritePostActivity.TYPE_MAIL) { intent.setClassName("com.athena.asm", WritePostActivity.class.getName()); startActivity(intent); } else if (writeType == WritePostActivity.TYPE_POST || writeType == WritePostActivity.TYPE_POST_EDIT) { intent.setClassName("com.athena.asm", WritePostActivity.class.getName()); startActivityForResult(intent, 0); } } else if (target.equals(ActivityFragmentTargets.VIEW_PROFILE)) { intent.setClassName("com.athena.asm", ViewProfileActivity.class.getName()); startActivity(intent); } } }