From 64f4f7e4a3cd87e431d1beea85a22cb5962a2879 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 7 Feb 2012 20:19:10 +0100 Subject: [PATCH] Use the new AccountList activity when creating launcher shortcuts --- src/com/fsck/k9/activity/AccountList.java | 61 +++++--- .../fsck/k9/activity/LauncherShortcuts.java | 135 ++---------------- .../activity/UnreadWidgetConfiguration.java | 15 +- 3 files changed, 71 insertions(+), 140 deletions(-) diff --git a/src/com/fsck/k9/activity/AccountList.java b/src/com/fsck/k9/activity/AccountList.java index 3e8ac0109..a229702ad 100644 --- a/src/com/fsck/k9/activity/AccountList.java +++ b/src/com/fsck/k9/activity/AccountList.java @@ -1,5 +1,9 @@ package com.fsck.k9.activity; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import android.os.AsyncTask; import android.os.Bundle; import android.util.TypedValue; @@ -12,17 +16,19 @@ import android.widget.ListView; import android.widget.TextView; import com.fsck.k9.Account; +import com.fsck.k9.BaseAccount; import com.fsck.k9.FontSizes; import com.fsck.k9.K9; import com.fsck.k9.Preferences; import com.fsck.k9.R; +import com.fsck.k9.SearchAccount; /** * Activity displaying the list of accounts. * *

- * Classes extending this abstract class have to provide an {@link #onAccountSelected(Account)} + * Classes extending this abstract class have to provide an {@link #onAccountSelected(BaseAccount)} * method to perform an action when an account is selected. *

*/ @@ -51,47 +57,64 @@ public abstract class AccountList extends K9ListActivity implements OnItemClickL new LoadAccounts().execute(); } + @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Account account = (Account) parent.getItemAtPosition(position); + BaseAccount account = (BaseAccount) parent.getItemAtPosition(position); onAccountSelected(account); } /** * Create a new {@link AccountsAdapter} instance and assign it to the {@link ListView}. * - * @param accounts + * @param realAccounts * An array of accounts to display. */ - public void populateListView(Account[] accounts) { + public void populateListView(Account[] realAccounts) { + List accounts = new ArrayList(); + + if (displaySpecialAccounts() && !K9.isHideSpecialAccounts()) { + BaseAccount integratedInboxAccount = new SearchAccount(this, true, null, null); + integratedInboxAccount.setDescription(getString(R.string.integrated_inbox_title)); + integratedInboxAccount.setEmail(getString(R.string.integrated_inbox_detail)); + + BaseAccount unreadAccount = new SearchAccount(this, false, null, null); + unreadAccount.setDescription(getString(R.string.search_all_messages_title)); + unreadAccount.setEmail(getString(R.string.search_all_messages_detail)); + + accounts.add(integratedInboxAccount); + accounts.add(unreadAccount); + } + + accounts.addAll(Arrays.asList(realAccounts)); AccountsAdapter adapter = new AccountsAdapter(accounts); ListView listView = getListView(); listView.setAdapter(adapter); listView.invalidate(); } + /** + * Implementing decide whether or not to display special accounts in the list. + * + * @return {@code true}, if special accounts should be listed. {@code false}, otherwise. + */ + protected abstract boolean displaySpecialAccounts(); + /** * This method will be called when an account was selected. * * @param account * The account the user selected. */ - protected abstract void onAccountSelected(Account account); + protected abstract void onAccountSelected(BaseAccount account); - class AccountsAdapter extends ArrayAdapter { - private Account[] mAccounts; - - public AccountsAdapter(Account[] accounts) { + class AccountsAdapter extends ArrayAdapter { + public AccountsAdapter(List accounts) { super(AccountList.this, 0, accounts); - mAccounts = accounts; - } - - public Account[] getAccounts() { - return mAccounts; } @Override public View getView(int position, View convertView, ViewGroup parent) { - final Account account = getItem(position); + final BaseAccount account = getItem(position); final View view; if (convertView != null) { @@ -127,7 +150,13 @@ public abstract class AccountList extends K9ListActivity implements OnItemClickL holder.description.setText(description); - holder.chip.setBackgroundColor(account.getChipColor()); + if (account instanceof Account) { + Account realAccount = (Account) account; + holder.chip.setBackgroundColor(realAccount.getChipColor()); + } else { + holder.chip.setBackgroundColor(0xff999999); + } + holder.chip.getBackground().setAlpha(255); holder.description.setTextSize(TypedValue.COMPLEX_UNIT_SP, diff --git a/src/com/fsck/k9/activity/LauncherShortcuts.java b/src/com/fsck/k9/activity/LauncherShortcuts.java index aaf2008da..61bde33ca 100644 --- a/src/com/fsck/k9/activity/LauncherShortcuts.java +++ b/src/com/fsck/k9/activity/LauncherShortcuts.java @@ -1,90 +1,44 @@ package com.fsck.k9.activity; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; import com.fsck.k9.Account; import com.fsck.k9.BaseAccount; -import com.fsck.k9.FontSizes; -import com.fsck.k9.K9; -import com.fsck.k9.Preferences; import com.fsck.k9.R; -import com.fsck.k9.SearchAccount; import com.fsck.k9.SearchSpecification; -import com.fsck.k9.helper.Utility; - -public class LauncherShortcuts extends K9ListActivity implements OnItemClickListener { - private AccountsAdapter mAdapter; - private FontSizes mFontSizes = K9.getFontSizes(); +public class LauncherShortcuts extends AccountList { @Override public void onCreate(Bundle icicle) { - super.onCreate(icicle); - // finish() immediately if we aren't supposed to be here if (!Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) { finish(); return; } - setContentView(R.layout.account_list); - ListView listView = getListView(); - listView.setOnItemClickListener(this); - listView.setItemsCanFocus(false); - - refresh(); + super.onCreate(icicle); } - private void refresh() { - List accounts = new ArrayList(); - - if (!K9.isHideSpecialAccounts()) { - BaseAccount integratedInboxAccount = new SearchAccount(this, true, null, null); - integratedInboxAccount.setDescription( - getString(R.string.integrated_inbox_title)); - integratedInboxAccount.setEmail( - getString(R.string.integrated_inbox_detail)); - - BaseAccount unreadAccount = new SearchAccount(this, false, null, null); - unreadAccount.setDescription( - getString(R.string.search_all_messages_title)); - unreadAccount.setEmail( - getString(R.string.search_all_messages_detail)); - - accounts.add(integratedInboxAccount); - accounts.add(unreadAccount); - } - - accounts.addAll(Arrays.asList(Preferences.getPreferences(this).getAccounts())); - - mAdapter = new AccountsAdapter(accounts); - getListView().setAdapter(mAdapter); + @Override + protected boolean displaySpecialAccounts() { + return true; } - private void setupShortcut(BaseAccount account) { + @Override + protected void onAccountSelected(BaseAccount account) { Intent shortcutIntent = null; if (account instanceof SearchSpecification) { - shortcutIntent = MessageList.actionHandleAccountIntent( - this, account.getDescription(), (SearchSpecification) account); + shortcutIntent = MessageList.actionHandleAccountIntent(this, account.getDescription(), + (SearchSpecification) account); } else { - shortcutIntent = FolderList.actionHandleAccountIntent(this, - (Account) account, null, true); + shortcutIntent = FolderList.actionHandleAccountIntent(this, (Account) account, null, + true); } + shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); String description = account.getDescription(); @@ -98,69 +52,4 @@ public class LauncherShortcuts extends K9ListActivity implements OnItemClickList setResult(RESULT_OK, intent); finish(); } - - public void onItemClick(AdapterView parent, View view, int position, long id) { - BaseAccount account = (BaseAccount) parent.getItemAtPosition(position); - setupShortcut(account); - } - - class AccountsAdapter extends ArrayAdapter { - public AccountsAdapter(List accounts) { - super(LauncherShortcuts.this, 0, accounts); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - final BaseAccount account = getItem(position); - - final View view; - if (convertView != null) { - view = convertView; - } else { - view = getLayoutInflater().inflate(R.layout.accounts_item, parent, false); - view.findViewById(R.id.active_icons).setVisibility(View.GONE); - } - - AccountViewHolder holder = (AccountViewHolder) view.getTag(); - if (holder == null) { - holder = new AccountViewHolder(); - holder.description = (TextView) view.findViewById(R.id.description); - holder.email = (TextView) view.findViewById(R.id.email); - holder.chip = view.findViewById(R.id.chip); - - view.setTag(holder); - } - - String description = account.getDescription(); - if (account.getEmail().equals(description)) { - holder.email.setVisibility(View.GONE); - } else { - holder.email.setVisibility(View.VISIBLE); - holder.email.setText(account.getEmail()); - } - - if (description == null || description.length() == 0) { - description = account.getEmail(); - } - - holder.description.setText(description); - - if (account instanceof Account) { - holder.chip.setBackgroundColor(((Account) account).getChipColor()); - } - - holder.chip.getBackground().setAlpha(255); - - holder.description.setTextSize(TypedValue.COMPLEX_UNIT_SP, mFontSizes.getAccountName()); - holder.email.setTextSize(TypedValue.COMPLEX_UNIT_SP, mFontSizes.getAccountDescription()); - - return view; - } - - class AccountViewHolder { - public TextView description; - public TextView email; - public View chip; - } - } } diff --git a/src/com/fsck/k9/activity/UnreadWidgetConfiguration.java b/src/com/fsck/k9/activity/UnreadWidgetConfiguration.java index 482a51949..341f895ef 100644 --- a/src/com/fsck/k9/activity/UnreadWidgetConfiguration.java +++ b/src/com/fsck/k9/activity/UnreadWidgetConfiguration.java @@ -8,6 +8,7 @@ import android.content.SharedPreferences.Editor; import android.os.Bundle; import com.fsck.k9.Account; +import com.fsck.k9.BaseAccount; import com.fsck.k9.R; import com.fsck.k9.provider.UnreadWidgetProvider; @@ -55,7 +56,19 @@ public class UnreadWidgetConfiguration extends AccountList { } @Override - protected void onAccountSelected(Account account) { + protected boolean displaySpecialAccounts() { + return false; + } + + @Override + protected void onAccountSelected(BaseAccount baseAccount) { + if (!(baseAccount instanceof Account)) { + finish(); + return; + } + + Account account = (Account) baseAccount; + // Save widget configuration String accountUuid = account.getUuid(); saveAccountUuid(this, mAppWidgetId, accountUuid);