From fdf055ae222ac2063fa87759479018248657fd63 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Mon, 26 Aug 2024 21:33:01 +0300 Subject: feature(mobile): Allow configuring uploaded image quality in the mobile app --- apps/mobile/app/dashboard/(tabs)/index.tsx | 2 +- apps/mobile/app/dashboard/(tabs)/settings.tsx | 42 +++++++++++++++++++++++++-- apps/mobile/components/ui/PageTitle.tsx | 13 +++++++-- apps/mobile/lib/settings.ts | 18 +++++++----- apps/mobile/package.json | 1 + pnpm-lock.yaml | 20 +++++++++++++ 6 files changed, 84 insertions(+), 12 deletions(-) diff --git a/apps/mobile/app/dashboard/(tabs)/index.tsx b/apps/mobile/app/dashboard/(tabs)/index.tsx index dc9871e7..bd7ce3ea 100644 --- a/apps/mobile/app/dashboard/(tabs)/index.tsx +++ b/apps/mobile/app/dashboard/(tabs)/index.tsx @@ -34,7 +34,7 @@ function HeaderRight({ } else if (nativeEvent.event === "library") { const result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, - quality: 0, + quality: settings.imageQuality, allowsMultipleSelection: false, }); if (!result.canceled) { diff --git a/apps/mobile/app/dashboard/(tabs)/settings.tsx b/apps/mobile/app/dashboard/(tabs)/settings.tsx index 73d1b42d..18d3d243 100644 --- a/apps/mobile/app/dashboard/(tabs)/settings.tsx +++ b/apps/mobile/app/dashboard/(tabs)/settings.tsx @@ -1,6 +1,10 @@ +import { useEffect } from "react"; import { Text, View } from "react-native"; +import { Slider } from "react-native-awesome-slider"; +import { useSharedValue } from "react-native-reanimated"; import { Button } from "@/components/ui/Button"; import CustomSafeAreaView from "@/components/ui/CustomSafeAreaView"; +import { Divider } from "@/components/ui/Divider"; import PageTitle from "@/components/ui/PageTitle"; import { useSession } from "@/lib/session"; import useAppSettings from "@/lib/settings"; @@ -8,7 +12,19 @@ import { api } from "@/lib/trpc"; export default function Dashboard() { const { logout } = useSession(); - const { settings, isLoading: isSettingsLoading } = useAppSettings(); + const { + settings, + setSettings, + isLoading: isSettingsLoading, + } = useAppSettings(); + + const imageQuality = useSharedValue(0); + const imageQualityMin = useSharedValue(0); + const imageQualityMax = useSharedValue(100); + + useEffect(() => { + imageQuality.value = settings.imageQuality * 100; + }, [settings]); const { data, error, isLoading } = api.users.whoami.useQuery(); @@ -30,8 +46,30 @@ export default function Dashboard() { {isLoading ? "Loading ..." : data?.email} -