Merge "Add label and tone for WIFI_LOST disconnect cause." into rvc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dbd7067..006feed 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -90,6 +90,7 @@
<protected-broadcast android:name= "android.telephony.action.SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED" />
<protected-broadcast android:name= "android.telephony.action.NETWORK_COUNTRY_CHANGED" />
<protected-broadcast android:name= "android.telephony.action.PRIMARY_SUBSCRIPTION_LIST_CHANGED" />
+ <protected-broadcast android:name= "android.telephony.action.MULTI_SIM_CONFIG_CHANGED" />
<!-- For Vendor Debugging in Telephony -->
<protected-broadcast android:name="android.telephony.action.ANOMALY_REPORTED" />
diff --git a/res/layout/sim_ndp.xml b/res/layout/sim_ndp.xml
index 5e3c472..5f03d7b 100644
--- a/res/layout/sim_ndp.xml
+++ b/res/layout/sim_ndp.xml
@@ -29,6 +29,7 @@
android:layout_centerInParent="true">
<TextView
+ android:id="@+id/perso_subtype_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 2730bad..e6e04d7 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -49,7 +49,7 @@
<string name="add_vm_number_str" msgid="7368168964435881637">"番号を追加"</string>
<string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"ボイスメール設定を変更できるのはメインユーザーのみに限られています。"</string>
<string name="puk_unlocked" msgid="4627340655215746511">"SIMカードロックを解除しました。デバイスのロックを解除しています..."</string>
- <string name="label_ndp" msgid="7617392683877410341">"SIMネットワークのロック解除PIN"</string>
+ <string name="label_ndp" msgid="7617392683877410341">"SIM のネットワーク ロック解除 PIN"</string>
<string name="sim_ndp_unlock_text" msgid="7737338355451978338">"ロック解除"</string>
<string name="sim_ndp_dismiss_text" msgid="89667342248929777">"無効"</string>
<string name="requesting_unlock" msgid="930512210309437741">"ネットワークのロック解除をリクエスト中..."</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index fb600d9..661867a 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -520,7 +520,7 @@
<string name="notification_voicemail_title_count" msgid="2806950319222327082">"Жаңы үн почтасы (<xliff:g id="COUNT">%d</xliff:g>)"</string>
<string name="notification_voicemail_text_format" msgid="5720947141702312537">"<xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g> номерин терүү"</string>
<string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"Үн почтасынын номери белгисиз"</string>
- <string name="notification_network_selection_title" msgid="255595526707809121">"Байланыш жок"</string>
+ <string name="notification_network_selection_title" msgid="255595526707809121">"Интернет жок"</string>
<string name="notification_network_selection_text" msgid="553288408722427659">"Тандалган тармак <xliff:g id="OPERATOR_NAME">%s</xliff:g> жеткиликсиз"</string>
<string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Мобилдик тармакты күйгүзүңүз, чалуу үчүн \"Учакта\" режимин же \"Батареяны үнөмдөө\" режимин өчүрүңүз."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Чалуу үчүн учак режимин өчүрүңүз."</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 572beec..6629893 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -308,9 +308,7 @@
<string name="throttle_rate" msgid="7641913901133634905">"Retningslinjer for datahastighet"</string>
<string name="throttle_help" msgid="2624535757028809735">"Les mer"</string>
<string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g> %%) av maksimum <xliff:g id="USED_2">%3$s</xliff:g> for perioden\nNeste periode starter om <xliff:g id="USED_3">%4$d</xliff:g> dager (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for throttle_data_usage_subtext (3185429653996709840) -->
- <skip />
+ <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g> ٪) av maksimum <xliff:g id="USED_2">%3$s</xliff:g> for perioden"</string>
<string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> har overskredet maksimumsgrensen\nDatahastigheten er redusert til <xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
<string name="throttle_time_frame_subtext" msgid="6462089615392402127">"<xliff:g id="USED_0">%1$d</xliff:g> ٪ av syklusen er fullført\nNeste periode starter om <xliff:g id="USED_1">%2$d</xliff:g> dager (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
<string name="throttle_rate_subtext" msgid="7221971817325779535">"Datahastigheten reduseres til <xliff:g id="USED">%1$d</xliff:g> Kb/s hvis databruken overskrider grenseverdien"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ce9968d..0421272 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -310,9 +310,7 @@
<string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) из <xliff:g id="USED_2">%3$s</xliff:g> (максимум)\nСледующий период начнется в течение <xliff:g id="USED_3">%4$d</xliff:g> дн. (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
<string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) из <xliff:g id="USED_2">%3$s</xliff:g> (максимум)"</string>
<string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"Превышен лимит в <xliff:g id="USED_0">%1$s</xliff:g>.\nСкорость передачи данных снижена до <xliff:g id="USED_1">%2$d</xliff:g> кбит/с."</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for throttle_time_frame_subtext (6462089615392402127) -->
- <skip />
+ <string name="throttle_time_frame_subtext" msgid="6462089615392402127">"Пройдено: <xliff:g id="USED_0">%1$d</xliff:g>٪ цикла.\nСледующий период начнется через <xliff:g id="USED_1">%2$d</xliff:g> дн. (<xliff:g id="USED_2">%3$s</xliff:g>)."</string>
<string name="throttle_rate_subtext" msgid="7221971817325779535">"Превышение лимита снижает скорость передачи данных до <xliff:g id="USED">%1$d</xliff:g> кбит/с"</string>
<string name="throttle_help_subtext" msgid="2817114897095534807">"Подробнее о политике передачи данных вашего оператора мобильной связи..."</string>
<string name="cell_broadcast_sms" msgid="4053449797289031063">"Широковещательные SMS-службы"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 8c3267a..0c30a13 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -308,9 +308,7 @@
<string name="throttle_rate" msgid="7641913901133634905">"Datahastighetspolicy"</string>
<string name="throttle_help" msgid="2624535757028809735">"Läs mer"</string>
<string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) av högst <xliff:g id="USED_2">%3$s</xliff:g> för perioden\nNästa period börjar om <xliff:g id="USED_3">%4$d</xliff:g> dagar (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for throttle_data_usage_subtext (3185429653996709840) -->
- <skip />
+ <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g> ٪) av högst <xliff:g id="USED_2">%3$s</xliff:g> för perioden"</string>
<string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> maxvärdet har överskridits\nDatahastigheten har sänkts till <xliff:g id="USED_1">%2$d</xliff:g> kbit/s"</string>
<string name="throttle_time_frame_subtext" msgid="6462089615392402127">"<xliff:g id="USED_0">%1$d</xliff:g> ٪ av cykeln har gått\nNästa period börjar om <xliff:g id="USED_1">%2$d</xliff:g> dagar (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
<string name="throttle_rate_subtext" msgid="7221971817325779535">"Datahastigheten sänks till <xliff:g id="USED">%1$d</xliff:g> kbit/s om dataanvändningsgränsen överskrids"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index b1b544b..7cc5746 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -307,7 +307,7 @@
<string name="throttle_time_frame" msgid="1813452485948918791">"ช่วงเวลาการใช้ข้อมูล"</string>
<string name="throttle_rate" msgid="7641913901133634905">"นโยบายอัตราการส่งข้อมูล"</string>
<string name="throttle_help" msgid="2624535757028809735">"ดูข้อมูลเพิ่มเติม"</string>
- <string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) จากช่วงสูงสุด <xliff:g id="USED_2">%3$s</xliff:g> \nช่วงถัดไปจะเริ่มในอีก <xliff:g id="USED_3">%4$d</xliff:g> วัน (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
+ <string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) จากช่วงสูงสุด <xliff:g id="USED_2">%3$s</xliff:g>\nช่วงถัดไปจะเริ่มในอีก <xliff:g id="USED_3">%4$d</xliff:g> วัน (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
<string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) จากช่วงสูงสุด <xliff:g id="USED_2">%3$s</xliff:g>"</string>
<string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g>เกินจำนวนสูงสุด\nอัตราการส่งข้อมูลถูกลดเหลือ<xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
<string name="throttle_time_frame_subtext" msgid="6462089615392402127">"<xliff:g id="USED_0">%1$d</xliff:g>٪ ของรอบผ่านไป \n ช่วงถัดไปจะเริ่มในอีก <xliff:g id="USED_1">%2$d</xliff:g> วัน (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
diff --git a/src/com/android/phone/IccNetworkDepersonalizationPanel.java b/src/com/android/phone/IccNetworkDepersonalizationPanel.java
index 8bd10a2..7d854cd 100644
--- a/src/com/android/phone/IccNetworkDepersonalizationPanel.java
+++ b/src/com/android/phone/IccNetworkDepersonalizationPanel.java
@@ -22,7 +22,10 @@
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.telephony.CarrierConfigManager;
+import android.telephony.TelephonyManager;
import android.text.Editable;
import android.text.Spannable;
import android.text.TextUtils;
@@ -37,6 +40,8 @@
import android.widget.TextView;
import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.uicc.IccCardApplicationStatus;
+import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
/**
* "SIM network unlock" PIN entry screen.
@@ -52,7 +57,8 @@
* Tracks whether there is an instance of the network depersonalization dialog showing or not.
* Ensures only a single instance of the dialog is visible.
*/
- private static boolean sShowingDialog = false;
+ private static boolean [] sShowingDialog =
+ new boolean[TelephonyManager.getDefault().getSimCount()];
//debug constants
private static final boolean DBG = false;
@@ -61,29 +67,48 @@
private static final int EVENT_ICC_NTWRK_DEPERSONALIZATION_RESULT = 100;
private Phone mPhone;
+ private int mPersoSubtype;
+ private static IccNetworkDepersonalizationPanel [] sNdpPanel =
+ new IccNetworkDepersonalizationPanel[TelephonyManager.getDefault().getSimCount()];
//UI elements
private EditText mPinEntry;
private LinearLayout mEntryPanel;
private LinearLayout mStatusPanel;
+ private TextView mPersoSubtypeText;
+ private PersoSubState mPersoSubState;
private TextView mStatusText;
private Button mUnlockButton;
private Button mDismissButton;
+ enum statusType {
+ ENTRY,
+ IN_PROGRESS,
+ ERROR,
+ SUCCESS
+ }
+
/**
* Shows the network depersonalization dialog, but only if it is not already visible.
*/
- public static void showDialog(Phone phone) {
- if (sShowingDialog) {
+ public static void showDialog(Phone phone, int subType) {
+ int phoneId = phone == null ? 0: phone.getPhoneId();
+ if (sShowingDialog[phoneId]) {
Log.i(TAG, "[IccNetworkDepersonalizationPanel] - showDialog; skipped already shown.");
return;
}
Log.i(TAG, "[IccNetworkDepersonalizationPanel] - showDialog; showing dialog.");
- sShowingDialog = true;
- IccNetworkDepersonalizationPanel ndpPanel =
- new IccNetworkDepersonalizationPanel(PhoneGlobals.getInstance(), phone);
- ndpPanel.show();
+ sShowingDialog[phoneId] = true;
+ sNdpPanel[phoneId] = new IccNetworkDepersonalizationPanel(PhoneGlobals.getInstance(),
+ phone, subType);
+ sNdpPanel[phoneId].show();
+ }
+
+ public static void dialogDismiss(int phoneId) {
+ if (sNdpPanel[phoneId] != null && sShowingDialog[phoneId]) {
+ sNdpPanel[phoneId].dismiss();
+ }
}
//private textwatcher to control text entry.
@@ -109,37 +134,41 @@
AsyncResult res = (AsyncResult) msg.obj;
if (res.exception != null) {
if (DBG) log("network depersonalization request failure.");
- indicateError();
+ displayStatus(statusType.ERROR.name());
postDelayed(new Runnable() {
- public void run() {
- hideAlert();
- mPinEntry.getText().clear();
- mPinEntry.requestFocus();
- }
- }, 3000);
+ public void run() {
+ hideAlert();
+ mPinEntry.getText().clear();
+ mPinEntry.requestFocus();
+ }
+ }, 3000);
} else {
if (DBG) log("network depersonalization success.");
- indicateSuccess();
+ displayStatus(statusType.SUCCESS.name());
postDelayed(new Runnable() {
- public void run() {
- dismiss();
- }
- }, 3000);
+ public void run() {
+ dismiss();
+ }
+ }, 3000);
}
}
}
};
+
//constructor
public IccNetworkDepersonalizationPanel(Context context) {
super(context);
mPhone = PhoneGlobals.getPhone();
+ mPersoSubtype = PersoSubState.PERSOSUBSTATE_SIM_NETWORK.ordinal();
}
//constructor
- public IccNetworkDepersonalizationPanel(Context context, Phone phone) {
+ public IccNetworkDepersonalizationPanel(Context context, Phone phone,
+ int subtype) {
super(context);
mPhone = phone == null ? PhoneGlobals.getPhone() : phone;
+ mPersoSubtype = subtype;
}
@Override
@@ -158,6 +187,8 @@
span.setSpan(mPinEntryWatcher, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mEntryPanel = (LinearLayout) findViewById(R.id.entry_panel);
+ mPersoSubtypeText = (TextView) findViewById(R.id.perso_subtype_text);
+ displayStatus(statusType.ENTRY.name());
mUnlockButton = (Button) findViewById(R.id.ndp_unlock);
mUnlockButton.setOnClickListener(mUnlockListener);
@@ -190,7 +221,8 @@
public void onStop() {
super.onStop();
Log.i(TAG, "[IccNetworkDepersonalizationPanel] - showDialog; hiding dialog.");
- sShowingDialog = false;
+ int phoneId = mPhone == null ? 0 : mPhone.getPhoneId();
+ sShowingDialog[phoneId] = false;
}
//Mirrors IccPinUnlockPanel.onKeyDown().
@@ -210,29 +242,45 @@
return;
}
- if (DBG) log("requesting network depersonalization with code " + pin);
- mPhone.getIccCard().supplyNetworkDepersonalization(pin,
- Message.obtain(mHandler, EVENT_ICC_NTWRK_DEPERSONALIZATION_RESULT));
- indicateBusy();
+ log("Requesting De-Personalization for subtype " + mPersoSubtype);
+
+ try {
+ mPhone.getIccCard().supplySimDepersonalization(mPersoSubState,pin,
+ Message.obtain(mHandler, EVENT_ICC_NTWRK_DEPERSONALIZATION_RESULT));
+ } catch (NullPointerException ex) {
+ log("NullPointerException @supplySimDepersonalization" + ex);
+ }
+ displayStatus(statusType.IN_PROGRESS.name());
}
};
- private void indicateBusy() {
- mStatusText.setText(R.string.requesting_unlock);
- mEntryPanel.setVisibility(View.GONE);
- mStatusPanel.setVisibility(View.VISIBLE);
- }
+ private void displayStatus(String type) {
+ int label = 0;
- private void indicateError() {
- mStatusText.setText(R.string.unlock_failed);
- mEntryPanel.setVisibility(View.GONE);
- mStatusPanel.setVisibility(View.VISIBLE);
- }
+ mPersoSubState = PersoSubState.values()[mPersoSubtype];
+ log("displayStatus mPersoSubState: " +mPersoSubState.name() +"type: " +type);
- private void indicateSuccess() {
- mStatusText.setText(R.string.unlock_success);
- mEntryPanel.setVisibility(View.GONE);
- mStatusPanel.setVisibility(View.VISIBLE);
+ label = getContext().getResources().getIdentifier(mPersoSubState.name()
+ + "_" + type, "string", "android");
+
+ if (label == 0) {
+ log ("Unable to get the PersoSubType string");
+ return;
+ }
+
+ if(!PersoSubState.isPersoLocked(mPersoSubState)) {
+ log ("Unsupported Perso Subtype :" + mPersoSubState.name());
+ return;
+ }
+
+ if (type == statusType.ENTRY.name()) {
+ String displayText = getContext().getString(label);
+ mPersoSubtypeText.setText(displayText);
+ } else {
+ mStatusText.setText(label);
+ mEntryPanel.setVisibility(View.GONE);
+ mStatusPanel.setVisibility(View.VISIBLE);
+ }
}
private void hideAlert() {
@@ -241,13 +289,13 @@
}
View.OnClickListener mDismissListener = new View.OnClickListener() {
- public void onClick(View v) {
- if (DBG) log("mDismissListener: skipping depersonalization...");
- dismiss();
- }
- };
+ public void onClick(View v) {
+ if (DBG) log("mDismissListener: skipping depersonalization...");
+ dismiss();
+ }
+ };
private void log(String msg) {
- Log.v(TAG, "[IccNetworkDepersonalizationPanel] " + msg);
+ Log.d(TAG, "[IccNetworkDepersonalizationPanel] " + msg);
}
}
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 810ccdf..5e3c224 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -205,6 +205,16 @@
private final SettingsObserver mSettingsObserver;
+ private static class EventSimStateChangedBag {
+ final int mPhoneId;
+ final String mIccStatus;
+
+ EventSimStateChangedBag(int phoneId, String iccStatus) {
+ mPhoneId = phoneId;
+ mIccStatus = iccStatus;
+ }
+ }
+
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -225,7 +235,8 @@
// they enter a valid SIM network PIN.
Log.i(LOG_TAG, "show sim depersonal panel");
Phone phone = (Phone) ((AsyncResult) msg.obj).userObj;
- IccNetworkDepersonalizationPanel.showDialog(phone);
+ int subType = (Integer)((AsyncResult)msg.obj).result;
+ IccNetworkDepersonalizationPanel.showDialog(phone, subType);
}
break;
@@ -253,8 +264,9 @@
// Marks the event where the SIM goes into ready state.
// Right now, this is only used for the PUK-unlocking
// process.
- if (msg.obj.equals(IccCardConstants.INTENT_VALUE_ICC_READY)
- || msg.obj.equals(IccCardConstants.INTENT_VALUE_ICC_LOADED)) {
+ EventSimStateChangedBag bag = (EventSimStateChangedBag)msg.obj;
+ if (bag.mIccStatus == IccCardConstants.INTENT_VALUE_ICC_READY
+ || bag.mIccStatus == IccCardConstants.INTENT_VALUE_ICC_LOADED) {
// when the right event is triggered and there
// are UI objects in the foreground, we close
// them to display the lock panel.
@@ -266,6 +278,8 @@
mPUKEntryProgressDialog.dismiss();
mPUKEntryProgressDialog = null;
}
+ Log.i(LOG_TAG, "Dismissing depersonal panel");
+ IccNetworkDepersonalizationPanel.dialogDismiss(bag.mPhoneId);
}
break;
@@ -650,14 +664,9 @@
PhoneUtils.unregisterIccStatus(mHandler, phoneId);
PhoneUtils.registerIccStatus(mHandler, EVENT_SIM_NETWORK_LOCKED, phoneId);
}
- if (mPUKEntryActivity != null) {
- // if an attempt to un-PUK-lock the device was made, while we're
- // receiving this state change notification, notify the handler.
- // NOTE: This is ONLY triggered if an attempt to un-PUK-lock has
- // been attempted.
- mHandler.sendMessage(mHandler.obtainMessage(EVENT_SIM_STATE_CHANGED,
- intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE)));
- }
+ String iccStatus = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
+ mHandler.sendMessage(mHandler.obtainMessage(EVENT_SIM_STATE_CHANGED,
+ new EventSimStateChangedBag(phoneId, iccStatus)));
} else if (action.equals(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED)) {
String newPhone = intent.getStringExtra(PhoneConstants.PHONE_NAME_KEY);
Log.d(LOG_TAG, "Radio technology switched. Now " + newPhone + " is active.");
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 3e36644..95cb785 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -87,7 +87,6 @@
private static final int THEME = com.android.internal.R.style.Theme_DeviceDefault_Dialog_Alert;
/** USSD information used to aggregate all USSD messages */
- private static AlertDialog sUssdDialog = null;
private static StringBuilder sUssdMsg = new StringBuilder();
private static final ComponentName PSTN_CONNECTION_SERVICE_COMPONENT =
@@ -524,39 +523,36 @@
// displaying system alert dialog on the screen instead of
// using another activity to display the message. This
// places the message at the forefront of the UI.
+ AlertDialog ussdDialog = new AlertDialog.Builder(context, THEME)
+ .setPositiveButton(R.string.ok, null)
+ .setCancelable(true)
+ .setOnDismissListener(new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ sUssdMsg.setLength(0);
+ }
+ })
+ .create();
- if (sUssdDialog == null) {
- sUssdDialog = new AlertDialog.Builder(context, THEME)
- .setPositiveButton(R.string.ok, null)
- .setCancelable(true)
- .setOnDismissListener(new DialogInterface.OnDismissListener() {
- @Override
- public void onDismiss(DialogInterface dialog) {
- sUssdMsg.setLength(0);
- }
- })
- .create();
+ ussdDialog.getWindow().setType(windowType);
+ ussdDialog.getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_DIM_BEHIND);
- sUssdDialog.getWindow().setType(windowType);
- sUssdDialog.getWindow().addFlags(
- WindowManager.LayoutParams.FLAG_DIM_BEHIND);
- }
if (sUssdMsg.length() != 0) {
- sUssdMsg
- .insert(0, "\n")
+ sUssdMsg.insert(0, "\n")
.insert(0, app.getResources().getString(R.string.ussd_dialog_sep))
.insert(0, "\n");
}
if (phone != null && phone.getCarrierName() != null) {
- sUssdDialog.setTitle(app.getResources().getString(R.string.carrier_mmi_msg_title,
+ ussdDialog.setTitle(app.getResources().getString(R.string.carrier_mmi_msg_title,
phone.getCarrierName()));
} else {
- sUssdDialog
+ ussdDialog
.setTitle(app.getResources().getString(R.string.default_carrier_mmi_msg_title));
}
sUssdMsg.insert(0, text);
- sUssdDialog.setMessage(sUssdMsg.toString());
- sUssdDialog.show();
+ ussdDialog.setMessage(sUssdMsg.toString());
+ ussdDialog.show();
}
/**
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index bd015e3..36618c5 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -288,9 +288,8 @@
private boolean isEmergency() {
Phone phone = getPhone();
- return phone != null &&
- PhoneNumberUtils.isLocalEmergencyNumber(
- phone.getContext(), getAddress().getSchemeSpecificPart());
+ return phone != null && getAddress() != null && PhoneNumberUtils.isLocalEmergencyNumber(
+ phone.getContext(), getAddress().getSchemeSpecificPart());
}
/**
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index c13b3b1..f243462 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.media.ToneGenerator;
import android.os.PersistableBundle;
+import android.provider.Settings;
import android.telecom.DisconnectCause;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -363,7 +364,12 @@
resourceId = R.string.callFailed_too_many_calls;
break;
case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL:
- resourceId = R.string.incall_error_power_off;
+ int airplaneMode = Settings.Global.getInt(context.getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_ON, 0);
+ resourceId = R.string.incall_error_call_failed;
+ if (airplaneMode != 0) {
+ resourceId = R.string.incall_error_power_off;
+ }
break;
case android.telephony.DisconnectCause.OTASP_PROVISIONING_IN_PROCESS:
resourceId = R.string.callFailed_otasp_provisioning_in_process;
@@ -756,7 +762,12 @@
resourceId = R.string.callFailed_too_many_calls;
break;
case android.telephony.DisconnectCause.IMS_SIP_ALTERNATE_EMERGENCY_CALL:
- resourceId = R.string.incall_error_power_off;
+ int airplaneMode = Settings.Global.getInt(context.getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_ON, 0);
+ resourceId = R.string.incall_error_call_failed;
+ if (airplaneMode != 0) {
+ resourceId = R.string.incall_error_power_off;
+ }
break;
case android.telephony.DisconnectCause.OTASP_PROVISIONING_IN_PROCESS:
resourceId = R.string.callFailed_otasp_provisioning_in_process;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 0b60e37..16e10cf 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -1639,7 +1639,10 @@
private void placeOutgoingConnection(
TelephonyConnection connection, Phone phone, int videoState, Bundle extras) {
- String number = connection.getAddress().getSchemeSpecificPart();
+
+ String number = (connection.getAddress() != null)
+ ? connection.getAddress().getSchemeSpecificPart()
+ : "";
com.android.internal.telephony.Connection originalConnection = null;
try {