0
0
Fork 0
mirror of https://github.com/YTVanced/VancedManager synced 2024-12-03 00:07:25 +00:00
This commit is contained in:
X1nto 2021-11-22 16:30:47 +04:00
parent c7e54ba6fa
commit c83ee3df8f
28 changed files with 187 additions and 170 deletions

View file

@ -1,7 +1,6 @@
package com.vanced.manager.core.downloader.impl package com.vanced.manager.core.downloader.impl
import android.content.Context import android.content.Context
import android.util.Log
import com.vanced.manager.core.downloader.api.MicrogAPI import com.vanced.manager.core.downloader.api.MicrogAPI
import com.vanced.manager.core.downloader.base.AppDownloader import com.vanced.manager.core.downloader.base.AppDownloader
import com.vanced.manager.core.downloader.util.DownloadStatus import com.vanced.manager.core.downloader.util.DownloadStatus
@ -33,10 +32,12 @@ class MicrogDownloader(
onStatus(DownloadStatus.StartInstall) onStatus(DownloadStatus.StartInstall)
}, },
onError = { error, fileName -> onError = { error, fileName ->
onStatus(DownloadStatus.Error( onStatus(
displayError = "Failed to download $fileName", DownloadStatus.Error(
stacktrace = error displayError = "Failed to download $fileName",
)) stacktrace = error
)
)
} }
) )
} }

View file

@ -23,13 +23,15 @@ class MusicDownloader(
absoluteVersion = getLatestOrProvidedAppVersion(musicVersionPref, appVersions) absoluteVersion = getLatestOrProvidedAppVersion(musicVersionPref, appVersions)
downloadFiles( downloadFiles(
downloadFiles = arrayOf(DownloadFile( downloadFiles = arrayOf(
call = musicAPI.getFiles( DownloadFile(
version = absoluteVersion, call = musicAPI.getFiles(
variant = managerVariantPref, version = absoluteVersion,
), variant = managerVariantPref,
fileName = "music.apk" ),
)), fileName = "music.apk"
)
),
onProgress = { progress -> onProgress = { progress ->
onStatus(DownloadStatus.Progress(progress)) onStatus(DownloadStatus.Progress(progress))
}, },
@ -40,10 +42,12 @@ class MusicDownloader(
onStatus(DownloadStatus.StartInstall) onStatus(DownloadStatus.StartInstall)
}, },
onError = { error, fileName -> onError = { error, fileName ->
onStatus(DownloadStatus.Error( onStatus(
displayError = "Failed to download $fileName", DownloadStatus.Error(
stacktrace = error displayError = "Failed to download $fileName",
)) stacktrace = error
)
)
} }
) )
} }

View file

@ -53,10 +53,12 @@ class VancedDownloader(
onStatus(DownloadStatus.StartInstall) onStatus(DownloadStatus.StartInstall)
}, },
onError = { error, fileName -> onError = { error, fileName ->
onStatus(DownloadStatus.Error( onStatus(
displayError = "Failed to download $fileName", DownloadStatus.Error(
stacktrace = error displayError = "Failed to download $fileName",
)) stacktrace = error
)
)
} }
) )
} }

View file

@ -24,7 +24,10 @@ class AppInstallService : Service() {
sendBroadcast(Intent().apply { sendBroadcast(Intent().apply {
action = APP_INSTALL_STATUS action = APP_INSTALL_STATUS
putExtra(EXTRA_INSTALL_STATUS, status) putExtra(EXTRA_INSTALL_STATUS, status)
putExtra(EXTRA_INSTALL_EXTRA, intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)) putExtra(
EXTRA_INSTALL_EXTRA,
intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
)
}) })
} }
} }

View file

@ -70,7 +70,7 @@ class ManagerPreference<T>(
var value by mutableStateOf(sharedPreferences.getter(key, defaultValue) ?: defaultValue) var value by mutableStateOf(sharedPreferences.getter(key, defaultValue) ?: defaultValue)
private set private set
operator fun getValue( operator fun getValue(
thisRef: Any?, thisRef: Any?,
property: KProperty<*> property: KProperty<*>

View file

@ -7,14 +7,20 @@ import com.vanced.manager.core.preferences.managerStringSetPreference
import com.vanced.manager.ui.theme.defAccentColor import com.vanced.manager.ui.theme.defAccentColor
var useCustomTabsPref by managerBooleanPreference(USE_CUSTOM_TABS_KEY) var useCustomTabsPref by managerBooleanPreference(USE_CUSTOM_TABS_KEY)
var managerVariantPref by managerStringPreference(MANAGER_VARIANT_KEY, MANAGER_VARIANT_DEFAULT_VALUE) var managerVariantPref by managerStringPreference(
MANAGER_VARIANT_KEY,
MANAGER_VARIANT_DEFAULT_VALUE
)
var managerThemePref by managerStringPreference(MANAGER_THEME_KEY, MANAGER_THEME_DEFAULT_VALUE) var managerThemePref by managerStringPreference(MANAGER_THEME_KEY, MANAGER_THEME_DEFAULT_VALUE)
var managerAccentColorPref by managerLongPreference(MANAGER_ACCENT_COLOR_KEY, defAccentColor) var managerAccentColorPref by managerLongPreference(MANAGER_ACCENT_COLOR_KEY, defAccentColor)
var vancedThemePref by managerStringPreference(APP_VANCED_THEME_KEY, VANCED_THEME_DEFAULT_VALUE) var vancedThemePref by managerStringPreference(APP_VANCED_THEME_KEY, VANCED_THEME_DEFAULT_VALUE)
var vancedVersionPref by managerStringPreference(APP_VANCED_VERSION_KEY, APP_VERSION_DEFAULT_VALUE) var vancedVersionPref by managerStringPreference(APP_VANCED_VERSION_KEY, APP_VERSION_DEFAULT_VALUE)
var vancedLanguagesPref by managerStringSetPreference(APP_VANCED_LANGUAGE_KEY, VANCED_LANGUAGE_DEFAULT_VALUE) var vancedLanguagesPref by managerStringSetPreference(
APP_VANCED_LANGUAGE_KEY,
VANCED_LANGUAGE_DEFAULT_VALUE
)
var musicVersionPref by managerStringPreference(APP_MUSIC_VERSION_KEY, APP_VERSION_DEFAULT_VALUE) var musicVersionPref by managerStringPreference(APP_MUSIC_VERSION_KEY, APP_VERSION_DEFAULT_VALUE)

View file

@ -74,72 +74,72 @@ class AppDtoMapper(
appVersions: List<String>?, appVersions: List<String>?,
appLanguages: List<String>?, appLanguages: List<String>?,
) = when (appName) { ) = when (appName) {
VANCED_NAME -> listOf( VANCED_NAME -> listOf(
InstallationOption.SingleSelect( InstallationOption.SingleSelect(
titleId = R.string.app_installation_options_theme, titleId = R.string.app_installation_options_theme,
getOption = { vancedThemePref }, getOption = { vancedThemePref },
setOption = { setOption = {
vancedThemePref = it vancedThemePref = it
}, },
items = appThemes?.map { theme -> items = appThemes?.map { theme ->
InstallationOptionItem( InstallationOptionItem(
displayText = { displayText = {
theme.replaceFirstChar { theme.replaceFirstChar {
it.titlecase(Locale.getDefault()) it.titlecase(Locale.getDefault())
} }
}, },
key = theme key = theme
) )
} ?: emptyList(), } ?: emptyList(),
), ),
InstallationOption.SingleSelect( InstallationOption.SingleSelect(
titleId = R.string.app_installation_options_version, titleId = R.string.app_installation_options_version,
getOption = { vancedVersionPref }, getOption = { vancedVersionPref },
setOption = { setOption = {
vancedVersionPref = it vancedVersionPref = it
}, },
items = appVersions?.map { version -> items = appVersions?.map { version ->
InstallationOptionItem( InstallationOptionItem(
displayText = { "v$version" }, displayText = { "v$version" },
key = version key = version
) )
}?.plus(latestVersionRadioButton)?.reversed() ?: emptyList(), }?.plus(latestVersionRadioButton)?.reversed() ?: emptyList(),
), ),
InstallationOption.MultiSelect( InstallationOption.MultiSelect(
titleId = R.string.app_installation_options_language, titleId = R.string.app_installation_options_language,
getOption = { vancedLanguagesPref }, getOption = { vancedLanguagesPref },
addOption = { addOption = {
vancedLanguagesPref = vancedLanguagesPref + it vancedLanguagesPref = vancedLanguagesPref + it
}, },
removeOption = { removeOption = {
vancedLanguagesPref = vancedLanguagesPref - it vancedLanguagesPref = vancedLanguagesPref - it
}, },
items = appLanguages?.map { language -> items = appLanguages?.map { language ->
InstallationOptionItem( InstallationOptionItem(
displayText = { displayText = {
val locale = Locale(it) val locale = Locale(it)
locale.getDisplayName(locale) locale.getDisplayName(locale)
}, },
key = language key = language
) )
} ?: emptyList(), } ?: emptyList(),
), ),
)
MUSIC_NAME -> listOf(
InstallationOption.SingleSelect(
titleId = R.string.app_installation_options_version,
getOption = { musicVersionPref },
setOption = {
musicVersionPref = it
},
items = appVersions?.map { version ->
InstallationOptionItem(
displayText = { version },
key = version
)
} ?: emptyList(),
) )
MUSIC_NAME -> listOf( )
InstallationOption.SingleSelect( else -> null
titleId = R.string.app_installation_options_version, }
getOption = { musicVersionPref },
setOption = {
musicVersionPref = it
},
items = appVersions?.map { version ->
InstallationOptionItem(
displayText = { version },
key = version
)
} ?: emptyList(),
)
)
else -> null
}
} }

View file

@ -7,7 +7,7 @@ import android.content.IntentFilter
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.animation.* import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
@ -23,11 +23,13 @@ import com.vanced.manager.ui.theme.ManagerTheme
import com.vanced.manager.ui.theme.isDark import com.vanced.manager.ui.theme.isDark
import com.vanced.manager.ui.util.Screen import com.vanced.manager.ui.util.Screen
import com.vanced.manager.ui.viewmodel.InstallViewModel import com.vanced.manager.ui.viewmodel.InstallViewModel
import com.vanced.manager.ui.viewmodel.MainViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
private val installViewModel: InstallViewModel by viewModel() private val installViewModel: InstallViewModel by viewModel()
private val mainViewModel: MainViewModel by viewModel()
private val backPressHandler = BackPressHandler() private val backPressHandler = BackPressHandler()
@ -46,7 +48,7 @@ class MainActivity : ComponentActivity() {
@OptIn( @OptIn(
ExperimentalAnimationApi::class, ExperimentalAnimationApi::class,
ExperimentalMaterial3Api::class, ExperimentalMaterial3Api::class,
ExperimentalFoundationApi::class ExperimentalFoundationApi::class,
) )
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -72,6 +74,7 @@ class MainActivity : ComponentActivity() {
when (val screen = backStack.last()) { when (val screen = backStack.last()) {
is Screen.Home -> { is Screen.Home -> {
HomeLayout( HomeLayout(
viewModel = mainViewModel,
onToolbarScreenSelected = { onToolbarScreenSelected = {
backStack.push(it) backStack.push(it)
}, },
@ -124,7 +127,11 @@ class MainActivity : ComponentActivity() {
) )
} }
is Screen.Install -> { is Screen.Install -> {
InstallScreen(screen.appName, screen.appVersions) InstallScreen(
appName = screen.appName,
appVersions = screen.appVersions,
viewModel = installViewModel
)
} }
} }
} }

View file

@ -1,14 +1,9 @@
package com.vanced.manager.ui.component.layout package com.vanced.manager.ui.component.layout
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
@Composable @Composable
fun ManagerLazyColumn( fun ManagerLazyColumn(

View file

@ -20,13 +20,13 @@ fun ManagerScaffold(
// CompositionLocalProvider( // CompositionLocalProvider(
// LocalAbsoluteTonalElevation provides absoluteTonalElevation // LocalAbsoluteTonalElevation provides absoluteTonalElevation
// ) { // ) {
Scaffold( Scaffold(
modifier = modifier, modifier = modifier,
scaffoldState = scaffoldState, scaffoldState = scaffoldState,
topBar = topBar, topBar = topBar,
floatingActionButton = floatingActionButton, floatingActionButton = floatingActionButton,
floatingActionButtonPosition = floatingActionButtonPosition, floatingActionButtonPosition = floatingActionButtonPosition,
content = content content = content
) )
// } // }
} }

View file

@ -3,13 +3,9 @@ package com.vanced.manager.ui.component.layout
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.google.accompanist.swiperefresh.SwipeRefresh import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
import com.google.accompanist.swiperefresh.SwipeRefreshState import com.google.accompanist.swiperefresh.SwipeRefreshState
import com.vanced.manager.ui.component.card.ManagerCard
import com.vanced.manager.ui.component.color.managerAccentColor
@Composable @Composable
fun ManagerSwipeRefresh( fun ManagerSwipeRefresh(

View file

@ -1,7 +1,6 @@
package com.vanced.manager.ui.component.layout package com.vanced.manager.ui.component.layout
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState

View file

@ -1,9 +1,17 @@
package com.vanced.manager.ui.component.menu package com.vanced.manager.ui.component.menu
import androidx.compose.animation.* import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.* import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.foundation.layout.* import androidx.compose.animation.core.animateFloat
import androidx.compose.runtime.* import androidx.compose.animation.core.tween
import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha

View file

@ -1,26 +1,17 @@
package com.vanced.manager.ui.component.preference package com.vanced.manager.ui.component.preference
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.TextButton import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.toMutableStateList
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.preferences.CheckboxPreference
import com.vanced.manager.core.preferences.ManagerPreference
import com.vanced.manager.core.preferences.RadioButtonPreference import com.vanced.manager.core.preferences.RadioButtonPreference
import com.vanced.manager.ui.component.button.ManagerThemedTextButton
import com.vanced.manager.ui.component.text.ManagerText import com.vanced.manager.ui.component.text.ManagerText
import com.vanced.manager.ui.resources.managerString import com.vanced.manager.ui.resources.managerString
import com.vanced.manager.ui.widget.list.CheckboxItem import com.vanced.manager.ui.widget.list.CheckboxItem
import kotlinx.coroutines.launch
@Composable @Composable
fun CheckboxDialogPreference( fun CheckboxDialogPreference(

View file

@ -1,11 +1,8 @@
package com.vanced.manager.ui.component.preference package com.vanced.manager.ui.component.preference
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vanced.manager.core.preferences.ManagerPreference
import com.vanced.manager.ui.widget.checkbox.ManagerAnimatedCheckbox import com.vanced.manager.ui.widget.checkbox.ManagerAnimatedCheckbox
import kotlinx.coroutines.launch
@Composable @Composable
fun CheckboxPreference( fun CheckboxPreference(

View file

@ -11,11 +11,9 @@ import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.component.card.ManagerTonalCard import com.vanced.manager.ui.component.card.ManagerTonalCard
import com.vanced.manager.ui.component.color.managerAnimatedColor import com.vanced.manager.ui.component.color.managerAnimatedColor
import com.vanced.manager.ui.component.list.ManagerListItem import com.vanced.manager.ui.component.list.ManagerListItem
import com.vanced.manager.ui.component.modifier.managerClickable
import com.vanced.manager.ui.component.text.ManagerText import com.vanced.manager.ui.component.text.ManagerText
import com.vanced.manager.ui.theme.LargeShape import com.vanced.manager.ui.theme.LargeShape
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
@Composable @Composable
fun Preference( fun Preference(

View file

@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.vanced.manager.R import com.vanced.manager.R

View file

@ -67,7 +67,7 @@ private val vancedTeam = listOf(
) )
) )
private val otherContributors = listOf( private val otherContributors = listOf(
Person( Person(
name = "bhatVikrant", name = "bhatVikrant",
contribution = "Website" contribution = "Website"
@ -132,7 +132,9 @@ fun AboutLayout(
} }
) { paddingValues -> ) { paddingValues ->
ManagerLazyColumn( ManagerLazyColumn(
modifier = Modifier.fillMaxSize().padding(paddingValues), modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
) { ) {
item { item {
ManagerTonalCard( ManagerTonalCard(

View file

@ -4,7 +4,10 @@ import androidx.compose.animation.*
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.MoreVert import androidx.compose.material.icons.rounded.MoreVert
import androidx.compose.material3.* import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -33,12 +36,12 @@ import com.vanced.manager.ui.viewmodel.MainViewModel
import com.vanced.manager.ui.widget.app.AppCard import com.vanced.manager.ui.widget.app.AppCard
import com.vanced.manager.ui.widget.app.AppCardPlaceholder import com.vanced.manager.ui.widget.app.AppCardPlaceholder
import com.vanced.manager.ui.widget.layout.managerCategory import com.vanced.manager.ui.widget.layout.managerCategory
import org.koin.androidx.compose.getViewModel
@ExperimentalMaterial3Api @ExperimentalMaterial3Api
@ExperimentalAnimationApi @ExperimentalAnimationApi
@Composable @Composable
fun HomeLayout( fun HomeLayout(
viewModel: MainViewModel,
onToolbarScreenSelected: (Screen) -> Unit, onToolbarScreenSelected: (Screen) -> Unit,
onAppInstallPress: ( onAppInstallPress: (
appName: String, appName: String,
@ -46,11 +49,10 @@ fun HomeLayout(
installationOptions: List<InstallationOption>? installationOptions: List<InstallationOption>?
) -> Unit ) -> Unit
) { ) {
val viewModel: MainViewModel = getViewModel()
val appState by viewModel.appState.collectAsState() val appState by viewModel.appState.collectAsState()
val refreshState = rememberSwipeRefreshState(isRefreshing = appState is MainViewModel.AppState.Fetching) val refreshState =
rememberSwipeRefreshState(isRefreshing = appState is MainViewModel.AppState.Fetching)
var isMenuExpanded by remember { mutableStateOf(false) } var isMenuExpanded by remember { mutableStateOf(false) }
val dropdownScreens = remember { listOf(Screen.Settings, Screen.About) } val dropdownScreens = remember { listOf(Screen.Settings, Screen.About) }
@ -69,7 +71,7 @@ fun HomeLayout(
contentDescription = "Navigation" contentDescription = "Navigation"
) )
} }
ManagerDropdownMenu( ManagerDropdownMenu(
expanded = isMenuExpanded, expanded = isMenuExpanded,
onDismissRequest = { onDismissRequest = {
@ -116,7 +118,11 @@ fun HomeLayout(
diskCachePolicy(CachePolicy.ENABLED) diskCachePolicy(CachePolicy.ENABLED)
} }
var showAppInfoDialog by rememberSaveable { mutableStateOf(false) } var showAppInfoDialog by rememberSaveable {
mutableStateOf(
false
)
}
AppCard( AppCard(
appName = app.name, appName = app.name,
@ -124,7 +130,11 @@ fun HomeLayout(
appInstalledVersion = app.installedVersion, appInstalledVersion = app.installedVersion,
appRemoteVersion = app.remoteVersion, appRemoteVersion = app.remoteVersion,
onAppDownloadClick = { onAppDownloadClick = {
onAppInstallPress(app.name, app.versions, app.installationOptions) onAppInstallPress(
app.name,
app.versions,
app.installationOptions
)
}, },
onAppUninstallClick = { /*TODO*/ }, onAppUninstallClick = { /*TODO*/ },
onAppLaunchClick = { /*TODO*/ }, onAppLaunchClick = { /*TODO*/ },
@ -135,7 +145,10 @@ fun HomeLayout(
if (showAppInfoDialog) { if (showAppInfoDialog) {
ManagerDialog( ManagerDialog(
title = managerString(R.string.app_info_title, app.name), title = managerString(
R.string.app_info_title,
app.name
),
onDismissRequest = { showAppInfoDialog = false }, onDismissRequest = { showAppInfoDialog = false },
confirmButton = { confirmButton = {
TextButton(onClick = { TextButton(onClick = {

View file

@ -8,7 +8,10 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowDropDown import androidx.compose.material.icons.rounded.ArrowDropDown
import androidx.compose.material.icons.rounded.Done import androidx.compose.material.icons.rounded.Done
import androidx.compose.material3.* import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -30,7 +33,6 @@ import com.vanced.manager.ui.component.topappbar.ManagerTopAppBar
import com.vanced.manager.ui.resources.managerString import com.vanced.manager.ui.resources.managerString
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.viewmodel.InstallViewModel import com.vanced.manager.ui.viewmodel.InstallViewModel
import org.koin.androidx.compose.getViewModel
@OptIn( @OptIn(
ExperimentalFoundationApi::class, ExperimentalFoundationApi::class,
@ -39,10 +41,9 @@ import org.koin.androidx.compose.getViewModel
@Composable @Composable
fun InstallScreen( fun InstallScreen(
appName: String, appName: String,
appVersions: List<String>? appVersions: List<String>?,
viewModel: InstallViewModel,
) { ) {
val viewModel: InstallViewModel = getViewModel()
var startedProcess by rememberSaveable { mutableStateOf(false) } var startedProcess by rememberSaveable { mutableStateOf(false) }
val logs = viewModel.logs val logs = viewModel.logs

View file

@ -13,19 +13,21 @@ sealed class Screen(
displayName = R.string.app_name displayName = R.string.app_name
) )
object Settings: Screen( object Settings : Screen(
route = "settings", route = "settings",
displayName = R.string.toolbar_settings, displayName = R.string.toolbar_settings,
) )
object About: Screen( object About : Screen(
route = "about", route = "about",
displayName = R.string.toolbar_about, displayName = R.string.toolbar_about,
) )
object Logs : Screen( object Logs : Screen(
route = "logs", route = "logs",
displayName = R.string.toolbar_logs, displayName = R.string.toolbar_logs,
) )
data class InstallPreferences( data class InstallPreferences(
val appName: String, val appName: String,
val appVersions: List<String>?, val appVersions: List<String>?,

View file

@ -83,11 +83,14 @@ class InstallViewModel(
downloader.download(appVersions) { downloadStatus -> downloader.download(appVersions) { downloadStatus ->
when (downloadStatus) { when (downloadStatus) {
is DownloadStatus.File -> log(Log.Info("Downloading ${downloadStatus.fileName}")) is DownloadStatus.File -> log(Log.Info("Downloading ${downloadStatus.fileName}"))
is DownloadStatus.Error -> log(Log.Error( is DownloadStatus.Error -> log(
displayText = downloadStatus.displayError, Log.Error(
stacktrace = downloadStatus.stacktrace displayText = downloadStatus.displayError,
)) stacktrace = downloadStatus.stacktrace
is DownloadStatus.Progress -> status = Status.Progress(downloadStatus.progress / 100) )
)
is DownloadStatus.Progress -> status =
Status.Progress(downloadStatus.progress / 100)
is DownloadStatus.StartInstall -> { is DownloadStatus.StartInstall -> {
log(Log.Success("Successfully downloaded $appName")) log(Log.Success("Successfully downloaded $appName"))
installApp(appName, appVersions) installApp(appName, appVersions)

View file

@ -8,7 +8,6 @@ import com.vanced.manager.core.preferences.holder.musicEnabled
import com.vanced.manager.core.preferences.holder.vancedEnabled import com.vanced.manager.core.preferences.holder.vancedEnabled
import com.vanced.manager.domain.model.App import com.vanced.manager.domain.model.App
import com.vanced.manager.repository.JsonRepository import com.vanced.manager.repository.JsonRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -5,7 +5,6 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.rounded.DeleteForever import androidx.compose.material.icons.rounded.DeleteForever
import androidx.compose.material.icons.rounded.Download import androidx.compose.material.icons.rounded.Download
@ -19,7 +18,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil.compose.ImagePainter import coil.compose.ImagePainter
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.ui.component.button.ManagerIconButton
import com.vanced.manager.ui.component.text.AppVersionText import com.vanced.manager.ui.component.text.AppVersionText
import com.vanced.manager.ui.component.text.ManagerText import com.vanced.manager.ui.component.text.ManagerText

View file

@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier

View file

@ -1,6 +1,9 @@
package com.vanced.manager.ui.widget.layout package com.vanced.manager.ui.widget.layout
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items

View file

@ -2,7 +2,6 @@ package com.vanced.manager.ui.widget.layout
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
@Composable @Composable
fun SettingsCategoryLayout( fun SettingsCategoryLayout(

View file

@ -1,15 +1,6 @@
package com.vanced.manager.ui.widget.screens.settings package com.vanced.manager.ui.widget.screens.settings
import androidx.compose.runtime.* import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import com.vanced.manager.R
import com.vanced.manager.core.preferences.holder.managerAccentColorPref
import com.vanced.manager.ui.component.color.ManagerColorPicker
import com.vanced.manager.ui.component.preference.DialogPreference
import com.vanced.manager.ui.resources.managerString
import com.vanced.manager.ui.theme.defAccentColor
import com.vanced.manager.ui.widget.button.ManagerResetButton
import com.vanced.manager.ui.widget.button.ManagerSaveButton
@Composable @Composable
fun SettingsAccentColorItem() { fun SettingsAccentColorItem() {