package denominator.example.android; import android.app.Application; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; import java.util.LinkedHashMap; import java.util.Map; import javax.inject.Singleton; import dagger.Module; import dagger.ObjectGraph; import dagger.Provides; import denominator.Credentials; import denominator.Provider; import denominator.example.android.ui.PreferencesActivity; import denominator.example.android.zone.ZoneListModule; import denominator.ultradns.UltraDNSProvider; import static android.widget.Toast.LENGTH_SHORT; public class DenominatorApplication extends Application { private static final String TAG = "Denominator:Application"; private ObjectGraph applicationGraph; @Override public void onCreate() { Log.i(TAG, " creating"); super.onCreate(); long start = System.currentTimeMillis(); @Module(injects = DenominatorApplication.class, complete = false) class ApplicationModule { @Provides @Singleton Application application() { return DenominatorApplication.this; } } Object[] modulesForGraph = new Object[4]; modulesForGraph[0] = new DenominatorProvider(); modulesForGraph[1] = new CredentialsFromPreferencesModule(); modulesForGraph[2] = new ApplicationModule(); modulesForGraph[3] = new ZoneListModule(); applicationGraph = ObjectGraph.create(modulesForGraph); long duration = System.currentTimeMillis() - start; String durationMessage = getString(R.string.init_duration, duration); Toast.makeText(this, durationMessage, LENGTH_SHORT).show(); Log.i(TAG, " created"); } public ObjectGraph getApplicationGraph() { return applicationGraph; } /** * Here's where to change for a different provider */ @Module(includes = UltraDNSProvider.Module.class, complete = false) static final class DenominatorProvider { @Provides @Singleton public Provider provider() { return new UltraDNSProvider(); } } @Module( injects = { PreferencesActivity.class }, library = true, complete = false ) static class CredentialsFromPreferencesModule { @Provides Credentials credentials(Application context, Provider provider) { PreferenceManager.getDefaultSharedPreferences(context); if (provider.credentialTypeToParameterNames().isEmpty()) { return Credentials.AnonymousCredentials.INSTANCE; } SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); String credentialType = provider.credentialTypeToParameterNames().keySet().iterator().next(); Map<String, String> creds = new LinkedHashMap<String, String>(); for (String parameter : provider.credentialTypeToParameterNames().get(credentialType)) { String value = sp.getString(parameter, null); creds.put(parameter, value); } return Credentials.MapCredentials.from(creds); } } }