summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml8
-rw-r--r--res/layout/folders_activity.xml21
-rw-r--r--res/values/strings.xml8
-rw-r--r--src/com/android/mail/ui/FolderSelectionActivity.java53
-rw-r--r--src/com/android/mail/ui/FoldersSelectionDialog.java2
-rw-r--r--src/com/android/mail/ui/MailboxSelectionActivity.java78
-rw-r--r--src/com/android/mail/widget/BaseWidgetProvider.java27
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;
}