diff options
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | AndroidManifest_Platform.xml | 1 | ||||
-rw-r--r-- | CleanSpec.mk | 3 | ||||
-rw-r--r-- | res/values/config.xml | 2 | ||||
-rw-r--r-- | res/values/overlayable.xml | 5 | ||||
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java | 37 |
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); + } + } } |