blob: e949007a158bf365cef3736b407878c81a0fb057 [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;
27import com.android.systemui.statusbar.policy.ExtensionController;
28import com.android.systemui.statusbar.policy.ExtensionController.Extension;
29
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040030import javax.inject.Inject;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050031import javax.inject.Provider;
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040032import javax.inject.Singleton;
33
34/**
35 * Manages power menu plugins and communicates power menu actions to the StatusBar.
36 */
37@Singleton
Jason Monk361915c2017-03-21 20:33:59 -040038public class GlobalActionsComponent extends SystemUI implements Callbacks, GlobalActionsManager {
39
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040040 private final CommandQueue mCommandQueue;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050041 private final ExtensionController mExtensionController;
42 private final Provider<GlobalActions> mGlobalActionsProvider;
Charles He9851a8d2017-10-10 17:31:30 +010043 private GlobalActions mPlugin;
Jason Monk361915c2017-03-21 20:33:59 -040044 private Extension<GlobalActions> mExtension;
45 private IStatusBarService mBarService;
46
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040047 @Inject
Dave Mankoffc88a2d72020-01-10 15:59:31 -050048 public GlobalActionsComponent(Context context, CommandQueue commandQueue,
49 ExtensionController extensionController,
50 Provider<GlobalActions> globalActionsProvider) {
Dave Mankoffa5d8a392019-10-10 12:21:09 -040051 super(context);
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040052 mCommandQueue = commandQueue;
Dave Mankoffc88a2d72020-01-10 15:59:31 -050053 mExtensionController = extensionController;
54 mGlobalActionsProvider = globalActionsProvider;
Dave Mankoffa5d8a392019-10-10 12:21:09 -040055 }
56
Jason Monk361915c2017-03-21 20:33:59 -040057 @Override
58 public void start() {
59 mBarService = IStatusBarService.Stub.asInterface(
60 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
Dave Mankoffc88a2d72020-01-10 15:59:31 -050061 mExtension = mExtensionController.newExtension(GlobalActions.class)
Jason Monk361915c2017-03-21 20:33:59 -040062 .withPlugin(GlobalActions.class)
Dave Mankoffc88a2d72020-01-10 15:59:31 -050063 .withDefault(mGlobalActionsProvider::get)
Charles He9851a8d2017-10-10 17:31:30 +010064 .withCallback(this::onExtensionCallback)
Jason Monk361915c2017-03-21 20:33:59 -040065 .build();
Charles He9851a8d2017-10-10 17:31:30 +010066 mPlugin = mExtension.get();
Dave Mankoffbcaca8a2019-10-31 18:04:08 -040067 mCommandQueue.addCallback(this);
Jason Monk361915c2017-03-21 20:33:59 -040068 }
69
Charles He9851a8d2017-10-10 17:31:30 +010070 private void onExtensionCallback(GlobalActions newPlugin) {
71 if (mPlugin != null) {
72 mPlugin.destroy();
73 }
74 mPlugin = newPlugin;
75 }
76
Jason Monk361915c2017-03-21 20:33:59 -040077 @Override
Jason Monkb4302182017-08-04 13:39:17 -040078 public void handleShowShutdownUi(boolean isReboot, String reason) {
79 mExtension.get().showShutdownUi(isReboot, reason);
80 }
81
82 @Override
Jason Monk361915c2017-03-21 20:33:59 -040083 public void handleShowGlobalActionsMenu() {
84 mExtension.get().showGlobalActions(this);
85 }
86
87 @Override
88 public void onGlobalActionsShown() {
89 try {
90 mBarService.onGlobalActionsShown();
91 } catch (RemoteException e) {
92 }
93 }
94
95 @Override
96 public void onGlobalActionsHidden() {
97 try {
98 mBarService.onGlobalActionsHidden();
99 } catch (RemoteException e) {
100 }
101 }
102
103 @Override
104 public void shutdown() {
105 try {
106 mBarService.shutdown();
107 } catch (RemoteException e) {
108 }
109 }
110
111 @Override
112 public void reboot(boolean safeMode) {
113 try {
114 mBarService.reboot(safeMode);
115 } catch (RemoteException e) {
116 }
117 }
118}