19ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang/* 29ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * Copyright (C) 2009 The Android Open Source Project 39ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * 49ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 59ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * you may not use this file except in compliance with the License. 69ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * You may obtain a copy of the License at 79ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * 89ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * http://www.apache.org/licenses/LICENSE-2.0 99ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * 109ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * Unless required by applicable law or agreed to in writing, software 119ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * distributed under the License is distributed on an "AS IS" BASIS, 129ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * See the License for the specific language governing permissions and 149ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang * limitations under the License. 159ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang */ 169ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 179ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangpackage com.android.phone; 189ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 199ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.content.Context; 209ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.os.AsyncResult; 219ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.os.Handler; 229ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.os.Message; 239ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.preference.CheckBoxPreference; 249ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.util.AttributeSet; 259ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport android.util.Log; 269ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 279ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangimport com.android.internal.telephony.Phone; 289ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 299ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhangpublic class Use2GOnlyCheckBoxPreference extends CheckBoxPreference { 309ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private static final String LOG_TAG = "Use2GOnlyCheckBoxPreference"; 319ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private static final boolean DBG = true; 329ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 339ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private Phone mPhone; 349ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private MyHandler mHandler; 359ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 369ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang public Use2GOnlyCheckBoxPreference(Context context) { 379ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang this(context, null); 389ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 399ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 409ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang public Use2GOnlyCheckBoxPreference(Context context, AttributeSet attrs) { 419ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang this(context, attrs,com.android.internal.R.attr.checkBoxPreferenceStyle); 429ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 439ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 449ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang public Use2GOnlyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) { 459ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang super(context, attrs, defStyle); 46546a00dd3bb35abfcd44c696cd810073a084b43cWink Saville mPhone = PhoneApp.getPhone(); 479ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang mHandler = new MyHandler(); 489ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang mPhone.getPreferredNetworkType( 499ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang mHandler.obtainMessage(MyHandler.MESSAGE_GET_PREFERRED_NETWORK_TYPE)); 509ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 519ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 529ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang @Override 539ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang protected void onClick() { 549ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang super.onClick(); 559ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 569ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang int networkType = isChecked() ? Phone.NT_MODE_GSM_ONLY : Phone.NT_MODE_WCDMA_PREF; 579ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang Log.i(LOG_TAG, "set preferred network type="+networkType); 58e64151a3e3c27689f242fc59aa7d888cb70310f6Wink Saville android.provider.Settings.Secure.putInt(mPhone.getContext().getContentResolver(), 59e64151a3e3c27689f242fc59aa7d888cb70310f6Wink Saville android.provider.Settings.Secure.PREFERRED_NETWORK_MODE, networkType); 609ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang mPhone.setPreferredNetworkType(networkType, mHandler 619ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE)); 629ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 639ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 649ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private class MyHandler extends Handler { 659ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 669ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private static final int MESSAGE_GET_PREFERRED_NETWORK_TYPE = 0; 679ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 1; 689ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 699ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang @Override 709ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang public void handleMessage(Message msg) { 719ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang switch (msg.what) { 729ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang case MESSAGE_GET_PREFERRED_NETWORK_TYPE: 739ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang handleGetPreferredNetworkTypeResponse(msg); 749ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang break; 759ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 769ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang case MESSAGE_SET_PREFERRED_NETWORK_TYPE: 779ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang handleSetPreferredNetworkTypeResponse(msg); 789ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang break; 799ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 809ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 819ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 829ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private void handleGetPreferredNetworkTypeResponse(Message msg) { 839ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang AsyncResult ar = (AsyncResult) msg.obj; 849ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 859ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang if (ar.exception == null) { 869ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang int type = ((int[])ar.result)[0]; 875c7d3167b8372b040d6c0a695f7c0822d80b2c21Wink Saville if (type != Phone.NT_MODE_GSM_ONLY) { 885c7d3167b8372b040d6c0a695f7c0822d80b2c21Wink Saville // Allow only NT_MODE_GSM_ONLY or NT_MODE_WCDMA_PREF 895c7d3167b8372b040d6c0a695f7c0822d80b2c21Wink Saville type = Phone.NT_MODE_WCDMA_PREF; 905c7d3167b8372b040d6c0a695f7c0822d80b2c21Wink Saville } 919ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang Log.i(LOG_TAG, "get preferred network type="+type); 929ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang setChecked(type == Phone.NT_MODE_GSM_ONLY); 93e64151a3e3c27689f242fc59aa7d888cb70310f6Wink Saville android.provider.Settings.Secure.putInt(mPhone.getContext().getContentResolver(), 94e64151a3e3c27689f242fc59aa7d888cb70310f6Wink Saville android.provider.Settings.Secure.PREFERRED_NETWORK_MODE, type); 959ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } else { 969ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang // Weird state, disable the setting 979ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang Log.i(LOG_TAG, "get preferred network type, exception="+ar.exception); 989ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang setEnabled(false); 999ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 1009ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 1019ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 1029ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang private void handleSetPreferredNetworkTypeResponse(Message msg) { 1039ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang AsyncResult ar = (AsyncResult) msg.obj; 1049ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang 1059ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang if (ar.exception != null) { 1069ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang // Yikes, error, disable the setting 1079ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang setEnabled(false); 1089ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang // Set UI to current state 1099ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang Log.i(LOG_TAG, "set preferred network type, exception=" + ar.exception); 1109ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang mPhone.getPreferredNetworkType(obtainMessage(MESSAGE_GET_PREFERRED_NETWORK_TYPE)); 1119ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } else { 1129ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang Log.i(LOG_TAG, "set preferred network type done"); 1139ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 1149ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 1159ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang } 1169ed35b1e94dbfef3ba7dbfc9add957b504e1dab0Chouting Zhang} 117