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

Commit c8dfe980 authored by Mehdi Alizadeh's avatar Mehdi Alizadeh Committed by Android (Google) Code Review
Browse files

Merge "Use old API only if no share targets are published"

parents a91b6af7 85fd3d5c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -76,4 +76,6 @@ interface IShortcutService {

    // System API used by framework's ShareSheet (ChooserActivity)
    ParceledListSlice getShareTargets(String packageName, in IntentFilter filter, int userId);

    boolean hasShareTargets(String packageName, String packageToCheck, int userId);
}
 No newline at end of file
+17 −0
Original line number Diff line number Diff line
@@ -635,4 +635,21 @@ public class ShortcutManager {
                    }
                };
    }

    /**
     * Used by framework's ShareSheet (ChooserActivity.java) to check if a given package has share
     * target definitions in it's resources.
     *
     * @param packageName Package to check for share targets.
     * @return True if the package has any share target definitions, False otherwise.
     * @hide
     */
    public boolean hasShareTargets(@NonNull String packageName) {
        try {
            return mService.hasShareTargets(mContext.getPackageName(), packageName,
                    injectMyUserId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -513,6 +513,7 @@ public class ChooserActivity extends ResolverActivity {

    void queryTargetServices(ChooserListAdapter adapter) {
        final PackageManager pm = getPackageManager();
        ShortcutManager sm = (ShortcutManager) getSystemService(ShortcutManager.class);
        int targetsToQuery = 0;
        for (int i = 0, N = adapter.getDisplayResolveInfoCount(); i < N; i++) {
            final DisplayResolveInfo dri = adapter.getDisplayResolveInfo(i);
@@ -522,6 +523,11 @@ public class ChooserActivity extends ResolverActivity {
                continue;
            }
            final ActivityInfo ai = dri.getResolveInfo().activityInfo;
            if (USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS
                    && sm.hasShareTargets(ai.packageName)) {
                // Share targets will be queried from ShortcutManager
                continue;
            }
            final Bundle md = ai.metaData;
            final String serviceName = md != null ? convertServiceName(ai.packageName,
                    md.getString(ChooserTargetService.META_DATA_NAME)) : null;
+4 −0
Original line number Diff line number Diff line
@@ -690,6 +690,10 @@ class ShortcutPackage extends ShortcutPackageItem {
        return result;
    }

    public boolean hasShareTargets() {
        return !mShareTargets.isEmpty();
    }

    /**
     * Return the filenames (excluding path names) of icon bitmap files from this package.
     */
+13 −0
Original line number Diff line number Diff line
@@ -2167,6 +2167,19 @@ public class ShortcutService extends IShortcutService.Stub {
        }
    }

    @Override
    public boolean hasShareTargets(String packageName, String packageToCheck,
            @UserIdInt int userId) {
        verifyCaller(packageName, userId);
        enforceSystem();

        synchronized (mLock) {
            throwIfUserLockedL(userId);

            return getPackageShortcutsLocked(packageToCheck, userId).hasShareTargets();
        }
    }

    @GuardedBy("mLock")
    private ParceledListSlice<ShortcutInfo> getShortcutsWithQueryLocked(@NonNull String packageName,
            @UserIdInt int userId, int cloneFlags, @NonNull Predicate<ShortcutInfo> query) {