Loading src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +71 −41 Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.ims.ImsManager; import com.android.settings.R; import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -48,12 +48,12 @@ import java.util.List; public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements LifecycleObserver, OnStart, OnStop { private static final String TAG = "WifiCallingPreference"; @VisibleForTesting Integer mCallState; @VisibleForTesting CarrierConfigManager mCarrierConfigManager; @VisibleForTesting ImsManager mImsManager; private ImsMmTelManager mImsMmTelManager; @VisibleForTesting PhoneAccountHandle mSimCallManager; Loading @@ -68,8 +68,8 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont @Override public int getAvailabilityStatus(int subId) { return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && MobileNetworkUtils.isWifiCallingEnabled(mContext, subId) return SubscriptionManager.isValidSubscriptionId(subId) && isWifiCallingEnabled(mContext, subId) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } Loading Loading @@ -100,6 +100,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont if (mCallState == null) { return; } CharSequence summaryText = null; if (mSimCallManager != null) { final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mSimCallManager); Loading @@ -110,25 +111,31 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont final PackageManager pm = mContext.getPackageManager(); final List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0); preference.setTitle(resolutions.get(0).loadLabel(pm)); preference.setSummary(null); preference.setIntent(intent); } else { final String title = SubscriptionManager.getResourcesForSubId(mContext, mSubId) .getString(R.string.wifi_calling_settings_title); preference.setTitle(title); summaryText = getResourceIdForWfcMode(mSubId); } preference.setSummary(summaryText); preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE); } private CharSequence getResourceIdForWfcMode(int subId) { int resId = com.android.internal.R.string.wifi_calling_off_summary; if (mImsManager.isWfcEnabledByUser()) { if (queryImsState(subId).isEnabledByUser()) { boolean useWfcHomeModeForRoaming = false; if (mCarrierConfigManager != null) { final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); mCarrierConfigManager.getConfigForSubId(subId); if (carrierConfig != null) { useWfcHomeModeForRoaming = carrierConfig.getBoolean( CarrierConfigManager .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL); } } final boolean isRoaming = getTelephonyManager(mContext, mSubId) final boolean isRoaming = getTelephonyManager(mContext, subId) .isNetworkRoaming(); final int wfcMode = (isRoaming && !useWfcHomeModeForRoaming) ? mImsMmTelManager.getVoWiFiRoamingModeSetting() : Loading @@ -148,15 +155,11 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont break; } } preference.setSummary( SubscriptionManager.getResourcesForSubId(mContext, mSubId).getText(resId)); } preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE); return SubscriptionManager.getResourcesForSubId(mContext, subId).getText(resId); } public WifiCallingPreferenceController init(int subId) { mSubId = subId; mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId)); mImsMmTelManager = getImsMmTelManager(mSubId); mSimCallManager = mContext.getSystemService(TelecomManager.class) .getSimCallManagerForSubscription(mSubId); Loading @@ -164,14 +167,22 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont return this; } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(mContext, subId); } protected ImsMmTelManager getImsMmTelManager(int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { return null; } return ImsMmTelManager.createForSubscriptionId(subId); } @VisibleForTesting TelephonyManager getTelephonyManager(Context context, int subId) { final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { return telephonyMgr; } final TelephonyManager subscriptionTelephonyMgr = Loading Loading @@ -204,4 +215,23 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE); } } private boolean isWifiCallingEnabled(Context context, int subId) { final PhoneAccountHandle simCallManager = context.getSystemService(TelecomManager.class) .getSimCallManagerForSubscription(subId); final int phoneId = SubscriptionManager.getSlotIndex(subId); boolean isWifiCallingEnabled; if (simCallManager != null) { final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent( context, simCallManager); isWifiCallingEnabled = intent != null; } else { isWifiCallingEnabled = queryImsState(subId).isReadyToWifiCalling(); } return isWifiCallingEnabled; } } src/com/android/settings/wifi/calling/OWNERS 0 → 100644 +8 −0 Original line number Diff line number Diff line # Default reviewers for this and subdirectories. allenwtsu@google.com andychou@google.com bonianchen@google.com songferngwang@google.com tomhsu@google.com # Emergency approvers in case the above are not available src/com/android/settings/wifi/calling/WifiCallingSettings.java +7 −24 Original line number Diff line number Diff line Loading @@ -22,9 +22,6 @@ import android.os.Bundle; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.Log; import android.view.LayoutInflater; import android.view.View; Loading @@ -35,11 +32,11 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; 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.network.ims.WifiCallingQueryImsState; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; Loading Loading @@ -196,25 +193,6 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes } } @VisibleForTesting boolean isWfcEnabledByPlatform(SubscriptionInfo info) { final ImsManager imsManager = ImsManager.getInstance(getActivity(), info.getSimSlotIndex()); return imsManager.isWfcEnabledByPlatform(); } @VisibleForTesting boolean isWfcProvisionedOnDevice(SubscriptionInfo info) { final ProvisioningManager provisioningMgr = ProvisioningManager.createForSubscriptionId(info.getSubscriptionId()); if (provisioningMgr == null) { return true; } return provisioningMgr.getProvisioningStatusForCapability( MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); } private void updateSubList() { mSil = SubscriptionUtil.getActiveSubscriptions( getContext().getSystemService(SubscriptionManager.class)); Loading @@ -225,7 +203,7 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes } for (int i = 0; i < mSil.size(); ) { final SubscriptionInfo info = mSil.get(i); if (!isWfcEnabledByPlatform(info) || !isWfcProvisionedOnDevice(info)) { if (!queryImsState(info.getSubscriptionId()).isWifiCallingProvisioned()) { mSil.remove(i); } else { i++; Loading @@ -241,4 +219,9 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes getActivity().getActionBar().setTitle(title); } } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(getContext(), subId); } } src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +71 −44 Original line number Diff line number Diff line Loading @@ -30,10 +30,10 @@ import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsManager; import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ProvisioningManager; import android.text.TextUtils; import android.text.util.Linkify; import android.util.Log; import android.view.LayoutInflater; import android.view.View; Loading @@ -47,8 +47,6 @@ import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; import com.android.ims.ImsConfig; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.settings.R; Loading @@ -56,7 +54,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.widget.SwitchBar; /** Loading Loading @@ -100,8 +98,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private boolean mUseWfcHomeModeForRoaming = false; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private ImsManager mImsManager; private ImsMmTelManager mImsMmTelManager; private ProvisioningManager mProvisioningManager; private TelephonyManager mTelephonyManager; private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { Loading @@ -114,11 +112,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onCallStateChanged(int state, String incomingNumber) { final SettingsActivity activity = (SettingsActivity) getActivity(); final boolean isNonTtyOrTtyOnVolteEnabled = mImsManager.isNonTtyOrTtyOnVolteEnabled(); final boolean isNonTtyOrTtyOnVolteEnabled = queryImsState(WifiCallingSettingsForSub.this.mSubId).isAllowUserControl(); final boolean isWfcEnabled = mSwitchBar.isChecked() && isNonTtyOrTtyOnVolteEnabled; boolean isCallStateIdle = mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE; boolean isCallStateIdle = getTelephonyManagerForSub( WifiCallingSettingsForSub.this.mSubId).getCallState() == TelephonyManager.CALL_STATE_IDLE; mSwitchBar.setEnabled(isCallStateIdle && isNonTtyOrTtyOnVolteEnabled); Loading Loading @@ -183,7 +183,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mEmptyView = getView().findViewById(android.R.id.empty); setEmptyView(mEmptyView); mEmptyView.setAutoLinkMask(Linkify.WEB_URLS); final Resources res = getResourcesForSubId(); final String emptyViewText = res.getString(R.string.wifi_calling_off_explanation, res.getString(R.string.wifi_calling_off_explanation_2)); Loading @@ -200,7 +199,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mSwitchBar.hide(); } private void showAlert(Intent intent) { @VisibleForTesting void showAlert(Intent intent) { final Context context = getActivity(); final CharSequence title = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_TITLE); Loading @@ -221,7 +221,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(ImsManager.ACTION_IMS_REGISTRATION_ERROR)) { if (action.equals(ImsManager.ACTION_WFC_IMS_REGISTRATION_ERROR)) { // If this fragment is active then we are immediately // showing alert on screen. There is no need to add // notification in this case. Loading @@ -247,12 +247,31 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } @VisibleForTesting ImsManager getImsManager() { return ImsManager.getInstance(getActivity(), SubscriptionManager.getPhoneId(mSubId)); TelephonyManager getTelephonyManagerForSub(int subId) { if (mTelephonyManager == null) { mTelephonyManager = getContext().getSystemService(TelephonyManager.class); } return mTelephonyManager.createForSubscriptionId(subId); } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(getContext(), subId); } @VisibleForTesting ProvisioningManager getImsProvisioningManager() { if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { return null; } return ProvisioningManager.createForSubscriptionId(mSubId); } @VisibleForTesting ImsMmTelManager getImsMmTelManager() { if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { return null; } return ImsMmTelManager.createForSubscriptionId(mSubId); } Loading @@ -271,11 +290,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment FRAGMENT_BUNDLE_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); } mImsManager = getImsManager(); mProvisioningManager = getImsProvisioningManager(); mImsMmTelManager = getImsMmTelManager(); mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)); mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode.setOnPreferenceChangeListener(this); Loading @@ -286,7 +303,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener); mIntentFilter = new IntentFilter(); mIntentFilter.addAction(ImsManager.ACTION_IMS_REGISTRATION_ERROR); mIntentFilter.addAction(ImsManager.ACTION_WFC_IMS_REGISTRATION_ERROR); } @Override Loading @@ -312,7 +329,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @VisibleForTesting boolean isWfcProvisionedOnDevice() { return MobileNetworkUtils.isWfcProvisionedOnDevice(mSubId); return queryImsState(mSubId).isWifiCallingProvisioned(); } private void updateBody() { Loading Loading @@ -342,7 +359,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } } Resources res = getResourcesForSubId(); final Resources res = getResourcesForSubId(); mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title)); mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title)); mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title)); Loading Loading @@ -383,8 +400,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } // NOTE: Buttons will be enabled/disabled in mPhoneStateListener final boolean wfcEnabled = mImsManager.isWfcEnabledByUser() && mImsManager.isNonTtyOrTtyOnVolteEnabled(); final WifiCallingQueryImsState queryIms = queryImsState(mSubId); final boolean wfcEnabled = queryIms.isEnabledByUser() && queryIms.isAllowUserControl(); mSwitch.setChecked(wfcEnabled); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting(); Loading @@ -397,18 +415,18 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public void onResume() { super.onResume(); final Context context = getActivity(); updateBody(); if (mImsManager.isWfcEnabledByPlatform()) { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); if (queryImsState(mSubId).isWifiCallingSupported()) { getTelephonyManagerForSub(mSubId).listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); mSwitchBar.addOnSwitchChangeListener(this); mValidListener = true; } final Context context = getActivity(); context.registerReceiver(mIntentReceiver, mIntentFilter); final Intent intent = getActivity().getIntent(); Loading @@ -417,12 +435,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } // Register callback for provisioning changes. try { mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback); } catch (ImsException e) { Log.w(TAG, "onResume: Unable to register callback for provisioning changes."); } registerProvisioningChangedCallback(); } @Override Loading @@ -434,7 +447,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment if (mValidListener) { mValidListener = false; mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); getTelephonyManagerForSub(mSubId).listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mSwitchBar.removeOnSwitchChangeListener(this); } Loading @@ -442,13 +456,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment context.unregisterReceiver(mIntentReceiver); // Remove callback for provisioning changes. try { mImsManager.getConfigInterface().removeConfigCallback( mProvisioningCallback.getBinder()); } catch (ImsException e) { Log.w(TAG, "onPause: Unable to remove callback for provisioning changes"); } unregisterProvisioningChangedCallback(); } /** Loading Loading @@ -508,7 +516,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment */ private void updateWfcMode(boolean wfcEnabled) { Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")"); mImsManager.setWfcSetting(wfcEnabled); mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting(); Loading @@ -524,8 +532,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); final Context context = getActivity(); Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode); switch (requestCode) { Loading Loading @@ -619,7 +625,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private CharSequence getWfcModeSummary(int wfcMode) { int resId = com.android.internal.R.string.wifi_calling_off_summary; if (mImsManager.isWfcEnabledByUser()) { if (queryImsState(mSubId).isEnabledByUser()) { switch (wfcMode) { case ImsMmTelManager.WIFI_MODE_WIFI_ONLY: resId = com.android.internal.R.string.wfc_mode_wifi_only_summary; Loading @@ -639,6 +645,27 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @VisibleForTesting Resources getResourcesForSubId() { return SubscriptionManager.getResourcesForSubId(getContext(), mSubId, false); return SubscriptionManager.getResourcesForSubId(getContext(), mSubId); } @VisibleForTesting void registerProvisioningChangedCallback() { if (mProvisioningManager == null) { return; } try { mProvisioningManager.registerProvisioningChangedCallback(getContext().getMainExecutor(), mProvisioningCallback); } catch (Exception ex) { Log.w(TAG, "onResume: Unable to register callback for provisioning changes."); } } @VisibleForTesting void unregisterProvisioningChangedCallback() { if (mProvisioningManager == null) { return; } mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback); } } src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java +51 −77 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +71 −41 Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.ims.ImsManager; import com.android.settings.R; import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -48,12 +48,12 @@ import java.util.List; public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements LifecycleObserver, OnStart, OnStop { private static final String TAG = "WifiCallingPreference"; @VisibleForTesting Integer mCallState; @VisibleForTesting CarrierConfigManager mCarrierConfigManager; @VisibleForTesting ImsManager mImsManager; private ImsMmTelManager mImsMmTelManager; @VisibleForTesting PhoneAccountHandle mSimCallManager; Loading @@ -68,8 +68,8 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont @Override public int getAvailabilityStatus(int subId) { return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && MobileNetworkUtils.isWifiCallingEnabled(mContext, subId) return SubscriptionManager.isValidSubscriptionId(subId) && isWifiCallingEnabled(mContext, subId) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } Loading Loading @@ -100,6 +100,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont if (mCallState == null) { return; } CharSequence summaryText = null; if (mSimCallManager != null) { final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext, mSimCallManager); Loading @@ -110,25 +111,31 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont final PackageManager pm = mContext.getPackageManager(); final List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0); preference.setTitle(resolutions.get(0).loadLabel(pm)); preference.setSummary(null); preference.setIntent(intent); } else { final String title = SubscriptionManager.getResourcesForSubId(mContext, mSubId) .getString(R.string.wifi_calling_settings_title); preference.setTitle(title); summaryText = getResourceIdForWfcMode(mSubId); } preference.setSummary(summaryText); preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE); } private CharSequence getResourceIdForWfcMode(int subId) { int resId = com.android.internal.R.string.wifi_calling_off_summary; if (mImsManager.isWfcEnabledByUser()) { if (queryImsState(subId).isEnabledByUser()) { boolean useWfcHomeModeForRoaming = false; if (mCarrierConfigManager != null) { final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); mCarrierConfigManager.getConfigForSubId(subId); if (carrierConfig != null) { useWfcHomeModeForRoaming = carrierConfig.getBoolean( CarrierConfigManager .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL); } } final boolean isRoaming = getTelephonyManager(mContext, mSubId) final boolean isRoaming = getTelephonyManager(mContext, subId) .isNetworkRoaming(); final int wfcMode = (isRoaming && !useWfcHomeModeForRoaming) ? mImsMmTelManager.getVoWiFiRoamingModeSetting() : Loading @@ -148,15 +155,11 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont break; } } preference.setSummary( SubscriptionManager.getResourcesForSubId(mContext, mSubId).getText(resId)); } preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE); return SubscriptionManager.getResourcesForSubId(mContext, subId).getText(resId); } public WifiCallingPreferenceController init(int subId) { mSubId = subId; mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId)); mImsMmTelManager = getImsMmTelManager(mSubId); mSimCallManager = mContext.getSystemService(TelecomManager.class) .getSimCallManagerForSubscription(mSubId); Loading @@ -164,14 +167,22 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont return this; } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(mContext, subId); } protected ImsMmTelManager getImsMmTelManager(int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { return null; } return ImsMmTelManager.createForSubscriptionId(subId); } @VisibleForTesting TelephonyManager getTelephonyManager(Context context, int subId) { final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class); if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { return telephonyMgr; } final TelephonyManager subscriptionTelephonyMgr = Loading Loading @@ -204,4 +215,23 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE); } } private boolean isWifiCallingEnabled(Context context, int subId) { final PhoneAccountHandle simCallManager = context.getSystemService(TelecomManager.class) .getSimCallManagerForSubscription(subId); final int phoneId = SubscriptionManager.getSlotIndex(subId); boolean isWifiCallingEnabled; if (simCallManager != null) { final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent( context, simCallManager); isWifiCallingEnabled = intent != null; } else { isWifiCallingEnabled = queryImsState(subId).isReadyToWifiCalling(); } return isWifiCallingEnabled; } }
src/com/android/settings/wifi/calling/OWNERS 0 → 100644 +8 −0 Original line number Diff line number Diff line # Default reviewers for this and subdirectories. allenwtsu@google.com andychou@google.com bonianchen@google.com songferngwang@google.com tomhsu@google.com # Emergency approvers in case the above are not available
src/com/android/settings/wifi/calling/WifiCallingSettings.java +7 −24 Original line number Diff line number Diff line Loading @@ -22,9 +22,6 @@ import android.os.Bundle; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.Log; import android.view.LayoutInflater; import android.view.View; Loading @@ -35,11 +32,11 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; 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.network.ims.WifiCallingQueryImsState; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; Loading Loading @@ -196,25 +193,6 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes } } @VisibleForTesting boolean isWfcEnabledByPlatform(SubscriptionInfo info) { final ImsManager imsManager = ImsManager.getInstance(getActivity(), info.getSimSlotIndex()); return imsManager.isWfcEnabledByPlatform(); } @VisibleForTesting boolean isWfcProvisionedOnDevice(SubscriptionInfo info) { final ProvisioningManager provisioningMgr = ProvisioningManager.createForSubscriptionId(info.getSubscriptionId()); if (provisioningMgr == null) { return true; } return provisioningMgr.getProvisioningStatusForCapability( MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN); } private void updateSubList() { mSil = SubscriptionUtil.getActiveSubscriptions( getContext().getSystemService(SubscriptionManager.class)); Loading @@ -225,7 +203,7 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes } for (int i = 0; i < mSil.size(); ) { final SubscriptionInfo info = mSil.get(i); if (!isWfcEnabledByPlatform(info) || !isWfcProvisionedOnDevice(info)) { if (!queryImsState(info.getSubscriptionId()).isWifiCallingProvisioned()) { mSil.remove(i); } else { i++; Loading @@ -241,4 +219,9 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes getActivity().getActionBar().setTitle(title); } } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(getContext(), subId); } }
src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +71 −44 Original line number Diff line number Diff line Loading @@ -30,10 +30,10 @@ import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsManager; import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ProvisioningManager; import android.text.TextUtils; import android.text.util.Linkify; import android.util.Log; import android.view.LayoutInflater; import android.view.View; Loading @@ -47,8 +47,6 @@ import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; import com.android.ims.ImsConfig; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.settings.R; Loading @@ -56,7 +54,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.widget.SwitchBar; /** Loading Loading @@ -100,8 +98,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private boolean mUseWfcHomeModeForRoaming = false; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private ImsManager mImsManager; private ImsMmTelManager mImsMmTelManager; private ProvisioningManager mProvisioningManager; private TelephonyManager mTelephonyManager; private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { Loading @@ -114,11 +112,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onCallStateChanged(int state, String incomingNumber) { final SettingsActivity activity = (SettingsActivity) getActivity(); final boolean isNonTtyOrTtyOnVolteEnabled = mImsManager.isNonTtyOrTtyOnVolteEnabled(); final boolean isNonTtyOrTtyOnVolteEnabled = queryImsState(WifiCallingSettingsForSub.this.mSubId).isAllowUserControl(); final boolean isWfcEnabled = mSwitchBar.isChecked() && isNonTtyOrTtyOnVolteEnabled; boolean isCallStateIdle = mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE; boolean isCallStateIdle = getTelephonyManagerForSub( WifiCallingSettingsForSub.this.mSubId).getCallState() == TelephonyManager.CALL_STATE_IDLE; mSwitchBar.setEnabled(isCallStateIdle && isNonTtyOrTtyOnVolteEnabled); Loading Loading @@ -183,7 +183,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mEmptyView = getView().findViewById(android.R.id.empty); setEmptyView(mEmptyView); mEmptyView.setAutoLinkMask(Linkify.WEB_URLS); final Resources res = getResourcesForSubId(); final String emptyViewText = res.getString(R.string.wifi_calling_off_explanation, res.getString(R.string.wifi_calling_off_explanation_2)); Loading @@ -200,7 +199,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mSwitchBar.hide(); } private void showAlert(Intent intent) { @VisibleForTesting void showAlert(Intent intent) { final Context context = getActivity(); final CharSequence title = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_TITLE); Loading @@ -221,7 +221,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(ImsManager.ACTION_IMS_REGISTRATION_ERROR)) { if (action.equals(ImsManager.ACTION_WFC_IMS_REGISTRATION_ERROR)) { // If this fragment is active then we are immediately // showing alert on screen. There is no need to add // notification in this case. Loading @@ -247,12 +247,31 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } @VisibleForTesting ImsManager getImsManager() { return ImsManager.getInstance(getActivity(), SubscriptionManager.getPhoneId(mSubId)); TelephonyManager getTelephonyManagerForSub(int subId) { if (mTelephonyManager == null) { mTelephonyManager = getContext().getSystemService(TelephonyManager.class); } return mTelephonyManager.createForSubscriptionId(subId); } @VisibleForTesting WifiCallingQueryImsState queryImsState(int subId) { return new WifiCallingQueryImsState(getContext(), subId); } @VisibleForTesting ProvisioningManager getImsProvisioningManager() { if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { return null; } return ProvisioningManager.createForSubscriptionId(mSubId); } @VisibleForTesting ImsMmTelManager getImsMmTelManager() { if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { return null; } return ImsMmTelManager.createForSubscriptionId(mSubId); } Loading @@ -271,11 +290,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment FRAGMENT_BUNDLE_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); } mImsManager = getImsManager(); mProvisioningManager = getImsProvisioningManager(); mImsMmTelManager = getImsMmTelManager(); mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)); mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode.setOnPreferenceChangeListener(this); Loading @@ -286,7 +303,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener); mIntentFilter = new IntentFilter(); mIntentFilter.addAction(ImsManager.ACTION_IMS_REGISTRATION_ERROR); mIntentFilter.addAction(ImsManager.ACTION_WFC_IMS_REGISTRATION_ERROR); } @Override Loading @@ -312,7 +329,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @VisibleForTesting boolean isWfcProvisionedOnDevice() { return MobileNetworkUtils.isWfcProvisionedOnDevice(mSubId); return queryImsState(mSubId).isWifiCallingProvisioned(); } private void updateBody() { Loading Loading @@ -342,7 +359,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } } Resources res = getResourcesForSubId(); final Resources res = getResourcesForSubId(); mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title)); mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title)); mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title)); Loading Loading @@ -383,8 +400,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } // NOTE: Buttons will be enabled/disabled in mPhoneStateListener final boolean wfcEnabled = mImsManager.isWfcEnabledByUser() && mImsManager.isNonTtyOrTtyOnVolteEnabled(); final WifiCallingQueryImsState queryIms = queryImsState(mSubId); final boolean wfcEnabled = queryIms.isEnabledByUser() && queryIms.isAllowUserControl(); mSwitch.setChecked(wfcEnabled); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting(); Loading @@ -397,18 +415,18 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public void onResume() { super.onResume(); final Context context = getActivity(); updateBody(); if (mImsManager.isWfcEnabledByPlatform()) { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); if (queryImsState(mSubId).isWifiCallingSupported()) { getTelephonyManagerForSub(mSubId).listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); mSwitchBar.addOnSwitchChangeListener(this); mValidListener = true; } final Context context = getActivity(); context.registerReceiver(mIntentReceiver, mIntentFilter); final Intent intent = getActivity().getIntent(); Loading @@ -417,12 +435,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } // Register callback for provisioning changes. try { mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback); } catch (ImsException e) { Log.w(TAG, "onResume: Unable to register callback for provisioning changes."); } registerProvisioningChangedCallback(); } @Override Loading @@ -434,7 +447,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment if (mValidListener) { mValidListener = false; mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); getTelephonyManagerForSub(mSubId).listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mSwitchBar.removeOnSwitchChangeListener(this); } Loading @@ -442,13 +456,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment context.unregisterReceiver(mIntentReceiver); // Remove callback for provisioning changes. try { mImsManager.getConfigInterface().removeConfigCallback( mProvisioningCallback.getBinder()); } catch (ImsException e) { Log.w(TAG, "onPause: Unable to remove callback for provisioning changes"); } unregisterProvisioningChangedCallback(); } /** Loading Loading @@ -508,7 +516,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment */ private void updateWfcMode(boolean wfcEnabled) { Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")"); mImsManager.setWfcSetting(wfcEnabled); mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled); final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting(); final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting(); Loading @@ -524,8 +532,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); final Context context = getActivity(); Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode); switch (requestCode) { Loading Loading @@ -619,7 +625,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private CharSequence getWfcModeSummary(int wfcMode) { int resId = com.android.internal.R.string.wifi_calling_off_summary; if (mImsManager.isWfcEnabledByUser()) { if (queryImsState(mSubId).isEnabledByUser()) { switch (wfcMode) { case ImsMmTelManager.WIFI_MODE_WIFI_ONLY: resId = com.android.internal.R.string.wfc_mode_wifi_only_summary; Loading @@ -639,6 +645,27 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @VisibleForTesting Resources getResourcesForSubId() { return SubscriptionManager.getResourcesForSubId(getContext(), mSubId, false); return SubscriptionManager.getResourcesForSubId(getContext(), mSubId); } @VisibleForTesting void registerProvisioningChangedCallback() { if (mProvisioningManager == null) { return; } try { mProvisioningManager.registerProvisioningChangedCallback(getContext().getMainExecutor(), mProvisioningCallback); } catch (Exception ex) { Log.w(TAG, "onResume: Unable to register callback for provisioning changes."); } } @VisibleForTesting void unregisterProvisioningChangedCallback() { if (mProvisioningManager == null) { return; } mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback); } }
src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java +51 −77 File changed.Preview size limit exceeded, changes collapsed. Show changes