diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 80720a1..165910b 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -118,7 +118,7 @@ class _AddAppPageState extends State { await settingsProvider.getInstallPermission(); } // Only download the APK here if you need to for the package ID - if (sourceProvider.isTempId(app.id) && + if (sourceProvider.isTempId(app) && app.additionalSettings['trackOnly'] != true) { // ignore: use_build_context_synchronously var apkUrl = await appsProvider.confirmApkUrl(app, context); diff --git a/lib/pages/app.dart b/lib/pages/app.dart index 312dfdb..46d9828 100644 --- a/lib/pages/app.dart +++ b/lib/pages/app.dart @@ -113,7 +113,7 @@ class _AppPageState extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - const SizedBox(height: 150), + const SizedBox(height: 125), app?.installedInfo != null ? Row(mainAxisAlignment: MainAxisAlignment.center, children: [ Image.memory( @@ -136,6 +136,14 @@ class _AppPageState extends State { textAlign: TextAlign.center, style: Theme.of(context).textTheme.headlineMedium, ), + const SizedBox( + height: 8, + ), + Text( + app?.app.id ?? '', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.labelSmall, + ), const SizedBox( height: 32, ), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 2fc89a3..f24cc98 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -182,7 +182,7 @@ class AppsProvider with ChangeNotifier { // The former case should be handled (give the App its real ID), the latter is a security issue var newInfo = await PackageArchiveInfo.fromPath(downloadedFile.path); if (app.id != newInfo.packageName) { - if (apps[app.id] != null && !SourceProvider().isTempId(app.id)) { + if (apps[app.id] != null && !SourceProvider().isTempId(app)) { throw IDChangedError(); } var originalAppId = app.id; diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index e4c76e7..955a82d 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -350,21 +350,12 @@ class SourceProvider { return false; } - String generateTempID(AppNames names, AppSource source) => - '${names.author.toLowerCase()}_${names.name.toLowerCase()}_${source.host}'; + String generateTempID( + String standardUrl, Map additionalSettings) => + (standardUrl + additionalSettings.toString()).hashCode.toString(); - bool isTempId(String id) { - List parts = id.split('_'); - if (parts.length < 3) { - return false; - } - for (int i = 0; i < parts.length - 1; i++) { - if (RegExp('.*[A-Z].*').hasMatch(parts[i])) { - // TODO: Look into RegEx for non-Latin characters - return false; - } - } - return true; + bool isTempId(App app) { + return app.id == generateTempID(app.url, app.additionalSettings); } Future getApp( @@ -400,7 +391,7 @@ class SourceProvider { currentApp?.id ?? source.tryInferringAppId(standardUrl, additionalSettings: additionalSettings) ?? - generateTempID(apk.names, source), + generateTempID(standardUrl, additionalSettings), standardUrl, apk.names.author[0].toUpperCase() + apk.names.author.substring(1), name.trim().isNotEmpty