mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-11-04 15:23:28 +01:00 
			
		
		
		
	JSON import link support (#368)
This commit is contained in:
		@@ -28,14 +28,13 @@
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
                <action
 | 
			
		||||
                    android:name="com.android_package_installer.content.SESSION_API_PACKAGE_INSTALLED"
 | 
			
		||||
                    android:exported="false"/>
 | 
			
		||||
                    android:exported="false" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
                <action android:name="android.intent.action.VIEW" />
 | 
			
		||||
                <category android:name="android.intent.category.DEFAULT" />
 | 
			
		||||
                <category android:name="android.intent.category.BROWSABLE" />
 | 
			
		||||
                <data android:scheme="obtainium"
 | 
			
		||||
                      android:host="add" />
 | 
			
		||||
                <data android:scheme="obtainium" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
 | 
			
		||||
        </activity>
 | 
			
		||||
@@ -47,10 +46,10 @@
 | 
			
		||||
        <service
 | 
			
		||||
            android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService"
 | 
			
		||||
            android:permission="android.permission.BIND_JOB_SERVICE"
 | 
			
		||||
            android:exported="false"/>
 | 
			
		||||
            android:exported="false" />
 | 
			
		||||
        <receiver
 | 
			
		||||
            android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmBroadcastReceiver"
 | 
			
		||||
            android:exported="false"/>
 | 
			
		||||
            android:exported="false" />
 | 
			
		||||
        <receiver
 | 
			
		||||
            android:name="dev.fluttercommunity.plus.androidalarmmanager.RebootBroadcastReceiver"
 | 
			
		||||
            android:enabled="false"
 | 
			
		||||
@@ -65,19 +64,19 @@
 | 
			
		||||
            android:grantUriPermissions="true">
 | 
			
		||||
            <meta-data
 | 
			
		||||
                android:name="android.support.FILE_PROVIDER_PATHS"
 | 
			
		||||
            android:resource="@xml/file_paths"/>
 | 
			
		||||
                android:resource="@xml/file_paths" />
 | 
			
		||||
        </provider>
 | 
			
		||||
    </application>
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
 | 
			
		||||
    <uses-permission android:name="android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION" />
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 | 
			
		||||
    <uses-permission android:name="android.permission.WAKE_LOCK" />
 | 
			
		||||
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
 | 
			
		||||
    <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
 | 
			
		||||
    <uses-permission
 | 
			
		||||
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
 | 
			
		||||
        android:maxSdkVersion="29"/>
 | 
			
		||||
        android:maxSdkVersion="29" />
 | 
			
		||||
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
 | 
			
		||||
</manifest>
 | 
			
		||||
@@ -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<HomePage> {
 | 
			
		||||
  Future<void> initDeepLinks() async {
 | 
			
		||||
    _appLinks = AppLinks();
 | 
			
		||||
 | 
			
		||||
    goToAddApp(Uri uri) async {
 | 
			
		||||
    goToAddApp(String data) async {
 | 
			
		||||
      switchToPage(1);
 | 
			
		||||
      while (
 | 
			
		||||
          (pages[1].widget.key as GlobalKey<AddAppPageState>?)?.currentState ==
 | 
			
		||||
@@ -64,18 +65,40 @@ class _HomePageState extends State<HomePage> {
 | 
			
		||||
      }
 | 
			
		||||
      (pages[1].widget.key as GlobalKey<AddAppPageState>?)
 | 
			
		||||
          ?.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<AppsProvider>()
 | 
			
		||||
              .importApps('[${Uri.decodeComponent(data)}]');
 | 
			
		||||
        } else if (action == 'apps') {
 | 
			
		||||
          await context
 | 
			
		||||
              .read<AppsProvider>()
 | 
			
		||||
              .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);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user