diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-10 07:12:41 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-10 07:46:22 +0000 |
commit | 8978a33f4b27a9a1cc111fafba1479793dd40451 (patch) | |
tree | 80d95bef76bb7cf0ee63a640dc94710bfb187b49 | |
parent | 4436b24f69b4fcdcfe5abf6927052682a163a02d (diff) | |
parent | 8bbba7661ad6093198edfa28bd51a2feb49d6501 (diff) | |
download | CellBroadcastReceiver-8978a33f4b27a9a1cc111fafba1479793dd40451.tar.gz |
Make change and version bump to aml_cbr_331013000 for mainline module file: apex/apex_manifest.json
Change-Id: I9a6ce3b78c43c83b3019fd6bf77c04b520997c34
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); |