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