diff options
42 files changed, 206 insertions, 110 deletions
diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp index f415da839738..9f02fdbf3ec9 100644 --- a/packages/SystemUI/plugin/Android.bp +++ b/packages/SystemUI/plugin/Android.bp @@ -32,6 +32,7 @@ java_library { ], 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 462371489158..d1383eb79d85 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 @@ public interface QSTile { 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 925c9ebfe298..e40f2936de51 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 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr 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 1699a34e6c08..10eea828bcb4 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.TextUtils; 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 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener } @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 7e72f1a18e41..c973e8c6fc2c 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 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { @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 ba69dd530eac..5ff785dc32d9 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 static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 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.Log; 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy * 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy * 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 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy 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 07abb90f631c..22cd6f86b165 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.provider.Settings.Global; 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 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> { } @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 2945c6b4e22a..c2a6255e11e8 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.provider.AlarmClock 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 @@ class AlarmTile @Inject constructor( } } - 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 49d3ff9439d6..e3024fa0eddc 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.Handler; 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 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements } @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 56df4d8de6c6..65b6617c5a25 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.View; 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 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { } @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 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { } @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 d78dbae9d439..4b13015361cc 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.ViewGroup; 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 @@ public class CastTile extends QSTileImpl<BooleanState> { } @Override - protected void handleSecondaryClick() { - handleClick(); - } - - @Override - protected void handleLongClick(View view) { - handleClick(); + protected void handleLongClick(@Nullable View view) { + handleClick(view); } @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 8cc6ff254083..8e886e82d352 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.ViewGroup; 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 @@ public class CellularTile extends QSTileImpl<SignalState> { } @Override - protected void handleClick() { + protected void handleClick(@Nullable View view) { if (getState().state == Tile.STATE_UNAVAILABLE) { return; } @@ -157,7 +159,7 @@ public class CellularTile extends QSTileImpl<SignalState> { } @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 ca7cf8319d32..5e502cc72c80 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.os.Looper; 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 @@ public class ColorInversionTile extends QSTileImpl<BooleanState> { } @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 61376f0610a4..5a11ff83ff9e 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.Handler; 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 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements 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 a2c7633c4746..2168b1f66aa9 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.Handler 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 @@ class DeviceControlsTile @Inject constructor( 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 4b96cf3dbf16..e896c7ca87e6 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.view.WindowManager; 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 @@ public class DndTile extends QSTileImpl<BooleanState> { } @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 @@ public class DndTile extends QSTileImpl<BooleanState> { } @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 b7cb615e166f..c0065a0ec371 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.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; @@ -93,7 +95,7 @@ public class FlashlightTile extends QSTileImpl<BooleanState> implements } @Override - protected void handleClick() { + protected void handleClick(@Nullable View view) { if (ActivityManager.isUserAMonkey()) { return; } @@ -108,8 +110,8 @@ public class FlashlightTile extends QSTileImpl<BooleanState> implements } @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 4e0f634ce22c..34f2b6331678 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.os.UserManager; 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 @@ public class HotspotTile extends QSTileImpl<BooleanState> { } @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 1a17e61111d9..5dcbf49a9b72 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.service.quicksettings.Tile; 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 @@ public class InternetTile extends QSTileImpl<SignalState> { } @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 830a1fd57d7f..6a018f61a733 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.Looper; 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 @@ public class LocationTile extends QSTileImpl<BooleanState> { } @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 6ac2f9ae202a..cd2e27a41f1e 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.Handler; 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 @@ public class NfcTile extends QSTileImpl<BooleanState> { } @Override - protected void handleClick() { + protected void handleClick(@Nullable View view) { if (getAdapter() == null) { return; } @@ -123,11 +126,6 @@ public class NfcTile extends QSTileImpl<BooleanState> { } @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 536908639def..81813db5abfd 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 @@ package com.android.systemui.qs.tiles; 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.provider.Settings; 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 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> implements } @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 6f19276b8d00..ff830bc952c1 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.QuickAccessWalletClient; 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 @@ public class QuickAccessWalletTile extends QSTileImpl<QSTile.State> { } @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 44eeaf4f2dee..6921ad549626 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.Handler; 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 @@ public class ReduceBrightColorsTile extends QSTileImpl<QSTile.BooleanState> } @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 173cc0597b0b..0bbb5bdd851a 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.Handler; 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 @@ public class RotationLockTile extends QSTileImpl<BooleanState> { } @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 6845dc593aa3..a4148eec3d82 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.os.Looper; 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 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState> } @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 5d2d6f8845a4..3d9c2721e7a8 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.hardware.SensorPrivacyManager.Sensors.Sensor; 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 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS } @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 0ef5bc8f926b..596d8f01248a 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.os.Looper; 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 @@ public class UiModeNightTile extends QSTileImpl<QSTile.BooleanState> implements } @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 2590f374a662..e110a6492b20 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.Handler; 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 @@ public class UserTile extends QSTileImpl<State> implements UserInfoController.On } @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 86ea50c64609..efac1414aeb6 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.View; 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 @@ public class WifiTile extends QSTileImpl<SignalState> { } @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 @@ public class WifiTile extends QSTileImpl<SignalState> { } @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 c88a002ddf92..ef2c1c903a85 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.Handler; 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 @@ public class WorkModeTile extends QSTileImpl<BooleanState> implements } @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 5cd3e5787a49..08cdebd5d80a 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.provider.Settings; 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 @@ public class GarbageMonitor implements Dumpable { } @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 57e9d2b1ffe8..7c73b4c44e90 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.AndroidTestingRunner; 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 @@ public class QSTileHostTest extends SysuiTestCase { } @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 c35f8b6f0b0d..f2f4f07725c9 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.verify; 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.ArraySet; 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 @@ public class TileQueryHelperTest extends SysuiTestCase { } @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 2d6ed7c2e4a0..80231a49bb44 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.service.quicksettings.Tile; 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 @@ public class QSTileImplTest extends SysuiTestCase { @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 class QSTileImplTest extends SysuiTestCase { 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 @@ public class QSTileImplTest extends SysuiTestCase { @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 class QSTileImplTest extends SysuiTestCase { 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 @@ public class QSTileImplTest extends SysuiTestCase { @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 @@ public class QSTileImplTest extends SysuiTestCase { } @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 9674a60c1ac5..a435768723d7 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 @@ class AlarmTileTest : SysuiTestCase() { @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 @@ class AlarmTileTest : SysuiTestCase() { 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 7d393610c2b5..7c1a5f5ebf30 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 @@ public class CastTileTest extends SysuiTestCase { when(mController.getCastDevices()).thenReturn(devices); enableWifiAndProcessMessages(); - mCastTile.handleClick(); + mCastTile.handleClick(null /* view */); mTestableLooper.processAllMessages(); verify(mActivityStarter, times(1)).postQSRunnableDismissingKeyguard(any()); @@ -256,7 +256,7 @@ public class CastTileTest extends SysuiTestCase { 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 aa766515cc13..51aeb150d4f8 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 androidx.test.filters.SmallTest 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.QSHost 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.Before 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` @@ -244,10 +247,11 @@ class DeviceControlsTileTest : SysuiTestCase() { @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 @@ -261,10 +265,11 @@ class DeviceControlsTileTest : SysuiTestCase() { 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 @@ -279,10 +284,11 @@ class DeviceControlsTileTest : SysuiTestCase() { 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 4bba0d0d23e4..2f28b13ec280 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.UiEventLogger; 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 @@ public class QuickAccessWalletTileTest extends SysuiTestCase { 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 @@ public class QuickAccessWalletTileTest extends SysuiTestCase { when(mQuickAccessWalletClient.createWalletIntent()).thenReturn(null); setUpWalletCard(/* hasCard= */ false); - mTile.handleClick(); + mTile.handleClick(null /* view */); mTestableLooper.processAllMessages(); verifyZeroInteractions(mActivityStarter); @@ -208,10 +210,11 @@ public class QuickAccessWalletTileTest extends SysuiTestCase { 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 979951409aa9..df4908ddc4ef 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 @@ public class ReduceBrightColorsTileTest extends SysuiTestCase { // 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 22154332c953..e4af21aa7cd4 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 @@ public class ScreenRecordTileTest extends SysuiTestCase { 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 @@ public class ScreenRecordTileTest extends SysuiTestCase { 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 @@ public class ScreenRecordTileTest extends SysuiTestCase { 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 3f095c7900f3..bff99bf340d6 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 @@ fun <T> eq(obj: T): T = Mockito.eq<T>(obj) * 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 |