diff options
author | xinhe <xinhe@google.com> | 2014-11-14 13:50:50 -0800 |
---|---|---|
committer | xinhe <xinhe@google.com> | 2014-11-16 11:04:34 -0800 |
commit | 0224babc0bec527dd7e44babb2cd644836f8e1fb (patch) | |
tree | 53da4d9e55a3d1cf9986a66c1dd24940f3b9b3e6 | |
parent | be3d818f9a99b783e5d40f1829c76980c637dfb3 (diff) | |
download | android_packages_apps_CellBroadcastReceiver-0224babc0bec527dd7e44babb2cd644836f8e1fb.tar.gz android_packages_apps_CellBroadcastReceiver-0224babc0bec527dd7e44babb2cd644836f8e1fb.tar.bz2 android_packages_apps_CellBroadcastReceiver-0224babc0bec527dd7e44babb2cd644836f8e1fb.zip |
CMAS opt-out setting does not work when switching from Secondary user to
Device owner
Fix includes:
(1) Only device owner is alloed to set/change preference
(2) CBS intents are sent to all users
(3) Cell broadcast alter is only displayed on the active user
(4) Cell broadcast messages are saved in all users' mail box
(5) Cell broadcast test app send intents to all users
(6) Remove airplane mode trigger cellbroadcast MID configure. This should
be taken care of by ServiceStateChange
Bug:18223949
Change-Id: I6b6162e7f52a6cd958ef08267f7f239e70489ec8
7 files changed, 80 insertions, 36 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4fd97fd4..3d0eba63 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 ebb706c9..fa78a276 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java @@ -21,11 +21,13 @@ import android.app.Notification; 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 @@ public class CellBroadcastAlertService extends Service { 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 cb7fb8cc..5e71a24d 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java @@ -30,6 +30,7 @@ import android.content.Intent; 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 class CellBroadcastListActivity extends Activity { 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 a04cc2c7..29a8842a 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java @@ -61,17 +61,12 @@ public class CellBroadcastReceiver extends BroadcastReceiver { 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 751e7ef8..f3bfd869 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 f7bee6ef..8aa71061 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 @@ public class SendCdmaCmasMessages { 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 @@ public class SendCdmaCmasMessages { 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 @@ public class SendCdmaCmasMessages { 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 @@ public class SendCdmaCmasMessages { 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 @@ public class SendCdmaCmasMessages { 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 e85299d2..11d562bf 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 class SendTestMessages { 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 @@ public class SendTestMessages { 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 @@ public class SendTestMessages { 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 @@ public class SendTestMessages { 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 @@ public class SendTestMessages { 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 @@ public class SendTestMessages { 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); } } |