Home | History | Annotate | Download | only in ui
      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