Skip to content

Commit

Permalink
[Feat] JVM 插件 ICON 优化
Browse files Browse the repository at this point in the history
  • Loading branch information
why committed May 28, 2024
1 parent bf76953 commit 60c8b4a
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 187 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
package com.xiaoyv.comic.flexiflix.data.extension

import android.content.Context
import android.graphics.Bitmap
import android.graphics.Rect
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.net.Uri
import androidx.core.graphics.drawable.toBitmap
import com.xiaoyv.comic.flexiflix.data.remote.RemoteApi
import com.xiaoyv.comic.flexiflix.model.InstalledMediaSource
import com.xiaoyv.comic.flexiflix.model.OnlineExtension
import com.xiaoyv.flexiflix.common.utils.displayName
import com.xiaoyv.flexiflix.common.utils.fileType
import com.xiaoyv.flexiflix.common.utils.formatTime
import com.xiaoyv.flexiflix.common.utils.inputStream
import com.xiaoyv.flexiflix.common.utils.zoomCenter
import com.xiaoyv.flexiflix.extension.MediaSourceFactory
import com.xiaoyv.flexiflix.extension.MediaSourceType
import com.xiaoyv.flexiflix.extension.source.Source
Expand Down Expand Up @@ -177,6 +183,7 @@ class ExtensionRepositoryImpl @Inject constructor(
}
}


/**
* 读取文件,加载文件的全部插件
*/
Expand Down Expand Up @@ -205,7 +212,7 @@ class ExtensionRepositoryImpl @Inject constructor(
}

val extensionName = result?.first ?: nameWithoutExtension
val drawable = result?.second
val drawable = result?.second?.zoomCenter(1.2f)

return InstalledMediaSource(
type = MediaSourceType.TYPE_JVM,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
@file:Suppress("SpellCheckingInspection")

package com.xiaoyv.comic.flexiflix.ui.screen.main.profile.settings_theme

import androidx.lifecycle.ViewModel
import com.google.android.material.color.DynamicColors
import com.xiaoyv.flexiflix.common.utils.mutableStateFlowOf
import com.xiaoyv.flexiflix.extension.config.settings.AppSettings
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import javax.inject.Inject

/**
* [SettingThemeViewModel]
*
* @author why
* @since 5/28/24
*/
@HiltViewModel
class SettingThemeViewModel @Inject constructor() : ViewModel() {
private val _themeColors = mutableStateFlowOf(
listOf(
"#FF0000", "#FF5500", "#FFAA00", "#FFFF00",
"#AA0000", "#AA5500", "#AAAA00", "#AAFF00",
"#550000", "#555500", "#55AA00", "#55FF00",
"#000000", "#005500", "#00AA00", "#00FF00",
"#000055", "#005555", "#00AA55", "#00FF55",
"#0000AA", "#0055AA", "#00AAAA", "#00FFAA",
"#0000FF", "#0055FF", "#00AAFF", "#00FFFF",
"#5500FF", "#5555FF", "#55AAFF", "#55FFFF",
"#AA00FF", "#AA55FF", "#AAAAFF", "#AAFFFF",
"#FF00FF", "#FF55FF", "#FFAAFF", "#FFFFFF"
)
)

val themeColors get() = _themeColors.asStateFlow()

init {
checkCanSyncSystemDynamicColor()
}

/**
* 如果支持同步系统整体动态色,则主题设置第一个多一个系统色
*/
private fun checkCanSyncSystemDynamicColor() {
if (DynamicColors.isDynamicColorAvailable()) {
_themeColors.update {
it.toMutableList().apply { add(0, AppSettings.Theme.THEME_COLOR_VALUE_SYSTEM) }
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.xiaoyv.comic.flexiflix.ui.screen.main.profile.settings_theme
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import com.xiaoyv.comic.flexiflix.ui.screen.main.profile.about.navigateAbout

/**
* [addSettingThemeScreen]
Expand All @@ -20,8 +19,7 @@ fun NavController.navigateSettingTheme() {
fun NavGraphBuilder.addSettingThemeScreen(navController: NavController) {
composable(route = ROUTE_SETTINGS_THEME) {
SettingThemeRoute(
onNavUp = { navController.popBackStack() },
onNavAboutScreen = { navController.navigateAbout() }
onNavUp = { navController.popBackStack() }
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand All @@ -39,6 +40,8 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.xiaoyv.comic.flexiflix.ui.component.AppBar
import com.xiaoyv.comic.flexiflix.ui.component.AppThemeState
import com.xiaoyv.comic.flexiflix.ui.component.LocalThemeConfigState
Expand All @@ -59,37 +62,24 @@ import com.xiaoyv.flexiflix.extension.config.settings.AppSettings
@Composable
fun SettingThemeRoute(
onNavUp: () -> Unit = {},
onNavAboutScreen: () -> Unit = {},
) {
val viewModel = hiltViewModel<SettingThemeViewModel>()
val themeColors by viewModel.themeColors.collectAsStateWithLifecycle()

SettingThemeScreen(
themeColors = themeColors,
onNavUp = onNavUp
)
}

@Composable
fun SettingThemeScreen(
themeColors: List<String>,
onNavUp: () -> Unit = {},
) {
val context = LocalContext.current
val themeState = LocalThemeConfigState.current

// 红、绿、蓝每个分量可以是 00、55、AA、FF 的全部组合主题色
val themeColors = remember {
listOf(
"#FF0000", "#FF5500", "#FFAA00", "#FFFF00",
"#AA0000", "#AA5500", "#AAAA00", "#AAFF00",
"#550000", "#555500", "#55AA00", "#55FF00",
"#000000", "#005500", "#00AA00", "#00FF00",
"#000055", "#005555", "#00AA55", "#00FF55",
"#0000AA", "#0055AA", "#00AAAA", "#00FFAA",
"#0000FF", "#0055FF", "#00AAFF", "#00FFFF",
"#5500FF", "#5555FF", "#55AAFF", "#55FFFF",
"#AA00FF", "#AA55FF", "#AAAAFF", "#AAFFFF",
"#FF00FF", "#FF55FF", "#FFAAFF", "#FFFFFF"
)
}


ScaffoldScreen(
topBar = {
AppBar(title = "主题外观", onNavigationIconClick = onNavUp)
Expand Down Expand Up @@ -333,7 +323,20 @@ fun LazyItemScope.SettingThemePreview(
fun PreviewSettingThemeScreen() {
CompositionLocalProvider(LocalThemeConfigState provides AppThemeState()) {
AppTheme {
SettingThemeScreen()
SettingThemeScreen(
themeColors = listOf(
"#FF0000", "#FF5500", "#FFAA00", "#FFFF00",
"#AA0000", "#AA5500", "#AAAA00", "#AAFF00",
"#550000", "#555500", "#55AA00", "#55FF00",
"#000000", "#005500", "#00AA00", "#00FF00",
"#000055", "#005555", "#00AA55", "#00FF55",
"#0000AA", "#0055AA", "#00AAAA", "#00FFAA",
"#0000FF", "#0055FF", "#00AAFF", "#00FFFF",
"#5500FF", "#5555FF", "#55AAFF", "#55FFFF",
"#AA00FF", "#AA55FF", "#AAAAFF", "#AAFFFF",
"#FF00FF", "#FF55FF", "#FFAAFF", "#FFFFFF"
)
)
}
}
}
78 changes: 0 additions & 78 deletions app/src/main/java/com/xiaoyv/comic/flexiflix/ui/theme/Color.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,84 +2,6 @@ package com.xiaoyv.comic.flexiflix.ui.theme

import androidx.compose.ui.graphics.Color

/**
* 默认亮色主题
*/
val primaryLight = Color(0xFF415F91)
val onPrimaryLight = Color(0xFFFFFFFF)
val primaryContainerLight = Color(0xFFD6E3FF)
val onPrimaryContainerLight = Color(0xFF001B3E)
val secondaryLight = Color(0xFF565F71)
val onSecondaryLight = Color(0xFFFFFFFF)
val secondaryContainerLight = Color(0xFFDAE2F9)
val onSecondaryContainerLight = Color(0xFF131C2B)
val tertiaryLight = Color(0xFF705575)
val onTertiaryLight = Color(0xFFFFFFFF)
val tertiaryContainerLight = Color(0xFFFAD8FD)
val onTertiaryContainerLight = Color(0xFF28132E)
val errorLight = Color(0xFFBA1A1A)
val onErrorLight = Color(0xFFFFFFFF)
val errorContainerLight = Color(0xFFFFDAD6)
val onErrorContainerLight = Color(0xFF410002)
val backgroundLight = Color(0xFFF9F9FF)
val onBackgroundLight = Color(0xFF191C20)
val surfaceLight = Color(0xFFF9F9FF)
val onSurfaceLight = Color(0xFF191C20)
val surfaceVariantLight = Color(0xFFE0E2EC)
val onSurfaceVariantLight = Color(0xFF44474E)
val outlineLight = Color(0xFF74777F)
val outlineVariantLight = Color(0xFFC4C6D0)
val scrimLight = Color(0xFF000000)
val inverseSurfaceLight = Color(0xFF2E3036)
val inverseOnSurfaceLight = Color(0xFFF0F0F7)
val inversePrimaryLight = Color(0xFFAAC7FF)
val surfaceDimLight = Color(0xFFD9D9E0)
val surfaceBrightLight = Color(0xFFF9F9FF)
val surfaceContainerLowestLight = Color(0xFFFFFFFF)
val surfaceContainerLowLight = Color(0xFFF3F3FA)
val surfaceContainerLight = Color(0xFFEDEDF4)
val surfaceContainerHighLight = Color(0xFFE7E8EE)
val surfaceContainerHighestLight = Color(0xFFE2E2E9)

/**
* 默认暗色主题
*/
val primaryDark = Color(0xFFAAC7FF)
val onPrimaryDark = Color(0xFF0A305F)
val primaryContainerDark = Color(0xFF284777)
val onPrimaryContainerDark = Color(0xFFD6E3FF)
val secondaryDark = Color(0xFFBEC6DC)
val onSecondaryDark = Color(0xFF283141)
val secondaryContainerDark = Color(0xFF3E4759)
val onSecondaryContainerDark = Color(0xFFDAE2F9)
val tertiaryDark = Color(0xFFDDBCE0)
val onTertiaryDark = Color(0xFF3F2844)
val tertiaryContainerDark = Color(0xFF573E5C)
val onTertiaryContainerDark = Color(0xFFFAD8FD)
val errorDark = Color(0xFFFFB4AB)
val onErrorDark = Color(0xFF690005)
val errorContainerDark = Color(0xFF93000A)
val onErrorContainerDark = Color(0xFFFFDAD6)
val backgroundDark = Color(0xFF111318)
val onBackgroundDark = Color(0xFFE2E2E9)
val surfaceDark = Color(0xFF111318)
val onSurfaceDark = Color(0xFFE2E2E9)
val surfaceVariantDark = Color(0xFF44474E)
val onSurfaceVariantDark = Color(0xFFC4C6D0)
val outlineDark = Color(0xFF8E9099)
val outlineVariantDark = Color(0xFF44474E)
val scrimDark = Color(0xFF000000)
val inverseSurfaceDark = Color(0xFFE2E2E9)
val inverseOnSurfaceDark = Color(0xFF2E3036)
val inversePrimaryDark = Color(0xFF415F91)
val surfaceDimDark = Color(0xFF111318)
val surfaceBrightDark = Color(0xFF37393E)
val surfaceContainerLowestDark = Color(0xFF0C0E13)
val surfaceContainerLowDark = Color(0xFF191C20)
val surfaceContainerDark = Color(0xFF1D2024)
val surfaceContainerHighDark = Color(0xFF282A2F)
val surfaceContainerHighestDark = Color(0xFF33353A)

/**
* 强制黑色主题
*/
Expand Down
Loading

0 comments on commit 60c8b4a

Please sign in to comment.