0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-01-07 00:50:23 -05:00

feat(mobile): Removed stay logged in checkbox and made it enabled by default (#1550)

* removed stay logged in checkbox and made it enabled by default

* adds padding to login button

* removed all isSaveLogin

* fix: logout would re-login with previous credential upon app restart

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
This commit is contained in:
martyfuhry 2023-02-05 09:07:02 -05:00 committed by GitHub
parent f38c7a4b7e
commit 16183791f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 73 deletions

View file

@ -13,9 +13,6 @@ class HiveSavedLoginInfo {
@HiveField(2)
String serverUrl;
@HiveField(3, defaultValue: false)
bool isSaveLogin;
@HiveField(4, defaultValue: "")
String accessToken;
@ -23,7 +20,6 @@ class HiveSavedLoginInfo {
required this.email,
required this.password,
required this.serverUrl,
required this.isSaveLogin,
required this.accessToken,
});
}

View file

@ -55,7 +55,6 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
String email,
String password,
String serverUrl,
bool isSavedLoginInfo,
) async {
try {
// Resolve API server endpoint from user provided serverUrl
@ -83,7 +82,6 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
return setSuccessLoginInfo(
accessToken: loginResponse.accessToken,
serverUrl: serverUrl,
isSavedLoginInfo: isSavedLoginInfo,
);
} catch (e) {
HapticFeedback.vibrate();
@ -100,21 +98,9 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
_assetCacheService.invalidate(),
_albumCacheService.invalidate(),
_sharedAlbumCacheService.invalidate(),
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).delete(savedLoginInfoKey)
]);
// Remove login info from local storage
var loginInfo =
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).get(savedLoginInfoKey);
if (loginInfo != null) {
loginInfo.email = "";
loginInfo.password = "";
loginInfo.isSaveLogin = false;
await Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).put(
savedLoginInfoKey,
loginInfo,
);
}
return true;
}
@ -156,7 +142,6 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
Future<bool> setSuccessLoginInfo({
required String accessToken,
required String serverUrl,
required bool isSavedLoginInfo,
}) async {
_apiService.setAccessToken(accessToken);
var userResponseDto = await _apiService.userApi.getMyUserInfo();
@ -181,22 +166,16 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
deviceType: deviceInfo["deviceType"],
);
if (isSavedLoginInfo) {
// Save login info to local storage
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).put(
savedLoginInfoKey,
HiveSavedLoginInfo(
email: "",
password: "",
isSaveLogin: true,
serverUrl: serverUrl,
accessToken: accessToken,
),
);
} else {
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox)
.delete(savedLoginInfoKey);
}
// Save login info to local storage
Hive.box<HiveSavedLoginInfo>(hiveLoginInfoBox).put(
savedLoginInfoKey,
HiveSavedLoginInfo(
email: "",
password: "",
serverUrl: serverUrl,
accessToken: accessToken,
),
);
}
// Register device info

View file

@ -29,7 +29,6 @@ class LoginForm extends HookConsumerWidget {
useTextEditingController.fromValue(TextEditingValue.empty);
final apiService = ref.watch(apiServiceProvider);
final serverEndpointFocusNode = useFocusNode();
final isSaveLoginInfo = useState<bool>(false);
final isLoading = useState<bool>(false);
final isOauthEnable = useState<bool>(false);
final oAuthButtonLabel = useState<String>('OAuth');
@ -75,7 +74,6 @@ class LoginForm extends HookConsumerWidget {
usernameController.text = loginInfo.email;
passwordController.text = loginInfo.password;
serverEndpointController.text = loginInfo.serverUrl;
isSaveLoginInfo.value = loginInfo.isSaveLogin;
}
getServeLoginConfig();
@ -88,7 +86,6 @@ class LoginForm extends HookConsumerWidget {
usernameController.text = 'testuser@email.com';
passwordController.text = 'password';
serverEndpointController.text = 'http://10.1.15.216:2283/api';
isSaveLoginInfo.value = true;
}
return Center(
@ -124,30 +121,6 @@ class LoginForm extends HookConsumerWidget {
controller: serverEndpointController,
focusNode: serverEndpointFocusNode,
),
CheckboxListTile(
activeColor: Theme.of(context).primaryColor,
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
dense: true,
side: const BorderSide(color: Colors.grey, width: 1.5),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
),
enableFeedback: true,
title: const Text(
"login_form_save_login",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.grey,
),
).tr(),
value: isSaveLoginInfo.value,
onChanged: (switchValue) {
if (switchValue != null) {
isSaveLoginInfo.value = switchValue;
}
},
),
if (isLoading.value)
const SizedBox(
width: 24,
@ -161,11 +134,11 @@ class LoginForm extends HookConsumerWidget {
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 18),
LoginButton(
emailController: usernameController,
passwordController: passwordController,
serverEndpointController: serverEndpointController,
isSavedLoginInfo: isSaveLoginInfo.value,
),
if (isOauthEnable.value) ...[
Padding(
@ -181,7 +154,6 @@ class LoginForm extends HookConsumerWidget {
),
OAuthLoginButton(
serverEndpointController: serverEndpointController,
isSavedLoginInfo: isSaveLoginInfo.value,
buttonLabel: oAuthButtonLabel.value,
isLoading: isLoading,
onLoginSuccess: () {
@ -304,14 +276,12 @@ class LoginButton extends ConsumerWidget {
final TextEditingController emailController;
final TextEditingController passwordController;
final TextEditingController serverEndpointController;
final bool isSavedLoginInfo;
const LoginButton({
Key? key,
required this.emailController,
required this.passwordController,
required this.serverEndpointController,
required this.isSavedLoginInfo,
}) : super(key: key);
@override
@ -329,7 +299,6 @@ class LoginButton extends ConsumerWidget {
emailController.text,
passwordController.text,
serverEndpointController.text,
isSavedLoginInfo,
);
if (isAuthenticated) {
@ -361,7 +330,6 @@ class LoginButton extends ConsumerWidget {
class OAuthLoginButton extends ConsumerWidget {
final TextEditingController serverEndpointController;
final bool isSavedLoginInfo;
final ValueNotifier<bool> isLoading;
final VoidCallback onLoginSuccess;
final String buttonLabel;
@ -369,7 +337,6 @@ class OAuthLoginButton extends ConsumerWidget {
const OAuthLoginButton({
Key? key,
required this.serverEndpointController,
required this.isSavedLoginInfo,
required this.isLoading,
required this.onLoginSuccess,
required this.buttonLabel,
@ -407,7 +374,6 @@ class OAuthLoginButton extends ConsumerWidget {
.watch(authenticationProvider.notifier)
.setSuccessLoginInfo(
accessToken: loginResponseDto.accessToken,
isSavedLoginInfo: isSavedLoginInfo,
serverUrl: serverEndpointController.text,
);

View file

@ -29,7 +29,6 @@ class SplashScreenPage extends HookConsumerWidget {
.read(authenticationProvider.notifier)
.setSuccessLoginInfo(
accessToken: loginInfo.accessToken,
isSavedLoginInfo: true,
serverUrl: loginInfo.serverUrl,
);
if (isSuccess) {
@ -47,7 +46,7 @@ class SplashScreenPage extends HookConsumerWidget {
useEffect(
() {
if (loginInfo?.isSaveLogin == true) {
if (loginInfo != null) {
performLoggingIn();
} else {
AutoRouter.of(context).replace(const LoginRoute());