Skip to content

Commit fca533e

Browse files
committed
Merge branch 'dev'
2 parents 5ce2e31 + ff353d2 commit fca533e

File tree

129 files changed

+13647
-10455
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+13647
-10455
lines changed

app/build.gradle.kts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ android {
1919
applicationId = "org.nsh07.wikireader"
2020
minSdk = 26
2121
targetSdk = 36
22-
versionCode = 45
23-
versionName = "2.4.1"
22+
versionCode = 48
23+
versionName = "2.5.0"
2424

2525
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2626
vectorDrawables {
@@ -47,7 +47,7 @@ android {
4747
}
4848
kotlin {
4949
compilerOptions {
50-
jvmTarget.set(JvmTarget.JVM_17) // Use the enum for target JVM version
50+
jvmTarget.set(JvmTarget.JVM_17)
5151
}
5252
}
5353
ksp {
@@ -81,7 +81,6 @@ dependencies {
8181
implementation(libs.androidx.activity.compose)
8282
implementation(libs.androidx.adaptive)
8383
implementation(libs.androidx.core.ktx)
84-
implementation(libs.androidx.material.icons.core)
8584
implementation(libs.androidx.core.splashscreen)
8685
implementation(libs.androidx.lifecycle.runtime.ktx)
8786
implementation(libs.androidx.lifecycle.viewmodel.compose)
@@ -91,6 +90,8 @@ dependencies {
9190
implementation(libs.androidx.ui.graphics)
9291
implementation(libs.androidx.ui.tooling.preview)
9392

93+
implementation(libs.androidx.navigation3.ui)
94+
implementation(libs.androidx.navigation3.runtime)
9495
implementation(libs.androidx.room.runtime)
9596
implementation(libs.androidx.room.ktx)
9697
ksp(libs.androidx.room.compiler)

app/src/main/java/org/nsh07/wikireader/MainActivity.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,29 @@ import androidx.compose.ui.platform.LocalLayoutDirection
1616
import androidx.compose.ui.unit.LayoutDirection
1717
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
1818
import androidx.lifecycle.compose.collectAsStateWithLifecycle
19+
import org.nsh07.wikireader.data.AppStatus
1920
import org.nsh07.wikireader.data.isRtl
2021
import org.nsh07.wikireader.data.toColor
2122
import org.nsh07.wikireader.ui.AppScreen
23+
import org.nsh07.wikireader.ui.homeScreen.viewModel.HomeScreenViewModel
24+
import org.nsh07.wikireader.ui.settingsScreen.viewModel.SettingsViewModel
2225
import org.nsh07.wikireader.ui.theme.WikiReaderTheme
23-
import org.nsh07.wikireader.ui.viewModel.UiViewModel
2426

2527
class MainActivity : ComponentActivity() {
2628

27-
val viewModel: UiViewModel by viewModels<UiViewModel>(factoryProducer = { UiViewModel.Factory })
29+
val viewModel: HomeScreenViewModel by viewModels<HomeScreenViewModel>(factoryProducer = { HomeScreenViewModel.Factory })
30+
val settingsViewModel: SettingsViewModel by viewModels<SettingsViewModel>(factoryProducer = { SettingsViewModel.Factory })
2831

2932
override fun onCreate(savedInstanceState: Bundle?) {
3033
super.onCreate(savedInstanceState)
31-
installSplashScreen().setKeepOnScreenCondition { !viewModel.isReady }
34+
installSplashScreen().setKeepOnScreenCondition { viewModel.appStatus.value != AppStatus.INITIALIZED }
3235

3336
viewModel.setFilesDir(filesDir.path)
34-
viewModel.migrateArticles()
3537

3638
enableEdgeToEdge()
3739

3840
setContent {
39-
val preferencesState by viewModel.preferencesState.collectAsStateWithLifecycle()
41+
val preferencesState by settingsViewModel.preferencesState.collectAsStateWithLifecycle()
4042

4143
val darkTheme = when (preferencesState.theme) {
4244
"dark" -> true
@@ -62,7 +64,7 @@ class MainActivity : ComponentActivity() {
6264
) {
6365
AppScreen(
6466
viewModel = viewModel,
65-
preferencesState = preferencesState,
67+
settingsViewModel = settingsViewModel,
6668
modifier = Modifier.fillMaxSize()
6769
)
6870
}

app/src/main/java/org/nsh07/wikireader/data/AppContainer.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,19 @@ package org.nsh07.wikireader.data
33
import android.content.Context
44
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
55
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.flow.MutableStateFlow
67
import kotlinx.serialization.json.Json
78
import okhttp3.MediaType.Companion.toMediaType
89
import okhttp3.OkHttpClient
910
import org.nsh07.wikireader.network.HostSelectionInterceptor
1011
import org.nsh07.wikireader.network.WikipediaApiService
12+
import org.nsh07.wikireader.ui.settingsScreen.viewModel.PreferencesState
1113
import retrofit2.Retrofit
1214
import retrofit2.converter.scalars.ScalarsConverterFactory
1315

1416
interface AppContainer {
17+
val appStatus: MutableStateFlow<AppStatus>
18+
val preferencesStateMutableFlow: MutableStateFlow<PreferencesState>
1519
val interceptor: HostSelectionInterceptor
1620
val wikipediaRepository: WikipediaRepository
1721
val appPreferencesRepository: AppPreferencesRepository
@@ -24,6 +28,9 @@ class DefaultAppContainer(context: Context) : AppContainer {
2428

2529
override val interceptor = HostSelectionInterceptor()
2630

31+
override val appStatus = MutableStateFlow(AppStatus.NOT_INITIALIZED)
32+
override val preferencesStateMutableFlow = MutableStateFlow(PreferencesState())
33+
2734
private val okHttpClient by lazy {
2835
OkHttpClient.Builder()
2936
.addInterceptor(interceptor)
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
package org.nsh07.wikireader.data
22

33
enum class WRStatus {
4-
SUCCESS, NETWORK_ERROR, IO_ERROR, NO_SEARCH_RESULT, UNINITIALIZED,
4+
SUCCESS, NETWORK_ERROR, NO_SEARCH_RESULT, UNINITIALIZED,
55
FEED_LOADED, FEED_NETWORK_ERROR, OTHER, DATABASE_ERROR
66
}
77

88
enum class SavedStatus {
99
NOT_SAVED, SAVING, SAVED
10+
}
11+
12+
/**
13+
* Enum class to track the app's startup status. On startup, the app status is
14+
* [AppStatus.NOT_INITIALIZED]. After all the settings are loaded and applied, the status is set to
15+
* [AppStatus.INITIALIZED]. This status is used to control the visibility of the splash screen
16+
*/
17+
enum class AppStatus {
18+
INITIALIZED, NOT_INITIALIZED
1019
}

app/src/main/java/org/nsh07/wikireader/data/misc.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.nsh07.wikireader.data
22

33
import androidx.compose.ui.graphics.Color
4+
import java.util.Locale
45

56
/**
67
* Extension function for [String] to convert it to a [Color]
@@ -79,6 +80,36 @@ fun bytesToHumanReadableSize(bytes: Double) = when {
7980
else -> "$bytes bytes"
8081
}
8182

83+
fun Double.formatToHumanReadable(): String {
84+
return when {
85+
this >= 1000000000000000 -> String.format(
86+
Locale.US,
87+
"%.2f quadrillion",
88+
this / 1000000000000000.0
89+
)
90+
91+
this >= 1000000000000 -> String.format(Locale.US, "%.2f trillion", this / 1000000000000.0)
92+
this >= 1000000000 -> String.format(Locale.US, "%.2f billion", this / 1000000000.0)
93+
this >= 1000000 -> String.format(Locale.US, "%.2f million", this / 1000000.0)
94+
else -> this.toString()
95+
}
96+
}
97+
98+
fun Long.formatToHumanReadable(): String {
99+
return when {
100+
this >= 1000000000000000 -> String.format(
101+
Locale.US,
102+
"%.2f quadrillion",
103+
this / 1000000000000000.0
104+
)
105+
106+
this >= 1000000000000 -> String.format(Locale.US, "%.2f trillion", this / 1000000000000.0)
107+
this >= 1000000000 -> String.format(Locale.US, "%.2f billion", this / 1000000000.0)
108+
this >= 1000000 -> String.format(Locale.US, "%.2f million", this / 1000000.0)
109+
else -> this.toString()
110+
}
111+
}
112+
82113
/**
83114
* Converts a Wikipedia URL language code (e.g. "en" in en.wikipedia.org for the English Wikipedia)
84115
* into its corresponding language name (e.g. "English" for en)

0 commit comments

Comments
 (0)