diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 17:22:33 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 17:22:33 +0000 |
commit | 4bb59a51603cad740ce907704275a7e96059309d (patch) | |
tree | de1378a42e10d45d2497ab5c1671f38f48d54509 | |
parent | 5a47489f630bca4d3528a34df2d35a653d92ab93 (diff) | |
parent | 923ef07e6126337393bcfddb9cb89bc14204b61c (diff) | |
download | CellBroadcastReceiver-android10-mainline-tzdata-release.tar.gz |
Snap for 7802995 from 923ef07e6126337393bcfddb9cb89bc14204b61c to qt-aml-tzdata-releaseq_tzdata_aml_297100400q_tzdata_aml_297100300q_tzdata_aml_297100000q_tzdata_aml_296200000q_tzdata_aml_295600118q_tzdata_aml_295600110q_tzdata_aml_295500002q_tzdata_aml_295500001q_tzdata_aml_294400310android-mainline-12.0.0_r54android-mainline-12.0.0_r111android-mainline-10.0.0_r13q_tzdata_aml_297100000android12-mainline-tzdata-releaseandroid10-mainline-tzdata-releaseandroid10-android13-mainline-tzdata-release
Change-Id: Iebef8d40d7511fe91469a3f1aa7dc206f0034627
4 files changed, 72 insertions, 15 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bfd79a526..275d695f6 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -130,6 +130,11 @@ </intent-filter> </receiver> + <receiver android:name="com.android.cellbroadcastreceiver.CellBroadcastInternalReceiver" + android:exported="false"> + <!-- No intent filter on purpose: this should only receive explicit intents --> + </receiver> + <provider android:name="CellBroadcastSearchIndexableProvider" android:authorities="com.android.cellbroadcastreceiver" diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java index be8ba644f..ec3c1dbd7 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java @@ -667,9 +667,11 @@ public class CellBroadcastAlertService extends Service { final NotificationManager notificationManager = NotificationManager.from(context); createNotificationChannels(context); + boolean isWatch = context.getPackageManager() + .hasSystemFeature(PackageManager.FEATURE_WATCH); // Create intent to show the new messages when user selects the notification. Intent intent; - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + if (isWatch) { // For FEATURE_WATCH we want to mark as read intent = createMarkAsReadIntent(context, message.getDeliveryTime()); } else { @@ -682,7 +684,7 @@ public class CellBroadcastAlertService extends Service { intent.putExtra(CellBroadcastAlertDialog.FROM_SAVE_STATE_NOTIFICATION_EXTRA, fromSaveState); PendingIntent pi; - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + if (isWatch) { pi = PendingIntent.getBroadcast(context, 0, intent, 0); } else { pi = PendingIntent.getActivity(context, NOTIFICATION_ID, intent, @@ -706,7 +708,7 @@ public class CellBroadcastAlertService extends Service { .setVisibility(Notification.VISIBILITY_PUBLIC) .setOngoing(nonSwipeableNotification); - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { + if (isWatch) { builder.setDeleteIntent(pi); // FEATURE_WATCH/CWH devices see this as priority builder.setVibrate(new long[]{0}); @@ -736,8 +738,7 @@ public class CellBroadcastAlertService extends Service { // Emergency messages use a different audio playback and display path. Since we use // addToNotification for the emergency display on FEATURE WATCH devices vs the // Alert Dialog, it will call this and override the emergency audio tone. - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH) - && !CellBroadcastChannelManager.isEmergencyMessage(context, message)) { + if (isWatch && !CellBroadcastChannelManager.isEmergencyMessage(context, message)) { if (res.getBoolean(R.bool.watch_enable_non_emergency_audio)) { // start audio/vibration/speech service for non emergency alerts Intent audioIntent = new Intent(context, CellBroadcastAlertAudio.class); @@ -785,7 +786,7 @@ public class CellBroadcastAlertService extends Service { * @return delete intent to add to the pending intent */ static Intent createMarkAsReadIntent(Context context, long deliveryTime) { - Intent deleteIntent = new Intent(context, CellBroadcastReceiver.class); + Intent deleteIntent = new Intent(context, CellBroadcastInternalReceiver.class); deleteIntent.setAction(CellBroadcastReceiver.ACTION_MARK_AS_READ); deleteIntent.putExtra(CellBroadcastReceiver.EXTRA_DELIVERY_TIME, deliveryTime); return deleteIntent; diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastInternalReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastInternalReceiver.java new file mode 100644 index 000000000..455c5b68c --- /dev/null +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastInternalReceiver.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020 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. + */ + +package com.android.cellbroadcastreceiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.provider.Telephony; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * {@link BroadcastReceiver} used for handling internal broadcasts (e.g. generated from + * {@link android.app.PendingIntent}s). + */ +public class CellBroadcastInternalReceiver extends BroadcastReceiver { + + /** + * helper method for easier testing. To generate a new CellBroadcastTask + * @param deliveryTime message delivery time + */ + @VisibleForTesting + public void getCellBroadcastTask(Context context, long deliveryTime) { + new CellBroadcastContentProvider.AsyncCellBroadcastTask(context.getContentResolver()) + .execute(new CellBroadcastContentProvider.CellBroadcastOperation() { + @Override + public boolean execute(CellBroadcastContentProvider provider) { + return provider.markBroadcastRead(Telephony.CellBroadcasts.DELIVERY_TIME, + deliveryTime); + } + }); + } + + @Override + public void onReceive(Context context, Intent intent) { + if (CellBroadcastReceiver.ACTION_MARK_AS_READ.equals(intent.getAction())) { + final long deliveryTime = intent.getLongExtra( + CellBroadcastReceiver.EXTRA_DELIVERY_TIME, -1); + getCellBroadcastTask(context, deliveryTime); + } + } +} diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java index 48a1573e6..496e34a9b 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java @@ -31,6 +31,7 @@ import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.cdma.CdmaSmsCbProgramData; +import android.util.EventLog; import android.util.Log; import com.android.internal.telephony.cdma.sms.SmsEnvelope; @@ -62,15 +63,9 @@ public class CellBroadcastReceiver extends BroadcastReceiver { String action = intent.getAction(); if (ACTION_MARK_AS_READ.equals(action)) { - final long deliveryTime = intent.getLongExtra(EXTRA_DELIVERY_TIME, -1); - new CellBroadcastContentProvider.AsyncCellBroadcastTask(context.getContentResolver()) - .execute(new CellBroadcastContentProvider.CellBroadcastOperation() { - @Override - public boolean execute(CellBroadcastContentProvider provider) { - return provider.markBroadcastRead(CellBroadcasts.DELIVERY_TIME, - deliveryTime); - } - }); + // The only way this'll be called is if someone tries to maliciously set something as + // read. Log an event. + EventLog.writeEvent(0x534e4554, "162741784", -1, null); } else if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action)) { initializeSharedPreference(context.getApplicationContext()); startConfigService(context.getApplicationContext()); |