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