From e3c59256794448c67e01333a9f5036559b1bd502 Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 2 May 2017 21:32:27 -0700 Subject: [PATCH] Use source bounds/activity options for App Info System Shortcut Bug: 37923215 Change-Id: I6c3e64b7a98223ab26fde80c0a86dd169200065f --- src/com/android/launcher3/InfoDropTarget.java | 9 ++++++++- src/com/android/launcher3/Launcher.java | 4 ++-- src/com/android/launcher3/compat/LauncherAppsCompat.java | 7 ++++++- .../android/launcher3/compat/LauncherAppsCompatVL.java | 5 +++-- src/com/android/launcher3/popup/SystemShortcut.java | 6 +++++- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java index 34adf47a18..0608fdd2e4 100644 --- a/src/com/android/launcher3/InfoDropTarget.java +++ b/src/com/android/launcher3/InfoDropTarget.java @@ -19,6 +19,8 @@ package com.android.launcher3; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; +import android.graphics.Rect; +import android.os.Bundle; import android.provider.Settings; import android.util.AttributeSet; import android.util.Log; @@ -60,6 +62,11 @@ public class InfoDropTarget extends UninstallDropTarget { */ public static boolean startDetailsActivityForInfo( ItemInfo info, Launcher launcher, DropTargetResultCallback callback) { + return startDetailsActivityForInfo(info, launcher, callback, null, null); + } + + public static boolean startDetailsActivityForInfo(ItemInfo info, Launcher launcher, + DropTargetResultCallback callback, Rect sourceBounds, Bundle opts) { boolean result = false; ComponentName componentName = null; if (info instanceof AppInfo) { @@ -74,7 +81,7 @@ public class InfoDropTarget extends UninstallDropTarget { if (componentName != null) { try { LauncherAppsCompat.getInstance(launcher) - .showAppDetailsForProfile(componentName, info.user); + .showAppDetailsForProfile(componentName, info.user, sourceBounds, opts); result = true; } catch (SecurityException | ActivityNotFoundException e) { Toast.makeText(launcher, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 3c29f5e685..9d1823d686 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2668,7 +2668,7 @@ public class Launcher extends BaseActivity } @TargetApi(Build.VERSION_CODES.M) - private Bundle getActivityLaunchOptions(View v) { + public Bundle getActivityLaunchOptions(View v) { if (Utilities.ATLEAST_MARSHMALLOW) { int left = 0, top = 0; int width = v.getMeasuredWidth(), height = v.getMeasuredHeight(); @@ -2694,7 +2694,7 @@ public class Launcher extends BaseActivity return null; } - private Rect getViewBounds(View v) { + public Rect getViewBounds(View v) { int[] pos = new int[2]; v.getLocationOnScreen(pos); return new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1] + v.getHeight()); diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index f17d8deefd..e997a99936 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -78,7 +78,8 @@ public abstract class LauncherAppsCompat { Rect sourceBounds, Bundle opts); public abstract ApplicationInfo getApplicationInfo( String packageName, int flags, UserHandle user); - public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user); + public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user, + Rect sourceBounds, Bundle opts); public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); public abstract boolean isPackageEnabledForProfile(String packageName, UserHandle user); @@ -142,4 +143,8 @@ public abstract class LauncherAppsCompat { return null; } } + + public void showAppDetailsForProfile(ComponentName component, UserHandle user) { + showAppDetailsForProfile(component, user, null, null); + } } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index 58683db758..647c31593b 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -95,8 +95,9 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { } @Override - public void showAppDetailsForProfile(ComponentName component, UserHandle user) { - mLauncherApps.startAppDetailsActivity(component, user, null, null); + public void showAppDetailsForProfile(ComponentName component, UserHandle user, + Rect sourceBounds, Bundle opts) { + mLauncherApps.startAppDetailsActivity(component, user, sourceBounds, opts); } @Override diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index e48e349a67..08e17dcb72 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -1,7 +1,9 @@ package com.android.launcher3.popup; import android.content.Context; +import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.os.Bundle; import android.view.View; import com.android.launcher3.InfoDropTarget; @@ -81,7 +83,9 @@ public abstract class SystemShortcut { return new View.OnClickListener() { @Override public void onClick(View view) { - InfoDropTarget.startDetailsActivityForInfo(itemInfo, launcher, null); + Rect sourceBounds = launcher.getViewBounds(view); + Bundle opts = launcher.getActivityLaunchOptions(view); + InfoDropTarget.startDetailsActivityForInfo(itemInfo, launcher, null, sourceBounds, opts); } }; }