diff options
Diffstat (limited to 'src/com/android/phone/CdmaSystemSelectListPreference.java')
-rw-r--r-- | src/com/android/phone/CdmaSystemSelectListPreference.java | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/src/com/android/phone/CdmaSystemSelectListPreference.java b/src/com/android/phone/CdmaSystemSelectListPreference.java new file mode 100644 index 00000000..d291fd75 --- /dev/null +++ b/src/com/android/phone/CdmaSystemSelectListPreference.java @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.phone; + +import android.content.Context; +import android.os.AsyncResult; +import android.os.Bundle; +import android.os.SystemProperties; +import android.os.Handler; +import android.os.Message; +import android.preference.ListPreference; +import android.provider.Settings; +import android.provider.Settings.Secure; +import android.util.AttributeSet; +import android.util.Log; + +import com.android.internal.telephony.Phone; +import com.android.internal.telephony.TelephonyProperties; + +public class CdmaSystemSelectListPreference extends ListPreference { + + private static final String LOG_TAG = "CdmaRoamingListPreference"; + private static final boolean DBG = false; + + private Phone mPhone; + private MyHandler mHandler = new MyHandler(); + + public CdmaSystemSelectListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + mPhone = PhoneGlobals.getPhone(); + mHandler = new MyHandler(); + mPhone.queryCdmaRoamingPreference( + mHandler.obtainMessage(MyHandler.MESSAGE_GET_ROAMING_PREFERENCE)); + } + + public CdmaSystemSelectListPreference(Context context) { + this(context, null); + } + + @Override + protected void showDialog(Bundle state) { + if (Boolean.parseBoolean( + SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { + // In ECM mode do not show selection options + } else { + super.showDialog(state); + } + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + + if (positiveResult && (getValue() != null)) { + int buttonCdmaRoamingMode = Integer.valueOf(getValue()).intValue(); + int settingsCdmaRoamingMode = + Settings.Global.getInt(mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, Phone.CDMA_RM_HOME); + if (buttonCdmaRoamingMode != settingsCdmaRoamingMode) { + int statusCdmaRoamingMode; + switch(buttonCdmaRoamingMode) { + case Phone.CDMA_RM_ANY: + statusCdmaRoamingMode = Phone.CDMA_RM_ANY; + break; + case Phone.CDMA_RM_HOME: + default: + statusCdmaRoamingMode = Phone.CDMA_RM_HOME; + } + //Set the Settings.Secure network mode + Settings.Global.putInt(mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, + buttonCdmaRoamingMode ); + //Set the roaming preference mode + mPhone.setCdmaRoamingPreference(statusCdmaRoamingMode, mHandler + .obtainMessage(MyHandler.MESSAGE_SET_ROAMING_PREFERENCE)); + } + } else { + Log.d(LOG_TAG, String.format("onDialogClosed: positiveResult=%b value=%s -- do nothing", + positiveResult, getValue())); + } + } + + private class MyHandler extends Handler { + + static final int MESSAGE_GET_ROAMING_PREFERENCE = 0; + static final int MESSAGE_SET_ROAMING_PREFERENCE = 1; + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MESSAGE_GET_ROAMING_PREFERENCE: + handleQueryCdmaRoamingPreference(msg); + break; + + case MESSAGE_SET_ROAMING_PREFERENCE: + handleSetCdmaRoamingPreference(msg); + break; + } + } + + private void handleQueryCdmaRoamingPreference(Message msg) { + AsyncResult ar = (AsyncResult) msg.obj; + + if (ar.exception == null) { + int statusCdmaRoamingMode = ((int[])ar.result)[0]; + int settingsRoamingMode = Settings.Global.getInt( + mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, Phone.CDMA_RM_HOME); + //check that statusCdmaRoamingMode is from an accepted value + if (statusCdmaRoamingMode == Phone.CDMA_RM_HOME || + statusCdmaRoamingMode == Phone.CDMA_RM_ANY ) { + //check changes in statusCdmaRoamingMode and updates settingsRoamingMode + if (statusCdmaRoamingMode != settingsRoamingMode) { + settingsRoamingMode = statusCdmaRoamingMode; + //changes the Settings.Secure accordingly to statusCdmaRoamingMode + Settings.Global.putInt( + mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, + settingsRoamingMode ); + } + //changes the mButtonPreferredNetworkMode accordingly to modemNetworkMode + setValue(Integer.toString(statusCdmaRoamingMode)); + } + else { + if(DBG) Log.i(LOG_TAG, "reset cdma roaming mode to default" ); + resetCdmaRoamingModeToDefault(); + } + } + } + + private void handleSetCdmaRoamingPreference(Message msg) { + AsyncResult ar = (AsyncResult) msg.obj; + + if ((ar.exception == null) && (getValue() != null)) { + int cdmaRoamingMode = Integer.valueOf(getValue()).intValue(); + Settings.Global.putInt(mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, + cdmaRoamingMode ); + } else { + mPhone.queryCdmaRoamingPreference(obtainMessage(MESSAGE_GET_ROAMING_PREFERENCE)); + } + } + + private void resetCdmaRoamingModeToDefault() { + //set the mButtonCdmaRoam + setValue(Integer.toString(Phone.CDMA_RM_HOME)); + //set the Settings.System + Settings.Global.putInt(mPhone.getContext().getContentResolver(), + Settings.Global.CDMA_ROAMING_MODE, + Phone.CDMA_RM_HOME ); + //Set the Status + mPhone.setCdmaRoamingPreference(Phone.CDMA_RM_HOME, + obtainMessage(MyHandler.MESSAGE_SET_ROAMING_PREFERENCE)); + } + } + +} |