summaryrefslogtreecommitdiff
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastAlertDialog.java27
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java60
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java8
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java16
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastResources.java81
5 files changed, 119 insertions, 73 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertDialog.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertDialog.java
index 892b7f6a6..eef1825b9 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertDialog.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertDialog.java
@@ -86,7 +86,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Locale;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -839,29 +838,6 @@ public class CellBroadcastAlertDialog extends Activity {
}
/**
- * If the carrier or country is configured to show the alert dialog title text in the
- * language matching the message, this method returns the string in that language. Otherwise
- * this method returns the string in the device's current language
- *
- * @param resId resource Id
- * @param res Resources for the subId
- * @param languageCode the ISO-639-1 language code for this message, or null if unspecified
- */
- private String overrideTranslation(int resId, Resources res, String languageCode) {
- if (!TextUtils.isEmpty(languageCode)
- && res.getBoolean(R.bool.override_alert_title_language_to_match_message_locale)) {
- // TODO change resources to locale from message
- Configuration conf = res.getConfiguration();
- conf = new Configuration(conf);
- conf.setLocale(new Locale(languageCode));
- Context localizedContext = getApplicationContext().createConfigurationContext(conf);
- return localizedContext.getResources().getText(resId).toString();
- } else {
- return res.getText(resId).toString();
- }
- }
-
- /**
* Update alert text when a new emergency alert arrives.
* @param message CB message which is used to update alert text.
*/
@@ -888,7 +864,8 @@ public class CellBroadcastAlertDialog extends Activity {
}
if (res.getBoolean(R.bool.show_alert_title)) {
- String title = overrideTranslation(titleId, res, languageCode);
+ String title = CellBroadcastResources.overrideTranslation(context, titleId, res,
+ languageCode);
TextView titleTextView = findViewById(R.id.alertTitle);
if (titleTextView != null) {
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index 0f9a5ed16..2ac1402bf 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -71,6 +71,7 @@ import android.view.Display;
import com.android.cellbroadcastreceiver.CellBroadcastChannelManager.CellBroadcastChannelRange;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.modules.utils.build.SdkLevel;
import java.util.ArrayList;
import java.util.List;
@@ -523,7 +524,8 @@ public class CellBroadcastAlertService extends Service {
// Check if all emergency alerts are disabled.
boolean emergencyAlertEnabled = checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE,
+ res.getBoolean(R.bool.master_toggle_enabled_default));
int channel = message.getServiceCategory();
int resourcesKey = channelManager.getCellBroadcastChannelResourcesKey(channel);
CellBroadcastChannelRange range = channelManager.getCellBroadcastChannelRange(channel);
@@ -534,8 +536,8 @@ public class CellBroadcastAlertService extends Service {
|| resourcesKey == R.array.etws_test_alerts_range_strings) {
return emergencyAlertEnabled
&& CellBroadcastSettings.isTestAlertsToggleVisible(getApplicationContext())
- && checkAlertConfigEnabled(subId,
- CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS, false);
+ && checkAlertConfigEnabled(subId, CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS,
+ res.getBoolean(R.bool.test_alerts_enabled_default));
}
if (message.isEtwsMessage() || resourcesKey == R.array.etws_alerts_range_strings) {
@@ -559,11 +561,13 @@ public class CellBroadcastAlertService extends Service {
return emergencyAlertEnabled
&& CellBroadcastSettings.isTestAlertsToggleVisible(getApplicationContext())
&& checkAlertConfigEnabled(subId,
- CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS, false);
+ CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS,
+ res.getBoolean(R.bool.test_alerts_enabled_default));
}
if (range.mAlertType == AlertType.AREA) {
return emergencyAlertEnabled && checkAlertConfigEnabled(subId,
- CellBroadcastSettings.KEY_ENABLE_AREA_UPDATE_INFO_ALERTS, false);
+ CellBroadcastSettings.KEY_ENABLE_AREA_UPDATE_INFO_ALERTS,
+ res.getBoolean(R.bool.area_update_info_alerts_enabled_default));
}
return emergencyAlertEnabled;
@@ -571,7 +575,8 @@ public class CellBroadcastAlertService extends Service {
if (resourcesKey == R.array.emergency_alerts_channels_range_strings) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS,
+ res.getBoolean(R.bool.emergency_alerts_enabled_default));
}
// CMAS warning types
if (resourcesKey == R.array.cmas_presidential_alerts_channels_range_strings) {
@@ -580,27 +585,32 @@ public class CellBroadcastAlertService extends Service {
}
if (resourcesKey == R.array.cmas_alert_extreme_channels_range_strings) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS,
+ res.getBoolean(R.bool.extreme_threat_alerts_enabled_default));
}
if (resourcesKey == R.array.cmas_alerts_severe_range_strings) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS,
+ res.getBoolean(R.bool.severe_threat_alerts_enabled_default));
}
if (resourcesKey == R.array.cmas_amber_alerts_channels_range_strings) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS,
+ res.getBoolean(R.bool.amber_alerts_enabled_default));
}
if (resourcesKey == R.array.exercise_alert_range_strings
&& res.getBoolean(R.bool.show_separate_exercise_settings)) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, false);
+ subId, CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS,
+ res.getBoolean(R.bool.test_exercise_alerts_enabled_default));
}
if (resourcesKey == R.array.operator_defined_alert_range_strings
&& res.getBoolean(R.bool.show_separate_operator_defined_settings)) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, false);
+ subId, CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS,
+ res.getBoolean(R.bool.test_operator_defined_alerts_enabled_default));
}
if (resourcesKey == R.array.required_monthly_test_range_strings
@@ -609,17 +619,20 @@ public class CellBroadcastAlertService extends Service {
return emergencyAlertEnabled
&& CellBroadcastSettings.isTestAlertsToggleVisible(getApplicationContext())
&& checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS, false);
+ subId, CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS,
+ res.getBoolean(R.bool.test_alerts_enabled_default));
}
if (resourcesKey == R.array.public_safety_messages_channels_range_strings) {
return emergencyAlertEnabled && checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_PUBLIC_SAFETY_MESSAGES, true);
+ subId, CellBroadcastSettings.KEY_ENABLE_PUBLIC_SAFETY_MESSAGES,
+ res.getBoolean(R.bool.public_safety_messages_enabled_default));
}
if (resourcesKey == R.array.state_local_test_alert_range_strings) {
return emergencyAlertEnabled && (checkAlertConfigEnabled(
- subId, CellBroadcastSettings.KEY_ENABLE_STATE_LOCAL_TEST_ALERTS, false)
+ subId, CellBroadcastSettings.KEY_ENABLE_STATE_LOCAL_TEST_ALERTS,
+ res.getBoolean(R.bool.state_local_test_alerts_enabled_default))
|| (!res.getBoolean(R.bool.show_state_local_test_settings)
&& res.getBoolean(R.bool.state_local_test_alerts_enabled_default)));
}
@@ -784,11 +797,14 @@ public class CellBroadcastAlertService extends Service {
static void addToNotificationBar(SmsCbMessage message,
ArrayList<SmsCbMessage> messageList, Context context,
boolean fromSaveState, boolean shouldAlert, boolean fromDialog) {
+
Resources res = CellBroadcastSettings.getResourcesByOperator(context,
message.getSubscriptionId(),
CellBroadcastReceiver.getRoamingOperatorSupported(context));
+
int channelTitleId = CellBroadcastResources.getDialogTitleResource(context, message);
- CharSequence channelName = context.getText(channelTitleId);
+ CharSequence channelName = CellBroadcastResources.overrideTranslation(context,
+ channelTitleId, res, message.getLanguageCode());
String messageBody = message.getMessageBody();
final NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
@@ -819,9 +835,14 @@ public class CellBroadcastAlertService extends Service {
if (isWatch) {
pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
} else {
+ ActivityOptions options = ActivityOptions.makeBasic();
+ if (SdkLevel.isAtLeastU()) {
+ options.setPendingIntentCreatorBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
+ }
pi = PendingIntent.getActivity(context, REQUEST_CODE_CONTENT_INTENT, intent,
PendingIntent.FLAG_UPDATE_CURRENT
- | PendingIntent.FLAG_IMMUTABLE);
+ | PendingIntent.FLAG_IMMUTABLE, options.toBundle());
}
CellBroadcastChannelManager channelManager = new CellBroadcastChannelManager(
context, message.getSubscriptionId());
@@ -868,9 +889,14 @@ public class CellBroadcastAlertService extends Service {
// sound, vibration and alert reminder.
Intent deleteIntent = new Intent(intent);
deleteIntent.putExtra(CellBroadcastAlertService.DISMISS_DIALOG, true);
+ ActivityOptions options = ActivityOptions.makeBasic();
+ if (SdkLevel.isAtLeastU()) {
+ options.setPendingIntentCreatorBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
+ }
builder.setDeleteIntent(PendingIntent.getActivity(context, REQUEST_CODE_DELETE_INTENT,
deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT
- | PendingIntent.FLAG_IMMUTABLE));
+ | PendingIntent.FLAG_IMMUTABLE, options.toBundle()));
builder.setContentIntent(pi);
// This will break vibration on FEATURE_WATCH, so use it for anything else
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
index 4419c3eab..bd8fa1a0d 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
@@ -22,6 +22,7 @@ import static com.android.cellbroadcastservice.CellBroadcastMetrics.ERRTYPE_CHAN
import static com.android.cellbroadcastservice.CellBroadcastMetrics.ERRTYPE_ENABLECHANNEL;
import android.Manifest;
+import android.app.ActivityOptions;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
@@ -145,11 +146,16 @@ public class CellBroadcastConfigService extends IntentService {
CellBroadcastAlertService.createNotificationChannels(c);
Intent settingsIntent = new Intent(c, CellBroadcastSettings.class);
+ ActivityOptions options = ActivityOptions.makeBasic();
+ if (SdkLevel.isAtLeastU()) {
+ options.setPendingIntentCreatorBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
+ }
PendingIntent pi = PendingIntent.getActivity(c,
CellBroadcastAlertService.SETTINGS_CHANGED_NOTIFICATION_ID, settingsIntent,
PendingIntent.FLAG_ONE_SHOT
| PendingIntent.FLAG_UPDATE_CURRENT
- | PendingIntent.FLAG_IMMUTABLE);
+ | PendingIntent.FLAG_IMMUTABLE, options.toBundle());
Notification.Builder builder = new Notification.Builder(c,
CellBroadcastAlertService.NOTIFICATION_CHANNEL_SETTINGS_UPDATES)
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index e8b55feb1..642cfd85a 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -233,6 +233,18 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
}
}
+
+ /**
+ * Get SystemProperties values
+ *
+ * @param key string to use get the value
+ * @return the matched value, but default "" for unmatched case.
+ */
+ @VisibleForTesting
+ public String getSystemProperties(String key) {
+ return SystemProperties.get(key, "").trim();
+ }
+
private void onServiceStateChanged(Context context, Resources res, int ss) {
logd("onServiceStateChanged, ss: " + ss);
// check whether to support roaming network
@@ -259,8 +271,8 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
roamingOperator = "";
if ((tm.isNetworkRoaming() || ss != ServiceState.STATE_IN_SERVICE)
&& !networkOperator.equals(tm.getSimOperator())) {
- String propRoamingPlmn = SystemProperties.get(
- ROAMING_PLMN_SUPPORTED_PROPERTY_KEY, "").trim();
+ String propRoamingPlmn =
+ getSystemProperties(ROAMING_PLMN_SUPPORTED_PROPERTY_KEY);
String[] roamingNetworks = propRoamingPlmn.isEmpty() ? res.getStringArray(
R.array.cmas_roaming_network_strings) : propRoamingPlmn.split(",");
logd("roamingNetworks: " + Arrays.toString(roamingNetworks));
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java b/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
index d0aebee98..61512048b 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
@@ -19,6 +19,7 @@ package com.android.cellbroadcastreceiver;
import android.annotation.NonNull;
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Typeface;
import android.telephony.SmsCbCmasInfo;
import android.telephony.SmsCbEtwsInfo;
@@ -312,13 +313,13 @@ public class CellBroadcastResources {
context, message.getSubscriptionId());
final int serviceCategory = message.getServiceCategory();
// store to different SMS threads based on channel mappings.
- switch (channelManager.getCellBroadcastChannelResourcesKey(serviceCategory)) {
- case R.array.cmas_presidential_alerts_channels_range_strings:
- return R.string.sms_cb_sender_name_presidential;
- case R.array.emergency_alerts_channels_range_strings:
- return R.string.sms_cb_sender_name_emergency;
- case R.array.public_safety_messages_channels_range_strings:
- return R.string.sms_cb_sender_name_public_safety;
+ int resourcesKey = channelManager.getCellBroadcastChannelResourcesKey(serviceCategory);
+ if (resourcesKey == R.array.cmas_presidential_alerts_channels_range_strings) {
+ return R.string.sms_cb_sender_name_presidential;
+ } else if (resourcesKey == R.array.emergency_alerts_channels_range_strings) {
+ return R.string.sms_cb_sender_name_emergency;
+ } else if (resourcesKey == R.array.public_safety_messages_channels_range_strings) {
+ return R.string.sms_cb_sender_name_public_safety;
}
return R.string.sms_cb_sender_name_default;
@@ -356,27 +357,26 @@ public class CellBroadcastResources {
CellBroadcastChannelRange range = channelManager
.getCellBroadcastChannelRange(serviceCategory);
- switch (resourcesKey) {
- case R.array.emergency_alerts_channels_range_strings:
- return R.string.pws_other_message_identifiers;
- case R.array.cmas_presidential_alerts_channels_range_strings:
- return R.string.cmas_presidential_level_alert;
- case R.array.cmas_alert_extreme_channels_range_strings:
- return R.string.cmas_extreme_alert;
- case R.array.cmas_alerts_severe_range_strings:
- return R.string.cmas_severe_alert;
- case R.array.cmas_amber_alerts_channels_range_strings:
- return R.string.cmas_amber_alert;
- case R.array.required_monthly_test_range_strings:
- return R.string.cmas_required_monthly_test;
- case R.array.exercise_alert_range_strings:
- return R.string.cmas_exercise_alert;
- case R.array.operator_defined_alert_range_strings:
- return R.string.cmas_operator_defined_alert;
- case R.array.public_safety_messages_channels_range_strings:
- return R.string.public_safety_message;
- case R.array.state_local_test_alert_range_strings:
- return R.string.state_local_test_alert;
+ if (resourcesKey == R.array.emergency_alerts_channels_range_strings) {
+ return R.string.pws_other_message_identifiers;
+ } else if (resourcesKey == R.array.cmas_presidential_alerts_channels_range_strings) {
+ return R.string.cmas_presidential_level_alert;
+ } else if (resourcesKey == R.array.cmas_alert_extreme_channels_range_strings) {
+ return R.string.cmas_extreme_alert;
+ } else if (resourcesKey == R.array.cmas_alerts_severe_range_strings) {
+ return R.string.cmas_severe_alert;
+ } else if (resourcesKey == R.array.cmas_amber_alerts_channels_range_strings) {
+ return R.string.cmas_amber_alert;
+ } else if (resourcesKey == R.array.required_monthly_test_range_strings) {
+ return R.string.cmas_required_monthly_test;
+ } else if (resourcesKey == R.array.exercise_alert_range_strings) {
+ return R.string.cmas_exercise_alert;
+ } else if (resourcesKey == R.array.operator_defined_alert_range_strings) {
+ return R.string.cmas_operator_defined_alert;
+ } else if (resourcesKey == R.array.public_safety_messages_channels_range_strings) {
+ return R.string.public_safety_message;
+ } else if (resourcesKey == R.array.state_local_test_alert_range_strings) {
+ return R.string.state_local_test_alert;
}
if (channelManager.isEmergencyMessage(message)) {
@@ -446,4 +446,29 @@ public class CellBroadcastResources {
}
return -1;
}
+
+ /**
+ * If the carrier or country is configured to show the alert dialog title text
+ * and the alert notification title in the language matching the message, this method returns
+ * the string in that language.
+ * Otherwise this method returns the string in the device's current language
+ *
+ * @param resId resource Id
+ * @param res Resources for the subId
+ * @param languageCode the ISO-639-1 language code for this message, or null if unspecified
+ */
+ public static String overrideTranslation(Context context, int resId, Resources res,
+ String languageCode) {
+ if (!TextUtils.isEmpty(languageCode)
+ && res.getBoolean(R.bool.override_alert_title_language_to_match_message_locale)) {
+ // TODO change resources to locale from message
+ Configuration conf = res.getConfiguration();
+ conf = new Configuration(conf);
+ conf.setLocale(new Locale(languageCode));
+ Context localizedContext = context.createConfigurationContext(conf);
+ return localizedContext.getResources().getText(resId).toString();
+ } else {
+ return res.getText(resId).toString();
+ }
+ }
}