QSTileHost.java revision 887aa0024f2fe62f24555a6000f862df169f2d44
1/*
2 * Copyright (C) 2014 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.statusbar.phone;
18
19import android.content.Context;
20import android.content.Intent;
21import android.os.HandlerThread;
22import android.os.Looper;
23
24import com.android.systemui.R;
25import com.android.systemui.qs.QSTile;
26import com.android.systemui.qs.tiles.AirplaneModeTile;
27import com.android.systemui.qs.tiles.BluetoothTile;
28import com.android.systemui.qs.tiles.BugreportTile;
29import com.android.systemui.qs.tiles.CastTile;
30import com.android.systemui.qs.tiles.CellularTile;
31import com.android.systemui.qs.tiles.ColorInversionTile;
32import com.android.systemui.qs.tiles.LocationTile;
33import com.android.systemui.qs.tiles.NotificationsTile;
34import com.android.systemui.qs.tiles.RotationLockTile;
35import com.android.systemui.qs.tiles.HotspotTile;
36import com.android.systemui.qs.tiles.WifiTile;
37import com.android.systemui.settings.CurrentUserTracker;
38import com.android.systemui.statusbar.policy.BluetoothController;
39import com.android.systemui.statusbar.policy.CastController;
40import com.android.systemui.statusbar.policy.LocationController;
41import com.android.systemui.statusbar.policy.NetworkController;
42import com.android.systemui.statusbar.policy.RotationLockController;
43import com.android.systemui.statusbar.policy.TetheringController;
44import com.android.systemui.statusbar.policy.ZenModeController;
45import com.android.systemui.volume.VolumeComponent;
46
47import java.util.ArrayList;
48import java.util.List;
49
50/** Platform implementation of the quick settings tile host **/
51public class QSTileHost implements QSTile.Host {
52
53    private final Context mContext;
54    private final PhoneStatusBar mStatusBar;
55    private final BluetoothController mBluetooth;
56    private final LocationController mLocation;
57    private final RotationLockController mRotation;
58    private final NetworkController mNetwork;
59    private final ZenModeController mZen;
60    private final TetheringController mTethering;
61    private final CastController mCast;
62    private final Looper mLooper;
63    private final CurrentUserTracker mUserTracker;
64    private final VolumeComponent mVolume;
65    private final ArrayList<QSTile<?>> mTiles = new ArrayList<QSTile<?>>();
66    private final int mFeedbackStartDelay;
67
68    public QSTileHost(Context context, PhoneStatusBar statusBar,
69            BluetoothController bluetooth, LocationController location,
70            RotationLockController rotation, NetworkController network,
71            ZenModeController zen, TetheringController tethering,
72            CastController cast, VolumeComponent volume) {
73        mContext = context;
74        mStatusBar = statusBar;
75        mBluetooth = bluetooth;
76        mLocation = location;
77        mRotation = rotation;
78        mNetwork = network;
79        mZen = zen;
80        mTethering = tethering;
81        mCast = cast;
82        mVolume = volume;
83
84        final HandlerThread ht = new HandlerThread(QSTileHost.class.getSimpleName());
85        ht.start();
86        mLooper = ht.getLooper();
87
88        mTiles.add(new WifiTile(this));
89        mTiles.add(new BluetoothTile(this));
90        mTiles.add(new ColorInversionTile(this));
91        mTiles.add(new CellularTile(this));
92        mTiles.add(new AirplaneModeTile(this));
93        mTiles.add(new NotificationsTile(this));
94        mTiles.add(new RotationLockTile(this));
95        mTiles.add(new LocationTile(this));
96        mTiles.add(new CastTile(this));
97        mTiles.add(new HotspotTile(this));
98
99        mUserTracker = new CurrentUserTracker(mContext) {
100            @Override
101            public void onUserSwitched(int newUserId) {
102                for (QSTile<?> tile : mTiles) {
103                    tile.userSwitch(newUserId);
104                }
105            }
106        };
107        mUserTracker.startTracking();
108        mFeedbackStartDelay = mContext.getResources().getInteger(R.integer.feedback_start_delay);
109    }
110
111    @Override
112    public List<QSTile<?>> getTiles() {
113        return mTiles;
114    }
115
116    @Override
117    public void startSettingsActivity(final Intent intent) {
118        mStatusBar.postStartSettingsActivity(intent, mFeedbackStartDelay);
119    }
120
121    @Override
122    public void warn(String message, Throwable t) {
123        // already logged
124    }
125
126    @Override
127    public void collapsePanels() {
128        mStatusBar.postAnimateCollapsePanels();
129    }
130
131    @Override
132    public Looper getLooper() {
133        return mLooper;
134    }
135
136    @Override
137    public Context getContext() {
138        return mContext;
139    }
140
141    @Override
142    public BluetoothController getBluetoothController() {
143        return mBluetooth;
144    }
145
146    @Override
147    public LocationController getLocationController() {
148        return mLocation;
149    }
150
151    @Override
152    public RotationLockController getRotationLockController() {
153        return mRotation;
154    }
155
156    @Override
157    public NetworkController getNetworkController() {
158        return mNetwork;
159    }
160
161    @Override
162    public ZenModeController getZenModeController() {
163        return mZen;
164    }
165
166    @Override
167    public TetheringController getTetheringController() {
168        return mTethering;
169    }
170
171    @Override
172    public CastController getCastController() {
173        return mCast;
174    }
175
176    @Override
177    public VolumeComponent getVolumeComponent() {
178        return mVolume;
179    }
180}
181