1/*
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;
21import android.view.View;
22import android.view.ViewGroup;
23
24import com.android.internal.widget.LockPatternUtils;
25import com.android.keyguard.ViewMediatorCallback;
26import com.android.systemui.R;
27import com.android.systemui.assist.AssistManager;
28import com.android.systemui.statusbar.BaseStatusBar;
29import com.android.systemui.statusbar.ScrimView;
30import com.android.systemui.statusbar.phone.KeyguardBouncer;
31import com.android.systemui.statusbar.phone.LockscreenWallpaper;
32import com.android.systemui.statusbar.phone.NotificationIconAreaController;
33import com.android.systemui.statusbar.phone.PhoneStatusBar;
34import com.android.systemui.statusbar.phone.QSTileHost;
35import com.android.systemui.statusbar.phone.ScrimController;
36import com.android.systemui.statusbar.phone.StatusBarIconController;
37import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
38import com.android.systemui.statusbar.phone.StatusBarWindowManager;
39import 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;
53
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    }
94
95    public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront,
96            View headsUpScrim, LockscreenWallpaper lockscreenWallpaper) {
97        return new ScrimController(scrimBehind, scrimInFront, headsUpScrim);
98    }
99
100    public NotificationIconAreaController createNotificationIconAreaController(Context context,
101            PhoneStatusBar phoneStatusBar) {
102        return new NotificationIconAreaController(context, phoneStatusBar);
103    }
104
105    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
119    public <T> T createInstance(Class<T> classType) {
120        return null;
121    }
122
123    public AssistManager createAssistManager(BaseStatusBar bar, Context context) {
124        return new AssistManager(bar, context);
125    }
126}
127