17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/* 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2009 The Android Open Source Project 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License. 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * http://www.apache.org/licenses/LICENSE-2.0 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License. 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpackage com.android.phone; 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Context; 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.AsyncResult; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle; 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Handler; 237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Message; 247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.ListPreference; 257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.provider.Settings; 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.provider.Settings.Secure; 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.AttributeSet; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Phone; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.PhoneFactory; 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class CdmaSubscriptionListPreference extends ListPreference { 347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String LOG_TAG = "CdmaSubscriptionListPreference"; 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Used for CDMA subscription mode 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0; 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int CDMA_SUBSCRIPTION_NV = 1; 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon //preferredSubscriptionMode 0 - RUIM/SIM, preferred 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // 1 - NV 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon static final int preferredSubscriptionMode = CDMA_SUBSCRIPTION_NV; 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Phone mPhone; 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CdmaSubscriptionButtonHandler mHandler; 477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public CdmaSubscriptionListPreference(Context context, AttributeSet attrs) { 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super(context, attrs); 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone = PhoneFactory.getDefaultPhone(); 527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mHandler = new CdmaSubscriptionButtonHandler(); 537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setCurrentCdmaSubscriptionModeValue(); 547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void setCurrentCdmaSubscriptionModeValue() { 577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int cdmaSubscriptionMode = Settings.Global.getInt(mPhone.getContext().getContentResolver(), 587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Settings.Global.CDMA_SUBSCRIPTION_MODE, preferredSubscriptionMode); 597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setValue(Integer.toString(cdmaSubscriptionMode)); 607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public CdmaSubscriptionListPreference(Context context) { 637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon this(context, null); 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void showDialog(Bundle state) { 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setCurrentCdmaSubscriptionModeValue(); 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.showDialog(state); 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onDialogClosed(boolean positiveResult) { 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onDialogClosed(positiveResult); 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (!positiveResult) { 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon //The button was dismissed - no need to set new value 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int buttonCdmaSubscriptionMode = Integer.valueOf(getValue()).intValue(); 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.d(LOG_TAG, "Setting new value " + buttonCdmaSubscriptionMode); 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int statusCdmaSubscriptionMode; 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch(buttonCdmaSubscriptionMode) { 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CDMA_SUBSCRIPTION_NV: 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon statusCdmaSubscriptionMode = Phone.CDMA_SUBSCRIPTION_NV; 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CDMA_SUBSCRIPTION_RUIM_SIM: 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon statusCdmaSubscriptionMode = Phone.CDMA_SUBSCRIPTION_RUIM_SIM; 917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon default: 937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon statusCdmaSubscriptionMode = Phone.PREFERRED_CDMA_SUBSCRIPTION; 947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Set the CDMA subscription mode, when mode has been successfully changed 977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // handleSetCdmaSubscriptionMode will be invoked and the value saved. 987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone.setCdmaSubscription(statusCdmaSubscriptionMode, mHandler 997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon .obtainMessage(CdmaSubscriptionButtonHandler.MESSAGE_SET_CDMA_SUBSCRIPTION, 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon getValue())); 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private class CdmaSubscriptionButtonHandler extends Handler { 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon static final int MESSAGE_SET_CDMA_SUBSCRIPTION = 0; 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void handleMessage(Message msg) { 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (msg.what) { 1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case MESSAGE_SET_CDMA_SUBSCRIPTION: 1127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleSetCdmaSubscriptionMode(msg); 1137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void handleSetCdmaSubscriptionMode(Message msg) { 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone = PhoneFactory.getDefaultPhone(); 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon AsyncResult ar = (AsyncResult) msg.obj; 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (ar.exception == null) { 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // Get the original string entered by the user 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int cdmaSubscriptionMode = Integer.valueOf((String) ar.userObj).intValue(); 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Settings.Global.putInt(mPhone.getContext().getContentResolver(), 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Settings.Global.CDMA_SUBSCRIPTION_MODE, 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cdmaSubscriptionMode ); 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.e(LOG_TAG, "Setting Cdma subscription source failed"); 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 133