merge in lmp-mr1-release history after reset to lmp-mr1-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4fd97fd..3d0eba6 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,7 @@
     <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+    <uses-permission android:name="android.permission.MANAGE_USERS" />
 
     <application android:name="CellBroadcastReceiverApp"
             android:label="@string/app_label"
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index ebb706c..fa78a27 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -21,11 +21,13 @@
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.app.Service;
+import android.app.ActivityManagerNative;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.preference.PreferenceManager;
 import android.provider.Telephony;
@@ -117,7 +119,16 @@
                 Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION.equals(action)) {
             handleCellBroadcastIntent(intent);
         } else if (SHOW_NEW_ALERT_ACTION.equals(action)) {
-            showNewAlert(intent);
+            try {
+                if (UserHandle.myUserId() ==
+                        ActivityManagerNative.getDefault().getCurrentUser().id) {
+                    showNewAlert(intent);
+                } else {
+                    Log.d(TAG,"Not active user, ignore the alert display");
+                }
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
         } else {
             Log.e(TAG, "Unrecognized intent action: " + action);
         }
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
index cb7fb8c..5e71a24 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
@@ -30,6 +30,7 @@
 import android.content.Loader;
 import android.database.Cursor;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.provider.Telephony;
 import android.telephony.CellBroadcastMessage;
 import android.view.ContextMenu;
@@ -121,8 +122,10 @@
         public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
             menu.add(0, MENU_DELETE_ALL, 0, R.string.menu_delete_all).setIcon(
                     android.R.drawable.ic_menu_delete);
-            menu.add(0, MENU_PREFERENCES, 0, R.string.menu_preferences).setIcon(
-                    android.R.drawable.ic_menu_preferences);
+            if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
+                menu.add(0, MENU_PREFERENCES, 0, R.string.menu_preferences).setIcon(
+                        android.R.drawable.ic_menu_preferences);
+            }
         }
 
         @Override
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index a04cc2c..29a8842 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -61,17 +61,12 @@
                 Log.d(TAG, "Service state changed! " + newState + " Full: " + serviceState +
                         " Current state=" + mServiceState);
                 mServiceState = newState;
-                if (newState == ServiceState.STATE_IN_SERVICE ||
-                        newState == ServiceState.STATE_EMERGENCY_ONLY) {
+                if (((newState == ServiceState.STATE_IN_SERVICE) ||
+                        (newState == ServiceState.STATE_EMERGENCY_ONLY)) &&
+                        (UserHandle.myUserId() == UserHandle.USER_OWNER)) {
                     startConfigService(context.getApplicationContext());
                 }
             }
-        } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
-            boolean airplaneModeOn = intent.getBooleanExtra("state", false);
-            if (DBG) log("airplaneModeOn: " + airplaneModeOn);
-            if (!airplaneModeOn) {
-                startConfigService(context);
-            }
         } else if (Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION.equals(action) ||
                 Telephony.Sms.Intents.SMS_CB_RECEIVED_ACTION.equals(action)) {
             // If 'privileged' is false, it means that the intent was delivered to the base
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 751e7ef..f3bfd86 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -20,6 +20,7 @@
 
     <!-- Test Apk is signed with platform key in order to use this permission. -->
     <uses-permission android:name="android.permission.BROADCAST_SMS"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
 
     <!-- We add an application tag here just so that we can indicate that
          this package needs to link against the android.test library,
diff --git a/tests/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java b/tests/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java
index f7bee6e..8aa7106 100644
--- a/tests/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java
+++ b/tests/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java
@@ -16,9 +16,12 @@
 
 package com.android.cellbroadcastreceiver.tests;
 
+import android.Manifest;
 import android.app.Activity;
+import android.app.AppOpsManager;
 import android.content.Intent;
 import android.os.Parcel;
+import android.os.UserHandle;
 import android.provider.Telephony;
 import android.telephony.SmsCbCmasInfo;
 import android.telephony.SmsCbLocation;
@@ -70,7 +73,9 @@
 
         Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", cbMessage);
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendCmasExtremeAlert(Activity activity, int messageId) {
@@ -82,7 +87,9 @@
 
         Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", cbMessage);
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendCmasSevereAlert(Activity activity, int messageId) {
@@ -94,7 +101,9 @@
 
         Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", cbMessage);
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendCmasAmberAlert(Activity activity, int messageId) {
@@ -106,7 +115,9 @@
 
         Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", cbMessage);
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendCmasMonthlyTest(Activity activity, int messageId) {
@@ -118,7 +129,9 @@
 
         Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", cbMessage);
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     /**
diff --git a/tests/src/com/android/cellbroadcastreceiver/tests/SendTestMessages.java b/tests/src/com/android/cellbroadcastreceiver/tests/SendTestMessages.java
index e85299d..11d562b 100644
--- a/tests/src/com/android/cellbroadcastreceiver/tests/SendTestMessages.java
+++ b/tests/src/com/android/cellbroadcastreceiver/tests/SendTestMessages.java
@@ -16,8 +16,11 @@
 
 package com.android.cellbroadcastreceiver.tests;
 
+import android.Manifest;
 import android.app.Activity;
+import android.app.AppOpsManager;
 import android.content.Intent;
+import android.os.UserHandle;
 import android.provider.Telephony.Sms.Intents;
 import android.telephony.SmsCbLocation;
 import android.telephony.SmsCbMessage;
@@ -425,27 +428,31 @@
     public static void testSendMessage7bit(Activity activity, int serialNumber, int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTest, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitUmts(Activity activity, int serialNumber, int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestUmts, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitNoPadding(Activity activity, int serialNumber,
             int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestNoPadding, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitNoPaddingUmts(Activity activity, int serialNumber,
             int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestNoPaddingUmts, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitMultipageGsm(Activity activity, int serialNumber,
@@ -455,21 +462,24 @@
         pdus[0] = gsm7BitTestMultipage1;
         pdus[1] = gsm7BitTestMultipage2;
         intent.putExtra("message", createFromPdus(pdus, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitMultipageUmts(Activity activity, int serialNumber,
             int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestMultipageUmts, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitWithLanguage(Activity activity, int serialNumber,
             int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguage, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitWithLanguageInBody(Activity activity, int serialNumber,
@@ -477,7 +487,8 @@
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguageInBody, serialNumber,
                 category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessage7bitWithLanguageInBodyUmts(Activity activity,
@@ -485,26 +496,30 @@
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguageInBodyUmts, serialNumber,
                 category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessageUcs2(Activity activity, int serialNumber, int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsmUcs2Test, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessageUcs2Umts(Activity activity, int serialNumber, int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsmUcs2TestUmts, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessageUcs2MultipageUmts(Activity activity, int serialNumber,
             int category) {
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsmUcs2TestMultipageUmts, serialNumber, category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessageUcs2WithLanguageInBody(Activity activity, int serialNumber,
@@ -512,7 +527,8 @@
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsmUcs2TestWithLanguageInBody, serialNumber,
                 category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendMessageUcs2WithLanguageUmts(Activity activity, int serialNumber,
@@ -520,27 +536,31 @@
         Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(gsmUcs2TestWithLanguageInBodyUmts, serialNumber,
                 category));
-        activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS,
+                AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendEtwsMessageNormal(Activity activity, int serialNumber) {
         Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(etwsMessageNormal, serialNumber, 0));
-        activity.sendOrderedBroadcast(intent,
-                "android.permission.RECEIVE_EMERGENCY_BROADCAST");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendEtwsMessageCancel(Activity activity, int serialNumber) {
         Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(etwsMessageCancel, serialNumber, 0));
-        activity.sendOrderedBroadcast(intent,
-                "android.permission.RECEIVE_EMERGENCY_BROADCAST");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 
     public static void testSendEtwsMessageTest(Activity activity, int serialNumber) {
         Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION);
         intent.putExtra("message", createFromPdu(etwsMessageTest, serialNumber, 0));
-        activity.sendOrderedBroadcast(intent,
-                "android.permission.RECEIVE_EMERGENCY_BROADCAST");
+        activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
+                Manifest.permission.RECEIVE_EMERGENCY_BROADCAST,
+                AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null);
     }
 }