Fix SMS role bug introduced for pre-Q devices.

This commit is contained in:
Cody Henthorne 2020-10-30 17:45:28 -04:00
parent f84595e1e8
commit 6a4ce1b658
4 changed files with 12 additions and 23 deletions

View file

@ -22,7 +22,7 @@ public class DefaultSmsReminder extends Reminder {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
TextSecurePreferences.setPromptedDefaultSmsProvider(fragment.requireContext(), true); TextSecurePreferences.setPromptedDefaultSmsProvider(fragment.requireContext(), true);
SmsUtil.startActivityToRequestSmsRole(fragment, requestCode); fragment.startActivityForResult(SmsUtil.getSmsRoleIntent(fragment.requireContext()), requestCode);
} }
}; };
final OnClickListener dismissListener = new OnClickListener() { final OnClickListener dismissListener = new OnClickListener() {

View file

@ -1129,7 +1129,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
@TargetApi(Build.VERSION_CODES.KITKAT) @TargetApi(Build.VERSION_CODES.KITKAT)
private void handleMakeDefaultSms() { private void handleMakeDefaultSms() {
SmsUtil.startActivityToRequestSmsRole(this, SMS_DEFAULT); startActivityForResult(SmsUtil.getSmsRoleIntent(this), SMS_DEFAULT);
} }
private void handleRegisterForSignal() { private void handleRegisterForSignal() {

View file

@ -84,7 +84,7 @@ public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment {
defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_make_signal_your_default_sms_app)); defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_make_signal_your_default_sms_app));
defaultPreference.setOnPreferenceClickListener(preference -> { defaultPreference.setOnPreferenceClickListener(preference -> {
SmsUtil.startActivityToRequestSmsRole(this, SMS_ROLE_REQUEST_CODE); startActivityForResult(SmsUtil.getSmsRoleIntent(requireContext()), SMS_ROLE_REQUEST_CODE);
return true; return true;
}); });
} }

View file

@ -1,41 +1,30 @@
package org.thoughtcrime.securesms.util; package org.thoughtcrime.securesms.util;
import android.app.Activity;
import android.app.role.RoleManager; import android.app.role.RoleManager;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.provider.Telephony; import android.provider.Telephony;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
public final class SmsUtil { public final class SmsUtil {
private SmsUtil() { private SmsUtil() {
} }
public static void startActivityToRequestSmsRole(@NonNull Activity activity, int requestCode) { /**
* Must be used with {@code startActivityForResult}
*/
public static @NonNull Intent getSmsRoleIntent(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 29) { if (Build.VERSION.SDK_INT >= 29) {
RoleManager roleManager = ContextCompat.getSystemService(activity, RoleManager.class); RoleManager roleManager = ContextCompat.getSystemService(context, RoleManager.class);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS); return roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS);
activity.startActivityForResult(intent, requestCode);
} else { } else {
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.getPackageName()); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName());
activity.startActivity(intent); return intent;
}
}
public static void startActivityToRequestSmsRole(@NonNull Fragment fragment, int requestCode) {
if (Build.VERSION.SDK_INT >= 29) {
RoleManager roleManager = ContextCompat.getSystemService(fragment.requireContext(), RoleManager.class);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS);
fragment.startActivityForResult(intent, requestCode);
} else {
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, fragment.requireContext().getPackageName());
fragment.startActivity(intent);
} }
} }
} }