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