Skip to content

Commit

Permalink
refactor: switch to using hilt
Browse files Browse the repository at this point in the history
  • Loading branch information
urFate committed Jun 30, 2024
1 parent e415400 commit 55633ae
Show file tree
Hide file tree
Showing 21 changed files with 328 additions and 225 deletions.
12 changes: 9 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id ("com.android.application")
kotlin("android")
id("com.google.devtools.ksp")
kotlin("plugin.serialization") version "1.9.20"
id ("com.android.application")
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
kotlin("plugin.serialization") version "1.9.20"
id("com.google.dagger.hilt.android")
id("com.google.devtools.ksp")
}

android {
Expand Down Expand Up @@ -101,6 +102,11 @@ dependencies {
implementation("com.halilibo.compose-richtext:richtext-markdown:$richtextVersion")
implementation("com.halilibo.compose-richtext:richtext-commonmark:$richtextVersion")

// Hilt
implementation("com.google.dagger:hilt-android:2.51.1")
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
ksp("com.google.dagger:hilt-android-compiler:2.51.1")


// Kotlin Serialization
implementation ("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/live/shirabox/shirabox/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import android.app.Application
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.disk.DiskCache
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class App : Application(), ImageLoaderFactory {

override fun newImageLoader(): ImageLoader {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
import dagger.hilt.android.AndroidEntryPoint
import live.shirabox.shirabox.R
import live.shirabox.shirabox.ui.component.navigation.BottomNavigationView
import live.shirabox.shirabox.ui.screen.explore.notifications.NotificationsDialog
import live.shirabox.shirabox.ui.theme.ShiraBoxTheme

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalFoundationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,10 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.view.WindowCompat
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.hilt.navigation.compose.hiltViewModel
import coil.compose.AsyncImage
import coil.request.ImageRequest
import dagger.hilt.android.AndroidEntryPoint
import live.shirabox.core.model.ContentType
import live.shirabox.core.util.Util
import live.shirabox.core.util.round
Expand All @@ -100,6 +101,7 @@ import live.shirabox.shirabox.ui.component.general.ScaredEmoticon
import live.shirabox.shirabox.ui.theme.ShiraBoxTheme
import java.io.IOException

@AndroidEntryPoint
class ResourceActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down Expand Up @@ -148,9 +150,7 @@ fun Resource(
id: Int,
type: ContentType,
context: Context,
model: ResourceViewModel = viewModel(factory = Util.viewModelFactory {
ResourceViewModel(context, type)
}),
model: ResourceViewModel = hiltViewModel(),
colorScheme: ColorScheme = MaterialTheme.colorScheme
) {
val activity = LocalContext.current as Activity?
Expand Down Expand Up @@ -587,7 +587,6 @@ fun Resource(

ResourceBottomSheet(
content = content,
model = model,
visibilityState = bottomSheetVisibilityState
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import kotlinx.coroutines.launch
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
Expand All @@ -71,8 +72,8 @@ import live.shirabox.shirabox.ui.component.general.ExtendedListItem
@Composable
fun ResourceBottomSheet(
content: Content,
model: ResourceViewModel,
visibilityState: MutableState<Boolean>
visibilityState: MutableState<Boolean>,
model: ResourceViewModel = hiltViewModel()
) {
val currentSheetScreenState = remember {
mutableStateOf<ResourceSheetScreen>(ResourceSheetScreen.Sources(model))
Expand Down Expand Up @@ -108,7 +109,6 @@ fun ResourceBottomSheet(
when (currentSheetScreenState.value) {
is ResourceSheetScreen.Sources -> SourcesSheetScreen(
content = content,
model = model,
episodes = sortedEpisodesMap,
currentSheetScreenState = currentSheetScreenState,
visibilityState = visibilityState
Expand All @@ -121,7 +121,6 @@ fun ResourceBottomSheet(
content = (currentSheetScreenState.value as ResourceSheetScreen.Episodes).content,
episodes = sortedEpisodesMap[instance.repository]?.get(instance.team)
?: emptyList(),
model = model,
team = instance.team,
currentSheetScreenState = currentSheetScreenState,
visibilityState = visibilityState
Expand All @@ -139,6 +138,7 @@ fun SourcesSheetScreen(
episodes: Map<AbstractContentRepository?, Map<ActingTeam, List<EpisodeEntity>>>,
currentSheetScreenState: MutableState<ResourceSheetScreen>,
visibilityState: MutableState<Boolean>,
model: ResourceViewModel = hiltViewModel()
) {
val skipPartiallyExpanded by remember { mutableStateOf(false) }
val state = rememberModalBottomSheetState(
Expand Down Expand Up @@ -232,7 +232,6 @@ fun SourcesSheetScreen(
actingTeams.forEach { (team, entities) ->
item {
TeamListItem(
model = model,
repository = repository,
content = content,
episodes = entities,
Expand All @@ -259,8 +258,9 @@ fun EpisodesSheetScreen(
team: ActingTeam,
model: ResourceViewModel,
currentSheetScreenState: MutableState<ResourceSheetScreen>,
visibilityState: MutableState<Boolean>
) {
visibilityState: MutableState<Boolean>,
model: ResourceViewModel = hiltViewModel()
) {
val context = LocalContext.current

val skipPartiallyExpanded by remember { mutableStateOf(false) }
Expand Down Expand Up @@ -439,11 +439,11 @@ fun EpisodesSheetScreen(

@Composable
private fun TeamListItem(
model: ResourceViewModel,
repository: AbstractContentRepository,
content: Content,
episodes: List<EpisodeEntity>,
team: ActingTeam,
model: ResourceViewModel = hiltViewModel(),
onClick: () -> Unit
) {
val context = LocalContext.current
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.firebase.ktx.Firebase
import com.google.firebase.messaging.ktx.messaging
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
Expand All @@ -31,10 +33,13 @@ import live.shirabox.core.util.Util.Companion.mapEntityToContent
import live.shirabox.data.catalog.shikimori.ShikimoriRepository
import live.shirabox.data.content.AbstractContentRepository
import live.shirabox.data.content.ContentRepositoryRegistry
import live.shirabox.shirabox.db.AppDatabase
import javax.inject.Inject

class ResourceViewModel(context: Context, private val contentType: ContentType) : ViewModel() {
private val db = AppDatabase.getAppDataBase(context)
@HiltViewModel
class ResourceViewModel @Inject constructor(@ApplicationContext context: Context) : ViewModel() {
private val db = AppDatabase.getAppDataBase(context)!!

val content = mutableStateOf<Content?>(null)
val relatedContents = mutableStateListOf<Content>()
Expand All @@ -53,7 +58,7 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)

fun fetchContent(shikimoriId: Int, forceRefresh: Boolean = false) {
viewModelScope.launch(Dispatchers.IO) {
db?.let { database ->
db.let { database ->
val cachedData = database.contentDao().getContent(shikimoriId)

cachedData?.let {
Expand Down Expand Up @@ -84,6 +89,7 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)
internalContentUid.longValue = newUid
content.value = it
}

else -> {
database.contentDao().updateContents(
mapContentToEntity(
Expand Down Expand Up @@ -113,13 +119,13 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)
}

fun fetchCachedEpisodes():
Flow<List<EpisodeEntity>> = db?.episodeDao()?.all() ?: emptyFlow()
Flow<List<EpisodeEntity>> = db.episodeDao().all()

fun fetchEpisodes(content: Content) {
val finishedDeferred = viewModelScope.async(Dispatchers.IO) {
val combinedContent = db?.contentDao()?.combinedContent(content.shikimoriID)
val combinedContent = db.contentDao().getCombinedContent(content.shikimoriID)

combinedContent?.let {
combinedContent.let {
repositories.forEach { repository ->
val cachedEpisodes = combinedContent.episodes
val completeSearchRequired = cachedEpisodes.none { it.source == repository.name }
Expand Down Expand Up @@ -167,9 +173,9 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)
viewModelScope.launch(Dispatchers.IO) {
isFavourite.value = !isFavourite.value

val content = db?.contentDao()?.getContent(id)
val content = db.contentDao().getContent(id)
content?.let {
db?.contentDao()?.updateContents(it.copy(isFavourite = isFavourite.value))
db.contentDao().updateContents(it.copy(isFavourite = isFavourite.value))
}
}
}
Expand All @@ -181,7 +187,7 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)
team: ActingTeam
) {
viewModelScope.launch(Dispatchers.IO) {
val content = db?.contentDao()?.getContent(id)
val content = db.contentDao().getContent(id)
val subscriptionAllowed =
AppDataStore.read(context, DataStoreScheme.FIELD_SUBSCRIPTION.key).firstOrNull()
?: DataStoreScheme.FIELD_SUBSCRIPTION.defaultValue
Expand All @@ -207,19 +213,19 @@ class ResourceViewModel(context: Context, private val contentType: ContentType)
}
}

db?.contentDao()?.updateContents(entity.copy(pinnedTeams = pinnedTeams))
db.contentDao().updateContents(entity.copy(pinnedTeams = pinnedTeams))
}
}
}

fun clearNotifications(shikimoriId: Int) {
viewModelScope.launch(Dispatchers.IO) {
db?.notificationDao()?.notificationsFromParent(shikimoriId)?.catch {
db.notificationDao().notificationsFromParent(shikimoriId).catch {
it.printStackTrace()
emitAll(emptyFlow())
}?.map {
}.map {
it.toTypedArray()
}?.collect {
}.collect {
db.notificationDao().deleteNotification(*it)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.emitAll
Expand All @@ -46,9 +46,7 @@ import live.shirabox.shirabox.ui.screen.explore.notifications.NotificationsViewM
@Composable
fun TopBar(
navController: NavController,
model: NotificationsViewModel = viewModel(factory = Util.viewModelFactory {
NotificationsViewModel(context = navController.context.applicationContext)
})
model: NotificationsViewModel = hiltViewModel()
) {
val context = LocalContext.current

Expand Down
Loading

0 comments on commit 55633ae

Please sign in to comment.