summaryrefslogtreecommitdiff
path: root/java/com
diff options
context:
space:
mode:
authortwyen <twyen@google.com>2017-11-15 18:24:45 -0800
committerzachh <zachh@google.com>2017-11-18 07:32:30 +0000
commit5c7524f3354e5121bbea1064a9f13f19e94c276d (patch)
treeddb121b16963f3a2cf1eb307bb87a45cf32cc3f6 /java/com
parentad01e74802f7ee0c5971b65bd686db5e566e3d12 (diff)
Send SUB_ID_EXTRA to VoicemailSettingsActivity in Telephony
EXTRA_PHONE_ACCOUNT_HANDLE is not implemented in O. subId is required to determine which SIM the settings is for. Bug: 67669006 Test: VoicemailSettingsFragmentTest, TelecomUtilTest PiperOrigin-RevId: 175913331 Change-Id: I84f9e19b711c5baa275d934cfdfd5b7a2d4b6f6d
Diffstat (limited to 'java/com')
-rw-r--r--java/com/android/dialer/telecom/TelecomUtil.java21
-rw-r--r--java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java29
2 files changed, 50 insertions, 0 deletions
diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java
index 3bf9b4666..c79d9013d 100644
--- a/java/com/android/dialer/telecom/TelecomUtil.java
+++ b/java/com/android/dialer/telecom/TelecomUtil.java
@@ -33,9 +33,12 @@ import android.support.v4.content.ContextCompat;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
import android.text.TextUtils;
import android.util.Pair;
import com.android.dialer.common.LogUtil;
+import com.google.common.base.Optional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -146,6 +149,24 @@ public abstract class TelecomUtil {
}
/**
+ * @return the {@link SubscriptionInfo} of the SIM if {@code phoneAccountHandle} corresponds to a
+ * valid SIM. Absent otherwise.
+ */
+ public static Optional<SubscriptionInfo> getSubscriptionInfo(
+ @NonNull Context context, @NonNull PhoneAccountHandle phoneAccountHandle) {
+ if (TextUtils.isEmpty(phoneAccountHandle.getId())) {
+ return Optional.absent();
+ }
+ SubscriptionManager subscriptionManager = context.getSystemService(SubscriptionManager.class);
+ for (SubscriptionInfo info : subscriptionManager.getActiveSubscriptionInfoList()) {
+ if (phoneAccountHandle.getId().startsWith(info.getIccId())) {
+ return Optional.of(info);
+ }
+ }
+ return Optional.absent();
+ }
+
+ /**
* Returns true if there is a dialer managed call in progress. Self managed calls starting from O
* are not included.
*/
diff --git a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
index 2b496c0ca..aaa1e150d 100644
--- a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
+++ b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
@@ -24,16 +24,22 @@ import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.notification.NotificationChannelManager;
+import com.android.dialer.telecom.TelecomUtil;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailClient.ActivationStateListener;
import com.android.voicemail.VoicemailComponent;
+import com.google.common.base.Optional;
/**
* Fragment for voicemail settings. Requires {@link VoicemailClient#PARAM_PHONE_ACCOUNT_HANDLE} set
@@ -45,6 +51,16 @@ public class VoicemailSettingsFragment extends PreferenceFragment
private static final String TAG = "VmSettingsActivity";
+ // Extras copied from com.android.phone.settings.VoicemailSettingsActivity,
+ // it does not recognize EXTRA_PHONE_ACCOUNT_HANDLE in O.
+ @VisibleForTesting
+ static final String SUB_ID_EXTRA =
+ "com.android.phone.settings.SubscriptionInfoHelper.SubscriptionId";
+ // Extra on intent containing the label of a subscription.
+ @VisibleForTesting
+ static final String SUB_LABEL_EXTRA =
+ "com.android.phone.settings.SubscriptionInfoHelper.SubscriptionLabel";
+
@Nullable private PhoneAccountHandle phoneAccountHandle;
private VoicemailClient voicemailClient;
@@ -167,6 +183,19 @@ public class VoicemailSettingsFragment extends PreferenceFragment
advancedSettingsIntent.putExtra(TelephonyManager.EXTRA_HIDE_PUBLIC_SETTINGS, true);
advancedSettingsIntent.putExtra(
TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+
+ // (a bug): EXTRA_PHONE_ACCOUNT_HANDLE not implemented in telephony in O.
+ Optional<SubscriptionInfo> subscriptionInfo =
+ TelecomUtil.getSubscriptionInfo(getContext(), phoneAccountHandle);
+ if (subscriptionInfo.isPresent()) {
+ advancedSettingsIntent.putExtra(SUB_ID_EXTRA, subscriptionInfo.get().getSubscriptionId());
+ PhoneAccount phoneAccount =
+ getContext().getSystemService(TelecomManager.class).getPhoneAccount(phoneAccountHandle);
+ if (phoneAccount != null) {
+ advancedSettingsIntent.putExtra(SUB_LABEL_EXTRA, phoneAccount.getLabel());
+ }
+ }
+
advancedSettings.setIntent(advancedSettingsIntent);
voicemailChangePinPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {