Adds package picker for sending text messages.
Bug: 10608694
Change-Id: I645f00135615d29b78e72b80584fea0410d7da8d
diff --git a/src/com/android/phone/RejectWithTextMessageManager.java b/src/com/android/phone/RejectWithTextMessageManager.java
index b03211a..fda8f78 100644
--- a/src/com/android/phone/RejectWithTextMessageManager.java
+++ b/src/com/android/phone/RejectWithTextMessageManager.java
@@ -73,7 +73,11 @@
/** SharedPreferences file name for our persistent settings. */
private static final String SHARED_PREFERENCES_NAME = "respond_via_sms_prefs";
- // Preference keys for the 4 "canned responses"; see RespondViaSmsManager$Settings.
+ private Intent mIntent;
+
+ private ArrayList<ComponentName> mComponentsWithPermission = new ArrayList<ComponentName>();
+
+ // Preference keys for the 4 "canned responses"; see RespondViaSmsManager$Settings.
// Since (for now at least) the number of messages is fixed at 4, and since
// SharedPreferences can't deal with arrays anyway, just store the messages
// as 4 separate strings.
@@ -82,20 +86,11 @@
private static final String KEY_CANNED_RESPONSE_PREF_2 = "canned_response_pref_2";
private static final String KEY_CANNED_RESPONSE_PREF_3 = "canned_response_pref_3";
private static final String KEY_CANNED_RESPONSE_PREF_4 = "canned_response_pref_4";
- private static final String KEY_PREFERRED_PACKAGE = "preferred_package_pref";
- private static final String KEY_INSTANT_TEXT_DEFAULT_COMPONENT = "instant_text_def_component";
+ /* package */ static final String KEY_INSTANT_TEXT_DEFAULT_COMPONENT =
+ "instant_text_def_component";
- /**
- * Brings up the standard SMS compose UI.
- */
- private void launchSmsCompose(String phoneNumber) {
- if (DBG) log("launchSmsCompose: number " + phoneNumber);
-
- final Intent intent = getInstantTextIntent(phoneNumber, null, getSmsService());
-
- if (DBG) log("- Launching SMS compose UI: " + intent);
- PhoneGlobals.getInstance().startService(intent);
- }
+ /* package */ static final String TAG_ALL_SMS_SERVICES = "com.android.phone.AvailablePackages";
+ /* package */ static final String TAG_SEND_SMS = "com.android.phone.MessageIntent";
/**
* Read the (customizable) canned responses from SharedPreferences,
@@ -130,28 +125,10 @@
return responses;
}
- /**
- * Sends a text message without any interaction from the user.
- */
- private void sendText(String phoneNumber, String message, ComponentName component) {
- if (DBG) log("sendText: number "
- + phoneNumber + ", message '" + message + "'");
-
- PhoneGlobals.getInstance().startService(getInstantTextIntent(phoneNumber, message,
- component));
- }
-
- private void sendTextAndExit(String phoneNumber, String message, ComponentName component,
- boolean setDefaultComponent) {
+ private void sendTextAndExit() {
// Send the selected message immediately with no user interaction.
- sendText(phoneNumber, message, component);
-
- if (setDefaultComponent) {
- final SharedPreferences prefs = PhoneGlobals.getInstance().getSharedPreferences(
- SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
- prefs.edit()
- .putString(KEY_INSTANT_TEXT_DEFAULT_COMPONENT, component.flattenToString())
- .apply();
+ if (mIntent.getComponent() != null) {
+ PhoneGlobals.getInstance().startService(mIntent);
}
// ...and show a brief confirmation to the user (since
@@ -231,11 +208,7 @@
return intent;
}
- public void rejectCallWithNewMessage(String number) {
- launchSmsCompose(number);
- }
-
- private ComponentName getSmsService() {
+ private boolean getSmsService() {
if (DBG) log("sendTextToDefaultActivity()...");
final PackageManager packageManager = PhoneGlobals.getInstance().getPackageManager();
@@ -257,7 +230,8 @@
if (serviceInfo != null &&
PERMISSION_SEND_RESPOND_VIA_MESSAGE.equals(serviceInfo.permission)) {
- return componentName;
+ mIntent.setComponent(componentName);
+ return true;
} else {
SharedPreferences.Editor editor = prefs.edit();
editor.remove(KEY_INSTANT_TEXT_DEFAULT_COMPONENT);
@@ -265,29 +239,38 @@
}
}
- final ArrayList<ComponentName> componentsWithPermission =
- getPackagesWithInstantTextPermission();
+ mComponentsWithPermission = getPackagesWithInstantTextPermission();
- final int size = componentsWithPermission.size();
+ final int size = mComponentsWithPermission.size();
if (size == 0) {
Log.e(TAG, "No appropriate package receiving the Intent. Don't send anything");
- return null;
+ return false;
} else if (size == 1) {
- return componentsWithPermission.get(0);
+ mIntent.setComponent(mComponentsWithPermission.get(0));
+ return true;
} else {
Log.v(TAG, "Choosing from one of the apps");
// TODO(klp): Add an app picker.
- return componentsWithPermission.get(0);
+ final Intent intent = new Intent(Intent.ACTION_VIEW, null);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
+ Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS |
+ Intent.FLAG_ACTIVITY_NO_ANIMATION |
+ Intent.FLAG_ACTIVITY_NO_HISTORY |
+ Intent.FLAG_FROM_BACKGROUND);
+ intent.setClass(PhoneGlobals.getInstance(), TextMessagePackageChooser.class);
+ intent.putExtra(TAG_ALL_SMS_SERVICES, mComponentsWithPermission);
+ intent.putExtra(TAG_SEND_SMS, mIntent);
+ PhoneGlobals.getInstance().startActivity(intent);
+ return false;
+ // return componentsWithPermission.get(0);
}
}
-
- public void rejectCallWithMessage(final String number, String message) {
- final ComponentName componentName = getSmsService();
-
- if (componentName != null) {
- sendTextAndExit(number, message, componentName,
- false);
+ public void rejectCallWithMessage(Call call, String message) {
+ mComponentsWithPermission.clear();
+ mIntent = getInstantTextIntent(call.getLatestConnection().getAddress(), message, null);
+ if (getSmsService()) {
+ sendTextAndExit();
}
}