blob: 29de90bb28244f1fa9ff8f3f9e6dcba1675c855b [file] [log] [blame]
Winson73bc1592016-10-18 18:47:43 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.systemui.pip;
18
19import static android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY;
20import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
21
Dave Mankoffa5d8a392019-10-10 12:21:09 -040022import android.content.Context;
Winson73bc1592016-10-18 18:47:43 -070023import android.content.pm.PackageManager;
24import android.content.res.Configuration;
Winson Chung67f5c8b2018-09-24 12:09:19 -070025import android.os.UserHandle;
26import android.os.UserManager;
Gus Prevasab336792018-11-14 13:52:20 -050027
Winson73bc1592016-10-18 18:47:43 -070028import com.android.systemui.SystemUI;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000029import com.android.systemui.broadcast.BroadcastDispatcher;
Winson Chungac52f282017-03-30 14:44:52 -070030import com.android.systemui.statusbar.CommandQueue;
Hongwei Wangebf18082019-09-26 14:25:11 -070031import com.android.systemui.wm.DisplayWindowController;
Gus Prevasab336792018-11-14 13:52:20 -050032
Winson Chung29a78652017-02-09 18:35:26 -080033import java.io.FileDescriptor;
34import java.io.PrintWriter;
35
Dave Mankoff33174bc2019-10-10 14:57:02 -040036import javax.inject.Inject;
37import javax.inject.Singleton;
38
Winson73bc1592016-10-18 18:47:43 -070039/**
40 * Controls the picture-in-picture window.
41 */
Dave Mankoff33174bc2019-10-10 14:57:02 -040042@Singleton
Winson Chungac52f282017-03-30 14:44:52 -070043public class PipUI extends SystemUI implements CommandQueue.Callbacks {
Winson73bc1592016-10-18 18:47:43 -070044
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040045 private final CommandQueue mCommandQueue;
Winson Chung29a78652017-02-09 18:35:26 -080046 private BasePipManager mPipManager;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000047 private final BroadcastDispatcher mBroadcastDispatcher;
Hongwei Wangebf18082019-09-26 14:25:11 -070048 private final DisplayWindowController mDisplayWindowController;
Winson73bc1592016-10-18 18:47:43 -070049 private boolean mSupportsPip;
Winson73bc1592016-10-18 18:47:43 -070050
Dave Mankoff33174bc2019-10-10 14:57:02 -040051 @Inject
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000052 public PipUI(Context context, CommandQueue commandQueue,
Hongwei Wangebf18082019-09-26 14:25:11 -070053 BroadcastDispatcher broadcastDispatcher,
54 DisplayWindowController displayWindowController) {
Dave Mankoffa5d8a392019-10-10 12:21:09 -040055 super(context);
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000056 mBroadcastDispatcher = broadcastDispatcher;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040057 mCommandQueue = commandQueue;
Hongwei Wangebf18082019-09-26 14:25:11 -070058 mDisplayWindowController = displayWindowController;
Dave Mankoffa5d8a392019-10-10 12:21:09 -040059 }
60
Winson73bc1592016-10-18 18:47:43 -070061 @Override
62 public void start() {
63 PackageManager pm = mContext.getPackageManager();
64 mSupportsPip = pm.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
Winson73bc1592016-10-18 18:47:43 -070065 if (!mSupportsPip) {
66 return;
67 }
Winson Chung29a78652017-02-09 18:35:26 -080068
Winson Chung853c99a2017-03-21 22:16:42 -070069 // Ensure that we are the primary user's SystemUI.
Winson Chung67f5c8b2018-09-24 12:09:19 -070070 final int processUser = UserManager.get(mContext).getUserHandle();
71 if (processUser != UserHandle.USER_SYSTEM) {
Winson Chung853c99a2017-03-21 22:16:42 -070072 throw new IllegalStateException("Non-primary Pip component not currently supported.");
73 }
74
Winson Chung29a78652017-02-09 18:35:26 -080075 mPipManager = pm.hasSystemFeature(FEATURE_LEANBACK_ONLY)
76 ? com.android.systemui.pip.tv.PipManager.getInstance()
77 : com.android.systemui.pip.phone.PipManager.getInstance();
Hongwei Wangebf18082019-09-26 14:25:11 -070078 mPipManager.initialize(mContext, mBroadcastDispatcher, mDisplayWindowController);
Winson Chungac52f282017-03-30 14:44:52 -070079
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040080 mCommandQueue.addCallback(this);
Winson Chungac52f282017-03-30 14:44:52 -070081 }
82
83 @Override
84 public void showPictureInPictureMenu() {
85 mPipManager.showPictureInPictureMenu();
Winson73bc1592016-10-18 18:47:43 -070086 }
87
Winson Chung67f5c8b2018-09-24 12:09:19 -070088 public void expandPip() {
Winson Chung2dbcf092018-10-24 13:00:41 -070089 mPipManager.expandPip();
90 }
91
92 public void hidePipMenu(Runnable onStartCallback, Runnable onEndCallback) {
93 mPipManager.hidePipMenu(onStartCallback, onEndCallback);
Winson Chung67f5c8b2018-09-24 12:09:19 -070094 }
95
Winson73bc1592016-10-18 18:47:43 -070096 @Override
97 protected void onConfigurationChanged(Configuration newConfig) {
98 super.onConfigurationChanged(newConfig);
Winson Chung29a78652017-02-09 18:35:26 -080099 if (mPipManager == null) {
Winson73bc1592016-10-18 18:47:43 -0700100 return;
101 }
Winson Chung29a78652017-02-09 18:35:26 -0800102
Winson Chung0c5a5922017-05-22 17:41:06 -0700103 mPipManager.onConfigurationChanged(newConfig);
Winson Chung29a78652017-02-09 18:35:26 -0800104 }
105
Hongwei Wang9b751802019-09-11 12:13:21 -0700106 public void setShelfHeight(boolean visible, int height) {
107 if (mPipManager == null) {
108 return;
109 }
110
111 mPipManager.setShelfHeight(visible, height);
112 }
113
Winson Chung29a78652017-02-09 18:35:26 -0800114 @Override
115 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
116 if (mPipManager == null) {
117 return;
Winson73bc1592016-10-18 18:47:43 -0700118 }
Winson Chung29a78652017-02-09 18:35:26 -0800119
120 mPipManager.dump(pw);
Winson73bc1592016-10-18 18:47:43 -0700121 }
122}