| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.email2.ui; |
| |
| import android.content.ComponentName; |
| import android.content.ContentResolver; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.UriMatcher; |
| import android.content.pm.PackageManager; |
| import android.database.Cursor; |
| import android.net.Uri; |
| import android.os.Bundle; |
| |
| import com.android.email.Preferences; |
| import com.android.email.activity.RequestPermissionsActivity; |
| import com.android.email.provider.EmailProvider; |
| import com.android.email.service.AttachmentService; |
| import com.android.email.service.EmailServiceUtils; |
| import com.android.emailcommon.Logging; |
| import com.android.emailcommon.TempDirectory; |
| import com.android.emailcommon.provider.Mailbox; |
| import com.android.emailcommon.utility.IntentUtilities; |
| 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; |
| |
| public class MailActivityEmail extends com.android.mail.ui.MailActivity { |
| |
| public static final String LOG_TAG = LogTag.getLogTag(); |
| |
| 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); |
| } |
| |
| |
| @Override |
| public void onCreate(Bundle bundle) { |
| if (RequestPermissionsActivity.startPermissionActivity(this)) { |
| finish(); |
| } |
| 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); |
| TempDirectory.setTempDirectory(this); |
| |
| // Make sure all required services are running when the app is started (can prevent |
| // issues after an adb sync/install) |
| EmailProvider.setServicesEnabledAsync(this); |
| } |
| |
| /** |
| * Internal, utility method for logging. |
| * The calls to log() must be guarded with "if (Email.LOGD)" for performance reasons. |
| */ |
| public static void log(String message) { |
| LogUtils.d(Logging.LOG_TAG, message); |
| } |
| |
| 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 = com.android.mail.providers.Account.builder().buildFrom(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.folderUri.fullUri, account); |
| } |
| } |