Launch app details for correct profile.

Support showing app details for apps in other
profiles.

Bug: 16371359

Change-Id: I1cabcd9f74f2a6ea6c4202a7d58af3ff3b458fd2
This commit is contained in:
Kenny Guy 2014-07-31 11:39:16 +01:00
parent e755d469d4
commit f07af7b77d
5 changed files with 43 additions and 7 deletions

View File

@ -26,6 +26,8 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.android.launcher3.compat.UserHandleCompat;
public class InfoDropTarget extends ButtonDropTarget { public class InfoDropTarget extends ButtonDropTarget {
private ColorStateList mOriginalTextColor; private ColorStateList mOriginalTextColor;
@ -82,8 +84,15 @@ public class InfoDropTarget extends ButtonDropTarget {
} else if (d.dragInfo instanceof PendingAddItemInfo) { } else if (d.dragInfo instanceof PendingAddItemInfo) {
componentName = ((PendingAddItemInfo) d.dragInfo).componentName; componentName = ((PendingAddItemInfo) d.dragInfo).componentName;
} }
final UserHandleCompat user;
if (d.dragInfo instanceof ItemInfo) {
user = ((ItemInfo) d.dragInfo).user;
} else {
user = UserHandleCompat.myUserHandle();
}
if (componentName != null) { if (componentName != null) {
mLauncher.startApplicationDetailsActivity(componentName); mLauncher.startApplicationDetailsActivity(componentName, user);
} }
// There is no post-drop animation, so clean up the DragView now // There is no post-drop animation, so clean up the DragView now

View File

@ -2726,13 +2726,19 @@ public class Launcher extends Activity
*/ */
protected void onInteractionBegin() {} protected void onInteractionBegin() {}
void startApplicationDetailsActivity(ComponentName componentName) { void startApplicationDetailsActivity(ComponentName componentName, UserHandleCompat user) {
String packageName = componentName.getPackageName(); String packageName = componentName.getPackageName();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, try {
Uri.fromParts("package", packageName, null)); LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(this);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | UserManagerCompat userManager = UserManagerCompat.getInstance(this);
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); launcherApps.showAppDetailsForProfile(componentName, user);
startActivitySafely(null, intent, "startApplicationDetailsActivity"); } catch (SecurityException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
Log.e(TAG, "Launcher does not have permission to launch settings");
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
Log.e(TAG, "Unable to launch settings");
}
} }
// returns true if the activity was started // returns true if the activity was started

View File

@ -66,6 +66,7 @@ public abstract class LauncherAppsCompat {
UserHandleCompat user); UserHandleCompat user);
public abstract void startActivityForProfile(ComponentName component, UserHandleCompat user, public abstract void startActivityForProfile(ComponentName component, UserHandleCompat user,
Rect sourceBounds, Bundle opts); Rect sourceBounds, Bundle opts);
public abstract void showAppDetailsForProfile(ComponentName component, UserHandleCompat user);
public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
public abstract boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user); public abstract boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user);

View File

@ -27,14 +27,21 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.graphics.Rect; import android.graphics.Rect;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
/**
* Version of {@link LauncherAppsCompat} for devices with API level 16.
* Devices Pre-L don't support multiple profiles in one launcher so
* user parameters are ignored and all methods operate on the current user.
*/
public class LauncherAppsCompatV16 extends LauncherAppsCompat { public class LauncherAppsCompatV16 extends LauncherAppsCompat {
private PackageManager mPm; private PackageManager mPm;
@ -81,6 +88,15 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
mContext.startActivity(launchIntent, opts); mContext.startActivity(launchIntent, opts);
} }
public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) {
String packageName = component.getPackageName();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
mContext.startActivity(intent, null);
}
public synchronized void addOnAppsChangedCallback(OnAppsChangedCallbackCompat callback) { public synchronized void addOnAppsChangedCallback(OnAppsChangedCallbackCompat callback) {
if (callback != null && !mCallbacks.contains(callback)) { if (callback != null && !mCallbacks.contains(callback)) {
mCallbacks.add(callback); mCallbacks.add(callback);

View File

@ -73,6 +73,10 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
mLauncherApps.startActivityForProfile(component, user.getUser(), sourceBounds, opts); mLauncherApps.startActivityForProfile(component, user.getUser(), sourceBounds, opts);
} }
public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) {
mLauncherApps.showAppDetailsForProfile(component, user.getUser(), null, null);
}
public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
WrappedCallback wrappedCallback = new WrappedCallback(callback); WrappedCallback wrappedCallback = new WrappedCallback(callback);
synchronized (mCallbacks) { synchronized (mCallbacks) {