mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-13 21:56:59 +05:30
parent
6d88335e13
commit
4fe7c64e42
16 changed files with 76 additions and 60 deletions
|
@ -6,20 +6,15 @@
|
||||||
*/
|
*/
|
||||||
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
|
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
|
||||||
|
|
||||||
import dagger.hilt.android.plugin.HiltExtension
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.msfjarvis.claw.android-application")
|
id("dev.msfjarvis.claw.android-application")
|
||||||
id("dev.msfjarvis.claw.rename-artifacts")
|
id("dev.msfjarvis.claw.rename-artifacts")
|
||||||
id("dev.msfjarvis.claw.kotlin-android")
|
id("dev.msfjarvis.claw.kotlin-android")
|
||||||
|
id("dev.msfjarvis.claw.kotlin-kapt")
|
||||||
id("dev.msfjarvis.claw.versioning-plugin")
|
id("dev.msfjarvis.claw.versioning-plugin")
|
||||||
alias(libs.plugins.hilt)
|
alias(libs.plugins.anvil)
|
||||||
alias(libs.plugins.napt)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hilt's aggregating task fails with NAPT
|
|
||||||
extensions.getByType<HiltExtension>().enableAggregatingTask = false
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "dev.msfjarvis.claw.android"
|
namespace = "dev.msfjarvis.claw.android"
|
||||||
defaultConfig { applicationId = "dev.msfjarvis.claw.android" }
|
defaultConfig { applicationId = "dev.msfjarvis.claw.android" }
|
||||||
|
@ -45,13 +40,17 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
anvil(libs.tangle.viewmodel.compiler)
|
||||||
|
anvil(libs.tangle.work.compiler)
|
||||||
|
kapt(libs.dagger.compiler)
|
||||||
implementation(platform(libs.androidx.compose.bom))
|
implementation(platform(libs.androidx.compose.bom))
|
||||||
annotationProcessor(libs.androidx.hilt.compiler)
|
implementation(libs.dagger)
|
||||||
annotationProcessor(libs.dagger.hilt.compiler)
|
|
||||||
implementation(projects.api)
|
implementation(projects.api)
|
||||||
implementation(projects.common)
|
implementation(projects.common)
|
||||||
|
implementation(projects.core)
|
||||||
implementation(projects.coroutineUtils)
|
implementation(projects.coroutineUtils)
|
||||||
implementation(projects.database)
|
implementation(projects.database)
|
||||||
|
implementation(projects.diScopes)
|
||||||
implementation(projects.metadataExtractor)
|
implementation(projects.metadataExtractor)
|
||||||
implementation(projects.model)
|
implementation(projects.model)
|
||||||
implementation(libs.accompanist.swiperefresh)
|
implementation(libs.accompanist.swiperefresh)
|
||||||
|
@ -59,14 +58,12 @@ dependencies {
|
||||||
implementation(libs.androidx.activity.compose)
|
implementation(libs.androidx.activity.compose)
|
||||||
implementation(libs.androidx.compose.material3)
|
implementation(libs.androidx.compose.material3)
|
||||||
implementation(libs.androidx.core.splashscreen)
|
implementation(libs.androidx.core.splashscreen)
|
||||||
implementation(libs.androidx.hilt.work)
|
|
||||||
implementation(libs.androidx.lifecycle.compose)
|
implementation(libs.androidx.lifecycle.compose)
|
||||||
implementation(libs.androidx.navigation.compose)
|
implementation(libs.androidx.navigation.compose)
|
||||||
implementation(libs.androidx.paging.compose)
|
implementation(libs.androidx.paging.compose)
|
||||||
implementation(libs.androidx.work.runtime.ktx)
|
implementation(libs.androidx.work.runtime.ktx)
|
||||||
implementation(libs.coil)
|
implementation(libs.coil)
|
||||||
implementation(libs.copydown)
|
implementation(libs.copydown)
|
||||||
implementation(libs.dagger.hilt.android)
|
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
implementation(libs.kotlinx.serialization.json)
|
implementation(libs.kotlinx.serialization.json)
|
||||||
implementation(libs.material.motion.core)
|
implementation(libs.material.motion.core)
|
||||||
|
@ -74,4 +71,10 @@ dependencies {
|
||||||
implementation(libs.okhttp.loggingInterceptor)
|
implementation(libs.okhttp.loggingInterceptor)
|
||||||
implementation(libs.retrofit.kotlinxSerializationConverter)
|
implementation(libs.retrofit.kotlinxSerializationConverter)
|
||||||
implementation(libs.sqldelight.extensions.coroutines)
|
implementation(libs.sqldelight.extensions.coroutines)
|
||||||
|
implementation(libs.tangle.viewmodel.api)
|
||||||
|
implementation(libs.tangle.viewmodel.compose) {
|
||||||
|
// https://github.com/RBusarow/Tangle/issues/558
|
||||||
|
exclude("androidx.compose.compiler")
|
||||||
|
}
|
||||||
|
implementation(libs.tangle.work.api)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2022 Harsh Shandilya.
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
*/
|
||||||
|
package dev.msfjarvis.claw.android
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import com.squareup.anvil.annotations.MergeComponent
|
||||||
|
import dagger.BindsInstance
|
||||||
|
import dagger.Component
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
@MergeComponent(AppScope::class)
|
||||||
|
interface AppComponent {
|
||||||
|
@Component.Factory
|
||||||
|
interface Factory {
|
||||||
|
fun create(@BindsInstance application: Application): AppComponent
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,33 +9,30 @@ package dev.msfjarvis.claw.android
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.os.StrictMode
|
import android.os.StrictMode
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.hilt.work.HiltWorkerFactory
|
|
||||||
import androidx.work.Configuration
|
import androidx.work.Configuration
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.ImageLoaderFactory
|
import coil.ImageLoaderFactory
|
||||||
import coil.disk.DiskCache
|
import coil.disk.DiskCache
|
||||||
import coil.memory.MemoryCache
|
import coil.memory.MemoryCache
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dev.msfjarvis.claw.injection.Components
|
||||||
import io.github.aakira.napier.DebugAntilog
|
import io.github.aakira.napier.DebugAntilog
|
||||||
import io.github.aakira.napier.Napier
|
import io.github.aakira.napier.Napier
|
||||||
import javax.inject.Inject
|
import tangle.inject.TangleGraph
|
||||||
|
|
||||||
@HiltAndroidApp
|
|
||||||
class ClawApplication : Application(), Configuration.Provider, ImageLoaderFactory {
|
class ClawApplication : Application(), Configuration.Provider, ImageLoaderFactory {
|
||||||
@Inject lateinit var workerFactory: HiltWorkerFactory
|
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
val component = DaggerAppComponent.factory().create(this)
|
||||||
|
Components.add(component)
|
||||||
|
TangleGraph.add(component)
|
||||||
StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build())
|
StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build())
|
||||||
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build())
|
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build())
|
||||||
Napier.base(DebugAntilog())
|
Napier.base(DebugAntilog())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getWorkManagerConfiguration(): Configuration {
|
override fun getWorkManagerConfiguration(): Configuration {
|
||||||
return Configuration.Builder()
|
return Configuration.Builder().setMinimumLoggingLevel(Log.DEBUG).build()
|
||||||
.setMinimumLoggingLevel(Log.DEBUG)
|
|
||||||
.setWorkerFactory(workerFactory)
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newImageLoader(): ImageLoader {
|
override fun newImageLoader(): ImageLoader {
|
||||||
|
|
|
@ -17,15 +17,17 @@ import androidx.work.ExistingPeriodicWorkPolicy
|
||||||
import androidx.work.NetworkType
|
import androidx.work.NetworkType
|
||||||
import androidx.work.PeriodicWorkRequestBuilder
|
import androidx.work.PeriodicWorkRequestBuilder
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
|
||||||
import dev.msfjarvis.claw.android.ui.LobstersApp
|
import dev.msfjarvis.claw.android.ui.LobstersApp
|
||||||
import dev.msfjarvis.claw.android.work.SavedPostUpdaterWorker
|
import dev.msfjarvis.claw.android.work.SavedPostUpdaterWorker
|
||||||
import dev.msfjarvis.claw.common.comments.HTMLConverter
|
import dev.msfjarvis.claw.common.comments.HTMLConverter
|
||||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import tangle.inject.TangleGraph
|
||||||
|
import tangle.inject.TangleScope
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@TangleScope(AppScope::class)
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
@Inject lateinit var urlLauncher: UrlLauncher
|
@Inject lateinit var urlLauncher: UrlLauncher
|
||||||
|
@ -34,6 +36,7 @@ class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
TangleGraph.inject(this)
|
||||||
installSplashScreen()
|
installSplashScreen()
|
||||||
setContent {
|
setContent {
|
||||||
LobstersApp(
|
LobstersApp(
|
||||||
|
|
|
@ -9,11 +9,11 @@ package dev.msfjarvis.claw.android.injection
|
||||||
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||||
import com.slack.eithernet.ApiResultCallAdapterFactory
|
import com.slack.eithernet.ApiResultCallAdapterFactory
|
||||||
import com.slack.eithernet.ApiResultConverterFactory
|
import com.slack.eithernet.ApiResultConverterFactory
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import dev.msfjarvis.claw.api.LobstersApi
|
import dev.msfjarvis.claw.api.LobstersApi
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import kotlinx.serialization.ExperimentalSerializationApi
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
|
@ -23,7 +23,7 @@ import retrofit2.create
|
||||||
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
object ApiModule {
|
object ApiModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun provideRetrofit(
|
fun provideRetrofit(
|
||||||
|
|
|
@ -6,17 +6,17 @@
|
||||||
*/
|
*/
|
||||||
package dev.msfjarvis.claw.android.injection
|
package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import dev.msfjarvis.claw.util.coroutines.DefaultDispatcherProvider
|
import dev.msfjarvis.claw.util.coroutines.DefaultDispatcherProvider
|
||||||
import dev.msfjarvis.claw.util.coroutines.DispatcherProvider
|
import dev.msfjarvis.claw.util.coroutines.DispatcherProvider
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
interface CoroutineDispatcherModule {
|
interface CoroutineDispatcherModule {
|
||||||
|
|
||||||
@Binds fun DefaultDispatcherProvider.bind(): DispatcherProvider
|
@Binds fun DefaultDispatcherProvider.bind(): DispatcherProvider
|
||||||
|
|
|
@ -6,15 +6,15 @@
|
||||||
*/
|
*/
|
||||||
package dev.msfjarvis.claw.android.injection
|
package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import dev.msfjarvis.claw.common.comments.HTMLConverter
|
import dev.msfjarvis.claw.common.comments.HTMLConverter
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import io.github.furstenheim.CopyDown
|
import io.github.furstenheim.CopyDown
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
object HTMLConverterModule {
|
object HTMLConverterModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
package dev.msfjarvis.claw.android.injection
|
package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
import com.chimbori.crux.Crux
|
import com.chimbori.crux.Crux
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
object MetadataExtractorModule {
|
object MetadataExtractorModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun provideCrux(
|
fun provideCrux(
|
||||||
|
|
|
@ -8,16 +8,15 @@ package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.TrafficStats
|
import android.net.TrafficStats
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import dagger.multibindings.IntoSet
|
import dagger.multibindings.IntoSet
|
||||||
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
|
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
|
||||||
import dev.msfjarvis.claw.android.network.NapierLogger
|
import dev.msfjarvis.claw.android.network.NapierLogger
|
||||||
import dev.msfjarvis.claw.android.network.UserAgentInterceptor
|
import dev.msfjarvis.claw.android.network.UserAgentInterceptor
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
import java.net.Socket
|
import java.net.Socket
|
||||||
import javax.net.SocketFactory
|
import javax.net.SocketFactory
|
||||||
import okhttp3.Cache
|
import okhttp3.Cache
|
||||||
|
@ -26,7 +25,7 @@ import okhttp3.OkHttpClient
|
||||||
import okhttp3.logging.HttpLoggingInterceptor
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
interface OkHttpModule {
|
interface OkHttpModule {
|
||||||
|
|
||||||
@Binds fun NapierLogger.bindLogger(): HttpLoggingInterceptor.Logger
|
@Binds fun NapierLogger.bindLogger(): HttpLoggingInterceptor.Logger
|
||||||
|
@ -38,7 +37,7 @@ interface OkHttpModule {
|
||||||
private const val THREAD_STATS_TAG = 0x000090000
|
private const val THREAD_STATS_TAG = 0x000090000
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun provideCache(@ApplicationContext context: Context): Cache {
|
fun provideCache(context: Context): Cache {
|
||||||
return Cache(context.cacheDir, CACHE_SIZE_MB)
|
return Cache(context.cacheDir, CACHE_SIZE_MB)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,18 +7,17 @@
|
||||||
package dev.msfjarvis.claw.android.injection
|
package dev.msfjarvis.claw.android.injection
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
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.qualifiers.ActivityContext
|
|
||||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||||
|
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(ActivityComponent::class)
|
@ContributesTo(AppScope::class)
|
||||||
object UrlLauncherModule {
|
object UrlLauncherModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun provideUrlLauncher(@ActivityContext context: Context): UrlLauncher {
|
fun provideUrlLauncher(context: Context): UrlLauncher {
|
||||||
return UrlLauncher(context)
|
return UrlLauncher(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalUriHandler
|
import androidx.compose.ui.platform.LocalUriHandler
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
||||||
import androidx.navigation.NavType
|
import androidx.navigation.NavType
|
||||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
import androidx.navigation.navArgument
|
import androidx.navigation.navArgument
|
||||||
|
@ -54,6 +53,7 @@ import kotlinx.coroutines.launch
|
||||||
import soup.compose.material.motion.navigation.MaterialMotionNavHost
|
import soup.compose.material.motion.navigation.MaterialMotionNavHost
|
||||||
import soup.compose.material.motion.navigation.composable
|
import soup.compose.material.motion.navigation.composable
|
||||||
import soup.compose.material.motion.navigation.rememberMaterialMotionNavController
|
import soup.compose.material.motion.navigation.rememberMaterialMotionNavController
|
||||||
|
import tangle.viewmodel.compose.tangleViewModel
|
||||||
|
|
||||||
@Suppress("ModifierMissing") // Top-level composable, will never have a modifier supplied.
|
@Suppress("ModifierMissing") // Top-level composable, will never have a modifier supplied.
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalAnimationApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalAnimationApi::class)
|
||||||
|
@ -62,7 +62,7 @@ fun LobstersApp(
|
||||||
urlLauncher: UrlLauncher,
|
urlLauncher: UrlLauncher,
|
||||||
htmlConverter: HTMLConverter,
|
htmlConverter: HTMLConverter,
|
||||||
setWebUri: (String?) -> Unit,
|
setWebUri: (String?) -> Unit,
|
||||||
viewModel: ClawViewModel = viewModel(),
|
viewModel: ClawViewModel = tangleViewModel(),
|
||||||
) {
|
) {
|
||||||
val systemUiController = rememberSystemUiController()
|
val systemUiController = rememberSystemUiController()
|
||||||
val hottestListState = rememberLazyListState()
|
val hottestListState = rememberLazyListState()
|
||||||
|
|
|
@ -12,7 +12,6 @@ import androidx.paging.Pager
|
||||||
import androidx.paging.PagingConfig
|
import androidx.paging.PagingConfig
|
||||||
import com.slack.eithernet.ApiResult.Failure
|
import com.slack.eithernet.ApiResult.Failure
|
||||||
import com.slack.eithernet.ApiResult.Success
|
import com.slack.eithernet.ApiResult.Success
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
||||||
import dev.msfjarvis.claw.android.injection.IODispatcher
|
import dev.msfjarvis.claw.android.injection.IODispatcher
|
||||||
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
|
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
|
||||||
import dev.msfjarvis.claw.android.ui.toLocalDateTime
|
import dev.msfjarvis.claw.android.ui.toLocalDateTime
|
||||||
|
@ -20,16 +19,15 @@ import dev.msfjarvis.claw.api.LobstersApi
|
||||||
import dev.msfjarvis.claw.database.local.SavedPost
|
import dev.msfjarvis.claw.database.local.SavedPost
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.time.Month
|
import java.time.Month
|
||||||
import javax.inject.Inject
|
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import tangle.viewmodel.VMInject
|
||||||
|
|
||||||
@HiltViewModel
|
|
||||||
class ClawViewModel
|
class ClawViewModel
|
||||||
@Inject
|
@VMInject
|
||||||
constructor(
|
constructor(
|
||||||
private val api: LobstersApi,
|
private val api: LobstersApi,
|
||||||
private val savedPostsRepository: SavedPostsRepository,
|
private val savedPostsRepository: SavedPostsRepository,
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
package dev.msfjarvis.claw.android.work
|
package dev.msfjarvis.claw.android.work
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.hilt.work.HiltWorker
|
|
||||||
import androidx.work.CoroutineWorker
|
import androidx.work.CoroutineWorker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.slack.eithernet.ApiResult
|
import com.slack.eithernet.ApiResult
|
||||||
|
@ -20,6 +19,7 @@ import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.awaitAll
|
import kotlinx.coroutines.awaitAll
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.supervisorScope
|
import kotlinx.coroutines.supervisorScope
|
||||||
|
import tangle.work.TangleWorker
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WorkManager-backed [CoroutineWorker] that gets all the posts from [SavedPostsRepository], fetches
|
* WorkManager-backed [CoroutineWorker] that gets all the posts from [SavedPostsRepository], fetches
|
||||||
|
@ -27,7 +27,7 @@ import kotlinx.coroutines.supervisorScope
|
||||||
* saved posts that were saved before comment counts were added to be able to show a comment count
|
* saved posts that were saved before comment counts were added to be able to show a comment count
|
||||||
* and for new-enough posts that are still getting comments to have an accurate one.
|
* and for new-enough posts that are still getting comments to have an accurate one.
|
||||||
*/
|
*/
|
||||||
@HiltWorker
|
@TangleWorker
|
||||||
class SavedPostUpdaterWorker
|
class SavedPostUpdaterWorker
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
constructor(
|
constructor(
|
||||||
|
|
|
@ -10,6 +10,5 @@ plugins {
|
||||||
id("dev.msfjarvis.claw.spotless")
|
id("dev.msfjarvis.claw.spotless")
|
||||||
id("dev.msfjarvis.claw.versions")
|
id("dev.msfjarvis.claw.versions")
|
||||||
id("dev.msfjarvis.claw.kotlin-common")
|
id("dev.msfjarvis.claw.kotlin-common")
|
||||||
alias(libs.plugins.hilt) apply false
|
|
||||||
alias(libs.plugins.android.test) apply false
|
alias(libs.plugins.android.test) apply false
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ coil = "2.2.2"
|
||||||
composeCompiler = "1.4.0-alpha02"
|
composeCompiler = "1.4.0-alpha02"
|
||||||
coroutines = "1.6.4"
|
coroutines = "1.6.4"
|
||||||
dagger = "2.44.1"
|
dagger = "2.44.1"
|
||||||
hilt = "1.0.0"
|
|
||||||
kotlin = "1.7.21"
|
kotlin = "1.7.21"
|
||||||
material_motion = "0.10.3"
|
material_motion = "0.10.3"
|
||||||
# @pin Needs to be aligned with Retrofit
|
# @pin Needs to be aligned with Retrofit
|
||||||
|
@ -37,8 +36,6 @@ androidx-compose-ui-text = { module = "androidx.compose.ui:ui-text" }
|
||||||
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
|
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
|
||||||
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
|
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
|
||||||
androidx-core-splashscreen = "androidx.core:core-splashscreen:1.0.0"
|
androidx-core-splashscreen = "androidx.core:core-splashscreen:1.0.0"
|
||||||
androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hilt" }
|
|
||||||
androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hilt" }
|
|
||||||
androidx-lifecycle-compose = "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0-alpha03"
|
androidx-lifecycle-compose = "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0-alpha03"
|
||||||
androidx-navigation-compose = "androidx.navigation:navigation-compose:2.6.0-alpha04"
|
androidx-navigation-compose = "androidx.navigation:navigation-compose:2.6.0-alpha04"
|
||||||
androidx-paging-compose = "androidx.paging:paging-compose:1.0.0-alpha17"
|
androidx-paging-compose = "androidx.paging:paging-compose:1.0.0-alpha17"
|
||||||
|
@ -68,9 +65,6 @@ copydown = "io.github.furstenheim:copy_down:1.1"
|
||||||
crux = "com.chimbori.crux:crux:3.11.0"
|
crux = "com.chimbori.crux:crux:3.11.0"
|
||||||
dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" }
|
dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" }
|
||||||
dagger-compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" }
|
dagger-compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" }
|
||||||
dagger-hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "dagger" }
|
|
||||||
dagger-hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "dagger" }
|
|
||||||
dagger-hilt-core = { module = "com.google.dagger:hilt-core", version.ref = "dagger" }
|
|
||||||
eithernet = "com.slack.eithernet:eithernet:1.2.1"
|
eithernet = "com.slack.eithernet:eithernet:1.2.1"
|
||||||
javapoet = "com.squareup:javapoet:1.13.0"
|
javapoet = "com.squareup:javapoet:1.13.0"
|
||||||
javax-inject = "javax.inject:javax.inject:1"
|
javax-inject = "javax.inject:javax.inject:1"
|
||||||
|
@ -98,7 +92,6 @@ testparameterinjector = "com.google.testparameterinjector:test-parameter-injecto
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
android-test = { id = "com.android.test", version.ref = "agp" }
|
android-test = { id = "com.android.test", version.ref = "agp" }
|
||||||
hilt = { id = "com.google.dagger.hilt.android", version.ref = "dagger" }
|
|
||||||
anvil = "com.squareup.anvil:2.4.2"
|
anvil = "com.squareup.anvil:2.4.2"
|
||||||
napt = "com.sergei-lapin.napt:1.18"
|
napt = "com.sergei-lapin.napt:1.18"
|
||||||
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
|
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
|
||||||
|
|
|
@ -140,8 +140,10 @@ include(
|
||||||
"api",
|
"api",
|
||||||
"benchmark",
|
"benchmark",
|
||||||
"common",
|
"common",
|
||||||
|
"core",
|
||||||
"coroutine-utils",
|
"coroutine-utils",
|
||||||
"database",
|
"database",
|
||||||
|
"di-scopes",
|
||||||
"metadata-extractor",
|
"metadata-extractor",
|
||||||
"model",
|
"model",
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue