From d4076be165a50f26bd041a167cb14c420095fb05 Mon Sep 17 00:00:00 2001 From: shabinder Date: Sun, 26 Sep 2021 03:26:04 +0530 Subject: [PATCH] Compose Updated, Dialog and Windows Exe Not working fix, Icons Added. --- buildSrc/buildSrc/src/main/kotlin/Versions.kt | 6 +- .../common/uikit/utils/GradientScrim.kt | 11 +-- .../shabinder/common/uikit/DesktopDialog.kt | 9 +- .../file_manager/FileManager.kt | 24 +++-- .../analytics/DesktopAnalyticsManager.kt | 2 +- desktop/build.gradle.kts | 2 +- desktop/src/jvmMain/kotlin/Main.kt | 56 +++++------ .../resources/drawable/ic_spotiflyer_logo.xml | 89 ++++++++++++------ .../jvmMain/resources/drawable/spotiflyer.png | Bin 64886 -> 64886 bytes .../metadata/android/en-US/changelogs/25.txt | 6 ++ 10 files changed, 123 insertions(+), 82 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/25.txt diff --git a/buildSrc/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/buildSrc/src/main/kotlin/Versions.kt index c30f6239..b3c3d6c9 100644 --- a/buildSrc/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/buildSrc/src/main/kotlin/Versions.kt @@ -22,9 +22,9 @@ import org.gradle.kotlin.dsl.accessors.runtime.addDependencyTo object Versions { // App's Version (To be bumped at each update) - const val versionName = "3.3.0" + const val versionName = "3.3.1" - const val versionCode = 24 + const val versionCode = 25 // Kotlin const val kotlinVersion = "1.5.21" @@ -122,7 +122,7 @@ object JetBrains { object Compose { // __LATEST_COMPOSE_RELEASE_VERSION__ - private const val VERSION = "1.0.0-alpha2" + private const val VERSION = "1.0.0-alpha3" const val gradlePlugin = "org.jetbrains.compose:compose-gradle-plugin:$VERSION" } } diff --git a/common/compose/src/commonMain/kotlin/com/shabinder/common/uikit/utils/GradientScrim.kt b/common/compose/src/commonMain/kotlin/com/shabinder/common/uikit/utils/GradientScrim.kt index 3d433d5e..94210c21 100644 --- a/common/compose/src/commonMain/kotlin/com/shabinder/common/uikit/utils/GradientScrim.kt +++ b/common/compose/src/commonMain/kotlin/com/shabinder/common/uikit/utils/GradientScrim.kt @@ -16,8 +16,6 @@ package com.shabinder.common.uikit.utils -import android.util.Log -import androidx.compose.animation.core.TweenSpec import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.runtime.getValue @@ -26,7 +24,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.composed -import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color @@ -70,10 +67,10 @@ fun Modifier.verticalGradientScrim( } var height by remember { mutableStateOf(fixedHeight ?: 1f) } val scrimHeight by animateFloatAsState( - // Whenever the target value changes, new animation - // will start to the new target value - targetValue = height, - animationSpec = tween(durationMillis = 1500) + // Whenever the target value changes, new animation + // will start to the new target value + targetValue = height, + animationSpec = tween(durationMillis = 1500) ) val brush = remember(color, numStops, startYPercentage, endYPercentage, scrimHeight) { Brush.verticalGradient( diff --git a/common/compose/src/desktopMain/kotlin/com/shabinder/common/uikit/DesktopDialog.kt b/common/compose/src/desktopMain/kotlin/com/shabinder/common/uikit/DesktopDialog.kt index 09fec911..87176aff 100644 --- a/common/compose/src/desktopMain/kotlin/com/shabinder/common/uikit/DesktopDialog.kt +++ b/common/compose/src/desktopMain/kotlin/com/shabinder/common/uikit/DesktopDialog.kt @@ -3,6 +3,9 @@ package com.shabinder.common.uikit import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.res.loadImageBitmap +import androidx.compose.ui.res.useResource @OptIn(ExperimentalAnimationApi::class) @Composable @@ -12,7 +15,11 @@ actual fun Dialog( content: @Composable () -> Unit ) { AnimatedVisibility(isVisible) { - androidx.compose.ui.window.Dialog(onDismiss) { + androidx.compose.ui.window.Dialog( + onDismiss, + title = "SpotiFlyer", + icon = BitmapPainter(useResource("drawable/spotiflyer.png", ::loadImageBitmap)) + ) { content() } } diff --git a/common/core-components/src/commonMain/kotlin/com.shabinder.common.core_components/file_manager/FileManager.kt b/common/core-components/src/commonMain/kotlin/com.shabinder.common.core_components/file_manager/FileManager.kt index b9cd6a7a..4e3a7dee 100644 --- a/common/core-components/src/commonMain/kotlin/com.shabinder.common.core_components/file_manager/FileManager.kt +++ b/common/core-components/src/commonMain/kotlin/com.shabinder.common.core_components/file_manager/FileManager.kt @@ -54,7 +54,10 @@ interface FileManager { fun createDirectory(dirPath: String) - suspend fun cacheImage(image: Any, path: String) // in Android = ImageBitmap, Desktop = BufferedImage + suspend fun cacheImage( + image: Any, + path: String + ) // in Android = ImageBitmap, Desktop = BufferedImage suspend fun loadImage(url: String, reqWidth: Int = 150, reqHeight: Int = 150): Picture @@ -74,13 +77,15 @@ interface FileManager { * */ fun FileManager.createDirectories() { try { - createDirectory(defaultDir()) - createDirectory(imageCacheDir()) - createDirectory(defaultDir() + "Tracks/") - createDirectory(defaultDir() + "Albums/") - createDirectory(defaultDir() + "Playlists/") - createDirectory(defaultDir() + "YT_Downloads/") - } catch (ignored: Exception) {} + if (defaultDir() != "null") { + createDirectory(defaultDir()) + createDirectory(imageCacheDir()) + createDirectory(defaultDir() + "Tracks/") + createDirectory(defaultDir() + "Albums/") + createDirectory(defaultDir() + "Playlists/") + createDirectory(defaultDir() + "YT_Downloads/") + } + } catch (ignored: Exception) { } } fun FileManager.finalOutputDir( @@ -98,7 +103,8 @@ fun FileManager.finalOutputDir( /*DIR Specific Operation End*/ fun getNameURL(url: String): String { - return url.substring(url.lastIndexOf('/', url.lastIndexOf('/') - 1) + 1, url.length).replace('/', '_') + return url.substring(url.lastIndexOf('/', url.lastIndexOf('/') - 1) + 1, url.length) + .replace('/', '_') } suspend fun downloadFile(url: String): Flow { diff --git a/common/core-components/src/desktopMain/kotlin/com.shabinder.common.core_components/analytics/DesktopAnalyticsManager.kt b/common/core-components/src/desktopMain/kotlin/com.shabinder.common.core_components/analytics/DesktopAnalyticsManager.kt index 06857a13..cd55a60f 100644 --- a/common/core-components/src/desktopMain/kotlin/com.shabinder.common.core_components/analytics/DesktopAnalyticsManager.kt +++ b/common/core-components/src/desktopMain/kotlin/com.shabinder.common.core_components/analytics/DesktopAnalyticsManager.kt @@ -22,7 +22,7 @@ internal class DesktopAnalyticsManager( val config: Config = Config(COUNTLY_CONFIG.SERVER_URL, COUNTLY_CONFIG.APP_KEY).apply { eventsBufferSize = 2 - loggingLevel = LoggingLevel.DEBUG + loggingLevel = LoggingLevel.ERROR setDeviceIdStrategy(DeviceIdStrategy.UUID) enableFeatures(*featuresSet) setRequiresConsent(true) diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index e788c467..742d0e9e 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -83,7 +83,7 @@ compose.desktop { iconFile.set(iconsRoot.resolve("spotiflyer.ico")) // Wondering what the heck is this? See : https://wixtoolset.org/documentation/manual/v3/howtos/general/generate_guids.html // https://www.guidgen.com/ - upgradeUuid = "9f9e966b-7eef-42c7-a49c-5194b17fabd0" + upgradeUuid = "3c4caf0c-ae83-457e-85cc-f8e535fb58e2" menuGroup = packageName } linux { diff --git a/desktop/src/jvmMain/kotlin/Main.kt b/desktop/src/jvmMain/kotlin/Main.kt index 79b77d83..6ef561e8 100644 --- a/desktop/src/jvmMain/kotlin/Main.kt +++ b/desktop/src/jvmMain/kotlin/Main.kt @@ -20,10 +20,11 @@ import androidx.compose.material.Surface import androidx.compose.ui.Modifier import androidx.compose.ui.awt.ComposeWindow import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.BitmapPainter +import androidx.compose.ui.res.loadImageBitmap +import androidx.compose.ui.res.useResource import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Window -import androidx.compose.ui.window.application -import androidx.compose.ui.window.rememberWindowState +import androidx.compose.ui.window.* import com.arkivanov.decompose.ComponentContext import com.arkivanov.decompose.DefaultComponentContext import com.arkivanov.decompose.ExperimentalDecomposeApi @@ -44,6 +45,7 @@ import com.shabinder.common.models.Actions import com.shabinder.common.providers.FetchPlatformQueryResult import com.shabinder.common.root.SpotiFlyerRoot import com.shabinder.common.translations.Strings +import com.shabinder.common.uikit.SpotiFlyerLogo import com.shabinder.common.uikit.configurations.SpotiFlyerColors import com.shabinder.common.uikit.configurations.SpotiFlyerShapes import com.shabinder.common.uikit.configurations.SpotiFlyerTypography @@ -65,40 +67,34 @@ private lateinit var appWindow: ComposeWindow @OptIn(ExperimentalDecomposeApi::class) fun main() { - val lifecycle = LifecycleRegistry() val rootComponent = spotiFlyerRoot(DefaultComponentContext(lifecycle)) - - application { - val windowState = rememberWindowState(width = 450.dp, height = 800.dp) - + val windowState = WindowState(size = WindowSize(450.dp, 800.dp)) + singleWindowApplication( + title = "SpotiFlyer", + state = windowState, + icon = BitmapPainter(useResource("drawable/spotiflyer.png", ::loadImageBitmap)) + ) { LifecycleController(lifecycle, windowState) - Window( - title = "SpotiFlyer", - state = windowState, - onCloseRequest = ::exitApplication + Surface( + modifier = Modifier.fillMaxSize(), + color = Color.Black, + contentColor = colorOffWhite ) { - appWindow = window - Surface( - modifier = Modifier.fillMaxSize(), - color = Color.Black, - contentColor = colorOffWhite + DesktopMaterialTheme( + colors = SpotiFlyerColors, + typography = SpotiFlyerTypography, + shapes = SpotiFlyerShapes ) { - DesktopMaterialTheme( - colors = SpotiFlyerColors, - typography = SpotiFlyerTypography, - shapes = SpotiFlyerShapes - ) { - val root: SpotiFlyerRoot = SpotiFlyerRootContent(rootComponent) - showToast = root.callBacks::showToast + val root: SpotiFlyerRoot = SpotiFlyerRootContent(rootComponent) + showToast = root.callBacks::showToast - // FFmpeg WARNING - try { - FFmpeg.atPath().addArgument("-version").execute() - } catch (e: Exception) { - if (e is JaffreeException) Actions.instance.showPopUpMessage("WARNING!\nFFmpeg not found at path") - } + // FFmpeg WARNING + try { + FFmpeg.atPath().addArgument("-version").execute() + } catch (e: Exception) { + if (e is JaffreeException) Actions.instance.showPopUpMessage("WARNING!\nFFmpeg not found at path") } } } diff --git a/desktop/src/jvmMain/resources/drawable/ic_spotiflyer_logo.xml b/desktop/src/jvmMain/resources/drawable/ic_spotiflyer_logo.xml index bc68c3c7..8712d43c 100644 --- a/desktop/src/jvmMain/resources/drawable/ic_spotiflyer_logo.xml +++ b/desktop/src/jvmMain/resources/drawable/ic_spotiflyer_logo.xml @@ -14,34 +14,63 @@ ~ along with this program. If not, see . --> - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/src/jvmMain/resources/drawable/spotiflyer.png b/desktop/src/jvmMain/resources/drawable/spotiflyer.png index 7dd35724dc5f590604b6b75aa224ab93fb6b1deb..2cd3b96215bbfdcfba01aef9f33fe538c3aeef02 100644 GIT binary patch delta 17828 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