package com.novoda.downloadmanager.lib; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import com.novoda.downloadmanager.lib.logger.LLog; class ConcurrentDownloadsLimitProvider { private static final int DEFAULT_MAX_CONCURRENT_DOWNLOADS = 5; private static final String METADATA_MAX_CONCURRENT_DOWNLOADS = "com.novoda.downloadmanager.MaxConcurrentDownloads"; private final PackageManager packageManager; private final String packageName; ConcurrentDownloadsLimitProvider(PackageManager packageManager, String packageName) { this.packageManager = packageManager; this.packageName = packageName; } public int getConcurrentDownloadsLimit() { try { ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); return getMaximumConcurrentDownloads(applicationInfo.metaData); } catch (PackageManager.NameNotFoundException e) { LLog.e("Application info not found for: " + packageName + " " + e.getMessage()); return DEFAULT_MAX_CONCURRENT_DOWNLOADS; } } private int getMaximumConcurrentDownloads(Bundle bundle) { if (bundle == null) { return DEFAULT_MAX_CONCURRENT_DOWNLOADS; } return bundle.getInt(METADATA_MAX_CONCURRENT_DOWNLOADS, DEFAULT_MAX_CONCURRENT_DOWNLOADS); } }