CarrierText.java revision 25807936e8e4ca2c811bb4121725e1dd87e18efd
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; 2025807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggiimport android.content.res.TypedArray; 211d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport android.text.method.SingleLineTransformationMethod; 22f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.text.TextUtils; 23f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.util.AttributeSet; 241d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport android.view.View; 25f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.widget.TextView; 26f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 27f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants; 28f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants.State; 29f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.widget.LockPatternUtils; 30f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 311d80e977da89a660aff006e93470749b359c2393Victoria Leaseimport java.util.Locale; 321d80e977da89a660aff006e93470749b359c2393Victoria Lease 33f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerpublic class CarrierText extends TextView { 34e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller private static CharSequence mSeparator; 35e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller 36f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private LockPatternUtils mLockPatternUtils; 37f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 38f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { 39f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence mPlmn; 40f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence mSpn; 41f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private State mSimState; 42f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 43f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 44f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { 45f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mPlmn = plmn; 46f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mSpn = spn; 47f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller updateCarrierText(mSimState, mPlmn, mSpn); 48f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 49f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 50f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 51f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public void onSimStateChanged(IccCardConstants.State simState) { 52f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mSimState = simState; 53f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller updateCarrierText(mSimState, mPlmn, mSpn); 54f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 5520daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller 5620daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller public void onScreenTurnedOff(int why) { 5720daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller setSelected(false); 5820daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller }; 5920daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller 6020daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller public void onScreenTurnedOn() { 6120daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller setSelected(true); 6220daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller }; 63f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller }; 64f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 65f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * The status of this lock screen. Primarily used for widgets on LockScreen. 66f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 67109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller private static enum StatusMode { 68f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller Normal, // Normal case (sim card present, it's not locked) 69f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller NetworkLocked, // SIM card is 'network locked'. 70f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimMissing, // SIM card is missing. 71f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimMissingLocked, // SIM card is missing, and device isn't provisioned; don't allow access 72f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimPukLocked, // SIM card is PUK locked because SIM entered wrong too many times 73f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimLocked, // SIM card is currently locked 74109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure 75109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller SimNotReady; // SIM is not ready yet. May never be on devices w/o a SIM. 76f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 77f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 78f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public CarrierText(Context context) { 79f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller this(context, null); 80f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 81f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 82f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public CarrierText(Context context, AttributeSet attrs) { 83f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller super(context, attrs); 84f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mLockPatternUtils = new LockPatternUtils(mContext); 8525807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi boolean useAllCaps; 8625807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi TypedArray a = context.getTheme().obtainStyledAttributes( 8725807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi attrs, R.styleable.CarrierText, 0, 0); 8825807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi try { 8925807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi useAllCaps = a.getBoolean(R.styleable.CarrierText_allCaps, false); 9025807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi } finally { 9125807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi a.recycle(); 9225807936e8e4ca2c811bb4121725e1dd87e18efdJorim Jaggi } 931d80e977da89a660aff006e93470749b359c2393Victoria Lease setTransformationMethod(new CarrierTextTransformationMethod(mContext, useAllCaps)); 94f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 95f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 96f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller protected void updateCarrierText(State simState, CharSequence plmn, CharSequence spn) { 97e38c8e28ba50d5fe7f4f2bc5fe68a9f10bafe0f0Jim Miller setText(getCarrierTextForSimState(simState, plmn, spn)); 98f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 99f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 100f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 101f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller protected void onFinishInflate() { 102f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller super.onFinishInflate(); 103e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller mSeparator = getResources().getString(R.string.kg_text_message_separator); 10420daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller final boolean screenOn = KeyguardUpdateMonitor.getInstance(mContext).isScreenOn(); 10520daffd91e4a53054f8c4d7a66c2a68100abee03Jim Miller setSelected(screenOn); // Allow marquee to work. 106f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 107f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 1080928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 1090928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onAttachedToWindow() { 1100928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onAttachedToWindow(); 1110928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mCallback); 1120928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 1130928e019ce1a0e343df948520f32ac638379d8eeJim Miller 1140928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 1150928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onDetachedFromWindow() { 1160928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onDetachedFromWindow(); 1170928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mCallback); 1180928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 1190928e019ce1a0e343df948520f32ac638379d8eeJim Miller 120f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 121f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Top-level function for creating carrier text. Makes text based on simState, PLMN 122f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * and SPN as well as device capabilities, such as being emergency call capable. 123f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * 124f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param simState 125f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param plmn 126f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param spn 127f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @return 128f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 129f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence getCarrierTextForSimState(IccCardConstants.State simState, 130f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence plmn, CharSequence spn) { 131f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence carrierText = null; 132f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller StatusMode status = getStatusForIccState(simState); 133f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (status) { 134f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case Normal: 135f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = concatenate(plmn, spn); 136f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 137f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 138109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller case SimNotReady: 139109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller carrierText = null; // nothing to display yet. 140109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller break; 141109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 142f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NetworkLocked: 143f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 1445ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mContext.getText(R.string.keyguard_network_locked_message), plmn); 145f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 146f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 147f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissing: 148f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Shows "No SIM card | Emergency calls only" on devices that are voice-capable. 149f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // This depends on mPlmn containing the text "Emergency calls only" when the radio 150f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // has some connectivity. Otherwise, it should be null or empty and just show 151f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // "No SIM card" 152f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 1535ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller getContext().getText(R.string.keyguard_missing_sim_message_short), 154f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 155f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 156f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 157f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPermDisabled: 158f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = getContext().getText( 1595ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller R.string.keyguard_permanent_disabled_sim_message_short); 160f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 161f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 162f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissingLocked: 163f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 1645ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller getContext().getText(R.string.keyguard_missing_sim_message_short), 165f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 166f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 167f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 168f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimLocked: 169f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 1705ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller getContext().getText(R.string.keyguard_sim_locked_message), 171f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 172f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 173f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 174f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPukLocked: 175f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 1765ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller getContext().getText(R.string.keyguard_sim_puk_locked_message), 177f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 178f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 179f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 180f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 181f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return carrierText; 182f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 183f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 184f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /* 185f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Add emergencyCallMessage to carrier string only if phone supports emergency calls. 186f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 187f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence makeCarrierStringOnEmergencyCapable( 188f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence simMessage, CharSequence emergencyCallMessage) { 189f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (mLockPatternUtils.isEmergencyCallCapable()) { 190f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return concatenate(simMessage, emergencyCallMessage); 191f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 192f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return simMessage; 193f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 194f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 195f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 196f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Determine the current status of the lock screen given the SIM state and other stuff. 197f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 198f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private StatusMode getStatusForIccState(IccCardConstants.State simState) { 199f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Since reading the SIM may take a while, we assume it is present until told otherwise. 200f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (simState == null) { 201f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.Normal; 202f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 203f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 204f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean missingAndNotProvisioned = 205f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller !KeyguardUpdateMonitor.getInstance(mContext).isDeviceProvisioned() 206f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller && (simState == IccCardConstants.State.ABSENT || 207f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller simState == IccCardConstants.State.PERM_DISABLED); 208f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 209f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Assume we're NETWORK_LOCKED if not provisioned 210f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller simState = missingAndNotProvisioned ? IccCardConstants.State.NETWORK_LOCKED : simState; 211f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (simState) { 212f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case ABSENT: 213f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 214f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NETWORK_LOCKED: 215f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissingLocked; 216f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NOT_READY: 217109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller return StatusMode.SimNotReady; 218f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PIN_REQUIRED: 219f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimLocked; 220f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PUK_REQUIRED: 221f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimPukLocked; 222f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case READY: 223f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.Normal; 224f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PERM_DISABLED: 225f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimPermDisabled; 226f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case UNKNOWN: 227f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 228f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 229f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 230f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 231f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 232f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private static CharSequence concatenate(CharSequence plmn, CharSequence spn) { 233f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean plmnValid = !TextUtils.isEmpty(plmn); 234f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean spnValid = !TextUtils.isEmpty(spn); 235f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (plmnValid && spnValid) { 236e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller return new StringBuilder().append(plmn).append(mSeparator).append(spn).toString(); 237f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else if (plmnValid) { 238f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return plmn; 239f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else if (spnValid) { 240f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return spn; 241f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else { 242f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return ""; 243f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 244f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 245f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 246f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence getCarrierHelpTextForSimState(IccCardConstants.State simState, 247f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller String plmn, String spn) { 248f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller int carrierHelpTextId = 0; 249f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller StatusMode status = getStatusForIccState(simState); 250f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (status) { 251f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NetworkLocked: 2525ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller carrierHelpTextId = R.string.keyguard_instructions_when_pattern_disabled; 253f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 254f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 255f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissing: 2565ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller carrierHelpTextId = R.string.keyguard_missing_sim_instructions_long; 257f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 258f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 259f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPermDisabled: 2605ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller carrierHelpTextId = R.string.keyguard_permanent_disabled_sim_instructions; 261f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 262f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 263f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissingLocked: 2645ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller carrierHelpTextId = R.string.keyguard_missing_sim_instructions; 265f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 266f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 267f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case Normal: 268f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimLocked: 269f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPukLocked: 270f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 271f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 272f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 273f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return mContext.getText(carrierHelpTextId); 274f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 2751d80e977da89a660aff006e93470749b359c2393Victoria Lease 2761d80e977da89a660aff006e93470749b359c2393Victoria Lease private class CarrierTextTransformationMethod extends SingleLineTransformationMethod { 2771d80e977da89a660aff006e93470749b359c2393Victoria Lease private final Locale mLocale; 2781d80e977da89a660aff006e93470749b359c2393Victoria Lease private final boolean mAllCaps; 2791d80e977da89a660aff006e93470749b359c2393Victoria Lease 2801d80e977da89a660aff006e93470749b359c2393Victoria Lease public CarrierTextTransformationMethod(Context context, boolean allCaps) { 2811d80e977da89a660aff006e93470749b359c2393Victoria Lease mLocale = context.getResources().getConfiguration().locale; 2821d80e977da89a660aff006e93470749b359c2393Victoria Lease mAllCaps = allCaps; 2831d80e977da89a660aff006e93470749b359c2393Victoria Lease } 2841d80e977da89a660aff006e93470749b359c2393Victoria Lease 2851d80e977da89a660aff006e93470749b359c2393Victoria Lease @Override 2861d80e977da89a660aff006e93470749b359c2393Victoria Lease public CharSequence getTransformation(CharSequence source, View view) { 2871d80e977da89a660aff006e93470749b359c2393Victoria Lease source = super.getTransformation(source, view); 2881d80e977da89a660aff006e93470749b359c2393Victoria Lease 2891d80e977da89a660aff006e93470749b359c2393Victoria Lease if (mAllCaps && source != null) { 2901d80e977da89a660aff006e93470749b359c2393Victoria Lease source = source.toString().toUpperCase(mLocale); 2911d80e977da89a660aff006e93470749b359c2393Victoria Lease } 2921d80e977da89a660aff006e93470749b359c2393Victoria Lease 2931d80e977da89a660aff006e93470749b359c2393Victoria Lease return source; 2941d80e977da89a660aff006e93470749b359c2393Victoria Lease } 2951d80e977da89a660aff006e93470749b359c2393Victoria Lease } 296f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller} 297