blob: b29c5b07c765b13e02a3c2425ae613610e80d548 [file] [log] [blame]
Jason Monk361915c2017-03-21 20:33:59 -04001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.systemui.globalactions;
16
Beverlyae79ab92017-12-11 09:20:02 -050017import android.content.Context;
18import android.os.RemoteException;
19import android.os.ServiceManager;
20
Jason Monk361915c2017-03-21 20:33:59 -040021import com.android.internal.statusbar.IStatusBarService;
Jason Monk361915c2017-03-21 20:33:59 -040022import com.android.systemui.SystemUI;
23import com.android.systemui.plugins.GlobalActions;
24import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
25import com.android.systemui.statusbar.CommandQueue;
26import com.android.systemui.statusbar.CommandQueue.Callbacks;
Matt Pietal677981d2020-04-24 14:38:32 -040027import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
Jason Monk361915c2017-03-21 20:33:59 -040028import com.android.systemui.statusbar.policy.ExtensionController;
29import com.android.systemui.statusbar.policy.ExtensionController.Extension;
30
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040031import javax.inject.Inject;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050032import javax.inject.Provider;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040033import javax.inject.Singleton;
34
35/**
36 * Manages power menu plugins and communicates power menu actions to the StatusBar.
37 */
38@Singleton
Jason Monk361915c2017-03-21 20:33:59 -040039public class GlobalActionsComponent extends SystemUI implements Callbacks, GlobalActionsManager {
40
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040041 private final CommandQueue mCommandQueue;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050042 private final ExtensionController mExtensionController;
43 private final Provider<GlobalActions> mGlobalActionsProvider;
Charles He9851a8d2017-10-10 17:31:30 +010044 private GlobalActions mPlugin;
Jason Monk361915c2017-03-21 20:33:59 -040045 private Extension<GlobalActions> mExtension;
46 private IStatusBarService mBarService;
Matt Pietal677981d2020-04-24 14:38:32 -040047 private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
Jason Monk361915c2017-03-21 20:33:59 -040048
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040049 @Inject
Dave Mankoffc88a2d72020-01-10 15:59:31 -050050 public GlobalActionsComponent(Context context, CommandQueue commandQueue,
51 ExtensionController extensionController,
Matt Pietal677981d2020-04-24 14:38:32 -040052 Provider<GlobalActions> globalActionsProvider,
53 StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
Dave Mankoffa5d8a392019-10-10 12:21:09 -040054 super(context);
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040055 mCommandQueue = commandQueue;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050056 mExtensionController = extensionController;
57 mGlobalActionsProvider = globalActionsProvider;
Matt Pietal677981d2020-04-24 14:38:32 -040058 mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
Dave Mankoffa5d8a392019-10-10 12:21:09 -040059 }
60
Jason Monk361915c2017-03-21 20:33:59 -040061 @Override
62 public void start() {
63 mBarService = IStatusBarService.Stub.asInterface(
64 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
Dave Mankoffc88a2d72020-01-10 15:59:31 -050065 mExtension = mExtensionController.newExtension(GlobalActions.class)
Jason Monk361915c2017-03-21 20:33:59 -040066 .withPlugin(GlobalActions.class)
Dave Mankoffc88a2d72020-01-10 15:59:31 -050067 .withDefault(mGlobalActionsProvider::get)
Charles He9851a8d2017-10-10 17:31:30 +010068 .withCallback(this::onExtensionCallback)
Jason Monk361915c2017-03-21 20:33:59 -040069 .build();
Charles He9851a8d2017-10-10 17:31:30 +010070 mPlugin = mExtension.get();
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040071 mCommandQueue.addCallback(this);
Jason Monk361915c2017-03-21 20:33:59 -040072 }
73
Charles He9851a8d2017-10-10 17:31:30 +010074 private void onExtensionCallback(GlobalActions newPlugin) {
75 if (mPlugin != null) {
76 mPlugin.destroy();
77 }
78 mPlugin = newPlugin;
79 }
80
Jason Monk361915c2017-03-21 20:33:59 -040081 @Override
Jason Monkb4302182017-08-04 13:39:17 -040082 public void handleShowShutdownUi(boolean isReboot, String reason) {
83 mExtension.get().showShutdownUi(isReboot, reason);
84 }
85
86 @Override
Jason Monk361915c2017-03-21 20:33:59 -040087 public void handleShowGlobalActionsMenu() {
Matt Pietal677981d2020-04-24 14:38:32 -040088 mStatusBarKeyguardViewManager.setGlobalActionsVisible(true);
Jason Monk361915c2017-03-21 20:33:59 -040089 mExtension.get().showGlobalActions(this);
90 }
91
92 @Override
93 public void onGlobalActionsShown() {
94 try {
95 mBarService.onGlobalActionsShown();
96 } catch (RemoteException e) {
97 }
98 }
99
100 @Override
101 public void onGlobalActionsHidden() {
102 try {
Matt Pietal677981d2020-04-24 14:38:32 -0400103 mStatusBarKeyguardViewManager.setGlobalActionsVisible(false);
Jason Monk361915c2017-03-21 20:33:59 -0400104 mBarService.onGlobalActionsHidden();
105 } catch (RemoteException e) {
106 }
107 }
108
109 @Override
110 public void shutdown() {
111 try {
112 mBarService.shutdown();
113 } catch (RemoteException e) {
114 }
115 }
116
117 @Override
118 public void reboot(boolean safeMode) {
119 try {
120 mBarService.reboot(safeMode);
121 } catch (RemoteException e) {
122 }
123 }
124}