Home | History | Annotate | Download | only in tileimpl
      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