Close Wi-Fi Calling screen if provisioning status changes to disallow
Starts to listen for provisioning changes in Wi-Fi Calling screen and closes the screen if the Wi-Fi Calling provisioning status changes to disallow. This prevents the Wi-Fi Calling screen from being kept open if the Wi-Fi Calling provisioning status is changed to disallow while the Wi-Fi Calling screen is open. Bug: 119389855 Test: make RunSettingsRoboTests \ ROBOTEST_FILTER=WifiCallingSettingsForSubTest Change-Id: I2af91c3734274f0aea942a8bb894d6f4ce295354
This commit is contained in:
committed by
Brad Ebinger
parent
7946eee850
commit
69dbf4bf84
@@ -29,6 +29,7 @@ import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.telephony.ims.ProvisioningManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -44,7 +45,9 @@ 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;
|
||||
import com.android.settings.SettingsActivity;
|
||||
@@ -152,6 +155,19 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
||||
}
|
||||
};
|
||||
|
||||
private final ProvisioningManager.Callback mProvisioningCallback =
|
||||
new ProvisioningManager.Callback() {
|
||||
@Override
|
||||
public void onProvisioningIntChanged(int item, int value) {
|
||||
if (item == ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED
|
||||
|| item == ImsConfig.ConfigConstants.VLT_SETTING_ENABLED) {
|
||||
// The provisioning policy might have changed. Update the body to make sure
|
||||
// this change takes effect if needed.
|
||||
updateBody();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
@@ -221,6 +237,11 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
||||
return 0;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ImsManager getImsManager() {
|
||||
return ImsManager.getInstance(getActivity(), SubscriptionManager.getPhoneId(mSubId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -236,8 +257,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
||||
FRAGMENT_BUNDLE_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
|
||||
}
|
||||
|
||||
mImsManager = ImsManager.getInstance(
|
||||
getActivity(), SubscriptionManager.getPhoneId(mSubId));
|
||||
mImsManager = getImsManager();
|
||||
|
||||
mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
|
||||
.createForSubscriptionId(mSubId);
|
||||
@@ -277,6 +297,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
private void updateBody() {
|
||||
if (!mImsManager.isWfcProvisionedOnDevice()) {
|
||||
// This screen is not allowed to be shown due to provisioning policy and should
|
||||
// therefore be closed.
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
CarrierConfigManager configManager = (CarrierConfigManager)
|
||||
getSystemService(Context.CARRIER_CONFIG_SERVICE);
|
||||
boolean isWifiOnlySupported = true;
|
||||
@@ -336,6 +363,14 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
||||
if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) {
|
||||
showAlert(intent);
|
||||
}
|
||||
|
||||
// Register callback for provisioning changes.
|
||||
try {
|
||||
mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback);
|
||||
} catch (ImsException e) {
|
||||
Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -354,6 +389,15 @@ 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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user