diff --git a/.flutter b/.flutter index ea121f8..b25305a 160000 --- a/.flutter +++ b/.flutter @@ -1 +1 @@ -Subproject commit ea121f8859e4b13e47a8f845e4586164519588bc +Subproject commit b25305a8832cfc6ba632a7f87ad455e319dccce8 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 22362c2..d767af9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'temurin' # See 'Supported distributions' for available options - java-version: '17' + java-version: '21' - name: Flutter Doctor id: flutter_doctor @@ -44,7 +44,7 @@ jobs: - name: Build APKs run: | - sed -i 's/signingConfig signingConfigs.release//g' android/app/build.gradle + sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle.kts flutter build apk --flavor normal && flutter build apk --split-per-abi --flavor normal for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart diff --git a/android/app/build.gradle b/android/app/build.gradle deleted file mode 100644 index d6c5d7b..0000000 --- a/android/app/build.gradle +++ /dev/null @@ -1,105 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -def keystoreProperties = new Properties() -def keystorePropertiesFile = rootProject.file('key.properties') -if (keystorePropertiesFile.exists()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} - -android { - namespace = "dev.imranr.obtainium" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "dev.imranr.obtainium" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 24 - targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName - } - - flavorDimensions "flavor" - - productFlavors { - normal { - dimension "flavor" - applicationIdSuffix "" - } - fdroid { - dimension "flavor" - applicationIdSuffix ".fdroid" - } - } - - signingConfigs { - release { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null - storePassword keystoreProperties['storePassword'] - } - } - - buildTypes { - release { - signingConfig signingConfigs.release - } - debug { - applicationIdSuffix = ".debug" - versionNameSuffix = "-debug" - } - } -} - -flutter { - source = "../.." -} - -ext.abiCodes = ["x86_64": 1, "armeabi-v7a": 2, "arm64-v8a": 3] -import com.android.build.OutputFile -android.applicationVariants.all { variant -> - variant.outputs.each { output -> - def abiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) - if (abiVersionCode != null) { - output.versionCodeOverride = variant.versionCode * 10 + abiVersionCode - } else { - output.versionCodeOverride = variant.versionCode * 10 - } - } -} \ No newline at end of file diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts new file mode 100644 index 0000000..985d2ad --- /dev/null +++ b/android/app/build.gradle.kts @@ -0,0 +1,107 @@ +import java.io.FileInputStream +import java.util.Properties +import com.android.build.api.variant.FilterConfiguration.FilterType.* + +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +val localProperties = Properties() +val localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.reader(Charsets.UTF_8).use { reader -> + localProperties.load(reader) + } +} + +var flutterVersionCode = localProperties.getProperty("flutter.versionCode") ?: "1" +var flutterVersionName = localProperties.getProperty("flutter.versionName") ?: "1.0" + +val keystoreProperties = Properties() +val keystorePropertiesFile = rootProject.file("key.properties") +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + +android { + namespace = "dev.imranr.obtainium" + compileSdk = flutter.compileSdkVersion + ndkVersion = "27.0.12077973" // 'flutter.ndkVersion' produces warnings (TODO can/should we switch back?) + + compileOptions { + isCoreLibraryDesugaringEnabled = true + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + applicationId = "dev.imranr.obtainium" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = 24 + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInt() + versionName = flutterVersionName + } + + flavorDimensions("flavor") + + productFlavors { + create("normal") { + dimension = "flavor" + applicationIdSuffix = "" + } + create("fdroid") { + dimension = "flavor" + applicationIdSuffix = ".fdroid" + } + } + + signingConfigs { + create("release") { + keyAlias = keystoreProperties["keyAlias"].toString() + keyPassword = keystoreProperties["keyPassword"].toString() + storeFile = keystoreProperties["storeFile"]?.let { file(it) } + storePassword = keystoreProperties["storePassword"].toString() + } + } + + buildTypes { + getByName("release") { + signingConfig = signingConfigs.getByName("release") + } + getByName("debug") { + applicationIdSuffix = ".debug" + versionNameSuffix = "-debug" + } + } +} + +val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) + +androidComponents { + onVariants { variant -> + variant.outputs.forEach { output -> + val name = output.filters.find { it.filterType == ABI }?.identifier + val baseAbiCode = abiCodes[name] + if (baseAbiCode != null) { + output.versionCode.set(baseAbiCode + ((output.versionCode.get() ?: 0) * 10)) + } + } + } +} + +dependencies { + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") +} + +flutter { + source = "../.." +} diff --git a/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt b/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt index 09cd313..71920ac 100644 --- a/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt +++ b/android/app/src/main/kotlin/dev/imranr/obtainium/MainActivity.kt @@ -2,4 +2,4 @@ package dev.imranr.obtainium import io.flutter.embedding.android.FlutterActivity -class MainActivity: FlutterActivity() +class MainActivity : FlutterActivity() diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index b3f11e5..0000000 --- a/android/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - maven { - // [required] background_fetch - url "${project(':background_fetch').projectDir}/libs" - } - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..72266b6 --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,25 @@ +allprojects { + repositories { + google() + mavenCentral() + maven { + // [required] background_fetch + url = uri("${project(":background_fetch").projectDir}/libs") + } + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/android/gradle.properties b/android/gradle.properties index 2597170..f018a61 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6..ac3b479 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/android/settings.gradle b/android/settings.gradle deleted file mode 100644 index 4aa0f8d..0000000 --- a/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false - id "org.jetbrains.kotlin.android" version "2.1.21" apply false -} - -include ":app" diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..ab39a10 --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/assets/translations/ar.json b/assets/translations/ar.json index b310e98..0b91225 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -329,6 +329,7 @@ "welcome": "مرحبًا", "documentationLinksNote": "تحتوي صفحة Obtainium على GitHub المرتبطة أدناه على روابط لمقاطع فيديو، مقالات، مناقشات وموارد أخرى ستساعدك على فهم كيفية استخدام التطبيق.", "batteryOptimizationNote": "لاحظ أن التنزيلات في الخلفية قد تعمل بشكل أكثر موثوقية إذا قمت بتعطيل تحسينات بطارية النظام لـ Obtainium.", + "fileDeletionError": "فشل حذف الملف (حاول حذفه يدويًا ثم حاول مرة أخرى): \"{}\"", "removeAppQuestion": { "one": "إزالة التطبيق؟", "other": "إزالة التطبيقات؟" diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 9ccd50c..cf9891e 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -329,6 +329,7 @@ "welcome": "Welcome", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 5b91004..14933d9 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -329,6 +329,7 @@ "welcome": "Benvinguda", "documentationLinksNote": "La pàgina GitHub d'Obtainium enllaçada a sota conté enllaços a vídeos, articles, debats i altres recursos que t'ajudaran a entendre com usar l'aplicació.", "batteryOptimizationNote": "Tingues present que les descàrregues en segon pla funcionaran millor si inhabilites l'optimització de bateria per a Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "¿Suprimeixo l'aplicació?", "other": "¿Suprimeixo les aplicacions?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index ee1515c..8011feb 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -329,6 +329,7 @@ "welcome": "Vítejte na", "documentationLinksNote": "Níže odkazovaná stránka Obtainium GitHub obsahuje odkazy na videa, články, diskuse a další zdroje, které vám pomohou pochopit, jak aplikaci používat.", "batteryOptimizationNote": "Všimněte si, že stahování na pozadí může fungovat spolehlivěji, pokud vypnete optimalizaci baterie operačního systému pro Obtainium.", + "fileDeletionError": "Soubor se nepodařilo odstranit (zkuste jej odstranit ručně a pak to zkuste znovu): \"{}\"", "removeAppQuestion": { "one": "Odstranit Apku?", "other": "Odstranit Apky?" diff --git a/assets/translations/da.json b/assets/translations/da.json index 34772bd..e9b40b6 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -329,6 +329,7 @@ "welcome": "Velkommen", "documentationLinksNote": "Obtainiums GitHub-side, som der linkes til nedenfor, indeholder links til videoer, artikler, diskussioner og andre ressourcer, som kan hjælpe dig med at forstå, hvordan du bruger appen.", "batteryOptimizationNote": "Bemærk, at baggrundsdownloads kan fungere mere pålideligt, hvis du deaktiverer OS-batterioptimering for Obtainium.", + "fileDeletionError": "Kunne ikke slette filen (prøv at slette den manuelt og prøv igen): \"{}\"", "removeAppQuestion": { "one": "Fjern app?", "other": "Fjern apps?" diff --git a/assets/translations/de.json b/assets/translations/de.json index 337329f..f95e98f 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -329,6 +329,7 @@ "welcome": "Willkommen", "documentationLinksNote": "Die unten verlinkte GitHub-Seite von Obtainium enthält Links zu Videos, Artikeln, Diskussionen und anderen Ressourcen, die Ihnen helfen werden, die Verwendung der App zu verstehen.", "batteryOptimizationNote": "Beachten Sie, dass Downloads im Hintergrund möglicherweise zuverlässiger funktionieren, wenn Sie die Batterieoptimierung des Betriebssystems für Obtainium deaktivieren.", + "fileDeletionError": "Die Datei konnte nicht gelöscht werden (versuchen Sie, sie manuell zu löschen und versuchen Sie es dann erneut): \"{}\"", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index a298994..2fe0dfa 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -329,6 +329,7 @@ "welcome": "Welcome", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "Forigi la aplikaĵon?", "other": "Forigi la aplikaĵojn?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 5473a27..7dde0a2 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -329,6 +329,7 @@ "welcome": "Welcome", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "Remove app?", "other": "Remove apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index d9687b7..2e89168 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -329,6 +329,7 @@ "welcome": "Bienvenido", "documentationLinksNote": "La página GitHub de Obtainium enlazada a continuación contiene enlaces a vídeos, artículos, debates y otros recursos que te ayudarán a entender cómo utilizar la aplicación.", "batteryOptimizationNote": "Ten en cuenta que las descargas en segundo plano pueden funcionar de forma más fiable si desactivas las optimizaciones de batería del sistema operativo para Obtainium.", + "fileDeletionError": "No se ha podido eliminar el archivo (intente eliminarlo manualmente y vuelva a intentarlo): \"{}\"", "removeAppQuestion": { "one": "¿Eliminar aplicación?", "other": "¿Eliminar aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index b4a7c85..22d7cd3 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -329,6 +329,7 @@ "welcome": "Welcome", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f1e681b..8dc1de8 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -329,6 +329,7 @@ "welcome": "Bienvenue", "documentationLinksNote": "La page GitHub d'Obtainium, dont le lien figure ci-dessous, contient des liens vers des vidéos, des articles, des discussions et d'autres ressources qui vous aideront à comprendre comment utiliser l'application.", "batteryOptimizationNote": "Notez que les téléchargements en arrière-plan peuvent fonctionner de manière plus fiable si vous désactivez les optimisations de la batterie du système d'exploitation pour Obtainium.", + "fileDeletionError": "Échec de la suppression du fichier (essayez de le supprimer manuellement puis réessayez) : \"{}\"", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index aff5aa7..4683a54 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -329,6 +329,7 @@ "welcome": "Üdvözöljük!", "documentationLinksNote": "Az alábbi hivatkozás az Obtainium GitHub oldalára vezet, amely további videók, cikkek, beszélgetések és egyéb források hivatkozásait tartalmazza, amelyek segítenek megérteni az alkalmazás használatát.", "batteryOptimizationNote": "Megjegyzés: A háttérfrissítések megbízhatóbban működhetnek, ha kikapcsolja a rendszer akkumulátor-optimalizálását az Obtainium számára.", + "fileDeletionError": "Nem sikerült törölni a fájlt (próbálja meg kézzel törölni, majd próbálja meg újra): \"{}\"", "removeAppQuestion": { "one": "Eltávolítja az alkalmazást?", "other": "Eltávolítja az alkalmazásokat?" diff --git a/assets/translations/id.json b/assets/translations/id.json index c4263fe..a4669de 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -329,6 +329,7 @@ "welcome": "Selamat datang.", "documentationLinksNote": "Halaman GitHub Obtainium yang ditautkan di bawah ini berisi tautan ke video, artikel, diskusi, dan sumber daya lain yang akan membantu Anda memahami cara menggunakan aplikasi.", "batteryOptimizationNote": "Perhatikan bahwa unduhan latar belakang dapat bekerja lebih andal jika Anda menonaktifkan optimasi baterai OS untuk Obtainium.", + "fileDeletionError": "Gagal menghapus file (coba hapus secara manual, lalu coba lagi): \"{}\"", "removeAppQuestion": { "one": "Hapus aplikasi?", "other": "Hapus aplikasi?" diff --git a/assets/translations/it.json b/assets/translations/it.json index 38f3d24..32b46dd 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -329,6 +329,7 @@ "welcome": "Benvenuti", "documentationLinksNote": "La pagina GitHub di Obtainium collegata qui sotto contiene collegamenti a video, articoli, discussioni e altre risorse che vi aiuteranno a capire come utilizzare l'applicazione.", "batteryOptimizationNote": "Si noti che i download in background potrebbero funzionare in modo più affidabile se si disabilita l'ottimizzazione della batteria del sistema operativo per Obtainium.", + "fileDeletionError": "Errore nell'eliminazione del file (provare a cancellarlo manualmente e poi riprovare): \"{}\"", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index b121104..d8cb150 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -321,7 +321,7 @@ "useFirstApkOfVersion": "複数のAPKから最初のAPKを自動選択する", "refreshBeforeDownload": "ダウンロード前にアプリの詳細を更新する", "tencentAppStore": "Tencent App Store", - "coolApk": "CoolApk", + "coolApk": "クールApk", "vivoAppStore": "vivo App Store (CN)", "name": "名称", "smartname": "名前(スマート)", @@ -329,6 +329,7 @@ "welcome": "ようこそ", "documentationLinksNote": "以下のリンクにあるObtainium GitHubページには、ビデオ、記事、ディスカッション、その他のリソースへのリンクがあり、アプリの使い方を理解するのに役立ちます。", "batteryOptimizationNote": "ObtainiumのOSバッテリー最適化を無効にすると、バックグラウンドダウンロードがより確実に動作するようになります。", + "fileDeletionError": "ファイルの削除に失敗しました(手動で削除してから再試行してください):\"{}\"", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 16d9b29..8d9567c 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -329,6 +329,7 @@ "welcome": "환영", "documentationLinksNote": "아래에 링크된 Obtainium 깃허브 페이지에는 앱 사용 방법을 이해하는 데 도움이 되는 동영상, 기사, 토론 및 기타 리소스에 대한 링크가 포함되어 있습니다.", "batteryOptimizationNote": "Obtainium의 OS 배터리 최적화를 비활성화하면 백그라운드 다운로드가 더 안정적으로 작동할 수 있습니다.", + "fileDeletionError": "파일을 삭제하지 못했습니다(수동으로 삭제한 후 다시 시도하세요): \"{}\"", "removeAppQuestion": { "one": "앱을 제거하시겠습니까?", "other": "앱을 제거하시겠습니까?" diff --git a/assets/translations/nl.json b/assets/translations/nl.json index 6d925b8..c932eff 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -329,6 +329,7 @@ "welcome": "Welkom", "documentationLinksNote": "De GitHub pagina van Obtainium waarnaar hieronder wordt gelinkt bevat links naar video's, artikelen, discussies en andere bronnen die je zullen helpen begrijpen hoe je de app kunt gebruiken.", "batteryOptimizationNote": "Merk op dat downloads op de achtergrond mogelijk betrouwbaarder werken als je de batterijoptimalisatie van het besturingssysteem voor Obtainium uitschakelt.", + "fileDeletionError": "Bestand is niet verwijderd (probeer het handmatig te verwijderen en probeer het opnieuw): \"{}\"", "removeAppQuestion": { "one": "App verwijderen?", "other": "Apps verwijderen?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 9bfd668..fdb04c3 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -329,6 +329,7 @@ "welcome": "Witamy", "documentationLinksNote": "Strona Obtainium GitHub, do której link znajduje się poniżej, zawiera linki do filmów, artykułów, dyskusji i innych zasobów, które pomogą ci zrozumieć, jak korzystać z aplikacji.", "batteryOptimizationNote": "Należy pamiętać, że pobieranie w tle może działać bardziej niezawodnie po wyłączeniu optymalizacji baterii systemu operacyjnego dla Obtainium.", + "fileDeletionError": "Nie udało się usunąć pliku (spróbuj usunąć go ręcznie, a następnie spróbuj ponownie): \"{}\"", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index df9fb0d..7ea3ed0 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -329,6 +329,7 @@ "welcome": "Boas vindas", "documentationLinksNote": "A página do Obtainium no GitHub visível abaixo contém links de vídeos, artigos, discussões, e outros recursos que podem te ajudar ao usar o app.", "batteryOptimizationNote": "Observe que os downloads em segundo plano podem funcionar de forma mais confiável se você desativar as otimizações de bateria do sistema operacional para o Obtainium.", + "fileDeletionError": "Falha ao excluir o arquivo (tente excluí-lo manualmente e tente novamente): \"{}\"", "removeAppQuestion": { "one": "Remover app?", "other": "Remover apps?" diff --git a/assets/translations/pt.json b/assets/translations/pt.json index 4172ca5..b9daf09 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -329,6 +329,7 @@ "welcome": "Bem-vindo", "documentationLinksNote": "A página do Obtainium no GitHub com a ligação abaixo contém ligações para vídeos, artigos, discussões e outros recursos que o ajudarão a compreender como utilizar a aplicação.", "batteryOptimizationNote": "Note que os downloads em segundo plano podem funcionar de forma mais fiável se desativar as optimizações da bateria do SO para o Obtainium.", + "fileDeletionError": "Falha ao eliminar o ficheiro (tente eliminá-lo manualmente e depois tente novamente): \"{}\"", "removeAppQuestion": { "one": "Remover aplicativo?", "other": "Remover aplicativos?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 60e5e44..881fe7c 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -329,6 +329,7 @@ "welcome": "Добро пожаловать", "documentationLinksNote": "На странице Obtainium GitHub, ссылка на которую приведена ниже, содержатся ссылки на видео, статьи, обсуждения и другие ресурсы, которые помогут вам понять, как пользоваться приложением.", "batteryOptimizationNote": "Обратите внимание, что фоновая загрузка может работать более надежно, если отключить оптимизацию батареи ОС для Obtainium.", + "fileDeletionError": "Не удалось удалить файл (попробуйте удалить его вручную, а затем повторите попытку): \"{}\"", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/sv.json b/assets/translations/sv.json index 646c385..08d43cb 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -329,6 +329,7 @@ "welcome": "Välkommen", "documentationLinksNote": "Obtainium GitHub-sidan som länkas nedan innehåller länkar till videor, artiklar, diskussioner och andra resurser som hjälper dig att förstå hur du använder appen.", "batteryOptimizationNote": "Observera att nedladdningar i bakgrunden kan fungera mer tillförlitligt om du inaktiverar OS-batterioptimeringar för Obtainium.", + "fileDeletionError": "Misslyckades med att radera filen (försök radera den manuellt och försök sedan igen): \"{}\"", "removeAppQuestion": { "one": "Ta Bort App?", "other": "Ta Bort Appar?" diff --git a/assets/translations/tr.json b/assets/translations/tr.json index 324e99b..fd9ae84 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -329,6 +329,7 @@ "welcome": "Hoş geldiniz", "documentationLinksNote": "Aşağıda bağlantısı verilen Obtainium GitHub sayfası, uygulamayı nasıl kullanacağınızı anlamanıza yardımcı olacak videolara, makalelere, tartışmalara ve diğer kaynaklara bağlantılar içerir.", "batteryOptimizationNote": "Obtainium için işletim sistemi pil optimizasyonlarını devre dışı bırakırsanız arka planda indirmelerin daha güvenilir şekilde çalışabileceğini unutmayın.", + "fileDeletionError": "Dosya silinemedi (elle silmeyi deneyin ve sonra tekrar deneyin): \"{}\"", "removeAppQuestion": { "one": "Uygulamayı Kaldır?", "other": "Uygulamaları Kaldır?" diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 7a0b3ed..942dcc4 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -329,6 +329,7 @@ "welcome": "Ласкаво просимо.", "documentationLinksNote": "Сторінка Obtainium на GitHub, посилання на яку наведено нижче, містить посилання на відео, статті, дискусії та інші ресурси, які допоможуть вам зрозуміти, як користуватися додатком.", "batteryOptimizationNote": "Зауважте, що фонові завантаження можуть працювати надійніше, якщо ви вимкнете оптимізацію батареї ОС для Obtainium.", + "fileDeletionError": "Не вдалося видалити файл (спробуйте видалити його вручну, а потім спробуйте ще раз): \"{}\"", "removeAppQuestion": { "one": "Видалити застосунок?", "other": "Видалити застосунки?" diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 7beaf56..412c5c1 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -329,6 +329,7 @@ "welcome": "Welcome", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "Gỡ ứng dụng?", "other": "Gỡ ứng dụng?" diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index 832855e..8088303 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -329,6 +329,7 @@ "welcome": "歡迎", "documentationLinksNote": "下方連結的 Obtainium GitHub 頁面包含影片、文章、討論及其他資源,能幫助你瞭解如何使用這款應用程式。", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", + "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "removeAppQuestion": { "one": "移除應用程式?", "other": "移除應用程式?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index f8789a9..015f2ca 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -329,6 +329,7 @@ "welcome": "欢迎光临", "documentationLinksNote": "下面链接的 Obtainium GitHub 页面包含视频、文章、讨论和其他资源的链接,可帮助您了解如何使用该应用程序。", "batteryOptimizationNote": "请注意,如果为 Obtainium 禁用操作系统电池优化功能,后台下载可能会更稳定。", + "fileDeletionError": "删除文件失败(尝试手动删除,然后再试一次):\"{}\"", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/build.sh b/build.sh index 4bf3c48..4257d2a 100755 --- a/build.sh +++ b/build.sh @@ -2,15 +2,35 @@ # Convenience script CURR_DIR="$(pwd)" -trap "cd "$CURR_DIR"" EXIT +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" +trap "cd \"$CURR_DIR\"" EXIT +cd "$SCRIPT_DIR" if [ -z "$1" ]; then git fetch && git merge origin/main && git push # Typically run after a PR to main, so bring dev up to date fi + +# Update local Flutter +git submodule update --remote cd .flutter git fetch -git checkout "$(flutter --version | head -2 | tail -1 | awk '{print $4}')" # Ensure included Flutter submodule version equals my environment +git checkout stable +git pull +FLUTTER_GIT_URL="https://github.com/flutter/flutter/" ./bin/flutter upgrade cd .. + +# Keep global Flutter, if any, in sync +if [ -f ~/flutter/bin/flutter ]; then + cd ~/flutter + ./bin/flutter channel stable + ./bin/flutter upgrade + cd "$SCRIPT_DIR" +fi + +if [ -z "$(which flutter)" ]; then + export PATH="$PATH:$SCRIPT_DIR/.flutter/bin" +fi + rm ./build/app/outputs/flutter-apk/* 2>/dev/null # Get rid of older builds if any flutter build apk --flavor normal && flutter build apk --split-per-abi --flavor normal # Build (both split and combined APKs) for file in ./build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done diff --git a/docker/Dockerfile b/docker/Dockerfile index f3ea808..b92aa42 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -51,7 +51,7 @@ RUN \ mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ rm -v /tmp/tools.zip && \ mkdir -p /root/.android/ && touch /root/.android/repositories.cfg &&\ - apt-get install -y --no-install-recommends openjdk-17-jdk openjdk-17-jre &&\ + apt-get install -y --no-install-recommends openjdk-21-jdk openjdk-21-jre &&\ yes | sdkmanager --licenses &&\ sdkmanager --update diff --git a/lib/pages/app.dart b/lib/pages/app.dart index ff60517..1c856b8 100644 --- a/lib/pages/app.dart +++ b/lib/pages/app.dart @@ -100,9 +100,7 @@ class _AppPageState extends State { bool isVersionDetectionStandard = app?.app.additionalSettings['versionDetection'] == true; - bool installedVersionIsEstimate = trackOnly || - (app?.app.installedVersion != null && - app?.app.additionalSettings['versionDetection'] != true); + bool installedVersionIsEstimate = app?.app != null ? isVersionPseudo(app!.app) : false; if (app != null && !_wasWebViewOpened) { _wasWebViewOpened = true; diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 0725830..e4ee468 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -447,7 +447,7 @@ class AppsPageState extends State { } getVersionText(int appIndex) { - return '${listedApps[appIndex].app.installedVersion ?? tr('notInstalled')}${listedApps[appIndex].app.additionalSettings['trackOnly'] == true ? ' ${tr('pseudoVersion')}' : ''}'; + return listedApps[appIndex].app.installedVersion ?? tr('notInstalled'); } getChangesButtonString(int appIndex, bool hasChangeLogFn) { @@ -503,7 +503,10 @@ class AppsPageState extends State { MediaQuery.of(context).size.width / 4), child: Text(getVersionText(index), overflow: TextOverflow.ellipsis, - textAlign: TextAlign.end)), + textAlign: TextAlign.end, + style: isVersionPseudo(listedApps[index].app) + ? TextStyle(fontStyle: FontStyle.italic) + : null)), ]), Row( mainAxisSize: MainAxisSize.min, diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 3fe46be..be14f75 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -70,7 +70,6 @@ class DownloadedXApkDir { } List generateStandardVersionRegExStrings() { - // TODO: Look into RegEx for non-Latin characters / non-Arabic numerals var basics = [ '[0-9]+', '[0-9]+\\.[0-9]+', @@ -78,7 +77,7 @@ List generateStandardVersionRegExStrings() { '[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+' ]; var preSuffixes = ['-', '\\+']; - var suffixes = ['alpha', 'beta', 'ose']; + var suffixes = ['alpha', 'beta', 'ose', '[0-9]+']; var finals = ['\\+[0-9]+', '[0-9]+']; List results = []; for (var b in basics) { @@ -235,6 +234,14 @@ Future checkETagHeader(String url, .toString(); } +deleteFile(File file) { + try { + file.deleteSync(recursive: true); + } on PathAccessException catch (e) { + throw ObtainiumError(tr('fileDeletionError', args: [e.path ?? tr('unknown')])); + } +} + Future downloadFile(String url, String fileName, bool fileNameHasExt, Function? onProgress, String destDir, {bool useExisting = true, @@ -349,7 +356,7 @@ Future downloadFile(String url, String fileName, bool fileNameHasExt, reqHeaders.addAll({'range': 'bytes=$rangeStart-${fullContentLength - 1}'}); sink = tempDownloadedFile.openWrite(mode: FileMode.writeOnlyAppend); } else if (tempDownloadedFile.existsSync()) { - tempDownloadedFile.deleteSync(recursive: true); + deleteFile(tempDownloadedFile); } var responseWithClient = await sourceRequestStreamResponse('GET', url, reqHeaders, {}); @@ -405,7 +412,7 @@ Future downloadFile(String url, String fileName, bool fileNameHasExt, onProgress(progress); } if (response.statusCode < 200 || response.statusCode > 299) { - tempDownloadedFile.deleteSync(recursive: true); + deleteFile(tempDownloadedFile); throw response.reasonPhrase; } if (tempDownloadedFile.existsSync()) { @@ -798,9 +805,9 @@ class AppsProvider with ChangeNotifier { await pm.getPackageArchiveInfo(archiveFilePath: file.file.path); if (newInfo == null) { try { - file.file.deleteSync(recursive: true); + deleteFile(file.file); for (var a in additionalAPKs) { - a.file.deleteSync(recursive: true); + deleteFile(a.file); } } catch (e) { // @@ -840,7 +847,7 @@ class AppsProvider with ChangeNotifier { bool installed = false; if (code != null && code != 0 && code != 3) { try { - file.file.deleteSync(recursive: true); + deleteFile(file.file); } catch (e) { // } finally { @@ -1336,7 +1343,11 @@ class AppsProvider with ChangeNotifier { var templateVersionFormats = findStandardFormatsForVersion(templateVersion, true); var comparisonVersionFormats = - findStandardFormatsForVersion(comparisonVersion, false); + findStandardFormatsForVersion(comparisonVersion, true); + if (comparisonVersionFormats.isEmpty) { + comparisonVersionFormats = + findStandardFormatsForVersion(comparisonVersion, false); + } var commonStandardFormats = templateVersionFormats.intersection(comparisonVersionFormats); if (commonStandardFormats.isEmpty) { @@ -1508,7 +1519,7 @@ class AppsProvider with ChangeNotifier { await Future.wait(appIds.map((appId) async { File file = File('${(await getAppsDir()).path}/$appId.json'); if (file.existsSync()) { - file.deleteSync(recursive: true); + deleteFile(file); } apkFiles .where( diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index a73c218..e49e8e3 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -470,7 +470,7 @@ class SettingsProvider with ChangeNotifier { } List get searchDeselected { - return prefs?.getStringList('searchDeselected') ?? []; + return prefs?.getStringList('searchDeselected') ?? SourceProvider().sources.map((s) => s.name).toList(); } set searchDeselected(List list) { diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 0f08d78..1555074 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -940,6 +940,11 @@ List> filterApks( return apkUrls; } +isVersionPseudo(App app) => + app.additionalSettings['trackOnly'] == true || + (app.installedVersion != null && + app.additionalSettings['versionDetection'] != true); + class SourceProvider { // Add more source classes here so they are available via the service List get sources => [ diff --git a/pubspec.lock b/pubspec.lock index 56380bf..2980b59 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -76,14 +76,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" - archive: - dependency: transitive - description: - name: archive - sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" - url: "https://pub.dev" - source: hosted - version: "4.0.7" args: dependency: transitive description: @@ -96,10 +88,10 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" background_fetch: dependency: "direct main" description: @@ -148,22 +140,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c - url: "https://pub.dev" - source: hosted - version: "0.4.2" clock: dependency: transitive description: @@ -288,10 +264,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -449,22 +425,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c - url: "https://pub.dev" - source: hosted - version: "0.14.3" flutter_lints: - dependency: "direct dev" + dependency: "direct main" description: name: flutter_lints - sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_local_notifications: dependency: "direct main" description: @@ -511,7 +479,7 @@ packages: source: hosted version: "2.0.28" flutter_test: - dependency: "direct dev" + dependency: transitive description: flutter source: sdk version: "0.0.0" @@ -584,38 +552,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" - image: - dependency: transitive - description: - name: image - sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" - url: "https://pub.dev" - source: hosted - version: "4.5.4" intl: dependency: transitive description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" + version: "0.20.2" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -636,10 +588,10 @@ packages: dependency: transitive description: name: lints - sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "6.0.0" markdown: dependency: "direct main" description: @@ -856,14 +808,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.10.2+1" - posix: - dependency: transitive - description: - name: posix - sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 - url: "https://pub.dev" - source: hosted - version: "6.0.2" provider: dependency: "direct main" description: @@ -949,7 +893,7 @@ packages: description: path: "." ref: master - resolved-ref: "8784c39b909324df8913dd30fa416b8a50d55f49" + resolved-ref: "89cdb5434a7ac7510f6bcdb60e1d51a27ee2f40b" url: "https://github.com/AlexBacich/shared-storage" source: git version: "0.7.0" @@ -1179,10 +1123,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" web: dependency: transitive description: @@ -1195,10 +1139,10 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "62d763c27ce7f6cef04b3bec01c85a28d60149bffd155884aa4b8fd4941ea2e4" + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba url: "https://pub.dev" source: hosted - version: "4.12.0" + version: "4.13.0" webview_flutter_android: dependency: transitive description: @@ -1255,14 +1199,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.3.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.dev" - source: hosted - version: "3.1.3" sdks: - dart: ">=3.7.2 <4.0.0" + dart: ">=3.8.1 <4.0.0" flutter: ">=3.27.0" diff --git a/pubspec.yaml b/pubspec.yaml index 988c837..ed9261e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,10 +16,10 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.55+2312 +version: 1.1.56+2313 environment: - sdk: ^3.6.0 + sdk: ^3.8.1 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -33,22 +33,22 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.5 - path_provider: ^2.0.11 + cupertino_icons: ^1.0.8 + path_provider: ^2.1.5 flutter_fgbg: ^0.7.1 - flutter_local_notifications: ^18.0.0 - provider: ^6.0.3 - http: ^1.0.0 - webview_flutter: ^4.0.0 - dynamic_color: ^1.5.4 - html: ^0.15.0 - shared_preferences: ^2.0.15 - url_launcher: ^6.1.5 + flutter_local_notifications: ^18.0.1 + provider: ^6.1.5 + http: ^1.4.0 + webview_flutter: ^4.13.0 + dynamic_color: ^1.7.0 + html: ^0.15.6 + shared_preferences: ^2.5.3 + url_launcher: ^6.3.1 permission_handler: ^12.0.0+1 - fluttertoast: ^8.0.9 - device_info_plus: ^11.0.0 - file_picker: ^10.0.0 - animations: ^2.0.4 + fluttertoast: ^8.2.12 + device_info_plus: ^11.4.0 + file_picker: ^10.1.9 + animations: ^2.0.11 android_package_installer: # TODO: See if PR will be accepted (dev may not be active), else remove this comment git: url: https://github.com/ImranR98/android_package_installer @@ -58,23 +58,23 @@ dependencies: url: https://github.com/ImranR98/android_package_manager ref: master share_plus: ^11.0.0 - sqflite: ^2.2.0+3 - easy_localization: ^3.0.1 - android_intent_plus: ^5.0.1 - flutter_markdown: ^0.7.1 - flutter_archive: ^6.0.0 + sqflite: ^2.4.2 + easy_localization: ^3.0.7+1 + android_intent_plus: ^5.3.0 + flutter_markdown: ^0.7.7+1 + flutter_archive: ^6.0.3 hsluv: ^1.1.3 - connectivity_plus: ^6.0.1 + connectivity_plus: ^6.1.4 shared_storage: # TODO: Is this maintained? git: url: https://github.com/AlexBacich/shared-storage ref: master - crypto: ^3.0.3 + crypto: ^3.0.6 bcrypt: ^1.1.3 - app_links: ^6.0.1 - background_fetch: ^1.2.1 + app_links: ^6.4.0 + background_fetch: ^1.3.8 equations: ^5.0.2 - flex_color_picker: ^3.4.1 + flex_color_picker: ^3.7.1 android_system_font: git: url: https://github.com/re7gog/android_system_font @@ -83,22 +83,17 @@ dependencies: git: url: https://github.com/wilver06w/shizuku_apk_installer ref: master - - markdown: any + markdown: ^7.3.0 flutter_typeahead: ^5.2.0 - battery_plus: ^6.1.0 + battery_plus: ^6.2.1 flutter_charset_detector: ^5.0.0 -dev_dependencies: - flutter_test: - sdk: flutter - flutter_launcher_icons: ^0.14.1 # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 flutter_launcher_icons: android: "ic_launcher"