• 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 
28     public static final String PATH_SETTINGS = "settings";
29 
30     // Format for activity URIs: content://ui.email.android.com/...
31     private static final String ACTIVITY_INTENT_SCHEME = "content";
32     private static final String ACTIVITY_INTENT_HOST = "ui.email.android.com";
33 
34     private static final String ACCOUNT_ID_PARAM = "ACCOUNT_ID";
35     private static final String ACCOUNT_NAME_PARAM = "ACCOUNT_NAME";
36     private static final String MAILBOX_ID_PARAM = "MAILBOX_ID";
37     private static final String MESSAGE_ID_PARAM = "MESSAGE_ID";
38     private static final String ACCOUNT_UUID_PARAM = "ACCOUNT_UUID";
39 
IntentUtilities()40     private IntentUtilities() {
41     }
42 
43     /**
44      * @return a URI builder for "content://ui.email.android.com/..."
45      */
createActivityIntentUrlBuilder(String path)46     public static Uri.Builder createActivityIntentUrlBuilder(String path) {
47         final Uri.Builder b = new Uri.Builder();
48         b.scheme(ACTIVITY_INTENT_SCHEME);
49         b.authority(ACTIVITY_INTENT_HOST);
50         b.path(path);
51         return b;
52     }
53 
54     /**
55      * Add the account ID parameter.
56      */
setAccountId(Uri.Builder b, long accountId)57     public static void setAccountId(Uri.Builder b, long accountId) {
58         if (accountId != -1) {
59             b.appendQueryParameter(ACCOUNT_ID_PARAM, Long.toString(accountId));
60         }
61     }
62 
63     /**
64      * Add the account name parameter.
65      */
setAccountName(Uri.Builder b, String accountName)66     public static void setAccountName(Uri.Builder b, String accountName) {
67         if (accountName != null) {
68             b.appendQueryParameter(ACCOUNT_NAME_PARAM, accountName);
69         }
70     }
71 
72     /**
73      * Add the mailbox ID parameter.
74      */
setMailboxId(Uri.Builder b, long mailboxId)75     public static void setMailboxId(Uri.Builder b, long mailboxId) {
76         if (mailboxId != -1) {
77             b.appendQueryParameter(MAILBOX_ID_PARAM, Long.toString(mailboxId));
78         }
79     }
80 
81     /**
82      * Add the message ID parameter.
83      */
setMessageId(Uri.Builder b, long messageId)84     public static void setMessageId(Uri.Builder b, long messageId) {
85         if (messageId != -1) {
86             b.appendQueryParameter(MESSAGE_ID_PARAM, Long.toString(messageId));
87         }
88     }
89 
90     /**
91      * Add the account UUID parameter.
92      */
setAccountUuid(Uri.Builder b, String mUuid)93     public static void setAccountUuid(Uri.Builder b, String mUuid) {
94         if (TextUtils.isEmpty(mUuid)) {
95             throw new IllegalArgumentException();
96         }
97         b.appendQueryParameter(ACCOUNT_UUID_PARAM, mUuid);
98     }
99 
100     /**
101      * Retrieve the account ID from the underlying URI.
102      */
getAccountIdFromIntent(Intent intent)103     public static long getAccountIdFromIntent(Intent intent) {
104         return getLongFromIntent(intent, ACCOUNT_ID_PARAM);
105     }
106 
107     /**
108      * Retrieve the account name.
109      */
getAccountNameFromIntent(Intent intent)110     public static String getAccountNameFromIntent(Intent intent) {
111         return getStringFromIntent(intent, ACCOUNT_NAME_PARAM);
112     }
113 
114     /**
115      * Retrieve the mailbox ID.
116      */
getMailboxIdFromIntent(Intent intent)117     public static long getMailboxIdFromIntent(Intent intent) {
118         return getLongFromIntent(intent, MAILBOX_ID_PARAM);
119     }
120 
121     /**
122      * Retrieve the message ID.
123      */
getMessageIdFromIntent(Intent intent)124     public static long getMessageIdFromIntent(Intent intent) {
125         return getLongFromIntent(intent, MESSAGE_ID_PARAM);
126     }
127 
128     /**
129      * Retrieve the account UUID, or null if the UUID param is not found.
130      */
getAccountUuidFromIntent(Intent intent)131     public static String getAccountUuidFromIntent(Intent intent) {
132         final Uri uri = intent.getData();
133         if (uri == null) {
134             return null;
135         }
136         String uuid = uri.getQueryParameter(ACCOUNT_UUID_PARAM);
137         return TextUtils.isEmpty(uuid) ? null : uuid;
138     }
139 
getLongFromIntent(Intent intent, String paramName)140     private static long getLongFromIntent(Intent intent, String paramName) {
141         long value = -1;
142         if (intent.getData() != null) {
143             value = getLongParamFromUri(intent.getData(), paramName, -1);
144         }
145         return value;
146     }
147 
getStringFromIntent(Intent intent, String paramName)148     private static String getStringFromIntent(Intent intent, String paramName) {
149         String value = null;
150         if (intent.getData() != null) {
151             value = getStringParamFromUri(intent.getData(), paramName, null);
152         }
153         return value;
154     }
155 
getLongParamFromUri(Uri uri, String paramName, long defaultValue)156     private static long getLongParamFromUri(Uri uri, String paramName, long defaultValue) {
157         final String value = uri.getQueryParameter(paramName);
158         if (!TextUtils.isEmpty(value)) {
159             try {
160                 return Long.parseLong(value);
161             } catch (NumberFormatException e) {
162                 // return default
163             }
164         }
165         return defaultValue;
166     }
167 
getStringParamFromUri(Uri uri, String paramName, String defaultValue)168     private static String getStringParamFromUri(Uri uri, String paramName, String defaultValue) {
169         final String value = uri.getQueryParameter(paramName);
170         if (value == null) {
171             return defaultValue;
172         }
173         return value;
174     }
175 
176     /**
177      * Create an {@link Intent} to launch an activity as the main entry point.  Existing activities
178      * will all be closed.
179      */
createRestartAppIntent(Context context, Class<? extends Activity> clazz)180     public static Intent createRestartAppIntent(Context context, Class<? extends Activity> clazz) {
181         Intent i = new Intent(context, clazz);
182         prepareRestartAppIntent(i);
183         return i;
184     }
185 
186     /**
187      * Create an {@link Intent} to launch an activity as the main entry point.  Existing activities
188      * will all be closed.
189      */
createRestartAppIntent(Uri data)190     public static Intent createRestartAppIntent(Uri data) {
191         Intent i = new Intent(Intent.ACTION_MAIN, data);
192         prepareRestartAppIntent(i);
193         return i;
194     }
195 
prepareRestartAppIntent(Intent i)196     private static void prepareRestartAppIntent(Intent i) {
197         i.setAction(Intent.ACTION_MAIN);
198         i.addCategory(Intent.CATEGORY_LAUNCHER);
199         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
200         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
201     }
202 }
203