Merge "Close Wi-Fi Calling screen if provisioning status changes to disallow"

This commit is contained in:
Brad Ebinger
2019-02-14 18:54:55 +00:00
committed by Android (Google) Code Review
2 changed files with 172 additions and 3 deletions

View File

@@ -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");
}
}
/**