Merge "Null check action of intents in StkCmdReceiver and BootCompletedReceiver"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
old mode 100644
new mode 100755
index 668a99e..1beb3ae
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -22,6 +22,8 @@
 
     <original-package android:name="com.android.stk" />
 
+    <protected-broadcast android:name="com.android.stk.DIALOG_ALARM_TIMEOUT" />
+
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.GET_TASKS"/>
     <uses-permission android:name="android.permission.RECEIVE_STK_COMMANDS" />
@@ -30,12 +32,15 @@
         android:label="@string/app_name"
         android:clearTaskOnLaunch="true"
         android:process="com.android.phone"
-        android:taskAffinity="android.task.stk">
+        android:taskAffinity="android.task.stk"
+        android:defaultToDeviceProtectedStorage="true"
+        android:directBootAware="true">
 
         <activity android:name="StkMain"
             android:theme="@android:style/Theme.NoDisplay"
             android:label="@string/app_name"
             android:enabled="false"
+            android:exported="true"
             android:taskAffinity="android.task.stk.StkLauncherActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -46,6 +51,7 @@
         <activity android:name="StkLauncherActivity"
             android:theme="@android:style/Theme.NoTitleBar"
             android:label="@string/app_name"
+            android:exported="false"
             android:taskAffinity="android.task.stk.StkLauncherActivity">
             <intent-filter>
                  <action android:name="android.intent.action.VIEW" />
@@ -59,6 +65,7 @@
             android:icon="@drawable/ic_launcher_sim_toolkit"
             android:label="@string/app_name"
             android:configChanges="orientation|locale|screenSize|keyboardHidden|mnc|mcc"
+            android:exported="false"
             android:taskAffinity="android.task.stk.StkLauncherActivity">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
@@ -72,6 +79,7 @@
             android:icon="@drawable/ic_launcher_sim_toolkit"
             android:theme="@android:style/Theme.Holo"
             android:configChanges="orientation|locale|screenSize|keyboardHidden"
+            android:exported="false"
             android:taskAffinity="android.task.stk.StkLauncherActivity">
                 <intent-filter>
                         <action android:name="android.intent.action.VIEW" />
@@ -81,23 +89,15 @@
         </activity>
         <activity android:name="StkDialogActivity"
             android:configChanges="orientation|locale|screenSize|keyboardHidden"
-            android:theme="@android:style/Theme.Dialog"
+            android:theme="@android:style/Theme.DeviceDefault.Dialog"
+            android:exported="false"
             android:taskAffinity="android.task.stk.StkLauncherActivity">
         </activity>
 
         <activity android:name="ToneDialog"
-            android:theme="@android:style/Theme.Dialog">
-        </activity>
-
-        <!-- SIM Toolkit settings activity -->
-        <activity android:name="StkSettings"
-            android:label="@string/app_name">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <action android:name="android.intent.action.MAIN" />
-                <category
-                    android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
-            </intent-filter>
+            android:exported="false"
+            android:theme="@android:style/Theme.DeviceDefault.Dialog"
+            android:taskAffinity="android.task.stk.StkLauncherActivity">
         </activity>
 
         <receiver android:name="com.android.stk.StkCmdReceiver">
diff --git a/res/drawable-hdpi/ic_launcher_sim_toolkit.png b/res/drawable-hdpi/ic_launcher_sim_toolkit.png
index ce4ac43..51d6688 100644
--- a/res/drawable-hdpi/ic_launcher_sim_toolkit.png
+++ b/res/drawable-hdpi/ic_launcher_sim_toolkit.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_sim_toolkit.png b/res/drawable-mdpi/ic_launcher_sim_toolkit.png
index 0dfec74..913ab12 100755
--- a/res/drawable-mdpi/ic_launcher_sim_toolkit.png
+++ b/res/drawable-mdpi/ic_launcher_sim_toolkit.png
Binary files differ
diff --git a/res/layout/stk_msg_dialog.xml b/res/layout/stk_msg_dialog.xml
old mode 100644
new mode 100755
index 1838337..731d74c
--- a/res/layout/stk_msg_dialog.xml
+++ b/res/layout/stk_msg_dialog.xml
@@ -46,15 +46,14 @@
         android:layout_height="wrap_content"
         android:minHeight="54dip"
         android:orientation="vertical" >
-        <LinearLayout
+        <LinearLayout style="?android:attr/buttonBarStyle"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:background="@color/ltgrey"
             android:paddingTop="4dip"
             android:paddingLeft="2dip"
             android:paddingRight="2dip" >
-            <Button
+            <Button style="?android:attr/buttonBarButtonStyle"
                 android:id="@+id/button_cancel"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -62,7 +61,7 @@
                 android:layout_weight="1"
                 android:maxLines="2"
                 android:text="@string/button_cancel" />
-            <Button
+            <Button style="?android:attr/buttonBarButtonStyle"
                 android:id="@+id/button_ok"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 7796b37..a691961 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -29,6 +29,7 @@
     <string name="alphabet" msgid="1583185545938805861">"Əlifbalar"</string>
     <string name="digits" msgid="1746796679021682388">"Rəqəmlər (0-9, *, #, +)"</string>
     <string name="default_call_setup_msg" msgid="7960194995759849940">"Zəng davam edir..."</string>
+    <string name="default_setup_call_msg" msgid="6126904475461162162">"Zəng quraşdırılır"</string>
     <string name="stk_app_state" msgid="18582277302584082">"Tətbiq vəziyyəti"</string>
     <string name="enable_app" msgid="3701224550936728203">"Aktivləşdirilib"</string>
     <string name="disable_app" msgid="6725081975611415214">"Deaktiv"</string>
@@ -39,4 +40,5 @@
     <string name="default_close_channel_msg" msgid="765364262263839824">"Kanal Bağlıdır"</string>
     <string name="stk_dialog_accept" msgid="8498901537508923727">"BƏLİ"</string>
     <string name="stk_dialog_reject" msgid="921848059485746796">"XEYR"</string>
+    <string name="no_sim_card_inserted" msgid="5316620398365235988">"SİM Alət-panelini başlatmaq üçün SİM taxın."</string>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..00b8ba7
--- /dev/null
+++ b/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="8396461461738434341">"SIM paket alatki"</string>
+    <string name="menu_end_session" msgid="7368541737750982217">"Završi sesiju"</string>
+    <string name="help" msgid="9209980881219397319">"Pomoć"</string>
+    <string name="menu_back" msgid="301227740977453364">"Nazad"</string>
+    <string name="service_name" msgid="6860303747999592491">"Naziv usluge"</string>
+    <string name="stk_no_service" msgid="5427773116839809131">"Nijedna usluga nije dostupna"</string>
+    <string name="button_ok" msgid="5760722312558549555">"Potvrdi"</string>
+    <string name="button_cancel" msgid="1997847915560800261">"Otkaži"</string>
+    <string name="button_yes" msgid="624420260648337203">"Da"</string>
+    <string name="button_no" msgid="1824959157582605627">"Ne"</string>
+    <string name="alphabet" msgid="1583185545938805861">"Abeceda"</string>
+    <string name="digits" msgid="1746796679021682388">"Cifre (0-9, *, #, +)"</string>
+    <string name="default_call_setup_msg" msgid="7960194995759849940">"Pozivanje je u toku..."</string>
+    <string name="default_setup_call_msg" msgid="6126904475461162162">"Poziv se podešava"</string>
+    <string name="stk_app_state" msgid="18582277302584082">"Stanje aplikacije"</string>
+    <string name="enable_app" msgid="3701224550936728203">"Omogućeno"</string>
+    <string name="disable_app" msgid="6725081975611415214">"Onemogućeno"</string>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM paket alatki"</string>
+    <string name="default_open_channel_msg" msgid="2216070254100295924">"Želite li da otvorite kanal?"</string>
+    <string name="default_send_data_msg" msgid="6011219698689931272">"Slanje podataka"</string>
+    <string name="default_receive_data_msg" msgid="618096941772010682">"Primanje podataka"</string>
+    <string name="default_close_channel_msg" msgid="765364262263839824">"Kanal je zatvoren"</string>
+    <string name="stk_dialog_accept" msgid="8498901537508923727">"DA"</string>
+    <string name="stk_dialog_reject" msgid="921848059485746796">"NE"</string>
+    <string name="no_sim_card_inserted" msgid="5316620398365235988">"Umetnite SIM karticu da biste pokrenuli SIM alatke."</string>
+</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index da2dc40..e8a0939 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -40,5 +40,5 @@
     <string name="default_close_channel_msg" msgid="765364262263839824">"Kanal geschlossen"</string>
     <string name="stk_dialog_accept" msgid="8498901537508923727">"Ja"</string>
     <string name="stk_dialog_reject" msgid="921848059485746796">"Nein"</string>
-    <string name="no_sim_card_inserted" msgid="5316620398365235988">"Bitte legen Sie die SIM-Karte ein, um das SIM-Toolkit zu starten."</string>
+    <string name="no_sim_card_inserted" msgid="5316620398365235988">"Bitte lege die SIM-Karte ein, um das SIM-Toolkit zu starten."</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9eaa00e..723eab4 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="8396461461738434341">"کیت ابزار سیم کارت"</string>
+    <string name="app_name" msgid="8396461461738434341">"‏ابزار کار SIM"</string>
     <string name="menu_end_session" msgid="7368541737750982217">"پایان جلسه"</string>
     <string name="help" msgid="9209980881219397319">"راهنمایی"</string>
     <string name="menu_back" msgid="301227740977453364">"برگشت"</string>
@@ -29,16 +29,16 @@
     <string name="alphabet" msgid="1583185545938805861">"الفبا"</string>
     <string name="digits" msgid="1746796679021682388">"ارقام (0-9، *، #، +)"</string>
     <string name="default_call_setup_msg" msgid="7960194995759849940">"تماس در حال انجام..."</string>
-    <string name="default_setup_call_msg" msgid="6126904475461162162">"تماس در حال تنظیم"</string>
+    <string name="default_setup_call_msg" msgid="6126904475461162162">"تماس درحال راه‌اندازی"</string>
     <string name="stk_app_state" msgid="18582277302584082">"حالت برنامه"</string>
     <string name="enable_app" msgid="3701224550936728203">"فعال شد"</string>
     <string name="disable_app" msgid="6725081975611415214">"غیرفعال شد"</string>
-    <string name="stk_dialog_title" msgid="6954825385456886726">"کیت ابزار سیم کارت"</string>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"‏ابزار کار SIM"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"کانال باز شود؟"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"ارسال داده"</string>
     <string name="default_receive_data_msg" msgid="618096941772010682">"دریافت داده"</string>
     <string name="default_close_channel_msg" msgid="765364262263839824">"کانال بسته شد"</string>
     <string name="stk_dialog_accept" msgid="8498901537508923727">"بله"</string>
     <string name="stk_dialog_reject" msgid="921848059485746796">"نه"</string>
-    <string name="no_sim_card_inserted" msgid="5316620398365235988">"‏برای راه‌اندازی SIM Toolkit، لطفاً سیم‌کارت را وارد کنید."</string>
+    <string name="no_sim_card_inserted" msgid="5316620398365235988">"‏برای راه‌اندازی ابزار کار SIM، لطفاً سیم‌کارت را وارد کنید."</string>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index bb1750c..77052fe 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_back" msgid="301227740977453364">"પાછળ"</string>
     <string name="service_name" msgid="6860303747999592491">"સેવાનું નામ"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"કોઈ સેવા ઉપલબ્ધ નથી"</string>
-    <string name="button_ok" msgid="5760722312558549555">"ઑકે"</string>
+    <string name="button_ok" msgid="5760722312558549555">"ઓકે"</string>
     <string name="button_cancel" msgid="1997847915560800261">"રદ કરો"</string>
     <string name="button_yes" msgid="624420260648337203">"હા"</string>
     <string name="button_no" msgid="1824959157582605627">"નહીં"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 25f760b..795c6b9 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -23,7 +23,7 @@
     <string name="service_name" msgid="6860303747999592491">"ಸೇವೆಯ ಹೆಸರು"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"ಯಾವುದೇ ಸೇವೆ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="button_ok" msgid="5760722312558549555">"ಸರಿ"</string>
-    <string name="button_cancel" msgid="1997847915560800261">"ರದ್ದುಮಾಡು"</string>
+    <string name="button_cancel" msgid="1997847915560800261">"ರದ್ದುಮಾಡಿ"</string>
     <string name="button_yes" msgid="624420260648337203">"ಹೌದು"</string>
     <string name="button_no" msgid="1824959157582605627">"ಇಲ್ಲ"</string>
     <string name="alphabet" msgid="1583185545938805861">"ವರ್ಣಮಾಲೆಗಳು"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index fa58f0e..e2b7a86 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_back" msgid="301227740977453364">"Буцах"</string>
     <string name="service_name" msgid="6860303747999592491">"Үйлчилгээний нэр"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"Ашиглах боломжтой үйлчилгээ байхгүй"</string>
-    <string name="button_ok" msgid="5760722312558549555">"Тийм"</string>
+    <string name="button_ok" msgid="5760722312558549555">"OK"</string>
     <string name="button_cancel" msgid="1997847915560800261">"Цуцлах"</string>
     <string name="button_yes" msgid="624420260648337203">"Тийм"</string>
     <string name="button_no" msgid="1824959157582605627">"Үгүй"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index e66a882..8853d46 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -19,18 +19,18 @@
     <string name="app_name" msgid="8396461461738434341">"SIM တူးလ်ကစ်"</string>
     <string name="menu_end_session" msgid="7368541737750982217">"သတ်မှတ်ကဏ္ဏကို ပြီးဆုံးမည်"</string>
     <string name="help" msgid="9209980881219397319">"အကူအညီ"</string>
-    <string name="menu_back" msgid="301227740977453364">"နောက်ပြန်"</string>
+    <string name="menu_back" msgid="301227740977453364">"နောက်သို့"</string>
     <string name="service_name" msgid="6860303747999592491">"ဝန်ဆောင်မှုအမည်"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"ဆက်သွယ်ချိတ်ဆက်ရန် ဝန်ဆောင်မှု တစ်ခုမှမရှိပါ"</string>
-    <string name="button_ok" msgid="5760722312558549555">"ကောင်းပြီ"</string>
-    <string name="button_cancel" msgid="1997847915560800261">"ထားတော့"</string>
-    <string name="button_yes" msgid="624420260648337203">"မှန်ပါသည်"</string>
-    <string name="button_no" msgid="1824959157582605627">"မဟုတ်ပါ"</string>
+    <string name="button_ok" msgid="5760722312558549555">"အိုကေ"</string>
+    <string name="button_cancel" msgid="1997847915560800261">"မလုပ်တော့"</string>
+    <string name="button_yes" msgid="624420260648337203">"Yes"</string>
+    <string name="button_no" msgid="1824959157582605627">"No"</string>
     <string name="alphabet" msgid="1583185545938805861">"အက္ခရာများ"</string>
     <string name="digits" msgid="1746796679021682388">"ဂဏန်းများ (0-9, *, #, +)"</string>
     <string name="default_call_setup_msg" msgid="7960194995759849940">"ခေါ်ဆိုနေပါသည်"</string>
     <string name="default_setup_call_msg" msgid="6126904475461162162">"ခေါ်ဆိုရန် သတ်မှတ်ပြင်ဆင်ပြီး"</string>
-    <string name="stk_app_state" msgid="18582277302584082">"အပ်ပလီကေးရှင်းအနေအထား"</string>
+    <string name="stk_app_state" msgid="18582277302584082">"အပလီကေးရှင်းအနေအထား"</string>
     <string name="enable_app" msgid="3701224550936728203">"ဖွင့်ထားသည်"</string>
     <string name="disable_app" msgid="6725081975611415214">"သုံးမရအောင် ပိတ်ထားခြင်း"</string>
     <string name="stk_dialog_title" msgid="6954825385456886726">"SIM တူးလ်ကစ်"</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 240e175..14e2c14 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="8396461461738434341">"SIM Toolkit"</string>
     <string name="menu_end_session" msgid="7368541737750982217">"ਸੈਸ਼ਨ ਖ਼ਤਮ ਕਰੋ"</string>
-    <string name="help" msgid="9209980881219397319">"ਸਹਾਇਤਾ"</string>
+    <string name="help" msgid="9209980881219397319">"ਮਦਦ"</string>
     <string name="menu_back" msgid="301227740977453364">"ਪਿੱਛੇ"</string>
     <string name="service_name" msgid="6860303747999592491">"ਸੇਵਾ ਦਾ ਨਾਮ"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"ਕੋਈ ਸੇਵਾ ਉਪਲਬਧ ਨਹੀਂ"</string>
@@ -32,11 +32,11 @@
     <string name="default_setup_call_msg" msgid="6126904475461162162">"ਕਾਲ ਸੈਟਅਪ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
     <string name="stk_app_state" msgid="18582277302584082">"ਐਪਲੀਕੇਸ਼ਨ ਸਥਿਤੀ"</string>
     <string name="enable_app" msgid="3701224550936728203">"ਸਮਰੱਥ ਬਣਾਇਆ"</string>
-    <string name="disable_app" msgid="6725081975611415214">"ਅਸਮਰੱਥ ਬਣਾਇਆ"</string>
+    <string name="disable_app" msgid="6725081975611415214">"ਅਯੋਗ ਬਣਾਇਆ"</string>
     <string name="stk_dialog_title" msgid="6954825385456886726">"SIM ToolKit"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"ਕੀ ਚੈਨਲ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
-    <string name="default_send_data_msg" msgid="6011219698689931272">"ਡਾਟਾ ਭੇਜ ਰਿਹਾ ਹੈ"</string>
-    <string name="default_receive_data_msg" msgid="618096941772010682">"ਡਾਟਾ ਪ੍ਰਾਪਤ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="default_send_data_msg" msgid="6011219698689931272">"ਡੈਟਾ ਭੇਜ ਰਿਹਾ ਹੈ"</string>
+    <string name="default_receive_data_msg" msgid="618096941772010682">"ਡੈਟਾ ਪ੍ਰਾਪਤ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="default_close_channel_msg" msgid="765364262263839824">"ਚੈਨਲ ਬੰਦ ਕੀਤਾ"</string>
     <string name="stk_dialog_accept" msgid="8498901537508923727">"ਹਾਂ"</string>
     <string name="stk_dialog_reject" msgid="921848059485746796">"ਨਹੀਂ"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 1e56049..e8ef4bb 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="8396461461738434341">"SIM Toolkit"</string>
-    <string name="menu_end_session" msgid="7368541737750982217">"Sfârşitul sesiunii"</string>
+    <string name="menu_end_session" msgid="7368541737750982217">"Sfârșitul sesiunii"</string>
     <string name="help" msgid="9209980881219397319">"Ajutor"</string>
     <string name="menu_back" msgid="301227740977453364">"Înapoi"</string>
     <string name="service_name" msgid="6860303747999592491">"Nume serviciu"</string>
@@ -34,7 +34,7 @@
     <string name="enable_app" msgid="3701224550936728203">"Activat"</string>
     <string name="disable_app" msgid="6725081975611415214">"Dezactivat"</string>
     <string name="stk_dialog_title" msgid="6954825385456886726">"SIM Toolkit"</string>
-    <string name="default_open_channel_msg" msgid="2216070254100295924">"Deschideţi canalul?"</string>
+    <string name="default_open_channel_msg" msgid="2216070254100295924">"Deschideți canalul?"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"Se trimit date"</string>
     <string name="default_receive_data_msg" msgid="618096941772010682">"Se primesc date"</string>
     <string name="default_close_channel_msg" msgid="765364262263839824">"Canal închis"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 71846a2..c7f3843 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_back" msgid="301227740977453364">"Prapa"</string>
     <string name="service_name" msgid="6860303747999592491">"Emri i shërbimit"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"Nuk ofrohet asnjë shërbim"</string>
-    <string name="button_ok" msgid="5760722312558549555">"Në rregull!"</string>
+    <string name="button_ok" msgid="5760722312558549555">"Në rregull"</string>
     <string name="button_cancel" msgid="1997847915560800261">"Anulo"</string>
     <string name="button_yes" msgid="624420260648337203">"Po"</string>
     <string name="button_no" msgid="1824959157582605627">"Jo"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index e00596b..b1a0967 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="8396461461738434341">"SIM vositalar majmuasi"</string>
+    <string name="app_name" msgid="8396461461738434341">"SIM karta menyusi"</string>
     <string name="menu_end_session" msgid="7368541737750982217">"Sessiyani yakunlash"</string>
     <string name="help" msgid="9209980881219397319">"Yordam"</string>
     <string name="menu_back" msgid="301227740977453364">"Orqaga"</string>
@@ -33,12 +33,12 @@
     <string name="stk_app_state" msgid="18582277302584082">"Ilova holati"</string>
     <string name="enable_app" msgid="3701224550936728203">"Yoniq"</string>
     <string name="disable_app" msgid="6725081975611415214">"O‘chiq"</string>
-    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM vositalar majmuasi"</string>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM karta menyusi"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"Kanal ochilsinmi?"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"Ma’lumot yuborilmoqda"</string>
     <string name="default_receive_data_msg" msgid="618096941772010682">"Ma’lumot qabul qilinmoqda"</string>
     <string name="default_close_channel_msg" msgid="765364262263839824">"Kanal yopilgan"</string>
     <string name="stk_dialog_accept" msgid="8498901537508923727">"Ha"</string>
     <string name="stk_dialog_reject" msgid="921848059485746796">"Yo‘q"</string>
-    <string name="no_sim_card_inserted" msgid="5316620398365235988">"SIM-karta menyusini ochish uchun SIM-kartani soling."</string>
+    <string name="no_sim_card_inserted" msgid="5316620398365235988">"SIM karta menyusini ochish uchun SIM kartani soling."</string>
 </resources>
diff --git a/src/com/android/stk/BootCompletedReceiver.java b/src/com/android/stk/BootCompletedReceiver.java
index 5d5fe00..d162910 100644
--- a/src/com/android/stk/BootCompletedReceiver.java
+++ b/src/com/android/stk/BootCompletedReceiver.java
@@ -47,7 +47,8 @@
                     .putExtras(args));
             CatLog.d(LOG_TAG, "[ACTION_BOOT_COMPLETED]");
         } else if(action.equals(Intent.ACTION_USER_INITIALIZE)) {
-            if (!android.os.Process.myUserHandle().isOwner()) {
+            // TODO: http://b/25155491
+            if (!android.os.Process.myUserHandle().isSystem()) {
                 //Disable package for all secondary users. Package is only required for device
                 //owner.
                 context.getPackageManager().setApplicationEnabledSetting(context.getPackageName(),
diff --git a/src/com/android/stk/StkAppService.java b/src/com/android/stk/StkAppService.java
old mode 100644
new mode 100755
index 0b19f9e..9eec59e
--- a/src/com/android/stk/StkAppService.java
+++ b/src/com/android/stk/StkAppService.java
@@ -313,6 +313,7 @@
                 //If all StkServices are not available, stop itself and uninstall apk.
                 for (i = PhoneConstants.SIM_ID_1; i < mSimCount; i++) {
                     if (i != slotId
+                            && (mStkService[i] != null)
                             && (mStkContext[i].mStkServiceState == STATE_UNKNOWN
                             || mStkContext[i].mStkServiceState == STATE_EXIST)) {
                        break;
@@ -581,7 +582,9 @@
                 break;
             case OP_LOCALE_CHANGED:
                 CatLog.d(this, "Locale Changed");
-                checkForSetupEvent(LANGUAGE_SELECTION_EVENT,(Bundle) msg.obj, slotId);
+                for (int slot = PhoneConstants.SIM_ID_1; slot < mSimCount; slot++) {
+                    checkForSetupEvent(LANGUAGE_SELECTION_EVENT, (Bundle) msg.obj, slot);
+                }
                 break;
             case OP_ALPHA_NOTIFY:
                 handleAlphaNotify((Bundle) msg.obj);
@@ -689,9 +692,9 @@
     private void sendResponse(int resId, int slotId, boolean confirm) {
         Message msg = mServiceHandler.obtainMessage();
         msg.arg1 = OP_RESPONSE;
+        msg.arg2 = slotId;
         Bundle args = new Bundle();
         args.putInt(StkAppService.RES_ID, resId);
-        args.putInt(SLOT_ID, slotId);
         args.putBoolean(StkAppService.CONFIRMATION, confirm);
         msg.obj = args;
         mServiceHandler.sendMessage(msg);
@@ -795,14 +798,17 @@
 
     // returns true if any Stk related activity already has focus on the screen
     private boolean isTopOfStack() {
-        ActivityManager mAcivityManager = (ActivityManager) mContext
+        ActivityManager mActivityManager = (ActivityManager) mContext
                 .getSystemService(ACTIVITY_SERVICE);
-        String currentPackageName = mAcivityManager.getRunningTasks(1).get(0).topActivity
-                .getPackageName();
+        String currentPackageName = null;
+        List<RunningTaskInfo> tasks = mActivityManager.getRunningTasks(1);
+        if (tasks == null || tasks.get(0).topActivity == null) {
+            return false;
+        }
+        currentPackageName = tasks.get(0).topActivity.getPackageName();
         if (null != currentPackageName) {
             return currentPackageName.equals(PACKAGE_NAME);
         }
-
         return false;
     }
 
@@ -916,6 +922,13 @@
             launchEventMessage(slotId);
             break;
         case LAUNCH_BROWSER:
+            // The device setup process should not be interrupted by launching browser.
+            if (Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.DEVICE_PROVISIONED, 0) == 0) {
+                CatLog.d(this, "The command is not performed if the setup has not been completed.");
+                sendScreenBusyResponse(slotId);
+                break;
+            }
             TextMessage alphaId = mStkContext[slotId].mCurrentCmd.geTextMessage();
             if ((mStkContext[slotId].mCurrentCmd.getBrowserSettings().mode
                     == LaunchBrowserMode.LAUNCH_IF_NOT_ALREADY_LAUNCHED) &&
@@ -1075,8 +1088,6 @@
                 resMsg.setResultCode(ResultCode.OK);
                 resMsg.setConfirmation(confirmed);
                 if (confirmed) {
-                    CatLog.d(this, "Going back to mainMenu before starting a call.");
-                    launchMenuActivity(null, slotId);
                     launchEventMessage(slotId,
                             mStkContext[slotId].mCurrentCmd.getCallSettings().callMsg);
                 }
@@ -1520,7 +1531,7 @@
         // this is good for scenarios where a related DISPLAY TEXT command is
         // followed immediately.
         try {
-            Thread.sleep(10000);
+            Thread.sleep(3000);
         } catch (InterruptedException e) {}
     }
 
@@ -1589,7 +1600,7 @@
         startActivity(newIntent);
     }
 
-    private void launchOpenChannelDialog(int slotId) {
+    private void launchOpenChannelDialog(final int slotId) {
         TextMessage msg = mStkContext[slotId].mCurrentCmd.geTextMessage();
         if (msg == null) {
             CatLog.d(LOG_TAG, "msg is null, return here");
@@ -1614,6 +1625,7 @@
                             args.putInt(CHOICE, YES);
                             Message message = mServiceHandler.obtainMessage();
                             message.arg1 = OP_RESPONSE;
+                            message.arg2 = slotId;
                             message.obj = args;
                             mServiceHandler.sendMessage(message);
                         }
@@ -1626,6 +1638,7 @@
                             args.putInt(CHOICE, NO);
                             Message message = mServiceHandler.obtainMessage();
                             message.arg1 = OP_RESPONSE;
+                            message.arg2 = slotId;
                             message.obj = args;
                             mServiceHandler.sendMessage(message);
                         }
diff --git a/src/com/android/stk/StkDialogActivity.java b/src/com/android/stk/StkDialogActivity.java
old mode 100644
new mode 100755
index 24e1068..78e1a2e
--- a/src/com/android/stk/StkDialogActivity.java
+++ b/src/com/android/stk/StkDialogActivity.java
@@ -70,6 +70,15 @@
         super.onCreate(icicle);
 
         CatLog.d(LOG_TAG, "onCreate, sim id: " + mSlotId);
+
+        // appService can be null if this activity is automatically recreated by the system
+        // with the saved instance state right after the phone process is killed.
+        if (appService == null) {
+            CatLog.d(LOG_TAG, "onCreate - appService is null");
+            finish();
+            return;
+        }
+
         // New Dialog is created - set to no response sent
         mIsResponseSent = false;
 
@@ -89,6 +98,7 @@
         mContext.registerReceiver(mBroadcastReceiver, intentFilter);
         mAlarmManager =(AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
 
+        setFinishOnTouchOutside(false);
     }
 
     public void onClick(View v) {
@@ -210,6 +220,9 @@
         super.onStop();
         CatLog.d(LOG_TAG, "onStop - before Send CONFIRM false mIsResponseSent[" +
                 mIsResponseSent + "], sim id: " + mSlotId);
+        if (!mTextMsg.responseNeeded) {
+            return;
+        }
         if (!mIsResponseSent) {
             appService.getStkContext(mSlotId).setPendingDialogInstance(this);
         } else {
@@ -225,6 +238,9 @@
         super.onDestroy();
         CatLog.d(LOG_TAG, "onDestroy - mIsResponseSent[" + mIsResponseSent +
                 "], sim id: " + mSlotId);
+        if (appService == null) {
+            return;
+        }
         // if dialog activity is finished by stkappservice
         // when receiving OP_LAUNCH_APP from the other SIM, we can not send TR here
         // , since the dialog cmd is waiting user to process.
diff --git a/src/com/android/stk/StkInputActivity.java b/src/com/android/stk/StkInputActivity.java
old mode 100644
new mode 100755
index 53bea93..96b7dca
--- a/src/com/android/stk/StkInputActivity.java
+++ b/src/com/android/stk/StkInputActivity.java
@@ -134,6 +134,14 @@
 
         CatLog.d(LOG_TAG, "onCreate - mIsResponseSent[" + mIsResponseSent + "]");
 
+        // appService can be null if this activity is automatically recreated by the system
+        // with the saved instance state right after the phone process is killed.
+        if (appService == null) {
+            CatLog.d(LOG_TAG, "onCreate - appService is null");
+            finish();
+            return;
+        }
+
         // Set the layout for this activity.
         requestWindowFeature(Window.FEATURE_LEFT_ICON);
         setContentView(R.layout.stk_input);
@@ -201,6 +209,9 @@
         super.onDestroy();
         CatLog.d(LOG_TAG, "onDestroy - before Send End Session mIsResponseSent[" +
                 mIsResponseSent + " , " + mSlotId + "]");
+        if (appService == null) {
+            return;
+        }
         //If the input activity is finished by stkappservice
         //when receiving OP_LAUNCH_APP from the other SIM, we can not send TR here
         //, since the input cmd is waiting user to process.
@@ -357,7 +368,11 @@
         int inTypeId = R.string.alphabet;
 
         // set the prompt.
-        mPromptView.setText(mStkInput.text);
+        if (mStkInput.iconSelfExplanatory && mStkInput.icon != null) {
+            mPromptView.setVisibility(View.GONE);
+        } else {
+            mPromptView.setText(mStkInput.text);
+        }
 
         // Set input type (alphabet/digit) info close to the InText form.
         if (mStkInput.digitOnly) {
diff --git a/src/com/android/stk/StkLauncherActivity.java b/src/com/android/stk/StkLauncherActivity.java
index 73529e9..6c5b88c 100644
--- a/src/com/android/stk/StkLauncherActivity.java
+++ b/src/com/android/stk/StkLauncherActivity.java
@@ -161,6 +161,8 @@
 
     private int addStkMenuListItems() {
         String appName = mContext.getResources().getString(R.string.app_name);
+        StkAppService appService = StkAppService.getInstance();
+        String stkMenuTitle = null;
         String stkItemName = null;
         int simCount = TelephonyManager.from(mContext).getSimCount();
         mStkMenuList = new ArrayList<Item>();
@@ -171,8 +173,9 @@
             if (mTm.hasIccCard(i)) {
                 CatLog.d(LOG_TAG, "SIM " + i + " add to menu.");
                 mSingleSimId = i;
-                stkItemName = new StringBuilder(appName).append(" ")
-                        .append(Integer.toString(i + 1)).toString();
+                stkMenuTitle = appService.getMainMenu(i).title;
+                stkItemName = new StringBuilder(stkMenuTitle == null ? appName : stkMenuTitle)
+                    .append(" ").append(Integer.toString(i + 1)).toString();
                 Item item = new Item(i + 1, stkItemName, mBitMap);
                 item.id = i;
                 mStkMenuList.add(item);
diff --git a/src/com/android/stk/StkMenuActivity.java b/src/com/android/stk/StkMenuActivity.java
old mode 100644
new mode 100755
index 2005971..42cd60a
--- a/src/com/android/stk/StkMenuActivity.java
+++ b/src/com/android/stk/StkMenuActivity.java
@@ -110,6 +110,15 @@
         mContext = getBaseContext();
         mAcceptUsersInput = true;
         getListView().setOnCreateContextMenuListener(this);
+
+        // appService can be null if this activity is automatically recreated by the system
+        // with the saved instance state right after the phone process is killed.
+        if (appService == null) {
+            CatLog.d(LOG_TAG, "onCreate - appService is null");
+            finish();
+            return;
+        }
+
         initFromIntent(getIntent());
     }
 
@@ -260,7 +269,9 @@
             }
         } else {
             if (appService != null) {
-                appService.getStkContext(mSlotId).setPendingActivityInstance(this);
+                if (mState == STATE_SECONDARY) {
+                    appService.getStkContext(mSlotId).setPendingActivityInstance(this);
+                }
             } else {
                 CatLog.d(LOG_TAG, "onStop: null appService.");
             }
@@ -272,9 +283,12 @@
         getListView().setOnCreateContextMenuListener(null);
         super.onDestroy();
         CatLog.d(LOG_TAG, "onDestroy" + "," + mState);
+        if (appService == null) {
+            return;
+        }
         //isMenuPending: if input act is finish by stkappservice when OP_LAUNCH_APP again,
         //we can not send TR here, since the input cmd is waiting user to process.
-        if (!mIsResponseSent && !appService.isMenuPending(mSlotId)) {
+        if (mState == STATE_SECONDARY && !mIsResponseSent && !appService.isMenuPending(mSlotId)) {
             CatLog.d(LOG_TAG, "handleDestroy - Send End Session");
             sendResponse(StkAppService.RES_ID_END_SESSION);
         }
diff --git a/src/com/android/stk/ToneDialog.java b/src/com/android/stk/ToneDialog.java
old mode 100644
new mode 100755
index 57a977d..834d575
--- a/src/com/android/stk/ToneDialog.java
+++ b/src/com/android/stk/ToneDialog.java
@@ -95,6 +95,10 @@
             iv.setImageBitmap(toneMsg.icon);
         }
 
+        if (toneMsg.iconSelfExplanatory && toneMsg.icon != null) {
+            tv.setVisibility(View.GONE);
+        }
+
         // Start playing tone and vibration
         if (null == settings) {
             CatLog.d(LOG_TAG, "onCreate - null settings - finish");