diff --git a/app/build.gradle b/app/build.gradle index bd593b5f..45f3e2cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,10 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' -apply plugin: 'kotlin-kapt' +apply plugin: "com.android.application" +apply plugin: "kotlin-android" +apply plugin: "kotlin-kapt" +apply plugin: "kotlin-android-extensions" +apply plugin: "dagger.hilt.android.plugin" apply plugin: "androidx.navigation.safeargs.kotlin" android { @@ -77,8 +78,10 @@ dependencies { implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" - implementation "com.google.dagger:dagger:$dagger_version" - kapt "com.google.dagger:dagger-compiler:$dagger_version" + implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_viewmodel_version" + implementation "com.google.dagger:hilt-android:$hilt_version" + kapt "com.google.dagger:hilt-android-compiler:$hilt_version" + kapt "androidx.hilt:hilt-compiler:$hilt_viewmodel_version" implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c0435b15..0a2aaa1a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,7 +33,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme"> diff --git a/app/src/main/java/com/rtbishop/look4sat/Look4SatApp.kt b/app/src/main/java/com/rtbishop/look4sat/Look4SatApp.kt index a2708ea5..066347c5 100644 --- a/app/src/main/java/com/rtbishop/look4sat/Look4SatApp.kt +++ b/app/src/main/java/com/rtbishop/look4sat/Look4SatApp.kt @@ -20,12 +20,7 @@ package com.rtbishop.look4sat import android.app.Application -import com.rtbishop.look4sat.dagger.AppComponent -import com.rtbishop.look4sat.dagger.DaggerAppComponent +import dagger.hilt.android.HiltAndroidApp -class Look4SatApp : Application() { - - val appComponent: AppComponent by lazy { - DaggerAppComponent.factory().create(applicationContext) - } -} +@HiltAndroidApp +class Look4SatApp : Application() \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt similarity index 94% rename from app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt rename to app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt index d0d9e2f4..2737ccf8 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/SharedViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/SharedViewModel.kt @@ -17,13 +17,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.ui +package com.rtbishop.look4sat import android.net.Uri -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope +import androidx.hilt.Assisted +import androidx.hilt.lifecycle.ViewModelInject +import androidx.lifecycle.* import com.github.amsacode.predict4java.GroundStationPosition import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatEntry @@ -35,13 +34,13 @@ import com.rtbishop.look4sat.utility.PrefsManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.* -import javax.inject.Inject import javax.inject.Singleton @Singleton -class SharedViewModel @Inject constructor( +class SharedViewModel @ViewModelInject constructor( private val prefsManager: PrefsManager, - private val repository: Repository + private val repository: Repository, + @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel() { private val _passes = MutableLiveData>>() diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt deleted file mode 100644 index d043f941..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Look4Sat. Amateur radio and weather satellite tracker and passes predictor for Android. - * Copyright (C) 2019, 2020 Arty Bishop (bishop.arty@gmail.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package com.rtbishop.look4sat.dagger - -import android.content.Context -import com.rtbishop.look4sat.dagger.modules.* -import com.rtbishop.look4sat.ui.MainActivity -import com.rtbishop.look4sat.ui.fragments.EntriesFragment -import com.rtbishop.look4sat.ui.fragments.MapFragment -import com.rtbishop.look4sat.ui.fragments.PassesFragment -import com.rtbishop.look4sat.ui.fragments.PolarFragment -import dagger.BindsInstance -import dagger.Component -import javax.inject.Singleton - -@Singleton -@Component( - modules = [NetworkModule::class, PersistenceModule::class, - RepoModule::class, UtilityModule::class, ViewModelModule::class] -) -interface AppComponent { - - @Component.Factory - interface Factory { - fun create(@BindsInstance context: Context): AppComponent - } - - fun inject(mainActivity: MainActivity) - fun inject(entriesFragment: EntriesFragment) - fun inject(passesFragment: PassesFragment) - fun inject(polarFragment: PolarFragment) - fun inject(mapFragment: MapFragment) -} diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelFactory.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelFactory.kt deleted file mode 100644 index cdc135ac..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelFactory.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.rtbishop.look4sat.dagger - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import javax.inject.Inject -import javax.inject.Provider -import javax.inject.Singleton - -@Singleton -class ViewModelFactory @Inject constructor( - private val creators: Map, - @JvmSuppressWildcards Provider> -) : ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - val creator = creators[modelClass] ?: creators.entries.firstOrNull { - modelClass.isAssignableFrom(it.key) - }?.value ?: throw IllegalArgumentException("Unsupported ViewModel class: $modelClass") - try { - @Suppress("UNCHECKED_CAST") - return creator.get() as T - } catch (e: Exception) { - throw RuntimeException(e) - } - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelKey.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelKey.kt deleted file mode 100644 index dadc95f9..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/ViewModelKey.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.rtbishop.look4sat.dagger - -import androidx.lifecycle.ViewModel -import dagger.MapKey -import kotlin.reflect.KClass - -@Target( - AnnotationTarget.FUNCTION, - AnnotationTarget.PROPERTY_GETTER, - AnnotationTarget.PROPERTY_SETTER -) -@Retention(AnnotationRetention.RUNTIME) -@MapKey -annotation class ViewModelKey(val value: KClass) diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt deleted file mode 100644 index 660c7cc8..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/RepoModule.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.rtbishop.look4sat.dagger.modules - -import android.content.ContentResolver -import android.content.Context -import com.rtbishop.look4sat.repo.DefaultRepository -import com.rtbishop.look4sat.repo.Repository -import com.rtbishop.look4sat.repo.local.EntriesDao -import com.rtbishop.look4sat.repo.local.SourcesDao -import com.rtbishop.look4sat.repo.local.TransmittersDao -import com.rtbishop.look4sat.repo.remote.TransmittersApi -import dagger.Module -import dagger.Provides -import okhttp3.OkHttpClient -import javax.inject.Singleton - -@Module -class RepoModule { - - @Singleton - @Provides - fun provideContentResolver(context: Context): ContentResolver { - return context.applicationContext.contentResolver - } - - @Singleton - @Provides - fun provideDefaultRepository( - resolver: ContentResolver, - client: OkHttpClient, - transmittersApi: TransmittersApi, - entriesDao: EntriesDao, - transmittersDao: TransmittersDao, - sourcesDao: SourcesDao - ): Repository { - return DefaultRepository( - resolver, - client, - transmittersApi, - entriesDao, - sourcesDao, - transmittersDao - ) - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/ViewModelModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/ViewModelModule.kt deleted file mode 100644 index 476ce8d2..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/ViewModelModule.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.rtbishop.look4sat.dagger.modules - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.rtbishop.look4sat.dagger.ViewModelFactory -import com.rtbishop.look4sat.dagger.ViewModelKey -import com.rtbishop.look4sat.ui.SharedViewModel -import dagger.Binds -import dagger.Module -import dagger.multibindings.IntoMap - -@Module -abstract class ViewModelModule { - - @Binds - @IntoMap - @ViewModelKey(SharedViewModel::class) - abstract fun bindSharedViewModel(viewModel: SharedViewModel): ViewModel - - @Binds - abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory -} diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/NetworkModule.kt similarity index 86% rename from app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt rename to app/src/main/java/com/rtbishop/look4sat/di/NetworkModule.kt index beec93e6..0aa53ce0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/NetworkModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/di/NetworkModule.kt @@ -17,26 +17,29 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.dagger.modules +package com.rtbishop.look4sat.di import com.rtbishop.look4sat.repo.remote.TransmittersApi import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.scopes.ActivityScoped import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory -import javax.inject.Singleton @Module +@InstallIn(ActivityComponent::class) class NetworkModule { - @Singleton + @ActivityScoped @Provides fun provideWebClient(): OkHttpClient { return OkHttpClient() } - @Singleton + @ActivityScoped @Provides fun provideTransApi(): TransmittersApi { return Retrofit.Builder() diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/PersistenceModule.kt similarity index 80% rename from app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt rename to app/src/main/java/com/rtbishop/look4sat/di/PersistenceModule.kt index 869538cc..da00edff 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/di/PersistenceModule.kt @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.dagger.modules +package com.rtbishop.look4sat.di import android.content.Context import androidx.room.Room @@ -27,32 +27,36 @@ import com.rtbishop.look4sat.repo.local.SourcesDao import com.rtbishop.look4sat.repo.local.TransmittersDao import dagger.Module import dagger.Provides -import javax.inject.Singleton +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ActivityContext +import dagger.hilt.android.scopes.ActivityScoped @Module +@InstallIn(ActivityComponent::class) class PersistenceModule { - @Singleton + @ActivityScoped @Provides fun provideEntriesDao(db: SatelliteDb): EntriesDao { return db.entriesDao() } - @Singleton + @ActivityScoped @Provides fun provideTransDao(db: SatelliteDb): TransmittersDao { return db.transmittersDao() } - @Singleton + @ActivityScoped @Provides fun providesSourcesDao(db: SatelliteDb): SourcesDao { return db.sourcesDao() } - @Singleton + @ActivityScoped @Provides - fun provideSatDb(context: Context): SatelliteDb { + fun provideSatDb(@ActivityContext context: Context): SatelliteDb { return Room.databaseBuilder(context, SatelliteDb::class.java, "satDb").build() } } diff --git a/app/src/main/java/com/rtbishop/look4sat/di/RepoModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/RepoModule.kt new file mode 100644 index 00000000..fa2508bb --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/di/RepoModule.kt @@ -0,0 +1,67 @@ +/* + * Look4Sat. Amateur radio and weather satellite tracker and passes predictor for Android. + * Copyright (C) 2019, 2020 Arty Bishop (bishop.arty@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package com.rtbishop.look4sat.di + +import android.content.ContentResolver +import android.content.Context +import com.rtbishop.look4sat.repo.DefaultRepository +import com.rtbishop.look4sat.repo.Repository +import com.rtbishop.look4sat.repo.local.EntriesDao +import com.rtbishop.look4sat.repo.local.SourcesDao +import com.rtbishop.look4sat.repo.local.TransmittersDao +import com.rtbishop.look4sat.repo.remote.TransmittersApi +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ActivityContext +import dagger.hilt.android.scopes.ActivityScoped +import okhttp3.OkHttpClient + +@Module +@InstallIn(ActivityComponent::class) +class RepoModule { + + @ActivityScoped + @Provides + fun provideContentResolver(@ActivityContext context: Context): ContentResolver { + return context.applicationContext.contentResolver + } + + @ActivityScoped + @Provides + fun provideDefaultRepository( + resolver: ContentResolver, + client: OkHttpClient, + transmittersApi: TransmittersApi, + entriesDao: EntriesDao, + transmittersDao: TransmittersDao, + sourcesDao: SourcesDao + ): Repository { + return DefaultRepository( + resolver, + client, + transmittersApi, + entriesDao, + sourcesDao, + transmittersDao + ) + } +} diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/UtilityModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt similarity index 76% rename from app/src/main/java/com/rtbishop/look4sat/dagger/modules/UtilityModule.kt rename to app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt index 0f8de269..31ab4880 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/UtilityModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/di/UtilityModule.kt @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.rtbishop.look4sat.dagger.modules +package com.rtbishop.look4sat.di import android.content.Context import android.content.SharedPreferences @@ -26,24 +26,28 @@ import androidx.preference.PreferenceManager import com.rtbishop.look4sat.utility.PrefsManager import dagger.Module import dagger.Provides -import javax.inject.Singleton +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ActivityContext +import dagger.hilt.android.scopes.ActivityScoped @Module +@InstallIn(ActivityComponent::class) class UtilityModule { - @Singleton + @ActivityScoped @Provides - fun provideSharedPreferences(context: Context): SharedPreferences { + fun provideSharedPreferences(@ActivityContext context: Context): SharedPreferences { return PreferenceManager.getDefaultSharedPreferences(context) } - @Singleton + @ActivityScoped @Provides - fun provideLocationManager(context: Context): LocationManager { + fun provideLocationManager(@ActivityContext context: Context): LocationManager { return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager } - @Singleton + @ActivityScoped @Provides fun providePrefsManager( sharedPreferences: SharedPreferences, diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt similarity index 86% rename from app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt rename to app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt index 5d8f1c0c..cc8b5f94 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/activities/MainActivity.kt @@ -1,4 +1,4 @@ -package com.rtbishop.look4sat.ui +package com.rtbishop.look4sat.ui.activities import android.os.Bundle import androidx.appcompat.app.AppCompatActivity @@ -6,7 +6,9 @@ import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.ActivityMainBinding +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt index 84833bb6..67c08b75 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -10,23 +10,19 @@ import androidx.fragment.app.activityViewModels import androidx.navigation.findNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager -import com.rtbishop.look4sat.Look4SatApp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.dagger.ViewModelFactory +import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.SatEntry import com.rtbishop.look4sat.data.TleSource import com.rtbishop.look4sat.databinding.FragmentEntriesBinding -import com.rtbishop.look4sat.ui.SharedViewModel import com.rtbishop.look4sat.ui.adapters.EntriesAdapter -import javax.inject.Inject +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class EntriesFragment : Fragment(R.layout.fragment_entries) { - @Inject - lateinit var factory: ViewModelFactory - private lateinit var binding: FragmentEntriesBinding - private val viewModel: SharedViewModel by activityViewModels { factory } + private val viewModel: SharedViewModel by activityViewModels() private val pickFileReqCode = 100 private val entriesAdapter = EntriesAdapter() private var tleSources = listOf() @@ -34,7 +30,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding = FragmentEntriesBinding.bind(view) - (requireActivity().application as Look4SatApp).appComponent.inject(this) setupComponents() setupObservers() } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/InfoFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/InfoFragment.kt index 0ab2632f..687c12cc 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/InfoFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/InfoFragment.kt @@ -28,7 +28,9 @@ import androidx.fragment.app.Fragment import com.rtbishop.look4sat.BuildConfig import com.rtbishop.look4sat.R import com.rtbishop.look4sat.databinding.FragmentInfoBinding +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class InfoFragment : Fragment(R.layout.fragment_info) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt index 312f9e1d..b7220222 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/MapFragment.kt @@ -14,15 +14,14 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.github.amsacode.predict4java.GroundStationPosition -import com.rtbishop.look4sat.Look4SatApp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.dagger.ViewModelFactory +import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatItem import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.databinding.FragmentMapBinding -import com.rtbishop.look4sat.ui.SharedViewModel import com.rtbishop.look4sat.utility.PrefsManager +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -40,11 +39,9 @@ import javax.inject.Inject import kotlin.math.pow import kotlin.math.sqrt +@AndroidEntryPoint class MapFragment : Fragment(R.layout.fragment_map) { - @Inject - lateinit var factory: ViewModelFactory - @Inject lateinit var prefsManager: PrefsManager @@ -54,13 +51,12 @@ class MapFragment : Fragment(R.layout.fragment_map) { private lateinit var footprintPaint: Paint private lateinit var selectedPass: SatPass private val dateNow = Date(System.currentTimeMillis()) - private val viewModel: SharedViewModel by activityViewModels { factory } + private val viewModel: SharedViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding = FragmentMapBinding.bind(view) mainActivity = requireActivity() - (mainActivity.application as Look4SatApp).appComponent.inject(this) val prefs = PreferenceManager.getDefaultSharedPreferences(mainActivity.applicationContext) Configuration.getInstance().load(mainActivity.applicationContext, prefs) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt index 7e3e0376..b589cd15 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt @@ -29,26 +29,23 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.SimpleItemAnimator -import com.rtbishop.look4sat.Look4SatApp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.dagger.ViewModelFactory +import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.databinding.FragmentPassesBinding -import com.rtbishop.look4sat.ui.SharedViewModel import com.rtbishop.look4sat.ui.adapters.PassesAdapter import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.Utilities import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator import com.rtbishop.look4sat.utility.Utilities.snack +import dagger.hilt.android.AndroidEntryPoint import java.util.* import javax.inject.Inject +@AndroidEntryPoint class PassesFragment : Fragment(R.layout.fragment_passes) { - @Inject - lateinit var factory: ViewModelFactory - @Inject lateinit var prefsManager: PrefsManager @@ -56,14 +53,13 @@ class PassesFragment : Fragment(R.layout.fragment_passes) { private lateinit var binding: FragmentPassesBinding private lateinit var animator: ObjectAnimator private lateinit var passesAdapter: PassesAdapter - private val viewModel: SharedViewModel by activityViewModels { factory } + private val viewModel: SharedViewModel by activityViewModels() private var isTimerSet: Boolean = false private var passes = mutableListOf() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding = FragmentPassesBinding.bind(view) - (requireActivity().application as Look4SatApp).appComponent.inject(this) setupComponents() setupObservers() } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt index bdd2e5ab..43ee944a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt @@ -29,27 +29,24 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager -import com.rtbishop.look4sat.Look4SatApp import com.rtbishop.look4sat.R -import com.rtbishop.look4sat.dagger.ViewModelFactory +import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.databinding.FragmentPolarBinding -import com.rtbishop.look4sat.ui.SharedViewModel import com.rtbishop.look4sat.ui.adapters.TransAdapter import com.rtbishop.look4sat.ui.views.PolarView import com.rtbishop.look4sat.utility.PrefsManager +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.* import javax.inject.Inject import kotlin.math.round +@AndroidEntryPoint class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { - @Inject - lateinit var factory: ViewModelFactory - @Inject lateinit var prefsManager: PrefsManager @@ -57,7 +54,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { private lateinit var binding: FragmentPolarBinding private lateinit var satPass: SatPass private lateinit var sensorManager: SensorManager - private val viewModel: SharedViewModel by activityViewModels { factory } + private val viewModel: SharedViewModel by activityViewModels() private val args: PolarFragmentArgs by navArgs() private val transmitterAdapter = TransAdapter() private var magneticDeclination = 0f @@ -67,7 +64,6 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { super.onViewCreated(view, savedInstanceState) mainActivity = requireActivity() binding = FragmentPolarBinding.bind(view) - (mainActivity.application as Look4SatApp).appComponent.inject(this) sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager binding.recycler.apply { layoutManager = LinearLayoutManager(mainActivity) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt index 3271377c..f1de1631 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt @@ -27,7 +27,9 @@ import androidx.preference.PreferenceFragmentCompat import com.rtbishop.look4sat.R import com.rtbishop.look4sat.utility.PrefsManager import com.rtbishop.look4sat.utility.Utilities.snack +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class PrefsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt index f5836f37..8fa83f0d 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt @@ -24,11 +24,13 @@ import android.os.Bundle import android.view.ViewGroup import androidx.appcompat.app.AppCompatDialogFragment import androidx.recyclerview.widget.LinearLayoutManager +import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.TleSource import com.rtbishop.look4sat.databinding.DialogSourcesBinding -import com.rtbishop.look4sat.ui.SharedViewModel import com.rtbishop.look4sat.ui.adapters.SourcesAdapter +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SourcesDialog(sources: List, private val viewModel: SharedViewModel) : AppCompatDialogFragment() { diff --git a/build.gradle b/build.gradle index 0f636919..7f4dba62 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,8 @@ buildscript { navigation_version = '2.3.0' lifecycle_version = '2.2.0' room_version = '2.2.5' - dagger_version = '2.29.1' + hilt_version = '2.29.1-alpha' + hilt_viewmodel_version = '1.0.0-alpha02' retrofit_version = '2.9.0' openStreetMap_version = '6.1.8' predict4java_version = '1.3.1' @@ -39,6 +40,7 @@ buildscript { } dependencies { classpath "com.android.tools.build:gradle:$gradle_version" + classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$gradle_plugin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" }