diff --git a/README.md b/README.md index 71c95dc..6c1ff2e 100644 --- a/README.md +++ b/README.md @@ -28,21 +28,22 @@ An (almost) fully fledged mobile paperless client.

-

- - +

+ + Get it on Google Play + + + Get it on F-Droid

- Report Bug · Request Feature

-## Important Notes -* ⚠️ Breaking changes **are still expected** between updates! Please perform a **clean instal** after updating the app before filing an issue or leaving a 1-star review in the App-Store! +## ⚠️ Important Notes +- Breaking changes **are still expected** between updates! Please perform a **clean instal** after updating the app before filing an issue or leaving a 1-star review in the App-Store! ## About The Project diff --git a/android/app/build.gradle b/android/app/build.gradle index 496e5e2..a0e469f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -103,9 +103,7 @@ android.applicationVariants.all { variant -> def abiName = output.getFilter(OutputFile.ABI) def abiVersionCode = project.ext.abiCodes.get(abiName) if (abiVersionCode != null) { - output.versionCodeOverride = abiVersionCode * 1000 + variant.versionCode - println(abiName + ": " + output.versionCodeOverride) - // output.versionCodeOverride = variant.versionCode * 10 + abiVersionCode + output.versionCodeOverride = variant.versionCode * 10 + abiVersionCode } } -} \ No newline at end of file +} diff --git a/android/fastlane/metadata/android/de-DE/changelogs/59.txt b/android/fastlane/metadata/android/de-DE/changelogs/4003.txt similarity index 100% rename from android/fastlane/metadata/android/de-DE/changelogs/59.txt rename to android/fastlane/metadata/android/de-DE/changelogs/4003.txt diff --git a/android/fastlane/metadata/android/de-DE/changelogs/4013.txt b/android/fastlane/metadata/android/de-DE/changelogs/4013.txt new file mode 100644 index 0000000..66efa76 --- /dev/null +++ b/android/fastlane/metadata/android/de-DE/changelogs/4013.txt @@ -0,0 +1 @@ +- Beheben eines Fehlers durch welchen Dokumente nicht mehr bearbeitet werden konnten \ No newline at end of file diff --git a/android/fastlane/metadata/android/de-DE/changelogs/4023.txt b/android/fastlane/metadata/android/de-DE/changelogs/4023.txt new file mode 100644 index 0000000..aebe7e9 --- /dev/null +++ b/android/fastlane/metadata/android/de-DE/changelogs/4023.txt @@ -0,0 +1,2 @@ +- Kleinere visuelle Änderungen +- Aktualisieren der Store-Präsenz \ No newline at end of file diff --git a/android/fastlane/metadata/android/de-DE/changelogs/4033.txt b/android/fastlane/metadata/android/de-DE/changelogs/4033.txt new file mode 100644 index 0000000..07b4cdc --- /dev/null +++ b/android/fastlane/metadata/android/de-DE/changelogs/4033.txt @@ -0,0 +1 @@ +- Beheben von versehentlich hardcoded Theme \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/changelogs/59.txt b/android/fastlane/metadata/android/en-US/changelogs/4003.txt similarity index 100% rename from android/fastlane/metadata/android/en-US/changelogs/59.txt rename to android/fastlane/metadata/android/en-US/changelogs/4003.txt diff --git a/android/fastlane/metadata/android/en-US/changelogs/4013.txt b/android/fastlane/metadata/android/en-US/changelogs/4013.txt new file mode 100644 index 0000000..e359420 --- /dev/null +++ b/android/fastlane/metadata/android/en-US/changelogs/4013.txt @@ -0,0 +1 @@ +- Fixed a bug which caused documents not being editable anymore \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/changelogs/4023.txt b/android/fastlane/metadata/android/en-US/changelogs/4023.txt new file mode 100644 index 0000000..48f3464 --- /dev/null +++ b/android/fastlane/metadata/android/en-US/changelogs/4023.txt @@ -0,0 +1,2 @@ +- Minor visual updates +- Update store assets \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/changelogs/4033.txt b/android/fastlane/metadata/android/en-US/changelogs/4033.txt new file mode 100644 index 0000000..d38ec50 --- /dev/null +++ b/android/fastlane/metadata/android/en-US/changelogs/4033.txt @@ -0,0 +1 @@ +- Fix accidentally hardcoded Theme mode \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/full_description.txt b/android/fastlane/metadata/android/en-US/full_description.txt index 283a8fb..b23e4a4 100644 --- a/android/fastlane/metadata/android/en-US/full_description.txt +++ b/android/fastlane/metadata/android/en-US/full_description.txt @@ -1,10 +1,8 @@ -An (almost) fully fledged mobile Paperless client compatible with Paperless. - Using this app requires access to running a Paperless-ng*x instance. * View and search documents * Add, delete or edit documents -* Share, download, print or preview your documents +* Share, download, print and preview your documents * Manage correspondents, document types, tags and storage paths * Scan and upload documents with preset correspondent, document type, tags and creation date * Review and quickly process newly added documents in the inbox @@ -14,4 +12,4 @@ Using this app requires access to running a Paperless-ng*x instance. * Modern, intuitive UI built according to the Material Design 3 specification * Light and dark theme * Support for dynamic color (Android 12+ only) -* Available in English, German, French, Catalan, Polish, Czech and Turkish language +* Available in English, German, French, Spanish, Catalan, Polish, Czech, Russian and Turkish language with more to come diff --git a/android/fastlane/metadata/android/en-US/images/featureGraphic.png b/android/fastlane/metadata/android/en-US/images/featureGraphic.png index 7811e34..aaba202 100644 Binary files a/android/fastlane/metadata/android/en-US/images/featureGraphic.png and b/android/fastlane/metadata/android/en-US/images/featureGraphic.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png index d7fe55c..3c0ab2a 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png index f4b16ac..cd87070 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png index 5db8a71..d8b4b2d 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png index e1dea35..fafcd0f 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png index d5e5129..700baf8 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png index ac2df8f..43cb729 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png index 99f1cc1..e1b1265 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png index 71d7381..10a73f7 100644 Binary files a/android/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png and b/android/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png differ diff --git a/android/fastlane/metadata/android/en-US/short_description.txt b/android/fastlane/metadata/android/en-US/short_description.txt index 22b155f..de9d5fb 100644 --- a/android/fastlane/metadata/android/en-US/short_description.txt +++ b/android/fastlane/metadata/android/en-US/short_description.txt @@ -1 +1 @@ -An (almost) fully fledged mobile Paperless client. \ No newline at end of file +An (almost) fully fledged mobile paperless-ng*x client. \ No newline at end of file diff --git a/lib/core/service/file_service.dart b/lib/core/service/file_service.dart index 7a944bb..a990e6e 100644 --- a/lib/core/service/file_service.dart +++ b/lib/core/service/file_service.dart @@ -115,11 +115,11 @@ class FileService { formatBytes(await getDirSizeInBytes(consumptionDir)); logger.ft( - "Removing scans...", + "Clearing scans directory...", className: runtimeType.toString(), methodName: "clearUserData", ); - await _temporaryScansDirectory.delete(recursive: true); + await _temporaryScansDirectory.clear(); logger.ft( "Removed $scanDirSize...", className: runtimeType.toString(), diff --git a/lib/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart b/lib/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart index 93355a8..cda5745 100644 --- a/lib/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart +++ b/lib/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:intl/intl.dart'; import 'package:paperless_api/paperless_api.dart'; +import 'package:paperless_mobile/core/extensions/flutter_extensions.dart'; import 'package:paperless_mobile/core/widgets/form_builder_fields/extended_date_range_form_field/extended_date_range_dialog.dart'; import 'package:paperless_mobile/core/widgets/form_builder_fields/extended_date_range_form_field/relative_date_range_picker_helper.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; @@ -11,6 +12,7 @@ class FormBuilderExtendedDateRangePicker extends StatefulWidget { final String labelText; final DateRangeQuery initialValue; final void Function(DateRangeQuery? query)? onChanged; + final EdgeInsets padding; const FormBuilderExtendedDateRangePicker({ super.key, @@ -18,6 +20,7 @@ class FormBuilderExtendedDateRangePicker extends StatefulWidget { required this.labelText, required this.initialValue, this.onChanged, + required this.padding, }); @override @@ -49,29 +52,36 @@ class _FormBuilderExtendedDateRangePickerState builder: (field) { return Column( children: [ - TextFormField( - controller: _textEditingController, - readOnly: true, - onTap: () => _showExtendedDateRangePicker(field), - decoration: InputDecoration( - prefixIcon: const Icon(Icons.date_range), - labelText: widget.labelText, - suffixIcon: _textEditingController.text.isNotEmpty - ? IconButton( - icon: const Icon(Icons.clear), - onPressed: () { - field.didChange(const UnsetDateRangeQuery()); - }, - ) - : null, + Padding( + padding: widget.padding.copyWith(bottom: 0), + child: TextFormField( + controller: _textEditingController, + readOnly: true, + onTap: () => _showExtendedDateRangePicker(field), + decoration: InputDecoration( + prefixIcon: const Icon(Icons.date_range), + labelText: widget.labelText, + suffixIcon: _textEditingController.text.isNotEmpty + ? IconButton( + icon: const Icon(Icons.clear), + onPressed: () { + field.didChange(const UnsetDateRangeQuery()); + }, + ) + : null, + ), ), ), - MediaQuery.removePadding( - context: context, - removeLeft: true, - removeRight: true, - child: RelativeDateRangePickerHelper(field: field), - ), + RelativeDateRangePickerHelper( + field: field, + padding: widget.padding, + ) + // MediaQuery.removePadding( + //context: context, + //removeLeft: true, + //removeRight: true, + //child: , + //), ], ); }, diff --git a/lib/core/widgets/form_builder_fields/extended_date_range_form_field/relative_date_range_picker_helper.dart b/lib/core/widgets/form_builder_fields/extended_date_range_form_field/relative_date_range_picker_helper.dart index 5a25e87..436685e 100644 --- a/lib/core/widgets/form_builder_fields/extended_date_range_form_field/relative_date_range_picker_helper.dart +++ b/lib/core/widgets/form_builder_fields/extended_date_range_form_field/relative_date_range_picker_helper.dart @@ -6,11 +6,13 @@ import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; class RelativeDateRangePickerHelper extends StatefulWidget { final FormFieldState field; final void Function(DateRangeQuery value)? onChanged; + final EdgeInsets padding; const RelativeDateRangePickerHelper({ super.key, required this.field, this.onChanged, + required this.padding, }); @override @@ -24,25 +26,32 @@ class _RelativeDateRangePickerHelperState Widget build(BuildContext context) { return SizedBox( height: 64, - child: ListView.separated( - itemCount: _options.length, - separatorBuilder: (context, index) => const SizedBox(width: 8.0), - itemBuilder: (context, index) { - final option = _options[index]; - return ColoredChipWrapper( - child: FilterChip( - label: Text(option.title), - onSelected: (isSelected) { - final value = - isSelected ? option.value : const RelativeDateRangeQuery(); - widget.field.didChange(value); - widget.onChanged?.call(value); - }, - selected: widget.field.value == option.value, - ), - ); - }, + child: CustomScrollView( scrollDirection: Axis.horizontal, + slivers: [ + SliverToBoxAdapter(child: SizedBox(width: widget.padding.left)), + SliverList.separated( + itemCount: _options.length, + separatorBuilder: (context, index) => const SizedBox(width: 8.0), + itemBuilder: (context, index) { + final option = _options[index]; + return ColoredChipWrapper( + child: FilterChip( + label: Text(option.title), + onSelected: (isSelected) { + final value = isSelected + ? option.value + : const RelativeDateRangeQuery(); + widget.field.didChange(value); + widget.onChanged?.call(value); + }, + selected: widget.field.value == option.value, + ), + ); + }, + ), + SliverToBoxAdapter(child: SizedBox(width: widget.padding.right)) + ], ), ); } diff --git a/lib/features/changelogs/view/changelog_dialog.dart b/lib/features/changelogs/view/changelog_dialog.dart index 05025f3..a9804b1 100644 --- a/lib/features/changelogs/view/changelog_dialog.dart +++ b/lib/features/changelogs/view/changelog_dialog.dart @@ -63,7 +63,10 @@ class ChangelogDialog extends StatelessWidget { } const _versionNumbers = { - "59": "3.1.5", + "4033": "3.1.8", + "4023": "3.1.7", + "4013": "3.1.6", + "4003": "3.1.5", "58": "3.1.4", "57": "3.1.3", "56": "3.1.2", diff --git a/lib/features/documents/view/widgets/search/document_filter_form.dart b/lib/features/documents/view/widgets/search/document_filter_form.dart index 0618660..0c0dc8c 100644 --- a/lib/features/documents/view/widgets/search/document_filter_form.dart +++ b/lib/features/documents/view/widgets/search/document_filter_form.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_mobile/core/database/tables/local_user_account.dart'; +import 'package:paperless_mobile/core/extensions/flutter_extensions.dart'; import 'package:paperless_mobile/core/repository/label_repository.dart'; import 'package:paperless_mobile/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_extended_date_range_picker.dart'; import 'package:paperless_mobile/features/labels/tags/view/widgets/tags_form_field.dart'; @@ -93,14 +94,14 @@ class _DocumentFilterFormState extends State { List _buildFormFieldList(LabelRepository labelRepository) { return [ - _buildQueryFormField(), + _buildQueryFormField().paddedSymmetrically(horizontal: 12), Align( alignment: Alignment.centerLeft, child: Text( S.of(context)!.advanced, style: Theme.of(context).textTheme.bodySmall, ), - ), + ).paddedLTRB(12, 16, 12, 0), FormBuilderExtendedDateRangePicker( name: DocumentFilterForm.fkCreatedAt, initialValue: widget.initialFilter.created, @@ -108,6 +109,7 @@ class _DocumentFilterFormState extends State { onChanged: (_) { _checkQueryConstraints(); }, + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 12), ), FormBuilderExtendedDateRangePicker( name: DocumentFilterForm.fkAddedAt, @@ -116,17 +118,28 @@ class _DocumentFilterFormState extends State { onChanged: (_) { _checkQueryConstraints(); }, + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 12), ), - _buildCorrespondentFormField(labelRepository.correspondents), - _buildDocumentTypeFormField(labelRepository.documentTypes), - _buildStoragePathFormField(labelRepository.storagePaths), - _buildTagsFormField(labelRepository.tags), - ] - .map((w) => SliverPadding( - padding: widget.padding, - sliver: SliverToBoxAdapter(child: w), - )) - .toList(); + _buildCorrespondentFormField(labelRepository.correspondents) + .paddedSymmetrically( + horizontal: 16, + vertical: 4, + ), + _buildDocumentTypeFormField(labelRepository.documentTypes) + .paddedSymmetrically( + horizontal: 16, + vertical: 4, + ), + _buildStoragePathFormField(labelRepository.storagePaths) + .paddedSymmetrically( + horizontal: 16, + vertical: 4, + ), + _buildTagsFormField(labelRepository.tags).paddedSymmetrically( + horizontal: 16, + vertical: 4, + ), + ].map((e) => SliverToBoxAdapter(child: e)).toList(); } void _checkQueryConstraints() { diff --git a/lib/main.dart b/lib/main.dart index f88b028..c6fb222 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -385,7 +385,7 @@ class _GoRouterShellState extends State { ); }, routerConfig: _router, - debugShowCheckedModeBanner: true, + debugShowCheckedModeBanner: false, title: "Paperless Mobile", theme: buildTheme( brightness: Brightness.light, @@ -397,7 +397,7 @@ class _GoRouterShellState extends State { dynamicScheme: darkDynamic, preferredColorScheme: settings.preferredColorSchemeOption, ), - themeMode: settings.preferredThemeMode, + themeMode: settings.preferredThemeMode, supportedLocales: const [ Locale('en'), Locale('de'), diff --git a/packages/paperless_api/lib/src/models/document_model.dart b/packages/paperless_api/lib/src/models/document_model.dart index 38df520..9cbc03a 100644 --- a/packages/paperless_api/lib/src/models/document_model.dart +++ b/packages/paperless_api/lib/src/models/document_model.dart @@ -73,7 +73,7 @@ class DocumentModel extends Equatable { this.userCanChange, this.permissions, this.customFields = const [], - this.notes = const [], + this.notes = const [] = const [], }); factory DocumentModel.fromJson(Map json) => diff --git a/packages/paperless_api/lib/src/models/permissions/permissions.dart b/packages/paperless_api/lib/src/models/permissions/permissions.dart index 3530f8b..1995baf 100644 --- a/packages/paperless_api/lib/src/models/permissions/permissions.dart +++ b/packages/paperless_api/lib/src/models/permissions/permissions.dart @@ -14,5 +14,6 @@ class Permissions with _$Permissions { @HiveField(1) required UsersAndGroupsPermissions change, }) = _Permissions; - factory Permissions.fromJson(Map json) => _$PermissionsFromJson(json); + factory Permissions.fromJson(Map json) => + _$PermissionsFromJson(json); } diff --git a/pubspec.yaml b/pubspec.yaml index 081c8bd..ed1600c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 3.1.5+59 +version: 3.1.8+403 environment: sdk: ">=3.1.0 <4.0.0" diff --git a/resources/get_it_on_google_play_en.svg b/resources/get_it_on_google_play_en.svg deleted file mode 100644 index e3382f2..0000000 --- a/resources/get_it_on_google_play_en.svg +++ /dev/null @@ -1 +0,0 @@ -fil_get \ No newline at end of file diff --git a/resources/publishing/feature_graphic.xcf b/resources/publishing/feature_graphic.xcf index ef2c87e..23e72c3 100644 Binary files a/resources/publishing/feature_graphic.xcf and b/resources/publishing/feature_graphic.xcf differ diff --git a/scripts/update_changelogs.sh b/scripts/update_changelogs.sh index 2cfc551..c07ba75 100644 --- a/scripts/update_changelogs.sh +++ b/scripts/update_changelogs.sh @@ -9,7 +9,7 @@ function mergeChangelogs () { __target_file=$__target_dir/changelogs_$1.md rm -f $__target_file touch $__target_file - ls $__script_dir/../android/fastlane/metadata/android/$1/changelogs/[0-9]*.txt | tac | while read f; do + ls -1v $__script_dir/../android/fastlane/metadata/android/$1/changelogs/[0-9]*.txt | tac | while read f; do __build_number="${f%.*}" echo "# $(basename -- $__build_number)" >> $__target_file cat $f >> $__target_file