Added receive_sharing_intent

This commit is contained in:
Anton Stubenbord
2022-11-11 00:38:11 +01:00
parent dfbc05b4b3
commit c4104e75a7
8 changed files with 90 additions and 7 deletions

View File

@@ -1,6 +1,15 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.paperless_mobile">
<application android:label="Paperless Mobile" android:name="${applicationName}" android:icon="@mipmap/launcher_icon">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<application android:label="Paperless Mobile"
android:name="${applicationName}"
android:icon="@mipmap/launcher_icon">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
@@ -10,6 +19,19 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Enables sharing image files "into" this app -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<!-- Enables sharing pdf files "into" this app -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/pdf" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->

View File

@@ -1,7 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_mobile/core/logic/error_code_localization_mapper.dart';
import 'package:paperless_mobile/core/model/error_message.dart';
import 'package:paperless_mobile/core/widgets/empty_state.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';

View File

@@ -7,7 +7,6 @@ import 'package:paperless_mobile/core/widgets/offline_banner.dart';
import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/documents/bloc/saved_view_cubit.dart';
import 'package:paperless_mobile/features/documents/model/saved_view.model.dart';
import 'package:paperless_mobile/features/documents/view/pages/documents_page.dart';
import 'package:paperless_mobile/features/home/view/widget/bottom_navigation_bar.dart';
import 'package:paperless_mobile/features/home/view/widget/info_drawer.dart';

View File

@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:paperless_mobile/core/bloc/label_cubit.dart';
import 'package:paperless_mobile/features/labels/document_type/model/document_type.model.dart';
import 'package:injectable/injectable.dart';
@@ -8,7 +9,7 @@ class DocumentTypeCubit extends LabelCubit<DocumentType> {
@override
Future<void> initialize() async {
return labelRepository.getDocumentTypes().then(loadFrom);
labelRepository.getDocumentTypes().then(loadFrom);
}
@override

View File

@@ -30,10 +30,11 @@ import 'package:intl/intl.dart';
class DocumentUploadPage extends StatefulWidget {
final Uint8List fileBytes;
final void Function()? afterUpload;
const DocumentUploadPage({
Key? key,
required this.fileBytes,
this.afterUpload,
}) : super(key: key);
@override
@@ -221,6 +222,7 @@ class _DocumentUploadPageState extends State<DocumentUploadPage> {
.ids,
createdAt: (_formKey.currentState?.value[DocumentModel.createdKey]
as DateTime?),
propagateEventOnError: false,
);
setState(() {
_isUploadLoading = false;
@@ -228,6 +230,7 @@ class _DocumentUploadPageState extends State<DocumentUploadPage> {
getIt<DocumentScannerCubit>().reset();
Navigator.pop(context);
showSnackBar(context, S.of(context).documentUploadSuccessText);
widget.afterUpload?.call();
} on ErrorMessage catch (error) {
showError(context, error);
} on PaperlessValidationErrors catch (errorMessages) {

View File

@@ -1,6 +1,8 @@
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
@@ -11,9 +13,11 @@ import 'package:paperless_mobile/core/global/asset_images.dart';
import 'package:paperless_mobile/core/global/http_self_signed_certificate_override.dart';
import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/features/app_intro/application_intro_slideshow.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/home/view/home_page.dart';
import 'package:paperless_mobile/features/login/bloc/authentication_cubit.dart';
import 'package:paperless_mobile/features/login/view/login_page.dart';
import 'package:paperless_mobile/features/scan/view/document_upload_page.dart';
import 'package:paperless_mobile/features/settings/bloc/application_settings_cubit.dart';
import 'package:paperless_mobile/features/settings/model/application_settings_state.dart';
import 'package:paperless_mobile/generated/l10n.dart';
@@ -23,6 +27,7 @@ import 'package:intl/intl.dart';
import 'package:intl/intl_standalone.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:path_provider/path_provider.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
void main() async {
final widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
@@ -125,6 +130,53 @@ class AuthenticationWrapper extends StatefulWidget {
}
class _AuthenticationWrapperState extends State<AuthenticationWrapper> {
@override
void initState() {
super.initState();
// For sharing files coming from outside the app while the app is still opened
ReceiveSharingIntent.getMediaStream().listen((List<SharedMediaFile> value) {
final bytes = File(value.first.path).readAsBytesSync();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BlocProvider.value(
value: getIt<DocumentsCubit>(),
child: LabelBlocProvider(
child: DocumentUploadPage(
fileBytes: bytes,
afterUpload: () => SystemNavigator.pop(),
),
),
),
),
);
}, onError: (err) {
log(err);
});
// For sharing files coming from outside the app while the app is closed
ReceiveSharingIntent.getInitialMedia().then((List<SharedMediaFile> value) {
if (value.isEmpty) {
return;
}
final bytes = File(value.first.path).readAsBytesSync();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BlocProvider.value(
value: getIt<DocumentsCubit>(),
child: LabelBlocProvider(
child: DocumentUploadPage(
fileBytes: bytes,
afterUpload: () => SystemNavigator.pop(),
),
),
),
),
);
});
}
@override
void didChangeDependencies() {
FlutterNativeSplash.remove();

View File

@@ -1123,6 +1123,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
receive_sharing_intent:
dependency: "direct main"
description:
name: receive_sharing_intent
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.5"
rxdart:
dependency: transitive
description:

View File

@@ -74,6 +74,7 @@ dependencies:
share_plus: ^6.2.0
introduction_screen: ^3.0.2
mime: ^1.0.2
receive_sharing_intent: ^1.4.5
dev_dependencies:
integration_test: