package com.google.android.stardroid; import android.accounts.AccountManager; import android.content.Context; import android.content.SharedPreferences; import android.content.res.AssetManager; import android.content.res.Resources; import android.hardware.SensorManager; import android.location.LocationManager; import android.net.ConnectivityManager; import android.preference.PreferenceManager; import android.util.Log; import com.google.android.stardroid.control.AstronomerModel; import com.google.android.stardroid.control.AstronomerModelImpl; import com.google.android.stardroid.control.MagneticDeclinationCalculator; import com.google.android.stardroid.control.RealMagneticDeclinationCalculator; import com.google.android.stardroid.control.ZeroMagneticDeclinationCalculator; import com.google.android.stardroid.layers.EclipticLayer; import com.google.android.stardroid.layers.GridLayer; import com.google.android.stardroid.layers.HorizonLayer; import com.google.android.stardroid.layers.LayerManager; import com.google.android.stardroid.layers.MeteorShowerLayer; import com.google.android.stardroid.layers.NewConstellationsLayer; import com.google.android.stardroid.layers.NewMessierLayer; import com.google.android.stardroid.layers.NewStarsLayer; import com.google.android.stardroid.layers.PlanetsLayer; import com.google.android.stardroid.layers.SkyGradientLayer; import com.google.android.stardroid.util.MiscUtil; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; /** * Dagger module * Created by johntaylor on 3/26/16. */ @Module public class ApplicationModule { private static final String TAG = MiscUtil.getTag(ApplicationModule.class); private StardroidApplication app; public ApplicationModule(StardroidApplication app) { Log.d(TAG, "Creating application module for " + app); this.app = app; } @Provides @Singleton StardroidApplication provideApplication() { return app; } @Provides Context provideContext() { return app; } @Provides @Singleton SharedPreferences provideSharedPreferences() { Log.d(TAG, "Providing shared preferences"); return PreferenceManager.getDefaultSharedPreferences(app); } @Provides @Singleton LocationManager provideLocationManager() { return (LocationManager) app.getSystemService(Context.LOCATION_SERVICE); } @Provides @Singleton AstronomerModel provideAstronomerModel( @Named("zero") MagneticDeclinationCalculator magneticDeclinationCalculator) { return new AstronomerModelImpl(magneticDeclinationCalculator); } @Provides @Singleton @Named("zero") MagneticDeclinationCalculator provideDefaultMagneticDeclinationCalculator() { return new ZeroMagneticDeclinationCalculator(); } @Provides @Singleton @Named("real") MagneticDeclinationCalculator provideRealMagneticDeclinationCalculator() { return new RealMagneticDeclinationCalculator(); } @Provides @Singleton ExecutorService provideBackgroundExecutor() { return new ScheduledThreadPoolExecutor(1); } @Provides @Singleton AssetManager provideAssetManager() { return app.getAssets(); } @Provides @Singleton Resources provideResources() { return app.getResources(); } @Provides @Singleton SensorManager provideSensorManager() { return (SensorManager) app.getSystemService(Context.SENSOR_SERVICE); } @Provides @Singleton ConnectivityManager provideConnectivityManager() { return (ConnectivityManager) app.getSystemService(Context.CONNECTIVITY_SERVICE); } @Provides @Singleton AccountManager provideAccountManager(Context context) { return AccountManager.get(context); } @Provides @Singleton LayerManager provideLayerManager( AssetManager assetManager, Resources resources, AstronomerModel model, SharedPreferences preferences) { Log.i(TAG, "Initializing LayerManager"); LayerManager layerManager = new LayerManager(preferences); layerManager.addLayer(new NewStarsLayer(assetManager, resources)); layerManager.addLayer(new NewMessierLayer(assetManager, resources)); layerManager.addLayer(new NewConstellationsLayer(assetManager, resources)); layerManager.addLayer(new PlanetsLayer(model, resources, preferences)); layerManager.addLayer(new MeteorShowerLayer(model, resources)); layerManager.addLayer(new GridLayer(resources, 24, 19)); layerManager.addLayer(new HorizonLayer(model, resources)); layerManager.addLayer(new EclipticLayer(resources)); layerManager.addLayer(new SkyGradientLayer(model, resources)); // layerManager.addLayer(new IssLayer(resources, getModel())); layerManager.initialize(); return layerManager; } }