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

Commit 2f1f06cb authored by Sunny Goyal's avatar Sunny Goyal Committed by Android (Google) Code Review
Browse files

Merge "Adding utility method to check the current home app"

parents c110d259 8b361d91
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());
    }
}