From dadba9949895696108b31124fc0c6aa1a297ab1c Mon Sep 17 00:00:00 2001 From: satok Date: Fri, 21 Aug 2009 20:05:09 +0900 Subject: [PATCH] Localize special folder names * make utility for looking up icon id for mailbox * make utility for looking up localized name for mailbox BUG: 2065586 --- res/values/arrays.xml | 39 +++++++++++- src/com/android/email/Utility.java | 63 +++++++++++++++++++ .../email/activity/AccountFolderList.java | 49 +-------------- .../android/email/activity/MailboxList.java | 34 +++------- .../android/email/activity/MessageList.java | 16 +++-- 5 files changed, 124 insertions(+), 77 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index af5aadb8d..3fae90544 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -80,5 +80,42 @@ 4 5 - + + + + @string/special_mailbox_display_name_inbox + + + + + + @string/special_mailbox_display_name_junk + + @string/special_mailbox_display_name_drafts + + @string/special_mailbox_display_name_sent + + @string/special_mailbox_display_name_trash + + @string/special_mailbox_display_name_junk + + + + + @drawable/ic_list_inbox + + @drawable/ic_list_folder + + @drawable/ic_list_folder + + @drawable/ic_list_outbox + + @drawable/ic_list_drafts + + @drawable/ic_list_sent + + @drawable/ic_list_trash + + + diff --git a/src/com/android/email/Utility.java b/src/com/android/email/Utility.java index 13a7f9aa8..6e2fa04eb 100644 --- a/src/com/android/email/Utility.java +++ b/src/com/android/email/Utility.java @@ -33,6 +33,9 @@ import java.util.Date; import com.android.email.codec.binary.Base64; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; import android.text.Editable; import android.widget.TextView; @@ -273,4 +276,64 @@ public class Utility { } return selection.toString(); } + + public static class FolderProperties { + + private static FolderProperties sInstance; + + // Caches for frequently accessed resources. + private String[] mSpecialMailbox = new String[] {}; + private TypedArray mSpecialMailboxDrawable; + private Drawable mDefaultMailboxDrawable; + + private FolderProperties(Context context) { + mSpecialMailbox = context.getResources().getStringArray( + R.array.special_mailbox_display_names); + for (int i = 0; i < mSpecialMailbox.length; ++i) { + if ("".equals(mSpecialMailbox[i])) { + // there is no localized name, so use the display name from the server + mSpecialMailbox[i] = null; + } + } + mSpecialMailboxDrawable = + context.getResources().obtainTypedArray(R.array.special_mailbox_icons); + mDefaultMailboxDrawable = + context.getResources().getDrawable(R.drawable.ic_list_folder); + } + + public static FolderProperties getInstance(Context context) { + if (sInstance == null) { + synchronized (FolderProperties.class) { + if (sInstance == null) { + sInstance = new FolderProperties(context); + } + } + } + return sInstance; + } + + /** + * Lookup names of localized special mailboxes + * @param type + * @return Localized strings + */ + public String getDisplayName(int type) { + if (type < mSpecialMailbox.length) { + return mSpecialMailbox[type]; + } + return null; + } + + /** + * Lookup icons of special mailboxes + * @param type + * @return icon's drawable + */ + public synchronized Drawable getIconIds(int type) { + if (type < mSpecialMailboxDrawable.length()) { + return mSpecialMailboxDrawable.getDrawable(type); + } + return mDefaultMailboxDrawable; + } + } } diff --git a/src/com/android/email/activity/AccountFolderList.java b/src/com/android/email/activity/AccountFolderList.java index 25c459001..18ae9d246 100644 --- a/src/com/android/email/activity/AccountFolderList.java +++ b/src/com/android/email/activity/AccountFolderList.java @@ -19,6 +19,7 @@ package com.android.email.activity; import com.android.email.Controller; import com.android.email.Email; import com.android.email.R; +import com.android.email.Utility; import com.android.email.activity.setup.AccountSettings; import com.android.email.activity.setup.AccountSetupBasics; import com.android.email.mail.MessagingException; @@ -74,8 +75,6 @@ public class AccountFolderList extends ListActivity KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_B, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_G }; - private static String[] sSpecialMailboxDisplayNameListCache; - private int mSecretKeyCodeIndex = 0; private static final String ICICLE_SELECTED_ACCOUNT = "com.android.email.selectedAccount"; @@ -175,9 +174,6 @@ public class AccountFolderList extends ListActivity mSelectedContextAccount = (Account) icicle.getParcelable(ICICLE_SELECTED_ACCOUNT); } - // Called only for filling cache of specialMailboxDisplayName - getSpecialMailboxDisplayName(this, 0); - ((TextView) findViewById(R.id.title_left_text)).setText(R.string.app_name); mLoadAccountsTask = (LoadAccountsTask) new LoadAccountsTask().execute(); @@ -331,46 +327,6 @@ public class AccountFolderList extends ListActivity return childCursor; } - /** - * Returns localized name for special folders. - * @param context - * @param type The mailbox type of interest - * @return A localized name, or null if the mailbox is not special - */ - private static String getSpecialMailboxDisplayName(Context context, int type) { - final int MAILBOX_TYPE_SIZE = 8; - if (sSpecialMailboxDisplayNameListCache == null) { - sSpecialMailboxDisplayNameListCache = new String[MAILBOX_TYPE_SIZE]; - // TYPE_INBOX = 0 - sSpecialMailboxDisplayNameListCache[0] = context.getString( - R.string.special_mailbox_display_name_inbox); - // TYPE_MAIL = 1 - sSpecialMailboxDisplayNameListCache[1] = null; - // TYPE_PARENT = 2 - sSpecialMailboxDisplayNameListCache[2] = null; - // TYPE_DRAFTS = 3 - sSpecialMailboxDisplayNameListCache[3] = context.getString( - R.string.special_mailbox_display_name_drafts); - // TYPE_OUTBOX = 4 - sSpecialMailboxDisplayNameListCache[4] = context.getString( - R.string.special_mailbox_display_name_outbox); - // TYPE_SENT = 5 - sSpecialMailboxDisplayNameListCache[5] = context.getString( - R.string.special_mailbox_display_name_sent); - // TYPE_TRASH = 6 - sSpecialMailboxDisplayNameListCache[6] = context.getString( - R.string.special_mailbox_display_name_trash); - // TYPE_JUNK = 7 - sSpecialMailboxDisplayNameListCache[7] = context.getString( - R.string.special_mailbox_display_name_junk); - } - if (type >= MAILBOX_TYPE_SIZE) { - return null; - } else { - return sSpecialMailboxDisplayNameListCache[type]; - } - } - /** * Async task to handle the accounts query outside of the UI thread */ @@ -696,7 +652,8 @@ public class AccountFolderList extends ListActivity // Invisible (not "gone") to maintain spacing view.findViewById(R.id.chip).setVisibility(View.INVISIBLE); - String text = getSpecialMailboxDisplayName(context, cursor.getInt(MAILBOX_TYPE)); + String text = Utility.FolderProperties.getInstance(context) + .getDisplayName(cursor.getInt(MAILBOX_TYPE)); if (text == null) { text = cursor.getString(MAILBOX_DISPLAY_NAME); } diff --git a/src/com/android/email/activity/MailboxList.java b/src/com/android/email/activity/MailboxList.java index f710dc87e..3ae18ca58 100644 --- a/src/com/android/email/activity/MailboxList.java +++ b/src/com/android/email/activity/MailboxList.java @@ -18,6 +18,7 @@ package com.android.email.activity; import com.android.email.Controller; import com.android.email.R; +import com.android.email.Utility; import com.android.email.activity.setup.AccountSettings; import com.android.email.mail.MessagingException; import com.android.email.provider.EmailContent; @@ -419,8 +420,12 @@ public class MailboxList extends ListActivity implements OnItemClickListener, On @Override public void bindView(View view, Context context, Cursor cursor) { - // TODO translation by mailbox type - String text = cursor.getString(COLUMN_DISPLAY_NAME); + int type = cursor.getInt(COLUMN_TYPE); + String text = Utility.FolderProperties.getInstance(context) + .getDisplayName(type); + if (text == null) { + text = cursor.getString(COLUMN_DISPLAY_NAME); + } TextView nameView = (TextView) view.findViewById(R.id.mailbox_name); if (text != null) { nameView.setText(text); @@ -455,29 +460,8 @@ public class MailboxList extends ListActivity implements OnItemClickListener, On countView.setVisibility(View.GONE); } ImageView folderIcon = (ImageView) view.findViewById(R.id.folder_icon); - int type = cursor.getInt(COLUMN_TYPE); - int resId = -1; - switch (type) { - case Mailbox.TYPE_INBOX: - resId = R.drawable.ic_list_inbox; - break; - case Mailbox.TYPE_OUTBOX: - resId = R.drawable.ic_list_outbox; - break; - case Mailbox.TYPE_DRAFTS: - resId = R.drawable.ic_list_drafts; - break; - case Mailbox.TYPE_SENT: - resId = R.drawable.ic_list_sent; - break; - case Mailbox.TYPE_TRASH: - resId = R.drawable.ic_list_trash; - break; - default: - resId = R.drawable.ic_list_folder; - break; - } - folderIcon.setImageResource(resId); + folderIcon.setImageDrawable(Utility.FolderProperties.getInstance(context) + .getIconIds(type)); } @Override diff --git a/src/com/android/email/activity/MessageList.java b/src/com/android/email/activity/MessageList.java index f35fb627e..a1574fe40 100644 --- a/src/com/android/email/activity/MessageList.java +++ b/src/com/android/email/activity/MessageList.java @@ -133,10 +133,12 @@ public class MessageList extends ListActivity implements OnItemClickListener, On EmailContent.RECORD_ID, MailboxColumns.TYPE, MailboxColumns.FLAG_VISIBLE }; - private static final int MAILBOX_DISPLAY_NAME_COLUMN_ID = 0; - private static final int MAILBOX_ACCOUNT_KEY_COLUMN_ID = 1; + private static final int MAILBOX_NAME_COLUMN_ID = 0; + private static final int MAILBOX_NAME_COLUMN_ACCOUNT_KEY = 1; + private static final int MAILBOX_NAME_COLUMN_TYPE = 2; private static final String[] MAILBOX_NAME_PROJECTION = new String[] { - MailboxColumns.DISPLAY_NAME, MailboxColumns.ACCOUNT_KEY}; + MailboxColumns.DISPLAY_NAME, MailboxColumns.ACCOUNT_KEY, + MailboxColumns.TYPE}; private static final int ACCOUNT_DISPLAY_NAME_COLUMN_ID = 0; private static final String[] ACCOUNT_NAME_PROJECTION = new String[] { @@ -925,8 +927,12 @@ public class MessageList extends ListActivity implements OnItemClickListener, On new String[] { Long.toString(mMailboxKey) }, null); try { if (c.moveToFirst()) { - mailboxName = c.getString(MAILBOX_DISPLAY_NAME_COLUMN_ID); - accountKey = c.getString(MAILBOX_ACCOUNT_KEY_COLUMN_ID); + mailboxName = Utility.FolderProperties.getInstance(MessageList.this) + .getDisplayName(c.getInt(MAILBOX_NAME_COLUMN_TYPE)); + if (mailboxName == null) { + mailboxName = c.getString(MAILBOX_NAME_COLUMN_ID); + } + accountKey = c.getString(MAILBOX_NAME_COLUMN_ACCOUNT_KEY); } } finally { c.close();