package com.athena.asm;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.athena.asm.Adapter.MailListAdapter;
import com.athena.asm.data.Mail;
import com.athena.asm.fragment.SubjectListFragment;
import com.athena.asm.util.StringUtility;
import com.athena.asm.util.task.LoadMailListTask;
import com.athena.asm.viewmodel.BaseViewModel;
import com.athena.asm.viewmodel.MailViewModel;
public class MailListActivity extends SherlockActivity implements
OnClickListener, BaseViewModel.OnViewModelChangObserver {
private LayoutInflater m_inflater;
private MailViewModel m_viewModel;
private MailListAdapter m_listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(aSMApplication.THEME);
super.onCreate(savedInstanceState);
setContentView(R.layout.post_list);
setRequestedOrientation(aSMApplication.ORIENTATION);
m_inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
aSMApplication application = (aSMApplication) getApplication();
m_viewModel = application.getMailViewModel();
m_viewModel.registerViewModelChangeObserver(this);
boolean isToUpdate = m_viewModel.tryUpdateMailboxType((getIntent()
.getIntExtra(StringUtility.MAIL_BOX_TYPE, 0)));
setTitle(m_viewModel.getTitleText());
EditText pageNoEditText = (EditText) findViewById(R.id.edittext_page_no);
pageNoEditText.setVisibility(View.GONE);
Button firstButton = (Button) findViewById(R.id.btn_first_page);
firstButton.setOnClickListener(this);
Button lastButton = (Button) findViewById(R.id.btn_last_page);
lastButton.setOnClickListener(this);
Button preButton = (Button) findViewById(R.id.btn_pre_page);
preButton.setOnClickListener(this);
Button goButton = (Button) findViewById(R.id.btn_go_page);
goButton.setVisibility(View.GONE);
Button nextButton = (Button) findViewById(R.id.btn_next_page);
nextButton.setOnClickListener(this);
if (isToUpdate) {
LoadMailListTask loadMailListTask = new LoadMailListTask(this,
m_viewModel, -1);
loadMailListTask.execute();
} else {
reloadMailList();
}
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// do nothing to stop onCreated
super.onConfigurationChanged(newConfig);
}
@Override
public void onDestroy() {
m_viewModel.unregisterViewModelChangeObserver(this);
super.onDestroy();
}
public void reloadMailList() {
if (m_viewModel.getMailList() != null) {
ListView listView = (ListView) findViewById(R.id.post_list);
m_listAdapter = new MailListAdapter(m_inflater,
m_viewModel.getMailList(), m_viewModel.getMailboxType());
listView.setAdapter(m_listAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
if (m_viewModel.getMailboxType() < 3) {
m_viewModel.setMailRead(m_viewModel.getMailList()
.size() - position - 1);
} else {
m_viewModel.setMailRead(position);
}
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putSerializable(StringUtility.MAIL,
(Mail) view.getTag());
intent.putExtras(bundle);
if (m_viewModel.getMailboxType() < 3) {
intent.setClassName("com.athena.asm",
"com.athena.asm.ReadMailActivity");
} else {
intent.putExtra(StringUtility.BOARD_TYPE,
SubjectListFragment.BOARD_TYPE_NORMAL);
intent.setClassName("com.athena.asm", PostListActivity.class.getName());
}
startActivityForResult(intent, 0);
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
m_listAdapter.notifyDataSetChanged();
}
@Override
public void onClick(View view) {
int startNumber = 0;
if (view.getId() == R.id.btn_first_page) {
startNumber = m_viewModel.getFirstPageStartNumber();
} else if (view.getId() == R.id.btn_last_page) {
startNumber = m_viewModel.getLastPageStartNumber();
} else if (view.getId() == R.id.btn_pre_page) {
startNumber = m_viewModel.getPrevPageStartNumber();
} else if (view.getId() == R.id.btn_next_page) {
startNumber = m_viewModel.getNextPageStartNumber();
}
LoadMailListTask loadMailListTask = new LoadMailListTask(this,
m_viewModel, startNumber);
loadMailListTask.execute();
}
public static final int REFRESH_MAILLIST = Menu.FIRST;
public static final int MARK_ALL_READ = Menu.FIRST + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean isLight = aSMApplication.THEME == R.style.Theme_Sherlock_Light;
menu.add(0, REFRESH_MAILLIST, Menu.NONE, "刷新")
.setIcon(
isLight ? R.drawable.refresh_inverse
: R.drawable.refresh)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
if (m_viewModel.getMailboxType() > 3) {
menu.add(0, MARK_ALL_READ, Menu.NONE, "全部已读").setShowAsAction(
MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
case REFRESH_MAILLIST:
m_viewModel.setMailList(null);
LoadMailListTask loadMailListTask = new LoadMailListTask(this,
m_viewModel, -1);
loadMailListTask.execute();
break;
case MARK_ALL_READ:
Toast.makeText(this, "正在标记已读,结束后返回上一级",
Toast.LENGTH_SHORT).show();
Thread th = new Thread() {
@Override
public void run() {
m_viewModel.markAllMessageRead();
m_viewModel.setAllMailRead();
finish();
}
};
th.start();
break;
}
return true;
}
@Override
public void onViewModelChange(BaseViewModel viewModel,
String changedPropertyName, Object... params) {
if (changedPropertyName.equals(MailViewModel.MAILLIST_PROPERTY_NAME)) {
reloadMailList();
}
}
}