1 /* 2 * Copyright (C) 2015 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 package com.android.messaging.ui; 17 18 import android.app.Activity; 19 import android.app.Fragment; 20 import android.app.PendingIntent; 21 import android.content.ContentValues; 22 import android.content.Context; 23 import android.content.Intent; 24 import android.graphics.Point; 25 import android.graphics.Rect; 26 import android.net.Uri; 27 import android.os.Bundle; 28 29 import com.android.messaging.Factory; 30 import com.android.messaging.datamodel.data.MessageData; 31 import com.android.messaging.util.ConversationIdSet; 32 33 /** 34 * A central repository of Intents used to start activities. 35 */ 36 public abstract class UIIntents { 37 public static UIIntents get() { 38 return Factory.get().getUIIntents(); 39 } 40 41 // Intent extras 42 public static final String UI_INTENT_EXTRA_CONVERSATION_ID = "conversation_id"; 43 44 // Sending draft data (from share intent / message forwarding) to the ConversationActivity. 45 public static final String UI_INTENT_EXTRA_DRAFT_DATA = "draft_data"; 46 47 // The request code for picking image from the Document picker. 48 public static final int REQUEST_PICK_IMAGE_FROM_DOCUMENT_PICKER = 1400; 49 50 // Indicates what type of notification this applies to (See BugleNotifications: 51 // UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, UPDATE_ALL) 52 public static final String UI_INTENT_EXTRA_NOTIFICATIONS_UPDATE = "notifications_update"; 53 54 // Pass a set of conversation id's. 55 public static final String UI_INTENT_EXTRA_CONVERSATION_ID_SET = "conversation_id_set"; 56 57 // Sending class zero message to its activity 58 public static final String UI_INTENT_EXTRA_MESSAGE_VALUES = "message_values"; 59 60 // For the widget to go to the ConversationList from the Conversation. 61 public static final String UI_INTENT_EXTRA_GOTO_CONVERSATION_LIST = "goto_conv_list"; 62 63 // Indicates whether a conversation is launched with custom transition. 64 public static final String UI_INTENT_EXTRA_WITH_CUSTOM_TRANSITION = "with_custom_transition"; 65 66 public static final String ACTION_RESET_NOTIFICATIONS = 67 "com.android.messaging.reset_notifications"; 68 69 // Sending VCard uri to VCard detail activity 70 public static final String UI_INTENT_EXTRA_VCARD_URI = "vcard_uri"; 71 72 public static final String CMAS_COMPONENT = "com.android.cellbroadcastreceiver"; 73 74 // Intent action for local broadcast receiver for conversation self id change. 75 public static final String CONVERSATION_SELF_ID_CHANGE_BROADCAST_ACTION = 76 "conversation_self_id_change"; 77 78 // Conversation self id 79 public static final String UI_INTENT_EXTRA_CONVERSATION_SELF_ID = "conversation_self_id"; 80 81 // For opening an APN editor on a particular row in the apn database. 82 public static final String UI_INTENT_EXTRA_APN_ROW_ID = "apn_row_id"; 83 84 // Subscription id 85 public static final String UI_INTENT_EXTRA_SUB_ID = "sub_id"; 86 87 // Per-Subscription setting activity title 88 public static final String UI_INTENT_EXTRA_PER_SUBSCRIPTION_SETTING_TITLE = 89 "per_sub_setting_title"; 90 91 // Is application settings launched as the top level settings activity? 92 public static final String UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS = "top_level_settings"; 93 94 // Sending attachment uri from widget 95 public static final String UI_INTENT_EXTRA_ATTACHMENT_URI = "attachment_uri"; 96 97 // Sending attachment content type from widget 98 public static final String UI_INTENT_EXTRA_ATTACHMENT_TYPE = "attachment_type"; 99 100 public static final String ACTION_WIDGET_CONVERSATION = 101 "com.android.messaging.widget_conversation:"; 102 103 public static final String UI_INTENT_EXTRA_REQUIRES_MMS = "requires_mms"; 104 105 public static final String UI_INTENT_EXTRA_SELF_ID = "self_id"; 106 107 // Message position to scroll to. 108 public static final String UI_INTENT_EXTRA_MESSAGE_POSITION = "message_position"; 109 110 /** 111 * Launch the permission check activity 112 */ 113 public abstract void launchPermissionCheckActivity(final Context context); 114 115 public abstract void launchConversationListActivity(final Context context); 116 117 /** 118 * Launch an activity to show a conversation. This method by default provides no additional 119 * activity options. 120 */ 121 public void launchConversationActivity(final Context context, 122 final String conversationId, final MessageData draft) { 123 launchConversationActivity(context, conversationId, draft, null, 124 false /* withCustomTransition */); 125 } 126 127 /** 128 * Launch an activity to show a conversation. 129 */ 130 public abstract void launchConversationActivity(final Context context, 131 final String conversationId, final MessageData draft, final Bundle activityOptions, 132 final boolean withCustomTransition); 133 134 135 /** 136 * Launch an activity to show conversation with conversation list in back stack. 137 */ 138 public abstract void launchConversationActivityWithParentStack(Context context, 139 String conversationId, String smsBody); 140 141 /** 142 * Launch an activity to show a conversation as a new task. 143 */ 144 public abstract void launchConversationActivityNewTask(final Context context, 145 final String conversationId); 146 147 /** 148 * Launch an activity to start a new conversation 149 */ 150 public abstract void launchCreateNewConversationActivity(final Context context, 151 final MessageData draft); 152 153 /** 154 * Launch debug activity to set MMS config options. 155 */ 156 public abstract void launchDebugMmsConfigActivity(final Context context); 157 158 /** 159 * Launch an activity to change settings. 160 */ 161 public abstract void launchSettingsActivity(final Context context); 162 163 /** 164 * Launch an activity to add a contact with a given destination. 165 */ 166 public abstract void launchAddContactActivity(final Context context, final String destination); 167 168 /** 169 * Launch an activity to show the document picker to pick an image. 170 * @param fragment the requesting fragment 171 */ 172 public abstract void launchDocumentImagePicker(final Fragment fragment); 173 174 /** 175 * Launch an activity to show people & options for a given conversation. 176 */ 177 public abstract void launchPeopleAndOptionsActivity(final Activity context, 178 final String conversationId); 179 180 /** 181 * Launch an external activity to handle a phone call 182 * @param phoneNumber the phone number to call 183 * @param clickPosition is the location tapped to start this launch for transition use 184 */ 185 public abstract void launchPhoneCallActivity(final Context context, final String phoneNumber, 186 final Point clickPosition); 187 188 /** 189 * Launch an activity to show archived conversations. 190 */ 191 public abstract void launchArchivedConversationsActivity(final Context context); 192 193 /** 194 * Launch an activity to show blocked participants. 195 */ 196 public abstract void launchBlockedParticipantsActivity(final Context context); 197 198 /** 199 * Launch an activity to show a class zero message 200 */ 201 public abstract void launchClassZeroActivity(Context context, ContentValues messageValues); 202 203 /** 204 * Launch an activity to let the user forward a message 205 */ 206 public abstract void launchForwardMessageActivity(Context context, MessageData message); 207 208 /** 209 * Launch an activity to show details for a VCard 210 */ 211 public abstract void launchVCardDetailActivity(Context context, Uri vcardUri); 212 213 /** 214 * Launch an external activity that handles the intent to add VCard to contacts 215 */ 216 public abstract void launchSaveVCardToContactsActivity(Context context, Uri vcardUri); 217 218 /** 219 * Launch an activity to let the user select & unselect the list of attachments to send. 220 */ 221 public abstract void launchAttachmentChooserActivity(final Activity activity, 222 final String conversationId, final int requestCode); 223 224 /** 225 * Launch full screen video viewer. 226 */ 227 public abstract void launchFullScreenVideoViewer(Context context, Uri videoUri); 228 229 /** 230 * Launch full screen photo viewer. 231 */ 232 public abstract void launchFullScreenPhotoViewer(Activity activity, Uri initialPhoto, 233 Rect initialPhotoBounds, Uri photosUri); 234 235 /** 236 * Launch an activity to show general app settings 237 * @param topLevel indicates whether the app settings is launched as the top-level settings 238 * activity (instead of SettingsActivity which shows a collapsed view of the app 239 * settings + one settings item per subscription). This is true when there's only one 240 * active SIM in the system so we can show this activity directly. 241 */ 242 public abstract void launchApplicationSettingsActivity(Context context, boolean topLevel); 243 244 /** 245 * Launch an activity to show per-subscription settings 246 */ 247 public abstract void launchPerSubscriptionSettingsActivity(Context context, int subId, 248 String settingTitle); 249 250 /** 251 * Get a ACTION_VIEW intent 252 * @param url display the data in the url to users 253 */ 254 public abstract Intent getViewUrlIntent(final String url); 255 256 /** 257 * Get an intent to launch the ringtone picker 258 * @param title the title to show in the ringtone picker 259 * @param existingUri the currently set uri 260 * @param defaultUri the default uri if none is currently set 261 * @param toneType type of ringtone to pick, maybe any of RingtoneManager.TYPE_* 262 */ 263 public abstract Intent getRingtonePickerIntent(final String title, final Uri existingUri, 264 final Uri defaultUri, final int toneType); 265 266 /** 267 * Get an intent to launch the wireless alert viewer. 268 */ 269 public abstract Intent getWirelessAlertsIntent(); 270 271 /** 272 * Get an intent to launch the dialog for changing the default SMS App. 273 */ 274 public abstract Intent getChangeDefaultSmsAppIntent(final Activity activity); 275 276 /** 277 * Broadcast conversation self id change so it may be reflected in the message compose UI. 278 */ 279 public abstract void broadcastConversationSelfIdChange(final Context context, 280 final String conversationId, final String conversationSelfId); 281 282 /** 283 * Get a PendingIntent for starting conversation list from notifications. 284 */ 285 public abstract PendingIntent getPendingIntentForConversationListActivity( 286 final Context context); 287 288 /** 289 * Get a PendingIntent for starting conversation list from widget. 290 */ 291 public abstract PendingIntent getWidgetPendingIntentForConversationListActivity( 292 final Context context); 293 294 /** 295 * Get a PendingIntent for showing a conversation from notifications. 296 */ 297 public abstract PendingIntent getPendingIntentForConversationActivity(final Context context, 298 final String conversationId, final MessageData draft); 299 300 /** 301 * Get an Intent for showing a conversation from the widget. 302 */ 303 public abstract Intent getIntentForConversationActivity(final Context context, 304 final String conversationId, final MessageData draft); 305 306 /** 307 * Get a PendingIntent for sending a message to a conversation, without opening the Bugle UI. 308 * 309 * <p>This is intended to be used by the Android Wear companion app when sending transcribed 310 * voice replies. 311 */ 312 public abstract PendingIntent getPendingIntentForSendingMessageToConversation( 313 final Context context, final String conversationId, final String selfId, 314 final boolean requiresMms, final int requestCode); 315 316 /** 317 * Get a PendingIntent for clearing notifications. 318 * 319 * <p>This is intended to be used by notifications. 320 */ 321 public abstract PendingIntent getPendingIntentForClearingNotifications(final Context context, 322 final int updateTargets, final ConversationIdSet conversationIdSet, 323 final int requestCode); 324 325 /** 326 * Get a PendingIntent for showing low storage notifications. 327 */ 328 public abstract PendingIntent getPendingIntentForLowStorageNotifications(final Context context); 329 330 /** 331 * Get a PendingIntent for showing a new message to a secondary user. 332 */ 333 public abstract PendingIntent getPendingIntentForSecondaryUserNewMessageNotification( 334 final Context context); 335 336 /** 337 * Get an intent for showing the APN editor. 338 */ 339 public abstract Intent getApnEditorIntent(final Context context, final String rowId, int subId); 340 341 /** 342 * Get an intent for showing the APN settings. 343 */ 344 public abstract Intent getApnSettingsIntent(final Context context, final int subId); 345 346 /** 347 * Get an intent for showing advanced settings. 348 */ 349 public abstract Intent getAdvancedSettingsIntent(final Context context); 350 351 /** 352 * Get an intent for the LaunchConversationActivity. 353 */ 354 public abstract Intent getLaunchConversationActivityIntent(final Context context); 355 356 /** 357 * Tell MediaScanner to re-scan the specified volume. 358 */ 359 public abstract void kickMediaScanner(final Context context, final String volume); 360 361 /** 362 * Launch to browser for a url. 363 */ 364 public abstract void launchBrowserForUrl(final Context context, final String url); 365 366 /** 367 * Get a PendingIntent for the widget conversation template. 368 */ 369 public abstract PendingIntent getWidgetPendingIntentForConversationActivity( 370 final Context context, final String conversationId, final int requestCode); 371 372 /** 373 * Get a PendingIntent for the conversation widget configuration activity template. 374 */ 375 public abstract PendingIntent getWidgetPendingIntentForConfigurationActivity( 376 final Context context, final int appWidgetId); 377 378 } 379