diff --git a/.gitignore b/.gitignore index 767eff3..41a0078 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +.fvmrc +.vscode/settings.json + # Miscellaneous *.class *.log diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b734807..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "dart.flutterSdkPath": "~/fvm/default", - // Remove .fvm files from search - "search.exclude": { - "**/.fvm": true - }, - // Remove from file watching - "files.watcherExclude": { - "**/.fvm": true - } -} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index cd44325..42e7549 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,6 +1,7 @@ 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" } @@ -39,7 +40,7 @@ android { } kotlinOptions { - jvmTarget = '21' + jvmTarget = JavaVersion.VERSION_1_8 } sourceSets { @@ -69,7 +70,10 @@ android { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' +<<<<<<< HEAD +======= +>>>>>>> master } } } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 72ca7c6..96aba4c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -24,6 +24,7 @@ android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> + @@ -39,6 +40,15 @@ + + + + + + + + + diff --git a/android/build.gradle b/android/build.gradle index 32688b0..e4def05 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -18,11 +18,12 @@ subprojects { } } +// Used for plugins that do not specify their own namespace +// https://discuss.gradle.org/t/flutter-not-able-to-migrate-to-gradle-8/46937/7 subprojects { afterEvaluate { project -> if (project.hasProperty('android')) { project.android { -// compileSdkVersion 34 if (namespace == null) { namespace project.group } @@ -31,7 +32,6 @@ subprojects { } } - rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" @@ -44,6 +44,9 @@ tasks.register("clean", Delete) { delete rootProject.buildDir } +tasks.withType(JavaCompile) { + options.compilerArgs << "-Xlint:-options" +} ext { compileSdkVersion = 34 diff --git a/lib/models/app.dart b/lib/models/app.dart index 47b0ab1..502d8a7 100644 --- a/lib/models/app.dart +++ b/lib/models/app.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:io'; import 'dart:isolate'; -import 'package:android_package_manager/android_package_manager.dart'; import 'package:async/async.dart'; import 'package:background_downloader/background_downloader.dart'; import 'package:collection/collection.dart'; @@ -189,26 +188,6 @@ class App extends base.App with DataModelMixin { } } } - - Future packageCertificateMatches() async { - if (latestMetadata!.apkSignatureHash == null) return null; - - final flags = PackageInfoFlags( - {PMFlag.getPermissions, PMFlag.getSigningCertificates}, - ); - - final i = await packageManager.getPackageInfo( - packageName: identifier, flags: flags); - if (i == null) { - return null; - } - final bytes = i.signingInfo!.signingCertificateHistory!.first; - final installedApkSigHash = sha256.convert(bytes).toString().toLowerCase(); - final metadataSigHashes = - latestMetadata?.event.getTagSet('apk_signature_hash') ?? {}; - return metadataSigHashes - .any((msh) => msh.toLowerCase() == installedApkSigHash); - } } mixin AppAdapter on Adapter { diff --git a/lib/navigation/app_initializer.dart b/lib/navigation/app_initializer.dart index fe5ff54..1af7eb4 100644 --- a/lib/navigation/app_initializer.dart +++ b/lib/navigation/app_initializer.dart @@ -60,18 +60,24 @@ final appInitializer = FutureProvider((ref) async { // Handle deep links final appLinksSub = appLinks.uriLinkStream.listen((uri) async { - if (uri.scheme == 'zapstore') { + String? appId; + if (uri.scheme == 'https' && uri.hasFragment) { + appId = uri.fragment; + } else if (uri.scheme == 'zapstore') { + appId = uri.host; + } + if (appId != null) { final adapter = ref.apps.appAdapter; - final apps = adapter.findWhereIdentifierInLocal({uri.host}); + final apps = adapter.findWhereIdentifierInLocal({appId}); // Filter by signer npub, if present, otherwise pick first final appSignerNpub = uri.queryParameters['signer']; - var app = + var goToApp = apps.firstWhereOrNull((a) => a.signer.value?.npub == appSignerNpub); if (appSignerNpub == null) { - app = apps.first; + goToApp = apps.first; } - if (app != null) { - appRouter.go('/details', extra: app); + if (goToApp != null) { + appRouter.go('/details', extra: goToApp); } else { appRouter.go('/'); } diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift index d53ef64..8e02df2 100644 --- a/macos/Runner/AppDelegate.swift +++ b/macos/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true diff --git a/pubspec.lock b/pubspec.lock index 73a79b3..0b4007a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -34,10 +34,10 @@ packages: dependency: "direct main" description: name: app_links - sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99 + sha256: "433df2e61b10519407475d7f69e470789d23d593f28224c38ba1068597be7950" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" app_links_linux: dependency: transitive description: @@ -66,10 +66,10 @@ packages: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.2" args: dependency: transitive description: @@ -106,10 +106,10 @@ packages: dependency: "direct main" description: name: background_downloader - sha256: "7c65a999544b40668000aac6379854b890f0ef367b9fbd29d959fd1e242dda14" + sha256: "8178f005574922941034b4a95c0721bc1ecdc4c9f040e310b108bc3d59a5e919" url: "https://pub.dev" source: hosted - version: "8.8.0" + version: "8.8.1" badges: dependency: "direct main" description: @@ -202,10 +202,10 @@ packages: dependency: transitive description: name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2" url: "https://pub.dev" source: hosted - version: "8.9.2" + version: "8.9.3" cached_network_image: dependency: "direct main" description: @@ -314,18 +314,18 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 + sha256: "4fa68e53e26ab17b70ca39f072c285562cfc1589df5bb1e9295db90f6645f431" url: "https://pub.dev" source: hosted - version: "10.1.2" + version: "11.2.0" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "7.0.2" easy_image_viewer: dependency: "direct main" description: @@ -416,10 +416,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" flutter_markdown: dependency: "direct main" description: @@ -594,10 +594,10 @@ packages: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" http_parser: dependency: transitive description: @@ -626,10 +626,10 @@ packages: dependency: transitive description: name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.5.2" inflection3: dependency: transitive description: @@ -658,18 +658,10 @@ packages: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" - isar: - dependency: transitive - description: - name: isar - sha256: ebf74d87c400bd9f7da14acb31932b50c2407edbbd40930da3a6c2a8143f85a8 - url: "https://pub.dev" - source: hosted - version: "4.0.0-dev.14" + version: "1.0.5" js: dependency: transitive description: @@ -722,18 +714,10 @@ packages: dependency: transitive description: name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413" url: "https://pub.dev" source: hosted - version: "4.0.0" - logger: - dependency: transitive - description: - name: logger - sha256: be4b23575aac7ebf01f225a241eb7f6b5641eeaf43c6a8613510fc2f8cf187d1 - url: "https://pub.dev" - source: hosted - version: "2.5.0" + version: "5.0.0" logging: dependency: transitive description: @@ -819,10 +803,10 @@ packages: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" path: dependency: "direct main" description: @@ -843,10 +827,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "8c4967f8b7cb46dc914e178daa29813d83ae502e0529d7b0478330616a691ef7" + sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" url: "https://pub.dev" source: hosted - version: "2.2.14" + version: "2.2.15" path_provider_foundation: dependency: transitive description: @@ -983,22 +967,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" pub_semver: dependency: transitive description: name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" purplebase: dependency: "direct main" description: @@ -1042,26 +1034,26 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82" + sha256: "3c7e73920c694a436afaf65ab60ce3453d91f84208d761fbd83fc21182134d93" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.4" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "7f172d1b06de5da47b6264c2692ee2ead20bbbc246690427cdb4fc301cd0c549" + sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.4.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" shared_preferences_linux: dependency: transitive description: @@ -1144,10 +1136,10 @@ packages: dependency: transitive description: name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c" url: "https://pub.dev" source: hosted - version: "1.3.4" + version: "1.3.5" source_span: dependency: transitive description: @@ -1216,10 +1208,10 @@ packages: dependency: "direct main" description: name: sqlite3_flutter_libs - sha256: "636b0fe8a2de894e5455572f6cbbc458f4ffecfe9f860b79439e27041ea4f0b9" + sha256: "73016db8419f019e807b7a5e5fbf2a7bd45c165fed403b8e7681230f3a102785" url: "https://pub.dev" source: hosted - version: "0.5.27" + version: "0.5.28" stack_trace: dependency: transitive description: @@ -1248,10 +1240,10 @@ packages: dependency: transitive description: name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: @@ -1296,10 +1288,10 @@ packages: dependency: transitive description: name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.2" toastification: dependency: "direct main" description: @@ -1416,10 +1408,10 @@ packages: dependency: transitive description: name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" web: dependency: transitive description: @@ -1488,10 +1480,10 @@ packages: dependency: transitive description: name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" sdks: dart: ">=3.5.0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 90995b7..4b68a89 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -33,7 +33,7 @@ dependencies: gap: ^3.0.1 auto_size_text: ^3.0.0 intl: ^0.18.1 - device_info_plus: ^10.1.0 + device_info_plus: ^11.2.0 flutter_layout_grid: ^2.0.6 signer_plugin: ^1.0.0 skeletonizer: ^1.1.2+1 @@ -79,7 +79,7 @@ dev_dependencies: flutter_test: sdk: flutter json_serializable: ^6.7.1 - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 icons_launcher: ^3.0.0 flutter: