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 17f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerpackage com.android.internal.policy.impl.keyguard; 18f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 19f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.content.Context; 20f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.text.TextUtils; 21f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.util.AttributeSet; 22f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport android.widget.TextView; 23f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 24f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.R; 25f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants; 26f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.telephony.IccCardConstants.State; 27f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerimport com.android.internal.widget.LockPatternUtils; 28f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 29f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Millerpublic class CarrierText extends TextView { 30e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller private static CharSequence mSeparator; 31e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller 32f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private LockPatternUtils mLockPatternUtils; 33f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 34f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { 35f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence mPlmn; 36f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence mSpn; 37f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private State mSimState; 38f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 39f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 40f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { 41f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mPlmn = plmn; 42f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mSpn = spn; 43f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller updateCarrierText(mSimState, mPlmn, mSpn); 44f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 45f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 46f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 47f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public void onSimStateChanged(IccCardConstants.State simState) { 48f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mSimState = simState; 49f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller updateCarrierText(mSimState, mPlmn, mSpn); 50f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 51f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller }; 52f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 53f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * The status of this lock screen. Primarily used for widgets on LockScreen. 54f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 55109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller private static enum StatusMode { 56f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller Normal, // Normal case (sim card present, it's not locked) 57f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller NetworkLocked, // SIM card is 'network locked'. 58f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimMissing, // SIM card is missing. 59f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimMissingLocked, // SIM card is missing, and device isn't provisioned; don't allow access 60f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimPukLocked, // SIM card is PUK locked because SIM entered wrong too many times 61f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller SimLocked, // SIM card is currently locked 62109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure 63109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller SimNotReady; // SIM is not ready yet. May never be on devices w/o a SIM. 64f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 65f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 66f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public CarrierText(Context context) { 67f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller this(context, null); 68f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 69f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 70f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller public CarrierText(Context context, AttributeSet attrs) { 71f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller super(context, attrs); 72f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mLockPatternUtils = new LockPatternUtils(mContext); 73f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 74f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 75f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller protected void updateCarrierText(State simState, CharSequence plmn, CharSequence spn) { 76109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller CharSequence text = getCarrierTextForSimState(simState, plmn, spn); 77109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller if (KeyguardViewManager.USE_UPPER_CASE) { 78109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller setText(text != null ? text.toString().toUpperCase() : null); 79109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } else { 80109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller setText(text); 81109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 82f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 83f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 84f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller @Override 85f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller protected void onFinishInflate() { 86f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller super.onFinishInflate(); 87e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller mSeparator = getResources().getString(R.string.kg_text_message_separator); 88f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller setSelected(true); // Allow marquee to work. 89f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 90f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 910928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 920928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onAttachedToWindow() { 930928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onAttachedToWindow(); 940928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mCallback); 950928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 960928e019ce1a0e343df948520f32ac638379d8eeJim Miller 970928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 980928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onDetachedFromWindow() { 990928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onDetachedFromWindow(); 1000928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mCallback); 1010928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 1020928e019ce1a0e343df948520f32ac638379d8eeJim Miller 103f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 104f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Top-level function for creating carrier text. Makes text based on simState, PLMN 105f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * and SPN as well as device capabilities, such as being emergency call capable. 106f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * 107f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param simState 108f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param plmn 109f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @param spn 110f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * @return 111f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 112f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence getCarrierTextForSimState(IccCardConstants.State simState, 113f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence plmn, CharSequence spn) { 114f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence carrierText = null; 115f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller StatusMode status = getStatusForIccState(simState); 116f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (status) { 117f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case Normal: 118f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = concatenate(plmn, spn); 119f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 120f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 121109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller case SimNotReady: 122109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller carrierText = null; // nothing to display yet. 123109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller break; 124109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 125f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NetworkLocked: 126f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 127f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller mContext.getText(R.string.lockscreen_network_locked_message), plmn); 128f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 129f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 130f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissing: 131f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Shows "No SIM card | Emergency calls only" on devices that are voice-capable. 132f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // This depends on mPlmn containing the text "Emergency calls only" when the radio 133f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // has some connectivity. Otherwise, it should be null or empty and just show 134f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // "No SIM card" 135f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 136f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller getContext().getText(R.string.lockscreen_missing_sim_message_short), 137f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 138f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 139f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 140f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPermDisabled: 141f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = getContext().getText( 142f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller R.string.lockscreen_permanent_disabled_sim_message_short); 143f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 144f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 145f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissingLocked: 146f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 147f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller getContext().getText(R.string.lockscreen_missing_sim_message_short), 148f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 149f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 150f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 151f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimLocked: 152f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 153f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller getContext().getText(R.string.lockscreen_sim_locked_message), 154f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 155f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 156f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 157f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPukLocked: 158f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierText = makeCarrierStringOnEmergencyCapable( 159f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller getContext().getText(R.string.lockscreen_sim_puk_locked_message), 160f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller plmn); 161f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 162f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 163f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 164f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return carrierText; 165f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 166f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 167f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /* 168f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Add emergencyCallMessage to carrier string only if phone supports emergency calls. 169f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 170f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence makeCarrierStringOnEmergencyCapable( 171f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller CharSequence simMessage, CharSequence emergencyCallMessage) { 172f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (mLockPatternUtils.isEmergencyCallCapable()) { 173f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return concatenate(simMessage, emergencyCallMessage); 174f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 175f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return simMessage; 176f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 177f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 178f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller /** 179f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller * Determine the current status of the lock screen given the SIM state and other stuff. 180f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller */ 181f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private StatusMode getStatusForIccState(IccCardConstants.State simState) { 182f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Since reading the SIM may take a while, we assume it is present until told otherwise. 183f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (simState == null) { 184f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.Normal; 185f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 186f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 187f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean missingAndNotProvisioned = 188f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller !KeyguardUpdateMonitor.getInstance(mContext).isDeviceProvisioned() 189f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller && (simState == IccCardConstants.State.ABSENT || 190f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller simState == IccCardConstants.State.PERM_DISABLED); 191f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 192f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller // Assume we're NETWORK_LOCKED if not provisioned 193f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller simState = missingAndNotProvisioned ? IccCardConstants.State.NETWORK_LOCKED : simState; 194f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (simState) { 195f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case ABSENT: 196f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 197f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NETWORK_LOCKED: 198f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissingLocked; 199f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NOT_READY: 200109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller return StatusMode.SimNotReady; 201f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PIN_REQUIRED: 202f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimLocked; 203f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PUK_REQUIRED: 204f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimPukLocked; 205f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case READY: 206f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.Normal; 207f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case PERM_DISABLED: 208f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimPermDisabled; 209f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case UNKNOWN: 210f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 211f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 212f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return StatusMode.SimMissing; 213f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 214f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 215f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private static CharSequence concatenate(CharSequence plmn, CharSequence spn) { 216f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean plmnValid = !TextUtils.isEmpty(plmn); 217f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller final boolean spnValid = !TextUtils.isEmpty(spn); 218f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller if (plmnValid && spnValid) { 219e9be14077161b9c5dcaa521e9ce4d3e017c11ac6Jim Miller return new StringBuilder().append(plmn).append(mSeparator).append(spn).toString(); 220f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else if (plmnValid) { 221f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return plmn; 222f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else if (spnValid) { 223f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return spn; 224f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } else { 225f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return ""; 226f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 227f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 228f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 229f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller private CharSequence getCarrierHelpTextForSimState(IccCardConstants.State simState, 230f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller String plmn, String spn) { 231f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller int carrierHelpTextId = 0; 232f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller StatusMode status = getStatusForIccState(simState); 233f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller switch (status) { 234f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case NetworkLocked: 235f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierHelpTextId = R.string.lockscreen_instructions_when_pattern_disabled; 236f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 237f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 238f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissing: 239f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierHelpTextId = R.string.lockscreen_missing_sim_instructions_long; 240f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 241f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 242f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPermDisabled: 243f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions; 244f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 245f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 246f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimMissingLocked: 247f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller carrierHelpTextId = R.string.lockscreen_missing_sim_instructions; 248f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 249f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 250f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case Normal: 251f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimLocked: 252f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller case SimPukLocked: 253f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller break; 254f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 255f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller 256f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller return mContext.getText(carrierHelpTextId); 257f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller } 258f9cb7ba158c7016d55f121e200f96046ddbc5b70Jim Miller} 259