Merge "Replace getPhoneCount with getMaxPhoneCount upon object allocation."
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index ff15ada..b875592 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -266,6 +266,13 @@
             return false;
         }
 
+        // Check if message body is empty
+        String msgBody = cbm.getMessageBody();
+        if (msgBody == null || msgBody.length() == 0) {
+            Log.e(TAG, "Empty content or Unsupported charset");
+            return false;
+        }
+
         // Check if we need to perform language filtering.
         CellBroadcastChannelRange range = CellBroadcastChannelManager
                 .getCellBroadcastChannelRangeFromMessage(getApplicationContext(), cbm);
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index a426fe4..82fadf5 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -151,6 +151,9 @@
                 // Sets the default values of the shared preference if there isn't any.
                 PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
 
+                sp.edit().putBoolean(CellBroadcastSettings.KEY_USE_FULL_VOLUME_SETTINGS_CHANGED,
+                        false).apply();
+
                 // If the device is in test harness mode, we need to disable emergency alert by
                 // default.
                 if (ActivityManager.isRunningInUserTestHarness()) {
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
index d242d8a..3bd7376 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
@@ -22,6 +22,7 @@
 import android.app.backup.BackupManager;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.os.Bundle;
@@ -36,6 +37,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceFragment;
+import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 import androidx.preference.TwoStatePreference;
 
@@ -71,6 +73,9 @@
     // Always play at full volume when playing the alert sound.
     public static final String KEY_USE_FULL_VOLUME = "use_full_volume";
 
+    public static final String KEY_USE_FULL_VOLUME_SETTINGS_CHANGED =
+            "use_full_volume_settings_changed";
+
     // Preference category for emergency alert and CMAS settings.
     public static final String KEY_CATEGORY_EMERGENCY_ALERTS = "category_emergency_alerts";
 
@@ -247,7 +252,7 @@
                         findPreference(KEY_CATEGORY_EMERGENCY_ALERTS);
             }
 
-
+            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
             mDisableSevereWhenExtremeDisabled = isFeatureEnabled(getContext(),
                     CarrierConfigManager.KEY_DISABLE_SEVERE_WHEN_EXTREME_DISABLED_BOOL, true);
 
@@ -403,6 +408,19 @@
                         startConfigServiceListener);
             }
 
+            if (mFullVolumeCheckBox != null
+                    && !sp.getBoolean(KEY_USE_FULL_VOLUME_SETTINGS_CHANGED, false)) {
+                // If the user hasn't changed this settings yet, use the default settings from
+                // resource overlay.
+                mFullVolumeCheckBox.setChecked(res.getBoolean(R.bool.use_full_volume));
+                mFullVolumeCheckBox.setOnPreferenceChangeListener(
+                        (pref, newValue) -> {
+                            sp.edit().putBoolean(KEY_USE_FULL_VOLUME_SETTINGS_CHANGED,
+                                    true).apply();
+                            return true;
+                        });
+            }
+
             if (mAlertHistory != null) {
                 mAlertHistory.setOnPreferenceClickListener(
                         new Preference.OnPreferenceClickListener() {
@@ -421,12 +439,12 @@
             return !CellBroadcastChannelManager.getCellBroadcastChannelRanges(
                     this.getContext(), R.array.required_monthly_test_range_strings).isEmpty()
                     || !CellBroadcastChannelManager.getCellBroadcastChannelRanges(
-                            this.getContext(), R.array.exercise_alert_range_strings).isEmpty()
+                    this.getContext(), R.array.exercise_alert_range_strings).isEmpty()
                     || !CellBroadcastChannelManager.getCellBroadcastChannelRanges(
-                            this.getContext(), R.array.operator_defined_alert_range_strings)
+                    this.getContext(), R.array.operator_defined_alert_range_strings)
                     .isEmpty()
                     || !CellBroadcastChannelManager.getCellBroadcastChannelRanges(
-                            this.getContext(), R.array.etws_test_alerts_range_strings).isEmpty();
+                    this.getContext(), R.array.etws_test_alerts_range_strings).isEmpty();
         }
 
         private void initReminderIntervalList() {