Merge "Fix the incorrect title for DISPLAY TEXT dialog."
diff --git a/Android.bp b/Android.bp
index d505cd4..cffb421 100644
--- a/Android.bp
+++ b/Android.bp
@@ -5,7 +5,6 @@
     libs: ["telephony-common"],
     static_libs: ["com.google.android.material_material"],
     srcs: ["**/*.java"],
-    jarjar_rules: "jarjar-rules.txt",
     platform_apis: true,
     certificate: "platform",
 }
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c49ff86..3ac91ec 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -23,7 +23,6 @@
     <original-package android:name="com.android.stk" />
 
     <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" />
     <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER" />
     <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
diff --git a/CleanSpec.mk b/CleanSpec.mk
index b84e1b6..3c98e58 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -47,3 +47,5 @@
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/StkLib)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/StkLib)
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/OWNERS b/OWNERS
index 75ee354..3059d4d 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,6 +1,15 @@
 amitmahajan@google.com
-rgreenwalt@google.com
-jminjie@google.com
-hallliu@google.com
 breadley@google.com
-jackyu@google.com
\ No newline at end of file
+fionaxu@google.com
+jackyu@google.com
+hallliu@google.com
+rgreenwalt@google.com
+tgunn@google.com
+jminjie@google.com
+shuoq@google.com
+refuhoo@google.com
+nazaninb@google.com
+sarahchin@google.com
+dbright@google.com
+xiaotonj@google.com
+
diff --git a/jarjar-rules.txt b/jarjar-rules.txt
deleted file mode 100644
index b0d73d3..0000000
--- a/jarjar-rules.txt
+++ /dev/null
@@ -1 +0,0 @@
-rule com.android.internal.util.XmlUtils* com.android.internal.telephony.XmlUtils@1
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 5adf46e..5b17537 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_back" msgid="301227740977453364">"Nazad"</string>
     <string name="service_name" msgid="6860303747999592491">"Ime usluge"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"Usluga nije dostupna"</string>
-    <string name="button_ok" msgid="5760722312558549555">"Uredu"</string>
+    <string name="button_ok" msgid="5760722312558549555">"UREDU"</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>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 39b75f0..d61ed31 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_back" msgid="301227740977453364">"Zurück"</string>
     <string name="service_name" msgid="6860303747999592491">"Name des Dienstes"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"Kein Dienst verfügbar"</string>
-    <string name="button_ok" msgid="5760722312558549555">"Ok"</string>
+    <string name="button_ok" msgid="5760722312558549555">"OK"</string>
     <string name="button_cancel" msgid="1997847915560800261">"Abbrechen"</string>
     <string name="button_yes" msgid="624420260648337203">"\"Ja\""</string>
     <string name="button_no" msgid="1824959157582605627">"Nein"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8ace2a1..5b38f4b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/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">"सिम टूलकिट"</string>
-    <string name="menu_end_session" msgid="7368541737750982217">"सत्र खत्म करें"</string>
+    <string name="menu_end_session" msgid="7368541737750982217">"सत्र समाप्त करें"</string>
     <string name="help" msgid="9209980881219397319">"सहायता"</string>
     <string name="menu_back" msgid="301227740977453364">"वापस जाएं"</string>
     <string name="service_name" msgid="6860303747999592491">"सेवा का नाम"</string>
@@ -30,14 +30,14 @@
     <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">"सिम टूलकिट"</string>
     <string name="default_tone_dialog_msg" msgid="4595366992944391641">"टोन बजाया जा रहा है"</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_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-hr/strings.xml b/res/values-hr/strings.xml
index c468d74..81b4243 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/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">"Alati za SIM"</string>
+    <string name="app_name" msgid="8396461461738434341">"Alatni komplet za SIM"</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">"Natrag"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index fe06396..9c7c290 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/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-kártya eszközkészlete"</string>
+    <string name="app_name" msgid="8396461461738434341">"SIM kártya eszközkészlete"</string>
     <string name="menu_end_session" msgid="7368541737750982217">"Munkamenet befejezése"</string>
     <string name="help" msgid="9209980881219397319">"Súgó"</string>
     <string name="menu_back" msgid="301227740977453364">"Vissza"</string>
@@ -33,7 +33,7 @@
     <string name="stk_app_state" msgid="18582277302584082">"Alkalmazás állapota"</string>
     <string name="enable_app" msgid="3701224550936728203">"Engedélyezve"</string>
     <string name="disable_app" msgid="6725081975611415214">"Letiltva"</string>
-    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM-kártya eszközkészlete"</string>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM kártya eszközkészlete"</string>
     <string name="default_tone_dialog_msg" msgid="4595366992944391641">"Playing Tone"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"Megnyitja a csatornát?"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"Adatok küldése"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index ddb76fa..c030ff5 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/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 Toolkit"</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>
@@ -33,7 +33,7 @@
     <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 ToolKit"</string>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM аспаптар жинағы"</string>
     <string name="default_tone_dialog_msg" msgid="4595366992944391641">"Әуенді ойнату"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"Арнаны ашу?"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"Деректер жіберуде"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index ebe14b9..5ed9a87 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/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">"Sessie beëindigen"</string>
-    <string name="help" msgid="9209980881219397319">"Hulp"</string>
+    <string name="help" msgid="9209980881219397319">"Help"</string>
     <string name="menu_back" msgid="301227740977453364">"Terug"</string>
     <string name="service_name" msgid="6860303747999592491">"Servicenaam"</string>
     <string name="stk_no_service" msgid="5427773116839809131">"Geen service beschikbaar"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 0440ce9..01eb52f 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -30,7 +30,7 @@
     <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">"சிம் கருவிப்பெட்டி"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 6793f15..d9ecefb 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -32,7 +32,7 @@
     <string name="default_setup_call_msg" msgid="6126904475461162162">"Qo‘ng‘iroq sozlanmoqda"</string>
     <string name="stk_app_state" msgid="18582277302584082">"Ilova holati"</string>
     <string name="enable_app" msgid="3701224550936728203">"Yoniq"</string>
-    <string name="disable_app" msgid="6725081975611415214">"Yoqilmagan"</string>
+    <string name="disable_app" msgid="6725081975611415214">"O‘chiq"</string>
     <string name="stk_dialog_title" msgid="6954825385456886726">"SIM menyusi"</string>
     <string name="default_tone_dialog_msg" msgid="4595366992944391641">"Signal ijrosi"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"Kanal ochilsinmi?"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1169b6b..59db8c4 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/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 卡工具包"</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>
@@ -33,7 +33,7 @@
     <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>
+    <string name="stk_dialog_title" msgid="6954825385456886726">"SIM卡工具包"</string>
     <string name="default_tone_dialog_msg" msgid="4595366992944391641">"正在播放音效"</string>
     <string name="default_open_channel_msg" msgid="2216070254100295924">"是否打开通道?"</string>
     <string name="default_send_data_msg" msgid="6011219698689931272">"正在发送数据"</string>
diff --git a/src/com/android/stk/StkAppService.java b/src/com/android/stk/StkAppService.java
index 565c35f..3d23010 100644
--- a/src/com/android/stk/StkAppService.java
+++ b/src/com/android/stk/StkAppService.java
@@ -19,6 +19,7 @@
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningTaskInfo;
 import android.app.AlertDialog;
+import android.app.HomeVisibilityObserver;
 import android.app.KeyguardManager;
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -26,7 +27,6 @@
 import android.app.PendingIntent;
 import android.app.Service;
 import android.app.Activity;
-import android.app.ActivityManagerNative;
 import android.app.IProcessObserver;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -70,8 +70,6 @@
 import android.widget.Toast;
 import android.content.IntentFilter;
 
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-
 import com.android.internal.telephony.PhoneConfigurationManager;
 import com.android.internal.telephony.cat.AppInterface;
 import com.android.internal.telephony.cat.Input;
@@ -103,6 +101,8 @@
 import static com.android.internal.telephony.cat.CatCmdMessage.
                    SetupEventListConstants.USER_ACTIVITY_EVENT;
 
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
 /**
  * SIM toolkit application level service. Interacts with Telephopny messages,
  * application's launch and user input from STK UI elements.
@@ -180,7 +180,7 @@
     private AppInterface[] mStkService = null;
     private StkContext[] mStkContext = null;
     private int mSimCount = 0;
-    private IProcessObserver.Stub mProcessObserver = null;
+    private HomeVisibilityObserver mHomeVisibilityObserver = null;
     private BroadcastReceiver mLocaleChangeReceiver = null;
     private TonePlayer mTonePlayer = null;
     private Vibrator mVibrator = null;
@@ -334,8 +334,6 @@
         serviceThread.start();
         mNotificationManager = (NotificationManager) mContext
                 .getSystemService(Context.NOTIFICATION_SERVICE);
-        PhoneConfigurationManager.registerForMultiSimConfigChange(mServiceHandler,
-                EVENT_MULTI_SIM_CONFIG_CHANGED, null);
         sInstance = this;
     }
 
@@ -413,11 +411,12 @@
     public void onDestroy() {
         CatLog.d(LOG_TAG, "onDestroy()");
         unregisterUserActivityReceiver();
-        unregisterProcessObserver();
+        unregisterHomeVisibilityObserver();
         unregisterLocaleChangeReceiver();
         unregisterHomeKeyEventReceiver();
         sInstance = null;
         waitForLooper();
+        PhoneConfigurationManager.unregisterForMultiSimConfigChange(mServiceHandler);
         mServiceLooper.quit();
     }
 
@@ -432,6 +431,9 @@
         mServiceLooper = Looper.myLooper();
         mServiceHandler = new ServiceHandler();
 
+        PhoneConfigurationManager.registerForMultiSimConfigChange(mServiceHandler,
+                EVENT_MULTI_SIM_CONFIG_CHANGED, null);
+
         Looper.loop();
     }
 
@@ -1164,7 +1166,7 @@
                     CatLog.d(LOG_TAG, "set up idle mode");
                     launchIdleText(slotId);
                 } else {
-                    registerProcessObserver();
+                    registerHomeVisibilityObserver();
                 }
             }
             break;
@@ -1779,7 +1781,7 @@
                 unregisterUserActivityReceiver();
                 break;
             case IDLE_SCREEN_AVAILABLE_EVENT:
-                unregisterProcessObserver(AppInterface.CommandType.SET_UP_EVENT_LIST, slotId);
+                unregisterHomeVisibilityObserver(AppInterface.CommandType.SET_UP_EVENT_LIST, slotId);
                 break;
             case LANGUAGE_SELECTION_EVENT:
                 unregisterLocaleChangeReceiver();
@@ -1799,7 +1801,7 @@
                     registerUserActivityReceiver();
                     break;
                 case IDLE_SCREEN_AVAILABLE_EVENT:
-                    registerProcessObserver();
+                    registerHomeVisibilityObserver();
                     break;
                 case LANGUAGE_SELECTION_EVENT:
                     registerLocaleChangeReceiver();
@@ -1841,37 +1843,25 @@
         }
     }
 
-    private synchronized void registerProcessObserver() {
-        if (mProcessObserver == null) {
-            try {
-                IProcessObserver.Stub observer = new IProcessObserver.Stub() {
-                    @Override
-                    public void onForegroundActivitiesChanged(int pid, int uid, boolean fg) {
-                        if (isScreenIdle()) {
-                            Message message = mServiceHandler.obtainMessage(OP_IDLE_SCREEN);
-                            mServiceHandler.sendMessage(message);
-                            unregisterProcessObserver();
-                        }
+    private synchronized void registerHomeVisibilityObserver() {
+        if (mHomeVisibilityObserver == null) {
+            mHomeVisibilityObserver = new HomeVisibilityObserver() {
+                @Override
+                public void onHomeVisibilityChanged(boolean isHomeActivityVisible) {
+                    if (isHomeActivityVisible) {
+                        Message message = mServiceHandler.obtainMessage(OP_IDLE_SCREEN);
+                        mServiceHandler.sendMessage(message);
+                        unregisterHomeVisibilityObserver();
                     }
-
-                    @Override
-                    public void onForegroundServicesChanged(int pid, int uid, int fgServiceTypes) {
-                    }
-
-                    @Override
-                    public void onProcessDied(int pid, int uid) {
-                    }
-                };
-                ActivityManagerNative.getDefault().registerProcessObserver(observer);
-                CatLog.d(LOG_TAG, "Started to observe the foreground activity");
-                mProcessObserver = observer;
-            } catch (RemoteException e) {
-                CatLog.e(LOG_TAG, "Failed to register the process observer");
-            }
+                }
+            };
+            ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+            am.registerHomeVisibilityObserver(mHomeVisibilityObserver);
+            CatLog.d(LOG_TAG, "Started to observe the foreground activity");
         }
     }
 
-    private void unregisterProcessObserver(AppInterface.CommandType command, int slotId) {
+    private void unregisterHomeVisibilityObserver(AppInterface.CommandType command, int slotId) {
         // Check if there is any pending command which still needs the process observer
         // except for the current command and slot.
         for (int slot = 0; slot < mSimCount; slot++) {
@@ -1894,18 +1884,15 @@
                 }
             }
         }
-        unregisterProcessObserver();
+        unregisterHomeVisibilityObserver();
     }
 
-    private synchronized void unregisterProcessObserver() {
-        if (mProcessObserver != null) {
-            try {
-                ActivityManagerNative.getDefault().unregisterProcessObserver(mProcessObserver);
-                CatLog.d(LOG_TAG, "Stopped to observe the foreground activity");
-                mProcessObserver = null;
-            } catch (RemoteException e) {
-                CatLog.d(LOG_TAG, "Failed to unregister the process observer");
-            }
+    private synchronized void unregisterHomeVisibilityObserver() {
+        if (mHomeVisibilityObserver != null) {
+            ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
+            am.unregisterHomeVisibilityObserver(mHomeVisibilityObserver);
+            CatLog.d(LOG_TAG, "Stopped to observe the foreground activity");
+            mHomeVisibilityObserver = null;
         }
     }
 
@@ -2012,7 +1999,7 @@
                         case IDLE_SCREEN_AVAILABLE_EVENT:
                             // The process observer can be unregistered
                             // as the idle screen has already been available.
-                            unregisterProcessObserver();
+                            unregisterHomeVisibilityObserver();
                             break;
                         default:
                             break;
@@ -2135,7 +2122,7 @@
     }
 
     private void cancelIdleText(int slotId) {
-        unregisterProcessObserver(AppInterface.CommandType.SET_UP_IDLE_MODE_TEXT, slotId);
+        unregisterHomeVisibilityObserver(AppInterface.CommandType.SET_UP_IDLE_MODE_TEXT, slotId);
         mNotificationManager.cancel(getNotificationId(slotId));
         mStkContext[slotId].mIdleModeTextCmd = null;
         mStkContext[slotId].mIdleModeTextVisible = false;
@@ -2336,6 +2323,10 @@
         }
     }
 
+    boolean isNoTonePlaying() {
+        return mTonePlayer == null ? true : false;
+    }
+
     private void launchOpenChannelDialog(final int slotId) {
         TextMessage msg = mStkContext[slotId].mCurrentCmd.geTextMessage();
         if (msg == null) {
diff --git a/src/com/android/stk/StkMenuConfig.java b/src/com/android/stk/StkMenuConfig.java
index 5414a6a..c437635 100644
--- a/src/com/android/stk/StkMenuConfig.java
+++ b/src/com/android/stk/StkMenuConfig.java
@@ -28,7 +28,7 @@
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.cat.CatLog;
 import com.android.internal.telephony.util.TelephonyUtils;
-import com.android.internal.util.XmlUtils;
+import com.android.internal.telephony.util.XmlUtils;
 
 import java.util.ArrayList;
 
@@ -153,7 +153,7 @@
     private void initialize(Context context) {
         mContext = context;
         mArray = new ArrayList<Config>();
-        mConfigs = new Config[TelephonyManager.from(mContext).getSimCount()];
+        mConfigs = new Config[TelephonyManager.from(mContext).getSupportedModemCount()];
 
         XmlResourceParser parser = mContext.getResources().getXml(R.xml.menu_conf);
 
diff --git a/src/com/android/stk/ToneDialog.java b/src/com/android/stk/ToneDialog.java
index 2efeecd..639a216 100644
--- a/src/com/android/stk/ToneDialog.java
+++ b/src/com/android/stk/ToneDialog.java
@@ -92,6 +92,12 @@
 
         mAlertDialog = alertDialogBuilder.create();
         mAlertDialog.show();
+
+        StkAppService appService = StkAppService.getInstance();
+        // Finish the activity if the specified duration is too short and timed-out already.
+        if (appService != null && (appService.isNoTonePlaying())) {
+            finish();
+        }
     }
 
     @Override