Skip to content

Commit

Permalink
Merge pull request #2334 from marunjar/fix_launching_component
Browse files Browse the repository at this point in the history
fix getLaunchingComponent
  • Loading branch information
marunjar authored Oct 6, 2024
2 parents 02554d3 + 30c77d4 commit 246330a
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 13 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/fr/neamar/kiss/DataHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -966,7 +966,7 @@ public void removeFromFavorites(UserHandle user) {
* @param packageName packageName
*/
public void addPackageToHistory(Context context, UserHandle userHandle, String packageName) {
ComponentName componentName = PackageManagerUtils.getLaunchingComponent(context, packageName);
ComponentName componentName = PackageManagerUtils.getLaunchingComponent(context, packageName, userHandle);
if (componentName != null) {
// add new package to history
String pojoID = userHandle.addUserSuffixToString("app://" + componentName.getPackageName() + "/" + componentName.getClassName(), '/');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static void handleEvent(@NonNull Context ctx, @Nullable String action, @N
private static boolean isAnyPackageVisible(Context ctx, String[] packageNames, UserHandle userHandle) {
Set<String> excludedApps = KissApplication.getApplication(ctx).getDataHandler().getExcluded();
for (String packageName : packageNames) {
ComponentName launchingComponent = PackageManagerUtils.getLaunchingComponent(ctx, packageName);
ComponentName launchingComponent = PackageManagerUtils.getLaunchingComponent(ctx, packageName, userHandle);
if (launchingComponent != null) {
boolean isExcluded = excludedApps.contains(AppPojo.getComponentName(launchingComponent.getPackageName(), launchingComponent.getClassName(), userHandle));
if (!isExcluded) {
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/fr/neamar/kiss/forwarder/Favorites.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import fr.neamar.kiss.result.Result;
import fr.neamar.kiss.ui.ListPopup;
import fr.neamar.kiss.utils.PackageManagerUtils;
import fr.neamar.kiss.utils.UserHandle;

public class Favorites extends Forwarder implements View.OnClickListener, View.OnLongClickListener, View.OnTouchListener, View.OnDragListener {
private static final String TAG = Favorites.class.getSimpleName();
Expand Down Expand Up @@ -399,7 +400,7 @@ private void addDefaultAppsToFavs() {
@Nullable
private ComponentName getLaunchingComponent(Intent intent) {
ComponentName componentName = PackageManagerUtils.getComponentName(mainActivity, intent);
ComponentName launchingComponent = PackageManagerUtils.getLaunchingComponent(mainActivity, componentName);
ComponentName launchingComponent = PackageManagerUtils.getLaunchingComponent(mainActivity, componentName, new UserHandle());
if (launchingComponent != null && !launchingComponent.getClassName().equals(DEFAULT_RESOLVER)) {
return launchingComponent;
}
Expand Down
8 changes: 5 additions & 3 deletions app/src/main/java/fr/neamar/kiss/result/SearchResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,9 @@ private Intent createSearchQueryIntent() {
private Drawable getIconByIntent(Context context, Intent intent) {
ComponentName componentName = PackageManagerUtils.getComponentName(context, intent);
if (componentName != null) {
UserHandle userHandle = new UserHandle();
IconsHandler iconsHandler = KissApplication.getApplication(context).getIconsHandler();
return iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName), new UserHandle());
return iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName, userHandle), userHandle);
}
return null;
}
Expand All @@ -186,10 +187,11 @@ private Drawable getIconByIntent(Context context, Intent intent) {
* @return icon, of best matching app for given package name
*/
private Drawable getIconByPackageName(Context context, String packageName) {
ComponentName componentName = PackageManagerUtils.getLaunchingComponent(context, packageName);
UserHandle userHandle = new UserHandle();
ComponentName componentName = PackageManagerUtils.getLaunchingComponent(context, packageName, userHandle);
if (componentName != null) {
IconsHandler iconsHandler = KissApplication.getApplication(context).getIconsHandler();
return iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName), new UserHandle());
return iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName, userHandle), userHandle);
}
return null;
}
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/fr/neamar/kiss/result/ShortcutsResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import fr.neamar.kiss.utils.PackageManagerUtils;
import fr.neamar.kiss.utils.ShortcutUtil;
import fr.neamar.kiss.utils.SpaceTokenizer;
import fr.neamar.kiss.utils.UserHandle;
import fr.neamar.kiss.utils.Utilities;

public class ShortcutsResult extends Result<ShortcutPojo> {
Expand Down Expand Up @@ -143,7 +144,8 @@ private Drawable getAppDrawable(Context context) {
Intent intent = Intent.parseUri(pojo.intentUri, 0);
ComponentName componentName = PackageManagerUtils.getComponentName(context, intent);
if (componentName != null) {
appDrawable = iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName), new fr.neamar.kiss.utils.UserHandle());
UserHandle userHandle = new UserHandle();
appDrawable = iconsHandler.getDrawableIconForPackage(PackageManagerUtils.getLaunchingComponent(context, componentName, userHandle), userHandle);
}
} catch (NullPointerException e) {
Log.e(TAG, "Unable to get activity icon for '" + pojo.getName() + "'", e);
Expand Down
28 changes: 22 additions & 6 deletions app/src/main/java/fr/neamar/kiss/utils/PackageManagerUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class PackageManagerUtils {
Expand Down Expand Up @@ -189,11 +191,11 @@ private static LauncherActivityInfo getLauncherActivityInfo(@NonNull Context con
* @param componentName componentName
* @return launching component name for given component
*/
public static ComponentName getLaunchingComponent(Context context, ComponentName componentName) {
public static ComponentName getLaunchingComponent(Context context, ComponentName componentName, UserHandle user) {
if (componentName == null) {
return null;
}
ComponentName launchingComponent = getLaunchingComponent(context, componentName.getPackageName());
ComponentName launchingComponent = getLaunchingComponent(context, componentName.getPackageName(), user);
if (launchingComponent != null) {
return launchingComponent;
}
Expand All @@ -205,13 +207,27 @@ public static ComponentName getLaunchingComponent(Context context, ComponentName
* @param packageName package name
* @return launching component name for given package
*/
public static ComponentName getLaunchingComponent(Context context, String packageName) {
public static ComponentName getLaunchingComponent(Context context, String packageName, UserHandle user) {
if (packageName == null) {
return null;
}
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (launchIntent != null) {
return launchIntent.getComponent();

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !user.isCurrentUser()) {
LauncherApps launcherApps = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE);
List<LauncherActivityInfo> activities = launcherApps.getActivityList(packageName, user.getRealHandle());
if (!activities.isEmpty()) {
List<ComponentName> componentNames = new ArrayList<>();
for (LauncherActivityInfo activity : activities) {
componentNames.add(activity.getComponentName());
}
Collections.sort(componentNames);
return componentNames.get(0);
}
} else {
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (launchIntent != null) {
return launchIntent.getComponent();
}
}
return null;
}
Expand Down

0 comments on commit 246330a

Please sign in to comment.