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

View File

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

View File

@ -6,8 +6,9 @@ import { clearEncryptedSession, encryptSession, setupPasscode } from '../../../u
import { forceUpdateCache, serializeGlobal } from '../../cache'; import { forceUpdateCache, serializeGlobal } from '../../cache';
import { onBeforeUnload } from '../../../util/schedulers'; import { onBeforeUnload } from '../../../util/schedulers';
let noLockOnUnload = false;
onBeforeUnload(() => { onBeforeUnload(() => {
if (getGlobal().passcode.hasPasscode) { if (getGlobal().passcode.hasPasscode && !noLockOnUnload) {
clearStoredSession(); clearStoredSession();
} }
}); });
@ -80,3 +81,7 @@ addActionHandler('setPasscodeError', (global, actions, payload) => {
addActionHandler('clearPasscodeError', (global) => { addActionHandler('clearPasscodeError', (global) => {
return updatePasscodeSettings(global, { error: undefined }); 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 { initCache, loadCache } from './cache';
import { cloneDeep } from '../util/iteratees'; import { cloneDeep } from '../util/iteratees';
import { updatePasscodeSettings } from './reducers'; import { updatePasscodeSettings } from './reducers';
import { clearStoredSession } from '../util/sessions';
initCache(); initCache();
@ -18,6 +19,8 @@ addActionHandler('init', () => {
global = updatePasscodeSettings(global, { global = updatePasscodeSettings(global, {
isScreenLocked: true, isScreenLocked: true,
}); });
clearStoredSession();
} }
return global; return global;

View File

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

View File

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