blob: e03612802f9cc734973ca4233cf29cac0c4e868c [file] [log] [blame]
Xiyuan Xia1b30f792016-01-06 08:50:30 -08001/*
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;
18
Yao Chen634acb92016-04-13 16:17:47 -070019import android.content.ComponentName;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080020import android.content.Context;
21import android.util.Log;
Xiaohui Chen5da71352016-02-22 10:04:41 -080022import android.view.View;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080023import android.view.ViewGroup;
24
25import com.android.internal.widget.LockPatternUtils;
26import com.android.keyguard.ViewMediatorCallback;
Annie Chin1ea49352016-05-27 15:23:35 -070027import com.android.systemui.R;
Annie Chin937a9912016-05-31 10:14:23 -070028import com.android.systemui.assist.AssistManager;
Jorim Jaggi241ae102016-11-02 21:57:33 -070029import com.android.systemui.keyguard.DismissCallbackRegistry;
Annie Chin937a9912016-05-31 10:14:23 -070030import com.android.systemui.statusbar.BaseStatusBar;
Xiaohui Chen5da71352016-02-22 10:04:41 -080031import com.android.systemui.statusbar.ScrimView;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080032import com.android.systemui.statusbar.phone.KeyguardBouncer;
Jorim Jaggie31f6b82016-07-01 16:15:09 -070033import com.android.systemui.statusbar.phone.LockscreenWallpaper;
Xiaohui Cheneb04a992016-03-22 14:58:03 -070034import com.android.systemui.statusbar.phone.NotificationIconAreaController;
35import com.android.systemui.statusbar.phone.PhoneStatusBar;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070036import com.android.systemui.statusbar.phone.QSTileHost;
Xiaohui Chen5da71352016-02-22 10:04:41 -080037import com.android.systemui.statusbar.phone.ScrimController;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070038import com.android.systemui.statusbar.phone.StatusBarIconController;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080039import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
40import com.android.systemui.statusbar.phone.StatusBarWindowManager;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070041import com.android.systemui.statusbar.policy.BatteryController;
42import com.android.systemui.statusbar.policy.BluetoothController;
43import com.android.systemui.statusbar.policy.CastController;
44import com.android.systemui.statusbar.policy.FlashlightController;
45import com.android.systemui.statusbar.policy.HotspotController;
46import com.android.systemui.statusbar.policy.KeyguardMonitor;
47import com.android.systemui.statusbar.policy.LocationController;
48import com.android.systemui.statusbar.policy.NetworkController;
49import com.android.systemui.statusbar.policy.NextAlarmController;
50import com.android.systemui.statusbar.policy.RotationLockController;
51import com.android.systemui.statusbar.policy.SecurityController;
52import com.android.systemui.statusbar.policy.UserInfoController;
53import com.android.systemui.statusbar.policy.UserSwitcherController;
54import com.android.systemui.statusbar.policy.ZenModeController;
Yao Chen634acb92016-04-13 16:17:47 -070055import com.android.systemui.volume.VolumeDialogController;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080056
57/**
58 * Class factory to provide customizable SystemUI components.
59 */
60public class SystemUIFactory {
61 private static final String TAG = "SystemUIFactory";
62
63 static SystemUIFactory mFactory;
64
65 public static SystemUIFactory getInstance() {
66 return mFactory;
67 }
68
69 public static void createFromConfig(Context context) {
70 final String clsName = context.getString(R.string.config_systemUIFactoryComponent);
71 if (clsName == null || clsName.length() == 0) {
72 throw new RuntimeException("No SystemUIFactory component configured");
73 }
74
75 try {
76 Class<?> cls = null;
77 cls = context.getClassLoader().loadClass(clsName);
78 mFactory = (SystemUIFactory) cls.newInstance();
79 } catch (Throwable t) {
80 Log.w(TAG, "Error creating SystemUIFactory component: " + clsName, t);
81 throw new RuntimeException(t);
82 }
83 }
84
85 public SystemUIFactory() {}
86
87 public StatusBarKeyguardViewManager createStatusBarKeyguardViewManager(Context context,
88 ViewMediatorCallback viewMediatorCallback, LockPatternUtils lockPatternUtils) {
89 return new StatusBarKeyguardViewManager(context, viewMediatorCallback, lockPatternUtils);
90 }
91
92 public KeyguardBouncer createKeyguardBouncer(Context context, ViewMediatorCallback callback,
Jorim Jaggi241ae102016-11-02 21:57:33 -070093 LockPatternUtils lockPatternUtils,
94 ViewGroup container, DismissCallbackRegistry dismissCallbackRegistry) {
95 return new KeyguardBouncer(context, callback, lockPatternUtils, container,
96 dismissCallbackRegistry);
Xiyuan Xia1b30f792016-01-06 08:50:30 -080097 }
Xiaohui Chen5da71352016-02-22 10:04:41 -080098
99 public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
Jorim Jaggie31f6b82016-07-01 16:15:09 -0700100 View headsUpScrim, LockscreenWallpaper lockscreenWallpaper) {
Selim Cinek25503252016-03-03 15:31:43 -0800101 return new ScrimController(scrimBehind, scrimInFront, headsUpScrim);
Xiaohui Chen5da71352016-02-22 10:04:41 -0800102 }
Muyuan Li94ce94e2016-02-24 16:20:54 -0800103
Yao Chen634acb92016-04-13 16:17:47 -0700104 public VolumeDialogController createVolumeDialogController(Context context,
105 ComponentName name) {
106 return new VolumeDialogController(context, name);
107 }
108
Xiaohui Cheneb04a992016-03-22 14:58:03 -0700109 public NotificationIconAreaController createNotificationIconAreaController(Context context,
110 PhoneStatusBar phoneStatusBar) {
111 return new NotificationIconAreaController(context, phoneStatusBar);
112 }
113
Xiaohui Chen311b98e2016-03-30 11:55:54 -0700114 public QSTileHost createQSTileHost(Context context, PhoneStatusBar statusBar,
115 BluetoothController bluetooth, LocationController location,
116 RotationLockController rotation, NetworkController network,
117 ZenModeController zen, HotspotController hotspot,
118 CastController cast, FlashlightController flashlight,
119 UserSwitcherController userSwitcher, UserInfoController userInfo,
120 KeyguardMonitor keyguard, SecurityController security,
121 BatteryController battery, StatusBarIconController iconController,
122 NextAlarmController nextAlarmController) {
123 return new QSTileHost(context, statusBar, bluetooth, location, rotation, network, zen,
124 hotspot, cast, flashlight, userSwitcher, userInfo, keyguard, security, battery,
125 iconController, nextAlarmController);
126 }
127
Muyuan Li94ce94e2016-02-24 16:20:54 -0800128 public <T> T createInstance(Class<T> classType) {
129 return null;
130 }
Annie Chin1ea49352016-05-27 15:23:35 -0700131
Annie Chin937a9912016-05-31 10:14:23 -0700132 public AssistManager createAssistManager(BaseStatusBar bar, Context context) {
133 return new AssistManager(bar, context);
134 }
Xiyuan Xia1b30f792016-01-06 08:50:30 -0800135}