Animate activities launched by QS click (1/2).
See b/185892236#comment3 for before/after videos.
Bug: 185892236
Test: atest QuickAccessWalletTileTest DeviceControlsTileTest AlarmTileTest
Change-Id: I539921777ab516bd35ba809f818fe02092325e78
diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp
index f415da8..9f02fdb 100644
--- a/packages/SystemUI/plugin/Android.bp
+++ b/packages/SystemUI/plugin/Android.bp
@@ -32,6 +32,7 @@
],
static_libs: [
+ "androidx.annotation_annotation",
"PluginCoreLib",
"SystemUI-sensors",
"SystemUIAnimationLib",
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
index 46237148..d1383eb 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
@@ -15,13 +15,14 @@
package com.android.systemui.plugins.qs;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.metrics.LogMaker;
import android.service.quicksettings.Tile;
import android.view.View;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.InstanceId;
import com.android.systemui.plugins.annotations.DependsOn;
import com.android.systemui.plugins.annotations.ProvidesInterface;
@@ -56,8 +57,19 @@
QSIconView createTileView(Context context);
- void click();
- void secondaryClick();
+ /**
+ * The tile was clicked.
+ *
+ * @param view The view that was clicked.
+ */
+ void click(@Nullable View view);
+
+ /**
+ * The tile secondary click was triggered.
+ *
+ * @param view The view that was clicked.
+ */
+ void secondaryClick(@Nullable View view);
/**
* The tile was long clicked.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
index 925c9eb..e40f293 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -210,7 +210,7 @@
final String spec = CustomTile.toSpec(tile);
for (TileRecord record : mRecords) {
if (record.tile.getTileSpec().equals(spec)) {
- record.tile.click();
+ record.tile.click(null /* view */);
break;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
index 1699a34..10eea82 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -40,10 +40,12 @@
import android.text.format.DateUtils;
import android.util.Log;
import android.view.IWindowManager;
+import android.view.View;
import android.view.WindowManagerGlobal;
import android.widget.Switch;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -311,7 +313,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (mTile.getState() == Tile.STATE_UNAVAILABLE) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
index 7e72f1a..c973e8c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
@@ -170,7 +170,7 @@
@Override
public void init(QSTile tile) {
- init(v -> tile.click(), v -> tile.secondaryClick(), view -> {
+ init(v -> tile.click(this), v -> tile.secondaryClick(this), view -> {
tile.longClick(this);
return true;
});
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
index ba69dd5..5ff785d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -31,7 +31,6 @@
import android.annotation.CallSuper;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -46,6 +45,7 @@
import android.util.SparseArray;
import android.view.View;
+import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
@@ -135,8 +135,10 @@
* Handles clicks by the user.
*
* Calls to the controller should be made here to set the new state of the device.
+ *
+ * @param view The view that was clicked.
*/
- abstract protected void handleClick();
+ protected abstract void handleClick(@Nullable View view);
/**
* Update state of the tile based on device state
@@ -272,7 +274,7 @@
mHandler.sendEmptyMessage(H.REMOVE_CALLBACKS);
}
- public void click() {
+ public void click(@Nullable View view) {
mMetricsLogger.write(populate(new LogMaker(ACTION_QS_CLICK).setType(TYPE_ACTION)
.addTaggedData(FIELD_STATUS_BAR_STATE,
mStatusBarStateController.getState())));
@@ -280,11 +282,11 @@
getInstanceId());
mQSLogger.logTileClick(mTileSpec, mStatusBarStateController.getState(), mState.state);
if (!mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
- mHandler.sendEmptyMessage(H.CLICK);
+ mHandler.obtainMessage(H.CLICK, view).sendToTarget();
}
}
- public void secondaryClick() {
+ public void secondaryClick(@Nullable View view) {
mMetricsLogger.write(populate(new LogMaker(ACTION_QS_SECONDARY_CLICK).setType(TYPE_ACTION)
.addTaggedData(FIELD_STATUS_BAR_STATE,
mStatusBarStateController.getState())));
@@ -292,7 +294,7 @@
getInstanceId());
mQSLogger.logTileSecondaryClick(mTileSpec, mStatusBarStateController.getState(),
mState.state);
- mHandler.sendEmptyMessage(H.SECONDARY_CLICK);
+ mHandler.obtainMessage(H.SECONDARY_CLICK, view).sendToTarget();
}
@Override
@@ -370,10 +372,12 @@
* Handles secondary click on the tile.
*
* Defaults to {@link QSTileImpl#handleClick}
+ *
+ * @param view The view that was clicked.
*/
- protected void handleSecondaryClick() {
+ protected void handleSecondaryClick(@Nullable View view) {
// Default to normal click.
- handleClick();
+ handleClick(view);
}
/**
@@ -616,11 +620,11 @@
mContext, mEnforcedAdmin);
mActivityStarter.postStartActivityDismissingKeyguard(intent, 0);
} else {
- handleClick();
+ handleClick((View) msg.obj);
}
} else if (msg.what == SECONDARY_CLICK) {
name = "handleSecondaryClick";
- handleSecondaryClick();
+ handleSecondaryClick((View) msg.obj);
} else if (msg.what == LONG_CLICK) {
name = "handleLongClick";
handleLongClick((View) msg.obj);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 07abb90..22cd6f8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -29,8 +29,11 @@
import android.service.quicksettings.Tile;
import android.sysprop.TelephonyProperties;
import android.telephony.TelephonyManager;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -92,7 +95,7 @@
}
@Override
- public void handleClick() {
+ public void handleClick(@Nullable View view) {
boolean airplaneModeEnabled = mState.value;
MetricsLogger.action(mContext, getMetricsCategory(), !airplaneModeEnabled);
if (!airplaneModeEnabled && TelephonyProperties.in_ecm_mode().orElse(false)) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
index 2945c6b..c2a6255 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
@@ -9,9 +9,11 @@
import android.service.quicksettings.Tile
import android.text.TextUtils
import android.text.format.DateFormat
+import android.view.View
import androidx.annotation.VisibleForTesting
import com.android.internal.logging.MetricsLogger
import com.android.systemui.R
+import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.plugins.ActivityStarter
@@ -73,14 +75,15 @@
}
}
- private fun startDefaultSetAlarm() {
- mActivityStarter.postStartActivityDismissingKeyguard(defaultIntent, 0)
- }
-
- override fun handleClick() {
- lastAlarmInfo?.showIntent?.let {
- mActivityStarter.postStartActivityDismissingKeyguard(it)
- } ?: startDefaultSetAlarm()
+ override fun handleClick(view: View?) {
+ val animationController = view?.let { ActivityLaunchAnimator.Controller.fromView(it) }
+ val pendingIntent = lastAlarmInfo?.showIntent
+ if (pendingIntent != null) {
+ mActivityStarter.postStartActivityDismissingKeyguard(pendingIntent, animationController)
+ } else {
+ mActivityStarter.postStartActivityDismissingKeyguard(defaultIntent, 0,
+ animationController)
+ }
}
override fun handleUpdateState(state: QSTile.State, arg: Any?) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
index 49d3ff9..e3024fa 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
@@ -20,8 +20,11 @@
import android.os.Looper;
import android.provider.Settings.Secure;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -120,7 +123,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (getState().state == Tile.STATE_UNAVAILABLE) {
return;
}
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 56df4d8..65b6617 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -16,7 +16,6 @@
package com.android.systemui.qs.tiles;
-import android.annotation.Nullable;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
@@ -33,6 +32,8 @@
import android.view.ViewGroup;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.Utils;
@@ -96,7 +97,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
// Secondary clicks are header clicks, just toggle.
final boolean isEnabled = mState.value;
// Immediately enter transient enabling state when turning bluetooth on.
@@ -110,7 +111,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleSecondaryClick(@Nullable View view) {
if (!mController.canConfigBluetooth()) {
mActivityStarter.postStartActivityDismissingKeyguard(
new Intent(Settings.ACTION_BLUETOOTH_SETTINGS), 0);
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 d78dbae9..4b13015 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,8 @@
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
+import androidx.annotation.Nullable;
+
import com.android.internal.app.MediaRouteDialogPresenter;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -137,17 +139,12 @@
}
@Override
- protected void handleSecondaryClick() {
- handleClick();
+ protected void handleLongClick(@Nullable View view) {
+ handleClick(view);
}
@Override
- protected void handleLongClick(View view) {
- handleClick();
- }
-
- @Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (getState().state == Tile.STATE_UNAVAILABLE) {
return;
}
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 8cc6ff2..8e886e8 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,8 @@
import android.view.WindowManager.LayoutParams;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.net.DataUsageController;
@@ -116,7 +118,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (getState().state == Tile.STATE_UNAVAILABLE) {
return;
}
@@ -157,7 +159,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleSecondaryClick(@Nullable View view) {
if (mDataController.isMobileDataSupported()) {
showDetail(true);
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index ca7cf83..5e502cc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -23,8 +23,11 @@
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -115,7 +118,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
mSetting.setValue(mState.value ? 0 : 1);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
index 61376f0..5a11ff8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -20,8 +20,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Prefs;
@@ -73,7 +76,7 @@
return new Intent(Settings.ACTION_DATA_SAVER_SETTINGS);
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (mState.value
|| Prefs.getBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, false)) {
// Do it right away.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
index a2c7633..2168b1f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
@@ -22,8 +22,10 @@
import android.os.Looper
import android.provider.Settings
import android.service.quicksettings.Tile
+import android.view.View
import com.android.internal.logging.MetricsLogger
import com.android.systemui.R
+import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.dagger.ControlsComponent
import com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE
@@ -96,16 +98,19 @@
super.handleDestroy()
}
- override fun handleClick() {
+ override fun handleClick(view: View?) {
if (state.state == Tile.STATE_ACTIVE) {
mUiHandler.post {
- mHost.collapsePanels()
val i = Intent().apply {
component = ComponentName(mContext, ControlsActivity::class.java)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
putExtra(ControlsUiController.EXTRA_ANIMATE, true)
}
- mContext.startActivity(i)
+
+ val animationController = view?.let {
+ ActivityLaunchAnimator.Controller.fromView(it)
+ }
+ mActivityStarter.startActivity(i, true /* dismissShade */, animationController)
}
}
}
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 4b96cf3..e896c7c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -45,6 +45,8 @@
import android.widget.Switch;
import android.widget.Toast;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.notification.EnableZenModeDialog;
@@ -137,7 +139,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
// Zen is currently on
if (mState.value) {
mController.setZen(ZEN_MODE_OFF, null, TAG);
@@ -191,7 +193,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleSecondaryClick(@Nullable View view) {
if (mController.isVolumeRestricted()) {
// Collapse the panels, so the user can see the toast.
mHost.collapsePanels();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index b7cb615..c0065a0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -25,6 +25,8 @@
import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -93,7 +95,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (ActivityManager.isUserAMonkey()) {
return;
}
@@ -108,8 +110,8 @@
}
@Override
- protected void handleLongClick(View view) {
- handleClick();
+ protected void handleLongClick(@Nullable View view) {
+ handleClick(view);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 4e0f634..34f2b63 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -16,7 +16,6 @@
package com.android.systemui.qs.tiles;
-import android.annotation.Nullable;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
@@ -24,8 +23,11 @@
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.util.Log;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -105,7 +107,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
final boolean isEnabled = mState.value;
if (!isEnabled && mDataSaverController.isDataSaverEnabled()) {
return;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
index 1a17e61..5dcbf49 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
@@ -29,8 +29,11 @@
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.graph.SignalDrawable;
@@ -110,7 +113,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
mActivityStarter.postStartActivityDismissingKeyguard(INTERNET_PANEL, 0);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 830a1fd..6a018f6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -22,8 +22,11 @@
import android.os.UserManager;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -83,7 +86,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (mKeyguard.isMethodSecure() && mKeyguard.isShowing()) {
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
final boolean wasEnabled = mState.value;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
index 6ac2f9ae..cd2e27a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
@@ -27,8 +27,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -111,7 +114,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (getAdapter() == null) {
return;
}
@@ -123,11 +126,6 @@
}
@Override
- protected void handleSecondaryClick() {
- handleClick();
- }
-
- @Override
public CharSequence getTileLabel() {
return mContext.getString(R.string.quick_settings_nfc_label);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index 5369086..81813db 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -18,7 +18,6 @@
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_QS_MODE;
-import android.annotation.Nullable;
import android.content.Intent;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.NightDisplayListener;
@@ -29,8 +28,10 @@
import android.service.quicksettings.Tile;
import android.text.TextUtils;
import android.util.Log;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.android.internal.logging.MetricsLogger;
@@ -107,7 +108,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
// Enroll in forced auto mode if eligible.
if ("1".equals(Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.NIGHT_DISPLAY_FORCED_AUTO_MODE_AVAILABLE))
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
index 6f19276..ff830bc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
@@ -30,12 +30,15 @@
import android.service.quickaccesswallet.WalletCard;
import android.service.quicksettings.Tile;
import android.util.Log;
+import android.view.View;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
+import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
@@ -117,21 +120,25 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
+ ActivityLaunchAnimator.Controller animationController =
+ view == null ? null : ActivityLaunchAnimator.Controller.fromView(view);
+
mUiHandler.post(() -> {
- mHost.collapsePanels();
if (mHasCard) {
Intent intent = new Intent(mContext, WalletActivity.class)
.setAction(Intent.ACTION_VIEW)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(intent);
+ mActivityStarter.startActivity(intent, true /* dismissShade */,
+ animationController);
} else {
if (mQuickAccessWalletClient.createWalletIntent() == null) {
Log.w(TAG, "Could not get intent of the wallet app.");
return;
}
mActivityStarter.postStartActivityDismissingKeyguard(
- mQuickAccessWalletClient.createWalletIntent(), /* delay= */ 0);
+ mQuickAccessWalletClient.createWalletIntent(), /* delay= */ 0,
+ animationController);
}
});
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
index 44eeaf4..6921ad5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
@@ -23,8 +23,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.R;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R.drawable;
@@ -92,7 +95,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
mReduceBrightColorsController.setReduceBrightColorsActivated(!mState.value);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index 173cc05..0bbb5bd 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -23,8 +23,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -77,7 +80,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
final boolean newState = !mState.value;
mController.setRotationLocked(!newState);
refreshState(newState);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
index 6845dc5..a4148ee 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -22,8 +22,11 @@
import android.service.quicksettings.Tile;
import android.text.TextUtils;
import android.util.Log;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
@@ -80,7 +83,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (mController.isStarting()) {
cancelCountdown();
} else if (mController.isRecording()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
index 5d2d6f8..3d9c272 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
@@ -21,9 +21,11 @@
import android.os.Handler;
import android.os.Looper;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
import androidx.annotation.DrawableRes;
+import androidx.annotation.Nullable;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
@@ -82,7 +84,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (mKeyguard.isMethodSecure() && mKeyguard.isShowing()) {
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
mSensorPrivacyController.setSensorBlocked(getSensorId(),
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
index 0ef5bc8..596d8f0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
@@ -24,8 +24,11 @@
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.text.TextUtils;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.systemui.R;
@@ -101,7 +104,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (getState().state == Tile.STATE_UNAVAILABLE) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
index 2590f37..e110a64 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
@@ -22,6 +22,9 @@
import android.os.Looper;
import android.provider.Settings;
import android.util.Pair;
+import android.view.View;
+
+import androidx.annotation.Nullable;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -78,7 +81,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
showDetail(true);
}
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 86ea50c..efac141 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -30,6 +30,8 @@
import android.view.ViewGroup;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.wifi.AccessPoint;
@@ -129,7 +131,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
// Secondary clicks are header clicks, just toggle.
mState.copyTo(mStateBeforeClick);
boolean wifiEnabled = mState.value;
@@ -148,7 +150,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleSecondaryClick(@Nullable View view) {
if (!mWifiController.canConfigWifi()) {
mActivityStarter.postStartActivityDismissingKeyguard(
new Intent(Settings.ACTION_WIFI_SETTINGS), 0);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index c88a002..ef2c1c9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -21,8 +21,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.quicksettings.Tile;
+import android.view.View;
import android.widget.Switch;
+import androidx.annotation.Nullable;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
@@ -75,7 +78,7 @@
}
@Override
- public void handleClick() {
+ public void handleClick(@Nullable View view) {
mProfileController.setWorkModeEnabled(!mState.value);
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
index 5cd3e57..08cdebd 100644
--- a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
@@ -43,6 +43,7 @@
import android.text.format.DateUtils;
import android.util.Log;
import android.util.LongSparseArray;
+import android.view.View;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Dumpable;
@@ -432,7 +433,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
if (dumpInProgress) return;
dumpInProgress = true;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index 57e9d2b..7c73b4c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -40,7 +40,9 @@
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.FeatureFlagUtils;
+import android.view.View;
+import androidx.annotation.Nullable;
import androidx.test.filters.SmallTest;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
@@ -430,7 +432,7 @@
}
@Override
- protected void handleClick() {}
+ protected void handleClick(@Nullable View view) {}
@Override
protected void handleUpdateState(State state, Object arg) {}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
index c35f8b6..f2f4f07 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
@@ -34,7 +34,6 @@
import static org.mockito.Mockito.when;
import android.Manifest;
-import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -49,6 +48,7 @@
import android.util.FeatureFlagUtils;
import android.view.View;
+import androidx.annotation.Nullable;
import androidx.test.filters.SmallTest;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
@@ -414,10 +414,10 @@
}
@Override
- public void click() {}
+ public void click(@Nullable View view) {}
@Override
- public void secondaryClick() {}
+ public void secondaryClick(@Nullable View view) {}
@Override
public void longClick(@Nullable View view) {}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
index 2d6ed7c..80231a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
@@ -49,7 +49,9 @@
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import android.view.View;
+import androidx.annotation.Nullable;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.InstanceId;
@@ -124,7 +126,7 @@
@Test
public void testClick_Metrics() {
- mTile.click();
+ mTile.click(null /* view */);
verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_CLICK)));
assertEquals(1, mUiEventLoggerFake.numLogs());
UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0);
@@ -135,14 +137,14 @@
public void testClick_log() {
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
- mTile.click();
+ mTile.click(null /* view */);
verify(mQsLogger).logTileClick(SPEC, StatusBarState.SHADE, Tile.STATE_ACTIVE);
}
@Test
public void testClick_Metrics_Status_Bar_Status() {
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
- mTile.click();
+ mTile.click(null /* view */);
verify(mMetricsLogger).write(mLogCaptor.capture());
assertEquals(StatusBarState.SHADE, mLogCaptor.getValue()
.getTaggedData(FIELD_STATUS_BAR_STATE));
@@ -151,19 +153,19 @@
@Test
public void testClick_falsing() {
mFalsingManager.setFalseTap(true);
- mTile.click();
+ mTile.click(null /* view */);
mTestableLooper.processAllMessages();
assertThat(mTile.mClicked).isFalse();
mFalsingManager.setFalseTap(false);
- mTile.click();
+ mTile.click(null /* view */);
mTestableLooper.processAllMessages();
assertThat(mTile.mClicked).isTrue();
}
@Test
public void testSecondaryClick_Metrics() {
- mTile.secondaryClick();
+ mTile.secondaryClick(null /* view */);
verify(mMetricsLogger).write(argThat(new TileLogMatcher(ACTION_QS_SECONDARY_CLICK)));
assertEquals(1, mUiEventLoggerFake.numLogs());
UiEventLoggerFake.FakeUiEvent event = mUiEventLoggerFake.get(0);
@@ -174,14 +176,14 @@
public void testSecondaryClick_log() {
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
- mTile.secondaryClick();
+ mTile.secondaryClick(null /* view */);
verify(mQsLogger).logTileSecondaryClick(SPEC, StatusBarState.SHADE, Tile.STATE_ACTIVE);
}
@Test
public void testSecondaryClick_Metrics_Status_Bar_Status() {
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD);
- mTile.secondaryClick();
+ mTile.secondaryClick(null /* view */);
verify(mMetricsLogger).write(mLogCaptor.capture());
assertEquals(StatusBarState.KEYGUARD, mLogCaptor.getValue()
.getTaggedData(FIELD_STATUS_BAR_STATE));
@@ -208,7 +210,7 @@
@Test
public void testLongClick_Metrics_Status_Bar_Status() {
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE_LOCKED);
- mTile.click();
+ mTile.click(null /* view */);
verify(mMetricsLogger).write(mLogCaptor.capture());
assertEquals(StatusBarState.SHADE_LOCKED, mLogCaptor.getValue()
.getTaggedData(FIELD_STATUS_BAR_STATE));
@@ -401,7 +403,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleClick(@Nullable View view) {
mClicked = true;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
index 9674a60..a435768 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
@@ -122,10 +122,11 @@
@Test
fun testActivityStartedWhenNullNextAlarm() {
callbackCaptor.value.onNextAlarmChanged(null)
- tile.click()
+ tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(activityStarter).postStartActivityDismissingKeyguard(tile.defaultIntent, 0)
+ verify(activityStarter).postStartActivityDismissingKeyguard(tile.defaultIntent, 0,
+ null /* animationController */)
}
@Test
@@ -141,9 +142,10 @@
fun testActivityStartedWhenNextAlarm() {
val alarmInfo = AlarmManager.AlarmClockInfo(1L, pendingIntent)
callbackCaptor.value.onNextAlarmChanged(alarmInfo)
- tile.click()
+ tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(activityStarter).postStartActivityDismissingKeyguard(pendingIntent)
+ verify(activityStarter).postStartActivityDismissingKeyguard(pendingIntent,
+ null /* animationController */)
}
}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
index 7d39361..7c1a5f5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
@@ -240,7 +240,7 @@
when(mController.getCastDevices()).thenReturn(devices);
enableWifiAndProcessMessages();
- mCastTile.handleClick();
+ mCastTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
verify(mActivityStarter, times(1)).postQSRunnableDismissingKeyguard(any());
@@ -256,7 +256,7 @@
when(mController.getCastDevices()).thenReturn(devices);
enableWifiAndProcessMessages();
- mCastTile.handleClick();
+ mCastTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
verify(mController, times(1)).stopCasting(same(device));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
index a59f45d..2299030 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
@@ -28,6 +28,7 @@
import com.android.internal.logging.MetricsLogger
import com.android.internal.logging.UiEventLogger
import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.controller.ControlsController
@@ -40,6 +41,7 @@
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.capture
+import com.android.systemui.util.mockito.eq
import com.android.systemui.util.settings.FakeSettings
import com.android.systemui.util.settings.SecureSettings
import com.google.common.truth.Truth.assertThat
@@ -47,6 +49,7 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.`when`
@@ -253,10 +256,11 @@
@Test
fun testNoDialogWhenUnavailable() {
- tile.click()
+ tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(spiedContext, never()).startActivity(any(Intent::class.java))
+ verify(activityStarter, never()).startActivity(any(), anyBoolean(),
+ any<ActivityLaunchAnimator.Controller>())
}
@Test
@@ -270,10 +274,11 @@
listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
testableLooper.processAllMessages()
- tile.click()
+ tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(spiedContext).startActivity(any(Intent::class.java))
+ verify(activityStarter).startActivity(any(), eq(true) /* dismissShade */,
+ eq(null) as ActivityLaunchAnimator.Controller?)
}
@Test
@@ -288,10 +293,11 @@
listingCallbackCaptor.value.onServicesUpdated(listOf(serviceInfo))
testableLooper.processAllMessages()
- tile.click()
+ tile.click(null /* view */)
testableLooper.processAllMessages()
- verify(spiedContext, never()).startActivity(any(Intent::class.java))
+ verify(activityStarter, never()).startActivity(any(), anyBoolean(),
+ any<ActivityLaunchAnimator.Controller>())
}
private fun createTile(): DeviceControlsTile {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
index 4bba0d0..2f28b13 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
@@ -62,6 +62,7 @@
import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.QSTile;
@@ -186,11 +187,12 @@
when(mQuickAccessWalletClient.createWalletIntent()).thenReturn(intent);
setUpWalletCard(/* hasCard= */ false);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
verify(mActivityStarter, times(1))
- .postStartActivityDismissingKeyguard(eq(intent), anyInt());
+ .postStartActivityDismissingKeyguard(eq(intent), anyInt(),
+ eq(null) /* animationController */);
}
@Test
@@ -198,7 +200,7 @@
when(mQuickAccessWalletClient.createWalletIntent()).thenReturn(null);
setUpWalletCard(/* hasCard= */ false);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
verifyZeroInteractions(mActivityStarter);
@@ -208,10 +210,11 @@
public void testHandleClick_hasCards_startWalletActivity() {
setUpWalletCard(/* hasCard= */ true);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
- verify(mSpiedContext).startActivity(mIntentCaptor.capture());
+ verify(mActivityStarter).startActivity(mIntentCaptor.capture(), eq(true) /* dismissShade */,
+ (ActivityLaunchAnimator.Controller) eq(null));
Intent nextStartedIntent = mIntentCaptor.getValue();
String walletClassName = "com.android.systemui.wallet.ui.WalletActivity";
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
index 9799514..df4908d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
@@ -121,7 +121,7 @@
// Validity check
assertEquals(Tile.STATE_INACTIVE, mTile.getState().state);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
verify(mReduceBrightColorsController, times(1))
.setReduceBrightColorsActivated(eq(true));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
index 2215433..e4af21a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
@@ -106,7 +106,7 @@
assertTrue(mTile.getState().secondaryLabel.toString().equals(
mContext.getString(R.string.quick_settings_screen_record_start)));
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
mTestableLooper.processAllMessages();
verify(mController, times(1)).getPromptIntent();
}
@@ -130,7 +130,7 @@
when(mController.isStarting()).thenReturn(true);
when(mController.isRecording()).thenReturn(false);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
verify(mController, times(1)).cancelCountdown();
}
@@ -155,7 +155,7 @@
when(mController.isStarting()).thenReturn(false);
when(mController.isRecording()).thenReturn(true);
- mTile.handleClick();
+ mTile.handleClick(null /* view */);
verify(mController, times(1)).stopRecording();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt b/packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
index 3f095c7..bff99bf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
@@ -41,6 +41,7 @@
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> any(type: Class<T>): T = Mockito.any<T>(type)
+inline fun <reified T> any(): T = any(T::class.java)
/**
* Returns ArgumentCaptor.capture() as nullable type to avoid java.lang.IllegalStateException