diff options
author | Tony Wickham <twickham@google.com> | 2017-04-05 13:14:01 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2017-04-05 13:14:01 -0700 |
commit | 6c300c89ecbac04c557a4695b1597ed35150f420 (patch) | |
tree | 086e9d50f1914a021267b61be27fab1f06803cb5 /src/com/android/launcher3/compat | |
parent | 2dbcfb6cb01ebf7563810aa0b7f1c6638053faed (diff) | |
parent | 128b7e59a12ae861be81adb38c3eb9ccde61c6b5 (diff) | |
download | android_packages_apps_Trebuchet-6c300c89ecbac04c557a4695b1597ed35150f420.tar.gz android_packages_apps_Trebuchet-6c300c89ecbac04c557a4695b1597ed35150f420.tar.bz2 android_packages_apps_Trebuchet-6c300c89ecbac04c557a4695b1597ed35150f420.zip |
resolve merge conflicts of 128b7e59a to ub-launcher3-master
Test: I solemnly swear I tested this conflict resolution.
Change-Id: I927373593dfb1b67b504a76b1ad013357b363a6e
Diffstat (limited to 'src/com/android/launcher3/compat')
6 files changed, 114 insertions, 16 deletions
diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java index 257d0ad83..3efbbfba5 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompat.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompat.java @@ -24,9 +24,13 @@ import android.content.ComponentName; import android.content.Context; import android.os.Bundle; import android.os.UserHandle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.android.launcher3.LauncherAppWidgetProviderInfo; +import com.android.launcher3.Utilities; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.PackageUserKey; import java.util.HashMap; import java.util.List; @@ -39,7 +43,11 @@ public abstract class AppWidgetManagerCompat { public static AppWidgetManagerCompat getInstance(Context context) { synchronized (sInstanceLock) { if (sInstance == null) { - sInstance = new AppWidgetManagerCompatVL(context.getApplicationContext()); + if (Utilities.isAtLeastO()) { + sInstance = new AppWidgetManagerCompatVO(context.getApplicationContext()); + } else { + sInstance = new AppWidgetManagerCompatVL(context.getApplicationContext()); + } } return sInstance; } @@ -62,7 +70,8 @@ public abstract class AppWidgetManagerCompat { return info == null ? null : LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); } - public abstract List<AppWidgetProviderInfo> getAllProviders(); + public abstract List<AppWidgetProviderInfo> getAllProviders( + @Nullable PackageUserKey packageUser); public abstract boolean bindAppWidgetIdIfAllowed( int appWidgetId, AppWidgetProviderInfo info, Bundle options); diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java index 61dd1a5b7..f239f5c31 100644 --- a/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVL.java @@ -22,36 +22,48 @@ import android.appwidget.AppWidgetProviderInfo; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; -import android.content.pm.PackageManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; +import android.support.annotation.Nullable; import android.widget.Toast; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.R; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.PackageUserKey; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; class AppWidgetManagerCompatVL extends AppWidgetManagerCompat { private final UserManager mUserManager; - private final PackageManager mPm; AppWidgetManagerCompatVL(Context context) { super(context); - mPm = context.getPackageManager(); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); } @Override - public List<AppWidgetProviderInfo> getAllProviders() { - ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>(); - for (UserHandle user : mUserManager.getUserProfiles()) { - providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user)); + public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) { + if (packageUser == null) { + ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>(); + for (UserHandle user : mUserManager.getUserProfiles()) { + providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user)); + } + return providers; + } + // Only get providers for the given package/user. + List<AppWidgetProviderInfo> providers = new ArrayList<>(mAppWidgetManager + .getInstalledProvidersForProfile(packageUser.mUser)); + Iterator<AppWidgetProviderInfo> iterator = providers.iterator(); + while (iterator.hasNext()) { + if (!iterator.next().provider.getPackageName().equals(packageUser.mPackageName)) { + iterator.remove(); + } } return providers; } diff --git a/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java b/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java new file mode 100644 index 000000000..bde8b7801 --- /dev/null +++ b/src/com/android/launcher3/compat/AppWidgetManagerCompatVO.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.compat; + +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProviderInfo; +import android.content.Context; +import android.os.UserHandle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.android.launcher3.util.PackageUserKey; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +class AppWidgetManagerCompatVO extends AppWidgetManagerCompatVL { + + AppWidgetManagerCompatVO(Context context) { + super(context); + } + + @Override + public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) { + if (packageUser == null) { + return super.getAllProviders(null); + } + // TODO: don't use reflection once API and sdk are ready. + try { + return (List<AppWidgetProviderInfo>) AppWidgetManager.class.getMethod( + "getInstalledProvidersForPackage", String.class, UserHandle.class) + .invoke(mAppWidgetManager, packageUser.mPackageName, packageUser.mUser); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + Log.e("AppWidgetManagerCompat", "Failed to call new API", e); + } + return super.getAllProviders(packageUser); + } +} diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index b03a302ee..01d0e1784 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -33,6 +33,7 @@ import com.android.launcher3.Utilities; import com.android.launcher3.graphics.LauncherIcons; import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.util.LooperExecutor; +import com.android.launcher3.util.PackageUserKey; import java.util.List; @@ -83,7 +84,8 @@ public abstract class LauncherAppsCompat { public abstract boolean isPackageEnabledForProfile(String packageName, UserHandle user); public abstract boolean isActivityEnabledForProfile(ComponentName component, UserHandle user); - public abstract List<ShortcutConfigActivityInfo> getCustomShortcutActivityList(); + public abstract List<ShortcutConfigActivityInfo> getCustomShortcutActivityList( + @Nullable PackageUserKey packageUser); /** * request.accept() will initiate the following flow: diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index 459017392..58683db75 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -29,9 +29,11 @@ import android.graphics.Rect; import android.os.Bundle; import android.os.Process; import android.os.UserHandle; +import android.support.annotation.Nullable; import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVL; import com.android.launcher3.shortcuts.ShortcutInfoCompat; +import com.android.launcher3.util.PackageUserKey; import java.util.ArrayList; import java.util.HashMap; @@ -175,12 +177,19 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { } @Override - public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList() { - PackageManager pm = mContext.getPackageManager(); + public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList( + @Nullable PackageUserKey packageUser) { List<ShortcutConfigActivityInfo> result = new ArrayList<>(); + if (packageUser != null && !packageUser.mUser.equals(Process.myUserHandle())) { + return result; + } + PackageManager pm = mContext.getPackageManager(); for (ResolveInfo info : pm.queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0)) { - result.add(new ShortcutConfigActivityInfoVL(info.activityInfo, pm)); + if (packageUser == null || packageUser.mPackageName + .equals(info.activityInfo.packageName)) { + result.add(new ShortcutConfigActivityInfoVL(info.activityInfo, pm)); + } } return result; } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java index da248cf94..95f2e74f4 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java @@ -23,9 +23,11 @@ import android.content.pm.LauncherApps; import android.os.Build; import android.os.Process; import android.os.UserHandle; +import android.support.annotation.Nullable; import android.util.Log; import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVO; +import com.android.launcher3.util.PackageUserKey; import java.lang.reflect.Method; import java.util.ArrayList; @@ -45,17 +47,28 @@ public class LauncherAppsCompatVO extends LauncherAppsCompatVL { } @Override - public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList() { + public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList( + @Nullable PackageUserKey packageUser) { List<ShortcutConfigActivityInfo> result = new ArrayList<>(); UserHandle myUser = Process.myUserHandle(); try { Method m = LauncherApps.class.getDeclaredMethod("getShortcutConfigActivityList", String.class, UserHandle.class); - for (UserHandle user : UserManagerCompat.getInstance(mContext).getUserProfiles()) { + final List<UserHandle> users; + final String packageName; + if (packageUser == null) { + users = UserManagerCompat.getInstance(mContext).getUserProfiles(); + packageName = null; + } else { + users = new ArrayList<>(1); + users.add(packageUser.mUser); + packageName = packageUser.mPackageName; + } + for (UserHandle user : users) { boolean ignoreTargetSdk = myUser.equals(user); List<LauncherActivityInfo> activities = - (List<LauncherActivityInfo>) m.invoke(mLauncherApps, null, user); + (List<LauncherActivityInfo>) m.invoke(mLauncherApps, packageName, user); for (LauncherActivityInfo activityInfo : activities) { if (ignoreTargetSdk || activityInfo.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) { |