Lock Screen: Allow switching to other clients, fix qiuick re-lock

This commit is contained in:
Alexander Zinchuk 2022-06-01 19:35:33 +04:00
parent 745363609e
commit 2d33c88603
6 changed files with 23 additions and 3 deletions

View File

@ -107,6 +107,7 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
openChatByUsername,
lockScreen,
requestNextSettingsScreen,
skipLockOnUnload,
} = getActions();
const lang = useLang();
@ -221,7 +222,12 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
const handleSwitchToWebK = useCallback(() => {
setPermanentWebVersion('K');
clearWebsync();
}, []);
skipLockOnUnload();
}, [skipLockOnUnload]);
const handleSwitchToLegacy = useCallback(() => {
skipLockOnUnload();
}, [skipLockOnUnload]);
const handleOpenTipsChat = useCallback(() => {
openChatByUsername({ username: lang('Settings.TipsUsername') });
@ -342,6 +348,7 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
<MenuItem
icon="char-W"
href={LEGACY_VERSION_URL}
onClick={handleSwitchToLegacy}
>
Switch to Old Version
</MenuItem>

View File

@ -119,8 +119,11 @@ addActionHandler('goToAuthQrCode', (global) => {
});
addActionHandler('saveSession', (global, actions, payload) => {
const { sessionData } = payload;
if (global.passcode.isScreenLocked) {
return;
}
const { sessionData } = payload;
if (sessionData) {
storeSession(payload.sessionData, global.currentUserId);
} else {

View File

@ -6,8 +6,9 @@ import { clearEncryptedSession, encryptSession, setupPasscode } from '../../../u
import { forceUpdateCache, serializeGlobal } from '../../cache';
import { onBeforeUnload } from '../../../util/schedulers';
let noLockOnUnload = false;
onBeforeUnload(() => {
if (getGlobal().passcode.hasPasscode) {
if (getGlobal().passcode.hasPasscode && !noLockOnUnload) {
clearStoredSession();
}
});
@ -80,3 +81,7 @@ addActionHandler('setPasscodeError', (global, actions, payload) => {
addActionHandler('clearPasscodeError', (global) => {
return updatePasscodeSettings(global, { error: undefined });
});
addActionHandler('skipLockOnUnload', () => {
noLockOnUnload = true;
});

View File

@ -5,6 +5,7 @@ import { IS_MOCKED_CLIENT } from '../config';
import { initCache, loadCache } from './cache';
import { cloneDeep } from '../util/iteratees';
import { updatePasscodeSettings } from './reducers';
import { clearStoredSession } from '../util/sessions';
initCache();
@ -18,6 +19,8 @@ addActionHandler('init', () => {
global = updatePasscodeSettings(global, {
isScreenLocked: true,
});
clearStoredSession();
}
return global;

View File

@ -886,6 +886,7 @@ export interface ActionPayloads {
resetInvalidUnlockAttempts: never;
setPasscodeError: { error: string };
clearPasscodeError: never;
skipLockOnUnload: never;
// Settings
requestNextSettingsScreen: SettingsScreens;

View File

@ -54,6 +54,7 @@ export function clearStoredSession() {
'dc',
...DC_IDS.map((dcId) => `dc${dcId}_auth_key`),
...DC_IDS.map((dcId) => `dc${dcId}_hash`),
...DC_IDS.map((dcId) => `dc${dcId}_server_salt`),
].forEach((key) => {
localStorage.removeItem(key);
});