CarrierText.java revision 1d80e977da89a660aff006e93470749b359c2393
1109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller/*
2109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Copyright (C) 2012 The Android Open Source Project
3109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller *
4109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Licensed under the Apache License, Version 2.0 (the "License");
5109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * you may not use this file except in compliance with the License.
6109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * You may obtain a copy of the License at
7109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller *
8109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller *      http://www.apache.org/licenses/LICENSE-2.0
9109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller *
10109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Unless required by applicable law or agreed to in writing, software
11109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * distributed under the License is distributed on an "AS IS" BASIS,
12109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * See the License for the specific language governing permissions and
14109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * limitations under the License.
15109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller */
16109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller
175ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard;
18f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
19f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.content.Context;
201d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport android.text.method.SingleLineTransformationMethod;
21f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.text.TextUtils;
22f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.util.AttributeSet;
231d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport android.view.View;
24f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.widget.TextView;
25f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
26f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants;
27f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants.State;
28f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.widget.LockPatternUtils;
29f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
301d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport java.util.Locale;
311d80e977da89a660aff006e93470749b359c2393Victoria Lease
32f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerpublic class CarrierText extends TextView {
33e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller    private static CharSequence mSeparator;
34e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller
35f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private LockPatternUtils mLockPatternUtils;
36f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
37f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
38f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        private CharSequence mPlmn;
39f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        private CharSequence mSpn;
40f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        private State mSimState;
41f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
42f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        @Override
43f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {
44f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            mPlmn = plmn;
45f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            mSpn = spn;
46f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            updateCarrierText(mSimState, mPlmn, mSpn);
47f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
48f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
49f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        @Override
50f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        public void onSimStateChanged(IccCardConstants.State simState) {
51f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            mSimState = simState;
52f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            updateCarrierText(mSimState, mPlmn, mSpn);
53f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
5420daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller
5520daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        public void onScreenTurnedOff(int why) {
5620daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller            setSelected(false);
5720daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        };
5820daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller
5920daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        public void onScreenTurnedOn() {
6020daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller            setSelected(true);
6120daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        };
62f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    };
63f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    /**
64f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * The status of this lock screen. Primarily used for widgets on LockScreen.
65f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     */
66109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller    private static enum StatusMode {
67f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        Normal, // Normal case (sim card present, it's not locked)
68f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        NetworkLocked, // SIM card is 'network locked'.
69f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        SimMissing, // SIM card is missing.
70f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        SimMissingLocked, // SIM card is missing, and device isn't provisioned; don't allow access
71f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        SimPukLocked, // SIM card is PUK locked because SIM entered wrong too many times
72f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        SimLocked, // SIM card is currently locked
73109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller        SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure
74109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller        SimNotReady; // SIM is not ready yet. May never be on devices w/o a SIM.
75f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
76f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
77f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    public CarrierText(Context context) {
78f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        this(context, null);
79f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
80f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
81f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    public CarrierText(Context context, AttributeSet attrs) {
82f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        super(context, attrs);
83f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        mLockPatternUtils = new LockPatternUtils(mContext);
841d80e977da89a660aff006e93470749b359c2393Victoria Lease        boolean useAllCaps = mContext.getResources().getBoolean(R.bool.kg_use_all_caps);
851d80e977da89a660aff006e93470749b359c2393Victoria Lease        setTransformationMethod(new CarrierTextTransformationMethod(mContext, useAllCaps));
86f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
87f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
88f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    protected void updateCarrierText(State simState, CharSequence plmn, CharSequence spn) {
89e38c8e28ba50d5fe7f4f2bc5fe68a9f10bafe0f0Jim Miller        setText(getCarrierTextForSimState(simState, plmn, spn));
90f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
91f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
92f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    @Override
93f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    protected void onFinishInflate() {
94f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        super.onFinishInflate();
95e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller        mSeparator = getResources().getString(R.string.kg_text_message_separator);
9620daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn();
9720daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller        setSelected(screenOn); // Allow marquee to work.
98f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
99f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
1000928e019ce1a0e343df948520f32ac638379d8eeJim Miller    @Override
1010928e019ce1a0e343df948520f32ac638379d8eeJim Miller    protected void onAttachedToWindow() {
1020928e019ce1a0e343df948520f32ac638379d8eeJim Miller        super.onAttachedToWindow();
1030928e019ce1a0e343df948520f32ac638379d8eeJim Miller        KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mCallback);
1040928e019ce1a0e343df948520f32ac638379d8eeJim Miller    }
1050928e019ce1a0e343df948520f32ac638379d8eeJim Miller
1060928e019ce1a0e343df948520f32ac638379d8eeJim Miller    @Override
1070928e019ce1a0e343df948520f32ac638379d8eeJim Miller    protected void onDetachedFromWindow() {
1080928e019ce1a0e343df948520f32ac638379d8eeJim Miller        super.onDetachedFromWindow();
1090928e019ce1a0e343df948520f32ac638379d8eeJim Miller        KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mCallback);
1100928e019ce1a0e343df948520f32ac638379d8eeJim Miller    }
1110928e019ce1a0e343df948520f32ac638379d8eeJim Miller
112f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    /**
113f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * Top-level function for creating carrier text. Makes text based on simState, PLMN
114f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * and SPN as well as device capabilities, such as being emergency call capable.
115f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     *
116f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * @param simState
117f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * @param plmn
118f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * @param spn
119f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * @return
120f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     */
121f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private CharSequence getCarrierTextForSimState(IccCardConstants.State simState,
122f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            CharSequence plmn, CharSequence spn) {
123f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        CharSequence carrierText = null;
124f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        StatusMode status = getStatusForIccState(simState);
125f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        switch (status) {
126f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case Normal:
127f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText = concatenate(plmn, spn);
128f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
129f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
130109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller            case SimNotReady:
131109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller                carrierText = null; // nothing to display yet.
132109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller                break;
133109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller
134f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case NetworkLocked:
135f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText = makeCarrierStringOnEmergencyCapable(
1365ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        mContext.getText(R.string.keyguard_network_locked_message), plmn);
137f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
138f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
139f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimMissing:
140f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                // Shows "No SIM card | Emergency calls only" on devices that are voice-capable.
141f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                // This depends on mPlmn containing the text "Emergency calls only" when the radio
142f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                // has some connectivity. Otherwise, it should be null or empty and just show
143f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                // "No SIM card"
144f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText =  makeCarrierStringOnEmergencyCapable(
1455ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        getContext().getText(R.string.keyguard_missing_sim_message_short),
146f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                        plmn);
147f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
148f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
149f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimPermDisabled:
150f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText = getContext().getText(
1515ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        R.string.keyguard_permanent_disabled_sim_message_short);
152f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
153f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
154f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimMissingLocked:
155f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText =  makeCarrierStringOnEmergencyCapable(
1565ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        getContext().getText(R.string.keyguard_missing_sim_message_short),
157f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                        plmn);
158f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
159f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
160f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimLocked:
161f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText = makeCarrierStringOnEmergencyCapable(
1625ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        getContext().getText(R.string.keyguard_sim_locked_message),
163f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                        plmn);
164f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
165f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
166f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimPukLocked:
167f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                carrierText = makeCarrierStringOnEmergencyCapable(
1685ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        getContext().getText(R.string.keyguard_sim_puk_locked_message),
169f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                        plmn);
170f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
171f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
172f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
173f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        return carrierText;
174f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
175f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
176f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    /*
177f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * Add emergencyCallMessage to carrier string only if phone supports emergency calls.
178f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     */
179f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private CharSequence makeCarrierStringOnEmergencyCapable(
180f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            CharSequence simMessage, CharSequence emergencyCallMessage) {
181f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        if (mLockPatternUtils.isEmergencyCallCapable()) {
182f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            return concatenate(simMessage, emergencyCallMessage);
183f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
184f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        return simMessage;
185f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
186f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
187f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    /**
188f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     * Determine the current status of the lock screen given the SIM state and other stuff.
189f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller     */
190f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private StatusMode getStatusForIccState(IccCardConstants.State simState) {
191f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        // Since reading the SIM may take a while, we assume it is present until told otherwise.
192f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        if (simState == null) {
193f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            return StatusMode.Normal;
194f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
195f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
196f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        final boolean missingAndNotProvisioned =
197f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                !KeyguardUpdateMonitor.getInstance(mContext).isDeviceProvisioned()
198f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                && (simState == IccCardConstants.State.ABSENT ||
199f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                        simState == IccCardConstants.State.PERM_DISABLED);
200f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
201f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        // Assume we're NETWORK_LOCKED if not provisioned
202f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        simState = missingAndNotProvisioned ? IccCardConstants.State.NETWORK_LOCKED : simState;
203f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        switch (simState) {
204f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case ABSENT:
205f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimMissing;
206f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case NETWORK_LOCKED:
207f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimMissingLocked;
208f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case NOT_READY:
209109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller                return StatusMode.SimNotReady;
210f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case PIN_REQUIRED:
211f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimLocked;
212f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case PUK_REQUIRED:
213f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimPukLocked;
214f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case READY:
215f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.Normal;
216f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case PERM_DISABLED:
217f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimPermDisabled;
218f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case UNKNOWN:
219f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                return StatusMode.SimMissing;
220f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
221f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        return StatusMode.SimMissing;
222f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
223f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
224f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private static CharSequence concatenate(CharSequence plmn, CharSequence spn) {
225f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        final boolean plmnValid = !TextUtils.isEmpty(plmn);
226f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        final boolean spnValid = !TextUtils.isEmpty(spn);
227f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        if (plmnValid && spnValid) {
228e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller            return new StringBuilder().append(plmn).append(mSeparator).append(spn).toString();
229f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        } else if (plmnValid) {
230f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            return plmn;
231f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        } else if (spnValid) {
232f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            return spn;
233f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        } else {
234f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            return "";
235f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
236f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
237f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
238f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    private CharSequence getCarrierHelpTextForSimState(IccCardConstants.State simState,
239f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            String plmn, String spn) {
240f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        int carrierHelpTextId = 0;
241f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        StatusMode status = getStatusForIccState(simState);
242f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        switch (status) {
243f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case NetworkLocked:
2445ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                carrierHelpTextId = R.string.keyguard_instructions_when_pattern_disabled;
245f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
246f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
247f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimMissing:
2485ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                carrierHelpTextId = R.string.keyguard_missing_sim_instructions_long;
249f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
250f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
251f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimPermDisabled:
2525ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                carrierHelpTextId = R.string.keyguard_permanent_disabled_sim_instructions;
253f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
254f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
255f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimMissingLocked:
2565ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                carrierHelpTextId = R.string.keyguard_missing_sim_instructions;
257f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
258f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
259f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case Normal:
260f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimLocked:
261f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller            case SimPukLocked:
262f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller                break;
263f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        }
264f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller
265f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller        return mContext.getText(carrierHelpTextId);
266f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller    }
2671d80e977da89a660aff006e93470749b359c2393Victoria Lease
2681d80e977da89a660aff006e93470749b359c2393Victoria Lease    private class CarrierTextTransformationMethod extends SingleLineTransformationMethod {
2691d80e977da89a660aff006e93470749b359c2393Victoria Lease        private final Locale mLocale;
2701d80e977da89a660aff006e93470749b359c2393Victoria Lease        private final boolean mAllCaps;
2711d80e977da89a660aff006e93470749b359c2393Victoria Lease
2721d80e977da89a660aff006e93470749b359c2393Victoria Lease        public CarrierTextTransformationMethod(Context context, boolean allCaps) {
2731d80e977da89a660aff006e93470749b359c2393Victoria Lease            mLocale = context.getResources().getConfiguration().locale;
2741d80e977da89a660aff006e93470749b359c2393Victoria Lease            mAllCaps = allCaps;
2751d80e977da89a660aff006e93470749b359c2393Victoria Lease        }
2761d80e977da89a660aff006e93470749b359c2393Victoria Lease
2771d80e977da89a660aff006e93470749b359c2393Victoria Lease        @Override
2781d80e977da89a660aff006e93470749b359c2393Victoria Lease        public CharSequence getTransformation(CharSequence source, View view) {
2791d80e977da89a660aff006e93470749b359c2393Victoria Lease            source = super.getTransformation(source, view);
2801d80e977da89a660aff006e93470749b359c2393Victoria Lease
2811d80e977da89a660aff006e93470749b359c2393Victoria Lease            if (mAllCaps && source != null) {
2821d80e977da89a660aff006e93470749b359c2393Victoria Lease                source = source.toString().toUpperCase(mLocale);
2831d80e977da89a660aff006e93470749b359c2393Victoria Lease            }
2841d80e977da89a660aff006e93470749b359c2393Victoria Lease
2851d80e977da89a660aff006e93470749b359c2393Victoria Lease            return source;
2861d80e977da89a660aff006e93470749b359c2393Victoria Lease        }
2871d80e977da89a660aff006e93470749b359c2393Victoria Lease    }
288f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller}
289