diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DefaultSmsReminder.java b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DefaultSmsReminder.java index df9305cf86..55e44e7642 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DefaultSmsReminder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DefaultSmsReminder.java @@ -1,11 +1,12 @@ package org.thoughtcrime.securesms.components.reminder; -import android.annotation.TargetApi; import android.content.Context; -import android.os.Build.VERSION_CODES; import android.view.View; import android.view.View.OnClickListener; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; + import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.SmsUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -13,22 +14,21 @@ import org.thoughtcrime.securesms.util.Util; public class DefaultSmsReminder extends Reminder { - @TargetApi(VERSION_CODES.KITKAT) - public DefaultSmsReminder(final Context context) { - super(context.getString(R.string.reminder_header_sms_default_title), - context.getString(R.string.reminder_header_sms_default_text)); + public DefaultSmsReminder(@NonNull Fragment fragment, short requestCode) { + super(fragment.getString(R.string.reminder_header_sms_default_title), + fragment.getString(R.string.reminder_header_sms_default_text)); final OnClickListener okListener = new OnClickListener() { @Override public void onClick(View v) { - TextSecurePreferences.setPromptedDefaultSmsProvider(context, true); - context.startActivity(SmsUtil.getSmsRoleIntent(context)); + TextSecurePreferences.setPromptedDefaultSmsProvider(fragment.requireContext(), true); + SmsUtil.startActivityToRequestSmsRole(fragment, requestCode); } }; final OnClickListener dismissListener = new OnClickListener() { @Override public void onClick(View v) { - TextSecurePreferences.setPromptedDefaultSmsProvider(context, true); + TextSecurePreferences.setPromptedDefaultSmsProvider(fragment.requireContext(), true); } }; setOkListener(okListener); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index e3999c1af8..42ea5b3cdc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -39,7 +39,6 @@ import android.os.Bundle; import android.os.Vibrator; import android.provider.Browser; import android.provider.ContactsContract; -import android.provider.Telephony; import android.text.Editable; import android.text.Spannable; import android.text.SpannableString; @@ -1130,7 +1129,7 @@ public class ConversationActivity extends PassphraseRequiredActivity @TargetApi(Build.VERSION_CODES.KITKAT) private void handleMakeDefaultSms() { - startActivityForResult(SmsUtil.getSmsRoleIntent(this), SMS_DEFAULT); + SmsUtil.startActivityToRequestSmsRole(this, SMS_DEFAULT); } private void handleRegisterForSignal() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 362931e443..f02a36e7cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -54,14 +54,12 @@ import androidx.appcompat.view.ActionMode; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.TooltipCompat; import androidx.core.content.res.ResourcesCompat; -import androidx.core.view.ViewCompat; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner; import androidx.lifecycle.ViewModelProviders; -import androidx.paging.PagedList; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -149,6 +147,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode MegaphoneActionController { public static final short MESSAGE_REQUESTS_REQUEST_CODE_CREATE_NAME = 32562; + public static final short SMS_ROLE_REQUEST_CODE = 32563; private static final String TAG = Log.tag(ConversationListFragment.class); @@ -590,7 +589,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode } else if (OutdatedBuildReminder.isEligible()) { return Optional.of(new OutdatedBuildReminder(context)); } else if (DefaultSmsReminder.isEligible(context)) { - return Optional.of(new DefaultSmsReminder(context)); + return Optional.of(new DefaultSmsReminder(this, SMS_ROLE_REQUEST_CODE)); } else if (Util.isDefaultSmsProvider(context) && SystemSmsImportReminder.isEligible(context)) { return Optional.of((new SystemSmsImportReminder(context))); } else if (PushRegistrationReminder.isEligible(context)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java index f1ca8d1d30..f7e890cc4d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java @@ -21,8 +21,9 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment { - private static final String KITKAT_DEFAULT_PREF = "pref_set_default"; - private static final String MMS_PREF = "pref_mms_preferences"; + private static final String KITKAT_DEFAULT_PREF = "pref_set_default"; + private static final String MMS_PREF = "pref_mms_preferences"; + private static final short SMS_ROLE_REQUEST_CODE = 1234; @Override public void onCreate(Bundle paramBundle) { @@ -68,10 +69,10 @@ public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment { } private void initializeDefaultPreference() { - if (VERSION.SDK_INT < VERSION_CODES.KITKAT) return; - Preference defaultPreference = findPreference(KITKAT_DEFAULT_PREF); if (Util.isDefaultSmsProvider(getActivity())) { + defaultPreference.setOnPreferenceClickListener(null); + if (VERSION.SDK_INT < VERSION_CODES.M) defaultPreference.setIntent(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); if (VERSION.SDK_INT < VERSION_CODES.N) defaultPreference.setIntent(new Intent(Settings.ACTION_SETTINGS)); else defaultPreference.setIntent(new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)); @@ -79,9 +80,13 @@ public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment { defaultPreference.setTitle(getString(R.string.ApplicationPreferencesActivity_sms_enabled)); defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_change_your_default_sms_app)); } else { - defaultPreference.setIntent(SmsUtil.getSmsRoleIntent(requireContext())); defaultPreference.setTitle(getString(R.string.ApplicationPreferencesActivity_sms_disabled)); defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_make_signal_your_default_sms_app)); + + defaultPreference.setOnPreferenceClickListener(preference -> { + SmsUtil.startActivityToRequestSmsRole(this, SMS_ROLE_REQUEST_CODE); + return true; + }); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SmsUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SmsUtil.java index 019e5bfc27..5f9b5ae33d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SmsUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SmsUtil.java @@ -1,27 +1,41 @@ package org.thoughtcrime.securesms.util; +import android.app.Activity; import android.app.role.RoleManager; -import android.content.Context; import android.content.Intent; import android.os.Build; import android.provider.Telephony; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; public final class SmsUtil { private SmsUtil() { } - public static @NonNull Intent getSmsRoleIntent(@NonNull Context context) { + public static void startActivityToRequestSmsRole(@NonNull Activity activity, int requestCode) { if (Build.VERSION.SDK_INT >= 29) { - RoleManager roleManager = ContextCompat.getSystemService(context, RoleManager.class); - return roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS); + RoleManager roleManager = ContextCompat.getSystemService(activity, RoleManager.class); + Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS); + activity.startActivityForResult(intent, requestCode); } else { Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName()); - return intent; + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.getPackageName()); + activity.startActivity(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); } } }