diff options
author | Adnan Begovic <adnan@cyngn.com> | 2015-12-01 16:34:10 -0800 |
---|---|---|
committer | Adnan Begovic <adnan@cyngn.com> | 2015-12-07 15:24:06 -0800 |
commit | cf6674d766fe683e52e5c58e63152e9abd6ece89 (patch) | |
tree | 3b97dd23035ab50586b3ab55c9a824771cd7c4b7 /packages/SystemUI/src/com/android/systemui/qs/tiles | |
parent | 95cce6e3e8586592511c83ebde6edb51ee6fdd0f (diff) | |
download | frameworks_base-cf6674d766fe683e52e5c58e63152e9abd6ece89.zip frameworks_base-cf6674d766fe683e52e5c58e63152e9abd6ece89.tar.gz frameworks_base-cf6674d766fe683e52e5c58e63152e9abd6ece89.tar.bz2 |
SystemUi: Reintroduce custom qs tiles management.
Change-Id: I88dbf3911d4783de7c3f231aa57c51ce43bc8ae6
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs/tiles')
6 files changed, 206 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 5cc3f3f..70a27ba 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -33,6 +33,7 @@ import com.android.systemui.qs.QSDetailItems; import com.android.systemui.qs.QSDetailItems.Item; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.BluetoothController; +import cyanogenmod.app.StatusBarPanelCustomTile; import java.util.Collection; import java.util.Set; @@ -190,6 +191,11 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { } @Override + public StatusBarPanelCustomTile getCustomTile() { + return null; + } + + @Override public void setToggleState(boolean state) { MetricsLogger.action(mContext, MetricsLogger.QS_BLUETOOTH_TOGGLE, state); mController.setBluetoothEnabled(state); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 4da3cd9..f83bbf4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -33,6 +33,7 @@ import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.KeyguardMonitor; +import cyanogenmod.app.StatusBarPanelCustomTile; import java.util.LinkedHashMap; import java.util.Set; @@ -183,6 +184,11 @@ public class CastTile extends QSTile<QSTile.BooleanState> { } @Override + public StatusBarPanelCustomTile getCustomTile() { + return null; + } + + @Override public void setToggleState(boolean state) { // noop } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index c99d70a..426cf4b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -37,6 +37,7 @@ import com.android.systemui.statusbar.policy.NetworkController.MobileDataControl import com.android.systemui.statusbar.policy.NetworkController.MobileDataController.DataUsageInfo; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import com.android.systemui.statusbar.policy.SignalCallbackAdapter; +import cyanogenmod.app.StatusBarPanelCustomTile; /** Quick settings tile: Cellular **/ public class CellularTile extends QSTile<QSTile.SignalState> { @@ -247,6 +248,10 @@ public class CellularTile extends QSTile<QSTile.SignalState> { }; private final class CellularDetailAdapter implements DetailAdapter { + @Override + public StatusBarPanelCustomTile getCustomTile() { + return null; + } @Override public int getTitle() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java new file mode 100644 index 0000000..88e5666 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs.tiles; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.UserHandle; +import android.text.TextUtils; +import android.util.Log; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import com.android.internal.logging.MetricsLogger; +import cyanogenmod.app.CustomTile; +import cyanogenmod.app.StatusBarPanelCustomTile; + +import com.android.systemui.R; +import com.android.systemui.qs.QSTile; + +public class CustomQSTile extends QSTile<QSTile.State> { + + private PendingIntent mOnClick; + private Uri mOnClickUri; + private int mCurrentUserId; + private StatusBarPanelCustomTile mTile; + private CustomQSDetailAdapter mDetailAdapter; + + public CustomQSTile(Host host, StatusBarPanelCustomTile tile) { + super(host); + refreshState(tile); + mDetailAdapter = new CustomQSDetailAdapter(); + } + + @Override + public DetailAdapter getDetailAdapter() { + return mDetailAdapter; + } + + @Override + public void setListening(boolean listening) { + } + + @Override + protected State newTileState() { + return new State(); + } + + @Override + protected void handleUserSwitch(int newUserId) { + super.handleUserSwitch(newUserId); + mCurrentUserId = newUserId; + } + + public void update(StatusBarPanelCustomTile customTile) { + refreshState(customTile); + } + + @Override + protected void handleLongClick() { + showDetail(true); + } + + @Override + protected void handleClick() { + try { + if (mOnClick != null) { + if (mOnClick.isActivity()) { + mHost.collapsePanels(); + } + mOnClick.send(); + } else if (mOnClickUri != null) { + final Intent intent = new Intent().setData(mOnClickUri); + mContext.sendBroadcastAsUser(intent, new UserHandle(mCurrentUserId)); + } + } catch (Throwable t) { + Log.w(TAG, "Error sending click intent", t); + } + } + + @Override + protected void handleUpdateState(State state, Object arg) { + if (arg instanceof StatusBarPanelCustomTile) { + mTile = (StatusBarPanelCustomTile) arg; + } + final CustomTile customTile = mTile.getCustomTile(); + state.visible = true; + state.contentDescription = customTile.contentDescription; + state.label = customTile.label; + final int iconId = customTile.icon; + if (iconId != 0) { + final String iconPackage = mTile.getPackage(); + if (!TextUtils.isEmpty(iconPackage)) { + state.icon = new ExternalIcon(iconPackage, iconId); + } + } + mOnClick = customTile.onClick; + mOnClickUri = customTile.onClickUri; + } + + @Override + public int getMetricsCategory() { + return MetricsLogger.DONT_TRACK_ME_BRO; + } + + private class CustomQSDetailAdapter implements DetailAdapter { + + @Override + public int getTitle() { + return R.string.quick_settings_custom_tile_detail_title; + } + + @Override + public Boolean getToggleState() { + return null; + } + + + @Override + public Intent getSettingsIntent() { + return mTile.getCustomTile().onSettingsClick; + } + + @Override + public StatusBarPanelCustomTile getCustomTile() { + return mTile; + } + + @Override + public void setToggleState(boolean state) { + // noop + } + + @Override + public int getMetricsCategory() { + return MetricsLogger.DONT_TRACK_ME_BRO; + } + + @Override + public View createDetailView(Context context, View convertView, ViewGroup parent) { + LinearLayout rootView = (LinearLayout) LayoutInflater.from(context) + .inflate(R.layout.qs_custom_detail, parent, false); + ImageView imageView = (ImageView) rootView.findViewById(R.id.custom_qs_tile_icon); + TextView customTileTitle = (TextView) rootView.findViewById(R.id.custom_qs_tile_title); + TextView customTilePkg = (TextView) rootView + .findViewById(R.id.custom_qs_tile_package); + TextView customTileContentDesc = (TextView) rootView + .findViewById(R.id.custom_qs_tile_content_description); + + // icon is cached in state, fetch it + imageView.setImageDrawable(getState().icon.getDrawable(mContext)); + customTileTitle.setText(mTile.getCustomTile().label); + customTilePkg.setText(mTile.getPackage()); + customTileContentDesc.setText(mTile.getCustomTile().contentDescription); + return rootView; + } + } +}
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index afe42b9..6c40486 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -38,6 +38,7 @@ import com.android.systemui.SysUIToast; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.volume.ZenModePanel; +import cyanogenmod.app.StatusBarPanelCustomTile; /** Quick settings tile: Do not disturb **/ public class DndTile extends QSTile<QSTile.BooleanState> { @@ -249,6 +250,11 @@ public class DndTile extends QSTile<QSTile.BooleanState> { } @Override + public StatusBarPanelCustomTile getCustomTile() { + return null; + } + + @Override public void setToggleState(boolean state) { MetricsLogger.action(mContext, MetricsLogger.QS_DND_TOGGLE, state); if (!state) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index d90072e..b3e1701 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -37,6 +37,7 @@ import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.AccessPointController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.SignalCallbackAdapter; +import cyanogenmod.app.StatusBarPanelCustomTile; import java.util.List; @@ -256,6 +257,11 @@ public class WifiTile extends QSTile<QSTile.SignalState> { } @Override + public StatusBarPanelCustomTile getCustomTile() { + return null; + } + + @Override public Boolean getToggleState() { return mState.enabled; } |