mirror of
https://github.com/immich-app/immich.git
synced 2025-10-24 15:29:03 -04:00
* feat(mobile): Add Kid (Readonly) Mode toggle This commit introduces a "Kid (Readonly) Mode" feature. - Adds a `KidModeProvider` to manage the state of Kid Mode. - Implements a `KidModeCheckbox` widget in the app bar dialog to toggle Kid Mode. - When Kid Mode is enabled, - Disables selecting the multigrid & the bottom bar - Removes the top bar from view Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Reverts the changes to devtools_options.yaml file Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> refactor: replace Kid Mode with Readonly Mode This commit replaces the "Kid Mode" feature with a more generic "Readonly Mode". - Renamed `KidModeProvider` to `ReadonlyModeProvider`. - Readonly Mode state is now persisted in app settings. - Added a new app setting `allowUserAvatarOverride` to toggle read-only mode. - Updated translations. - Added a message in the app bar dialog indicating when read-only mode is active. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Address comments - - Removes the `allowUserAvatarOverride` setting. - Hides the bottom gallery bar when read-only mode is enabled. - Adds an icon on the main app bar when read-only mode is enabled with a snackbar. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Update to snackbar - When toggling readonly mode from either the settings or the app bar, a snackbar notification will now appear. - The readonly mode message in the profile drawer has been restyled. - The upload button in the app bar is now hidden when readonly mode is enabled. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Removes clearing of snackbar Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Address Comments - Consolidated snackbar messages for enabling/disabling readonly mode. - Ensured the "Select All" icon in asset group titles is hidden in readonly mode. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Adds in the missing translation keys for readonly_mode Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Fix translation Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Fix check failure for BorderRadius Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Changes: - Adjusted AppBar background color in readonly mode. - Removes cross-out pencil icon button in favor of above. - Hides the "Edit" icon next to date/time, disable description and onTap for people and location when readonly mode is enabled. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> Address comments from Alex - Moved readonly mode check to `GalleryAppBar` to hide the entire `TopControlAppBar` when readonly mode is enabled. - Changed `toggleReadonlyMode` in `ImmichAppBar` to directly toggle the state. Signed-off-by: Sudheer Puthana <Sud-Puth@users.noreply.github.com> migrate readonly mode to new beta timeline remove readonly mode from legacy UI only show readonly functionality when on beta timeline simplify selection icon update generated provider chore: more formatting * fix: bad merge * chore: use Notifier for readonlyModeProvider * fix: drag select now honors readonly mode * fix: disable asset bottom sheet in readonly * fix: disable editing user icon when in readonly * chore: remove generated file * fix: disable tabs instead entire tab bar This solves the issues with the scrubber * chore: remove unneeded import * chore: lint * remove unused condition in bottomsheet --------- Co-authored-by: Brandon Wees <brandonwees@gmail.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
111 lines
2.8 KiB
Dart
111 lines
2.8 KiB
Dart
import 'package:immich_mobile/domain/models/user.model.dart';
|
|
|
|
/// Key for each possible value in the `Store`.
|
|
/// Defines the data type for each value
|
|
enum StoreKey<T> {
|
|
version<int>._(0),
|
|
assetETag<String>._(1),
|
|
currentUser<UserDto>._(2),
|
|
deviceIdHash<int>._(3),
|
|
deviceId<String>._(4),
|
|
backupFailedSince<DateTime>._(5),
|
|
backupRequireWifi<bool>._(6),
|
|
backupRequireCharging<bool>._(7),
|
|
backupTriggerDelay<int>._(8),
|
|
serverUrl<String>._(10),
|
|
accessToken<String>._(11),
|
|
serverEndpoint<String>._(12),
|
|
autoBackup<bool>._(13),
|
|
backgroundBackup<bool>._(14),
|
|
sslClientCertData<String>._(15),
|
|
sslClientPasswd<String>._(16),
|
|
// user settings from [AppSettingsEnum] below:
|
|
loadPreview<bool>._(100),
|
|
loadOriginal<bool>._(101),
|
|
themeMode<String>._(102),
|
|
tilesPerRow<int>._(103),
|
|
dynamicLayout<bool>._(104),
|
|
groupAssetsBy<int>._(105),
|
|
uploadErrorNotificationGracePeriod<int>._(106),
|
|
backgroundBackupTotalProgress<bool>._(107),
|
|
backgroundBackupSingleProgress<bool>._(108),
|
|
storageIndicator<bool>._(109),
|
|
thumbnailCacheSize<int>._(110),
|
|
imageCacheSize<int>._(111),
|
|
albumThumbnailCacheSize<int>._(112),
|
|
selectedAlbumSortOrder<int>._(113),
|
|
advancedTroubleshooting<bool>._(114),
|
|
logLevel<int>._(115),
|
|
preferRemoteImage<bool>._(116),
|
|
loopVideo<bool>._(117),
|
|
// map related settings
|
|
mapShowFavoriteOnly<bool>._(118),
|
|
mapRelativeDate<int>._(119),
|
|
selfSignedCert<bool>._(120),
|
|
mapIncludeArchived<bool>._(121),
|
|
ignoreIcloudAssets<bool>._(122),
|
|
selectedAlbumSortReverse<bool>._(123),
|
|
mapThemeMode<int>._(124),
|
|
mapwithPartners<bool>._(125),
|
|
enableHapticFeedback<bool>._(126),
|
|
customHeaders<String>._(127),
|
|
|
|
// theme settings
|
|
primaryColor<String>._(128),
|
|
dynamicTheme<bool>._(129),
|
|
colorfulInterface<bool>._(130),
|
|
|
|
syncAlbums<bool>._(131),
|
|
|
|
// Auto endpoint switching
|
|
autoEndpointSwitching<bool>._(132),
|
|
preferredWifiName<String>._(133),
|
|
localEndpoint<String>._(134),
|
|
externalEndpointList<String>._(135),
|
|
|
|
// Video settings
|
|
loadOriginalVideo<bool>._(136),
|
|
manageLocalMediaAndroid<bool>._(137),
|
|
|
|
// Read-only Mode settings
|
|
readonlyModeEnabled<bool>._(138),
|
|
|
|
// Experimental stuff
|
|
photoManagerCustomFilter<bool>._(1000),
|
|
betaPromptShown<bool>._(1001),
|
|
betaTimeline<bool>._(1002),
|
|
enableBackup<bool>._(1003),
|
|
useWifiForUploadVideos<bool>._(1004),
|
|
useWifiForUploadPhotos<bool>._(1005);
|
|
|
|
const StoreKey._(this.id);
|
|
final int id;
|
|
Type get type => T;
|
|
}
|
|
|
|
class StoreDto<T> {
|
|
final StoreKey<T> key;
|
|
final T? value;
|
|
|
|
const StoreDto(this.key, this.value);
|
|
|
|
@override
|
|
String toString() {
|
|
return '''
|
|
StoreDto: {
|
|
key: $key,
|
|
value: ${value ?? '<NA>'},
|
|
}''';
|
|
}
|
|
|
|
@override
|
|
bool operator ==(covariant StoreDto<T> other) {
|
|
if (identical(this, other)) return true;
|
|
|
|
return other.key == key && other.value == value;
|
|
}
|
|
|
|
@override
|
|
int get hashCode => key.hashCode ^ value.hashCode;
|
|
}
|