summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-16 01:01:30 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-16 01:01:30 +0000
commit4632723c454ea6f9782ff798d86775c387dc1be1 (patch)
tree103043f570516392a5a85af0b08006f6680d29e1
parent065da989f71dcbf974a56ed87c61c3e2d2b2a046 (diff)
parent0e4d25a19e3803ea85057c6ec9f290ad30dd3e32 (diff)
downloaddevelopment-android12-release.tar.gz
Snap for 7553867 from 0e4d25a19e3803ea85057c6ec9f290ad30dd3e32 to sc-releaseandroid-vts-12.0_r9android-vts-12.0_r8android-vts-12.0_r7android-vts-12.0_r6android-vts-12.0_r5android-vts-12.0_r4android-vts-12.0_r3android-vts-12.0_r2android-vts-12.0_r12android-vts-12.0_r11android-vts-12.0_r10android-vts-12.0_r1android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-platform-12.0.0_r1android-cts-12.0_r9android-cts-12.0_r8android-cts-12.0_r7android-cts-12.0_r6android-cts-12.0_r5android-cts-12.0_r4android-cts-12.0_r3android-cts-12.0_r2android-cts-12.0_r12android-cts-12.0_r11android-cts-12.0_r10android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-tests-releaseandroid12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-release
Change-Id: I0e15699a64b589eede66f2f042a14cfb6326ebb6
-rw-r--r--samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml9
-rw-r--r--samples/ApiDemos/res/values/attrs.xml4
-rw-r--r--samples/ApiDemos/res/values/styles.xml2
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java59
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java64
5 files changed, 110 insertions, 28 deletions
diff --git a/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml b/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
index 09912b5cc..57f891e8e 100644
--- a/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
+++ b/samples/ApiDemos/res/layout/picture_in_picture_auto_enter.xml
@@ -15,18 +15,21 @@
-->
<!-- Demonstrates Picture-In-Picture with auto enter enabled. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- layout params would be changed programmatically -->
- <ImageView android:id="@+id/image"
+ <com.example.android.apis.view.FixedAspectRatioImageView
+ android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
- android:src="@drawable/sample_1" />
+ android:src="@drawable/sample_1"
+ app:aspectRatio="16/9" />
<Switch android:id="@+id/source_rect_hint_toggle"
android:layout_width="wrap_content"
diff --git a/samples/ApiDemos/res/values/attrs.xml b/samples/ApiDemos/res/values/attrs.xml
index 1751ae26a..f06ebf1c0 100644
--- a/samples/ApiDemos/res/values/attrs.xml
+++ b/samples/ApiDemos/res/values/attrs.xml
@@ -53,4 +53,8 @@
<attr name="android:label" />
</declare-styleable>
<!-- END_INCLUDE(fragment_arguments) -->
+
+ <declare-styleable name="FixedAspectRatioImageView">
+ <attr name="aspectRatio" format="string" />
+ </declare-styleable>
</resources>
diff --git a/samples/ApiDemos/res/values/styles.xml b/samples/ApiDemos/res/values/styles.xml
index 2da03f041..6c301cea3 100644
--- a/samples/ApiDemos/res/values/styles.xml
+++ b/samples/ApiDemos/res/values/styles.xml
@@ -133,6 +133,8 @@
<style name="Theme.NoActionBar" parent="android:Theme.Material.Light">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
+ <!-- toggle this flag to test letterbox behavior when auto-enter-pip from landscape -->
+ <!--item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item-->
</style>
</resources>
diff --git a/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java b/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
index 05f455828..57ce6bbe7 100644
--- a/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
+++ b/samples/ApiDemos/src/com/example/android/apis/app/PictureInPictureAutoEnter.java
@@ -23,6 +23,7 @@ import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Rational;
+import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.CompoundButton;
@@ -43,7 +44,6 @@ public class PictureInPictureAutoEnter extends Activity {
private View mImageView;
private View mButtonView;
private Switch mSwitchView;
- private int mLastOrientation = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -76,43 +76,52 @@ public class PictureInPictureAutoEnter extends Activity {
@Override
public void onConfigurationChanged(Configuration newConfiguration) {
super.onConfigurationChanged(newConfiguration);
- if (!isInPictureInPictureMode()) {
- updateLayout(newConfiguration);
- }
+ updateLayout(newConfiguration);
}
private void updateLayout(Configuration configuration) {
- if (configuration.orientation == mLastOrientation) return;
- mLastOrientation = configuration.orientation;
- final boolean isLandscape = (mLastOrientation == Configuration.ORIENTATION_LANDSCAPE);
- mButtonView.setVisibility(isLandscape ? View.GONE : View.VISIBLE);
- mSwitchView.setVisibility(isLandscape ? View.GONE: View.VISIBLE);
+ final boolean isLandscape =
+ (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE);
+ final boolean isPictureInPicture = isInPictureInPictureMode();
+ mButtonView.setVisibility((isPictureInPicture || isLandscape) ? View.GONE : View.VISIBLE);
+ mSwitchView.setVisibility((isPictureInPicture || isLandscape) ? View.GONE: View.VISIBLE);
final LinearLayout.LayoutParams layoutParams;
- // Toggle the fullscreen mode as well.
- // TODO(b/188001699) switch to use insets controller once the bug is fixed.
- final View decorView = getWindow().getDecorView();
- final int systemUiNavigationBarFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
- if (isLandscape) {
+ if (isPictureInPicture) {
layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
- | systemUiNavigationBarFlags);
+ layoutParams.gravity = Gravity.NO_GRAVITY;
} else {
- layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT,
- LinearLayout.LayoutParams.WRAP_CONTENT);
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
- & ~systemUiNavigationBarFlags);
+ // Toggle the fullscreen mode as well.
+ // TODO(b/188001699) switch to use insets controller once the bug is fixed.
+ final View decorView = getWindow().getDecorView();
+ final int systemUiNavigationBarFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ if (isLandscape) {
+ layoutParams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.WRAP_CONTENT,
+ LinearLayout.LayoutParams.MATCH_PARENT);
+ layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
+ | systemUiNavigationBarFlags);
+ } else {
+ layoutParams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ layoutParams.gravity = Gravity.NO_GRAVITY;
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()
+ & ~systemUiNavigationBarFlags);
+ }
}
+ mImageView.addOnLayoutChangeListener(mOnLayoutChangeListener);
mImageView.setLayoutParams(layoutParams);
}
private void updatePictureInPictureParams() {
+ mImageView.removeOnLayoutChangeListener(mOnLayoutChangeListener);
// do not bother PictureInPictureParams update when it's already in pip mode.
if (isInPictureInPictureMode()) return;
final Rect imageViewRect = new Rect();
diff --git a/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java b/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java
new file mode 100644
index 000000000..4c147ec97
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/view/FixedAspectRatioImageView.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.apis.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.util.Rational;
+import android.widget.ImageView;
+
+import com.example.android.apis.R;
+
+/**
+ * Extended {@link ImageView} that keeps fixed aspect ratio (specified in layout file) when
+ * one of the dimension is in exact while the other one in wrap_content size mode.
+ */
+public class FixedAspectRatioImageView extends ImageView {
+ private final Rational mAspectRatio;
+
+ public FixedAspectRatioImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ final TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
+ R.styleable.FixedAspectRatioImageView, 0, 0);
+ try {
+ mAspectRatio = Rational.parseRational(
+ a.getString(R.styleable.FixedAspectRatioImageView_aspectRatio));
+ } finally {
+ a.recycle();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ final int width, height;
+ if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY
+ && MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ height = MeasureSpec.getSize(heightMeasureSpec);
+ } else if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY) {
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ height = (int) (width / mAspectRatio.floatValue());
+ } else {
+ height = MeasureSpec.getSize(heightMeasureSpec);
+ width = (int) (height * mAspectRatio.floatValue());
+ }
+ android.util.Log.d("DebugMe", "onMeasure w=" + width + " h=" + height);
+ setMeasuredDimension(width, height);
+ }
+} \ No newline at end of file