summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/extservices/apex_manifest.json2
-rw-r--r--apex/permission/apex_manifest.json2
-rw-r--r--apex/statsd/apex_manifest.json2
-rw-r--r--core/java/android/app/Notification.java40
-rw-r--r--packages/SettingsLib/res/drawable/ic_media_display_device.xml16
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java21
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java29
-rw-r--r--packages/Tethering/apex/manifest.json2
-rw-r--r--services/core/java/com/android/server/wm/KeyguardController.java7
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java7
10 files changed, 93 insertions, 35 deletions
diff --git a/apex/extservices/apex_manifest.json b/apex/extservices/apex_manifest.json
index b64409fc93c4..e6eac1775a59 100644
--- a/apex/extservices/apex_manifest.json
+++ b/apex/extservices/apex_manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.extservices",
- "version": 300900200
+ "version": 300900300
}
diff --git a/apex/permission/apex_manifest.json b/apex/permission/apex_manifest.json
index dc8972d49ab5..27aa8bfb18b2 100644
--- a/apex/permission/apex_manifest.json
+++ b/apex/permission/apex_manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.permission",
- "version": 300900200
+ "version": 300900300
}
diff --git a/apex/statsd/apex_manifest.json b/apex/statsd/apex_manifest.json
index 37e3e92ce630..f4af92b31127 100644
--- a/apex/statsd/apex_manifest.json
+++ b/apex/statsd/apex_manifest.json
@@ -1,5 +1,5 @@
{
"name": "com.android.os.statsd",
- "version": 300900200
+ "version": 300900300
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 0e3f35e358c0..79d2a8102358 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -96,9 +96,9 @@ import com.android.internal.util.ContrastColorUtil;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -1620,7 +1620,7 @@ public class Notification implements Parcelable
* of non-textual RemoteInputs do not access these remote inputs.
*/
public RemoteInput[] getDataOnlyRemoteInputs() {
- return (RemoteInput[]) mExtras.getParcelableArray(EXTRA_DATA_ONLY_INPUTS);
+ return getParcelableArrayFromBundle(mExtras, EXTRA_DATA_ONLY_INPUTS, RemoteInput.class);
}
/**
@@ -1802,8 +1802,8 @@ public class Notification implements Parcelable
checkContextualActionNullFields();
ArrayList<RemoteInput> dataOnlyInputs = new ArrayList<>();
- RemoteInput[] previousDataInputs =
- (RemoteInput[]) mExtras.getParcelableArray(EXTRA_DATA_ONLY_INPUTS);
+ RemoteInput[] previousDataInputs = getParcelableArrayFromBundle(
+ mExtras, EXTRA_DATA_ONLY_INPUTS, RemoteInput.class);
if (previousDataInputs != null) {
for (RemoteInput input : previousDataInputs) {
dataOnlyInputs.add(input);
@@ -5368,8 +5368,8 @@ public class Notification implements Parcelable
big.setViewVisibility(R.id.actions_container, View.GONE);
}
- RemoteInputHistoryItem[] replyText = (RemoteInputHistoryItem[])
- mN.extras.getParcelableArray(EXTRA_REMOTE_INPUT_HISTORY_ITEMS);
+ RemoteInputHistoryItem[] replyText = getParcelableArrayFromBundle(
+ mN.extras, EXTRA_REMOTE_INPUT_HISTORY_ITEMS, RemoteInputHistoryItem.class);
if (validRemoteInput && replyText != null && replyText.length > 0
&& !TextUtils.isEmpty(replyText[0].getText())
&& p.maxRemoteInputHistory > 0) {
@@ -8155,8 +8155,9 @@ public class Notification implements Parcelable
if (mBuilder.mActions.size() > 0) {
maxRows--;
}
- RemoteInputHistoryItem[] remoteInputHistory = (RemoteInputHistoryItem[])
- mBuilder.mN.extras.getParcelableArray(EXTRA_REMOTE_INPUT_HISTORY_ITEMS);
+ RemoteInputHistoryItem[] remoteInputHistory = getParcelableArrayFromBundle(
+ mBuilder.mN.extras, EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
+ RemoteInputHistoryItem.class);
if (remoteInputHistory != null
&& remoteInputHistory.length > NUMBER_OF_HISTORY_ALLOWED_UNTIL_REDUCTION) {
// Let's remove some messages to make room for the remote input history.
@@ -9579,8 +9580,8 @@ public class Notification implements Parcelable
mFlags = wearableBundle.getInt(KEY_FLAGS, DEFAULT_FLAGS);
mDisplayIntent = wearableBundle.getParcelable(KEY_DISPLAY_INTENT);
- Notification[] pages = getNotificationArrayFromBundle(
- wearableBundle, KEY_PAGES);
+ Notification[] pages = getParcelableArrayFromBundle(
+ wearableBundle, KEY_PAGES, Notification.class);
if (pages != null) {
Collections.addAll(mPages, pages);
}
@@ -10838,17 +10839,22 @@ public class Notification implements Parcelable
}
/**
- * Get an array of Notification objects from a parcelable array bundle field.
+ * Get an array of Parcelable objects from a parcelable array bundle field.
* Update the bundle to have a typed array so fetches in the future don't need
* to do an array copy.
*/
- private static Notification[] getNotificationArrayFromBundle(Bundle bundle, String key) {
- Parcelable[] array = bundle.getParcelableArray(key);
- if (array instanceof Notification[] || array == null) {
- return (Notification[]) array;
+ @Nullable
+ private static <T extends Parcelable> T[] getParcelableArrayFromBundle(
+ Bundle bundle, String key, Class<T> itemClass) {
+ final Parcelable[] array = bundle.getParcelableArray(key);
+ final Class<?> arrayClass = Array.newInstance(itemClass, 0).getClass();
+ if (arrayClass.isInstance(array) || array == null) {
+ return (T[]) array;
+ }
+ final T[] typedArray = (T[]) Array.newInstance(itemClass, array.length);
+ for (int i = 0; i < array.length; i++) {
+ typedArray[i] = (T) array[i];
}
- Notification[] typedArray = Arrays.copyOf(array, array.length,
- Notification[].class);
bundle.putParcelableArray(key, typedArray);
return typedArray;
}
diff --git a/packages/SettingsLib/res/drawable/ic_media_display_device.xml b/packages/SettingsLib/res/drawable/ic_media_display_device.xml
index 78b4e2a23d45..54fec782c7d1 100644
--- a/packages/SettingsLib/res/drawable/ic_media_display_device.xml
+++ b/packages/SettingsLib/res/drawable/ic_media_display_device.xml
@@ -15,16 +15,12 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14dp"
- android:height="11dp"
- android:viewportWidth="14"
- android:viewportHeight="11"
- android:tint="?android:attr/colorControlNormal">
+ android:width="18dp"
+ android:height="18dp"
+ android:viewportWidth="18"
+ android:viewportHeight="18">
<path
- android:pathData="M10,10v1H4v-1H1.5A1.5,1.5 0,0 1,0 8.5v-7A1.5,1.5 0,
- 0 1,1.5 0h11A1.5,1.5 0,0 1,14 1.5v7a1.5,1.5 0,0 1,-1.5 1.5H10zM1.5,
- 1a0.5,0.5 0,0 0,-0.5 0.5v7a0.5,0.5 0,0 0,0.5 0.5h11a0.5,0.5 0,0 0,
- 0.5 -0.5v-7a0.5,0.5 0,0 0,-0.5 -0.5h-11z"
- android:fillColor="#000000"
+ android:pathData="M12,14V15H6V14H3.5C3.1022,14 2.7206,13.842 2.4393,13.5607C2.158,13.2794 2,12.8978 2,12.5V5.5C2,5.1022 2.158,4.7206 2.4393,4.4393C2.7206,4.158 3.1022,4 3.5,4H14.5C14.8978,4 15.2794,4.158 15.5607,4.4393C15.842,4.7206 16,5.1022 16,5.5V12.5C16,12.8978 15.842,13.2794 15.5607,13.5607C15.2794,13.842 14.8978,14 14.5,14H12ZM3.5,5C3.3674,5 3.2402,5.0527 3.1465,5.1465C3.0527,5.2402 3,5.3674 3,5.5V12.5C3,12.6326 3.0527,12.7598 3.1465,12.8536C3.2402,12.9473 3.3674,13 3.5,13H14.5C14.6326,13 14.7598,12.9473 14.8536,12.8536C14.9473,12.7598 15,12.6326 15,12.5V5.5C15,5.3674 14.9473,5.2402 14.8536,5.1465C14.7598,5.0527 14.6326,5 14.5,5H3.5Z"
+ android:fillColor="#5F6368"
android:fillType="evenOdd"/>
</vector> \ No newline at end of file
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
index ea71e52dc9c9..949b2456042c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
@@ -15,6 +15,8 @@
*/
package com.android.settingslib.media;
+import static android.media.MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK;
+import static android.media.MediaRoute2Info.FEATURE_REMOTE_VIDEO_PLAYBACK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
@@ -29,6 +31,8 @@ import androidx.annotation.VisibleForTesting;
import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothUtils;
+import java.util.List;
+
/**
* InfoMediaDevice extends MediaDevice to represents wifi device.
*/
@@ -62,7 +66,7 @@ public class InfoMediaDevice extends MediaDevice {
@Override
public Drawable getIconWithoutBackground() {
- return mContext.getDrawable(getDrawableResId());
+ return mContext.getDrawable(getDrawableResIdByFeature());
}
@VisibleForTesting
@@ -83,6 +87,21 @@ public class InfoMediaDevice extends MediaDevice {
return resId;
}
+ @VisibleForTesting
+ int getDrawableResIdByFeature() {
+ int resId;
+ final List<String> features = mRouteInfo.getFeatures();
+ if (features.contains(FEATURE_REMOTE_GROUP_PLAYBACK)) {
+ resId = R.drawable.ic_media_group_device;
+ } else if (features.contains(FEATURE_REMOTE_VIDEO_PLAYBACK)) {
+ resId = R.drawable.ic_media_display_device;
+ } else {
+ resId = R.drawable.ic_media_speaker_device;
+ }
+
+ return resId;
+ }
+
@Override
public String getId() {
return MediaDeviceUtils.getId(mRouteInfo);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
index 49b236a2188f..c45b7f333fa1 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
@@ -16,6 +16,9 @@
package com.android.settingslib.media;
+import static android.media.MediaRoute2Info.FEATURE_REMOTE_AUDIO_PLAYBACK;
+import static android.media.MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK;
+import static android.media.MediaRoute2Info.FEATURE_REMOTE_VIDEO_PLAYBACK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
@@ -38,6 +41,8 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.ArrayList;
+
@RunWith(RobolectricTestRunner.class)
public class InfoMediaDeviceTest {
@@ -107,4 +112,28 @@ public class InfoMediaDeviceTest {
assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_group_device);
}
+
+ @Test
+ public void getDrawableResIdByFeature_returnCorrectResId() {
+ final ArrayList<String> features = new ArrayList<>();
+ features.add(FEATURE_REMOTE_VIDEO_PLAYBACK);
+ when(mRouteInfo.getFeatures()).thenReturn(features);
+
+ assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
+ R.drawable.ic_media_display_device);
+
+ features.clear();
+ features.add(FEATURE_REMOTE_AUDIO_PLAYBACK);
+ when(mRouteInfo.getFeatures()).thenReturn(features);
+
+ assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
+ R.drawable.ic_media_speaker_device);
+
+ features.clear();
+ features.add(FEATURE_REMOTE_GROUP_PLAYBACK);
+ when(mRouteInfo.getFeatures()).thenReturn(features);
+
+ assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
+ R.drawable.ic_media_group_device);
+ }
}
diff --git a/packages/Tethering/apex/manifest.json b/packages/Tethering/apex/manifest.json
index 60be19b88b13..94508a3d357f 100644
--- a/packages/Tethering/apex/manifest.json
+++ b/packages/Tethering/apex/manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.tethering",
- "version": 300900200
+ "version": 300900300
}
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index 4c10d5819c10..9c535e4a41d7 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -133,10 +133,11 @@ class KeyguardController {
* Update the Keyguard showing state.
*/
void setKeyguardShown(boolean keyguardShowing, boolean aodShowing) {
- // If keyguard is going away, but SystemUI aborted the transition, need to reset state.
- final boolean keyguardChanged = keyguardShowing != mKeyguardShowing
- || mKeyguardGoingAway && keyguardShowing;
final boolean aodChanged = aodShowing != mAodShowing;
+ // If keyguard is going away, but SystemUI aborted the transition, need to reset state.
+ // Do not reset keyguardChanged status if this is aodChanged.
+ final boolean keyguardChanged = (keyguardShowing != mKeyguardShowing)
+ || (mKeyguardGoingAway && keyguardShowing && !aodChanged);
if (!keyguardChanged && !aodChanged) {
return;
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index b65020d7eaa6..837fafec1634 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -26,6 +26,7 @@ import static android.app.WindowConfiguration.isSplitScreenWindowingMode;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.os.PowerManager.DRAW_WAKE_LOCK;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
+import static android.view.InsetsState.ITYPE_IME;
import static android.view.SurfaceControl.Transaction;
import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@@ -757,6 +758,12 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
oldRotation = mPendingSeamlessRotate.getOldRotation();
}
+ // Skip performing seamless rotation when the controlled insets is IME with visible state.
+ if (mControllableInsetProvider != null
+ && mControllableInsetProvider.getSource().getType() == ITYPE_IME) {
+ return;
+ }
+
if (mForceSeamlesslyRotate || requested) {
if (mControllableInsetProvider != null) {
mControllableInsetProvider.startSeamlessRotation();