mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Switched from Dagger to android Hilt DI
This commit is contained in:
1 parent
4e0aa1481b
commit
1c7ce3f726
22 files changed
+145
-232
No files matched your search
+9
-6
@@ -17,10 +17,11 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: "com.android.application"
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: "kotlin-android"
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: "kotlin-kapt"
|
||||||
apply plugin: 'kotlin-kapt'
|
apply plugin: "kotlin-android-extensions"
|
||||||
|
apply plugin: "dagger.hilt.android.plugin"
|
||||||
apply plugin: "androidx.navigation.safeargs.kotlin"
|
apply plugin: "androidx.navigation.safeargs.kotlin"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@@ -77,8 +78,10 @@ dependencies {
|
|||||||
implementation "androidx.room:room-ktx:$room_version"
|
implementation "androidx.room:room-ktx:$room_version"
|
||||||
kapt "androidx.room:room-compiler:$room_version"
|
kapt "androidx.room:room-compiler:$room_version"
|
||||||
|
|
||||||
implementation "com.google.dagger:dagger:$dagger_version"
|
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_viewmodel_version"
|
||||||
kapt "com.google.dagger:dagger-compiler:$dagger_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:retrofit:$retrofit_version"
|
||||||
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
|
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.MainActivity"
|
android:name=".ui.activities.MainActivity"
|
||||||
android:screenOrientation="portrait">
|
android:screenOrientation="portrait">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|||||||
@@ -20,12 +20,7 @@
|
|||||||
package com.rtbishop.look4sat
|
package com.rtbishop.look4sat
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import com.rtbishop.look4sat.dagger.AppComponent
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
import com.rtbishop.look4sat.dagger.DaggerAppComponent
|
|
||||||
|
|
||||||
class Look4SatApp : Application() {
|
@HiltAndroidApp
|
||||||
|
class Look4SatApp : Application()
|
||||||
val appComponent: AppComponent by lazy {
|
|
||||||
DaggerAppComponent.factory().create(applicationContext)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+7
-8
@@ -17,13 +17,12 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.rtbishop.look4sat.ui
|
package com.rtbishop.look4sat
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.hilt.Assisted
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.hilt.lifecycle.ViewModelInject
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.*
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import com.github.amsacode.predict4java.GroundStationPosition
|
import com.github.amsacode.predict4java.GroundStationPosition
|
||||||
import com.rtbishop.look4sat.data.Result
|
import com.rtbishop.look4sat.data.Result
|
||||||
import com.rtbishop.look4sat.data.SatEntry
|
import com.rtbishop.look4sat.data.SatEntry
|
||||||
@@ -35,13 +34,13 @@ import com.rtbishop.look4sat.utility.PrefsManager
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class SharedViewModel @Inject constructor(
|
class SharedViewModel @ViewModelInject constructor(
|
||||||
private val prefsManager: PrefsManager,
|
private val prefsManager: PrefsManager,
|
||||||
private val repository: Repository
|
private val repository: Repository,
|
||||||
|
@Assisted private val savedStateHandle: SavedStateHandle
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val _passes = MutableLiveData<Result<MutableList<SatPass>>>()
|
private val _passes = MutableLiveData<Result<MutableList<SatPass>>>()
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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<Class<out ViewModel>,
|
|
||||||
@JvmSuppressWildcards Provider<ViewModel>>
|
|
||||||
) : ViewModelProvider.Factory {
|
|
||||||
override fun <T : ViewModel?> create(modelClass: Class<T>): 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<out ViewModel>)
|
|
||||||
@@ -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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
+7
-4
@@ -17,26 +17,29 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 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 com.rtbishop.look4sat.repo.remote.TransmittersApi
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.components.ActivityComponent
|
||||||
|
import dagger.hilt.android.scopes.ActivityScoped
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||||
import javax.inject.Singleton
|
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
|
@InstallIn(ActivityComponent::class)
|
||||||
class NetworkModule {
|
class NetworkModule {
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideWebClient(): OkHttpClient {
|
fun provideWebClient(): OkHttpClient {
|
||||||
return OkHttpClient()
|
return OkHttpClient()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideTransApi(): TransmittersApi {
|
fun provideTransApi(): TransmittersApi {
|
||||||
return Retrofit.Builder()
|
return Retrofit.Builder()
|
||||||
+11
-7
@@ -17,7 +17,7 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 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.Context
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
@@ -27,32 +27,36 @@ import com.rtbishop.look4sat.repo.local.SourcesDao
|
|||||||
import com.rtbishop.look4sat.repo.local.TransmittersDao
|
import com.rtbishop.look4sat.repo.local.TransmittersDao
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
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
|
@Module
|
||||||
|
@InstallIn(ActivityComponent::class)
|
||||||
class PersistenceModule {
|
class PersistenceModule {
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideEntriesDao(db: SatelliteDb): EntriesDao {
|
fun provideEntriesDao(db: SatelliteDb): EntriesDao {
|
||||||
return db.entriesDao()
|
return db.entriesDao()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideTransDao(db: SatelliteDb): TransmittersDao {
|
fun provideTransDao(db: SatelliteDb): TransmittersDao {
|
||||||
return db.transmittersDao()
|
return db.transmittersDao()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun providesSourcesDao(db: SatelliteDb): SourcesDao {
|
fun providesSourcesDao(db: SatelliteDb): SourcesDao {
|
||||||
return db.sourcesDao()
|
return db.sourcesDao()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideSatDb(context: Context): SatelliteDb {
|
fun provideSatDb(@ActivityContext context: Context): SatelliteDb {
|
||||||
return Room.databaseBuilder(context, SatelliteDb::class.java, "satDb").build()
|
return Room.databaseBuilder(context, SatelliteDb::class.java, "satDb").build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
-7
@@ -17,7 +17,7 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 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.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
@@ -26,24 +26,28 @@ import androidx.preference.PreferenceManager
|
|||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
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
|
@Module
|
||||||
|
@InstallIn(ActivityComponent::class)
|
||||||
class UtilityModule {
|
class UtilityModule {
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideSharedPreferences(context: Context): SharedPreferences {
|
fun provideSharedPreferences(@ActivityContext context: Context): SharedPreferences {
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun provideLocationManager(context: Context): LocationManager {
|
fun provideLocationManager(@ActivityContext context: Context): LocationManager {
|
||||||
return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
return context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
}
|
}
|
||||||
|
|
||||||
@Singleton
|
@ActivityScoped
|
||||||
@Provides
|
@Provides
|
||||||
fun providePrefsManager(
|
fun providePrefsManager(
|
||||||
sharedPreferences: SharedPreferences,
|
sharedPreferences: SharedPreferences,
|
||||||
+3
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.rtbishop.look4sat.ui
|
package com.rtbishop.look4sat.ui.activities
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
@@ -6,7 +6,9 @@ import androidx.navigation.fragment.NavHostFragment
|
|||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -10,23 +10,19 @@ import androidx.fragment.app.activityViewModels
|
|||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.rtbishop.look4sat.Look4SatApp
|
|
||||||
import com.rtbishop.look4sat.R
|
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.SatEntry
|
||||||
import com.rtbishop.look4sat.data.TleSource
|
import com.rtbishop.look4sat.data.TleSource
|
||||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
|
||||||
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
|
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
|
||||||
import javax.inject.Inject
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var factory: ViewModelFactory
|
|
||||||
|
|
||||||
private lateinit var binding: FragmentEntriesBinding
|
private lateinit var binding: FragmentEntriesBinding
|
||||||
private val viewModel: SharedViewModel by activityViewModels { factory }
|
private val viewModel: SharedViewModel by activityViewModels()
|
||||||
private val pickFileReqCode = 100
|
private val pickFileReqCode = 100
|
||||||
private val entriesAdapter = EntriesAdapter()
|
private val entriesAdapter = EntriesAdapter()
|
||||||
private var tleSources = listOf<TleSource>()
|
private var tleSources = listOf<TleSource>()
|
||||||
@@ -34,7 +30,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentEntriesBinding.bind(view)
|
binding = FragmentEntriesBinding.bind(view)
|
||||||
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
|
||||||
setupComponents()
|
setupComponents()
|
||||||
setupObservers()
|
setupObservers()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ import androidx.fragment.app.Fragment
|
|||||||
import com.rtbishop.look4sat.BuildConfig
|
import com.rtbishop.look4sat.BuildConfig
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.databinding.FragmentInfoBinding
|
import com.rtbishop.look4sat.databinding.FragmentInfoBinding
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class InfoFragment : Fragment(R.layout.fragment_info) {
|
class InfoFragment : Fragment(R.layout.fragment_info) {
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
|||||||
@@ -14,15 +14,14 @@ import androidx.fragment.app.activityViewModels
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.github.amsacode.predict4java.GroundStationPosition
|
import com.github.amsacode.predict4java.GroundStationPosition
|
||||||
import com.rtbishop.look4sat.Look4SatApp
|
|
||||||
import com.rtbishop.look4sat.R
|
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.Result
|
||||||
import com.rtbishop.look4sat.data.SatItem
|
import com.rtbishop.look4sat.data.SatItem
|
||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -40,11 +39,9 @@ import javax.inject.Inject
|
|||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MapFragment : Fragment(R.layout.fragment_map) {
|
class MapFragment : Fragment(R.layout.fragment_map) {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var factory: ViewModelFactory
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var prefsManager: PrefsManager
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
@@ -54,13 +51,12 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
private lateinit var footprintPaint: Paint
|
private lateinit var footprintPaint: Paint
|
||||||
private lateinit var selectedPass: SatPass
|
private lateinit var selectedPass: SatPass
|
||||||
private val dateNow = Date(System.currentTimeMillis())
|
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?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentMapBinding.bind(view)
|
binding = FragmentMapBinding.bind(view)
|
||||||
mainActivity = requireActivity()
|
mainActivity = requireActivity()
|
||||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
|
||||||
|
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(mainActivity.applicationContext)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(mainActivity.applicationContext)
|
||||||
Configuration.getInstance().load(mainActivity.applicationContext, prefs)
|
Configuration.getInstance().load(mainActivity.applicationContext, prefs)
|
||||||
|
|||||||
@@ -29,26 +29,23 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import com.rtbishop.look4sat.Look4SatApp
|
|
||||||
import com.rtbishop.look4sat.R
|
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.Result
|
||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
|
||||||
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import com.rtbishop.look4sat.utility.Utilities
|
import com.rtbishop.look4sat.utility.Utilities
|
||||||
import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator
|
import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator
|
||||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PassesFragment : Fragment(R.layout.fragment_passes) {
|
class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var factory: ViewModelFactory
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var prefsManager: PrefsManager
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
@@ -56,14 +53,13 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
|||||||
private lateinit var binding: FragmentPassesBinding
|
private lateinit var binding: FragmentPassesBinding
|
||||||
private lateinit var animator: ObjectAnimator
|
private lateinit var animator: ObjectAnimator
|
||||||
private lateinit var passesAdapter: PassesAdapter
|
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 isTimerSet: Boolean = false
|
||||||
private var passes = mutableListOf<SatPass>()
|
private var passes = mutableListOf<SatPass>()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
binding = FragmentPassesBinding.bind(view)
|
binding = FragmentPassesBinding.bind(view)
|
||||||
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
|
||||||
setupComponents()
|
setupComponents()
|
||||||
setupObservers()
|
setupObservers()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,27 +29,24 @@ import androidx.fragment.app.activityViewModels
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.rtbishop.look4sat.Look4SatApp
|
|
||||||
import com.rtbishop.look4sat.R
|
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.Result
|
||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentPolarBinding
|
import com.rtbishop.look4sat.databinding.FragmentPolarBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
|
||||||
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
import com.rtbishop.look4sat.ui.adapters.TransAdapter
|
||||||
import com.rtbishop.look4sat.ui.views.PolarView
|
import com.rtbishop.look4sat.ui.views.PolarView
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var factory: ViewModelFactory
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var prefsManager: PrefsManager
|
lateinit var prefsManager: PrefsManager
|
||||||
|
|
||||||
@@ -57,7 +54,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
private lateinit var binding: FragmentPolarBinding
|
private lateinit var binding: FragmentPolarBinding
|
||||||
private lateinit var satPass: SatPass
|
private lateinit var satPass: SatPass
|
||||||
private lateinit var sensorManager: SensorManager
|
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 args: PolarFragmentArgs by navArgs()
|
||||||
private val transmitterAdapter = TransAdapter()
|
private val transmitterAdapter = TransAdapter()
|
||||||
private var magneticDeclination = 0f
|
private var magneticDeclination = 0f
|
||||||
@@ -67,7 +64,6 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener {
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
mainActivity = requireActivity()
|
mainActivity = requireActivity()
|
||||||
binding = FragmentPolarBinding.bind(view)
|
binding = FragmentPolarBinding.bind(view)
|
||||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
|
||||||
sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
sensorManager = mainActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||||
binding.recycler.apply {
|
binding.recycler.apply {
|
||||||
layoutManager = LinearLayoutManager(mainActivity)
|
layoutManager = LinearLayoutManager(mainActivity)
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ import androidx.preference.PreferenceFragmentCompat
|
|||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.utility.PrefsManager
|
import com.rtbishop.look4sat.utility.PrefsManager
|
||||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PrefsFragment : PreferenceFragmentCompat(),
|
class PrefsFragment : PreferenceFragmentCompat(),
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ import android.os.Bundle
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatDialogFragment
|
import androidx.appcompat.app.AppCompatDialogFragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import com.rtbishop.look4sat.SharedViewModel
|
||||||
import com.rtbishop.look4sat.data.TleSource
|
import com.rtbishop.look4sat.data.TleSource
|
||||||
import com.rtbishop.look4sat.databinding.DialogSourcesBinding
|
import com.rtbishop.look4sat.databinding.DialogSourcesBinding
|
||||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
|
||||||
import com.rtbishop.look4sat.ui.adapters.SourcesAdapter
|
import com.rtbishop.look4sat.ui.adapters.SourcesAdapter
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SourcesDialog(sources: List<TleSource>, private val viewModel: SharedViewModel) :
|
class SourcesDialog(sources: List<TleSource>, private val viewModel: SharedViewModel) :
|
||||||
AppCompatDialogFragment() {
|
AppCompatDialogFragment() {
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -28,7 +28,8 @@ buildscript {
|
|||||||
navigation_version = '2.3.0'
|
navigation_version = '2.3.0'
|
||||||
lifecycle_version = '2.2.0'
|
lifecycle_version = '2.2.0'
|
||||||
room_version = '2.2.5'
|
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'
|
retrofit_version = '2.9.0'
|
||||||
openStreetMap_version = '6.1.8'
|
openStreetMap_version = '6.1.8'
|
||||||
predict4java_version = '1.3.1'
|
predict4java_version = '1.3.1'
|
||||||
@@ -39,6 +40,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "com.android.tools.build:gradle:$gradle_version"
|
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 "org.jetbrains.kotlin:kotlin-gradle-plugin:$gradle_plugin_version"
|
||||||
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"
|
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user