diff --git a/protos/launcher_log.proto b/protos/launcher_log.proto index b3ed365b88..4129ae8ad9 100644 --- a/protos/launcher_log.proto +++ b/protos/launcher_log.proto @@ -113,6 +113,7 @@ enum ControlType { TASK_PREVIEW = 15; SPLIT_SCREEN_TARGET = 16; REMOTE_ACTION_SHORTCUT = 17; + APP_USAGE_SETTINGS = 18; } enum TipType { diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml index a76899d3da..c712703cba 100644 --- a/quickstep/res/values/strings.xml +++ b/quickstep/res/values/strings.xml @@ -36,6 +36,9 @@ Close + + App usage settings + Clear all diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index da5b79a9df..2a4226faa2 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -17,6 +17,7 @@ package com.android.quickstep.views; import static android.widget.Toast.LENGTH_SHORT; + import static com.android.launcher3.BaseActivity.fromContext; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; @@ -26,7 +27,9 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.app.ActivityOptions; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; import android.graphics.Outline; import android.graphics.drawable.Drawable; @@ -43,8 +46,10 @@ import android.widget.FrameLayout; import android.widget.Toast; import com.android.launcher3.BaseDraggingActivity; +import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.quickstep.RecentsModel; @@ -100,7 +105,7 @@ public class TaskView extends FrameLayout implements PageCallbacks { } }; - private static FloatProperty FOCUS_TRANSITION = + private static final FloatProperty FOCUS_TRANSITION = new FloatProperty("focusTransition") { @Override public void setValue(TaskView taskView, float v) { @@ -113,6 +118,9 @@ public class TaskView extends FrameLayout implements PageCallbacks { } }; + static final Intent SEE_TIME_IN_APP_TEMPLATE = + new Intent("com.android.settings.action.TIME_SPENT_IN_APP"); + private final OnAttachStateChangeListener mTaskMenuStateListener = new OnAttachStateChangeListener() { @Override @@ -142,6 +150,8 @@ public class TaskView extends FrameLayout implements PageCallbacks { private TaskThumbnailCache.ThumbnailLoadRequest mThumbnailLoadRequest; private TaskIconCache.IconLoadRequest mIconLoadRequest; + private long mAppRemainingTimeMs = -1; + public TaskView(Context context) { this(context, null); } @@ -195,6 +205,10 @@ public class TaskView extends FrameLayout implements PageCallbacks { return mSnapshotView.getTaskOverlay(); } + private boolean hasRemainingTime() { + return mAppRemainingTimeMs > 0; + } + public void launchTask(boolean animate) { launchTask(animate, (result) -> { if (!result) { @@ -421,6 +435,13 @@ public class TaskView extends FrameLayout implements PageCallbacks { } } + if (hasRemainingTime()) { + info.addAction( + new AccessibilityNodeInfo.AccessibilityAction( + R.string.accessibility_app_usage_settings, + getContext().getText(R.string.accessibility_app_usage_settings))); + } + final RecentsView recentsView = getRecentsView(); final AccessibilityNodeInfo.CollectionItemInfo itemInfo = AccessibilityNodeInfo.CollectionItemInfo.obtain( @@ -437,6 +458,11 @@ public class TaskView extends FrameLayout implements PageCallbacks { return true; } + if (action == R.string.accessibility_app_usage_settings) { + openAppUsageSettings(); + return true; + } + final List shortcuts = mSnapshotView.getTaskOverlay().getEnabledShortcuts(this); final int count = shortcuts.size(); @@ -455,6 +481,22 @@ public class TaskView extends FrameLayout implements PageCallbacks { return super.performAccessibilityAction(action, arguments); } + private void openAppUsageSettings() { + final Intent intent = new Intent(SEE_TIME_IN_APP_TEMPLATE) + .putExtra(Intent.EXTRA_PACKAGE_NAME, + mTask.getTopComponent().getPackageName()).addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + try { + final Launcher launcher = Launcher.getLauncher(getContext()); + launcher.startActivity(intent); + launcher.getUserEventDispatcher().logActionOnControl(LauncherLogProto.Action.Touch.TAP, + LauncherLogProto.ControlType.APP_USAGE_SETTINGS, this); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "Failed to open app usage settings for task " + + mTask.getTopComponent().getPackageName(), e); + } + } + private RecentsView getRecentsView() { return (RecentsView) getParent(); }