diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java index 7b3bded174..f088d11760 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; @@ -58,12 +60,16 @@ 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) { if (info instanceof PromiseAppInfo) { PromiseAppInfo promiseAppInfo = (PromiseAppInfo) info; launcher.startActivity(promiseAppInfo.getMarketIntent()); return true; } - boolean result = false; ComponentName componentName = null; if (info instanceof AppInfo) { @@ -78,7 +84,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 7688929087..5eacbbe5f3 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2684,7 +2684,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(); @@ -2710,7 +2710,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 01d0e17848..472cfc9ec5 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 6747540eb2..a52d1d49b6 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.AbstractFloatingView; @@ -80,7 +82,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); } }; }