App icon on app drawer shouldn't restart the app

When launching Welcome and MessageListXL, make sure they start
as a "main" activity.  This fixes the reported bug.

Bug 3366537

Change-Id: I68facd739bd1dad8eeec52015b0720299d632e11
This commit is contained in:
Makoto Onuki 2011-01-19 16:25:26 -08:00
parent 985155fddd
commit 0c75f83f03
3 changed files with 22 additions and 12 deletions

View File

@ -16,6 +16,7 @@
package com.android.email;
import com.android.email.activity.Welcome;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.AccountColumns;
@ -33,6 +34,7 @@ import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor;
@ -1263,4 +1265,17 @@ public class Utility {
return new CloseTraceCursorWrapper(original);
}
}
/**
* Create an {@link Intent} to launch an activity as the main entry point. Existing activities
* will all be closed.
*/
public static Intent createRestartAppIntent(Context context, Class<? extends Activity> clazz) {
Intent i = new Intent(context, clazz);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return i;
}
}

View File

@ -98,11 +98,10 @@ public class MessageListXL extends Activity implements
* @param accountId If -1, default account will be used.
*/
public static void actionOpenAccount(Activity fromActivity, long accountId) {
Intent i = new Intent(fromActivity, MessageListXL.class);
Intent i = Utility.createRestartAppIntent(fromActivity, MessageListXL.class);
if (accountId != -1) {
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
}
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
fromActivity.startActivity(i);
}
@ -114,13 +113,12 @@ public class MessageListXL extends Activity implements
* {@link Mailbox#QUERY_ALL_INBOXES}) don't work.
*/
public static void actionOpenMailbox(Activity fromActivity, long accountId, long mailboxId) {
Intent i = new Intent(fromActivity, MessageListXL.class);
if (accountId == -1 || mailboxId == -1) {
throw new InvalidParameterException();
}
Intent i = Utility.createRestartAppIntent(fromActivity, MessageListXL.class);
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_MAILBOX_ID, mailboxId);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
fromActivity.startActivity(i);
}
@ -134,14 +132,13 @@ public class MessageListXL extends Activity implements
*/
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();
}
Intent i = Utility.createRestartAppIntent(fromActivity, MessageListXL.class);
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);
}

View File

@ -19,6 +19,7 @@ package com.android.email.activity;
import com.android.email.AccountBackupRestore;
import com.android.email.Email;
import com.android.email.ExchangeUtils;
import com.android.email.Utility;
import com.android.email.activity.setup.AccountSetupBasics;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailContent.Account;
@ -93,8 +94,7 @@ public class Welcome extends Activity {
* which will drop any other activities on the stack (e.g. AccountFolderList or MessageList).
*/
public static void actionStart(Activity fromActivity) {
Intent i = new Intent(fromActivity, Welcome.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent i = Utility.createRestartAppIntent(fromActivity, Welcome.class);
fromActivity.startActivity(i);
}
@ -102,8 +102,7 @@ public class Welcome extends Activity {
* Create an Intent to open account's inbox.
*/
public static Intent createOpenAccountInboxIntent(Context context, long accountId) {
Intent i = new Intent(context, Welcome.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent i = Utility.createRestartAppIntent(context, Welcome.class);
if (accountId != -1) {
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
}
@ -115,8 +114,7 @@ public class Welcome extends Activity {
*/
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);
Intent i = Utility.createRestartAppIntent(context, Welcome.class);
if (accountId != -1) {
i.putExtra(EXTRA_ACCOUNT_ID, accountId);
i.putExtra(EXTRA_MAILBOX_ID, mailboxId);