blob: 06ce88cc438389ef179fa329a33cff34fb566760 [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
19import android.content.Context;
20import android.util.Log;
Xiaohui Chen5da71352016-02-22 10:04:41 -080021import android.view.View;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080022import android.view.ViewGroup;
23
24import com.android.internal.widget.LockPatternUtils;
25import com.android.keyguard.ViewMediatorCallback;
Annie Chin1ea49352016-05-27 15:23:35 -070026import com.android.systemui.R;
Annie Chin937a9912016-05-31 10:14:23 -070027import com.android.systemui.assist.AssistManager;
28import com.android.systemui.statusbar.BaseStatusBar;
Xiaohui Chen5da71352016-02-22 10:04:41 -080029import com.android.systemui.statusbar.ScrimView;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080030import com.android.systemui.statusbar.phone.KeyguardBouncer;
Jorim Jaggie31f6b82016-07-01 16:15:09 -070031import com.android.systemui.statusbar.phone.LockscreenWallpaper;
Xiaohui Cheneb04a992016-03-22 14:58:03 -070032import com.android.systemui.statusbar.phone.NotificationIconAreaController;
33import com.android.systemui.statusbar.phone.PhoneStatusBar;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070034import com.android.systemui.statusbar.phone.QSTileHost;
Xiaohui Chen5da71352016-02-22 10:04:41 -080035import com.android.systemui.statusbar.phone.ScrimController;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070036import com.android.systemui.statusbar.phone.StatusBarIconController;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080037import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
38import com.android.systemui.statusbar.phone.StatusBarWindowManager;
Xiaohui Chen311b98e2016-03-30 11:55:54 -070039import com.android.systemui.statusbar.policy.BatteryController;
40import com.android.systemui.statusbar.policy.BluetoothController;
41import com.android.systemui.statusbar.policy.CastController;
42import com.android.systemui.statusbar.policy.FlashlightController;
43import com.android.systemui.statusbar.policy.HotspotController;
44import com.android.systemui.statusbar.policy.KeyguardMonitor;
45import com.android.systemui.statusbar.policy.LocationController;
46import com.android.systemui.statusbar.policy.NetworkController;
47import com.android.systemui.statusbar.policy.NextAlarmController;
48import com.android.systemui.statusbar.policy.RotationLockController;
49import com.android.systemui.statusbar.policy.SecurityController;
50import com.android.systemui.statusbar.policy.UserInfoController;
51import com.android.systemui.statusbar.policy.UserSwitcherController;
52import com.android.systemui.statusbar.policy.ZenModeController;
Xiyuan Xia1b30f792016-01-06 08:50:30 -080053
54/**
55 * Class factory to provide customizable SystemUI components.
56 */
57public class SystemUIFactory {
58 private static final String TAG = "SystemUIFactory";
59
60 static SystemUIFactory mFactory;
61
62 public static SystemUIFactory getInstance() {
63 return mFactory;
64 }
65
66 public static void createFromConfig(Context context) {
67 final String clsName = context.getString(R.string.config_systemUIFactoryComponent);
68 if (clsName == null || clsName.length() == 0) {
69 throw new RuntimeException("No SystemUIFactory component configured");
70 }
71
72 try {
73 Class<?> cls = null;
74 cls = context.getClassLoader().loadClass(clsName);
75 mFactory = (SystemUIFactory) cls.newInstance();
76 } catch (Throwable t) {
77 Log.w(TAG, "Error creating SystemUIFactory component: " + clsName, t);
78 throw new RuntimeException(t);
79 }
80 }
81
82 public SystemUIFactory() {}
83
84 public StatusBarKeyguardViewManager createStatusBarKeyguardViewManager(Context context,
85 ViewMediatorCallback viewMediatorCallback, LockPatternUtils lockPatternUtils) {
86 return new StatusBarKeyguardViewManager(context, viewMediatorCallback, lockPatternUtils);
87 }
88
89 public KeyguardBouncer createKeyguardBouncer(Context context, ViewMediatorCallback callback,
90 LockPatternUtils lockPatternUtils, StatusBarWindowManager windowManager,
91 ViewGroup container) {
92 return new KeyguardBouncer(context, callback, lockPatternUtils, windowManager, container);
93 }
Xiaohui Chen5da71352016-02-22 10:04:41 -080094
95 public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
Jorim Jaggie31f6b82016-07-01 16:15:09 -070096 View headsUpScrim, LockscreenWallpaper lockscreenWallpaper) {
Selim Cinek25503252016-03-03 15:31:43 -080097 return new ScrimController(scrimBehind, scrimInFront, headsUpScrim);
Xiaohui Chen5da71352016-02-22 10:04:41 -080098 }
Muyuan Li94ce94e2016-02-24 16:20:54 -080099
Xiaohui Cheneb04a992016-03-22 14:58:03 -0700100 public NotificationIconAreaController createNotificationIconAreaController(Context context,
101 PhoneStatusBar phoneStatusBar) {
102 return new NotificationIconAreaController(context, phoneStatusBar);
103 }
104
Xiaohui Chen311b98e2016-03-30 11:55:54 -0700105 public QSTileHost createQSTileHost(Context context, PhoneStatusBar statusBar,
106 BluetoothController bluetooth, LocationController location,
107 RotationLockController rotation, NetworkController network,
108 ZenModeController zen, HotspotController hotspot,
109 CastController cast, FlashlightController flashlight,
110 UserSwitcherController userSwitcher, UserInfoController userInfo,
111 KeyguardMonitor keyguard, SecurityController security,
112 BatteryController battery, StatusBarIconController iconController,
113 NextAlarmController nextAlarmController) {
114 return new QSTileHost(context, statusBar, bluetooth, location, rotation, network, zen,
115 hotspot, cast, flashlight, userSwitcher, userInfo, keyguard, security, battery,
116 iconController, nextAlarmController);
117 }
118
Muyuan Li94ce94e2016-02-24 16:20:54 -0800119 public <T> T createInstance(Class<T> classType) {
120 return null;
121 }
Annie Chin1ea49352016-05-27 15:23:35 -0700122
Annie Chin937a9912016-05-31 10:14:23 -0700123 public AssistManager createAssistManager(BaseStatusBar bar, Context context) {
124 return new AssistManager(bar, context);
125 }
Xiyuan Xia1b30f792016-01-06 08:50:30 -0800126}