From b52bf0f448a5c9bfebd2fa3edf2cbd9450875156 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Mon, 16 Dec 2024 22:47:44 +0600 Subject: [PATCH] feat(android): home widget support (#2148) * feat: add android home widget support * feat: style widget player and add intent and callbacks on action * feat: responsive and working android home widget * fix(android): models stripping causing it to not work for release apks * chore: ios lockfile update * feat: config for iOS widget * cd: upgrade xcode * cd: reduce xcode version * feat: add a christmas background --- .github/workflows/spotube-release-binary.yml | 6 + .gitignore | 4 +- .vscode/settings.json | 2 +- android/app/build.gradle | 28 +- android/app/proguard-rules.pro | 9 +- android/app/src/main/AndroidManifest.xml | 87 ++- .../spotube/glance/HomePlayerWidget.kt | 216 ++++++ .../glance/HomePlayerWidgetReceiver.kt | 7 + .../spotube/glance/models/AlbumSimple.kt | 40 + .../krtirtho/spotube/glance/models/Artist.kt | 25 + .../krtirtho/spotube/glance/models/Image.kt | 10 + .../krtirtho/spotube/glance/models/Track.kt | 37 + .../glance/widgets/Base64ImageProvider.kt | 14 + .../widgets/FlutterAssetImageProvider.kt | 14 + .../glance/widgets/TrackDetailsView.kt | 78 ++ .../spotube/glance/widgets/TrackProgress.kt | 77 ++ .../res/xml/home_player_widget_config.xml | 7 + android/build.gradle | 2 +- android/settings.gradle | 4 +- assets/backgrounds/xmas-effect.png | Bin 0 -> 180027 bytes .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + ios/HomePlayerWidget/HomePlayerWidget.swift | 86 +++ .../HomePlayerWidgetBundle.swift | 16 + ios/HomePlayerWidget/Info.plist | 11 + ios/HomePlayerWidgetExtension.entitlements | 10 + ios/Podfile.lock | 21 +- ios/Runner.xcodeproj/project.pbxproj | 696 +++++++++++++++++- ios/Runner/Runner.entitlements | 10 + ios/dev.entitlements | 10 + ios/nightly.entitlements | 10 + ios/stable.entitlements | 10 + lib/main.dart | 10 + lib/pages/root/root_app.dart | 3 + lib/provider/glance/glance.dart | 169 +++++ lib/provider/server/router.dart | 4 + lib/provider/server/routes/playback.dart | 21 + pubspec.lock | 12 +- pubspec.yaml | 2 + 41 files changed, 1789 insertions(+), 42 deletions(-) create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidget.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidgetReceiver.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/AlbumSimple.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Artist.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Image.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Track.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/Base64ImageProvider.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/FlutterAssetImageProvider.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackDetailsView.kt create mode 100644 android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackProgress.kt create mode 100644 android/app/src/main/res/xml/home_player_widget_config.xml create mode 100644 assets/backgrounds/xmas-effect.png create mode 100644 ios/HomePlayerWidget/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/HomePlayerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/HomePlayerWidget/Assets.xcassets/Contents.json create mode 100644 ios/HomePlayerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 ios/HomePlayerWidget/HomePlayerWidget.swift create mode 100644 ios/HomePlayerWidget/HomePlayerWidgetBundle.swift create mode 100644 ios/HomePlayerWidget/Info.plist create mode 100644 ios/HomePlayerWidgetExtension.entitlements create mode 100644 ios/Runner/Runner.entitlements create mode 100644 ios/dev.entitlements create mode 100644 ios/nightly.entitlements create mode 100644 ios/stable.entitlements create mode 100644 lib/provider/glance/glance.dart diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index c27a3463..6a1c713f 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -87,6 +87,12 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: stable + + - name: Install Xcode + if: ${{matrix.platform == 'ios'}} + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '16.1' - name: Install ${{matrix.platform}} dependencies run: | diff --git a/.gitignore b/.gitignore index f9bd15f8..97b5c03c 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,6 @@ android/key.properties tm.json # FVM Version Cache -.fvm/ \ No newline at end of file +.fvm/ + +android/build diff --git a/.vscode/settings.json b/.vscode/settings.json index 11fae610..1f47bada 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,5 +27,5 @@ "README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md", "*.dart": "${capture}.g.dart,${capture}.freezed.dart" }, - "dart.flutterSdkPath": ".fvm/flutter_sdk" + "dart.flutterSdkPath": ".fvm/versions/3.27.0" } \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 7c1a6356..74f6efea 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -28,8 +28,10 @@ if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } +def composeVersion = "1.4.8" + android { - namespace "dev.krtirtho.spotube" + namespace "oss.krtirtho.spotube" compileSdkVersion 35 @@ -48,6 +50,14 @@ android { main.java.srcDirs += 'src/main/kotlin' } + buildFeatures { + compose true + } + + composeOptions { + kotlinCompilerExtensionVersion "$composeVersion" // Correlates with org.jetbrains.kotlin.android plugin in settings.gradle + } + defaultConfig { applicationId "oss.krtirtho.spotube" minSdkVersion 24 @@ -65,6 +75,7 @@ android { storePassword keystoreProperties['storePassword'] } } + buildTypes { release { signingConfig signingConfigs.release @@ -98,15 +109,28 @@ android { } } + packagingOptions { + resources.excludes += "DebugProbesKt.bin" + } } flutter { source '../..' } +def glanceVersion = "1.1.1" dependencies { implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' - // other deps so just ignore implementation 'com.android.support:multidex:2.0.1' + + implementation "androidx.glance:glance-appwidget:$glanceVersion" + implementation "androidx.glance:glance-appwidget-preview:$glanceVersion" + implementation "androidx.glance:glance-preview:$glanceVersion" + implementation "androidx.glance:glance-material3:$glanceVersion" + implementation "androidx.glance:glance-material:$glanceVersion" + implementation "androidx.work:work-runtime-ktx:2.8.1" + + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" + implementation 'com.google.code.gson:gson:2.11.0' } \ No newline at end of file diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index 116bc22f..ee867c13 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -1 +1,8 @@ --keep class androidx.lifecycle.DefaultLifecycleObserver \ No newline at end of file +-keep class androidx.lifecycle.DefaultLifecycleObserver + +-keepnames class kotlinx.serialization.** { *; } +-keepnames class oss.krtirtho.spotube.glance.models.** { *; } +-keep @kotlinx.serialization.Serializable class * +-keepclassmembers class ** { + @kotlinx.serialization.* ; +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 78f744c4..8c676896 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,38 +17,36 @@ + android:usesCleartextTraffic="true"> + android:name="io.flutter.embedding.android.EnableImpeller" + android:value="true" /> --> + android:windowSoftInputMode="adjustResize"> + Specifies an Android theme to apply to this Activity as soon as + the Android process has started. This theme is visible to the user + while the Flutter UI initializes. After that, this theme continues + to determine the Window background behind the Flutter UI. + --> + android:resource="@style/NormalTheme" /> + @@ -56,12 +54,13 @@ + + + android:scheme="https" /> @@ -72,23 +71,30 @@ + + + + + - + - @@ -96,11 +102,40 @@ - + + + + + + + + + + + + + + + + + - + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> + \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidget.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidget.kt new file mode 100644 index 00000000..a04a0508 --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidget.kt @@ -0,0 +1,216 @@ +package oss.krtirtho.spotube.glance + +import HomeWidgetGlanceState +import HomeWidgetGlanceStateDefinition +import android.content.Context +import android.graphics.drawable.Icon +import android.net.Uri +import android.util.Log +import androidx.compose.runtime.Composable +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.glance.GlanceId +import androidx.glance.GlanceModifier +import androidx.glance.GlanceTheme +import androidx.glance.Image +import androidx.glance.ImageProvider +import androidx.glance.LocalSize +import androidx.glance.action.ActionParameters +import androidx.glance.action.actionParametersOf +import androidx.glance.action.clickable +import androidx.glance.background +import androidx.glance.appwidget.GlanceAppWidget +import androidx.glance.appwidget.SizeMode +import androidx.glance.appwidget.action.ActionCallback +import androidx.glance.appwidget.action.actionRunCallback +import androidx.glance.appwidget.background +import androidx.glance.appwidget.components.CircleIconButton +import androidx.glance.appwidget.components.Scaffold +import androidx.glance.appwidget.cornerRadius +import androidx.glance.appwidget.provideContent +import androidx.glance.background +import androidx.glance.currentState +import androidx.glance.layout.Alignment +import androidx.glance.layout.Box +import androidx.glance.layout.Column +import androidx.glance.layout.ContentScale +import androidx.glance.layout.Row +import androidx.glance.layout.Spacer +import androidx.glance.layout.fillMaxSize +import androidx.glance.layout.fillMaxWidth +import androidx.glance.layout.padding +import androidx.glance.layout.size +import androidx.glance.preview.ExperimentalGlancePreviewApi +import androidx.glance.preview.Preview +import androidx.glance.state.GlanceStateDefinition +import com.google.gson.Gson +import es.antonborri.home_widget.HomeWidgetBackgroundIntent +import es.antonborri.home_widget.actionStartActivity +import oss.krtirtho.spotube.MainActivity +import oss.krtirtho.spotube.glance.models.Track +import oss.krtirtho.spotube.glance.widgets.FlutterAssetImageProvider +import oss.krtirtho.spotube.glance.widgets.TrackDetailsView +import oss.krtirtho.spotube.glance.widgets.TrackProgress + +val gson = Gson() +val serverAddressKey = ActionParameters.Key("serverAddress") + +class Breakpoints { + companion object { + val SMALL_SQUARE = DpSize(100.dp, 100.dp) + val HORIZONTAL_RECTANGLE = DpSize(250.dp, 100.dp) + val BIG_SQUARE = DpSize(250.dp, 250.dp) + } +} + +class HomePlayerWidget : GlanceAppWidget() { + + override val sizeMode = SizeMode.Responsive( + setOf( + Breakpoints.SMALL_SQUARE, + Breakpoints.HORIZONTAL_RECTANGLE, + Breakpoints.BIG_SQUARE + ) + ) + + override val stateDefinition: GlanceStateDefinition<*>? + get() = HomeWidgetGlanceStateDefinition() + + override suspend fun provideGlance(context: Context, id: GlanceId) { + provideContent { + GlanceContent(context, currentState()) + } + } + + + @OptIn(ExperimentalGlancePreviewApi::class) + @Preview(widthDp = 100, heightDp = 100) + @Composable + private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState) { + val prefs = currentState.preferences + val size = LocalSize.current + + val activeTrackStr = prefs.getString("activeTrack", null) + + val isPlaying = prefs.getBoolean("isPlaying", false) + val playbackServerAddress = prefs.getString("playbackServerAddress", null) ?: "" + + var activeTrack: Track? = null + if (activeTrackStr != null) { + activeTrack = gson.fromJson(activeTrackStr, Track::class.java) + } + + + val playIcon = Icon.createWithResource(context, R.drawable.ic_media_play); + val pauseIcon = Icon.createWithResource(context, R.drawable.ic_media_pause); + val previousIcon = Icon.createWithResource(context, R.drawable.ic_media_previous); + val nextIcon = Icon.createWithResource(context, R.drawable.ic_media_next); + + GlanceTheme { + Box( + modifier = GlanceModifier + .fillMaxSize() + .cornerRadius(8.dp) + .background( + color = GlanceTheme.colors.surface.getColor(context) + ) + .clickable { + actionStartActivity(context) + } + , + ) { + Image( + provider = FlutterAssetImageProvider( + context, + "assets/backgrounds/xmas-effect.png" + ), + contentDescription = "Background", + modifier = GlanceModifier + .fillMaxSize(), + contentScale = ContentScale.Crop + ) + Box( + modifier = GlanceModifier + .background( + color = + GlanceTheme.colors.surface.getColor(context) + .copy(alpha = 0.5f), + ) + .fillMaxSize(), + ) {} + Column( + modifier = GlanceModifier.padding(top = 10.dp, start = 10.dp, end = 10.dp) + ) { + Row(verticalAlignment = Alignment.Vertical.CenterVertically) { + TrackDetailsView(activeTrack) + } + Spacer(modifier = GlanceModifier.size(6.dp)) + if (size != Breakpoints.SMALL_SQUARE) { + TrackProgress(prefs) + } + Spacer(modifier = GlanceModifier.size(6.dp)) + Row( + modifier = GlanceModifier.fillMaxWidth(), + horizontalAlignment = Alignment.Horizontal.CenterHorizontally + ) { + CircleIconButton( + imageProvider = ImageProvider(previousIcon), + contentDescription = "Previous", + onClick = actionRunCallback( + parameters = actionParametersOf(serverAddressKey to playbackServerAddress) + ) + ) + Spacer(modifier = GlanceModifier.size(6.dp)) + CircleIconButton( + imageProvider = + if (isPlaying) ImageProvider(pauseIcon) + else ImageProvider(playIcon), + contentDescription = "Play/Pause", + onClick = actionRunCallback( + parameters = actionParametersOf(serverAddressKey to playbackServerAddress) + ) + ) + Spacer(modifier = GlanceModifier.size(6.dp)) + CircleIconButton( + imageProvider = ImageProvider(nextIcon), + contentDescription = "Previous", + onClick = actionRunCallback( + parameters = actionParametersOf( + serverAddressKey to playbackServerAddress + ) + ) + ) + } + } + } + } + } +} + +class PlayPauseAction : InteractiveAction("toggle-playback") +class NextAction : InteractiveAction("next") +class PreviousAction : InteractiveAction("previous") + + +abstract class InteractiveAction(val command: String) : ActionCallback { + override suspend fun onAction( + context: Context, + glanceId: GlanceId, + parameters: ActionParameters + ) { + val serverAddress = parameters[serverAddressKey] ?: "" + + Log.d("HomePlayerWidget", "Sending command $command to $serverAddress") + + if (serverAddress == null || serverAddress.isEmpty()) { + return + } + + + val backgroundIntent = HomeWidgetBackgroundIntent.getBroadcast( + context, + Uri.parse("spotube://playback/$command?serverAddress=$serverAddress") + ) + backgroundIntent.send() + } +} diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidgetReceiver.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidgetReceiver.kt new file mode 100644 index 00000000..2d23c64f --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/HomePlayerWidgetReceiver.kt @@ -0,0 +1,7 @@ +package oss.krtirtho.spotube.glance + +import HomeWidgetGlanceWidgetReceiver + +class HomePlayerWidgetReceiver : HomeWidgetGlanceWidgetReceiver() { + override val glanceAppWidget = HomePlayerWidget() +} diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/AlbumSimple.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/AlbumSimple.kt new file mode 100644 index 00000000..4edd69f6 --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/AlbumSimple.kt @@ -0,0 +1,40 @@ +package oss.krtirtho.spotube.glance.models + +import com.google.gson.annotations.SerializedName +import kotlinx.serialization.Serializable + +@Serializable +data class AlbumSimple( + @SerializedName("album_type") + val albumType: AlbumType?, + + @SerializedName("available_markets") + val availableMarkets: List?, + + val href: String?, + val id: String?, + val images: List?, + val name: String?, + + @SerializedName("release_date") + val releaseDate: String?, + + @SerializedName("release_date_precision") + val releaseDatePrecision: DatePrecision?, + + val type: String?, + val uri: String?, +) + +@Serializable +enum class AlbumType { + album, + single, + compilation +} + +enum class DatePrecision { + year, + month, + day +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Artist.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Artist.kt new file mode 100644 index 00000000..ef43ecc8 --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Artist.kt @@ -0,0 +1,25 @@ +package oss.krtirtho.spotube.glance.models + +import com.google.gson.annotations.SerializedName +import kotlinx.serialization.Serializable + +@Serializable +data class Artist( + val href: String?, + val id: String?, + val name: String?, + val type: String?, + val uri: String?, + + val followers: Followers?, + val genres: List?, + val images: List?, + + @SerializedName("popularity") + val popularity: Int? +) + +@Serializable +data class Followers( + val total: Int? +) diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Image.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Image.kt new file mode 100644 index 00000000..de7d5521 --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Image.kt @@ -0,0 +1,10 @@ +package oss.krtirtho.spotube.glance.models + +import kotlinx.serialization.Serializable + +@Serializable +data class Image( + val height: Int?, + val width: Int?, + val path: String, +) \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Track.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Track.kt new file mode 100644 index 00000000..717b790f --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/models/Track.kt @@ -0,0 +1,37 @@ +package oss.krtirtho.spotube.glance.models + +import com.google.gson.annotations.SerializedName +import kotlinx.serialization.Serializable +import kotlin.time.Duration.Companion.milliseconds + +@Serializable +data class Track( + val album: AlbumSimple?, val artists: List?, + + @SerializedName("available_markets") val availableMarkets: List?, + + @SerializedName("disc_number") val discNumber: Int?, + + @SerializedName("duration_ms") val durationMs: Int, + + val explicit: Boolean?, val href: String?, val id: String?, + + @SerializedName("is_playable") val isPlayable: Boolean?, + + val name: String?, + + @SerializedName("popularity") val popularity: Int?, + + @SerializedName("preview_url") val previewUrl: String?, + + @SerializedName("track_number") val trackNumber: Int?, + + val type: String?, val uri: String? +) { + val duration: kotlin.time.Duration + get() = durationMs.toLong().milliseconds +} + +enum class Market { + AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW, +} diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/Base64ImageProvider.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/Base64ImageProvider.kt new file mode 100644 index 00000000..79339cea --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/Base64ImageProvider.kt @@ -0,0 +1,14 @@ +package oss.krtirtho.spotube.glance.widgets + +import android.graphics.BitmapFactory +import android.util.Base64 +import androidx.glance.ImageProvider + +@Suppress("FunctionName") +fun Base64ImageProvider(base64: String): ImageProvider { + var bytes = Base64.decode(base64, Base64.DEFAULT); + + var bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size); + + return ImageProvider(bitmap) +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/FlutterAssetImageProvider.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/FlutterAssetImageProvider.kt new file mode 100644 index 00000000..ad51ca3c --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/FlutterAssetImageProvider.kt @@ -0,0 +1,14 @@ +package oss.krtirtho.spotube.glance.widgets + +import android.content.Context +import android.graphics.BitmapFactory +import androidx.glance.ImageProvider + +@Suppress("FunctionName") +fun FlutterAssetImageProvider(context: Context, path: String): ImageProvider { + var inputStream = context.assets.open("flutter_assets/$path") + + return ImageProvider( + BitmapFactory.decodeStream(inputStream) + ) +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackDetailsView.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackDetailsView.kt new file mode 100644 index 00000000..fdfe8e4b --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackDetailsView.kt @@ -0,0 +1,78 @@ +package oss.krtirtho.spotube.glance.widgets + +import android.graphics.BitmapFactory +import android.net.Uri +import android.util.Log +import androidx.compose.runtime.Composable +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.glance.GlanceModifier +import androidx.glance.GlanceTheme +import androidx.glance.Image +import androidx.glance.ImageProvider +import androidx.glance.LocalContext +import androidx.glance.LocalSize +import androidx.glance.appwidget.cornerRadius +import androidx.glance.layout.Alignment +import androidx.glance.layout.Row +import androidx.glance.layout.Column +import androidx.glance.layout.ContentScale +import androidx.glance.layout.Spacer +import androidx.glance.layout.size +import androidx.glance.text.FontWeight +import androidx.glance.text.Text +import androidx.glance.text.TextStyle +import oss.krtirtho.spotube.glance.Breakpoints +import oss.krtirtho.spotube.glance.models.Track + +@Composable +fun TrackDetailsView(activeTrack: Track?) { + val context = LocalContext.current + + val size = LocalSize.current + + val artistStr = activeTrack?.artists?.map { it.name }?.joinToString(", ") ?: "" + val imgLocalPath = activeTrack?.album?.images?.get(0)?.path; + val title = activeTrack?.name ?: "" + + + Image( + provider = + if (imgLocalPath == null) + ImageProvider( + BitmapFactory.decodeResource( + context.resources, + android.R.drawable.ic_delete + ) + ) + else ImageProvider(BitmapFactory.decodeFile(imgLocalPath)), + contentDescription = "Album Art", + modifier = GlanceModifier.cornerRadius(8.dp) + .size( + if (size.height < 200.dp) 50.dp + else 100.dp + ), + contentScale = ContentScale.Fit + ) + Spacer(modifier = GlanceModifier.size(6.dp)) + Column { + Text( + text = title, + style = TextStyle( + fontSize = 16.sp, + fontWeight = FontWeight.Bold, + color = GlanceTheme.colors.onBackground + ), + ) + if (size != Breakpoints.SMALL_SQUARE) { + Spacer(modifier = GlanceModifier.size(6.dp)) + Text( + text = artistStr, + style = TextStyle( + fontSize = 14.sp, + color = GlanceTheme.colors.onBackground + ), + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackProgress.kt b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackProgress.kt new file mode 100644 index 00000000..b54059b1 --- /dev/null +++ b/android/app/src/main/kotlin/oss/krtirtho/spotube/glance/widgets/TrackProgress.kt @@ -0,0 +1,77 @@ +package oss.krtirtho.spotube.glance.widgets + +import android.content.SharedPreferences +import androidx.compose.runtime.Composable +import androidx.compose.ui.unit.dp +import androidx.glance.GlanceModifier +import androidx.glance.GlanceTheme +import androidx.glance.LocalSize +import androidx.glance.appwidget.LinearProgressIndicator +import androidx.glance.layout.Column +import androidx.glance.layout.Row +import androidx.glance.layout.Spacer +import androidx.glance.layout.fillMaxWidth +import androidx.glance.layout.size +import androidx.glance.text.Text +import androidx.glance.text.TextStyle +import kotlin.math.max +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds +import oss.krtirtho.spotube.glance.Breakpoints + +fun Duration.format(): String { + return this.toComponents { hour, minutes, seconds, nanoseconds -> + var paddedSeconds = seconds.toString().padStart(2, '0') + var paddedMinutes = minutes.toString().padStart(2, '0') + var paddedHour = hour.toString().padStart(2, '0') + if (hour == 0L) { + "$paddedMinutes:$paddedSeconds" + } else { + "$paddedHour:$paddedMinutes:$paddedSeconds" + } + } +} + +@Composable +fun TrackProgress(prefs: SharedPreferences) { + val size = LocalSize.current + val position = prefs.getInt("position", 0).seconds + var duration = prefs.getInt("duration", 0).seconds + + var progress = position.inWholeSeconds.toFloat() / max(duration.inWholeSeconds.toFloat(), 1.0f) + + var textStyle = + TextStyle( + color = GlanceTheme.colors.onBackground, + ) + + if (size == Breakpoints.HORIZONTAL_RECTANGLE) { + Row(modifier = GlanceModifier.fillMaxWidth()) { + Text(text = position.format(), style = textStyle) + Spacer(modifier = GlanceModifier.size(6.dp)) + LinearProgressIndicator( + progress = progress, + modifier = GlanceModifier.defaultWeight(), + color = GlanceTheme.colors.primary, + backgroundColor = GlanceTheme.colors.primaryContainer, + ) + Spacer(modifier = GlanceModifier.size(6.dp)) + Text(text = duration.format(), style = textStyle) + } + } else { + Column(modifier = GlanceModifier.fillMaxWidth()) { + LinearProgressIndicator( + progress = progress, + modifier = GlanceModifier.fillMaxWidth(), + color = GlanceTheme.colors.primary, + backgroundColor = GlanceTheme.colors.primaryContainer, + ) + Spacer(modifier = GlanceModifier.size(6.dp)) + Row(modifier = GlanceModifier.fillMaxWidth()) { + Text(text = position.format(), style = textStyle) + Spacer(modifier = GlanceModifier.defaultWeight()) + Text(text = duration.format(), style = textStyle) + } + } + } +} diff --git a/android/app/src/main/res/xml/home_player_widget_config.xml b/android/app/src/main/res/xml/home_player_widget_config.xml new file mode 100644 index 00000000..c8ec7048 --- /dev/null +++ b/android/app/src/main/res/xml/home_player_widget_config.xml @@ -0,0 +1,7 @@ + + diff --git a/android/build.gradle b/android/build.gradle index bc157bd1..8f31e8ca 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -15,4 +15,4 @@ subprojects { tasks.register("clean", Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/android/settings.gradle b/android/settings.gradle index a1961f52..1e8ffbe3 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.7.0" apply false + id "com.android.application" version '8.7.0' apply false id "org.jetbrains.kotlin.android" version "1.8.22" apply false } -include ":app" \ No newline at end of file +include ':app' \ No newline at end of file diff --git a/assets/backgrounds/xmas-effect.png b/assets/backgrounds/xmas-effect.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c8eeef4717f5fb5893e63fa89910bbc7d7fc46 GIT binary patch literal 180027 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%0D9z^ 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

3!>|&$u@TDB~yU&fbTYW{1 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 SimpleEntry { + SimpleEntry(date: Date(), emoji: "😀") + } + + func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { + let entry = SimpleEntry(date: Date(), emoji: "😀") + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) { + var entries: [SimpleEntry] = [] + + // Generate a timeline consisting of five entries an hour apart, starting from the current date. + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = SimpleEntry(date: entryDate, emoji: "😀") + entries.append(entry) + } + + let timeline = Timeline(entries: entries, policy: .atEnd) + completion(timeline) + } + +// func relevances() async -> WidgetRelevances { +// // Generate a list containing the contexts this widget is relevant in. +// } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let emoji: String +} + +struct HomePlayerWidgetEntryView : View { + var entry: Provider.Entry + + var body: some View { + VStack { + Text("Time:") + Text(entry.date, style: .time) + + Text("Emoji:") + Text(entry.emoji) + } + } +} + +struct HomePlayerWidget: Widget { + let kind: String = "HomePlayerWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: Provider()) { entry in + if #available(iOS 17.0, *) { + HomePlayerWidgetEntryView(entry: entry) + .containerBackground(.fill.tertiary, for: .widget) + } else { + HomePlayerWidgetEntryView(entry: entry) + .padding() + .background() + } + } + .configurationDisplayName("My Widget") + .description("This is an example widget.") + } +} + +#Preview(as: .systemSmall) { + HomePlayerWidget() +} timeline: { + SimpleEntry(date: .now, emoji: "😀") + SimpleEntry(date: .now, emoji: "🤩") +} diff --git a/ios/HomePlayerWidget/HomePlayerWidgetBundle.swift b/ios/HomePlayerWidget/HomePlayerWidgetBundle.swift new file mode 100644 index 00000000..68158b53 --- /dev/null +++ b/ios/HomePlayerWidget/HomePlayerWidgetBundle.swift @@ -0,0 +1,16 @@ +// +// HomePlayerWidgetBundle.swift +// HomePlayerWidget +// +// Created by Kingkor Roy Tirtho on 15/12/24. +// + +import WidgetKit +import SwiftUI + +@main +struct HomePlayerWidgetBundle: WidgetBundle { + var body: some Widget { + HomePlayerWidget() + } +} diff --git a/ios/HomePlayerWidget/Info.plist b/ios/HomePlayerWidget/Info.plist new file mode 100644 index 00000000..0f118fb7 --- /dev/null +++ b/ios/HomePlayerWidget/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/ios/HomePlayerWidgetExtension.entitlements b/ios/HomePlayerWidgetExtension.entitlements new file mode 100644 index 00000000..58165678 --- /dev/null +++ b/ios/HomePlayerWidgetExtension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.spotube_home_player_widget + + + diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 104ff767..31ffe436 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -64,6 +64,8 @@ PODS: - Flutter - flutter_sharing_intent (0.0.1): - Flutter + - home_widget (0.0.1): + - Flutter - image_picker_ios (0.0.1): - Flutter - integration_test (0.0.1): @@ -106,12 +108,15 @@ PODS: - sqlite3/common - sqlite3_flutter_libs (0.0.1): - Flutter - - sqlite3 (~> 3.47.0) + - FlutterMacOS + - sqlite3 (~> 3.47.1) - sqlite3/dbstatvtab - sqlite3/fts5 - sqlite3/perf-threadsafe - sqlite3/rtree - SwiftyGif (5.4.4) + - system_theme (0.0.1): + - Flutter - url_launcher_ios (0.0.1): - Flutter @@ -130,6 +135,7 @@ DEPENDENCIES: - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`) + - home_widget (from `.symlinks/plugins/home_widget/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - integration_test (from `.symlinks/plugins/integration_test/ios`) - media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`) @@ -141,7 +147,8 @@ DEPENDENCIES: - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`) + - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`) + - system_theme (from `.symlinks/plugins/system_theme/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) SPEC REPOS: @@ -182,6 +189,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_secure_storage/ios" flutter_sharing_intent: :path: ".symlinks/plugins/flutter_sharing_intent/ios" + home_widget: + :path: ".symlinks/plugins/home_widget/ios" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" integration_test: @@ -205,7 +214,9 @@ EXTERNAL SOURCES: sqflite_darwin: :path: ".symlinks/plugins/sqflite_darwin/darwin" sqlite3_flutter_libs: - :path: ".symlinks/plugins/sqlite3_flutter_libs/ios" + :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin" + system_theme: + :path: ".symlinks/plugins/system_theme/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" @@ -226,6 +237,7 @@ SPEC CHECKSUMS: flutter_native_splash: e8a1e01082d97a8099d973f919f57904c925008a flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 flutter_sharing_intent: e35380d0e1501d7111dbb7e46d5ac6339da6da98 + home_widget: 0434835a4c9a75704264feff6be17ea40e0f0d57 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 media_kit_libs_ios_audio: 8f39d96a9c630685dfb844c289bd1d114c486fb3 @@ -240,8 +252,9 @@ SPEC CHECKSUMS: shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d sqlite3: 1e522f0938463e44b7faf50393b40bdc1e1e456d - sqlite3_flutter_libs: b55ef23cfafea5318ae5081e0bf3fbbce8417c94 + sqlite3_flutter_libs: 1b4e98da20ebd4e9b1240269b78cdcf492dbe9f3 SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f + system_theme: bfc1b0913d08f38d8c6bbe94b202a58df599d9f7 url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe PODFILE CHECKSUM: 0659b64ac6e9e96b61d8550decffa8bff51a957e diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 34793f68..63871a3d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -36,8 +36,21 @@ B536BDD62B4060B3009B3CE4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; B536BDD72B4060B3009B3CE4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; C36A05AD330BBFAED75A62D5 /* Pods_dev.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4238A4985255EC9F93067739 /* Pods_dev.framework */; }; + E612EC3B2D0F07A90022720C /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E612EC3A2D0F07A90022720C /* WidgetKit.framework */; }; + E612EC3D2D0F07A90022720C /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E612EC3C2D0F07A90022720C /* SwiftUI.framework */; }; + E612EC482D0F07AD0022720C /* HomePlayerWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E612EC392D0F07A90022720C /* HomePlayerWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + E612EC462D0F07AD0022720C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = E612EC382D0F07A80022720C; + remoteInfo = HomePlayerWidgetExtension; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -79,6 +92,17 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + E612EC492D0F07AD0022720C /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E612EC482D0F07AD0022720C /* HomePlayerWidgetExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -148,6 +172,14 @@ D32BAE0F55672DD7669755B8 /* Pods-Runner.debug-stable.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-stable.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-stable.xcconfig"; sourceTree = ""; }; D9A69004587D01A7C68666CF /* Pods-dev.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dev.release.xcconfig"; path = "Target Support Files/Pods-dev/Pods-dev.release.xcconfig"; sourceTree = ""; }; E0EAB4380EE7C7EA7A350B6F /* Pods-stable.release-nightly.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-stable.release-nightly.xcconfig"; path = "Target Support Files/Pods-stable/Pods-stable.release-nightly.xcconfig"; sourceTree = ""; }; + E612EC392D0F07A90022720C /* HomePlayerWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = HomePlayerWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E612EC3A2D0F07A90022720C /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + E612EC3C2D0F07A90022720C /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + E6F17DB92D0F34E500BC2FA2 /* HomePlayerWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HomePlayerWidgetExtension.entitlements; sourceTree = ""; }; + E6F17DBA2D0F352C00BC2FA2 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + E6F17DBB2D0F356700BC2FA2 /* stable.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = stable.entitlements; sourceTree = ""; }; + E6F17DBC2D0F357500BC2FA2 /* dev.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = dev.entitlements; sourceTree = ""; }; + E6F17DBD2D0F357F00BC2FA2 /* nightly.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = nightly.entitlements; sourceTree = ""; }; E81F11471FD7D807286E33D6 /* Pods-dev.debug-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dev.debug-dev.xcconfig"; path = "Target Support Files/Pods-dev/Pods-dev.debug-dev.xcconfig"; sourceTree = ""; }; EB7783C1029CEC13F4B05D36 /* Pods-nightly.debug-nightly.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-nightly.debug-nightly.xcconfig"; path = "Target Support Files/Pods-nightly/Pods-nightly.debug-nightly.xcconfig"; sourceTree = ""; }; EBBED0A8DE0D0E230CD03613 /* Pods-dev.release-stable.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dev.release-stable.xcconfig"; path = "Target Support Files/Pods-dev/Pods-dev.release-stable.xcconfig"; sourceTree = ""; }; @@ -155,6 +187,20 @@ F7E9EBDD27997A73A4D38EE1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + E612EC562D0F07AD0022720C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = E612EC382D0F07A80022720C /* HomePlayerWidgetExtension */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + E612EC3E2D0F07A90022720C /* HomePlayerWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E612EC562D0F07AD0022720C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = HomePlayerWidget; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -189,6 +235,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E612EC362D0F07A80022720C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E612EC3D2D0F07A90022720C /* SwiftUI.framework in Frameworks */, + E612EC3B2D0F07A90022720C /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -199,6 +254,8 @@ 4238A4985255EC9F93067739 /* Pods_dev.framework */, BAC36FC304DBD4E8A8C00694 /* Pods_nightly.framework */, B5F91A319C771EEC978B238A /* Pods_stable.framework */, + E612EC3A2D0F07A90022720C /* WidgetKit.framework */, + E612EC3C2D0F07A90022720C /* SwiftUI.framework */, ); name = Frameworks; sourceTree = ""; @@ -272,8 +329,13 @@ 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( + E6F17DBD2D0F357F00BC2FA2 /* nightly.entitlements */, + E6F17DBC2D0F357500BC2FA2 /* dev.entitlements */, + E6F17DBB2D0F356700BC2FA2 /* stable.entitlements */, + E6F17DB92D0F34E500BC2FA2 /* HomePlayerWidgetExtension.entitlements */, 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, + E612EC3E2D0F07A90022720C /* HomePlayerWidget */, 97C146EF1CF9000F007C117D /* Products */, 67CBFE209DF24C94A9837AD5 /* Pods */, 0E0B839C4E103F896209E822 /* Frameworks */, @@ -290,6 +352,7 @@ B536BDA02B405DB1009B3CE4 /* stable.app */, B536BDBF2B405FDE009B3CE4 /* dev.app */, B536BDE42B4060B3009B3CE4 /* nightly.app */, + E612EC392D0F07A90022720C /* HomePlayerWidgetExtension.appex */, ); name = Products; sourceTree = ""; @@ -297,6 +360,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + E6F17DBA2D0F352C00BC2FA2 /* Runner.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -325,10 +389,13 @@ 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 6E9FEF583EA597C8B76255B2 /* [CP] Embed Pods Frameworks */, 46F6EB27C31C41D86428A28B /* [CP] Copy Pods Resources */, + E612EC492D0F07AD0022720C /* Embed Foundation Extensions */, + E63F9CBC2D10709D00CD9E72 /* ShellScript */, ); buildRules = ( ); dependencies = ( + E612EC472D0F07AD0022720C /* PBXTargetDependency */, ); name = Runner; productName = Runner; @@ -404,12 +471,35 @@ productReference = B536BDE42B4060B3009B3CE4 /* nightly.app */; productType = "com.apple.product-type.application"; }; + E612EC382D0F07A80022720C /* HomePlayerWidgetExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E612EC572D0F07AD0022720C /* Build configuration list for PBXNativeTarget "HomePlayerWidgetExtension" */; + buildPhases = ( + E612EC352D0F07A80022720C /* Sources */, + E612EC362D0F07A80022720C /* Frameworks */, + E612EC372D0F07A80022720C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + E612EC3E2D0F07A90022720C /* HomePlayerWidget */, + ); + name = HomePlayerWidgetExtension; + packageProductDependencies = ( + ); + productName = HomePlayerWidgetExtension; + productReference = E612EC392D0F07A90022720C /* HomePlayerWidgetExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1620; LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { @@ -417,6 +507,9 @@ CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; }; + E612EC382D0F07A80022720C = { + CreatedOnToolsVersion = 16.2; + }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; @@ -436,6 +529,7 @@ B536BD8C2B405DB1009B3CE4 /* stable */, B536BDAB2B405FDE009B3CE4 /* dev */, B536BDCD2B4060B3009B3CE4 /* nightly */, + E612EC382D0F07A80022720C /* HomePlayerWidgetExtension */, ); }; /* End PBXProject section */ @@ -485,6 +579,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E612EC372D0F07A80022720C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -685,7 +786,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; A6D446F111DE4C4A202BE7F7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; @@ -814,6 +915,23 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-nightly/Pods-nightly-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + E63F9CBC2D10709D00CD9E72 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a sgeneratedPath=\"$SRCROOT/Flutter/Generated.xcconfig\"\n\n# Read and trim versionNumber and buildNumber\nversionNumber=$(grep FLUTTER_BUILD_NAME \"$generatedPath\" | cut -d '=' -f2 | xargs)\nbuildNumber=$(grep FLUTTER_BUILD_NUMBER \"$generatedPath\" | cut -d '=' -f2 | xargs)\n\ninfoPlistPath=\"$SRCROOT/HomePlayerWidget/Info.plist\"\n\n# Check and add CFBundleVersion if it does not exist\n/usr/libexec/PlistBuddy -c \"Print :CFBundleVersion\" \"$infoPlistPath\" 2>/dev/null\nif [ $? != 0 ]; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleVersion string $buildNumber\" \"$infoPlistPath\"\nelse\n /usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"$infoPlistPath\"\nfi\n\n# Check and add CFBundleShortVersionString if it does not exist\n/usr/libexec/PlistBuddy -c \"Print :CFBundleShortVersionString\" \"$infoPlistPath\" 2>/dev/null\nif [ $? != 0 ]; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleShortVersionString string $versionNumber\" \"$infoPlistPath\"\nelse\n /usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString $versionNumber\" \"$infoPlistPath\"\nfi\n\ncript file from your workspace to insert its path.\n"; + }; F0C8BA10A27CA77E18F842E7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -875,8 +993,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + E612EC352D0F07A80022720C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + E612EC472D0F07AD0022720C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E612EC382D0F07A80022720C /* HomePlayerWidgetExtension */; + targetProxy = E612EC462D0F07AD0022720C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -953,6 +1086,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1082,6 +1216,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1105,6 +1240,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1127,6 +1263,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1150,6 +1287,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1172,6 +1310,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1249,6 +1388,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1272,6 +1412,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1347,6 +1488,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1369,6 +1511,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1441,6 +1584,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1463,6 +1607,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1485,6 +1630,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1508,6 +1654,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1531,6 +1678,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1553,6 +1701,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1575,6 +1724,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1597,6 +1747,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1674,6 +1825,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1697,6 +1849,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1720,6 +1873,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1795,6 +1949,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1817,6 +1972,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1839,6 +1995,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1911,6 +2068,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1933,6 +2091,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1955,6 +2114,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -1977,6 +2137,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2000,6 +2161,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2023,6 +2185,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2046,6 +2209,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2068,6 +2232,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2090,6 +2255,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2112,6 +2278,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2134,6 +2301,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2156,6 +2324,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2233,6 +2402,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2256,6 +2426,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2279,6 +2450,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2302,6 +2474,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2377,6 +2550,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2399,6 +2573,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2421,6 +2596,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2443,6 +2619,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2515,6 +2692,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2537,6 +2715,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = stable.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2559,6 +2738,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = dev.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2581,6 +2761,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-nightly"; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = nightly.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 88NVGSJ5N3; ENABLE_BITCODE = NO; @@ -2597,6 +2778,498 @@ }; name = "Profile-nightly"; }; + E612EC4A2D0F07AD0022720C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E612EC4B2D0F07AD0022720C /* Debug-nightly */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-nightly"; + }; + E612EC4C2D0F07AD0022720C /* Debug-dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-dev"; + }; + E612EC4D2D0F07AD0022720C /* Debug-stable */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-stable"; + }; + E612EC4E2D0F07AD0022720C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E612EC4F2D0F07AD0022720C /* Release-nightly */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-nightly"; + }; + E612EC502D0F07AD0022720C /* Release-dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-dev"; + }; + E612EC512D0F07AD0022720C /* Release-stable */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-stable"; + }; + E612EC522D0F07AD0022720C /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Profile; + }; + E612EC532D0F07AD0022720C /* Profile-nightly */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Profile-nightly"; + }; + E612EC542D0F07AD0022720C /* Profile-dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Profile-dev"; + }; + E612EC552D0F07AD0022720C /* Profile-stable */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = HomePlayerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 88NVGSJ5N3; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomePlayerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = HomePlayerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 18.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = oss.krtirtho.spotube.HomePlayerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Profile-stable"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2695,6 +3368,25 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + E612EC572D0F07AD0022720C /* Build configuration list for PBXNativeTarget "HomePlayerWidgetExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E612EC4A2D0F07AD0022720C /* Debug */, + E612EC4B2D0F07AD0022720C /* Debug-nightly */, + E612EC4C2D0F07AD0022720C /* Debug-dev */, + E612EC4D2D0F07AD0022720C /* Debug-stable */, + E612EC4E2D0F07AD0022720C /* Release */, + E612EC4F2D0F07AD0022720C /* Release-nightly */, + E612EC502D0F07AD0022720C /* Release-dev */, + E612EC512D0F07AD0022720C /* Release-stable */, + E612EC522D0F07AD0022720C /* Profile */, + E612EC532D0F07AD0022720C /* Profile-nightly */, + E612EC542D0F07AD0022720C /* Profile-dev */, + E612EC552D0F07AD0022720C /* Profile-stable */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..58165678 --- /dev/null +++ b/ios/Runner/Runner.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.spotube_home_player_widget + + + diff --git a/ios/dev.entitlements b/ios/dev.entitlements new file mode 100644 index 00000000..58165678 --- /dev/null +++ b/ios/dev.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.spotube_home_player_widget + + + diff --git a/ios/nightly.entitlements b/ios/nightly.entitlements new file mode 100644 index 00000000..58165678 --- /dev/null +++ b/ios/nightly.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.spotube_home_player_widget + + + diff --git a/ios/stable.entitlements b/ios/stable.entitlements new file mode 100644 index 00000000..58165678 --- /dev/null +++ b/ios/stable.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.spotube_home_player_widget + + + diff --git a/lib/main.dart b/lib/main.dart index f13991e2..fa567129 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,6 +9,7 @@ import 'package:flutter_discord_rpc/flutter_discord_rpc.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hive/hive.dart'; +import 'package:home_widget/home_widget.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:local_notifier/local_notifier.dart'; import 'package:media_kit/media_kit.dart'; @@ -27,6 +28,7 @@ import 'package:spotube/hooks/configurators/use_has_touch.dart'; import 'package:spotube/models/database/database.dart'; import 'package:spotube/provider/audio_player/audio_player_streams.dart'; import 'package:spotube/provider/database/database.dart'; +import 'package:spotube/provider/glance/glance.dart'; import 'package:spotube/provider/server/bonsoir.dart'; import 'package:spotube/provider/server/server.dart'; import 'package:spotube/provider/tray_manager/tray_manager.dart'; @@ -115,6 +117,10 @@ Future main(List rawArgs) async { await WindowManagerTools.initialize(); } + if (kIsIOS) { + HomeWidget.setAppGroupId("group.spotube_home_player_widget"); + } + runApp( ProviderScope( overrides: [ @@ -161,6 +167,10 @@ class Spotube extends HookConsumerWidget { useEffect(() { FlutterNativeSplash.remove(); + if (kIsMobile) { + HomeWidget.registerInteractivityCallback(glanceBackgroundCallback); + } + return () { /// For enabling hot reload for audio player if (!kDebugMode) return; diff --git a/lib/pages/root/root_app.dart b/lib/pages/root/root_app.dart index 0274de00..2a6c36f0 100644 --- a/lib/pages/root/root_app.dart +++ b/lib/pages/root/root_app.dart @@ -18,6 +18,7 @@ import 'package:spotube/hooks/configurators/use_endless_playback.dart'; import 'package:spotube/pages/home/home.dart'; import 'package:spotube/provider/download_manager_provider.dart'; import 'package:spotube/provider/audio_player/audio_player.dart'; +import 'package:spotube/provider/glance/glance.dart'; import 'package:spotube/provider/server/routes/connect.dart'; import 'package:spotube/services/connectivity_adapter.dart'; import 'package:spotube/utils/platform.dart'; @@ -39,6 +40,8 @@ class RootApp extends HookConsumerWidget { final scaffoldMessenger = ScaffoldMessenger.of(context); final connectRoutes = ref.watch(serverConnectRoutesProvider); + ref.listen(glanceProvider, (_, __) {}); + useEffect(() { WidgetsBinding.instance.addPostFrameCallback((_) async { ServiceUtils.checkForUpdates(context, ref); diff --git a/lib/provider/glance/glance.dart b/lib/provider/glance/glance.dart new file mode 100644 index 00000000..22faa13f --- /dev/null +++ b/lib/provider/glance/glance.dart @@ -0,0 +1,169 @@ +import 'dart:convert'; + +import 'package:flutter_cache_manager/flutter_cache_manager.dart'; +import 'package:home_widget/home_widget.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:http/http.dart'; +import 'package:logger/logger.dart'; +import 'package:spotify/spotify.dart'; +import 'package:spotube/provider/audio_player/audio_player.dart'; +import 'package:spotube/provider/server/server.dart'; +import 'package:spotube/services/audio_player/audio_player.dart'; +import 'package:spotube/services/logger/logger.dart'; +import 'package:spotube/utils/platform.dart'; + +@pragma("vm:entry-point") +Future glanceBackgroundCallback(Uri? data) async { + final logger = Logger(); + try { + if (data == null || + data.host != "playback" || + data.pathSegments.isEmpty || + data.queryParameters["serverAddress"] == null) { + return; + } + + final command = data.pathSegments.first; + final res = await get( + Uri.parse( + "http://${data.queryParameters["serverAddress"]}/playback/$command", + ), + ); + + if (res.statusCode != 200) { + throw Exception("Failed to execute command: $command\nBody: ${res.body}"); + } + } catch (e) { + logger.e("[GlanceBackgroundCallback] $e"); + } +} + +Future _saveWidgetData(String key, T? value) async { + try { + if (!kIsMobile) return null; + + return await HomeWidget.saveWidgetData(key, value); + } catch (e, stack) { + AppLogger.reportError(e, stack); + return null; + } +} + +Future _updateWidget() async { + try { + if (!kIsMobile) return; + + if (kIsAndroid) { + await HomeWidget.updateWidget( + androidName: 'HomePlayerWidgetReceiver', + qualifiedAndroidName: + 'oss.krtirtho.spotube.glance.HomePlayerWidgetReceiver', + ); + } + if (kIsIOS) { + await HomeWidget.updateWidget( + name: 'HomePlayerWidget', + iOSName: 'HomePlayerWidget', + ); + } + } on Exception catch (e, stack) { + AppLogger.reportError(e, stack); + } +} + +Future _sendActiveTrack(Track? track) async { + if (track == null) { + await _saveWidgetData("activeTrack", null); + await _updateWidget(); + return; + } + + final jsonTrack = track.toJson(); + + final image = track.album?.images?.first; + final cachedImage = await DefaultCacheManager().getSingleFile(image!.url!); + final data = { + ...jsonTrack, + "album": { + ...jsonTrack["album"], + "images": [ + { + ...image.toJson(), + "path": cachedImage.path, + } + ] + } + }; + + await _saveWidgetData("activeTrack", jsonEncode(data)); + + await _updateWidget(); +} + +final glanceProvider = Provider((ref) { + final server = ref.read(serverProvider); + final activeTrack = ref.read(audioPlayerProvider).activeTrack; + + server.whenData( + (value) async { + final (:server, :port) = value; + + await _saveWidgetData( + "playbackServerAddress", + "${server.address.host}:$port", + ); + await _updateWidget(); + }, + ); + + _sendActiveTrack(activeTrack); + + ref.listen(serverProvider, (prev, next) async { + next.whenData( + (value) async { + final (:server, :port) = value; + + await _saveWidgetData( + "playbackServerAddress", + "${server.address.host}:$port", + ); + await _updateWidget(); + }, + ); + }); + + ref.listen( + audioPlayerProvider, + (previous, next) async { + try { + if (previous?.activeTrack != next.activeTrack && + next.activeTrack != null) { + await _sendActiveTrack(next.activeTrack); + } + } catch (e, stack) { + AppLogger.reportError(e, stack); + } + }, + ); + + final subscriptions = [ + audioPlayer.playingStream.listen((playing) async { + await _saveWidgetData("isPlaying", playing); + await _updateWidget(); + }), + audioPlayer.positionStream.listen((position) async { + await _saveWidgetData("position", position.inSeconds); + await _updateWidget(); + }), + audioPlayer.durationStream.listen((duration) async { + await _saveWidgetData("duration", duration.inSeconds); + await _updateWidget(); + }), + ]; + + ref.onDispose(() { + for (final subscription in subscriptions) { + subscription.cancel(); + } + }); +}); diff --git a/lib/provider/server/router.dart b/lib/provider/server/router.dart index e2a579cc..06ff4a24 100644 --- a/lib/provider/server/router.dart +++ b/lib/provider/server/router.dart @@ -14,6 +14,10 @@ final serverRouterProvider = Provider((ref) { router.get("/stream/", playbackRoutes.getStreamTrackId); + router.get("/playback/toggle-playback", playbackRoutes.togglePlayback); + router.get("/playback/previous", playbackRoutes.previousTrack); + router.get("/playback/next", playbackRoutes.nextTrack); + router.all("/ws", connectRoutes.websocket); return router; diff --git a/lib/provider/server/routes/playback.dart b/lib/provider/server/routes/playback.dart index 34317aa1..289da0e3 100644 --- a/lib/provider/server/routes/playback.dart +++ b/lib/provider/server/routes/playback.dart @@ -188,6 +188,27 @@ class ServerPlaybackRoutes { return Response.internalServerError(); } } + + /// @get('/playback/toggle-playback') + Future togglePlayback(Request request) async { + audioPlayer.isPlaying + ? await audioPlayer.pause() + : await audioPlayer.resume(); + + return Response.ok("Playback toggled"); + } + + /// @get('/playback/previous') + Future previousTrack(Request request) async { + await audioPlayer.skipToPrevious(); + return Response.ok("Previous track"); + } + + /// @get('/playback/next') + Future nextTrack(Request request) async { + await audioPlayer.skipToNext(); + return Response.ok("Next track"); + } } final serverPlaybackRoutesProvider = diff --git a/pubspec.lock b/pubspec.lock index e6e365a6..5aa4f9b4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,10 +42,10 @@ packages: dependency: "direct main" description: name: app_links - sha256: "433df2e61b10519407475d7f69e470789d23d593f28224c38ba1068597be7950" + sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99 url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.3.2" app_links_linux: dependency: transitive description: @@ -1095,6 +1095,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + home_widget: + dependency: "direct main" + description: + name: home_widget + sha256: b313e3304c0429669fddf1286e1fbf61a64b873f38ba30b3eb890ef0d7560b12 + url: "https://pub.dev" + source: hosted + version: "0.7.0" hooks_riverpod: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 072c9a0a..3866e410 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -71,6 +71,7 @@ dependencies: google_fonts: ^6.2.1 hive: ^2.2.3 hive_flutter: ^1.1.0 + home_widget: ^0.7.0 hooks_riverpod: ^2.5.1 html: ^0.15.1 html_unescape: ^2.0.0 @@ -162,6 +163,7 @@ flutter: - assets/ - assets/tutorial/ - assets/logos/ + - assets/backgrounds/ - LICENSE flutter_gen: