Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b361d91 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Adding utility method to check the current home app

Test: Verified the libary with Launcher
Change-Id: I37c0c0a6c74484e6a34497168d841e4a92207b5b
parent a26ac5f7
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -21,8 +21,12 @@ import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.RemoteException;

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

public class PackageManagerWrapper {

    private static final String TAG = "PackageManagerWrapper";
@@ -47,4 +51,42 @@ public class PackageManagerWrapper {
            return null;
        }
    }

    /**
     * @return true if the packageName belongs to the current preferred home app on the device.
     *
     * If will also return false if there are multiple home apps and the user has not picked any
     * preferred home, in which case the user would see a disambiguation screen on going to home.
     */
    public boolean isDefaultHomeActivity(String packageName) {
        List<ResolveInfo> allHomeCandidates = new ArrayList<>();
        ComponentName home;
        try {
            home = mIPackageManager.getHomeActivities(allHomeCandidates);
        } catch (RemoteException e) {
            e.printStackTrace();
            return false;
        }

        if (home != null && packageName.equals(home.getPackageName())) {
            return true;
        }

        // Find the launcher with the highest priority and return that component if there are no
        // other home activity with the same priority.
        int lastPriority = Integer.MIN_VALUE;
        ComponentName lastComponent = null;
        final int size = allHomeCandidates.size();
        for (int i = 0; i < size; i++) {
            final ResolveInfo ri = allHomeCandidates.get(i);
            if (ri.priority > lastPriority) {
                lastComponent = ri.activityInfo.getComponentName();
                lastPriority = ri.priority;
            } else if (ri.priority == lastPriority) {
                // Two components found with same priority.
                lastComponent = null;
            }
        }
        return lastComponent != null && packageName.equals(lastComponent.getPackageName());
    }
}