diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index b265cfe..5e60b1c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -28,16 +28,15 @@
+ android:exported="false" />
-
+
-
+
@@ -47,10 +46,10 @@
+ android:exported="false" />
+ android:exported="false" />
-
+ android:name="androidx.core.content.FileProvider"
+ android:authorities="dev.imranr.obtainium"
+ android:grantUriPermissions="true">
+
-
-
-
-
+
+
+
+
+ android:maxSdkVersion="29" />
\ No newline at end of file
diff --git a/lib/pages/home.dart b/lib/pages/home.dart
index c2dd91d..c2b66bf 100644
--- a/lib/pages/home.dart
+++ b/lib/pages/home.dart
@@ -5,6 +5,7 @@ import 'package:app_links/app_links.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
+import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/pages/add_app.dart';
import 'package:obtainium/pages/apps.dart';
import 'package:obtainium/pages/import_export.dart';
@@ -55,7 +56,7 @@ class _HomePageState extends State {
Future initDeepLinks() async {
_appLinks = AppLinks();
- goToAddApp(Uri uri) async {
+ goToAddApp(String data) async {
switchToPage(1);
while (
(pages[1].widget.key as GlobalKey?)?.currentState ==
@@ -64,18 +65,40 @@ class _HomePageState extends State {
}
(pages[1].widget.key as GlobalKey?)
?.currentState
- ?.linkFn(uri.path.length > 1 ? uri.path.substring(1) : "");
+ ?.linkFn(data);
+ }
+
+ interpretLink(Uri uri) async {
+ var action = uri.host;
+ var data = uri.path.length > 1 ? uri.path.substring(1) : "";
+ try {
+ if (action == 'add') {
+ await goToAddApp(data);
+ } else if (action == 'app') {
+ await context
+ .read()
+ .importApps('[${Uri.decodeComponent(data)}]');
+ } else if (action == 'apps') {
+ await context
+ .read()
+ .importApps(Uri.decodeComponent(data));
+ } else {
+ throw ObtainiumError(tr('unknown'));
+ }
+ } catch (e) {
+ showError(e, context);
+ }
}
// Check initial link if app was in cold state (terminated)
final appLink = await _appLinks.getInitialAppLink();
if (appLink != null) {
- await goToAddApp(appLink);
+ await interpretLink(appLink);
}
// Handle link when app is in warm state (front or background)
_linkSubscription = _appLinks.uriLinkStream.listen((uri) async {
- await goToAddApp(uri);
+ await interpretLink(uri);
});
}