Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MessageList extends ListActivity implements
- MessageListFragmentListener, MessageViewFragmentListener,
- OnBackStackChangedListener, OnSwipeGestureListener,
- OnSwitchCompleteListener {
- // for this activity
- private static final String EXTRA_SEARCH = "search";
- private static final String EXTRA_NO_THREADING = "no_threading";
- private static final String ACTION_SHORTCUT = "shortcut";
- private static final String EXTRA_SPECIAL_FOLDER = "special_folder";
- private static final String EXTRA_MESSAGE_REFERENCE = "message_reference";
- // used for remote search
- public static final String EXTRA_SEARCH_ACCOUNT = "com.bernard.beaconportal.activities.search_account";
- private static final String EXTRA_SEARCH_FOLDER = "com.bernard.beaconportal.activities.search_folder";
- private static final String STATE_DISPLAY_MODE = "displayMode";
- private static final String STATE_MESSAGE_LIST_WAS_DISPLAYED = "messageListWasDisplayed";
- // Used for navigating to next/previous message
- private static final int PREVIOUS = 1;
- private static final int NEXT = 2;
- private static final String EXTRA_ACCOUNT = "account";
- private static final String EXTRA_FROM_SHORTCUT = "fromShortcut";
- private static final boolean REFRESH_REMOTE = true;
- private ListView mListView;
- private FolderListAdapter mAdapter;
- private LayoutInflater mInflater;
- private static final String TAG = "K9MailExtension";
- public static final String PREF_NAME = "pref_name";
- static final Uri k9AccountsUri = Uri
- .parse("content://com.bernard.beaconportal.activities.messageprovider/accounts/");
- static final String k9UnreadUri = "content://com.bernard.beaconportal.activities.messageprovider/account_unread/";
- static final String k9MessageProvider = "content://com.bernard.beaconportal.activities.messageprovider/";
- ContentObserver contentObserver = null;
- BroadcastReceiver receiver = null;
- IntentFilter filter = null;
- private FolderListHandler mHandler = new FolderListHandler();
- private FontSizes mFontSizes = K9.getFontSizes();
- private Context context;
- private MenuItem mRefreshMenuItem;
- private View mActionBarProgressView;
- public static void actionDisplaySearch(Context context,
- SearchSpecification search, boolean noThreading, boolean newTask) {
- actionDisplaySearch(context, search, noThreading, newTask, true);
- }
- public static void actionDisplaySearch(Context context,
- SearchSpecification search, boolean noThreading, boolean newTask,
- boolean clearTop) {
- context.startActivity(intentDisplaySearch(context, search, noThreading,
- newTask, clearTop));
- }
- public static Intent intentDisplaySearch(Context context,
- SearchSpecification search, boolean noThreading, boolean newTask,
- boolean clearTop) {
- Intent intent = new Intent(context, MessageList.class);
- intent.putExtra(EXTRA_SEARCH, search);
- intent.putExtra(EXTRA_NO_THREADING, noThreading);
- if (clearTop) {
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- }
- if (newTask) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
- return intent;
- }
- public static Intent shortcutIntent(Context context, String specialFolder) {
- Intent intent = new Intent(context, MessageList.class);
- intent.setAction(ACTION_SHORTCUT);
- intent.putExtra(EXTRA_SPECIAL_FOLDER, specialFolder);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return intent;
- }
- public static Intent actionDisplayMessageIntent(Context context,
- MessageReference messageReference) {
- Intent intent = new Intent(context, MessageList.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra(EXTRA_MESSAGE_REFERENCE, messageReference);
- return intent;
- }
- private enum DisplayMode {
- MESSAGE_LIST, MESSAGE_VIEW, SPLIT_VIEW
- }
- private StorageManager.StorageListener mStorageListener = new StorageListenerImplementation();
- private android.app.ActionBar mActionBar;
- private View mActionBarMessageList;
- private View mActionBarMessageView;
- private MessageTitleView mActionBarSubject;
- private TextView mActionBarTitle;
- private TextView mActionBarSubTitle;
- private TextView mActionBarUnread;
- private android.view.Menu mMenu;
- DrawerLayout mDrawerLayout;
- LinearLayout mDrawerLinear;
- com.bernard.beaconportal.activities.activity.VerticalScrollview mScrollView;
- TextView mWelcomePerson;
- ListView mDrawerList;
- ListView mDrawerList_Inbox;
- ActionBarDrawerToggle mDrawerToggle;
- MenuListAdapter mMenuAdapter;
- MenuListAdapter mMenuAdapter_Inbox;
- String actionbar_colors, background_colorsString;
- private String Show_View;
- String[] title;
- String[] count;
- int[] icon;
- String[] title_Inbox;
- String[] count_Inbox;
- int[] icon_Inbox;
- private String counterss;
- private int counters;
- Fragment fragment1 = new FragmentsView();
- Fragment fragment2 = new FragmentsHomeworkDue();
- Fragment fragment3 = new FragmentSettings();
- private CharSequence mDrawerTitle;
- private CharSequence mTitle;
- private int shared1;
- private int countersss1;
- private int mUnreadMessageCount = 0;
- private String due_tommorow_shared, due_tommorow_shared_content;
- private List<Due_Today_List> due_today_list;
- private List<String> read_due_today_list;
- private String K9count;
- private View swipe;
- private int shared;
- private int countersss;
- private ArrayAdapter<Due_Today_List> adapter;
- private ViewGroup mMessageViewContainer;
- private View mMessageViewPlaceHolder;
- private MessageListFragment mMessageListFragment;
- private MessageViewFragment mMessageViewFragment;
- private int mFirstBackStackId = -1;
- private Account mAccount;
- private String mFolderName;
- private LocalSearch mSearch;
- private boolean mSingleFolderMode;
- private boolean mSingleAccountMode;
- private K9FragmentActivity mK9FragmentActivity;
- private K9ActivityCommon mBase;
- private BaseAccount mSelectedContextAccount;
- private ProgressBar mActionBarProgress;
- private android.view.MenuItem mMenuButtonCheckMail;
- private View mActionButtonIndeterminateProgress;
- private int mLastDirection = (K9.messageViewShowNext()) ? NEXT : PREVIOUS;
- /**
- * {@code true} if the message list should be displayed as flat list (i.e.
- * no threading) regardless whether or not message threading was enabled in
- * the settings. This is used for filtered views, e.g. when only displaying
- * the unread messages in a folder.
- */
- private boolean mNoThreading;
- private String K9counts;
- private MessageList currentActivity;
- private DisplayMode mDisplayMode;
- private MessageReference mMessageReference;
- /**
- * {@code true} when the message list was displayed once. This is used in
- * {@link #onBackPressed()} to decide whether to go from the message view to
- * the message list or finish the activity.
- */
- private boolean mMessageListWasDisplayed = false;
- private ViewSwitcher mViewSwitcher;
- class FolderListHandler extends Handler {
- public void newFolders(final List<FolderInfoHolder> newFolders) {
- runOnUiThread(new Runnable() {
- public void run() {
- mAdapter.mFolders.clear();
- mAdapter.mFolders.addAll(newFolders);
- mAdapter.mFilteredFolders = mAdapter.mFolders;
- mHandler.dataChanged();
- }
- });
- }
- public void workingAccount(final int res) {
- runOnUiThread(new Runnable() {
- public void run() {
- String toastText = getString(res, mAccount.getDescription());
- Toast toast = Toast.makeText(getApplication(), toastText, Toast.LENGTH_SHORT);
- toast.show();
- }
- });
- }
- public void accountSizeChanged(final long oldSize, final long newSize) {
- runOnUiThread(new Runnable() {
- public void run() {
- String toastText = getString(R.string.account_size_changed, mAccount.getDescription(), SizeFormatter.formatSize(getApplication(), oldSize), SizeFormatter.formatSize(getApplication(), newSize));
- Toast toast = Toast.makeText(getApplication(), toastText, Toast.LENGTH_LONG);
- toast.show();
- }
- });
- }
- public void folderLoading(final String folder, final boolean loading) {
- runOnUiThread(new Runnable() {
- public void run() {
- FolderInfoHolder folderHolder = mAdapter.getFolder(folder);
- if (folderHolder != null) {
- folderHolder.loading = loading;
- }
- }
- });
- }
- public void progress(final boolean progress) {
- // Make sure we don't try this before the menu is initialized
- // this could happen while the activity is initialized.
- if (mRefreshMenuItem == null) {
- return;
- }
- runOnUiThread(new Runnable() {
- public void run() {
- if (progress) {
- mRefreshMenuItem.setActionView(mActionBarProgressView);
- } else {
- mRefreshMenuItem.setActionView(null);
- }
- }
- });
- }
- public void dataChanged() {
- runOnUiThread(new Runnable() {
- public void run() {
- mAdapter.notifyDataSetChanged();
- }
- });
- }
- }
- /**
- * This class is responsible for reloading the list of local messages for a
- * given folder, notifying the adapter that the message have been loaded and
- * queueing up a remote update of the folder.
- */
- private void checkMail(FolderInfoHolder folder) {
- TracingPowerManager pm = TracingPowerManager.getPowerManager(this);
- final TracingWakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "FolderList checkMail");
- wakeLock.setReferenceCounted(false);
- wakeLock.acquire(K9.WAKE_LOCK_TIMEOUT);
- MessagingListener listener = new MessagingListener() {
- @Override
- public void synchronizeMailboxFinished(Account account, String folder, int totalMessagesInMailbox, int numNewMessages) {
- if (!account.equals(mAccount)) {
- return;
- }
- wakeLock.release();
- }
- @Override
- public void synchronizeMailboxFailed(Account account, String folder,
- String message) {
- if (!account.equals(mAccount)) {
- return;
- }
- wakeLock.release();
- }
- };
- MessagingController.getInstance(getApplication()).synchronizeMailbox(mAccount, folder.name, listener, null);
- sendMail(mAccount);
- }
- public static Intent actionHandleAccountIntent(Context context, Account account, boolean fromShortcut) {
- Intent intent = new Intent(context, FolderList.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra(EXTRA_ACCOUNT, account.getUuid());
- if (fromShortcut) {
- intent.putExtra(EXTRA_FROM_SHORTCUT, true);
- }
- return intent;
- }
- public static void actionHandleAccount(Context context, Account account) {
- Intent intent = actionHandleAccountIntent(context, account, false);
- context.startActivity(intent);
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d(TAG, "onCreate()");
- String packageName = "com.bernard.beaconportal.activities";
- int versionNumber = 0;
- try {
- PackageInfo pi = getApplicationContext().getPackageManager()
- .getPackageInfo(packageName, PackageManager.GET_META_DATA);
- versionNumber = pi.versionCode;
- String versionName = pi.versionName;
- Log.d(TAG, "K-9 is installed - " + versionNumber + " "
- + versionName);
- } catch (NameNotFoundException e) {
- Log.d(TAG, "K-9 not found");
- }
- if (versionNumber <= 16024) {
- // Register a listener for broadcasts (needed for the older versions
- // of k9)
- Log.d(TAG, "Initialising BroadcastReceiver for old K-9 version");
- receiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, "receiver.onReceive()");
- doRefresh();
- }
- };
- filter = new IntentFilter();
- filter.addAction("com.bernard.beaconportal.activities.intent.action.EMAIL_RECEIVED");
- filter.addAction("com.bernard.beaconportal.activities.intent.action.EMAIL_DELETED");
- filter.addDataScheme("email");
- registerReceiver(receiver, filter);
- } else {
- // Register our own content observer, rather than using
- // addWatchContentUris()
- // since DashClock might not have permission to access the database
- Log.d(TAG, "Initialising ContentObserver for new K-9 version");
- contentObserver = new ContentObserver(null) {
- @Override
- public void onChange(boolean selfChange) {
- Log.d(TAG, "contentResolver.onChange()");
- doRefresh();
- }
- };
- getContentResolver().registerContentObserver(
- Uri.parse(k9UnreadUri), true, contentObserver);
- }
- doRefresh();
- if (UpgradeDatabases.actionUpgradeDatabases(this, getIntent())) {
- finish();
- return;
- }
- if (useSplitView()) {
- setContentView(R.layout.split_drawer_main);
- } else {
- setContentView(R.layout.drawermain1);
- mViewSwitcher = (ViewSwitcher) findViewById(R.id.container);
- mViewSwitcher.setFirstInAnimation(AnimationUtils.loadAnimation(
- this, R.anim.slide_in_left));
- mViewSwitcher.setFirstOutAnimation(AnimationUtils.loadAnimation(
- this, R.anim.slide_out_right));
- mViewSwitcher.setSecondInAnimation(AnimationUtils.loadAnimation(
- this, R.anim.slide_in_right));
- mViewSwitcher.setSecondOutAnimation(AnimationUtils.loadAnimation(
- this, R.anim.slide_out_left));
- mViewSwitcher.setOnSwitchCompleteListener(this);
- }
- initializeActionBar();
- mListView = getListView();
- mListView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
- mListView.setLongClickable(true);
- mListView.setFastScrollEnabled(true);
- mListView.setScrollingCacheEnabled(false);
- mListView.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- onOpenFolder(((FolderInfoHolder)mAdapter.getItem(position)).name);
- }
- });
- registerForContextMenu(mListView);
- mListView.setSaveEnabled(true);
- mInflater = getLayoutInflater();
- onNewIntent(getIntent());
- context = this;
- SharedPreferences sharedpre = getSharedPreferences("show_view",
- Context.MODE_PRIVATE);
- Show_View = sharedpre.getString("show_view", "");
- SharedPreferences Today_Homework = getApplicationContext()
- .getSharedPreferences("due_today", Context.MODE_PRIVATE);
- SharedPreferences counts = getSharedPreferences("due_today",
- Context.MODE_PRIVATE);
- K9counts = counts.getString("inbox", null);
- counterss = counts.getString("homeworkdue", null);
- title_Inbox = new String[] {"Inbox"};
- icon_Inbox = new int[] {R.drawable.ic_action_email};
- count_Inbox = new String[] {K9counts};
- if (Show_View.equals("Homework Due")) {
- title = new String[] { "Homework Due", "Schedule",
- "Options", "Logout" };
- icon = new int[] { R.drawable.ic_action_duehomework,
- R.drawable.ic_action_go_to_today, R.drawable.ic_action_settings,
- R.drawable.ic_action_logout };
- if (counterss == null && counterss.isEmpty()) {
- count = new String[] { "", "", "", "" };
- } else {
- count = new String[] { counterss, "", "", "" };
- }
- } else {
- if (counterss == null && counterss.isEmpty()) {
- count = new String[] { "", "", "", "" };
- } else {
- count = new String[] { "", counterss, "", "" };
- }
- title = new String[] { "Schedule", "Homework Due",
- "Options", "Logout" };
- icon = new int[] { R.drawable.ic_action_go_to_today,
- R.drawable.ic_action_duehomework,
- R.drawable.ic_action_settings,
- R.drawable.ic_action_logout };
- }
- LayoutInflater inflater = getLayoutInflater();
- View header_inbox = (View) inflater.inflate(R.layout.header_inbox, null);
- View header_folders = (View) inflater.inflate(R.layout.header_folders, null);
- View header_drawer = (View) inflater.inflate(R.layout.header_drawer, null);
- mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
- mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);
- mDrawerList_Inbox = (ListView) findViewById(R.id.listview_inbox);
- mDrawerList = (ListView) findViewById(R.id.listview_drawer);
- mDrawerList_Inbox.addHeaderView(header_inbox, null, false);
- mListView.addHeaderView(header_folders, null, false);
- mDrawerList.addHeaderView(header_drawer, null, false);
- Utility.setListViewHeightBasedOnChildren(mDrawerList);
- Utility.setListViewHeightBasedOnChildren(mDrawerList_Inbox);
- Utility.setListViewHeightBasedOnChildren(mListView);
- mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
- GravityCompat.START);
- mMenuAdapter_Inbox = new MenuListAdapter(MessageList.this, title_Inbox, icon_Inbox, count_Inbox);
- mDrawerList_Inbox.setAdapter(mMenuAdapter_Inbox);
- mDrawerList_Inbox.setOnItemClickListener(new DrawerItemClickListener_Inbox());
- mMenuAdapter = new MenuListAdapter(MessageList.this, title, icon, count);
- mDrawerList.setAdapter(mMenuAdapter);
- mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
- if (savedInstanceState == null) {
- selectItem_Inbox(1);
- }
- SharedPreferences sharedpref = getSharedPreferences("actionbar_color",
- Context.MODE_PRIVATE);
- if (!sharedpref.contains("actionbar_color")) {
- getActionBar().setBackgroundDrawable(
- new ColorDrawable(Color.parseColor("#03a9f4")));
- } else {
- actionbar_colors = sharedpref.getString("actionbar_color", null);
- getActionBar().setBackgroundDrawable(
- new ColorDrawable(Color.parseColor(actionbar_colors)));
- }
- android.app.ActionBar bar = getActionBar();
- bar.setIcon(new ColorDrawable(getResources().getColor(
- android.R.color.transparent)));
- // Enable gesture detection for MessageLists
- //setupGestureDetector(this);
- if (!decodeExtras(getIntent())) {
- return;
- }
- findFragments();
- initializeDisplayMode(savedInstanceState);
- initializeLayout();
- initializeFragments();
- displayViews();
- ChangeLog cl = new ChangeLog(this);
- if (cl.isFirstRun()) {
- cl.getLogDialog().show();
- }
- }
- public void onNewIntent(Intent intent) {
- setIntent(intent); // onNewIntent doesn't autoset our "internal" intent
- mUnreadMessageCount = 0;
- String accountUuid = intent.getStringExtra(EXTRA_ACCOUNT);
- mAccount = Preferences.getPreferences(this).getAccount(accountUuid);
- // if (mAccount == null) {
- // // This shouldn't normally happen. But apparently it does. See issue 2261.
- // finish();
- // return;
- // }
- if (intent.getBooleanExtra(EXTRA_FROM_SHORTCUT, false) &&
- !K9.FOLDER_NONE.equals(mAccount.getAutoExpandFolderName())) {
- onOpenFolder(mAccount.getAutoExpandFolderName());
- finish();
- } else {
- initializeActivityView();
- }
- if (mFirstBackStackId >= 0) {
- getFragmentManager().popBackStackImmediate(mFirstBackStackId,
- FragmentManager.POP_BACK_STACK_INCLUSIVE);
- mFirstBackStackId = -1;
- }
- removeMessageListFragment();
- removeMessageViewFragment();
- mMessageReference = null;
- mSearch = null;
- mFolderName = null;
- if (!decodeExtras(intent)) {
- return;
- }
- initializeDisplayMode(null);
- initializeFragments();
- displayViews();
- }
- private void initializeActivityView() {
- mAdapter = new FolderListAdapter();
- restorePreviousData();
- setListAdapter(mAdapter);
- getListView().setTextFilterEnabled(mAdapter.getFilter() != null); // should never be false but better safe then sorry
- }
- @SuppressWarnings("unchecked")
- private void restorePreviousData() {
- final Object previousData = getLastNonConfigurationInstance();
- if (previousData != null) {
- mAdapter.mFolders = (ArrayList<FolderInfoHolder>) previousData;
- mAdapter.mFilteredFolders = Collections.unmodifiableList(mAdapter.mFolders);
- }
- }
- @Override
- public Object onRetainNonConfigurationInstance() {
- return (mAdapter == null) ? null : mAdapter.mFolders;
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- //Shortcuts that work no matter what is selected
- switch (keyCode) {
- case KeyEvent.KEYCODE_Q: {
- onAccounts();
- return true;
- }
- case KeyEvent.KEYCODE_S: {
- onEditAccount();
- return true;
- }
- case KeyEvent.KEYCODE_H: {
- Toast toast = Toast.makeText(this, R.string.folder_list_help_key, Toast.LENGTH_LONG);
- toast.show();
- return true;
- }
- case KeyEvent.KEYCODE_1: {
- setDisplayMode(FolderMode.FIRST_CLASS);
- return true;
- }
- case KeyEvent.KEYCODE_2: {
- setDisplayMode(FolderMode.FIRST_AND_SECOND_CLASS);
- return true;
- }
- case KeyEvent.KEYCODE_3: {
- setDisplayMode(FolderMode.NOT_SECOND_CLASS);
- return true;
- }
- case KeyEvent.KEYCODE_4: {
- setDisplayMode(FolderMode.ALL);
- return true;
- }
- }//switch
- return super.onKeyDown(keyCode, event);
- }//onKeyDown
- private void setDisplayMode(FolderMode newMode) {
- mAccount.setFolderDisplayMode(newMode);
- mAccount.save(Preferences.getPreferences(this));
- if (mAccount.getFolderPushMode() != FolderMode.NONE) {
- MailService.actionRestartPushers(this, null);
- }
- mAdapter.getFilter().filter(null);
- onRefresh(false);
- }
- private void onRefresh(final boolean forceRemote) {
- MessagingController.getInstance(getApplication()).listFolders(mAccount, forceRemote, mAdapter.mListener);
- }
- private void onEditPrefs() {
- Prefs.actionPrefs(this);
- }
- private void onEditAccount() {
- AccountSettings.actionSettings(this, mAccount);
- }
- private void onAccounts() {
- Accounts.listAccounts(this);
- finish();
- }
- private void onEmptyTrash(final Account account) {
- mHandler.dataChanged();
- MessagingController.getInstance(getApplication()).emptyTrash(account, null);
- }
- private void onClearFolder(Account account, String folderName) {
- // There has to be a cheaper way to get at the localFolder object than this
- LocalFolder localFolder = null;
- try {
- if (account == null || folderName == null || !account.isAvailable(MessageList.this)) {
- Log.i(K9.LOG_TAG, "not clear folder of unavailable account");
- return;
- }
- localFolder = account.getLocalStore().getFolder(folderName);
- localFolder.open(Folder.OPEN_MODE_RW);
- localFolder.clearAllMessages();
- } catch (Exception e) {
- Log.e(K9.LOG_TAG, "Exception while clearing folder", e);
- } finally {
- if (localFolder != null) {
- localFolder.close();
- }
- }
- onRefresh(!REFRESH_REMOTE);
- }
- private void sendMail(Account account) {
- MessagingController.getInstance(getApplication()).sendPendingMessages(account, mAdapter.mListener);
- }
- @Override
- public boolean onSearchRequested() {
- Bundle appData = new Bundle();
- appData.putString(MessageList.EXTRA_SEARCH_ACCOUNT, mAccount.getUuid());
- startSearch(null, false, appData, false);
- return true;
- }
- private void onOpenFolder(String folder) {
- LocalSearch search = new LocalSearch(folder);
- search.addAccountUuid(mAccount.getUuid());
- search.addAllowedFolder(folder);
- MessageList.actionDisplaySearch(this, search, false, false);
- }
- private void onCompact(Account account) {
- mHandler.workingAccount(R.string.compacting_account);
- MessagingController.getInstance(getApplication()).compact(account, null);
- }
- @Override public boolean onContextItemSelected(android.view.MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo();
- FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getItem(info.position);
- switch (item.getItemId()) {
- case R.id.clear_local_folder:
- onClearFolder(mAccount, folder.name);
- break;
- case R.id.refresh_folder:
- checkMail(folder);
- break;
- case R.id.folder_settings:
- FolderSettings.actionSettings(this, mAccount, folder.name);
- break;
- }
- return super.onContextItemSelected(item);
- }
- @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
- getMenuInflater().inflate(R.menu.folder_context, menu);
- FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getItem(info.position);
- menu.setHeaderTitle(folder.displayName);
- }
- class FolderListAdapter extends BaseAdapter implements Filterable {
- private ArrayList<FolderInfoHolder> mFolders = new ArrayList<FolderInfoHolder>();
- private List<FolderInfoHolder> mFilteredFolders = Collections.unmodifiableList(mFolders);
- private Filter mFilter = new FolderListFilter();
- public Object getItem(long position) {
- return getItem((int)position);
- }
- public Object getItem(int position) {
- return mFilteredFolders.get(position);
- }
- public long getItemId(int position) {
- return mFilteredFolders.get(position).folder.getName().hashCode() ;
- }
- public int getCount() {
- return mFilteredFolders.size();
- }
- @Override
- public boolean isEnabled(int item) {
- return true;
- }
- @Override
- public boolean areAllItemsEnabled() {
- return true;
- }
- private ActivityListener mListener = new ActivityListener() {
- @Override
- public void informUserOfStatus() {
- mHandler.dataChanged();
- }
- @Override
- public void accountStatusChanged(BaseAccount account, AccountStats stats) {
- if (!account.equals(mAccount)) {
- return;
- }
- if (stats == null) {
- return;
- }
- mUnreadMessageCount = stats.unreadMessageCount;
- }
- @Override
- public void listFoldersStarted(Account account) {
- if (account.equals(mAccount)) {
- mHandler.progress(true);
- }
- super.listFoldersStarted(account);
- }
- @Override
- public void listFoldersFailed(Account account, String message) {
- if (account.equals(mAccount)) {
- mHandler.progress(false);
- }
- super.listFoldersFailed(account, message);
- }
- @Override
- public void listFoldersFinished(Account account) {
- if (account.equals(mAccount)) {
- mHandler.progress(false);
- MessagingController.getInstance(getApplication()).refreshListener(mAdapter.mListener);
- mHandler.dataChanged();
- }
- super.listFoldersFinished(account);
- }
- @Override
- public void listFolders(Account account, Folder[] folders) {
- if (account.equals(mAccount)) {
- List<FolderInfoHolder> newFolders = new LinkedList<FolderInfoHolder>();
- List<FolderInfoHolder> topFolders = new LinkedList<FolderInfoHolder>();
- Account.FolderMode aMode = account.getFolderDisplayMode();
- Preferences prefs = Preferences.getPreferences(getApplication().getApplicationContext());
- for (Folder folder : folders) {
- try {
- folder.refresh(prefs);
- Folder.FolderClass fMode = folder.getDisplayClass();
- if ((aMode == Account.FolderMode.FIRST_CLASS && fMode != Folder.FolderClass.FIRST_CLASS)
- || (aMode == Account.FolderMode.FIRST_AND_SECOND_CLASS &&
- fMode != Folder.FolderClass.FIRST_CLASS &&
- fMode != Folder.FolderClass.SECOND_CLASS)
- || (aMode == Account.FolderMode.NOT_SECOND_CLASS && fMode == Folder.FolderClass.SECOND_CLASS)) {
- continue;
- }
- } catch (MessagingException me) {
- Log.e(K9.LOG_TAG, "Couldn't get prefs to check for displayability of folder " + folder.getName(), me);
- }
- FolderInfoHolder holder = null;
- int folderIndex = getFolderIndex(folder.getName());
- if (folderIndex >= 0) {
- holder = (FolderInfoHolder) getItem(folderIndex);
- }
- if (holder == null) {
- holder = new FolderInfoHolder(context, folder, mAccount, -1);
- } else {
- holder.populate(context, folder, mAccount, -1);
- }
- if (folder.isInTopGroup()) {
- topFolders.add(holder);
- } else {
- newFolders.add(holder);
- }
- }
- Collections.sort(newFolders);
- Collections.sort(topFolders);
- topFolders.addAll(newFolders);
- mHandler.newFolders(topFolders);
- }
- super.listFolders(account, folders);
- }
- @Override
- public void synchronizeMailboxStarted(Account account, String folder) {
- super.synchronizeMailboxStarted(account, folder);
- if (account.equals(mAccount)) {
- mHandler.progress(true);
- mHandler.folderLoading(folder, true);
- mHandler.dataChanged();
- }
- }
- @Override
- public void synchronizeMailboxFinished(Account account, String folder, int totalMessagesInMailbox, int numNewMessages) {
- super.synchronizeMailboxFinished(account, folder, totalMessagesInMailbox, numNewMessages);
- if (account.equals(mAccount)) {
- mHandler.progress(false);
- mHandler.folderLoading(folder, false);
- refreshFolder(account, folder);
- }
- }
- private void refreshFolder(Account account, String folderName) {
- // There has to be a cheaper way to get at the localFolder object than this
- Folder localFolder = null;
- try {
- if (account != null && folderName != null) {
- if (!account.isAvailable(MessageList.this)) {
- Log.i(K9.LOG_TAG, "not refreshing folder of unavailable account");
- return;
- }
- localFolder = account.getLocalStore().getFolder(folderName);
- FolderInfoHolder folderHolder = getFolder(folderName);
- if (folderHolder != null) {
- folderHolder.populate(context, localFolder, mAccount, -1);
- folderHolder.flaggedMessageCount = -1;
- mHandler.dataChanged();
- }
- }
- } catch (Exception e) {
- Log.e(K9.LOG_TAG, "Exception while populating folder", e);
- } finally {
- if (localFolder != null) {
- localFolder.close();
- }
- }
- }
- @Override
- public void synchronizeMailboxFailed(Account account, String folder, String message) {
- super.synchronizeMailboxFailed(account, folder, message);
- if (!account.equals(mAccount)) {
- return;
- }
- mHandler.progress(false);
- mHandler.folderLoading(folder, false);
- // String mess = truncateStatus(message);
- // mHandler.folderStatus(folder, mess);
- FolderInfoHolder holder = getFolder(folder);
- if (holder != null) {
- holder.lastChecked = 0;
- }
- mHandler.dataChanged();
- }
- @Override
- public void setPushActive(Account account, String folderName, boolean enabled) {
- if (!account.equals(mAccount)) {
- return;
- }
- FolderInfoHolder holder = getFolder(folderName);
- if (holder != null) {
- holder.pushActive = enabled;
- mHandler.dataChanged();
- }
- }
- @Override
- public void messageDeleted(Account account, String folder, Message message) {
- synchronizeMailboxRemovedMessage(account, folder, message);
- }
- @Override
- public void emptyTrashCompleted(Account account) {
- if (account.equals(mAccount)) {
- refreshFolder(account, mAccount.getTrashFolderName());
- }
- }
- @Override
- public void folderStatusChanged(Account account, String folderName, int unreadMessageCount) {
- if (account.equals(mAccount)) {
- refreshFolder(account, folderName);
- informUserOfStatus();
- }
- }
- @Override
- public void sendPendingMessagesCompleted(Account account) {
- super.sendPendingMessagesCompleted(account);
- if (account.equals(mAccount)) {
- refreshFolder(account, mAccount.getOutboxFolderName());
- }
- }
- @Override
- public void sendPendingMessagesStarted(Account account) {
- super.sendPendingMessagesStarted(account);
- if (account.equals(mAccount)) {
- mHandler.dataChanged();
- }
- }
- @Override
- public void sendPendingMessagesFailed(Account account) {
- super.sendPendingMessagesFailed(account);
- if (account.equals(mAccount)) {
- refreshFolder(account, mAccount.getOutboxFolderName());
- }
- }
- @Override
- public void accountSizeChanged(Account account, long oldSize, long newSize) {
- if (account.equals(mAccount)) {
- mHandler.accountSizeChanged(oldSize, newSize);
- }
- }
- };
- public int getFolderIndex(String folder) {
- FolderInfoHolder searchHolder = new FolderInfoHolder();
- searchHolder.name = folder;
- return mFilteredFolders.indexOf(searchHolder);
- }
- public FolderInfoHolder getFolder(String folder) {
- FolderInfoHolder holder = null;
- int index = getFolderIndex(folder);
- if (index >= 0) {
- holder = (FolderInfoHolder) getItem(index);
- if (holder != null) {
- return holder;
- }
- }
- return null;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- if (position <= getCount()) {
- return getItemView(position, convertView, parent);
- } else {
- Log.e(K9.LOG_TAG, "getView with illegal positon=" + position
- + " called! count is only " + getCount());
- return null;
- }
- }
- public View getItemView(int itemPosition, View convertView, ViewGroup parent) {
- FolderInfoHolder folder = (FolderInfoHolder) getItem(itemPosition);
- View view;
- if (convertView != null) {
- view = convertView;
- } else {
- view = mInflater.inflate(R.layout.folder_list_item, parent, false);
- }
- FolderViewHolder holder = (FolderViewHolder) view.getTag();
- if (holder == null) {
- holder = new FolderViewHolder();
- holder.folderName = (TextView) view.findViewById(R.id.folder_name);
- holder.newMessageCount = (TextView) view.findViewById(R.id.new_message_count);
- holder.flaggedMessageCount = (TextView) view.findViewById(R.id.flagged_message_count);
- holder.newMessageCountWrapper = (View) view.findViewById(R.id.new_message_count_wrapper);
- holder.flaggedMessageCountWrapper = (View) view.findViewById(R.id.flagged_message_count_wrapper);
- holder.newMessageCountIcon = (View) view.findViewById(R.id.new_message_count_icon);
- holder.flaggedMessageCountIcon = (View) view.findViewById(R.id.flagged_message_count_icon);
- holder.folderStatus = (TextView) view.findViewById(R.id.folder_status);
- holder.activeIcons = (RelativeLayout) view.findViewById(R.id.active_icons);
- holder.chip = view.findViewById(R.id.chip);
- holder.folderListItemLayout = (LinearLayout)view.findViewById(R.id.folder_list_item_layout);
- holder.rawFolderName = folder.name;
- view.setTag(holder);
- }
- if (folder == null) {
- return view;
- }
- final String folderStatus;
- if (folder.loading) {
- folderStatus = getString(R.string.status_loading);
- } else if (folder.status != null) {
- folderStatus = folder.status;
- } else if (folder.lastChecked != 0) {
- long now = System.currentTimeMillis();
- int flags = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
- CharSequence formattedDate;
- if (Math.abs(now - folder.lastChecked) > DateUtils.WEEK_IN_MILLIS) {
- formattedDate = getString(R.string.preposition_for_date,
- DateUtils.formatDateTime(context, folder.lastChecked, flags));
- } else {
- formattedDate = DateUtils.getRelativeTimeSpanString(folder.lastChecked,
- now, DateUtils.MINUTE_IN_MILLIS, flags);
- }
- folderStatus = getString(folder.pushActive
- ? R.string.last_refresh_time_format_with_push
- : R.string.last_refresh_time_format,
- formattedDate);
- } else {
- folderStatus = null;
- }
- holder.folderName.setText(folder.displayName);
- if (folderStatus != null) {
- holder.folderStatus.setText(folderStatus);
- holder.folderStatus.setVisibility(View.VISIBLE);
- } else {
- holder.folderStatus.setVisibility(View.GONE);
- }
- if(folder.unreadMessageCount == -1) {
- folder.unreadMessageCount = 0;
- try {
- folder.unreadMessageCount = folder.folder.getUnreadMessageCount();
- } catch (Exception e) {
- Log.e(K9.LOG_TAG, "Unable to get unreadMessageCount for " + mAccount.getDescription() + ":"
- + folder.name);
- }
- }
- if (folder.unreadMessageCount > 0) {
- holder.newMessageCount.setText(Integer.toString(folder.unreadMessageCount));
- holder.newMessageCountWrapper.setOnClickListener(
- createUnreadSearch(mAccount, folder));
- holder.newMessageCountWrapper.setVisibility(View.VISIBLE);
- holder.newMessageCountIcon.setBackgroundDrawable(
- mAccount.generateColorChip(false, false, false, false, false).drawable());
- } else {
- holder.newMessageCountWrapper.setVisibility(View.GONE);
- }
- if (folder.flaggedMessageCount == -1) {
- folder.flaggedMessageCount = 0;
- try {
- folder.flaggedMessageCount = folder.folder.getFlaggedMessageCount();
- } catch (Exception e) {
- Log.e(K9.LOG_TAG, "Unable to get flaggedMessageCount for " + mAccount.getDescription() + ":"
- + folder.name);
- }
- }
- if (K9.messageListStars() && folder.flaggedMessageCount > 0) {
- holder.flaggedMessageCount.setText(Integer.toString(folder.flaggedMessageCount));
- holder.flaggedMessageCountWrapper.setOnClickListener(
- createFlaggedSearch(mAccount, folder));
- holder.flaggedMessageCountWrapper.setVisibility(View.VISIBLE);
- holder.flaggedMessageCountIcon.setBackgroundDrawable(
- mAccount.generateColorChip(false, false, false, false,true).drawable());
- } else {
- holder.flaggedMessageCountWrapper.setVisibility(View.GONE);
- }
- holder.activeIcons.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- Toast toast = Toast.makeText(getApplication(), getString(R.string.tap_hint), Toast.LENGTH_SHORT);
- toast.show();
- }
- });
- holder.chip.setBackgroundColor(mAccount.getChipColor());
- mFontSizes.setViewTextSize(holder.folderName, mFontSizes.getFolderName());
- if (K9.wrapFolderNames()) {
- holder.folderName.setEllipsize(null);
- holder.folderName.setSingleLine(false);
- }
- else {
- holder.folderName.setEllipsize(TruncateAt.START);
- holder.folderName.setSingleLine(true);
- }
- mFontSizes.setViewTextSize(holder.folderStatus, mFontSizes.getFolderStatus());
- return view;
- }
- private OnClickListener createFlaggedSearch(Account account, FolderInfoHolder folder) {
- String searchTitle = getString(R.string.search_title,
- getString(R.string.message_list_title, account.getDescription(),
- folder.displayName),
- getString(R.string.flagged_modifier));
- LocalSearch search = new LocalSearch(searchTitle);
- search.and(Searchfield.FLAGGED, "1", Attribute.EQUALS);
- search.addAllowedFolder(folder.name);
- search.addAccountUuid(account.getUuid());
- return new FolderClickListener(search);
- }
- private OnClickListener createUnreadSearch(Account account, FolderInfoHolder folder) {
- String searchTitle = getString(R.string.search_title,
- getString(R.string.message_list_title, account.getDescription(),
- folder.displayName),
- getString(R.string.unread_modifier));
- LocalSearch search = new LocalSearch(searchTitle);
- search.and(Searchfield.READ, "1", Attribute.NOT_EQUALS);
- search.addAllowedFolder(folder.name);
- search.addAccountUuid(account.getUuid());
- return new FolderClickListener(search);
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- public boolean isItemSelectable(int position) {
- return true;
- }
- public void setFilter(final Filter filter) {
- this.mFilter = filter;
- }
- public Filter getFilter() {
- return mFilter;
- }
- /**
- * Filter to search for occurences of the search-expression in any place of the
- * folder-name instead of doing jsut a prefix-search.
- *
- * @author [email protected]
- */
- public class FolderListFilter extends Filter {
- private CharSequence mSearchTerm;
- public CharSequence getSearchTerm() {
- return mSearchTerm;
- }
- /**
- * Do the actual search.
- * {@inheritDoc}
- *
- * @see #publishResults(CharSequence, FilterResults)
- */
- @Override
- protected FilterResults performFiltering(CharSequence searchTerm) {
- mSearchTerm = searchTerm;
- FilterResults results = new FilterResults();
- Locale locale = Locale.getDefault();
- if ((searchTerm == null) || (searchTerm.length() == 0)) {
- ArrayList<FolderInfoHolder> list = new ArrayList<FolderInfoHolder>(mFolders);
- results.values = list;
- results.count = list.size();
- } else {
- final String searchTermString = searchTerm.toString().toLowerCase(locale);
- final String[] words = searchTermString.split(" ");
- final int wordCount = words.length;
- final ArrayList<FolderInfoHolder> newValues = new ArrayList<FolderInfoHolder>();
- for (final FolderInfoHolder value : mFolders) {
- if (value.displayName == null) {
- continue;
- }
- final String valueText = value.displayName.toLowerCase(locale);
- for (int k = 0; k < wordCount; k++) {
- if (valueText.contains(words[k])) {
- newValues.add(value);
- break;
- }
- }
- }
- results.values = newValues;
- results.count = newValues.size();
- }
- return results;
- }
- /**
- * Publish the results to the user-interface.
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- @Override
- protected void publishResults(CharSequence constraint, FilterResults results) {
- //noinspection unchecked
- mFilteredFolders = Collections.unmodifiableList((ArrayList<FolderInfoHolder>) results.values);
- // Send notification that the data set changed now
- notifyDataSetChanged();
- }
- }
- }
- static class FolderViewHolder {
- public TextView folderName;
- public TextView folderStatus;
- public TextView newMessageCount;
- public TextView flaggedMessageCount;
- public View newMessageCountIcon;
- public View flaggedMessageCountIcon;
- public View newMessageCountWrapper;
- public View flaggedMessageCountWrapper;
- public RelativeLayout activeIcons;
- public String rawFolderName;
- public View chip;
- public LinearLayout folderListItemLayout;
- }
- private class FolderClickListener implements OnClickListener {
- final LocalSearch search;
- FolderClickListener(LocalSearch search) {
- this.search = search;
- }
- @Override
- public void onClick(View v) {
- MessageList.actionDisplaySearch(MessageList.this, search, true, false);
- }
- }
- /**
- * Get references to existing fragments if the activity was restarted.
- */
- private void findFragments() {
- FragmentManager fragmentManager = getFragmentManager();
- mMessageListFragment = (MessageListFragment) fragmentManager
- .findFragmentById(R.id.message_list_container);
- mMessageViewFragment = (MessageViewFragment) fragmentManager
- .findFragmentById(R.id.message_view_container);
- }
- /**
- * Create fragment instances if necessary.
- *
- * @see #findFragments()
- */
- private void initializeFragments() {
- FragmentManager fragmentManager = getFragmentManager();
- fragmentManager.addOnBackStackChangedListener(this);
- boolean hasMessageListFragment = (mMessageListFragment != null);
- if (!hasMessageListFragment) {
- FragmentTransaction ft = fragmentManager.beginTransaction();
- mMessageListFragment = MessageListFragment.newInstance(mSearch,
- false, (K9.isThreadedViewEnabled() && !mNoThreading));
- ft.add(R.id.message_list_container, mMessageListFragment);
- ft.commit();
- }
- // Check if the fragment wasn't restarted and has a MessageReference in
- // the arguments. If
- // so, open the referenced message.
- if (!hasMessageListFragment && mMessageViewFragment == null
- && mMessageReference != null) {
- openMessage(mMessageReference);
- }
- }
- /**
- * Set the initial display mode (message list, message view, or split view).
- *
- * <p>
- * <strong>Note:</strong> This method has to be called after
- * {@link #findFragments()} because the result depends on the availability
- * of a {@link MessageViewFragment} instance.
- * </p>
- *
- * @param savedInstanceState
- * The saved instance state that was passed to the activity as
- * argument to {@link #onCreate(Bundle)}. May be {@code null}.
- */
- private void initializeDisplayMode(Bundle savedInstanceState) {
- if (useSplitView()) {
- mDisplayMode = DisplayMode.SPLIT_VIEW;
- return;
- }
- if (savedInstanceState != null) {
- DisplayMode savedDisplayMode = (DisplayMode) savedInstanceState
- .getSerializable(STATE_DISPLAY_MODE);
- if (savedDisplayMode != DisplayMode.SPLIT_VIEW) {
- mDisplayMode = savedDisplayMode;
- return;
- }
- }
- if (mMessageViewFragment != null || mMessageReference != null) {
- mDisplayMode = DisplayMode.MESSAGE_VIEW;
- } else {
- mDisplayMode = DisplayMode.MESSAGE_LIST;
- }
- }
- private boolean useSplitView() {
- SplitViewMode splitViewMode = K9.getSplitViewMode();
- int orientation = getResources().getConfiguration().orientation;
- return (splitViewMode == SplitViewMode.ALWAYS || (splitViewMode == SplitViewMode.WHEN_IN_LANDSCAPE && orientation == Configuration.ORIENTATION_LANDSCAPE));
- }
- private void initializeLayout() {
- mMessageViewContainer = (ViewGroup) findViewById(R.id.message_view_container);
- mMessageViewPlaceHolder = getLayoutInflater().inflate(
- R.layout.empty_message_view, null);
- }
- private void displayViews() {
- switch (mDisplayMode) {
- case MESSAGE_LIST: {
- showMessageList();
- break;
- }
- case MESSAGE_VIEW: {
- showMessageView();
- break;
- }
- case SPLIT_VIEW: {
- mMessageListWasDisplayed = true;
- if (mMessageViewFragment == null) {
- showMessageViewPlaceHolder();
- } else {
- MessageReference activeMessage = mMessageViewFragment
- .getMessageReference();
- if (activeMessage != null) {
- mMessageListFragment.setActiveMessage(activeMessage);
- }
- }
- break;
- }
- }
- }
- private boolean decodeExtras(Intent intent) {
- String action = intent.getAction();
- if (Intent.ACTION_VIEW.equals(action) && intent.getData() != null) {
- Uri uri = intent.getData();
- List<String> segmentList = uri.getPathSegments();
- String accountId = segmentList.get(0);
- Collection<Account> accounts = Preferences.getPreferences(this)
- .getAvailableAccounts();
- for (Account account : accounts) {
- if (String.valueOf(account.getAccountNumber())
- .equals(accountId)) {
- mMessageReference = new MessageReference();
- mMessageReference.accountUuid = account.getUuid();
- mMessageReference.folderName = segmentList.get(1);
- mMessageReference.uid = segmentList.get(2);
- break;
- }
- }
- } else if (ACTION_SHORTCUT.equals(action)) {
- // Handle shortcut intents
- String specialFolder = intent.getStringExtra(EXTRA_SPECIAL_FOLDER);
- if (SearchAccount.UNIFIED_INBOX.equals(specialFolder)) {
- mSearch = SearchAccount.createUnifiedInboxAccount(this)
- .getRelatedSearch();
- } else if (SearchAccount.ALL_MESSAGES.equals(specialFolder)) {
- mSearch = SearchAccount.createAllMessagesAccount(this)
- .getRelatedSearch();
- }
- } else if (intent.getStringExtra(SearchManager.QUERY) != null) {
- // check if this intent comes from the system search ( remote )
- if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
- // Query was received from Search Dialog
- String query = intent.getStringExtra(SearchManager.QUERY);
- mSearch = new LocalSearch(getString(R.string.search_results));
- mSearch.setManualSearch(true);
- mNoThreading = true;
- mSearch.or(new SearchCondition(Searchfield.SENDER,
- Attribute.CONTAINS, query));
- mSearch.or(new SearchCondition(Searchfield.SUBJECT,
- Attribute.CONTAINS, query));
- mSearch.or(new SearchCondition(Searchfield.MESSAGE_CONTENTS,
- Attribute.CONTAINS, query));
- Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
- if (appData != null) {
- mSearch.addAccountUuid(appData
- .getString(EXTRA_SEARCH_ACCOUNT));
- // searches started from a folder list activity will provide
- // an account, but no folder
- if (appData.getString(EXTRA_SEARCH_FOLDER) != null) {
- mSearch.addAllowedFolder(appData
- .getString(EXTRA_SEARCH_FOLDER));
- }
- } else {
- mSearch.addAccountUuid(LocalSearch.ALL_ACCOUNTS);
- }
- }
- } else {
- // regular LocalSearch object was passed
- mSearch = intent.getParcelableExtra(EXTRA_SEARCH);
- mNoThreading = intent.getBooleanExtra(EXTRA_NO_THREADING, false);
- }
- if (mMessageReference == null) {
- mMessageReference = intent
- .getParcelableExtra(EXTRA_MESSAGE_REFERENCE);
- }
- if (mMessageReference != null) {
- mSearch = new LocalSearch();
- mSearch.addAccountUuid(mMessageReference.accountUuid);
- mSearch.addAllowedFolder(mMessageReference.folderName);
- }
- if (mSearch == null) {
- // We've most likely been started by an old unread widget
- String accountUuid = intent.getStringExtra("account");
- String folderName = intent.getStringExtra("folder");
- mSearch = new LocalSearch(folderName);
- mSearch.addAccountUuid((accountUuid == null) ? "invalid"
- : accountUuid);
- if (folderName != null) {
- mSearch.addAllowedFolder(folderName);
- }
- }
- Preferences prefs = Preferences.getPreferences(getApplicationContext());
- String[] accountUuids = mSearch.getAccountUuids();
- if (mSearch.searchAllAccounts()) {
- Account[] accounts = prefs.getAccounts();
- mSingleAccountMode = (accounts.length == 1);
- if (mSingleAccountMode) {
- mAccount = accounts[0];
- }
- } else {
- mSingleAccountMode = (accountUuids.length == 1);
- if (mSingleAccountMode) {
- mAccount = prefs.getAccount(accountUuids[0]);
- }
- }
- mSingleFolderMode = mSingleAccountMode
- && (mSearch.getFolderNames().size() == 1);
- if (mSingleAccountMode
- && (mAccount == null || !mAccount.isAvailable(this))) {
- Log.i(K9.LOG_TAG, "not opening MessageList of unavailable account");
- onAccountUnavailable();
- return false;
- }
- if (mSingleFolderMode) {
- mFolderName = mSearch.getFolderNames().get(0);
- }
- // now we know if we are in single account mode and need a subtitle
- mActionBarSubTitle.setVisibility((!mSingleFolderMode) ? View.GONE
- : View.VISIBLE);
- return true;
- }
- @Override
- public void onPause() {
- super.onPause();
- StorageManager.getInstance(getApplication()).removeListener(
- mStorageListener);
- MessagingController.getInstance(getApplication()).removeListener(mAdapter.mListener);
- mAdapter.mListener.onPause(this);
- }
- @Override
- public void onResume() {
- super.onResume();
- if (!mAccount.isAvailable(this)) {
- Log.i(K9.LOG_TAG, "account unavaliabale, not showing folder-list but account-list");
- Accounts.listAccounts(this);
- finish();
- return;
- }
- if (mAdapter == null)
- initializeActivityView();
- MessagingController.getInstance(getApplication()).addListener(mAdapter.mListener);
- //mAccount.refresh(Preferences.getPreferences(this));
- MessagingController.getInstance(getApplication()).getAccountStats(this, mAccount, mAdapter.mListener);
- onRefresh(!REFRESH_REMOTE);
- MessagingController.getInstance(getApplication()).notifyAccountCancel(this, mAccount);
- mAdapter.mListener.onResume(this);
- if (!(this instanceof Search)) {
- // necessary b/c no guarantee Search.onStop will be called before
- // MessageList.onResume
- // when returning from search results
- Search.setActive(false);
- }
- if (mAccount != null && !mAccount.isAvailable(this)) {
- onAccountUnavailable();
- return;
- }
- StorageManager.getInstance(getApplication()).addListener(
- mStorageListener);
- }
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putSerializable(STATE_DISPLAY_MODE, mDisplayMode);
- outState.putBoolean(STATE_MESSAGE_LIST_WAS_DISPLAYED,
- mMessageListWasDisplayed);
- }
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- mMessageListWasDisplayed = savedInstanceState
- .getBoolean(STATE_MESSAGE_LIST_WAS_DISPLAYED);
- }
- private void initializeActionBar() {
- mActionBar = getActionBar();
- mActionBar.setDisplayShowCustomEnabled(true);
- mActionBar.setCustomView(R.layout.actionbar_custom);
- View customView = mActionBar.getCustomView();
- mActionBarMessageList = customView
- .findViewById(R.id.actionbar_message_list);
- mActionBarMessageView = customView
- .findViewById(R.id.actionbar_message_view);
- mActionBarSubject = (MessageTitleView) customView
- .findViewById(R.id.message_title_view);
- mActionBarTitle = (TextView) customView
- .findViewById(R.id.actionbar_title_first);
- mActionBarSubTitle = (TextView) customView
- .findViewById(R.id.actionbar_title_sub);
- mActionBarUnread = (TextView) customView
- .findViewById(R.id.actionbar_unread_count);
- mActionBarProgress = (ProgressBar) customView
- .findViewById(R.id.actionbar_progress);
- mActionButtonIndeterminateProgress = getLayoutInflater().inflate(
- R.layout.actionbar_indeterminate_progress_actionview, null);
- mActionBar.setDisplayHomeAsUpEnabled(true);
- }
- public void setupGestureDetector(OnSwipeGestureListener listener) {
- mBase.setupGestureDetector(listener);
- }
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- boolean ret = false;
- if (KeyEvent.ACTION_DOWN == event.getAction()) {
- ret = onCustomKeyDown(event.getKeyCode(), event);
- }
- if (!ret) {
- ret = super.dispatchKeyEvent(event);
- }
- return ret;
- }
- @Override
- public void onBackPressed() {
- if (mDisplayMode == DisplayMode.MESSAGE_VIEW
- && mMessageListWasDisplayed) {
- showMessageList();
- } else {
- super.onBackPressed();
- }
- }
- /**
- * Handle hotkeys
- *
- * <p>
- * This method is called by {@link #dispatchKeyEvent(KeyEvent)} before any
- * view had the chance to consume this key event.
- * </p>
- *
- * @param keyCode
- * The value in {@code event.getKeyCode()}.
- * @param event
- * Description of the key event.
- *
- * @return {@code true} if this event was consumed.
- */
- public boolean onCustomKeyDown(final int keyCode, final KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_VOLUME_UP: {
- if (mMessageViewFragment != null
- && mDisplayMode != DisplayMode.MESSAGE_LIST
- && K9.useVolumeKeysForNavigationEnabled()) {
- showPreviousMessage();
- return true;
- } else if (mDisplayMode != DisplayMode.MESSAGE_VIEW
- && K9.useVolumeKeysForListNavigationEnabled()) {
- mMessageListFragment.onMoveUp();
- return true;
- }
- break;
- }
- case KeyEvent.KEYCODE_VOLUME_DOWN: {
- if (mMessageViewFragment != null
- && mDisplayMode != DisplayMode.MESSAGE_LIST
- && K9.useVolumeKeysForNavigationEnabled()) {
- showNextMessage();
- return true;
- } else if (mDisplayMode != DisplayMode.MESSAGE_VIEW
- && K9.useVolumeKeysForListNavigationEnabled()) {
- mMessageListFragment.onMoveDown();
- return true;
- }
- break;
- }
- case KeyEvent.KEYCODE_C: {
- mMessageListFragment.onCompose();
- return true;
- }
- case KeyEvent.KEYCODE_Q: {
- if (mMessageListFragment != null
- && mMessageListFragment.isSingleAccountMode()) {
- onShowFolderList();
- }
- return true;
- }
- case KeyEvent.KEYCODE_O: {
- mMessageListFragment.onCycleSort();
- return true;
- }
- case KeyEvent.KEYCODE_I: {
- mMessageListFragment.onReverseSort();
- return true;
- }
- case KeyEvent.KEYCODE_DEL:
- case KeyEvent.KEYCODE_D: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onDelete();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onDelete();
- }
- return true;
- }
- case KeyEvent.KEYCODE_S: {
- mMessageListFragment.toggleMessageSelect();
- return true;
- }
- case KeyEvent.KEYCODE_G: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onToggleFlagged();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onToggleFlagged();
- }
- return true;
- }
- case KeyEvent.KEYCODE_M: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onMove();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onMove();
- }
- return true;
- }
- case KeyEvent.KEYCODE_V: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onArchive();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onArchive();
- }
- return true;
- }
- case KeyEvent.KEYCODE_Y: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onCopy();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onCopy();
- }
- return true;
- }
- case KeyEvent.KEYCODE_Z: {
- if (mDisplayMode == DisplayMode.MESSAGE_LIST) {
- mMessageListFragment.onToggleRead();
- } else if (mMessageViewFragment != null) {
- mMessageViewFragment.onToggleRead();
- }
- return true;
- }
- case KeyEvent.KEYCODE_F: {
- if (mMessageViewFragment != null) {
- mMessageViewFragment.onForward();
- }
- return true;
- }
- case KeyEvent.KEYCODE_A: {
- if (mMessageViewFragment != null) {
- mMessageViewFragment.onReplyAll();
- }
- return true;
- }
- case KeyEvent.KEYCODE_R: {
- if (mMessageViewFragment != null) {
- mMessageViewFragment.onReply();
- }
- return true;
- }
- case KeyEvent.KEYCODE_J:
- case KeyEvent.KEYCODE_P: {
- if (mMessageViewFragment != null) {
- showPreviousMessage();
- }
- return true;
- }
- case KeyEvent.KEYCODE_N:
- case KeyEvent.KEYCODE_K: {
- if (mMessageViewFragment != null) {
- showNextMessage();
- }
- return true;
- }
- /*
- * FIXME case KeyEvent.KEYCODE_Z: { mMessageViewFragment.zoom(event);
- * return true; }
- */
- case KeyEvent.KEYCODE_H: {
- Toast toast = Toast.makeText(this, R.string.message_list_help_key,
- Toast.LENGTH_LONG);
- toast.show();
- return true;
- }
- }
- return false;
- }
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- // Swallow these events too to avoid the audible notification of a
- // volume change
- if (K9.useVolumeKeysForListNavigationEnabled()) {
- if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP)
- || (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) {
- if (K9.DEBUG)
- Log.v(K9.LOG_TAG, "Swallowed key up.");
- return true;
- }
- }
- return super.onKeyUp(keyCode, event);
- }
- private void onShowFolderList() {
- FolderList.actionHandleAccount(this, mAccount);
- finish();
- }
- @Override
- public boolean onOptionsItemSelected(android.view.MenuItem item) {
- int itemId = item.getItemId();
- switch (itemId) {
- case android.R.id.home: {
- goBack();
- return true;
- }
- case R.id.compose: {
- mMessageListFragment.onCompose();
- return true;
- }
- case R.id.toggle_message_view_theme: {
- onToggleTheme();
- return true;
- }
- // MessageList
- case R.id.check_mail: {
- mMessageListFragment.checkMail();
- return true;
- }
- case R.id.set_sort_date: {
- mMessageListFragment.changeSort(SortType.SORT_DATE);
- return true;
- }
- case R.id.set_sort_arrival: {
- mMessageListFragment.changeSort(SortType.SORT_ARRIVAL);
- return true;
- }
- case R.id.set_sort_subject: {
- mMessageListFragment.changeSort(SortType.SORT_SUBJECT);
- return true;
- }
- case R.id.set_sort_sender: {
- mMessageListFragment.changeSort(SortType.SORT_SENDER);
- return true;
- }
- case R.id.set_sort_flag: {
- mMessageListFragment.changeSort(SortType.SORT_FLAGGED);
- return true;
- }
- case R.id.set_sort_unread: {
- mMessageListFragment.changeSort(SortType.SORT_UNREAD);
- return true;
- }
- case R.id.set_sort_attach: {
- mMessageListFragment.changeSort(SortType.SORT_ATTACHMENT);
- return true;
- }
- case R.id.select_all: {
- mMessageListFragment.selectAll();
- return true;
- }
- case R.id.app_settings: {
- onEditPrefs();
- return true;
- }
- case R.id.account_settings: {
- onEditAccount();
- return true;
- }
- case R.id.search: {
- mMessageListFragment.onSearchRequested();
- return true;
- }
- case R.id.search_remote: {
- mMessageListFragment.onRemoteSearch();
- return true;
- }
- case R.id.mark_all_as_read: {
- mMessageListFragment.markAllAsRead();
- return true;
- }
- case R.id.show_folder_list: {
- onShowFolderList();
- return true;
- }
- // MessageView
- case R.id.next_message: {
- showNextMessage();
- return true;
- }
- case R.id.previous_message: {
- showPreviousMessage();
- return true;
- }
- case R.id.delete: {
- mMessageViewFragment.onDelete();
- return true;
- }
- case R.id.reply: {
- mMessageViewFragment.onReply();
- return true;
- }
- case R.id.reply_all: {
- mMessageViewFragment.onReplyAll();
- return true;
- }
- case R.id.forward: {
- mMessageViewFragment.onForward();
- return true;
- }
- case R.id.share: {
- mMessageViewFragment.onSendAlternate();
- return true;
- }
- case R.id.toggle_unread: {
- mMessageViewFragment.onToggleRead();
- return true;
- }
- case R.id.archive:
- case R.id.refile_archive: {
- mMessageViewFragment.onArchive();
- return true;
- }
- case R.id.spam:
- case R.id.refile_spam: {
- mMessageViewFragment.onSpam();
- return true;
- }
- case R.id.move:
- case R.id.refile_move: {
- mMessageViewFragment.onMove();
- return true;
- }
- case R.id.copy:
- case R.id.refile_copy: {
- mMessageViewFragment.onCopy();
- return true;
- }
- case R.id.select_text: {
- mMessageViewFragment.onSelectText();
- return true;
- }
- case R.id.show_headers:
- case R.id.hide_headers: {
- mMessageViewFragment.onToggleAllHeadersView();
- updateMenu();
- return true;
- }
- }
- if (!mSingleFolderMode) {
- // None of the options after this point are "safe" for search
- // results
- // TODO: This is not true for "unread" and "starred" searches in
- // regular folders
- return false;
- }
- switch (itemId) {
- case R.id.send_messages: {
- mMessageListFragment.onSendPendingMessages();
- return true;
- }
- case R.id.folder_settings: {
- if (mFolderName != null) {
- FolderSettings.actionSettings(this, mAccount, mFolderName);
- }
- return true;
- }
- case R.id.expunge: {
- mMessageListFragment.onExpunge();
- return true;
- }
- default: {
- return super.onOptionsItemSelected(item);
- }
- }
- }
- @Override
- public boolean onCreateOptionsMenu(android.view.Menu menu) {
- getMenuInflater().inflate(R.menu.message_list_option, menu);
- mMenu = menu;
- mMenuButtonCheckMail = menu.findItem(R.id.check_mail);
- return true;
- }
- public boolean onPrepareOptionsMenu(Menu menu) {
- configureMenu(menu);
- return true;
- }
- /**
- * Hide menu items not appropriate for the current context.
- *
- * <p>
- * <strong>Note:</strong> Please adjust the comments in
- * {@code res/menu/message_list_option.xml} if you change the visibility of
- * a menu item in this method.
- * </p>
- *
- * @param mMenu2
- * The {@link Menu} instance that should be modified. May be
- * {@code null}; in that case the method does nothing and
- * immediately returns.
- */
- private void configureMenu(android.view.Menu mMenu2) {
- if (mMenu2 == null) {
- return;
- }
- // Set visibility of account/folder settings menu items
- if (mMessageListFragment == null) {
- mMenu2.findItem(R.id.account_settings).setVisible(false);
- mMenu2.findItem(R.id.folder_settings).setVisible(false);
- } else {
- mMenu2.findItem(R.id.account_settings).setVisible(
- mMessageListFragment.isSingleAccountMode());
- mMenu2.findItem(R.id.folder_settings).setVisible(
- mMessageListFragment.isSingleFolderMode());
- }
- /*
- * Set visibility of menu items related to the message view
- */
- if (mDisplayMode == DisplayMode.MESSAGE_LIST
- || mMessageViewFragment == null
- || !mMessageViewFragment.isInitialized()) {
- mMenu2.findItem(R.id.next_message).setVisible(false);
- mMenu2.findItem(R.id.previous_message).setVisible(false);
- mMenu2.findItem(R.id.single_message_options).setVisible(false);
- mMenu2.findItem(R.id.delete).setVisible(false);
- mMenu2.findItem(R.id.compose).setVisible(false);
- mMenu2.findItem(R.id.archive).setVisible(false);
- mMenu2.findItem(R.id.move).setVisible(false);
- mMenu2.findItem(R.id.copy).setVisible(false);
- mMenu2.findItem(R.id.spam).setVisible(false);
- mMenu2.findItem(R.id.refile).setVisible(false);
- mMenu2.findItem(R.id.toggle_unread).setVisible(false);
- mMenu2.findItem(R.id.select_text).setVisible(false);
- mMenu2.findItem(R.id.toggle_message_view_theme).setVisible(false);
- mMenu2.findItem(R.id.show_headers).setVisible(false);
- mMenu2.findItem(R.id.hide_headers).setVisible(false);
- } else {
- // hide prev/next buttons in split mode
- if (mDisplayMode != DisplayMode.MESSAGE_VIEW) {
- mMenu2.findItem(R.id.next_message).setVisible(false);
- mMenu2.findItem(R.id.previous_message).setVisible(false);
- } else {
- MessageReference ref = mMessageViewFragment
- .getMessageReference();
- boolean initialized = (mMessageListFragment != null && mMessageListFragment
- .isLoadFinished());
- boolean canDoPrev = (initialized && !mMessageListFragment
- .isFirst(ref));
- boolean canDoNext = (initialized && !mMessageListFragment
- .isLast(ref));
- MenuItem prev = mMenu2.findItem(R.id.previous_message);
- prev.setEnabled(canDoPrev);
- //prev.getIcon().setAlpha(canDoPrev ? 255 : 127);
- //MenuItem next = menu.findItem(R.id.next_message);
- //next.setEnabled(canDoNext);
- //next.getIcon().setAlpha(canDoNext ? 255 : 127);
- }
- MenuItem toggleTheme = mMenu2
- .findItem(R.id.toggle_message_view_theme);
- if (K9.useFixedMessageViewTheme()) {
- toggleTheme.setVisible(false);
- } else {
- // Set title of menu item to switch to dark/light theme
- if (K9.getK9MessageViewTheme() == K9.Theme.DARK) {
- toggleTheme
- .setTitle(R.string.message_view_theme_action_light);
- } else {
- toggleTheme
- .setTitle(R.string.message_view_theme_action_dark);
- }
- toggleTheme.setVisible(true);
- }
- // Set title of menu item to toggle the read state of the currently
- // displayed message
- if (mMessageViewFragment.isMessageRead()) {
- mMenu2.findItem(R.id.toggle_unread).setTitle(
- R.string.mark_as_unread_action);
- } else {
- mMenu2.findItem(R.id.toggle_unread).setTitle(
- R.string.mark_as_read_action);
- }
- // Jellybean has built-in long press selection support
- mMenu2.findItem(R.id.select_text).setVisible(
- Build.VERSION.SDK_INT < 16);
- mMenu2.findItem(R.id.delete).setVisible(
- K9.isMessageViewDeleteActionVisible());
- /*
- * Set visibility of copy, move, archive, spam in action bar and
- * refile submenu
- */
- if (mMessageViewFragment.isCopyCapable()) {
- mMenu2.findItem(R.id.copy).setVisible(
- K9.isMessageViewCopyActionVisible());
- mMenu2.findItem(R.id.refile_copy).setVisible(true);
- } else {
- mMenu2.findItem(R.id.copy).setVisible(false);
- mMenu2.findItem(R.id.refile_copy).setVisible(false);
- }
- if (mMessageViewFragment.isMoveCapable()) {
- boolean canMessageBeArchived = mMessageViewFragment
- .canMessageBeArchived();
- boolean canMessageBeMovedToSpam = mMessageViewFragment
- .canMessageBeMovedToSpam();
- mMenu2.findItem(R.id.move).setVisible(
- K9.isMessageViewMoveActionVisible());
- mMenu2.findItem(R.id.archive).setVisible(
- canMessageBeArchived
- && K9.isMessageViewArchiveActionVisible());
- mMenu2.findItem(R.id.spam).setVisible(
- canMessageBeMovedToSpam
- && K9.isMessageViewSpamActionVisible());
- mMenu2.findItem(R.id.refile_move).setVisible(true);
- mMenu2.findItem(R.id.refile_archive).setVisible(
- canMessageBeArchived);
- mMenu2.findItem(R.id.refile_spam).setVisible(
- canMessageBeMovedToSpam);
- } else {
- mMenu2.findItem(R.id.move).setVisible(false);
- mMenu2.findItem(R.id.archive).setVisible(false);
- mMenu2.findItem(R.id.spam).setVisible(false);
- mMenu2.findItem(R.id.refile).setVisible(false);
- }
- if (mMessageViewFragment.allHeadersVisible()) {
- mMenu2.findItem(R.id.show_headers).setVisible(false);
- } else {
- mMenu2.findItem(R.id.hide_headers).setVisible(false);
- }
- }
- /*
- * Set visibility of menu items related to the message list
- */
- // Hide both search menu items by default and enable one when
- // appropriate
- mMenu2.findItem(R.id.search).setVisible(false);
- mMenu2.findItem(R.id.search_remote).setVisible(false);
- if (mDisplayMode == DisplayMode.MESSAGE_VIEW
- || mMessageListFragment == null
- || !mMessageListFragment.isInitialized()) {
- mMenu2.findItem(R.id.check_mail).setVisible(false);
- mMenu2.findItem(R.id.set_sort).setVisible(false);
- mMenu2.findItem(R.id.select_all).setVisible(false);
- mMenu2.findItem(R.id.send_messages).setVisible(false);
- mMenu2.findItem(R.id.expunge).setVisible(false);
- mMenu2.findItem(R.id.mark_all_as_read).setVisible(false);
- mMenu2.findItem(R.id.show_folder_list).setVisible(false);
- } else {
- mMenu2.findItem(R.id.set_sort).setVisible(true);
- mMenu2.findItem(R.id.select_all).setVisible(true);
- mMenu2.findItem(R.id.compose).setVisible(true);
- mMenu2.findItem(R.id.mark_all_as_read).setVisible(
- mMessageListFragment.isMarkAllAsReadSupported());
- if (!mMessageListFragment.isSingleAccountMode()) {
- mMenu2.findItem(R.id.expunge).setVisible(false);
- mMenu2.findItem(R.id.send_messages).setVisible(false);
- mMenu2.findItem(R.id.show_folder_list).setVisible(false);
- } else {
- mMenu2.findItem(R.id.send_messages).setVisible(
- mMessageListFragment.isOutbox());
- mMenu2.findItem(R.id.expunge).setVisible(
- mMessageListFragment.isRemoteFolder()
- && mMessageListFragment
- .isAccountExpungeCapable());
- mMenu2.findItem(R.id.show_folder_list).setVisible(true);
- }
- mMenu2.findItem(R.id.check_mail).setVisible(
- mMessageListFragment.isCheckMailSupported());
- // If this is an explicit local search, show the option to search on
- // the server
- if (!mMessageListFragment.isRemoteSearch()
- && mMessageListFragment.isRemoteSearchAllowed()) {
- mMenu2.findItem(R.id.search_remote).setVisible(true);
- } else if (!mMessageListFragment.isManualSearch()) {
- mMenu2.findItem(R.id.search).setVisible(true);
- }
- }
- }
- protected void onAccountUnavailable() {
- finish();
- // TODO inform user about account unavailability using Toast
- Accounts.listAccounts(this);
- }
- public void setActionBarTitle(String title) {
- mActionBarTitle.setText(title);
- }
- public void setActionBarSubTitle(String subTitle) {
- mActionBarSubTitle.setText(subTitle);
- }
- public void setActionBarUnread(int unread) {
- if (unread == 0) {
- mActionBarUnread.setVisibility(View.GONE);
- } else {
- mActionBarUnread.setVisibility(View.VISIBLE);
- mActionBarUnread.setText(Integer.toString(unread));
- }
- }
- @Override
- public void setMessageListTitle(String title) {
- setActionBarTitle(title);
- }
- @Override
- public void setMessageListSubTitle(String subTitle) {
- setActionBarSubTitle(subTitle);
- }
- @Override
- public void setUnreadCount(int unread) {
- setActionBarUnread(unread);
- }
- @Override
- public void setMessageListProgress(int progress) {
- setProgress(progress);
- }
- @Override
- public void openMessage(MessageReference messageReference) {
- Preferences prefs = Preferences.getPreferences(getApplicationContext());
- Account account = prefs.getAccount(messageReference.accountUuid);
- String folderName = messageReference.folderName;
- if (folderName.equals(account.getDraftsFolderName())) {
- MessageCompose.actionEditDraft(this, messageReference);
- } else {
- mMessageViewContainer.removeView(mMessageViewPlaceHolder);
- if (mMessageListFragment != null) {
- mMessageListFragment.setActiveMessage(messageReference);
- }
- MessageViewFragment fragment = MessageViewFragment
- .newInstance(messageReference);
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.replace(R.id.message_view_container, fragment);
- mMessageViewFragment = fragment;
- ft.commit();
- if (mDisplayMode != DisplayMode.SPLIT_VIEW) {
- showMessageView();
- }
- }
- }
- @Override
- public void onResendMessage(Message message) {
- MessageCompose.actionEditDraft(this, message.makeMessageReference());
- }
- @Override
- public void onForward(Message message) {
- MessageCompose.actionForward(this, message.getFolder().getAccount(),
- message, null);
- }
- @Override
- public void onReply(Message message) {
- MessageCompose.actionReply(this, message.getFolder().getAccount(),
- message, false, null);
- }
- @Override
- public void onReplyAll(Message message) {
- MessageCompose.actionReply(this, message.getFolder().getAccount(),
- message, true, null);
- }
- @Override
- public void onCompose(Account account) {
- MessageCompose.actionCompose(this, account);
- }
- @Override
- public void showMoreFromSameSender(String senderAddress) {
- LocalSearch tmpSearch = new LocalSearch("From " + senderAddress);
- tmpSearch.addAccountUuids(mSearch.getAccountUuids());
- tmpSearch.and(Searchfield.SENDER, senderAddress, Attribute.CONTAINS);
- MessageListFragment fragment = MessageListFragment.newInstance(
- tmpSearch, false, false);
- addMessageListFragment(fragment, true);
- }
- @Override
- public void onBackStackChanged() {
- findFragments();
- if (mDisplayMode == DisplayMode.SPLIT_VIEW) {
- showMessageViewPlaceHolder();
- }
- configureMenu(mMenu);
- }
- @Override
- public void onSwipeRightToLeft(MotionEvent e1, MotionEvent e2) {
- if (mMessageListFragment != null
- && mDisplayMode != DisplayMode.MESSAGE_VIEW) {
- mMessageListFragment.onSwipeRightToLeft(e1, e2);
- }
- }
- @Override
- public void onSwipeLeftToRight(MotionEvent e1, MotionEvent e2) {
- if (mMessageListFragment != null
- && mDisplayMode != DisplayMode.MESSAGE_VIEW) {
- mMessageListFragment.onSwipeLeftToRight(e1, e2);
- }
- }
- private final class StorageListenerImplementation implements
- StorageManager.StorageListener {
- @Override
- public void onUnmount(String providerId) {
- if (mAccount != null
- && providerId.equals(mAccount.getLocalStorageProviderId())) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- onAccountUnavailable();
- }
- });
- }
- }
- @Override
- public void onMount(String providerId) {
- // no-op
- }
- }
- private void addMessageListFragment(MessageListFragment fragment,
- boolean addToBackStack) {
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.replace(R.id.message_list_container, fragment);
- if (addToBackStack)
- ft.addToBackStack(null);
- mMessageListFragment = fragment;
- int transactionId = ft.commit();
- if (transactionId >= 0 && mFirstBackStackId < 0) {
- mFirstBackStackId = transactionId;
- }
- }
- @Override
- public boolean startSearch(Account account, String folderName) {
- // If this search was started from a MessageList of a single folder,
- // pass along that folder info
- // so that we can enable remote search.
- if (account != null && folderName != null) {
- final Bundle appData = new Bundle();
- appData.putString(EXTRA_SEARCH_ACCOUNT, account.getUuid());
- appData.putString(EXTRA_SEARCH_FOLDER, folderName);
- startSearch(null, false, appData, false);
- } else {
- // TODO Handle the case where we're searching from within a search
- // result.
- startSearch(null, false, null, false);
- }
- return true;
- }
- @Override
- public void showThread(Account account, String folderName, long threadRootId) {
- showMessageViewPlaceHolder();
- LocalSearch tmpSearch = new LocalSearch();
- tmpSearch.addAccountUuid(account.getUuid());
- tmpSearch.and(Searchfield.THREAD_ID, String.valueOf(threadRootId),
- Attribute.EQUALS);
- MessageListFragment fragment = MessageListFragment.newInstance(
- tmpSearch, true, false);
- addMessageListFragment(fragment, true);
- }
- private void showMessageViewPlaceHolder() {
- removeMessageViewFragment();
- // Add placeholder view if necessary
- if (mMessageViewPlaceHolder.getParent() == null) {
- mMessageViewContainer.addView(mMessageViewPlaceHolder);
- }
- mMessageListFragment.setActiveMessage(null);
- }
- /**
- * Remove MessageViewFragment if necessary.
- */
- private void removeMessageViewFragment() {
- if (mMessageViewFragment != null) {
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.remove(mMessageViewFragment);
- mMessageViewFragment = null;
- ft.commit();
- showDefaultTitleView();
- }
- }
- private void removeMessageListFragment() {
- if (mMessageViewFragment != null) {
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.remove(mMessageListFragment);
- mMessageListFragment = null;
- ft.commit();
- }
- }
- @Override
- public void remoteSearchStarted() {
- // Remove action button for remote search
- configureMenu(mMenu);
- }
- @Override
- public void goBack() {
- FragmentManager fragmentManager = getFragmentManager();
- if (mDisplayMode == DisplayMode.MESSAGE_VIEW) {
- showMessageList();
- } else if (fragmentManager.getBackStackEntryCount() > 0) {
- fragmentManager.popBackStack();
- } else if (mMessageListFragment.isManualSearch()) {
- finish();
- } else if (!mSingleFolderMode) {
- onAccounts();
- } else {
- onShowFolderList();
- }
- }
- @Override
- public void enableActionBarProgress(boolean enable) {
- if (mMenuButtonCheckMail != null && mMenuButtonCheckMail.isVisible()) {
- mActionBarProgress.setVisibility(ProgressBar.GONE);
- if (enable) {
- mMenuButtonCheckMail
- .setActionView(mActionButtonIndeterminateProgress);
- } else {
- mMenuButtonCheckMail.setActionView(null);
- }
- } else {
- if (mMenuButtonCheckMail != null)
- mMenuButtonCheckMail.setActionView(null);
- if (enable) {
- mActionBarProgress.setVisibility(ProgressBar.VISIBLE);
- } else {
- mActionBarProgress.setVisibility(ProgressBar.GONE);
- }
- }
- }
- private void restartActivity() {
- // restart the current activity, so that the theme change can be applied
- if (Build.VERSION.SDK_INT < 11) {
- Intent intent = getIntent();
- intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
- finish();
- overridePendingTransition(0, 0); // disable animations to speed up
- // the switch
- startActivity(intent);
- overridePendingTransition(0, 0);
- } else {
- recreate();
- }
- }
- @Override
- public void displayMessageSubject(String subject) {
- if (mDisplayMode == DisplayMode.MESSAGE_VIEW) {
- mActionBarSubject.setText(subject);
- }
- }
- @Override
- public void onReply(Message message, PgpData pgpData) {
- MessageCompose.actionReply(this, mAccount, message, false,
- pgpData.getDecryptedData());
- }
- @Override
- public void onReplyAll(Message message, PgpData pgpData) {
- MessageCompose.actionReply(this, mAccount, message, true,
- pgpData.getDecryptedData());
- }
- @Override
- public void onForward(Message mMessage, PgpData mPgpData) {
- MessageCompose.actionForward(this, mAccount, mMessage,
- mPgpData.getDecryptedData());
- }
- @Override
- public void showNextMessageOrReturn() {
- if (K9.messageViewReturnToList() || !showLogicalNextMessage()) {
- if (mDisplayMode == DisplayMode.SPLIT_VIEW) {
- showMessageViewPlaceHolder();
- } else {
- showMessageList();
- }
- }
- }
- /**
- * Shows the next message in the direction the user was displaying messages.
- *
- * @return {@code true}
- */
- private boolean showLogicalNextMessage() {
- boolean result = false;
- if (mLastDirection == NEXT) {
- result = showNextMessage();
- } else if (mLastDirection == PREVIOUS) {
- result = showPreviousMessage();
- }
- if (!result) {
- result = showNextMessage() || showPreviousMessage();
- }
- return result;
- }
- @Override
- public void setProgress(boolean enable) {
- setProgressBarIndeterminateVisibility(enable);
- }
- @Override
- public void messageHeaderViewAvailable(MessageHeader header) {
- mActionBarSubject.setMessageHeader(header);
- }
- private boolean showNextMessage() {
- MessageReference ref = mMessageViewFragment.getMessageReference();
- if (ref != null) {
- if (mMessageListFragment.openNext(ref)) {
- mLastDirection = NEXT;
- return true;
- }
- }
- return false;
- }
- private boolean showPreviousMessage() {
- MessageReference ref = mMessageViewFragment.getMessageReference();
- if (ref != null) {
- if (mMessageListFragment.openPrevious(ref)) {
- mLastDirection = PREVIOUS;
- return true;
- }
- }
- return false;
- }
- private void showMessageList() {
- mMessageListWasDisplayed = true;
- mDisplayMode = DisplayMode.MESSAGE_LIST;
- mViewSwitcher.showFirstView();
- mMessageListFragment.setActiveMessage(null);
- showDefaultTitleView();
- configureMenu(mMenu);
- }
- private void showMessageView() {
- mDisplayMode = DisplayMode.MESSAGE_VIEW;
- if (!mMessageListWasDisplayed) {
- mViewSwitcher.setAnimateFirstView(false);
- }
- mViewSwitcher.showSecondView();
- showMessageTitleView();
- configureMenu(mMenu);
- }
- @Override
- public void updateMenu() {
- invalidateOptionsMenu();
- }
- @Override
- public void disableDeleteAction() {
- mMenu.findItem(R.id.delete).setEnabled(false);
- }
- private void onToggleTheme() {
- if (K9.getK9MessageViewTheme() == K9.Theme.DARK) {
- K9.setK9MessageViewThemeSetting(K9.Theme.LIGHT);
- } else {
- K9.setK9MessageViewThemeSetting(K9.Theme.DARK);
- }
- new Thread(new Runnable() {
- @Override
- public void run() {
- Context appContext = getApplicationContext();
- Preferences prefs = Preferences.getPreferences(appContext);
- Editor editor = prefs.getPreferences().edit();
- K9.save(editor);
- editor.commit();
- }
- }).start();
- restartActivity();
- }
- private void showDefaultTitleView() {
- mActionBarMessageView.setVisibility(View.GONE);
- mActionBarMessageList.setVisibility(View.VISIBLE);
- if (mMessageListFragment != null) {
- mMessageListFragment.updateTitle();
- }
- mActionBarSubject.setMessageHeader(null);
- }
- private void showMessageTitleView() {
- mActionBarMessageList.setVisibility(View.GONE);
- mActionBarMessageView.setVisibility(View.VISIBLE);
- if (mMessageViewFragment != null) {
- displayMessageSubject(null);
- mMessageViewFragment.updateTitle();
- }
- }
- @Override
- public void onSwitchComplete(int displayedChild) {
- if (displayedChild == 0) {
- removeMessageViewFragment();
- }
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- // handle OpenPGP results from PendingIntents in OpenPGP view
- // must be handled in this main activity, because
- // startIntentSenderForResult() does not support Fragments
- MessageOpenPgpView openPgpView = (MessageOpenPgpView) findViewById(R.id.layout_decrypt_openpgp);
- if (openPgpView != null
- && openPgpView.handleOnActivityResult(requestCode, resultCode,
- data)) {
- return;
- }
- }
- public void inbox() {
- Intent intent = new Intent(MessageList.this, Accounts.class);
- startActivity(intent);
- }
- public void to_main(){
- Intent intent = new Intent(MessageList.this, MainActivity.class);
- finish();
- startActivity(intent);
- }
- public class DrawerItemClickListener_Inbox implements
- ListView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position1,
- long id) {
- selectItem_Inbox(position1);
- }
- }
- private void selectItem_Inbox(int position1) {
- String clicked1 = mDrawerList_Inbox.getItemAtPosition(position1).toString();
- System.out.println(clicked1);
- if(clicked1.contains("Inbox")) {
- inbox();
- }
- mDrawerList_Inbox.setItemChecked(position1, true);
- mDrawerLayout.closeDrawer(mDrawerLinear);
- }
- public class DrawerItemClickListener implements
- ListView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- selectItem(position);
- }
- }
- private void selectItem(int position) {
- if (Show_View.equals("Homework Due")) {
- String clicked = mDrawerList.getItemAtPosition(position).toString();
- System.out.println(clicked);
- if(clicked.contains("Inbox")) {
- inbox();
- }
- if(clicked.contains("Schedule")) {
- SharedPreferences.Editor localEditor = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor.putString("fragment_to_start", "0");
- localEditor.commit();
- to_main();
- }
- if(clicked.contains("Homework Due")) {
- SharedPreferences.Editor localEditor1 = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor1.putString("fragment_to_start", "1");
- localEditor1.commit();
- to_main();
- }
- if(clicked.contains("Options")){
- SharedPreferences.Editor localEditor2 = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor2.putString("fragment_to_start", "3");
- localEditor2.commit();
- to_main();
- }
- if(clicked.contains("Logout")){
- }
- } else {
- String clicked = mDrawerList.getItemAtPosition(position).toString();
- System.out.println(clicked);
- if(clicked.contains("Inbox")) {
- inbox();
- }
- if(clicked.contains("Schedule")) {
- SharedPreferences.Editor localEditor = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor.putString("fragment_to_start", "0");
- localEditor.commit();
- to_main();
- }
- if(clicked.contains("Homework Due")) {
- SharedPreferences.Editor localEditor1 = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor1.putString("fragment_to_start", "1");
- localEditor1.commit();
- to_main();
- }
- if(clicked.contains("Options")){
- SharedPreferences.Editor localEditor2 = getSharedPreferences(
- "return_to_main", Context.MODE_PRIVATE).edit();
- localEditor2.putString("fragment_to_start", "3");
- localEditor2.commit();
- to_main();
- }
- if(clicked.contains("Logout")){
- }
- }
- mDrawerList.setItemChecked(position, true);
- mDrawerLayout.closeDrawer(mDrawerLinear);
- }
- protected void onUpdateData(int reason) {
- Log.d(TAG, "onUpdateData(" + reason + ")");
- doRefresh();
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- Log.d(TAG, "onDestroy()");
- if (contentObserver != null) {
- getContentResolver().unregisterContentObserver(contentObserver);
- contentObserver = null;
- }
- if (receiver != null) {
- unregisterReceiver(receiver);
- receiver = null;
- }
- }
- protected void doRefresh() {
- Log.d(TAG, "doRefresh()");
- int countssssss = getUnreadK9Count(this);
- Log.d(TAG, "" + countssssss + " unread emails");
- }
- public static class CursorHandler {
- private List<Cursor> cursors = new ArrayList<Cursor>();
- public Cursor add(Cursor c) {
- if (c != null)
- cursors.add(c);
- return c;
- }
- public void closeAll() {
- for (Cursor c : cursors) {
- if (!c.isClosed())
- c.close();
- }
- }
- }
- private static int k9UnreadCount = 0;
- public static int getUnreadK9Count(Context context) {
- refreshUnreadK9Count(context);
- return k9UnreadCount;
- }
- private static int getUnreadK9Count(Context context, int accountNumber) {
- CursorHandler ch = new CursorHandler();
- try {
- Cursor cur = ch.add(context.getContentResolver().query(
- Uri.parse(k9UnreadUri + "/" + accountNumber + "/"), null,
- null, null, null));
- if (cur != null) {
- Log.d(TAG, "k9: " + cur.getCount() + " unread rows returned");
- if (cur.getCount() > 0) {
- cur.moveToFirst();
- int unread = 0;
- int nameIndex = cur.getColumnIndex("accountName");
- int unreadIndex = cur.getColumnIndex("unread");
- do {
- String acct = cur.getString(nameIndex);
- int unreadForAcct = cur.getInt(unreadIndex);
- Log.d(TAG, "k9: " + acct + " - " + unreadForAcct
- + " unread");
- unread += unreadForAcct;
- } while (cur.moveToNext());
- cur.close();
- return unread;
- }
- } else {
- Log.d(TAG, "Failed to query k9 unread contentprovider.");
- }
- } catch (IllegalStateException e) {
- Log.d(TAG, "k-9 unread uri unknown.");
- }
- return 0;
- }
- public static void refreshUnreadK9Count(Context context) {
- int accounts = getK9AccountCount(context);
- if (accounts > 0) {
- int countssssss = 0;
- for (int acct = 0; acct < accounts; ++acct) {
- countssssss += getUnreadK9Count(context, acct);
- }
- k9UnreadCount = countssssss;
- }
- }
- public static int getK9AccountCount(Context context) {
- CursorHandler ch = new CursorHandler();
- try {
- Cursor cur = ch.add(context.getContentResolver().query(
- k9AccountsUri, null, null, null, null));
- if (cur != null) {
- // if (Preferences.logging) Log.d(MetaWatch.TAG,
- // "k9: "+cur.getCount()+ " account rows returned");
- int count = cur.getCount();
- return count;
- } else {
- // if (Preferences.logging) Log.d(MetaWatch.TAG,
- // "Failed to query k9 unread contentprovider.");
- }
- } catch (IllegalStateException e) {
- // if (Preferences.logging) Log.d(MetaWatch.TAG,
- // "k-9 accounts uri unknown.");
- } catch (java.lang.SecurityException e) {
- // if (Preferences.logging) Log.d(MetaWatch.TAG,
- // "Permissions failure accessing k-9 databases");
- } finally {
- ch.closeAll();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment