diff options
-rw-r--r-- | AndroidManifest.xml | 8 | ||||
-rw-r--r-- | res/layout/folders_activity.xml | 21 | ||||
-rw-r--r-- | res/values/strings.xml | 8 | ||||
-rw-r--r-- | src/com/android/mail/ui/FolderSelectionActivity.java | 53 | ||||
-rw-r--r-- | src/com/android/mail/ui/FoldersSelectionDialog.java | 2 | ||||
-rw-r--r-- | src/com/android/mail/ui/MailboxSelectionActivity.java | 78 | ||||
-rw-r--r-- | src/com/android/mail/widget/BaseWidgetProvider.java | 27 |
7 files changed, 104 insertions, 93 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 95fc9265e..b9739ad7b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -48,15 +48,15 @@ <activity android:name="LabelSynchronizationActivity" android:theme="@android:style/Theme.Holo.Light.Dialog" /> - <activity android:name="CreateShortcutActivity" + <activity android:name=".ui.CreateShortcutActivity" android:theme="@style/ShortcutWidgetTheme" android:label="@string/activity_folder_selection" /> - <activity android:name="FolderSelectionActivity" + <activity android:name=".ui.FolderSelectionActivity" android:theme="@style/ShortcutWidgetTheme" android:label="@string/activity_folder_selection" /> - <activity android:name="MailboxSelectionActivity" + <activity android:name=".ui.MailboxSelectionActivity" android:theme="@style/InvisibleShortcutWidgetTheme" android:label="@string/app_name" > <intent-filter> @@ -107,7 +107,7 @@ <service android:name=".compose.EmptyService"/> <!-- Widget --> - <receiver android:name=".widget.WidgetProvider" android:label="@string/app_name"> + <receiver android:name=".widget.WidgetProvider" android:label="@string/app_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> diff --git a/res/layout/folders_activity.xml b/res/layout/folders_activity.xml index 82875fd89..0482e3016 100644 --- a/res/layout/folders_activity.xml +++ b/res/layout/folders_activity.xml @@ -15,25 +15,22 @@ See the License for the specific language governing permissions and limitations under the License. --> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" + android:minWidth="@dimen/folder_list_popup_width" android:orientation="vertical" > - <ListView - android:id="@+id/folders_list" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:cacheColorHint="@android:color/transparent" - android:drawSelectorOnTop="false" - android:fadingEdge="none" /> - - <TextView android:id="@+id/empty_view" - android:visibility="gone" + <FrameLayout + android:id="@+id/folder_list_pane" + android:name="com.android.mail.ui.FolderListFragment" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/folders_activity_instructions"/> + android:layout_weight="1" + android:layout_marginLeft="16dip" + android:layout_marginRight="16dip"/> + + <include layout="@layout/one_button_button_bar"/> </LinearLayout> diff --git a/res/values/strings.xml b/res/values/strings.xml index 3496bf151..8c89b1ae8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -123,8 +123,8 @@ <string name="forward">Forward</string> <!-- Menu item: compose a new email --> <string name="menu_compose">Compose</string> - <!-- Menu item: change the labels for this conversion. --> - <string name="menu_change_labels">Change labels</string> + <!-- Menu item: change the labels for this conversation. --> + <string name="menu_change_folders">Change folders</string> <!-- Menu item: manages the labels for this account. [CHAR LIMIT = 30] --> <string name="menu_manage_labels">Manage labels</string> <!-- Title for the Label list screen. [CHAR LIMIT = 30] --> @@ -498,4 +498,8 @@ <!-- Checkbox text to enable sync for a folder where a widget is in the processes of being added, and sync had been not been enabled [CHAR LIMIT=30] --> <string name="folder_sync_for_widget_checkbox">Sync last <xliff:g id="numSyncDays" example="30">%d</xliff:g> days</string> + + <!-- Folder selection dialog --> + <!-- Title for change folders dialog [CHAR LIMIT=30] --> + <string name="folder_selection_dialog_title">Change folders</string> </resources> diff --git a/src/com/android/mail/ui/FolderSelectionActivity.java b/src/com/android/mail/ui/FolderSelectionActivity.java index 46212011c..196da66dc 100644 --- a/src/com/android/mail/ui/FolderSelectionActivity.java +++ b/src/com/android/mail/ui/FolderSelectionActivity.java @@ -22,6 +22,7 @@ import android.app.Dialog; import android.app.Fragment; import android.app.FragmentTransaction; import android.appwidget.AppWidgetManager; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; @@ -32,9 +33,11 @@ import android.view.View.OnClickListener; import android.widget.Button; import com.android.mail.R; +import com.android.mail.browse.ConversationItemView.StarHandler; import com.android.mail.providers.Account; import com.android.mail.providers.Folder; import com.android.mail.providers.UIProvider; +import com.android.mail.ui.ViewMode.ModeChangeListener; import com.android.mail.utils.LogUtils; import com.android.mail.utils.Utils; import com.android.mail.widget.WidgetProvider; @@ -46,7 +49,7 @@ import java.util.Set; * This activity displays the list of available folders for the current account. */ public class FolderSelectionActivity extends Activity implements OnClickListener, - DialogInterface.OnClickListener, FolderChangeListener { + DialogInterface.OnClickListener, FolderChangeListener, ControllableActivity { public static final String EXTRA_ACCOUNT_SHORTCUT = "account-shortcut"; private static final String LOG_TAG = new LogUtils().getLogTag(); @@ -93,7 +96,7 @@ public class FolderSelectionActivity extends Activity implements OnClickListener FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); Fragment fragment = FolderListFragment.newInstance(this, mAccount.folderListUri, FolderListFragment.MODE_PICK); - fragmentTransaction.replace(R.id.folders_pane, fragment); + fragmentTransaction.replace(R.id.folder_list_pane, fragment); fragmentTransaction.commitAllowingStateLoss(); } @@ -209,4 +212,50 @@ public class FolderSelectionActivity extends Activity implements OnClickListener } } } + + @Override + public String getHelpContext() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Context getActivityContext() { + return this; + } + + @Override + public void attachConversationList(ConversationListFragment conversationList) { + } + + @Override + public int getViewMode() { + return 0; + } + + @Override + public void setViewModeListener(ModeChangeListener listener) { + } + + @Override + public void unsetViewModeListener(ModeChangeListener listener) { + } + + @Override + public ConversationListCallbacks getListHandler() { + return null; + } + + @Override + public StarHandler getStarHandler() { + return null; + } + + @Override + public void attachFolderList(FolderListFragment folderListFragment) { + } + + @Override + public void attachConversationView(ConversationViewFragment conversationViewFragment) { + } } diff --git a/src/com/android/mail/ui/FoldersSelectionDialog.java b/src/com/android/mail/ui/FoldersSelectionDialog.java index 75f9604b7..1d409890d 100644 --- a/src/com/android/mail/ui/FoldersSelectionDialog.java +++ b/src/com/android/mail/ui/FoldersSelectionDialog.java @@ -58,7 +58,7 @@ public class FoldersSelectionDialog implements OnClickListener, OnMultiChoiceCli // Mapping of a folder's uri to its checked state mCheckedState = new HashMap<String, Boolean>(); AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle("Change folders"); + builder.setTitle(R.string.folder_selection_dialog_title); builder.setPositiveButton(R.string.ok, this); builder.setNegativeButton(R.string.cancel, this); mSingle = !account diff --git a/src/com/android/mail/ui/MailboxSelectionActivity.java b/src/com/android/mail/ui/MailboxSelectionActivity.java index 09174d864..5c3bd4687 100644 --- a/src/com/android/mail/ui/MailboxSelectionActivity.java +++ b/src/com/android/mail/ui/MailboxSelectionActivity.java @@ -20,32 +20,24 @@ import com.android.mail.providers.Account; import com.android.mail.providers.AccountCacheProvider; import com.android.mail.providers.UIProvider; import com.android.mail.utils.LogUtils; -import com.android.mail.utils.Utils; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import android.app.ActionBar; import android.app.ListActivity; import android.appwidget.AppWidgetManager; import android.content.ContentResolver; -import android.content.Context; import android.content.Intent; import android.database.Cursor; -import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ListView; -import android.widget.SimpleAdapter; +import android.widget.SimpleCursorAdapter; import android.widget.TextView; -import java.io.IOException; -import java.util.List; -import java.util.Map; - /** * An activity that shows the list of all the available accounts and return the * one selected in onResult(). @@ -64,7 +56,7 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis private final int[] VIEW_IDS = { R.id.mailbox_name }; private boolean mCreateShortcut = false; private boolean mConfigureWidget = false; - private SimpleAdapter mAdapter; + private SimpleCursorAdapter mAdapter; private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; // Boolean to indicate that we are waiting for the result from an add account @@ -74,11 +66,11 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis // Can only do certain actions if the Activity is resumed (e.g. setVisible) private boolean mResumed = false; + private Handler mHandler = new Handler(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - setContentView(R.layout.mailbox_selection_activity); if (icicle != null) { restoreState(icicle); @@ -176,21 +168,12 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis private void setupWithAccounts() { final ContentResolver resolver = getContentResolver(); - AsyncTask<Void, Void, Void> getAccounts = new AsyncTask<Void, Void, Void>() { + new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { Cursor cursor = resolver.query(AccountCacheProvider.getAccountsUri(), UIProvider.ACCOUNTS_PROJECTION, null, null, null); - Account[] accounts = new Account[0]; - if (cursor != null) { - accounts = new Account[cursor.getCount()]; - int i = 0; - while (cursor.moveToNext()) { - accounts[i] = new Account(cursor); - i++; - } - } - completeSetupWithAccounts(accounts); + completeSetupWithAccounts(cursor); return null; } @@ -201,28 +184,23 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis // TODO: (mindyp) have the AccountCacheProvider cache accounts. } - private void completeSetupWithAccounts(Account[] accounts) { + private void completeSetupWithAccounts(final Cursor accounts) { // TODO: Cache the latest set of accounts // AccountCacheProvider.cacheAccountList(this, false /* synced */, // accounts); - - // Populate the map - final List<Map<String, Object>> listData = Lists.newArrayList(); - for (int i = 0; i < accounts.length; i++) { - Map<String, Object> m = Maps.newHashMap(); - final String account = accounts[i].name; - m.put(ACCOUNT, account); - - listData.add(m); - } - updateAccountList(listData); + mHandler.post(new Runnable() { + @Override + public void run() { + updateAccountList(accounts); + } + }); } - private void updateAccountList(final List<Map<String, Object>> accountData) { + private void updateAccountList(final Cursor accounts) { boolean displayAccountList = true; // Configuring a widget or shortcut. if (mConfigureWidget || mCreateShortcut) { - if (accountData.size() == 0) { + if (accounts == null || accounts.getCount() == 0) { // No account found, show Add Account screen, for both the widget or // shortcut creation process // TODO: (mindyp) allow for adding of account. @@ -232,10 +210,11 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis // Indicate that we need to handle the response from the add account action // This allows us to process the results that we get in the AddAccountCallback mWaitingForAddAccountResult = true; - } else if (mConfigureWidget && accountData.size() == 1) { + } else if (mConfigureWidget && accounts.getCount() == 1) { // When configuring a widget, if there is only one account, automatically // choose that account. - selectAccount((String) accountData.get(0).get(ACCOUNT)); + accounts.moveToFirst(); + selectAccount(new Account(accounts)); // No reason to display the account list displayAccountList = false; } @@ -248,21 +227,13 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis setVisible(true); } - mAdapter = new SimpleAdapter( - this, accountData, R.layout.mailbox_item, COLUMN_NAMES, VIEW_IDS) { + mAdapter = new SimpleCursorAdapter(this, R.layout.mailbox_item, accounts, + COLUMN_NAMES, VIEW_IDS, 0) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); TextView accountView = (TextView) v.findViewById(R.id.mailbox_name); - - Map<String, Object> data = accountData.get(position); - String account = (String) data.get(ACCOUNT); - accountView.setText(account); - - // Set the tag here so we can get the account name in - // OnListItemClick() - v.setTag(account); - + accountView.setText(new Account((Cursor) getItem(position)).name); return v; } }; @@ -272,13 +243,10 @@ public class MailboxSelectionActivity extends ListActivity implements OnClickLis @Override protected void onListItemClick(ListView l, View v, int position, long id) { - if (v != null) { - String selectedAccount = (String) v.getTag(); - selectAccount(selectedAccount); - } + selectAccount(new Account((Cursor)mAdapter.getItem(position))); } - private void selectAccount(String account) { + private void selectAccount(Account account) { if (mCreateShortcut || mConfigureWidget) { // Invoked for a shortcut creation final Intent intent = new Intent(this, FolderSelectionActivity.class); diff --git a/src/com/android/mail/widget/BaseWidgetProvider.java b/src/com/android/mail/widget/BaseWidgetProvider.java index 3bd9d0c39..167f80bd1 100644 --- a/src/com/android/mail/widget/BaseWidgetProvider.java +++ b/src/com/android/mail/widget/BaseWidgetProvider.java @@ -16,7 +16,6 @@ package com.android.mail.widget; -import com.android.mail.ConversationListContext; import com.android.mail.R; import com.android.mail.providers.Account; import com.android.mail.providers.AccountCacheProvider; @@ -27,20 +26,15 @@ import com.android.mail.utils.Utils; import com.google.common.collect.Sets; import com.google.common.primitives.Ints; -import android.accounts.AccountManager; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; -import android.content.CursorLoader; import android.content.Intent; -import android.content.Loader; -import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.net.Uri; -import android.os.Bundle; import android.os.Parcel; import android.text.TextUtils; import android.view.View; @@ -107,7 +101,6 @@ public class BaseWidgetProvider extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); - // Receive notification for a certain account. if (Utils.ACTION_NOTIFY_DATASET_CHANGED.equals(intent.getAction())) { final String accountToBeUpdated = intent.getExtras().getString(Utils.EXTRA_ACCOUNT); @@ -146,7 +139,6 @@ public class BaseWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); - // Update each of the widgets with a remote adapter for (int i = 0; i < appWidgetIds.length; ++i) { // Get the account for this widget from preference @@ -174,9 +166,8 @@ public class BaseWidgetProvider extends AppWidgetProvider { } } // account will be null the first time a widget is created. This is - // OK, as - // isAccountValid will return false, allowing the widget to be - // configured + // OK, as isAccountValid will return false, allowing the widget to + // be configured updateWidget(context, appWidgetIds[i], new Account(Parcel.obtain()), new Folder(Parcel.obtain())); } @@ -187,12 +178,14 @@ public class BaseWidgetProvider extends AppWidgetProvider { Cursor accountCursor = context.getContentResolver().query( AccountCacheProvider.getAccountsUri(), UIProvider.ACCOUNTS_PROJECTION, null, null, null); - accountCursor.moveToFirst(); - do { - if (account != null && account.equals(new Account(accountCursor))) - return true; - } while (accountCursor.moveToNext()); - return false; + if (accountCursor.moveToFirst()) { + Account newAccount = new Account(accountCursor); + do { + if (account != null && newAccount != null + && TextUtils.equals(account.name, newAccount.name)) + return true; + } while (accountCursor.moveToNext()); + } } return false; } |