Skip to content

Commit

Permalink
TW-140: Handle request photos and storage permission in view
Browse files Browse the repository at this point in the history
  • Loading branch information
nqhhdev authored and hoangdat committed Jun 16, 2023
1 parent 20d0012 commit 0451dfc
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 32 deletions.
22 changes: 22 additions & 0 deletions assets/images/ic_photos_setting.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 3 additions & 1 deletion assets/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2638,5 +2638,7 @@
}
},
"addACaption": "Add a caption...",
"noImagesFound": "No Images found"
"noImagesFound": "No Images found",
"captionForImagesIsNotSupportYet": "Caption for images is not support yet.",
"tapToAllowAccessToYourGallery": "Tap to allow access to your Gallery"
}
16 changes: 11 additions & 5 deletions lib/pages/chat/chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import 'dart:io';
import 'package:fluffychat/di/global/get_it_initializer.dart';
import 'package:fluffychat/pages/forward/forward.dart';
import 'package:fluffychat/utils/network_connection_service.dart';
import 'package:collection/collection.dart';
import 'package:fluffychat/presentation/extensions/asset_entity_extension.dart';
import 'package:fluffychat/utils/voip/permission_service.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
Expand All @@ -21,6 +21,7 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:image_picker/image_picker.dart';
import 'package:linagora_design_flutter/images_picker/images_picker.dart' hide ImagePicker;
import 'package:matrix/matrix.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:record/record.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
import 'package:shared_preferences/shared_preferences.dart';
Expand All @@ -35,7 +36,6 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/ios_badge_client_extensio
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:photo_manager/photo_manager.dart';
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
import '../../utils/matrix_sdk_extensions/matrix_file_extension.dart';
Expand Down Expand Up @@ -418,9 +418,6 @@ class ChatController extends State<Chat> {
for (final entity in selectedAssets) {
await sendImage(entity);
}

imagePickerController.clearAssetCounter();
numberSelectedImagesNotifier.value = 0;
}

void openCameraAction() async {
Expand Down Expand Up @@ -1162,6 +1159,15 @@ class ChatController extends State<Chat> {
editEvent = null;
});

Future<PermissionStatus>? getCurrentPhotoPermission() {
return PermissionHandlerService().requestPermissionForPhotoActions();
}

void removeAllImageSelected() {
imagePickerController.clearAssetCounter();
numberSelectedImagesNotifier.value = 0;
}

@override
Widget build(BuildContext context) => ChatView(this);
}
Expand Down
51 changes: 37 additions & 14 deletions lib/pages/chat/chat_input_row.dart
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@

import 'package:fluffychat/pages/chat/chat_input_row_style.dart';
import 'package:fluffychat/resource/image_paths.dart';
import 'package:fluffychat/utils/voip/permission_service.dart';
import 'package:fluffychat/widgets/twake_components/twake_icon_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'package:animations/animations.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:keyboard_shortcuts/keyboard_shortcuts.dart';
import 'package:linagora_design_flutter/colors/linagora_ref_colors.dart';
import 'package:linagora_design_flutter/colors/linagora_sys_colors.dart';
import 'package:matrix/matrix.dart';

import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/avatar/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:linagora_design_flutter/images_picker/images_picker.dart';
import 'package:permission_handler/permission_handler.dart';
import 'chat.dart';
import 'input_bar.dart';

Expand Down Expand Up @@ -89,10 +92,16 @@ class ChatInputRow extends StatelessWidget {
tooltip: L10n.of(context)!.more,
margin: const EdgeInsets.only(right: 4.0),
icon: Icons.add_circle_outline,
onPressed: () => showImagesPickerBottomSheet(
controller: controller,
context: context,
),
onPressed: () async {
final currentPermission = await controller.getCurrentPhotoPermission();
if (currentPermission != null) {
showImagesPickerBottomSheet(
controller: controller,
context: context,
permissionStatus: currentPermission
).whenComplete(() => controller.removeAllImageSelected());
}
},
),
if (controller.matrix!.isMultiAccount &&
controller.matrix!.hasComplexBundles &&
Expand Down Expand Up @@ -260,14 +269,17 @@ class _ChatAccountPicker extends StatelessWidget {
}
}

void showImagesPickerBottomSheet({
Future<void> showImagesPickerBottomSheet({
required BuildContext context,
required ChatController controller,
}) {
ImagePicker.showImagesGridBottomSheet(
required PermissionStatus permissionStatus,
}) async {
return await ImagePicker.showImagesGridBottomSheet(
context: context,
controller: controller.imagePickerController,
backgroundImageCamera: const AssetImage("assets/verification.png"),
permissionStatus: permissionStatus,
assetBackgroundColor: LinagoraSysColors.material().background,
counterImageBuilder: (counterImage) {
if (counterImage == 0) {
return const SizedBox.shrink();
Expand All @@ -285,9 +297,6 @@ void showImagesPickerBottomSheet({
),
);
},
noImagesWidget: Center(
child: Text(L10n.of(context)!.noImagesFound),
),
bottomWidget: ValueListenableBuilder(
valueListenable: controller.numberSelectedImagesNotifier,
builder: (context, value, child) {
Expand Down Expand Up @@ -316,7 +325,7 @@ void showImagesPickerBottomSheet({
Expanded(
child: TextFormField(
onTap: () => Fluttertoast.showToast(
msg: "Caption for images is not support yet.",
msg: L10n.of(context)!.captionForImagesIsNotSupportYet,
gravity: ToastGravity.CENTER,
),
decoration: InputDecoration(
Expand Down Expand Up @@ -372,6 +381,20 @@ void showImagesPickerBottomSheet({
const SizedBox(height: 8.0,),
],
),
)
);
),
goToSettingsWidget: Column(
children: [
SvgPicture.asset(ImagePaths.icPhotosSettingPermission,
width: 40,
height: 40,
),
Text(L10n.of(context)!.tapToAllowAccessToYourGallery,
style: Theme.of(context).textTheme.titleSmall?.copyWith(
color: LinagoraRefColors.material().neutral
),
textAlign: TextAlign.center,
),
],
),
);
}
1 change: 1 addition & 0 deletions lib/resource/image_paths.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class ImagePaths {
static String get icStatus => _getImagePath('ic_status.svg');
static String get icEmptyGroupChat => _getImagePath('ic_empty_group_chat.svg');
static String get icTwakeLogo => _getImagePath('ic_twake_logo.svg');
static String get icPhotosSettingPermission => _getImagePath('ic_photos_setting.svg');

static String _getImagePath(String imageName) {
return AssetsPaths.images + imageName;
Expand Down
20 changes: 11 additions & 9 deletions lib/utils/voip/permission_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,39 @@ class PermissionHandlerService {
PermissionHandlerService._internal();


Future<PermissionStatus> requestPermissionForPhotoActions() {
Future<PermissionStatus>? requestPermissionForPhotoActions() {
if (Platform.isIOS) {
return _handlePhotosPermissionIOSAction();
} else {
} else if (Platform.isAndroid) {
return _handlePhotosPermissionAndroidAction();
} else {
return null;
}
}

Future<PermissionStatus> _handlePhotosPermissionIOSAction() async {
final currentStatus = await Permission.photos.status;
return _handlePermission(currentStatus);
return _handlePhotoPermission(currentStatus);
}

Future<PermissionStatus> _handlePhotosPermissionAndroidAction() async {
final currentStatus = await Permission.storage.status;
return _handlePermission(currentStatus);
return _handlePhotoPermission(currentStatus);
}


Future<PermissionStatus> _handlePermission(PermissionStatus currentStatus) async {
Future<PermissionStatus> _handlePhotoPermission(PermissionStatus currentStatus) async {
switch (currentStatus) {
case PermissionStatus.permanentlyDenied:
case PermissionStatus.denied:
case PermissionStatus.limited:
final newStatus = Platform.isIOS
? await Permission.mediaLibrary.request()
? await Permission.photos.request()
: await Permission.storage.request();
return newStatus.isGranted ? PermissionStatus.granted : newStatus;

case PermissionStatus.granted:
case PermissionStatus.limited:
case PermissionStatus.provisional:
case PermissionStatus.restricted:
case PermissionStatus.permanentlyDenied:
return currentStatus;
}
}
Expand Down
6 changes: 3 additions & 3 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1326,7 +1326,7 @@ packages:
description:
path: "."
ref: master
resolved-ref: "80f53ebbd3b74d82ab5f6dcc26faa584326967f9"
resolved-ref: "0882d42be9324e14777fe99b9760546989bf8b73"
url: "[email protected]:linagora/linagora-design-flutter.git"
source: git
version: "0.0.1"
Expand Down Expand Up @@ -1670,10 +1670,10 @@ packages:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84"
sha256: de20a5c3269229c1ae2e5a6b822f6cb59578b23e8255c93fbeebfc82116e6b11
url: "https://pub.dev"
source: hosted
version: "3.9.0"
version: "3.10.0"
permission_handler_windows:
dependency: transitive
description:
Expand Down

0 comments on commit 0451dfc

Please sign in to comment.