Skip to content

Instantly share code, notes, and snippets.

@d4rken
Last active March 5, 2018 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save d4rken/80aa38f7b1a18649ec206f180ae0ecfc to your computer and use it in GitHub Desktop.
Save d4rken/80aa38f7b1a18649ec206f180ae0ecfc to your computer and use it in GitHub Desktop.
@AppComponent.Scope
public class AppRepo {
private final Object appMapLock = new Object();
private Map<String, PackageInfo> appMap;
private final IPCFunnel ipcFunnel;
@Inject
public AppRepo(IPCFunnel ipcFunnel) {this.ipcFunnel = ipcFunnel;}
public Map<String, PackageInfo> getAppMap(boolean refresh) {
synchronized (appMapLock) {
if (appMap == null || appMap.isEmpty() || refresh) {
appMap = new ConcurrentHashMap<>();
List<PackageInfo> appList = ipcFunnel.getInstalledPackages(PackageManager.GET_SHARED_LIBRARY_FILES);
for (PackageInfo pkg : appList) appMap.put(pkg.packageName, pkg);
//noinspection deprecation
appList = ipcFunnel.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo pkg : appList) appMap.put(pkg.packageName, pkg);
if (appMap.isEmpty()) throw new IPCBufferException("List of installed apps was empty!");
}
}
return new HashMap<>(appMap);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment