Support legacy shortcuts

We need to support shortcuts that were created with previous versions
of Email

Bug: 8530220
Change-Id: I9e2a44b561f5617ffa954af37a9e78a95400f7dc
This commit is contained in:
Paul Westbrook 2013-04-04 02:42:48 -07:00
parent 30dec61dbd
commit 391a7fc0e9
3 changed files with 110 additions and 1 deletions

View File

@ -209,6 +209,17 @@
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.APP_EMAIL" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<data
android:scheme="content"
android:host="ui.email.android.com"
android:path="/view/mailbox"
/>
</intent-filter>
</activity-alias>
<!-- Must be exported in order for the AccountManager to launch it -->

View File

@ -2720,7 +2720,8 @@ outer:
return sb.toString();
}
private static final Uri BASE_EXTERNAL_URI = Uri.parse("content://ui.email.android.com");
public static final String LEGACY_AUTHORITY = "ui.email.android.com";
private static final Uri BASE_EXTERNAL_URI = Uri.parse("content://" + LEGACY_AUTHORITY);
private static final Uri BASE_EXTERAL_URI2 = Uri.parse("content://ui.email2.android.com");

View File

@ -17,16 +17,20 @@
package com.android.email2.ui;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import com.android.email.NotificationController;
import com.android.email.Preferences;
import com.android.email.R;
import com.android.email.provider.EmailProvider;
import com.android.email.service.AttachmentDownloadService;
import com.android.email.service.EmailServiceUtils;
import com.android.email.service.MailService;
@ -34,9 +38,18 @@ import com.android.emailcommon.Logging;
import com.android.emailcommon.TempDirectory;
import com.android.emailcommon.provider.Account;
import com.android.emailcommon.provider.EmailContent;
import com.android.emailcommon.provider.Mailbox;
import com.android.emailcommon.service.EmailServiceProxy;
import com.android.emailcommon.utility.EmailAsyncTask;
import com.android.emailcommon.utility.IntentUtilities;
import com.android.emailcommon.utility.Utility;
import com.android.mail.providers.Folder;
import com.android.mail.providers.UIProvider;
import com.android.mail.utils.LogTag;
import com.android.mail.utils.LogUtils;
import com.android.mail.utils.Utils;
import java.util.List;
public class MailActivityEmail extends com.android.mail.ui.MailActivity {
/**
@ -53,6 +66,8 @@ public class MailActivityEmail extends com.android.mail.ui.MailActivity {
*/
public static boolean DEBUG;
public static final String LOG_TAG = LogTag.getLogTag();
// Exchange debugging flags (passed to Exchange, when available, via EmailServiceProxy)
public static boolean DEBUG_EXCHANGE;
public static boolean DEBUG_VERBOSE;
@ -85,6 +100,17 @@ public class MailActivityEmail extends com.android.mail.ui.MailActivity {
private static Thread sUiThread;
private static final int MATCH_LEGACY_SHORTCUT_INTENT = 1;
/**
* A matcher for data URI's that specify conversation list info.
*/
private static final UriMatcher sUrlMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sUrlMatcher.addURI(
EmailProvider.LEGACY_AUTHORITY, "view/mailbox", MATCH_LEGACY_SHORTCUT_INTENT);
}
/**
* Asynchronous version of {@link #setServicesEnabledSync(Context)}. Use when calling from
* UI thread (or lifecycle entry points.)
@ -163,6 +189,28 @@ public class MailActivityEmail extends com.android.mail.ui.MailActivity {
@Override
public void onCreate(Bundle bundle) {
final Intent intent = getIntent();
final Uri data = intent != null ? intent.getData() : null;
if (data != null) {
final int match = sUrlMatcher.match(data);
switch (match) {
case MATCH_LEGACY_SHORTCUT_INTENT: {
final long mailboxId = IntentUtilities.getMailboxIdFromIntent(intent);
final Mailbox mailbox = Mailbox.restoreMailboxWithId(this, mailboxId);
if (mailbox == null) {
LogUtils.e(LOG_TAG, "unable to restore mailbox");
break;
}
final Intent viewIntent = getViewIntent(mailbox.mAccountKey, mailboxId);
if (viewIntent != null) {
setIntent(viewIntent);
}
break;
}
}
}
super.onCreate(bundle);
sUiThread = Thread.currentThread();
Preferences prefs = Preferences.getPreferences(this);
@ -240,4 +288,53 @@ public class MailActivityEmail extends com.android.mail.ui.MailActivity {
public static void enableStrictMode(boolean enabled) {
Utility.enableStrictMode(enabled);
}
private Intent getViewIntent(long accountId, long mailboxId) {
final ContentResolver contentResolver = getContentResolver();
final Cursor accountCursor = contentResolver.query(
EmailProvider.uiUri("uiaccount", accountId),
UIProvider.ACCOUNTS_PROJECTION_NO_CAPABILITIES,
null, null, null);
if (accountCursor == null) {
LogUtils.e(LOG_TAG, "Null account cursor for mAccountId %d", accountId);
return null;
}
com.android.mail.providers.Account account = null;
try {
if (accountCursor.moveToFirst()) {
account = new com.android.mail.providers.Account(accountCursor);
}
} finally {
accountCursor.close();
}
final Cursor folderCursor = contentResolver.query(
EmailProvider.uiUri("uifolder", mailboxId),
UIProvider.FOLDERS_PROJECTION, null, null, null);
if (folderCursor == null) {
LogUtils.e(LOG_TAG, "Null folder cursor for account %d, mailbox %d",
accountId, mailboxId);
return null;
}
Folder folder = null;
try {
if (folderCursor.moveToFirst()) {
folder = new Folder(folderCursor);
} else {
LogUtils.e(LOG_TAG, "Empty folder cursor for account %d, mailbox %d",
accountId, mailboxId);
return null;
}
} finally {
folderCursor.close();
}
return Utils.createViewFolderIntent(this, folder.uri, account);
}
}