summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChen Xu <fionaxu@google.com>2020-05-04 13:44:10 -0700
committerChen Xu <fionaxu@google.com>2020-05-18 19:23:32 -0700
commitb13ce2ffef290a7888ee56bf7e0193ba9546f757 (patch)
treecf8cf3e1fb11835aa19c0bf651b6e4f249c7d730
parent61d712fbae40e94ad32953f2ca0c3a1266df832c (diff)
downloadCellBroadcastReceiver-b13ce2ffef290a7888ee56bf7e0193ba9546f757.tar.gz
write emergency alert histories to sms db
KR government requires to display emergency alert history inside SMS inbox. Right after emergency alerts being displayed to users, we will insert message to both cbr db and sms.inbox db, storing to the same thread. Bug: 144749813 Test: Manual test with different messager apps Change-Id: I2d2300f2fb4a9a57a5dff67d2343f9e39275f0da
-rw-r--r--AndroidManifest.xml1
-rw-r--r--AndroidManifest_Platform.xml1
-rw-r--r--CleanSpec.mk3
-rw-r--r--res/values/config.xml2
-rw-r--r--res/values/overlayable.xml5
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java37
7 files changed, 49 insertions, 3 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8e103d06e..44bd7ab33 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -35,6 +35,7 @@
<uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.READ_CELL_BROADCASTS" />
+ <uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY" />
<uses-sdk android:minSdkVersion="21"/>
diff --git a/AndroidManifest_Platform.xml b/AndroidManifest_Platform.xml
index c9a89b240..45751fd43 100644
--- a/AndroidManifest_Platform.xml
+++ b/AndroidManifest_Platform.xml
@@ -32,6 +32,7 @@
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.READ_CELL_BROADCASTS" />
+ <uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY" />
<uses-sdk android:minSdkVersion="21"/>
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 43988c32d..c1ea9066f 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -48,6 +48,9 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/CellBroadcastReceiv
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/CellBroadcastAppPlatform)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/CellBroadcastApp)
+# Build finger print update in order to trigger default permission grant policy on incremental build
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/ETC/system_build_prop_intermediates/build.prop)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/res/values/config.xml b/res/values/config.xml
index 1022e8b93..0150678f1 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -55,6 +55,8 @@
<bool name="enable_led_flash">false</bool>
<!-- Whether allowing testing mode on user build or not -->
<bool name="allow_testing_mode_on_user_build">false</bool>
+ <!-- Whether to save alerts to sms inbox database -->
+ <bool name="enable_write_alerts_to_sms_inbox">false</bool>
<!-- Section for switch default value -->
<!-- Master toggle default value -->
diff --git a/res/values/overlayable.xml b/res/values/overlayable.xml
index 16cce51ca..29d602987 100644
--- a/res/values/overlayable.xml
+++ b/res/values/overlayable.xml
@@ -49,6 +49,11 @@
or not per product configuration-->
<item type="array" name="additional_cbs_channels_strings" />
<!-- END CHANNEL related configurations -->
+
+ <!-- Some countries like KR requires to display CB messages inside SMS inbox.
+ allow customization for sms sender name -->
+ <item type="string" name="sms_cb_sender_name" />
+ <item type="bool" name="enable_write_alerts_to_sms_inbox" />
</policy>
<!-- END VENDOR CUSTOMIZATION -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6f3f52962..6fb439f27 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -23,6 +23,9 @@
<!-- Label for settings screen. [CHAR LIMIT=NONE] -->
<string name="sms_cb_settings">Wireless emergency alerts</string>
+ <!-- Value of sms sender display name to be shown in SMS inbox -->
+ <string name="sms_cb_sender_name" translatable="false">Wireless emergency alerts</string>
+
<!-- Error message for users that aren't allowed to modify Cell broadcast settings [CHAR LIMIT=none] -->
<string name="cell_broadcast_settings_not_available">Wireless emergency alert settings are not available for this user</string>
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index 694c4fdc6..82a5fd1f5 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -16,6 +16,7 @@
package com.android.cellbroadcastreceiver;
+import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationChannel;
@@ -30,6 +31,7 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.media.AudioAttributes;
import android.media.AudioManager;
+import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -284,6 +286,13 @@ public class CellBroadcastAlertService extends Service
if (provider.insertNewBroadcast(message)) {
// new message, show the alert or notification on UI thread
startService(alertIntent);
+ // mark the message as displayed to the user.
+ markMessageDisplayed(message);
+ if (CellBroadcastSettings.getResources(mContext,
+ message.getSubscriptionId())
+ .getBoolean(R.bool.enable_write_alerts_to_sms_inbox)) {
+ writeMessageToSmsInbox(message);
+ }
return true;
} else {
return false;
@@ -326,9 +335,6 @@ public class CellBroadcastAlertService extends Service
}
// Either shown the dialog, adding it to notification (non emergency, or delayed emergency),
- // mark the message as displayed to the user.
- markMessageDisplayed(cbm);
-
CellBroadcastChannelManager channelManager = new CellBroadcastChannelManager(
mContext, cbm.getSubscriptionId());
if (channelManager.isEmergencyMessage(cbm) && !sRemindAfterCallFinish) {
@@ -814,4 +820,29 @@ public class CellBroadcastAlertService extends Service
CellBroadcastReceiverApp.clearNewMessageList();
}
}
+
+ /**
+ * Write displayed cellbroadcast messages to sms inbox
+ *
+ * @param message The cell broadcast message.
+ */
+ private void writeMessageToSmsInbox(@NonNull SmsCbMessage message) {
+ // composing SMS
+ ContentValues cv = new ContentValues();
+ cv.put(Telephony.Sms.Inbox.BODY, message.getMessageBody());
+ cv.put(Telephony.Sms.Inbox.DATE, message.getReceivedTime());
+ cv.put(Telephony.Sms.Inbox.SUBSCRIPTION_ID, message.getSubscriptionId());
+ cv.put(Telephony.Sms.Inbox.SUBJECT, CellBroadcastResources.getDialogTitleResource(mContext,
+ message));
+ cv.put(Telephony.Sms.Inbox.ADDRESS, mContext.getString(R.string.sms_cb_sender_name));
+ // store all cellbroadcast messages in the same thread.
+ cv.put(Telephony.Sms.Inbox.THREAD_ID, Telephony.Threads.getOrCreateThreadId(mContext,
+ mContext.getString(R.string.sms_cb_sender_name)));
+ Uri uri = mContext.getContentResolver().insert(Telephony.Sms.Inbox.CONTENT_URI, cv);
+ if (uri == null) {
+ Log.e(TAG, "writeMessageToSmsInbox: failed");
+ } else {
+ Log.d(TAG, "writeMessageToSmsInbox: succeed uri = " + uri);
+ }
+ }
}