Messaging: Fix handling of default SMS app
Use RoleManager to Launch the correct activity and check the default app
Get rid of deprecated methods used here to do the same
Also add queries in manifest to allow the former method to work as well
Change-Id: I4702aaa4b35a994e225e63534da8fb4975b9717a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 024f7ab..4682e58 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -58,6 +58,13 @@
<uses-feature android:name="android.hardware.microphone" android:required="false" />
<uses-feature android:name="android.hardware.screen.portrait" android:required="false" />
+ <queries>
+ <intent>
+ <action android:name="android.intent.action.SENDTO"/>
+ <data android:scheme="smsto" android:host="*" />
+ </intent>
+ </queries>
+
<application
android:name="com.android.messaging.BugleApplication"
android:allowBackup="false"
@@ -391,6 +398,7 @@
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
diff --git a/src/com/android/messaging/ui/UIIntentsImpl.java b/src/com/android/messaging/ui/UIIntentsImpl.java
index 9281899..0fabfdd 100644
--- a/src/com/android/messaging/ui/UIIntentsImpl.java
+++ b/src/com/android/messaging/ui/UIIntentsImpl.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.app.Fragment;
import android.app.PendingIntent;
+import android.app.role.RoleManager;
import android.appwidget.AppWidgetManager;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
@@ -511,9 +512,8 @@
@Override
public Intent getChangeDefaultSmsAppIntent(final Activity activity) {
- final Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
- intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.getPackageName());
- return intent;
+ RoleManager roleManager = activity.getSystemService(RoleManager.class);
+ return roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS);
}
@Override
diff --git a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java b/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java
index 6cf2f25..bcb2f5c 100644
--- a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java
+++ b/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java
@@ -66,7 +66,7 @@
// Is the default sms app?
} else if (!isDefaultSmsApp) {
- mChangeSmsAppSettingRunnable = new ChangeSmsAppSettingRunnable(activity, fragment);
+ mChangeSmsAppSettingRunnable = new ChangeSmsAppSettingRunnable(activity);
promptToChangeDefaultSmsApp(sending, runAfterMadeDefault,
composeView, rootView, activity);
}
@@ -104,22 +104,16 @@
private class ChangeSmsAppSettingRunnable implements Runnable {
private final Activity mActivity;
- private final Fragment mFragment;
- public ChangeSmsAppSettingRunnable(final Activity activity, final Fragment fragment) {
+ public ChangeSmsAppSettingRunnable(final Activity activity) {
mActivity = activity;
- mFragment = fragment;
}
@Override
public void run() {
try {
final Intent intent = UIIntents.get().getChangeDefaultSmsAppIntent(mActivity);
- if (mFragment != null) {
- mFragment.startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
- } else {
- mActivity.startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
- }
+ mActivity.startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
} catch (final ActivityNotFoundException ex) {
// We shouldn't get here, but the monkey on JB MR0 can trigger it.
LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't find activity:", ex);
@@ -153,5 +147,3 @@
}
}
}
-
-
diff --git a/src/com/android/messaging/util/PhoneUtils.java b/src/com/android/messaging/util/PhoneUtils.java
index 08889b8..9f0fa8e 100644
--- a/src/com/android/messaging/util/PhoneUtils.java
+++ b/src/com/android/messaging/util/PhoneUtils.java
@@ -16,6 +16,7 @@
package com.android.messaging.util;
+import android.app.role.RoleManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -897,8 +898,9 @@
*/
public boolean isDefaultSmsApp() {
if (OsUtil.isAtLeastKLP()) {
- final String configuredApplication = Telephony.Sms.getDefaultSmsPackage(mContext);
- return mContext.getPackageName().equals(configuredApplication);
+ RoleManager roleManager = mContext.getSystemService(RoleManager.class);
+ return roleManager.isRoleAvailable(RoleManager.ROLE_SMS)
+ && roleManager.isRoleHeld(RoleManager.ROLE_SMS);
}
return true;
}