From 692ae6d6c1714782d356cf665b262249ba96a443 Mon Sep 17 00:00:00 2001 From: Adnan Begovic Date: Fri, 11 Dec 2015 16:16:02 -0800 Subject: SystemUI: Add AmbientDisplay tile Squashed with: Author: Adnan Begovic Date: Fri Dec 11 16:16:02 2015 -0800 SystemUI: Readd AmbientDisplayTile. Change-Id: Ie7b93ba0f87d505206b5d60f193c2234d83d7eac Author: Michael Bestas Date: Sun Sep 17 22:51:15 2017 +0300 SystemUI: Hide ambient display tile if device does not support it * Add a check similar to the Settings app Change-Id: I603cd28b8dd1fadff9ffcfb6953c7b72514b5857 Author: Luca Stefani Date: Wed Mar 17 22:34:17 2021 +0100 SystemUI: AmbientTile: Don't hardcode display settings intent Change-Id: Ifaa69c2f235b85ae847524c81f0ba59e2a51cf01 Author: Luca Stefani Date: Wed Mar 17 22:37:04 2021 +0100 SystemUI: AmbientTile: Use SecureSetting to change doze setting Change-Id: I7f004bcf45493130ad50faacb6e390cd640e53db Author: LuK1337 Date: Wed Mar 17 22:40:49 2021 +0100 SystemUI: AmbientTile: Actually start using SecureSetting Change-Id: I5d94f6d2e596dbc6b44ae4f30f479d335a067661 Author: Luca Stefani Date: Thu Mar 18 10:51:54 2021 +0100 SystemUI: AmbientTile: Default the setting to 1 Change-Id: Idea9dda702fdbaa0e2836e7a2573aa57cf24449e Change-Id: Iea339685f523016876f059052e66e97fd5170a81 --- .../res/drawable/ic_qs_ambient_display.xml | 51 +++++++ packages/SystemUI/res/values/config.xml | 2 +- packages/SystemUI/res/values/ice_strings.xml | 7 + .../systemui/qs/tileimpl/QSFactoryImpl.java | 6 + .../systemui/qs/tiles/AmbientDisplayTile.java | 163 +++++++++++++++++++++ 5 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 packages/SystemUI/res/drawable/ic_qs_ambient_display.xml create mode 100644 packages/SystemUI/src/com/android/systemui/qs/tiles/AmbientDisplayTile.java diff --git a/packages/SystemUI/res/drawable/ic_qs_ambient_display.xml b/packages/SystemUI/res/drawable/ic_qs_ambient_display.xml new file mode 100644 index 000000000000..dcc469fbc3f1 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_qs_ambient_display.xml @@ -0,0 +1,51 @@ + + + + + + + diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 934b2d4c9d91..e1448f55e113 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -107,7 +107,7 @@ - internet,wifi,cell,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle,location,hotspot,inversion,saver,dark,work,night,reverse,reduce_brightness,caffeine,heads_up + internet,wifi,cell,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle,location,hotspot,inversion,saver,dark,work,night,reverse,reduce_brightness,ambient_display,caffeine,heads_up diff --git a/packages/SystemUI/res/values/ice_strings.xml b/packages/SystemUI/res/values/ice_strings.xml index ac82cf770d27..0370bfb7376a 100644 --- a/packages/SystemUI/res/values/ice_strings.xml +++ b/packages/SystemUI/res/values/ice_strings.xml @@ -16,6 +16,13 @@ --> + + Ambient display + Ambient display off. + Ambient display on. + Ambient display turned off. + Ambient display turned on. + Caffeine Caffeine off. diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java index e3bb23c7a94b..6b99359a374f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java @@ -27,6 +27,7 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.tiles.AirplaneModeTile; import com.android.systemui.qs.tiles.AlarmTile; +import com.android.systemui.qs.tiles.AmbientDisplayTile; import com.android.systemui.qs.tiles.BatterySaverTile; import com.android.systemui.qs.tiles.BluetoothTile; import com.android.systemui.qs.tiles.CaffeineTile; @@ -92,6 +93,7 @@ public class QSFactoryImpl implements QSFactory { private final Provider mDeviceControlsTileProvider; private final Provider mAlarmTileProvider; private final Provider mQuickAccessWalletTileProvider; + private final Provider mAmbientDisplayTileProvider; private final Provider mCaffeineTileProvider; private final Provider mHeadsUpTileProvider; @@ -129,6 +131,7 @@ public class QSFactoryImpl implements QSFactory { Provider deviceControlsTileProvider, Provider alarmTileProvider, Provider quickAccessWalletTileProvider, + Provider ambientDisplayTileProvider, Provider caffeineTileProvider, Provider headsUpTileProvider) { mQsHostLazy = qsHostLazy; @@ -161,6 +164,7 @@ public class QSFactoryImpl implements QSFactory { mDeviceControlsTileProvider = deviceControlsTileProvider; mAlarmTileProvider = alarmTileProvider; mQuickAccessWalletTileProvider = quickAccessWalletTileProvider; + mAmbientDisplayTileProvider = ambientDisplayTileProvider; mCaffeineTileProvider = caffeineTileProvider; mHeadsUpTileProvider = headsUpTileProvider; } @@ -230,6 +234,8 @@ public class QSFactoryImpl implements QSFactory { case "wallet": return mQuickAccessWalletTileProvider.get(); // Additional tiles. + case "ambient_display": + return mAmbientDisplayTileProvider.get(); case "caffeine": return mCaffeineTileProvider.get(); case "heads_up": diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AmbientDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AmbientDisplayTile.java new file mode 100644 index 000000000000..23869f24a65a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AmbientDisplayTile.java @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * Copyright (C) 2017-2021 The LineageOS 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.ActivityManager; +import android.content.Intent; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.os.SystemProperties; +import android.provider.Settings; +import android.provider.Settings.Secure; +import android.service.quicksettings.Tile; +import android.text.TextUtils; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.systemui.R; +import com.android.systemui.dagger.qualifiers.Background; +import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.plugins.qs.QSTile.BooleanState; +import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.qs.QSHost; +import com.android.systemui.qs.logging.QSLogger; +import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.qs.SecureSetting; +import com.android.systemui.settings.UserTracker; +import com.android.systemui.util.settings.SecureSettings; + +import javax.inject.Inject; + +/** Quick settings tile: Ambient Display **/ +public class AmbientDisplayTile extends QSTileImpl { + + private final Icon mIcon = ResourceIcon.get(R.drawable.ic_qs_ambient_display); + private final SecureSetting mSetting; + + @Inject + public AmbientDisplayTile( + QSHost host, + @Background Looper backgroundLooper, + @Main Handler mainHandler, + FalsingManager falsingManager, + MetricsLogger metricsLogger, + StatusBarStateController statusBarStateController, + ActivityStarter activityStarter, + QSLogger qsLogger, + UserTracker userTracker, + SecureSettings secureSettings + ) { + super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger, + statusBarStateController, activityStarter, qsLogger); + + mSetting = new SecureSetting(secureSettings, mHandler, Secure.DOZE_ENABLED, + userTracker.getUserId(), 1) { + @Override + protected void handleValueChanged(int value, boolean observedChange) { + handleRefreshState(value); + } + }; + } + + @Override + protected void handleDestroy() { + super.handleDestroy(); + mSetting.setListening(false); + } + + @Override + public boolean isAvailable() { + String name = Build.IS_DEBUGGABLE ? SystemProperties.get("debug.doze.component") : null; + if (TextUtils.isEmpty(name)) { + name = mContext.getString(com.android.internal.R.string.config_dozeComponent); + } + return !TextUtils.isEmpty(name); + } + + @Override + public BooleanState newTileState() { + return new BooleanState(); + } + + @Override + public void handleSetListening(boolean listening) { + super.handleSetListening(listening); + mSetting.setListening(listening); + } + + @Override + protected void handleUserSwitch(int newUserId) { + mSetting.setUserId(newUserId); + handleRefreshState(mSetting.getValue()); + } + + @Override + protected void handleClick(@Nullable View view) { + mSetting.setValue(mState.value ? 0 : 1); + } + + @Override + public Intent getLongClickIntent() { + return new Intent(Settings.ACTION_DISPLAY_SETTINGS); + } + + @Override + protected void handleUpdateState(BooleanState state, Object arg) { + final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue(); + final boolean enable = value != 0; + state.value = enable; + state.label = mContext.getString(R.string.quick_settings_ambient_display_label); + state.icon = mIcon; + if (enable) { + state.contentDescription = mContext.getString( + R.string.accessibility_quick_settings_ambient_display_on); + state.state = Tile.STATE_ACTIVE; + } else { + state.contentDescription = mContext.getString( + R.string.accessibility_quick_settings_ambient_display_off); + state.state = Tile.STATE_INACTIVE; + } + } + + @Override + public CharSequence getTileLabel() { + return mContext.getString(R.string.quick_settings_ambient_display_label); + } + + @Override + public int getMetricsCategory() { + return MetricsEvent.ICE; + } + + @Override + protected String composeChangeAnnouncement() { + if (mState.value) { + return mContext.getString( + R.string.accessibility_quick_settings_ambient_display_changed_on); + } else { + return mContext.getString( + R.string.accessibility_quick_settings_ambient_display_changed_off); + } + } +} -- cgit v1.2.3