Skip to content

Commit

Permalink
Merge pull request #71 from dmzz-yyhyy/settings
Browse files Browse the repository at this point in the history
完成设置页面
  • Loading branch information
dmzz-yyhyy authored Aug 18, 2024
2 parents 7a233ee + 096a9e1 commit d08dc21
Show file tree
Hide file tree
Showing 38 changed files with 1,356 additions and 179 deletions.
19 changes: 18 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
Expand All @@ -16,13 +20,18 @@ android {
minSdk = 24
targetSdk = 34
// 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数)
versionCode = 4_02_006
versionCode = 4_02_008
versionName = "0.4.2"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
val dateFormat = SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US)
resValue("string", "info_build_date", dateFormat.format(Date()))
resValue("string", "info_build_host",
System.getProperty("user.name") + "@" + System.getenv("HOSTNAME") + "\n"
+ " " + System.getProperty("os.name") + "/" + System.getProperty("os.arch"))
setProperty("archivesBaseName", "LightNovelReader-${versionName}")
}

Expand Down Expand Up @@ -51,6 +60,7 @@ android {
}
buildFeatures {
compose = true
buildConfig = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.14"
Expand Down Expand Up @@ -108,6 +118,13 @@ dependencies {
implementation("io.coil-kt:coil-compose:2.6.0")
// jsoup
implementation("org.jsoup:jsoup:1.18.1")
// Gson
implementation("com.google.code.gson:gson:2.10.1")
// markdown
implementation("com.github.jeziellago:compose-markdown:0.5.2")
// Ketch
//noinspection GradleDependency
implementation("com.github.khushpanchal:Ketch:1.0.0")
// room
val roomVersion = "2.6.1"
implementation("androidx.room:room-runtime:$roomVersion")
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>


<application
android:usesCleartextTraffic="true"
Expand All @@ -29,6 +33,15 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,36 +1,93 @@
package indi.dmzz_yyhyy.lightnovelreader

import android.Manifest.permission.POST_NOTIFICATIONS
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.text.intl.Locale
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.coroutineScope
import androidx.lifecycle.repeatOnLifecycle
import com.ketch.Ketch
import com.ketch.NotificationConfig
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.BuildConfig
import com.microsoft.appcenter.analytics.Analytics
import com.microsoft.appcenter.crashes.Crashes
import dagger.hilt.android.AndroidEntryPoint
import indi.dmzz_yyhyy.lightnovelreader.data.UserDataRepository
import indi.dmzz_yyhyy.lightnovelreader.data.update.UpdateCheckRepository
import indi.dmzz_yyhyy.lightnovelreader.data.userdata.UserDataPath
import indi.dmzz_yyhyy.lightnovelreader.theme.LightNovelReaderTheme
import indi.dmzz_yyhyy.lightnovelreader.ui.LightNovelReaderApp
import indi.dmzz_yyhyy.lightnovelreader.utils.LightNovelReaderTheme
import indi.dmzz_yyhyy.lightnovelreader.utils.update

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var userDataRepository: UserDataRepository
@Inject
lateinit var updateCheckRepository: UpdateCheckRepository
private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!BuildConfig.DEBUG) {
AppCenter.start(
application,
update("eNpb85aBtYRBJc3c3MTYwshAN808JVnXxNIiTTfJ2DBFNzXZ1MDYKMkgxcwsBQAG3Aux").toString(),
Analytics::class.java,
Crashes::class.java
)
var appLocale by mutableStateOf(Locale.current.language)
var darkMode by mutableStateOf("FollowSystem")
var statisticsEnabled by mutableStateOf(true)
coroutineScope.launch(Dispatchers.IO) {
userDataRepository.stringUserData(UserDataPath.Settings.Display.AppLocale.path).getFlow().collect {
appLocale = it ?: "${Locale.current.platformLocale.language}-${Locale.current.platformLocale.variant}"
}
}
coroutineScope.launch(Dispatchers.IO) {
userDataRepository.stringUserData(UserDataPath.Settings.Display.DarkMode.path).getFlow().collect {
darkMode = it ?: "FollowSystem"
}
}

coroutineScope.launch(Dispatchers.IO) {
statisticsEnabled = userDataRepository.booleanUserData(UserDataPath.Settings.App.Statistics.path).getOrDefault(true)
if (!BuildConfig.DEBUG && statisticsEnabled) {
AppCenter.start(
application,
update("eNpb85aBtYRBJc3c3MTYwshAN808JVnXxNIiTTfJ2DBFNzXZ1MDYKMkgxcwsBQAG3Aux").toString(),
Analytics::class.java,
Crashes::class.java
)
}
}
installSplashScreen()
if (Build.VERSION.SDK_INT >= 33) { /* Android 13 + */
if (ContextCompat.checkSelfPermission(this, POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this, arrayOf(POST_NOTIFICATIONS), 0
)
}
}
setContent {
LightNovelReaderTheme {
LightNovelReaderTheme(
darkMode = darkMode,
appLocale = appLocale
) {
LightNovelReaderApp()
}
}
}

override fun onDestroy() {
super.onDestroy()
coroutineScope.cancel()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ import javax.inject.Singleton

@Singleton
class UserDataRepository @Inject constructor(
private val userDataDao: UserDataDao
) {
private val userDataDao: UserDataDao)
{

fun stringUserData(path: String): StringUserData = StringUserData(path, userDataDao)
fun floatUserData(path: String): FloatUserData = FloatUserData(path, userDataDao)
fun booleanUserData(path: String): BooleanUserData = BooleanUserData(path, userDataDao)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ import indi.dmzz_yyhyy.lightnovelreader.data.local.room.dao.BookVolumesDao
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.dao.ChapterContentDao
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.dao.UserDataDao
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.dao.UserReadingDataDao
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.BookInformationEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.ChapterContentEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.ChapterInformationEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.UserDataEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.UserReadingDataEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.VolumeEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.BookInformationEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.ChapterContentEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.ChapterInformationEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.UserDataEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.UserReadingDataEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.VolumeEntity

@Database(
entities = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.room.Transaction
import androidx.room.TypeConverters
import indi.dmzz_yyhyy.lightnovelreader.data.book.BookInformation
import indi.dmzz_yyhyy.lightnovelreader.data.loacltion.room.converter.LocalDataTimeConverter
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.BookInformationEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.BookInformationEntity
import java.time.LocalDateTime

@Dao
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import indi.dmzz_yyhyy.lightnovelreader.data.book.BookVolumes
import indi.dmzz_yyhyy.lightnovelreader.data.book.ChapterInformation
import indi.dmzz_yyhyy.lightnovelreader.data.book.Volume
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.converter.ListConverter
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.VolumeEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.VolumeEntity

@Dao
interface BookVolumesDao {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import androidx.room.Query
import androidx.room.Transaction
import indi.dmzz_yyhyy.lightnovelreader.data.book.UserReadingData
import indi.dmzz_yyhyy.lightnovelreader.data.loacltion.room.converter.LocalDataTimeConverter.dateToString
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity.UserReadingDataEntity
import indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity.UserReadingDataEntity
import kotlinx.coroutines.flow.Flow

@Dao
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.Entity
import androidx.room.PrimaryKey
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.Entity
import androidx.room.PrimaryKey
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.Entity
import androidx.room.PrimaryKey
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.eneity
package indi.dmzz_yyhyy.lightnovelreader.data.local.room.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
Expand Down
Loading

0 comments on commit d08dc21

Please sign in to comment.