1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use mHost file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.systemui.qs.tileimpl; 16 17 import android.content.Context; 18 import android.os.Build; 19 import android.util.Log; 20 import android.view.ContextThemeWrapper; 21 22 import com.android.systemui.R; 23 import com.android.systemui.plugins.qs.*; 24 import com.android.systemui.plugins.qs.QSTileView; 25 import com.android.systemui.qs.external.CustomTile; 26 import com.android.systemui.qs.tiles.AirplaneModeTile; 27 import com.android.systemui.qs.tiles.BatterySaverTile; 28 import com.android.systemui.qs.tiles.BluetoothTile; 29 import com.android.systemui.qs.tiles.CastTile; 30 import com.android.systemui.qs.tiles.CellularTile; 31 import com.android.systemui.qs.tiles.ColorInversionTile; 32 import com.android.systemui.qs.tiles.DataSaverTile; 33 import com.android.systemui.qs.tiles.DndTile; 34 import com.android.systemui.qs.tiles.FlashlightTile; 35 import com.android.systemui.qs.tiles.HotspotTile; 36 import com.android.systemui.qs.tiles.IntentTile; 37 import com.android.systemui.qs.tiles.LocationTile; 38 import com.android.systemui.qs.tiles.NfcTile; 39 import com.android.systemui.qs.tiles.NightDisplayTile; 40 import com.android.systemui.qs.tiles.RotationLockTile; 41 import com.android.systemui.qs.tiles.UserTile; 42 import com.android.systemui.qs.tiles.WifiTile; 43 import com.android.systemui.qs.tiles.WorkModeTile; 44 import com.android.systemui.qs.QSTileHost; 45 import com.android.systemui.util.leak.GarbageMonitor; 46 47 public class QSFactoryImpl implements QSFactory { 48 49 private static final String TAG = "QSFactory"; 50 private final QSTileHost mHost; 51 52 public QSFactoryImpl(QSTileHost host) { 53 mHost = host; 54 } 55 56 public QSTile createTile(String tileSpec) { 57 QSTileImpl tile = createTileInternal(tileSpec); 58 if (tile != null) { 59 tile.handleStale(); // Tile was just created, must be stale. 60 } 61 return tile; 62 } 63 64 private QSTileImpl createTileInternal(String tileSpec) { 65 // Stock tiles. 66 switch (tileSpec) { 67 case "wifi": 68 return new WifiTile(mHost); 69 case "bt": 70 return new BluetoothTile(mHost); 71 case "cell": 72 return new CellularTile(mHost); 73 case "dnd": 74 return new DndTile(mHost); 75 case "inversion": 76 return new ColorInversionTile(mHost); 77 case "airplane": 78 return new AirplaneModeTile(mHost); 79 case "work": 80 return new WorkModeTile(mHost); 81 case "rotation": 82 return new RotationLockTile(mHost); 83 case "flashlight": 84 return new FlashlightTile(mHost); 85 case "location": 86 return new LocationTile(mHost); 87 case "cast": 88 return new CastTile(mHost); 89 case "hotspot": 90 return new HotspotTile(mHost); 91 case "user": 92 return new UserTile(mHost); 93 case "battery": 94 return new BatterySaverTile(mHost); 95 case "saver": 96 return new DataSaverTile(mHost); 97 case "night": 98 return new NightDisplayTile(mHost); 99 case "nfc": 100 return new NfcTile(mHost); 101 } 102 103 // Intent tiles. 104 if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(mHost, tileSpec); 105 if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(mHost, tileSpec); 106 107 // Debug tiles. 108 if (Build.IS_DEBUGGABLE) { 109 if (tileSpec.equals(GarbageMonitor.MemoryTile.TILE_SPEC)) { 110 return new GarbageMonitor.MemoryTile(mHost); 111 } 112 } 113 114 // Broken tiles. 115 Log.w(TAG, "Bad tile spec: " + tileSpec); 116 return null; 117 } 118 119 @Override 120 public QSTileView createTileView(QSTile tile, boolean collapsedView) { 121 Context context = new ContextThemeWrapper(mHost.getContext(), R.style.qs_theme); 122 QSIconView icon = tile.createTileView(context); 123 if (collapsedView) { 124 return new QSTileBaseView(context, icon, collapsedView); 125 } else { 126 return new com.android.systemui.qs.tileimpl.QSTileView(context, icon); 127 } 128 } 129 } 130