summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-10 07:12:41 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-10 07:46:22 +0000
commit8978a33f4b27a9a1cc111fafba1479793dd40451 (patch)
tree80d95bef76bb7cf0ee63a640dc94710bfb187b49
parent4436b24f69b4fcdcfe5abf6927052682a163a02d (diff)
parent8bbba7661ad6093198edfa28bd51a2feb49d6501 (diff)
downloadCellBroadcastReceiver-8978a33f4b27a9a1cc111fafba1479793dd40451.tar.gz
Make change and version bump to aml_cbr_331013000 for mainline module file: apex/apex_manifest.json
Change-Id: I9a6ce3b78c43c83b3019fd6bf77c04b520997c34
-rw-r--r--apex/apex_manifest.json2
-rw-r--r--res/values-mcc440-mnc11/config.xml2
-rw-r--r--res/values-mcc655-te/strings.xml2
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java2
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java3
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertAudioTest.java70
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java59
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastInternalReceiverTest.java6
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastListActivityTest.java33
9 files changed, 175 insertions, 4 deletions
diff --git a/apex/apex_manifest.json b/apex/apex_manifest.json
index 7e871bde0..f415ab2a2 100644
--- a/apex/apex_manifest.json
+++ b/apex/apex_manifest.json
@@ -3,5 +3,5 @@
// Placeholder module version to be replaced during build.
// Do not change!
- "version": 331012000
+ "version": 331013000
}
diff --git a/res/values-mcc440-mnc11/config.xml b/res/values-mcc440-mnc11/config.xml
index 75d4b493c..589a68caa 100644
--- a/res/values-mcc440-mnc11/config.xml
+++ b/res/values-mcc440-mnc11/config.xml
@@ -24,8 +24,6 @@
<item>0x1102:rat=gsm, type=etws_earthquake, emergency=true</item>
<!-- 0x1104 for other disasters -->
<item>0x1104:rat=gsm, type=other, emergency=true</item>
- <!-- 0xA808 for other purposes -->
- <item>0xA808:rat=gsm, type=other, emergency=true</item>
</string-array>
<string-array name="additional_cbs_channels_strings" translatable="false">
<item>0xA807:rat=gsm, emergency=false</item>
diff --git a/res/values-mcc655-te/strings.xml b/res/values-mcc655-te/strings.xml
index 5ee83183d..4cb130059 100644
--- a/res/values-mcc655-te/strings.xml
+++ b/res/values-mcc655-te/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="emergency_alert_history_title" msgid="5166801194974934794">"సెల్ ప్రసార చరిత్ర"</string>
+ <string name="emergency_alert_history_title" msgid="5166801194974934794">"సెల్ ప్రసార హిస్టరీ"</string>
</resources>
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
index 7f2adf3c8..cbfbd44ad 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
@@ -256,6 +256,8 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI
if (DBG) log("Speaking broadcast text: " + mMessageBody);
mTts.setAudioAttributes(getAlertAudioAttributes());
+ // Flush the text to speech queue
+ mTts.speak("", TextToSpeech.QUEUE_FLUSH, null, null);
res = mTts.speak(mMessageBody, 2, null, TTS_UTTERANCE_ID);
mIsTextToSpeechSpeaking = true;
setState(STATE_SPEAKING);
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
index 77d0896ef..96f0dac56 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java
@@ -517,6 +517,9 @@ public class CellBroadcastListActivity extends CollapsingToolbarBaseActivity {
CellBroadcastCursorAdapter.setIsActionMode(true);
mAdapter.notifyDataSetChanged();
updateActionIconsVisibility();
+ if (getListView().getCheckedItemCount() > 0) {
+ mode.setTitle(String.valueOf(getListView().getCheckedItemCount()));
+ }
return true;
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertAudioTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertAudioTest.java
index 86e64de8d..2bb87cb96 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertAudioTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertAudioTest.java
@@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -31,7 +32,9 @@ import android.content.res.Configuration;
import android.media.AudioAttributes;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
+import android.os.Handler;
import android.os.HandlerThread;
+import android.speech.tts.TextToSpeech;
import android.telephony.TelephonyManager;
import com.android.cellbroadcastreceiver.CellBroadcastAlertAudio;
@@ -39,8 +42,11 @@ import com.android.cellbroadcastreceiver.CellBroadcastSettings;
import org.junit.After;
import org.junit.Before;
+import org.mockito.ArgumentCaptor;
import org.mockito.MockitoAnnotations;
+import java.lang.reflect.Field;
+
public class CellBroadcastAlertAudioTest extends
CellBroadcastServiceTestCase<CellBroadcastAlertAudio> {
@@ -242,6 +248,70 @@ public class CellBroadcastAlertAudioTest extends
phoneStateListenerHandler.quit();
}
+ public void testStartServiceWithTts() throws Throwable {
+ PhoneStateListenerHandler phoneStateListenerHandler = new PhoneStateListenerHandler(
+ "testStartService",
+ () -> {
+ doReturn(AudioManager.RINGER_MODE_NORMAL).when(
+ mMockedAudioManager).getRingerMode();
+
+ Intent intent = new Intent(mContext, CellBroadcastAlertAudio.class);
+ intent.setAction(SHOW_NEW_ALERT_ACTION);
+ intent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_MESSAGE_BODY,
+ TEST_MESSAGE_BODY);
+ intent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_VIBRATION_PATTERN_EXTRA,
+ TEST_VIBRATION_PATTERN);
+ intent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_MESSAGE_LANGUAGE,
+ TEST_MESSAGE_LANGUAGE);
+ intent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_OVERRIDE_DND_EXTRA,
+ true);
+ startService(intent);
+ });
+ phoneStateListenerHandler.start();
+ waitUntilReady();
+
+ CellBroadcastAlertAudio audio = (CellBroadcastAlertAudio) getService();
+ Field fieldTts = CellBroadcastAlertAudio.class.getDeclaredField("mTts");
+ fieldTts.setAccessible(true);
+ TextToSpeech mockTts = mock(TextToSpeech.class);
+ fieldTts.set(audio, mockTts);
+
+ Field fieldTtsEngineReady = CellBroadcastAlertAudio.class
+ .getDeclaredField("mTtsEngineReady");
+ fieldTtsEngineReady.setAccessible(true);
+ fieldTtsEngineReady.set(audio, true);
+
+ Field fieldTtsLanguageSupported = CellBroadcastAlertAudio.class
+ .getDeclaredField("mTtsLanguageSupported");
+ fieldTtsLanguageSupported.setAccessible(true);
+ fieldTtsLanguageSupported.set(audio, true);
+
+ Field fieldHandler = CellBroadcastAlertAudio.class.getDeclaredField("mHandler");
+ fieldHandler.setAccessible(true);
+ Handler handler = (Handler) fieldHandler.get(audio);
+
+ Field fieldSpeaking = CellBroadcastAlertAudio.class
+ .getDeclaredField("mIsTextToSpeechSpeaking");
+ fieldSpeaking.setAccessible(true);
+ ArgumentCaptor<Integer> queueMode = ArgumentCaptor.forClass(Integer.class);
+
+ // Send empty message of ALERT_PAUSE_FINISHED to trigger tts
+ handler.sendEmptyMessage(1001);
+ for (int i = 0; i < 10; i++) {
+ if (fieldSpeaking.getBoolean(audio)) {
+ break;
+ }
+ Thread.sleep(100);
+ }
+
+ verify(mockTts, times(2)).speak(any(), queueMode.capture(), any(), any());
+ assertEquals(TextToSpeech.QUEUE_FLUSH, queueMode.getAllValues().get(0).intValue());
+ assertEquals(2, queueMode.getAllValues().get(1).intValue());
+
+ phoneStateListenerHandler.quit();
+ waitUntilReady();
+ }
+
/**
* When an alert is triggered while an alert is already happening, the system needs to stop
* the previous alert.
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
index 65f4d1d93..79ce9fb81 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
@@ -16,6 +16,8 @@
package com.android.cellbroadcastreceiver.unit;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
@@ -24,9 +26,16 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.app.ActivityManager;
+import android.app.ContentProviderHolder;
+import android.app.IActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.IContentProvider;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ProviderInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
@@ -38,9 +47,12 @@ import android.os.PowerManager;
import android.telephony.SmsCbMessage;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.util.Singleton;
+import android.view.IWindowManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManagerGlobal;
import android.widget.ImageView;
import android.widget.TextView;
@@ -57,6 +69,7 @@ import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.lang.reflect.Field;
import java.util.ArrayList;
public class CellBroadcastAlertDialogTest extends
@@ -71,6 +84,15 @@ public class CellBroadcastAlertDialogTest extends
@Mock
private IThermalService.Stub mMockedThermalService;
+ @Mock
+ private IActivityManager.Stub mMockedActivityManager;
+
+ @Mock
+ IWindowManager.Stub mWindowManagerService;
+
+ @Captor
+ private ArgumentCaptor<Integer> mFlags;
+
@Captor
private ArgumentCaptor<Integer> mInt;
@@ -89,6 +111,8 @@ public class CellBroadcastAlertDialogTest extends
private ArrayList<SmsCbMessage> mMessageList;
+ MockedServiceManager mMockedActivityManagerHelper;
+
@Override
protected Intent createActivityIntent() {
mMessageList = new ArrayList<>(1);
@@ -120,11 +144,33 @@ public class CellBroadcastAlertDialogTest extends
SubscriptionInfo mockSubInfo = mock(SubscriptionInfo.class);
doReturn(mockSubInfo).when(mockSubManager).getActiveSubscriptionInfo(anyInt());
+ ProviderInfo providerInfo = new ProviderInfo();
+ providerInfo.authority = "test";
+ providerInfo.applicationInfo = new ApplicationInfo();
+ providerInfo.applicationInfo.uid = 999;
+ ContentProviderHolder holder = new ContentProviderHolder(providerInfo);
+ doReturn(holder).when(mMockedActivityManager)
+ .getContentProvider(any(), any(), any(), anyInt(), anyBoolean());
+ holder.provider = mock(IContentProvider.class);
+
+ Singleton<IActivityManager> activityManagerSingleton = new Singleton<IActivityManager>() {
+ @Override
+ protected IActivityManager create() {
+ return mMockedActivityManager;
+ }
+ };
+
+ mMockedActivityManagerHelper = new MockedServiceManager();
+ mMockedActivityManagerHelper.replaceService("window", mWindowManagerService);
+ mMockedActivityManagerHelper.replaceInstance(ActivityManager.class,
+ "IActivityManagerSingleton", null, activityManagerSingleton);
+
CellBroadcastSettings.resetResourcesCache();
}
@After
public void tearDown() throws Exception {
+ mMockedActivityManagerHelper.restoreAllServices();
super.tearDown();
}
@@ -180,6 +226,19 @@ public class CellBroadcastAlertDialogTest extends
b.getCharSequence(Notification.EXTRA_TITLE).toString()));
assertEquals(CellBroadcastAlertServiceTest.createMessage(98235).getMessageBody(),
b.getCharSequence(Notification.EXTRA_TEXT));
+
+ verify(mMockedActivityManager, times(2))
+ .getIntentSenderWithFeature(anyInt(), any(), any(), any(), any(), anyInt(),
+ any(), any(), mFlags.capture(), any(), anyInt());
+
+ assertTrue((PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)
+ == mFlags.getAllValues().get(0));
+ assertTrue((PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)
+ == mFlags.getAllValues().get(1));
+
+ Field field = ((Class) WindowManagerGlobal.class).getDeclaredField("sWindowManagerService");
+ field.setAccessible(true);
+ field.set(null, null);
}
public void testDoNotAddToNotificationOnStop() throws Throwable {
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastInternalReceiverTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastInternalReceiverTest.java
index e89e31f86..7bb0cdef8 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastInternalReceiverTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastInternalReceiverTest.java
@@ -32,6 +32,7 @@ import android.os.UserManager;
import com.android.cellbroadcastreceiver.CellBroadcastInternalReceiver;
import com.android.cellbroadcastreceiver.CellBroadcastReceiver;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -73,4 +74,9 @@ public class CellBroadcastInternalReceiverTest extends CellBroadcastTest {
verify(mReceiver).startConfigServiceToEnableChannels(any());
}
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastListActivityTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastListActivityTest.java
index 7e577e8ff..7e18a94ab 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastListActivityTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastListActivityTest.java
@@ -58,6 +58,7 @@ import android.os.UserManager;
import android.provider.Telephony;
import android.view.ActionMode;
import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
@@ -266,6 +267,38 @@ public class CellBroadcastListActivityTest extends
stopActivity();
}
+ public void testOnActionTitleOnMultiSelect() throws Throwable {
+ CellBroadcastListActivity activity = startActivity();
+ assertNotNull(activity.mListFragment);
+
+ activity.mListFragment.getListView().setItemChecked(0, true);
+ activity.mListFragment.getListView().setItemChecked(1, true);
+
+ ActionMode mode = mock(ActionMode.class);
+ activity.mListFragment.getMultiChoiceModeListener().onItemCheckedStateChanged(
+ mode, 0, 0, true);
+ ArgumentCaptor<CharSequence> title = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mode, atLeastOnce()).setTitle(title.capture());
+ assertEquals("title should be the number of selected items",
+ title.getValue(), "2");
+
+ activity.mListFragment.getListView().setItemChecked(1, false);
+ activity.mListFragment.getMultiChoiceModeListener().onItemCheckedStateChanged(
+ mode, 0, 0, true);
+ verify(mode, atLeastOnce()).setTitle(title.capture());
+ assertEquals("title should be the number of selected items",
+ title.getValue(), "1");
+
+ activity.mListFragment.getListView().setItemChecked(1, true);
+ Menu menu = mock(Menu.class);
+ MenuInflater inflator = mock(MenuInflater.class);
+ doReturn(inflator).when(mode).getMenuInflater();
+ activity.mListFragment.getMultiChoiceModeListener().onCreateActionMode(mode, menu);
+ verify(mode, atLeastOnce()).setTitle(title.capture());
+ assertEquals("title should be the number of selected items",
+ title.getValue(), "2");
+ }
+
public void testOnActionItemClickedDeleteOnMultiSelect() throws Throwable {
CellBroadcastListActivity activity = startActivity();
assertNotNull(activity.mListFragment);