OSDN Git Service

Merge "docs: Add documentation for equals() method" into qt-dev
[android-x86/frameworks-base.git] / packages / SystemUI / src / com / android / systemui / globalactions / GlobalActionsImpl.java
1 /*
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
15 package com.android.systemui.globalactions;
16
17 import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS;
18 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
19
20 import android.app.Dialog;
21 import android.app.KeyguardManager;
22 import android.content.Context;
23 import android.view.View;
24 import android.view.ViewGroup;
25 import android.view.Window;
26 import android.view.WindowManager;
27 import android.widget.ProgressBar;
28 import android.widget.TextView;
29
30 import com.android.internal.R;
31 import com.android.internal.colorextraction.ColorExtractor.GradientColors;
32 import com.android.internal.colorextraction.drawable.ScrimDrawable;
33 import com.android.settingslib.Utils;
34 import com.android.systemui.Dependency;
35 import com.android.systemui.SysUiServiceProvider;
36 import com.android.systemui.colorextraction.SysuiColorExtractor;
37 import com.android.systemui.plugins.GlobalActions;
38 import com.android.systemui.plugins.GlobalActionsPanelPlugin;
39 import com.android.systemui.statusbar.CommandQueue;
40 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
41 import com.android.systemui.statusbar.policy.ExtensionController;
42 import com.android.systemui.statusbar.policy.KeyguardMonitor;
43
44 public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks {
45
46     private static final float SHUTDOWN_SCRIM_ALPHA = 0.95f;
47
48     private final Context mContext;
49     private final KeyguardMonitor mKeyguardMonitor;
50     private final DeviceProvisionedController mDeviceProvisionedController;
51     private final ExtensionController.Extension<GlobalActionsPanelPlugin> mPanelExtension;
52     private GlobalActionsDialog mGlobalActions;
53     private boolean mDisabled;
54
55     public GlobalActionsImpl(Context context) {
56         mContext = context;
57         mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
58         mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
59         SysUiServiceProvider.getComponent(context, CommandQueue.class).addCallback(this);
60         mPanelExtension = Dependency.get(ExtensionController.class)
61                 .newExtension(GlobalActionsPanelPlugin.class)
62                 .withPlugin(GlobalActionsPanelPlugin.class)
63                 .build();
64     }
65
66     @Override
67     public void destroy() {
68         SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallback(this);
69         if (mGlobalActions != null) {
70             mGlobalActions.destroy();
71             mGlobalActions = null;
72         }
73     }
74
75     @Override
76     public void showGlobalActions(GlobalActionsManager manager) {
77         if (mDisabled) return;
78         if (mGlobalActions == null) {
79             mGlobalActions = new GlobalActionsDialog(mContext, manager);
80         }
81         mGlobalActions.showDialog(mKeyguardMonitor.isShowing(),
82                 mDeviceProvisionedController.isDeviceProvisioned(),
83                 mPanelExtension.get());
84     }
85
86     @Override
87     public void showShutdownUi(boolean isReboot, String reason) {
88         ScrimDrawable background = new ScrimDrawable();
89         background.setAlpha((int) (SHUTDOWN_SCRIM_ALPHA * 255));
90
91         Dialog d = new Dialog(mContext,
92                 com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
93         // Window initialization
94         Window window = d.getWindow();
95         window.requestFeature(Window.FEATURE_NO_TITLE);
96         window.getAttributes().systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
97                 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
98                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
99         // Inflate the decor view, so the attributes below are not overwritten by the theme.
100         window.getDecorView();
101         window.getAttributes().width = ViewGroup.LayoutParams.MATCH_PARENT;
102         window.getAttributes().height = ViewGroup.LayoutParams.MATCH_PARENT;
103         window.getAttributes().layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
104         window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
105         window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
106         window.addFlags(
107                 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
108                         | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
109                         | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
110                         | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
111                         | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
112                         | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
113         window.setBackgroundDrawable(background);
114         window.setWindowAnimations(R.style.Animation_Toast);
115
116         d.setContentView(R.layout.shutdown_dialog);
117         d.setCancelable(false);
118
119         int color = Utils.getColorAttrDefaultColor(mContext,
120                 com.android.systemui.R.attr.wallpaperTextColor);
121         boolean onKeyguard = mContext.getSystemService(
122                 KeyguardManager.class).isKeyguardLocked();
123
124         ProgressBar bar = d.findViewById(R.id.progress);
125         bar.getIndeterminateDrawable().setTint(color);
126         TextView message = d.findViewById(R.id.text1);
127         message.setTextColor(color);
128         if (isReboot) message.setText(R.string.reboot_to_reset_message);
129
130         GradientColors colors = Dependency.get(SysuiColorExtractor.class).getNeutralColors();
131         background.setColor(colors.getMainColor(), false);
132
133         d.show();
134     }
135
136     @Override
137     public void disable(int displayId, int state1, int state2, boolean animate) {
138         final boolean disabled = (state2 & DISABLE2_GLOBAL_ACTIONS) != 0;
139         if (displayId != mContext.getDisplayId() || disabled == mDisabled) return;
140         mDisabled = disabled;
141         if (disabled && mGlobalActions != null) {
142             mGlobalActions.dismissDialog();
143         }
144     }
145 }