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 | CellBroadcastReceiver-lollipop-mr1-dev.tar.gz |
CMAS opt-out setting does not work when switching from Secondary user toandroid-5.1.1_r5android-5.1.1_r28android-5.1.1_r22android-5.1.1_r17android-5.1.1_r12lollipop-mr1-wfc-releaselollipop-mr1-dev
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 4fd97fd48..3d0eba63a 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 ebb706c9f..fa78a276d 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 cb7fb8cc2..5e71a24d9 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 a04cc2c71..29a8842a9 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 751e7ef87..f3bfd869a 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 f7bee6ef2..8aa71061d 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 e85299d2a..11d562bf9 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); } } |