Merge "Integrate custom close action in ApiDemos for PiP" into tm-dev am: a6fffe1eb1
Original change: https://googleplex-android-review.googlesource.com/c/platform/development/+/17716502 Change-Id: Ica4c1a5658e2325df1371d822ac1c7bfa2dbe5c4 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
26
samples/ApiDemos/res/drawable/ic_call_end.xml
Normal file
26
samples/ApiDemos/res/drawable/ic_call_end.xml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (C) 2022 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M12,9c-1.6,0 -3.15,0.25 -4.6,0.72v3.1c0,0.39 -0.23,0.74 -0.56,0.9 -0.98,0.49 -1.87,1.12 -2.66,1.85 -0.18,0.18 -0.43,0.28 -0.7,0.28 -0.28,0 -0.53,-0.11 -0.71,-0.29L0.29,13.08c-0.18,-0.17 -0.29,-0.42 -0.29,-0.7 0,-0.28 0.11,-0.53 0.29,-0.71C3.34,8.78 7.46,7 12,7s8.66,1.78 11.71,4.67c0.18,0.18 0.29,0.43 0.29,0.71 0,0.28 -0.11,0.53 -0.29,0.71l-2.48,2.48c-0.18,0.18 -0.43,0.29 -0.71,0.29 -0.27,0 -0.52,-0.11 -0.7,-0.28 -0.79,-0.74 -1.69,-1.36 -2.67,-1.85 -0.33,-0.16 -0.56,-0.5 -0.56,-0.9v-3.1C15.15,9.25 13.6,9 12,9z"
|
||||||
|
android:fillColor="@android:color/white"/>
|
||||||
|
</vector>
|
||||||
@@ -68,6 +68,7 @@
|
|||||||
<string name="activity_picture_in_picture_seamless_resize_toggle">Enable seamless resize</string>
|
<string name="activity_picture_in_picture_seamless_resize_toggle">Enable seamless resize</string>
|
||||||
<string name="enter_content_pip">Enter content PiP</string>
|
<string name="enter_content_pip">Enter content PiP</string>
|
||||||
<string name="enter_picture_in_picture">Manually enter PiP</string>
|
<string name="enter_picture_in_picture">Manually enter PiP</string>
|
||||||
|
<string name="action_custom_close">Close PiP</string>
|
||||||
<string name="label_current_position">Current position</string>
|
<string name="label_current_position">Current position</string>
|
||||||
<string name="label_exit_position">Exit position</string>
|
<string name="label_exit_position">Exit position</string>
|
||||||
<string name="label_position_start">Start</string>
|
<string name="label_position_start">Start</string>
|
||||||
|
|||||||
@@ -16,12 +16,21 @@
|
|||||||
|
|
||||||
package com.example.android.apis.app;
|
package com.example.android.apis.app;
|
||||||
|
|
||||||
|
import static android.app.PendingIntent.FLAG_IMMUTABLE;
|
||||||
|
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.app.PictureInPictureParams;
|
import android.app.PictureInPictureParams;
|
||||||
|
import android.app.RemoteAction;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Icon;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
@@ -38,6 +47,9 @@ import android.widget.Switch;
|
|||||||
|
|
||||||
import com.example.android.apis.R;
|
import com.example.android.apis.R;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class PictureInPicture extends Activity {
|
public class PictureInPicture extends Activity {
|
||||||
private static final String EXTRA_ENABLE_AUTO_PIP = "auto_pip";
|
private static final String EXTRA_ENABLE_AUTO_PIP = "auto_pip";
|
||||||
private static final String EXTRA_ENABLE_SOURCE_RECT_HINT = "source_rect_hint";
|
private static final String EXTRA_ENABLE_SOURCE_RECT_HINT = "source_rect_hint";
|
||||||
@@ -46,6 +58,18 @@ public class PictureInPicture extends Activity {
|
|||||||
|
|
||||||
private static final int TABLET_BREAK_POINT_DP = 700;
|
private static final int TABLET_BREAK_POINT_DP = 700;
|
||||||
|
|
||||||
|
private static final String ACTION_CUSTOM_CLOSE = "demo.pip.custom_close";
|
||||||
|
private final BroadcastReceiver mRemoteActionReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
switch (intent.getAction()) {
|
||||||
|
case ACTION_CUSTOM_CLOSE:
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public static final String KEY_ON_STOP_RECEIVER = "on_stop_receiver";
|
public static final String KEY_ON_STOP_RECEIVER = "on_stop_receiver";
|
||||||
private final ResultReceiver mOnStopReceiver = new ResultReceiver(
|
private final ResultReceiver mOnStopReceiver = new ResultReceiver(
|
||||||
new Handler(Looper.myLooper())) {
|
new Handler(Looper.myLooper())) {
|
||||||
@@ -75,6 +99,8 @@ public class PictureInPicture extends Activity {
|
|||||||
private Switch mSourceRectHintToggle;
|
private Switch mSourceRectHintToggle;
|
||||||
private Switch mSeamlessResizeToggle;
|
private Switch mSeamlessResizeToggle;
|
||||||
private RadioGroup mCurrentPositionGroup;
|
private RadioGroup mCurrentPositionGroup;
|
||||||
|
private List<RemoteAction> mPipActions;
|
||||||
|
private RemoteAction mCloseAction;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -115,6 +141,12 @@ public class PictureInPicture extends Activity {
|
|||||||
updateLayout(getResources().getConfiguration());
|
updateLayout(getResources().getConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
setupPipActions();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onUserLeaveHint() {
|
protected void onUserLeaveHint() {
|
||||||
// Only used when auto PiP is disabled. This is to simulate the behavior that an app
|
// Only used when auto PiP is disabled. This is to simulate the behavior that an app
|
||||||
@@ -141,6 +173,12 @@ public class PictureInPicture extends Activity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
unregisterReceiver(mRemoteActionReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is what we expect most host Activity would do to trigger content PiP.
|
* This is what we expect most host Activity would do to trigger content PiP.
|
||||||
* - Get the bounds of the view to be transferred to content PiP
|
* - Get the bounds of the view to be transferred to content PiP
|
||||||
@@ -179,6 +217,23 @@ public class PictureInPicture extends Activity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupPipActions() {
|
||||||
|
final IntentFilter remoteActionFilter = new IntentFilter();
|
||||||
|
remoteActionFilter.addAction(ACTION_CUSTOM_CLOSE);
|
||||||
|
registerReceiver(mRemoteActionReceiver, remoteActionFilter);
|
||||||
|
final Intent intent = new Intent(ACTION_CUSTOM_CLOSE).setPackage(getPackageName());
|
||||||
|
mCloseAction = new RemoteAction(
|
||||||
|
Icon.createWithResource(this, R.drawable.ic_call_end),
|
||||||
|
getString(R.string.action_custom_close),
|
||||||
|
getString(R.string.action_custom_close),
|
||||||
|
PendingIntent.getBroadcast(this, 0 /* requestCode */, intent,
|
||||||
|
FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE));
|
||||||
|
|
||||||
|
// Add close action as a regular PiP action
|
||||||
|
mPipActions = new ArrayList<>(1);
|
||||||
|
mPipActions.add(mCloseAction);
|
||||||
|
}
|
||||||
|
|
||||||
private void setupPictureInPictureLayout() {
|
private void setupPictureInPictureLayout() {
|
||||||
mControlGroup.setVisibility(View.GONE);
|
mControlGroup.setVisibility(View.GONE);
|
||||||
final LinearLayout.LayoutParams imageLp = new LinearLayout.LayoutParams(
|
final LinearLayout.LayoutParams imageLp = new LinearLayout.LayoutParams(
|
||||||
@@ -284,7 +339,9 @@ public class PictureInPicture extends Activity {
|
|||||||
.setSourceRectHint(mSourceRectHintToggle.isChecked()
|
.setSourceRectHint(mSourceRectHintToggle.isChecked()
|
||||||
? new Rect(imageViewRect) : null)
|
? new Rect(imageViewRect) : null)
|
||||||
.setSeamlessResizeEnabled(mSeamlessResizeToggle.isChecked())
|
.setSeamlessResizeEnabled(mSeamlessResizeToggle.isChecked())
|
||||||
.setAspectRatio(new Rational(imageViewRect.width(), imageViewRect.height()));
|
.setAspectRatio(new Rational(imageViewRect.width(), imageViewRect.height()))
|
||||||
|
.setActions(mPipActions)
|
||||||
|
.setCloseAction(mCloseAction);
|
||||||
setPictureInPictureParams(builder.build());
|
setPictureInPictureParams(builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user