Fix some things with shortcuts/widgets.
- All mailboxes will be shown when selecting a shortcut for a normal account. - Combined unread won't show up in shortcuts for combined accounts - only inbox is allowed for IMAP/POP widgets - all mailboxes allowed for EAS widgets Bug: 4725896 Change-Id: I5c77c2f5443e330ed451179761b1d9c8c0dd7619
This commit is contained in:
parent
2de21278f8
commit
e10215eaff
|
@ -22,7 +22,6 @@ import android.app.Dialog;
|
|||
import android.app.Fragment;
|
||||
import android.content.ContentUris;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
|
|
@ -16,18 +16,6 @@
|
|||
|
||||
package com.android.email.activity;
|
||||
|
||||
import com.android.email.Controller;
|
||||
import com.android.email.Email;
|
||||
import com.android.email.R;
|
||||
import com.android.email.RefreshManager;
|
||||
import com.android.email.provider.EmailProvider;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
import com.android.emailcommon.utility.EmailAsyncTask;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ListFragment;
|
||||
import android.app.LoaderManager;
|
||||
|
@ -51,8 +39,19 @@ import android.widget.AdapterView;
|
|||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.android.email.Controller;
|
||||
import com.android.email.Email;
|
||||
import com.android.email.R;
|
||||
import com.android.email.RefreshManager;
|
||||
import com.android.email.provider.EmailProvider;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
import com.android.emailcommon.utility.EmailAsyncTask;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* This fragment presents a list of mailboxes for a given account or the combined mailboxes.
|
||||
|
@ -148,8 +147,6 @@ import java.util.TimerTask;
|
|||
* no views.
|
||||
* - Otherwise, make sure to check if the fragment has views with {@link #isViewCreated()}
|
||||
* before touching any views.
|
||||
*
|
||||
* TODO Remove the nested folder navigation code during drag&drop.
|
||||
*/
|
||||
public class MailboxListFragment extends ListFragment implements OnItemClickListener,
|
||||
OnDragListener {
|
||||
|
@ -162,9 +159,6 @@ public class MailboxListFragment extends ListFragment implements OnItemClickList
|
|||
private static final String BUNDLE_LIST_STATE = "MailboxListFragment.state.listState";
|
||||
private static final boolean DEBUG_DRAG_DROP = false; // MUST NOT SUBMIT SET TO TRUE
|
||||
|
||||
/** While in drag-n-drop, amount of time before it auto expands; in ms */
|
||||
private static final long AUTO_EXPAND_DELAY = 750L;
|
||||
|
||||
/** No drop target is available where the user is currently hovering over */
|
||||
private static final int NO_DROP_TARGET = -1;
|
||||
// Total height of the top and bottom scroll zones, in pixels
|
||||
|
@ -182,8 +176,6 @@ public class MailboxListFragment extends ListFragment implements OnItemClickList
|
|||
|
||||
private final EmailAsyncTask.Tracker mTaskTracker = new EmailAsyncTask.Tracker();
|
||||
|
||||
/** Timer to auto-expand folder lists during drag-n-drop */
|
||||
private static final Timer sDragTimer = new Timer();
|
||||
/** Rectangle used for hit testing children */
|
||||
private static final Rect sTouchFrame = new Rect();
|
||||
|
||||
|
|
|
@ -16,13 +16,6 @@
|
|||
|
||||
package com.android.email.activity;
|
||||
|
||||
import com.android.email.R;
|
||||
import com.android.email.activity.ShortcutPickerFragment.AccountShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.PickerCallback;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.Message;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
@ -31,6 +24,14 @@ import android.util.Log;
|
|||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
|
||||
import com.android.email.R;
|
||||
import com.android.email.activity.ShortcutPickerFragment.AccountShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.MailboxShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.PickerCallback;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.Message;
|
||||
|
||||
/**
|
||||
* This class implements a launcher shortcut for directly accessing a single account.
|
||||
*/
|
||||
|
@ -74,6 +75,15 @@ public class ShortcutPicker extends Activity implements OnClickListener, PickerC
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer buildFilter(Account account) {
|
||||
if (!Account.isNormalAccount(account.mId)) {
|
||||
// Shortcuts for combined accounts can only be for inboxes.
|
||||
return MailboxShortcutPickerFragment.FILTER_INBOX_ONLY;
|
||||
}
|
||||
|
||||
return MailboxShortcutPickerFragment.FILTER_ALLOW_ALL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelected(Account account, long mailboxId) {
|
||||
|
|
|
@ -16,13 +16,6 @@
|
|||
|
||||
package com.android.email.activity;
|
||||
|
||||
import com.android.email.R;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.AccountColumns;
|
||||
import com.android.emailcommon.provider.EmailContent.MailboxColumns;
|
||||
import com.android.emailcommon.provider.HostAuth;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.app.ListFragment;
|
||||
|
@ -34,15 +27,22 @@ import android.content.Loader;
|
|||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.database.MergeCursor;
|
||||
import android.database.MatrixCursor.RowBuilder;
|
||||
import android.database.MergeCursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ListView;
|
||||
import android.widget.SimpleCursorAdapter;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
|
||||
import com.android.email.R;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.AccountColumns;
|
||||
import com.android.emailcommon.provider.EmailContent.MailboxColumns;
|
||||
import com.android.emailcommon.provider.HostAuth;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
|
||||
/**
|
||||
* Fragment containing a list of accounts to show during shortcut creation.
|
||||
|
@ -52,18 +52,10 @@ import android.widget.AdapterView.OnItemClickListener;
|
|||
*/
|
||||
public abstract class ShortcutPickerFragment extends ListFragment
|
||||
implements OnItemClickListener, LoaderCallbacks<Cursor> {
|
||||
/** Allow all mailboxes in the mailbox list */
|
||||
public static int FILTER_ALLOW_ALL = 0;
|
||||
/** Only allow an account's INBOX */
|
||||
public static int FILTER_INBOX_ONLY = 1 << 0;
|
||||
/** Allow an "unread" mailbox; this is not affected by {@link #FILTER_INBOX_ONLY} */
|
||||
public static int FILTER_ALLOW_UNREAD = 1 << 1;
|
||||
/** Fragment argument to set filter values */
|
||||
public static final String ARG_FILTER = "ShortcutPickerFragment.filter";
|
||||
/** The filter values; default to allow all mailboxes */
|
||||
private Integer mFilter;
|
||||
/** Callback methods. Enclosing activities must implement to receive fragment notifications. */
|
||||
public static interface PickerCallback {
|
||||
/** Builds a mailbox filter for the given account. See MailboxShortcutPickerFragment. */
|
||||
public Integer buildFilter(Account account);
|
||||
/** Invoked when an account and mailbox have been selected. */
|
||||
public void onSelected(Account account, long mailboxId);
|
||||
/** Required data is missing; either the account and/or mailbox */
|
||||
|
@ -72,6 +64,7 @@ public abstract class ShortcutPickerFragment extends ListFragment
|
|||
|
||||
/** A no-op callback */
|
||||
private final PickerCallback EMPTY_CALLBACK = new PickerCallback() {
|
||||
@Override public Integer buildFilter(Account account) { return null; }
|
||||
@Override public void onSelected(Account account, long mailboxId){ getActivity().finish(); }
|
||||
@Override public void onMissingData(boolean missingAccount, boolean missingMailbox) { }
|
||||
};
|
||||
|
@ -121,20 +114,6 @@ public abstract class ShortcutPickerFragment extends ListFragment
|
|||
/** Returns the cursor columns to map into list */
|
||||
abstract String[] getFromColumns();
|
||||
|
||||
/** Returns the mailbox filter */
|
||||
int getFilter() {
|
||||
if (mFilter == null) {
|
||||
Bundle args = getArguments();
|
||||
if (args != null) {
|
||||
mFilter = args.getInt(ARG_FILTER, FILTER_ALLOW_ALL);
|
||||
} else {
|
||||
// No arguments set on fragment, use a default value
|
||||
mFilter = FILTER_ALLOW_ALL;
|
||||
}
|
||||
}
|
||||
return mFilter;
|
||||
}
|
||||
|
||||
// TODO if we add meta-accounts to the database, remove this class entirely
|
||||
private static final class AccountPickerLoader extends CursorLoader {
|
||||
public AccountPickerLoader(Context context, Uri uri, String[] projection, String selection,
|
||||
|
@ -233,11 +212,8 @@ public abstract class ShortcutPickerFragment extends ListFragment
|
|||
private void selectAccountCursor(Cursor cursor, boolean allowBack) {
|
||||
Account account = new Account();
|
||||
account.restore(cursor);
|
||||
ShortcutPickerFragment fragment = new MailboxShortcutPickerFragment();
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(MailboxShortcutPickerFragment.ARG_ACCOUNT, account);
|
||||
args.putInt(ARG_FILTER, getFilter());
|
||||
fragment.setArguments(args);
|
||||
ShortcutPickerFragment fragment = MailboxShortcutPickerFragment.newInstance(
|
||||
getActivity(), account, mCallback.buildFilter(account));
|
||||
FragmentTransaction transaction = getFragmentManager().beginTransaction();
|
||||
transaction.replace(R.id.shortcut_list, fragment);
|
||||
if (allowBack) {
|
||||
|
@ -300,7 +276,16 @@ public abstract class ShortcutPickerFragment extends ListFragment
|
|||
|
||||
/** Mailbox picker */
|
||||
public static class MailboxShortcutPickerFragment extends ShortcutPickerFragment {
|
||||
/** Allow all mailboxes in the mailbox list */
|
||||
public static int FILTER_ALLOW_ALL = 0;
|
||||
/** Only allow an account's INBOX */
|
||||
public static int FILTER_INBOX_ONLY = 1 << 0;
|
||||
/** Allow an "unread" mailbox; this is not affected by {@link #FILTER_INBOX_ONLY} */
|
||||
public static int FILTER_ALLOW_UNREAD = 1 << 1;
|
||||
/** Fragment argument to set filter values */
|
||||
static final String ARG_FILTER = "MailboxShortcutPickerFragment.filter";
|
||||
static final String ARG_ACCOUNT = "MailboxShortcutPickerFragment.account";
|
||||
|
||||
private final static String REAL_ID = "realId";
|
||||
private final static String[] MAILBOX_FROM_COLUMNS = new String[] {
|
||||
MailboxColumns.DISPLAY_NAME,
|
||||
|
@ -329,6 +314,30 @@ public abstract class ShortcutPickerFragment extends ListFragment
|
|||
" AND " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_INBOX;
|
||||
/** The currently selected account */
|
||||
private Account mAccount;
|
||||
/** The filter values; default to allow all mailboxes */
|
||||
private Integer mFilter;
|
||||
|
||||
/**
|
||||
* Builds a mailbox shortcut picker for the given account.
|
||||
*/
|
||||
public static MailboxShortcutPickerFragment newInstance(
|
||||
Context context, Account account, Integer filter) {
|
||||
|
||||
MailboxShortcutPickerFragment fragment = new MailboxShortcutPickerFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(ARG_ACCOUNT, account);
|
||||
args.putInt(ARG_FILTER, filter);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/** Returns the mailbox filter */
|
||||
int getFilter() {
|
||||
if (mFilter == null) {
|
||||
mFilter = getArguments().getInt(ARG_FILTER, FILTER_ALLOW_ALL);
|
||||
}
|
||||
return mFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
|
|
|
@ -36,7 +36,6 @@ import com.android.emailcommon.provider.Account;
|
|||
import com.android.emailcommon.provider.EmailContent.Message;
|
||||
import com.android.emailcommon.provider.Mailbox;
|
||||
import com.android.emailcommon.utility.EmailAsyncTask;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
|
|
@ -24,10 +24,11 @@ import android.view.View;
|
|||
import android.view.View.OnClickListener;
|
||||
|
||||
import com.android.email.R;
|
||||
import com.android.email.activity.ShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.AccountShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.MailboxShortcutPickerFragment;
|
||||
import com.android.email.activity.ShortcutPickerFragment.PickerCallback;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.HostAuth;
|
||||
|
||||
/**
|
||||
* Activity to configure the Email widget.
|
||||
|
@ -62,11 +63,6 @@ public class WidgetConfiguration extends Activity implements OnClickListener, Pi
|
|||
// Load the account picking fragment if we haven't created a fragment yet
|
||||
// NOTE: do not add to history as this will be the first fragment in the flow
|
||||
AccountShortcutPickerFragment fragment = new AccountShortcutPickerFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ShortcutPickerFragment.ARG_FILTER,
|
||||
ShortcutPickerFragment.FILTER_INBOX_ONLY
|
||||
| ShortcutPickerFragment.FILTER_ALLOW_UNREAD);
|
||||
fragment.setArguments(args);
|
||||
getFragmentManager().beginTransaction().add(R.id.shortcut_list, fragment).commit();
|
||||
}
|
||||
}
|
||||
|
@ -80,6 +76,20 @@ public class WidgetConfiguration extends Activity implements OnClickListener, Pi
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer buildFilter(Account account) {
|
||||
if (!Account.isNormalAccount(account.mId)) {
|
||||
return MailboxShortcutPickerFragment.FILTER_INBOX_ONLY
|
||||
| MailboxShortcutPickerFragment.FILTER_ALLOW_UNREAD;
|
||||
}
|
||||
|
||||
// We can't synced non-Inbox mailboxes for non-EAS accounts, so they don't sync
|
||||
// right now and it doesn't make sense to put them in a widget.
|
||||
return HostAuth.SCHEME_EAS.equals(account.getProtocol(this))
|
||||
? MailboxShortcutPickerFragment.FILTER_ALLOW_ALL
|
||||
: MailboxShortcutPickerFragment.FILTER_INBOX_ONLY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelected(Account account, long mailboxId) {
|
||||
setupWidget(account, mailboxId);
|
||||
|
|
Loading…
Reference in New Issue