Make widget open appropriate screen
Widget should open MessageListXL on tablet. Bug 3253813 Change-Id: I5cfa63b571e443a0217bc9332bb4a76a039143ac
This commit is contained in:
parent
69cd842c07
commit
6a858c1be2
|
@ -44,8 +44,6 @@ import android.view.Window;
|
|||
import android.view.animation.Animation;
|
||||
import android.view.animation.Animation.AnimationListener;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.view.animation.DecelerateInterpolator;
|
||||
import android.view.animation.TranslateAnimation;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
|
@ -60,6 +58,7 @@ public class MessageListXL extends Activity implements
|
|||
View.OnClickListener {
|
||||
private static final String EXTRA_ACCOUNT_ID = "ACCOUNT_ID";
|
||||
private static final String EXTRA_MAILBOX_ID = "MAILBOX_ID";
|
||||
private static final String EXTRA_MESSAGE_ID = "MESSAGE_ID";
|
||||
private static final int LOADER_ID_ACCOUNT_LIST = 0;
|
||||
/* package */ static final int MAILBOX_REFRESH_MIN_INTERVAL = 30 * 1000; // in milliseconds
|
||||
/* package */ static final int INBOX_AUTO_REFRESH_MIN_INTERVAL = 10 * 1000; // in milliseconds
|
||||
|
@ -122,6 +121,27 @@ public class MessageListXL extends Activity implements
|
|||
fromActivity.startActivity(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Launch and open a message.
|
||||
*
|
||||
* @param accountId must not be -1.
|
||||
* @param mailboxId must not be -1. Magic mailboxes IDs (such as
|
||||
* {@link Mailbox#QUERY_ALL_INBOXES}) don't work.
|
||||
* @param messageId must not be -1.
|
||||
*/
|
||||
public static void actionOpenMessage(Activity fromActivity, long accountId, long mailboxId,
|
||||
long messageId) {
|
||||
Intent i = new Intent(fromActivity, MessageListXL.class);
|
||||
if (accountId == -1 || mailboxId == -1 || messageId == -1) {
|
||||
throw new InvalidParameterException();
|
||||
}
|
||||
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
|
||||
i.putExtra(EXTRA_MAILBOX_ID, mailboxId);
|
||||
i.putExtra(EXTRA_MESSAGE_ID, messageId);
|
||||
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
fromActivity.startActivity(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if (Email.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Email.LOG_TAG, "MessageListXL onCreate");
|
||||
|
@ -169,12 +189,13 @@ public class MessageListXL extends Activity implements
|
|||
final Intent i = getIntent();
|
||||
final long accountId = i.getLongExtra(EXTRA_ACCOUNT_ID, -1);
|
||||
final long mailboxId = i.getLongExtra(EXTRA_MAILBOX_ID, -1);
|
||||
final long messageId = i.getLongExtra(EXTRA_MESSAGE_ID, -1);
|
||||
if (Email.DEBUG) {
|
||||
Log.d(Email.LOG_TAG, String.format("initFromIntent: %d %d", accountId, mailboxId));
|
||||
}
|
||||
|
||||
if (accountId != -1) {
|
||||
mFragmentManager.selectAccount(accountId, mailboxId, true);
|
||||
mFragmentManager.selectAccount(accountId, mailboxId, messageId, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -413,12 +434,12 @@ public class MessageListXL extends Activity implements
|
|||
private class MailboxListFragmentCallback implements MailboxListFragment.Callback {
|
||||
@Override
|
||||
public void onMailboxSelected(long accountId, long mailboxId) {
|
||||
mFragmentManager.selectMailbox(mailboxId, true);
|
||||
mFragmentManager.selectMailbox(mailboxId, -1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccountSelected(long accountId) {
|
||||
mFragmentManager.selectAccount(accountId, -1, true);
|
||||
mFragmentManager.selectAccount(accountId, -1, -1, true);
|
||||
loadAccounts(); // This will update the account spinner, and select the account.
|
||||
}
|
||||
|
||||
|
@ -642,7 +663,7 @@ public class MessageListXL extends Activity implements
|
|||
@Override
|
||||
public boolean onNavigationItemSelected(int itemPosition, long accountId) {
|
||||
if (Email.DEBUG) Log.d(Email.LOG_TAG, "Account selected: accountId=" + accountId);
|
||||
mFragmentManager.selectAccount(accountId, -1, true);
|
||||
mFragmentManager.selectAccount(accountId, -1, -1, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -261,12 +261,8 @@ class MessageListXLFragmentManager {
|
|||
if (accountId == -1) {
|
||||
return;
|
||||
}
|
||||
// selectAccount() calls selectMailbox() if necessary
|
||||
selectAccount(accountId, mailboxId, false);
|
||||
if (messageId == -1) {
|
||||
return;
|
||||
}
|
||||
selectMessage(messageId);
|
||||
// selectAccount() calls selectMailbox/Message() if necessary.
|
||||
selectAccount(accountId, mailboxId, messageId, false);
|
||||
}
|
||||
|
||||
private void saveMessageListFragmentState() {
|
||||
|
@ -308,10 +304,12 @@ class MessageListXLFragmentManager {
|
|||
*
|
||||
* @param accountId account ID. Must not be -1.
|
||||
* @param mailboxId mailbox ID. Pass -1 to open account's inbox.
|
||||
* @param messageId message ID. Pass -1 to not open a message.
|
||||
* @param byExplicitUserAction set true if the user is explicitly opening the mailbox,
|
||||
* in which case we perform "auto-refresh".
|
||||
*/
|
||||
public void selectAccount(long accountId, long mailboxId, boolean byExplicitUserAction) {
|
||||
public void selectAccount(long accountId, long mailboxId, long messageId,
|
||||
boolean byExplicitUserAction) {
|
||||
if (Email.DEBUG_LIFECYCLE && Email.DEBUG) {
|
||||
Log.d(Email.LOG_TAG, "selectAccount mAccountId=" + accountId);
|
||||
}
|
||||
|
@ -337,11 +335,11 @@ class MessageListXLFragmentManager {
|
|||
|
||||
if ((accountId == Account.ACCOUNT_ID_COMBINED_VIEW) && (mailboxId == -1)) {
|
||||
// When opening the Combined view, the right pane will be "combined inbox".
|
||||
selectMailbox(Mailbox.QUERY_ALL_INBOXES, false);
|
||||
selectMailbox(Mailbox.QUERY_ALL_INBOXES, -1, false);
|
||||
} else if (mailboxId == -1) {
|
||||
startInboxLookup();
|
||||
} else {
|
||||
selectMailbox(mailboxId, byExplicitUserAction);
|
||||
selectMailbox(mailboxId, messageId, byExplicitUserAction);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -371,10 +369,11 @@ class MessageListXLFragmentManager {
|
|||
* {@link #selectAccount}.
|
||||
*
|
||||
* @param mailboxId ID of mailbox
|
||||
* @param messageId message ID. Pass -1 to not open a message.
|
||||
* @param byExplicitUserAction set true if the user is explicitly opening the mailbox,
|
||||
* in which case we perform "auto-refresh".
|
||||
*/
|
||||
public void selectMailbox(long mailboxId, boolean byExplicitUserAction) {
|
||||
public void selectMailbox(long mailboxId, long messageId, boolean byExplicitUserAction) {
|
||||
if (Email.DEBUG_LIFECYCLE && Email.DEBUG) {
|
||||
Log.d(Email.LOG_TAG, "selectMailbox mMailboxId=" + mailboxId);
|
||||
}
|
||||
|
@ -399,7 +398,11 @@ class MessageListXLFragmentManager {
|
|||
|
||||
mMailboxListFragment.setSelectedMailbox(mMailboxId);
|
||||
mTargetActivity.onMailboxChanged(mAccountId, mMailboxId);
|
||||
mThreePane.showLeftPane(); // Show mailbox list
|
||||
if (messageId == -1) {
|
||||
mThreePane.showLeftPane(); // Show mailbox list
|
||||
} else {
|
||||
selectMessage(messageId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -481,7 +484,7 @@ class MessageListXLFragmentManager {
|
|||
if (Email.DEBUG_LIFECYCLE && Email.DEBUG) {
|
||||
Log.d(Email.LOG_TAG, " Found inbox");
|
||||
}
|
||||
selectMailbox(mailboxId, true);
|
||||
selectMailbox(mailboxId, -1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,14 +62,18 @@ public class Welcome extends Activity {
|
|||
-n com.google.android.email/com.android.email.activity.Welcome \
|
||||
-e DEBUG_PANE_MODE 2 --el ACCOUNT_ID 2
|
||||
|
||||
* Open Combined Inbox (ID=-2) in 2 pane
|
||||
* Open a message (account id=1, mailbox id=2, message id=3)
|
||||
adb shell am start -a android.intent.action.MAIN \
|
||||
-n com.google.android.email/com.android.email.activity.Welcome \
|
||||
-e DEBUG_PANE_MODE 2 --el MAILBOX_ID -2
|
||||
-e DEBUG_PANE_MODE 2 \
|
||||
--el ACCOUNT_ID 1 \
|
||||
--el MAILBOX_ID 2 \
|
||||
--el MESSAGE_ID 3
|
||||
|
||||
*/
|
||||
private static final String EXTRA_ACCOUNT_ID = "ACCOUNT_ID";
|
||||
private static final String EXTRA_MAILBOX_ID = "MAILBOX_ID";
|
||||
private static final String EXTRA_MESSAGE_ID = "MESSAGE_ID";
|
||||
|
||||
/**
|
||||
* Extra for debugging. Set 1 to force one-pane. Set 2 to force two-pane.
|
||||
|
@ -110,6 +114,21 @@ public class Welcome extends Activity {
|
|||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an Intent to open a message.
|
||||
*/
|
||||
public static Intent createOpenMessageIntent(Context context, long accountId,
|
||||
long mailboxId, long messageId) {
|
||||
Intent i = new Intent(context, Welcome.class);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
if (accountId != -1) {
|
||||
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
|
||||
i.putExtra(EXTRA_MAILBOX_ID, mailboxId);
|
||||
i.putExtra(EXTRA_MESSAGE_ID, messageId);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open account's inbox.
|
||||
*/
|
||||
|
@ -172,8 +191,9 @@ public class Welcome extends Activity {
|
|||
|
||||
final long accountId = getIntent().getLongExtra(EXTRA_ACCOUNT_ID, -1);
|
||||
final long mailboxId = getIntent().getLongExtra(EXTRA_MAILBOX_ID, -1);
|
||||
final long messageId = getIntent().getLongExtra(EXTRA_MESSAGE_ID, -1);
|
||||
final int debugPaneMode = getDebugPaneMode(getIntent());
|
||||
new MainActivityLauncher(this, accountId, mailboxId, debugPaneMode).execute();
|
||||
new MainActivityLauncher(this, accountId, mailboxId, messageId, debugPaneMode).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -208,12 +228,14 @@ public class Welcome extends Activity {
|
|||
private final int mDebugPaneMode;
|
||||
private final long mAccountId;
|
||||
private final long mMailboxId;
|
||||
private final long mMessageId;
|
||||
|
||||
public MainActivityLauncher(Activity fromActivity, long accountId, long mailboxId,
|
||||
int debugPaneMode) {
|
||||
long messageId, int debugPaneMode) {
|
||||
mFromActivity = fromActivity;
|
||||
mAccountId = accountId;
|
||||
mMailboxId = mailboxId;
|
||||
mMessageId = messageId;
|
||||
mDebugPaneMode = debugPaneMode;
|
||||
}
|
||||
|
||||
|
@ -221,6 +243,10 @@ public class Welcome extends Activity {
|
|||
return mMailboxId != -1;
|
||||
}
|
||||
|
||||
private boolean isMessageSelected() {
|
||||
return mMessageId != -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
final int numAccount =
|
||||
|
@ -237,13 +263,18 @@ public class Welcome extends Activity {
|
|||
|| (useTwoPane(mFromActivity) && mDebugPaneMode == 0);
|
||||
|
||||
if (useTwoPane) {
|
||||
if (isMailboxSelected()) {
|
||||
if (isMessageSelected()) {
|
||||
MessageListXL.actionOpenMessage(mFromActivity, accountId, mMailboxId,
|
||||
mMessageId);
|
||||
} else if (isMailboxSelected()) {
|
||||
MessageListXL.actionOpenMailbox(mFromActivity, accountId, mMailboxId);
|
||||
} else {
|
||||
MessageListXL.actionOpenAccount(mFromActivity, accountId);
|
||||
}
|
||||
} else {
|
||||
if (isMailboxSelected()) {
|
||||
if (isMessageSelected()) {
|
||||
MessageView.actionView(mFromActivity, mMessageId, mMailboxId);
|
||||
} else if (isMailboxSelected()) {
|
||||
MessageList.actionHandleMailbox(mFromActivity, mMailboxId);
|
||||
} else {
|
||||
MessageList.actionHandleAccount(
|
||||
|
|
|
@ -18,9 +18,11 @@ package com.android.email.provider;
|
|||
|
||||
import com.android.email.Email;
|
||||
import com.android.email.R;
|
||||
import com.android.email.Utility;
|
||||
import com.android.email.activity.MessageCompose;
|
||||
import com.android.email.activity.MessageView;
|
||||
import com.android.email.activity.Welcome;
|
||||
import com.android.email.data.ThrottlingCursorLoader;
|
||||
import com.android.email.provider.EmailContent.Mailbox;
|
||||
import com.android.email.provider.EmailContent.Message;
|
||||
import com.android.email.provider.EmailContent.MessageColumns;
|
||||
|
||||
|
@ -553,9 +555,14 @@ public class WidgetProvider extends AppWidgetProvider {
|
|||
long arg1 = Long.parseLong(pathSegments.get(1));
|
||||
if (COMMAND_NAME_VIEW_MESSAGE.equals(command)) {
|
||||
// "view", <message id>, <mailbox id>
|
||||
Intent i = MessageView.getActionViewIntent(this, arg1,
|
||||
Long.parseLong(pathSegments.get(2)));
|
||||
startActivity(i);
|
||||
final long mailboxId = Long.parseLong(pathSegments.get(2));
|
||||
final long messageId = arg1;
|
||||
Utility.runAsync(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
openMessage(mailboxId, messageId);
|
||||
}
|
||||
});
|
||||
} else if (COMMAND_NAME_SWITCH_LIST_VIEW.equals(command)) {
|
||||
// "next_view", <widget id>
|
||||
EmailWidget widget = sWidgetMap.get((int)arg1);
|
||||
|
@ -569,5 +576,14 @@ public class WidgetProvider extends AppWidgetProvider {
|
|||
return Service.START_NOT_STICKY;
|
||||
}
|
||||
|
||||
private void openMessage(long mailboxId, long messageId) {
|
||||
// TODO Use narrower projection.
|
||||
Mailbox mailbox = Mailbox.restoreMailboxWithId(this, mailboxId);
|
||||
if (mailbox == null) {
|
||||
return;
|
||||
}
|
||||
startActivity(Welcome.createOpenMessageIntent(this, mailbox.mAccountKey, mailboxId,
|
||||
messageId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue