Go to the correct subscription in WifiCallingSettings
For subscriptions that support wifi calling, we have a preference on the mobile network details page which leads to a Wifi Calling page. That page already supports the concept of multiple subscriptions with a header strip containing a tab for each subscription that supports wifi calling. However, we were not necessarily selecting the *correct* tab when going to this page. So you might be viewing the mobile network details for subscription B and click on "Wifi Calling", only to land on the page with the tab for subscription A selected. This CL fixes the problem by adding an extra with the current subscription id to the Preference's intent in WifiCallingPreferenceController, and then reads that extra in WifiCallingSettings and uses it to select the appropriate tab. Fixes: 117135894 Test: make RunSettingsRoboTests Change-Id: I3aec30072712247d14fe0fb6b61207535f9e981c
This commit is contained in:
@@ -17,7 +17,9 @@
|
||||
package com.android.settings.wifi.calling;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.util.Log;
|
||||
@@ -25,6 +27,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
@@ -33,6 +36,7 @@ import com.android.ims.ImsManager;
|
||||
import com.android.internal.util.CollectionUtils;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settings.network.SubscriptionUtil;
|
||||
import com.android.settings.search.actionbar.SearchMenuController;
|
||||
import com.android.settings.support.actionbar.HelpMenuController;
|
||||
import com.android.settings.support.actionbar.HelpResourceProvider;
|
||||
@@ -88,10 +92,30 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes
|
||||
mPagerAdapter = new WifiCallingViewPagerAdapter(getChildFragmentManager(), mViewPager);
|
||||
mViewPager.setAdapter(mPagerAdapter);
|
||||
mViewPager.addOnPageChangeListener(new InternalViewPagerListener());
|
||||
|
||||
maybeSetViewForSubId();
|
||||
return view;
|
||||
}
|
||||
|
||||
private void maybeSetViewForSubId() {
|
||||
if (mSil == null) {
|
||||
return;
|
||||
}
|
||||
Intent intent = getActivity().getIntent();
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
|
||||
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||
if (SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
for (SubscriptionInfo subInfo : mSil) {
|
||||
if (subId == subInfo.getSubscriptionId()) {
|
||||
mViewPager.setCurrentItem(mSil.indexOf(subInfo));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
@@ -122,7 +146,8 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes
|
||||
return R.string.help_uri_wifi_calling;
|
||||
}
|
||||
|
||||
private final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter {
|
||||
@VisibleForTesting
|
||||
final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter {
|
||||
private final RtlCompatibleViewPager mViewPager;
|
||||
|
||||
public WifiCallingViewPagerAdapter(FragmentManager fragmentManager,
|
||||
@@ -168,17 +193,22 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isWfcEnabledByPlatform(SubscriptionInfo info) {
|
||||
ImsManager imsManager = ImsManager.getInstance(getActivity(), info.getSimSlotIndex());
|
||||
return imsManager.isWfcEnabledByPlatform();
|
||||
}
|
||||
|
||||
private void updateSubList() {
|
||||
mSil = SubscriptionManager.from(getActivity()).getActiveSubscriptionInfoList(true);
|
||||
mSil = SubscriptionUtil.getActiveSubscriptions(
|
||||
getContext().getSystemService(SubscriptionManager.class));
|
||||
|
||||
// Only config Wfc if it's enabled by platform.
|
||||
if (mSil == null) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < mSil.size(); ) {
|
||||
ImsManager imsManager = ImsManager.getInstance(getActivity(),
|
||||
mSil.get(i).getSimSlotIndex());
|
||||
if (!imsManager.isWfcEnabledByPlatform()) {
|
||||
if (!isWfcEnabledByPlatform(mSil.get(i))) {
|
||||
mSil.remove(i);
|
||||
} else {
|
||||
i++;
|
||||
|
Reference in New Issue
Block a user