• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.emailcommon.utility;
18 
19 
20 import android.app.Activity;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.net.Uri;
24 import android.text.TextUtils;
25 
26 public final class IntentUtilities {
27     // Format for activity URIs: content://ui.email.android.com/...
28     private static final String ACTIVITY_INTENT_SCHEME = "content";
29     private static final String ACTIVITY_INTENT_HOST = "ui.email.android.com";
30 
31     private static final String ACCOUNT_ID_PARAM = "ACCOUNT_ID";
32     private static final String MAILBOX_ID_PARAM = "MAILBOX_ID";
33     private static final String MESSAGE_ID_PARAM = "MESSAGE_ID";
34     private static final String ACCOUNT_UUID_PARAM = "ACCOUNT_UUID";
35 
IntentUtilities()36     private IntentUtilities() {
37     }
38 
39     /**
40      * @return a URI builder for "content://ui.email.android.com/..."
41      */
createActivityIntentUrlBuilder(String path)42     public static Uri.Builder createActivityIntentUrlBuilder(String path) {
43         final Uri.Builder b = new Uri.Builder();
44         b.scheme(ACTIVITY_INTENT_SCHEME);
45         b.authority(ACTIVITY_INTENT_HOST);
46         b.path(path);
47         return b;
48     }
49 
50     /**
51      * Add the account ID parameter.
52      */
setAccountId(Uri.Builder b, long accountId)53     public static void setAccountId(Uri.Builder b, long accountId) {
54         if (accountId != -1) {
55             b.appendQueryParameter(ACCOUNT_ID_PARAM, Long.toString(accountId));
56         }
57     }
58 
59     /**
60      * Add the mailbox ID parameter.
61      */
setMailboxId(Uri.Builder b, long mailboxId)62     public static void setMailboxId(Uri.Builder b, long mailboxId) {
63         if (mailboxId != -1) {
64             b.appendQueryParameter(MAILBOX_ID_PARAM, Long.toString(mailboxId));
65         }
66     }
67 
68     /**
69      * Add the message ID parameter.
70      */
setMessageId(Uri.Builder b, long messageId)71     public static void setMessageId(Uri.Builder b, long messageId) {
72         if (messageId != -1) {
73             b.appendQueryParameter(MESSAGE_ID_PARAM, Long.toString(messageId));
74         }
75     }
76 
77     /**
78      * Add the account UUID parameter.
79      */
setAccountUuid(Uri.Builder b, String mUuid)80     public static void setAccountUuid(Uri.Builder b, String mUuid) {
81         if (TextUtils.isEmpty(mUuid)) {
82             throw new IllegalArgumentException();
83         }
84         b.appendQueryParameter(ACCOUNT_UUID_PARAM, mUuid);
85     }
86 
87     /**
88      * Retrieve the account ID.
89      */
getAccountIdFromIntent(Intent intent)90     public static long getAccountIdFromIntent(Intent intent) {
91         return getLongFromIntent(intent, ACCOUNT_ID_PARAM);
92     }
93 
94     /**
95      * Retrieve the mailbox ID.
96      */
getMailboxIdFromIntent(Intent intent)97     public static long getMailboxIdFromIntent(Intent intent) {
98         return getLongFromIntent(intent, MAILBOX_ID_PARAM);
99     }
100 
101     /**
102      * Retrieve the message ID.
103      */
getMessageIdFromIntent(Intent intent)104     public static long getMessageIdFromIntent(Intent intent) {
105         return getLongFromIntent(intent, MESSAGE_ID_PARAM);
106     }
107 
108     /**
109      * Retrieve the account UUID, or null if the UUID param is not found.
110      */
getAccountUuidFromIntent(Intent intent)111     public static String getAccountUuidFromIntent(Intent intent) {
112         final Uri uri = intent.getData();
113         if (uri == null) {
114             return null;
115         }
116         String uuid = uri.getQueryParameter(ACCOUNT_UUID_PARAM);
117         return TextUtils.isEmpty(uuid) ? null : uuid;
118     }
119 
getLongFromIntent(Intent intent, String paramName)120     private static long getLongFromIntent(Intent intent, String paramName) {
121         long value = -1;
122         if (intent.getData() != null) {
123             value = getLongParamFromUri(intent.getData(), paramName, -1);
124         }
125         return value;
126     }
127 
getLongParamFromUri(Uri uri, String paramName, long defaultValue)128     private static long getLongParamFromUri(Uri uri, String paramName, long defaultValue) {
129         final String value = uri.getQueryParameter(paramName);
130         if (!TextUtils.isEmpty(value)) {
131             try {
132                 return Long.parseLong(value);
133             } catch (NumberFormatException e) {
134                 // return default
135             }
136         }
137         return defaultValue;
138     }
139 
140     /**
141      * Create an {@link Intent} to launch an activity as the main entry point.  Existing activities
142      * will all be closed.
143      */
createRestartAppIntent(Context context, Class<? extends Activity> clazz)144     public static Intent createRestartAppIntent(Context context, Class<? extends Activity> clazz) {
145         Intent i = new Intent(context, clazz);
146         prepareRestartAppIntent(i);
147         return i;
148     }
149 
150     /**
151      * Create an {@link Intent} to launch an activity as the main entry point.  Existing activities
152      * will all be closed.
153      */
createRestartAppIntent(Uri data)154     public static Intent createRestartAppIntent(Uri data) {
155         Intent i = new Intent(Intent.ACTION_MAIN, data);
156         prepareRestartAppIntent(i);
157         return i;
158     }
159 
prepareRestartAppIntent(Intent i)160     private static void prepareRestartAppIntent(Intent i) {
161         i.setAction(Intent.ACTION_MAIN);
162         i.addCategory(Intent.CATEGORY_LAUNCHER);
163         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
164         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
165     }
166 }
167