package com.lateensoft.pathfinder.toolkit.inject; import android.app.Application; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.AndroidRuntimeException; import com.google.inject.AbstractModule; import com.google.inject.Provider; import com.lateensoft.pathfinder.toolkit.pref.AppPreferences; import com.lateensoft.pathfinder.toolkit.pref.Preferences; public class ApplicationModule extends AbstractModule { private final Application application; private final Provider<PackageInfo> packageInfoProvider; private final Preferences preferences; public ApplicationModule(Application application, Provider<PackageInfo> packageInfoProvider, Preferences preferences) { this.application = application; this.packageInfoProvider = packageInfoProvider; this.preferences = preferences; } public ApplicationModule(Application application, Preferences preferences) { this(application, null, preferences); } @Override protected void configure() { bind(Preferences.class).toInstance(preferences); Provider<PackageInfo> infoProvider = packageInfoProvider == null ? new DefaultPackageInfoProvider() : packageInfoProvider; bind(PackageInfo.class).toProvider(infoProvider); } private class DefaultPackageInfoProvider implements Provider<PackageInfo> { @Override public PackageInfo get() { try { PackageManager pm = application.getPackageManager(); if (pm != null) { return pm.getPackageInfo(application.getPackageName(), 0); } else { throw new AndroidRuntimeException("No package manager found for application"); } } catch (PackageManager.NameNotFoundException e) { throw new AndroidRuntimeException("Failed to get PackageInfo for " + application.getPackageName(), e); } } } }