[mob] Use flagservice for map consent

This commit is contained in:
Neeraj Gupta
2025-03-03 14:30:52 +05:30
parent e34b70a8f9
commit f8e2714315
6 changed files with 81 additions and 47 deletions

View File

@@ -17,7 +17,6 @@ class UserRemoteFlagService {
final SharedPreferences _prefs;
static const String recoveryVerificationFlag = "recoveryKeyVerified";
static const String mapEnabled = "mapEnabled";
static const String mlEnabled = "faceSearchEnabled";
static const String videoStreamingEnabled = "videoStreamingEnabled";
static const String needRecoveryKeyVerification =
@@ -44,9 +43,7 @@ class UserRemoteFlagService {
bool getCachedBoolValue(String key) {
bool defaultValue = false;
if (key == mapEnabled) {
defaultValue = flagService.mapEnabled;
} else if (key == mlEnabled) {
if (key == mlEnabled) {
defaultValue = flagService.hasGrantedMLConsent;
}
return _prefs.getBool(key) ?? defaultValue;

View File

@@ -2,15 +2,13 @@ import "package:flutter/cupertino.dart";
import "package:photos/generated/l10n.dart";
import 'package:photos/models/button_result.dart';
import "package:photos/service_locator.dart";
import "package:photos/services/user_remote_flag_service.dart";
import "package:photos/ui/components/buttons/button_widget.dart";
import "package:photos/ui/components/dialog_widget.dart";
import "package:photos/ui/components/models/button_type.dart";
import "package:photos/utils/toast_util.dart";
Future<bool> requestForMapEnable(BuildContext context) async {
const String flagName = UserRemoteFlagService.mapEnabled;
if (userRemoteFlagService.getCachedBoolValue(flagName)) {
if (flagService.mapEnabled) {
return true;
}
@@ -26,10 +24,7 @@ Future<bool> requestForMapEnable(BuildContext context) async {
labelText: S.of(context).enableMaps,
isInAlert: true,
onTap: () async {
await userRemoteFlagService.setBoolValue(
flagName,
true,
);
await flagService.setMapEnabled(true);
},
),
ButtonWidget(
@@ -52,5 +47,5 @@ Future<bool> requestForMapEnable(BuildContext context) async {
//For debugging.
void disableMap() {
userRemoteFlagService.setBoolValue(UserRemoteFlagService.mapEnabled, false);
flagService.setMapEnabled(false);
}

View File

@@ -3,7 +3,6 @@ import "package:photos/core/error-reporting/super_logging.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/preview_video_store.dart";
import "package:photos/services/user_remote_flag_service.dart";
import 'package:photos/theme/ente_theme.dart';
import 'package:photos/ui/components/buttons/icon_button_widget.dart';
import 'package:photos/ui/components/captioned_text_widget.dart';
@@ -101,19 +100,10 @@ class AdvancedSettingsScreen extends StatelessWidget {
singleBorderRadius: 8,
alignCaptionedTextToLeft: true,
trailingWidget: ToggleSwitchWidget(
value: () => userRemoteFlagService.getCachedBoolValue(
UserRemoteFlagService.mapEnabled,
),
value: () => flagService.mapEnabled,
onChanged: () async {
final isEnabled =
userRemoteFlagService.getCachedBoolValue(
UserRemoteFlagService.mapEnabled,
);
await userRemoteFlagService.setBoolValue(
UserRemoteFlagService.mapEnabled,
!isEnabled,
);
final isEnabled = flagService.mapEnabled;
await flagService.setMapEnabled(!isEnabled);
},
),
),

View File

@@ -11,7 +11,6 @@ import "package:photos/generated/l10n.dart";
import "package:photos/models/file/file.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/search_service.dart";
import "package:photos/services/user_remote_flag_service.dart";
import "package:photos/states/location_screen_state.dart";
import "package:photos/theme/ente_theme.dart";
import "package:photos/ui/components/buttons/chip_button_widget.dart";
@@ -183,8 +182,7 @@ class _InfoMapState extends State<InfoMap> {
@override
void initState() {
super.initState();
_hasEnabledMap = userRemoteFlagService
.getCachedBoolValue(UserRemoteFlagService.mapEnabled);
_hasEnabledMap = flagService.mapEnabled;
_fileLat = widget.file.location!.latitude!;
_fileLng = widget.file.location!.longitude!;

View File

@@ -26,6 +26,31 @@ class RemoteFlags {
required this.castUrl,
});
// CopyWith
RemoteFlags copyWith({
bool? enableStripe,
bool? disableCFWorker,
bool? mapEnabled,
bool? faceSearchEnabled,
bool? recoveryKeyVerified,
bool? internalUser,
bool? betaUser,
bool? enableMobMultiPart,
String? castUrl,
}) {
return RemoteFlags(
enableStripe: enableStripe ?? this.enableStripe,
disableCFWorker: disableCFWorker ?? this.disableCFWorker,
mapEnabled: mapEnabled ?? this.mapEnabled,
faceSearchEnabled: faceSearchEnabled ?? this.faceSearchEnabled,
recoveryKeyVerified: recoveryKeyVerified ?? this.recoveryKeyVerified,
internalUser: internalUser ?? this.internalUser,
betaUser: betaUser ?? this.betaUser,
enableMobMultiPart: enableMobMultiPart ?? this.enableMobMultiPart,
castUrl: castUrl ?? this.castUrl,
);
}
static RemoteFlags defaultValue = RemoteFlags(
enableStripe: Platform.isAndroid,
disableCFWorker: false,

View File

@@ -38,6 +38,28 @@ class FlagService {
}
}
bool get disableCFWorker => flags.disableCFWorker;
bool get internalUser => flags.internalUser || kDebugMode;
bool get betaUser => flags.betaUser;
bool get internalOrBetaUser => internalUser || betaUser;
bool get enableStripe => Platform.isIOS ? false : flags.enableStripe;
bool get mapEnabled => flags.mapEnabled;
bool get isBetaUser => internalUser || flags.betaUser;
bool get recoveryKeyVerified => flags.recoveryKeyVerified;
bool get hasGrantedMLConsent => flags.faceSearchEnabled;
bool get enableMobMultiPart => flags.enableMobMultiPart || internalUser;
String get castUrl => flags.castUrl;
Completer<void>? _fetchCompleter;
Future<void> _fetch() async {
if (_fetchCompleter != null) {
@@ -65,25 +87,32 @@ class FlagService {
}
}
bool get disableCFWorker => flags.disableCFWorker;
Future<void> _updateKeyValue(String key, String value) async {
try {
final response = await _enteDio.post(
"/remote-store/update",
data: {
"key": key,
"value": value,
},
);
if (response.statusCode != HttpStatus.ok) {
throw Exception("Unexpected state");
}
} catch (e) {
debugPrint("Failed to set flag for $key $e");
rethrow;
}
}
bool get internalUser => flags.internalUser || kDebugMode;
Future<void> setMapEnabled(bool isEnabled) async {
await _updateKeyValue("mapEnabled", isEnabled.toString());
_updateFlags(flags.copyWith(mapEnabled: isEnabled));
}
bool get betaUser => flags.betaUser;
bool get internalOrBetaUser => internalUser || betaUser;
bool get enableStripe => Platform.isIOS ? false : flags.enableStripe;
bool get mapEnabled => flags.mapEnabled;
bool get isBetaUser => internalUser || flags.betaUser;
bool get recoveryKeyVerified => flags.recoveryKeyVerified;
bool get hasGrantedMLConsent => flags.faceSearchEnabled;
bool get enableMobMultiPart => flags.enableMobMultiPart || internalUser;
String get castUrl => flags.castUrl;
void _updateFlags(RemoteFlags flags) {
_flags = flags;
_prefs.setString("remote_flags", flags.toJson());
_fetch().ignore();
}
}