[RadioInfo] Save PreferredNetworkMode to Settings
Historically, the debug menu intentionally did not save the preferred network mode once chosen. This causes problems because some settings cause a phone switch which overrides the preferred network mode, which can cause another phone switch and again override the preferred network mode, completely obliterating the requested debug setting. This change will now save the debug menu setting to the system settings, which will prevent the circular changes and loss of setting due to phone switching. However, caching the debug setting to prevent the phone switch logic from overriding the setting has a side effect, which is why it wasn't done historically. If a debug setting of the preferred network mode is set, it will cause the UX of the non-debug network preference screen to change. Thus, someone who uses the debug menu to make changes must be careful to re-set the setting to return to the correct UX of the publicly displayed menu. Bug: 95133265 Test: -manually set preferred network mode using the RadioInfo menu and observed that there is no phone switch when setting CDMA. -confirmed that changing the network mode in RadioInfo will cause UX changes to the public network preference menu. Change-Id: I91f669956a6d02515530855c4617cd0a767d73fa
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package com.android.settings;
|
||||
|
||||
import static android.net.ConnectivityManager.NetworkCallback;
|
||||
import static android.provider.Settings.Global.PREFERRED_NETWORK_MODE;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
@@ -39,6 +40,7 @@ import android.os.AsyncResult;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.CellInfo;
|
||||
import android.telephony.CellInfoCdma;
|
||||
@@ -1489,6 +1491,19 @@ public class RadioInfo extends Activity {
|
||||
if (mPreferredNetworkTypeResult != pos && pos >= 0
|
||||
&& pos <= mPreferredNetworkLabels.length - 2) {
|
||||
mPreferredNetworkTypeResult = pos;
|
||||
|
||||
// TODO: Possibly migrate this to TelephonyManager.setPreferredNetworkType()
|
||||
// which today still has some issues (mostly that the "set" is conditional
|
||||
// on a successful modem call, which is not what we want). Instead we always
|
||||
// want this setting to be set, so that if the radio hiccups and this setting
|
||||
// is for some reason unsuccessful, future calls to the radio will reflect
|
||||
// the users's preference which is set here.
|
||||
final int subId = phone.getSubId();
|
||||
if (SubscriptionManager.isUsableSubIdValue(subId)) {
|
||||
Settings.Global.putInt(phone.getContext().getContentResolver(),
|
||||
PREFERRED_NETWORK_MODE + subId, mPreferredNetworkTypeResult);
|
||||
}
|
||||
log("Calling setPreferredNetworkType(" + mPreferredNetworkTypeResult + ")");
|
||||
Message msg = mHandler.obtainMessage(EVENT_SET_PREFERRED_TYPE_DONE);
|
||||
phone.setPreferredNetworkType(mPreferredNetworkTypeResult, msg);
|
||||
}
|
||||
|
Reference in New Issue
Block a user