From cea91ea43e2ed9018d5a5d73384e655719ceb507 Mon Sep 17 00:00:00 2001 From: adelelimi Date: Tue, 5 Aug 2025 16:10:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E9=80=81tip=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=8A=E8=A7=A3=E5=86=B3=E6=A6=82=E7=8E=87?= =?UTF-8?q?=E6=94=B6=E4=B8=8D=E5=88=B0=E6=88=90=E5=8A=9F=E7=9A=84onresult?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: adelelimi --- entry/src/main/ets/common/utils/AuthUtils.ts | 13 ++-- entry/src/main/ets/common/utils/FuncUtils.ts | 4 ++ entry/src/main/ets/common/vm/Constants.ts | 19 +++++- .../ets/extensionability/UserAuthAbility.ts | 4 +- entry/src/main/ets/pages/Index.ets | 4 +- .../main/ets/pages/components/FaceAuth.ets | 18 +++-- .../ets/pages/components/FingerprintAuth.ets | 66 +++++++++++++------ .../ets/pages/components/PasswordAuth.ets | 6 +- 8 files changed, 98 insertions(+), 36 deletions(-) diff --git a/entry/src/main/ets/common/utils/AuthUtils.ts b/entry/src/main/ets/common/utils/AuthUtils.ts index 53774fd..b563f84 100644 --- a/entry/src/main/ets/common/utils/AuthUtils.ts +++ b/entry/src/main/ets/common/utils/AuthUtils.ts @@ -15,13 +15,15 @@ import userAuth from '@ohos.userIAM.userAuth'; import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; -import Constants from '../vm/Constants'; +import Constants, { TipCode } from '../vm/Constants'; import LogUtils from './LogUtils'; +import JSON from '@ohos.util.json'; const TAG = 'AuthUtils'; export default class AuthUtils { private static authUtilsInstance: AuthUtils; + private widgetContextId: bigint = BigInt(AppStorage.get('widgetContextId')) ?? BigInt(-1); public static getInstance(): AuthUtils { if (!AuthUtils.authUtilsInstance) { @@ -30,16 +32,19 @@ export default class AuthUtils { return AuthUtils.authUtilsInstance; } - sendNotice(cmd: string, type: Array): void { + sendNotice(cmd: string, type: Array, tipCode: TipCode = TipCode.NORMAL): void { try { const eventData = { - widgetContextId: AppStorage.get('widgetContextId'), + widgetContextId: this.widgetContextId, event: cmd, version: Constants.noticeVersion, payload: { - type: type + type: type, + tipCode: tipCode } }; + LogUtils.info(TAG, 'widgetContextId: ' + this.widgetContextId); + LogUtils.info(TAG, 'tipCode: ' + tipCode); const jsonEventData = JSON.stringify(eventData); LogUtils.info(TAG, 'sendNotice start eventData: ' + jsonEventData); userAuth.sendNotice(userAuth.NoticeType.WIDGET_NOTICE, jsonEventData); diff --git a/entry/src/main/ets/common/utils/FuncUtils.ts b/entry/src/main/ets/common/utils/FuncUtils.ts index 4049065..0b4d303 100644 --- a/entry/src/main/ets/common/utils/FuncUtils.ts +++ b/entry/src/main/ets/common/utils/FuncUtils.ts @@ -28,6 +28,10 @@ export class FuncUtils { return textEncoder.encode(value); } + getStringFromCharCode(input: Uint8Array): string { + return String.fromCharCode(...input); + } + getDialogType(type: Array): DialogType { if (type) { if (type.includes(userAuth.UserAuthType.PIN)) { diff --git a/entry/src/main/ets/common/vm/Constants.ts b/entry/src/main/ets/common/vm/Constants.ts index 2cad77f..c99fbb2 100644 --- a/entry/src/main/ets/common/vm/Constants.ts +++ b/entry/src/main/ets/common/vm/Constants.ts @@ -48,6 +48,8 @@ export default class Constants { static noticeEventWidgetLoaded = 'EVENT_AUTH_WIDGET_LOADED'; static noticeEventWidgetReleased = 'EVENT_AUTH_WIDGET_RELEASED'; static noticeEventUserNavigation = 'EVENT_AUTH_USER_NAVIGATION'; + static noticeEventProcessTerminate = 'EVENT_AUTH_PROCESS_TERMINATE'; + static noticeEventAuthSendTip = 'EVENT_AUTH_SEND_TIP'; static numKeyBoard : NumKeyBoardItem[] = [ { @@ -149,7 +151,9 @@ export interface CmdData { remainAttempts: number, lockoutDuration: number, result: number, - sensorInfo?: string + sensorInfo?: string, + tipType?: number, + tipInfo?: Uint8Array } export interface CmdType { @@ -173,6 +177,7 @@ export interface WantParams { navigationButtonText?: string, windowModeType: string, cmd: CmdType[], + widgetContextIdStr?: string, } export interface WidgetCommand { @@ -189,4 +194,14 @@ export enum CmdNotifyEvents { CMD_NOTIFY_AUTH_START = 'CMD_NOTIFY_AUTH_START', CMD_NOTIFY_AUTH_RESULT = 'CMD_NOTIFY_AUTH_RESULT', CMD_NOTIFY_AUTH_TIP = 'CMD_NOTIFY_AUTH_TIP' -} \ No newline at end of file +} + +export enum TipCode { + NORMAL = -1, + // 超时 + TIMEOUT = 2, + // 临时冻结 + TEMPORARILY_LOCKED = 3, + // 永久冻结 + PERMANENTLY_LOCKED = 4, +} diff --git a/entry/src/main/ets/extensionability/UserAuthAbility.ts b/entry/src/main/ets/extensionability/UserAuthAbility.ts index 36bb785..7390e63 100644 --- a/entry/src/main/ets/extensionability/UserAuthAbility.ts +++ b/entry/src/main/ets/extensionability/UserAuthAbility.ts @@ -17,7 +17,8 @@ import LogUtils from '../common/utils/LogUtils'; import UserAuthExtensionAbility from '@ohos.app.ability.UserAuthExtensionAbility'; import WindowPrivacyUtils from '../common/utils/WindowPrivacyUtils'; import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; -import { WantParams } from '../common/vm/Constants'; +import Constants, { WantParams } from '../common/vm/Constants'; +import AuthUtils from '../common/utils/AuthUtils'; const TAG = 'UserAuthAbility'; // The current interface only support string type @@ -63,6 +64,7 @@ export default class UserAuthAbility extends UserAuthExtensionAbility { onSessionDestroy(session): void { LogUtils.info(TAG, 'UserAuthExtensionAbility onSessionDestroy'); + AuthUtils.getInstance().sendNotice(Constants.noticeEventProcessTerminate, [Constants.noticeTypePin]); WindowPrivacyUtils.setWindowPrivacyMode(session, false); } } diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index bf88e8e..09bc862 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -215,7 +215,9 @@ struct Index { return userAuth.UserAuthType.PIN; } }) - AppStorage.setOrCreate('widgetContextId', resultInfo?.widgetContextId); + AppStorage.setOrCreate('widgetContextId', resultInfo?.widgetContextIdStr); + LogUtils.info(TAG, '==============widgetContextId: ' + resultInfo?.widgetContextId); + LogUtils.info(TAG, '==============widgetContextIdStr: ' + resultInfo?.widgetContextIdStr); this.authType = newType; this.type = resultInfo?.type; this.windowModeType = resultInfo?.windowModeType; diff --git a/entry/src/main/ets/pages/components/FaceAuth.ets b/entry/src/main/ets/pages/components/FaceAuth.ets index 28b0641..8998132 100644 --- a/entry/src/main/ets/pages/components/FaceAuth.ets +++ b/entry/src/main/ets/pages/components/FaceAuth.ets @@ -249,7 +249,9 @@ export default struct FaceAuth { if (payload.type === Constants.noticeTypePin) { if (payload.result === 0) { AuthUtils.getInstance().sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypePin]); - (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + setTimeout(() => { + (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + }, SECOND); } else if (payload.result && payload.result === Constants.authResultPinExpired) { this.inputValue = (AppStorage.get('context') as common.ExtensionContext)?.resourceManager .getStringSync($r('app.string.unified_authwidget_hint_pwd_error').id); @@ -320,13 +322,15 @@ export default struct FaceAuth { AuthUtils.getInstance() .sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypeFace]); } - (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + setTimeout(() => { + (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + }, SECOND); } } else if (payload.type === Constants.noticeTypeFinger) { const payload: CmdData = item.payload; - let lockoutDuration: number; - let remainAttempts: number; - let authResult: number; + let lockoutDuration: number = 0; + let remainAttempts: number = 0; + let authResult: number = 0; if (item?.event === CmdNotifyEvents.CMD_NOTIFY_AUTH_TIP) { const tipInfo: string = FuncUtils.getStringFromCharCode(payload.tipInfo); if (tipInfo) { @@ -412,7 +416,9 @@ export default struct FaceAuth { AuthUtils.getInstance() .sendNotice(Constants.noticeEventCancel, [Constants.noticeTypeFace, Constants.noticeTypeFinger]); } - (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + setTimeout(() => { + (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + }, SECOND); } } else { LogUtils.error(TAG, 'onCmdDataChange default'); diff --git a/entry/src/main/ets/pages/components/FingerprintAuth.ets b/entry/src/main/ets/pages/components/FingerprintAuth.ets index 8102f7f..e13f527 100644 --- a/entry/src/main/ets/pages/components/FingerprintAuth.ets +++ b/entry/src/main/ets/pages/components/FingerprintAuth.ets @@ -29,7 +29,8 @@ import Constants, { CmdType, FingerPosition, UserAuthTipType, - WantParams + WantParams, + TipCode } from '../../common/vm/Constants'; import common from '@ohos.app.ability.common'; @@ -54,6 +55,7 @@ const ON_SCREEN = 1; const UNDER_SCREEN = 2; const FINGER_SENSOR_POSITION_LINE = 0.75; const SECOND = 1000; +export const AUTH_LOCK_TIME: number = 2147483647; @Component export default struct FingerprintAuth { @@ -79,6 +81,7 @@ export default struct FingerprintAuth { @State isOffFinger: boolean = false; @State screenType: number = 0; @Link skipLockedBiometricAuth: boolean; + private fingerprintTipCode: TipCode = TipCode.NORMAL; aboutToAppear(): void { AuthUtils.getInstance().sendNotice('EVENT_AUTH_TYPE_READY', [Constants.noticeTypeFinger]); @@ -121,6 +124,9 @@ export default struct FingerprintAuth { } } } + if (this.fingerprintTipCode !== TipCode.NORMAL) { + AuthUtils.getInstance().sendNotice(Constants.noticeEventAuthSendTip, [Constants.noticeTypeFinger], this.fingerprintTipCode); + } } catch (error) { LogUtils.error(TAG, 'aboutToAppear PINAuth catch error: ' + error?.code); (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); @@ -138,34 +144,47 @@ export default struct FingerprintAuth { onCmdDataChange(num?: string): void { this.cmdData.length > 0 && this.cmdData.map((item) => { + LogUtils.error(TAG, `item: ${JSON.stringify(item)}`); const payload: CmdData = item.payload; - let lockoutDuration: number; - let remainAttempts: number; - let authResult: number; - if (item?.event === CmdNotifyEvents.CMD_NOTIFY_AUTH_TIP) { - const tipInfo: string = FuncUtils.getStringFromCharCode(payload.tipInfo); - if (tipInfo) { - lockoutDuration = JSON.parse(tipInfo).lockoutDuration as number; - remainAttempts = JSON.parse(tipInfo).authRemainAttempts as number; - authResult = JSON.parse(tipInfo).authResult as number; + let lockoutDuration: number = 0; + let remainAttempts: number = 0; + let authResult: number = -1; + LogUtils.error(TAG, `payload: ${JSON.stringify(payload)}`); + if (payload.type === Constants.noticeTypeFinger){ + if (item?.event === CmdNotifyEvents.CMD_NOTIFY_AUTH_TIP) { + const tipInfo: string = FuncUtils.getStringFromCharCode(payload.tipInfo); + if (tipInfo) { + lockoutDuration = JSON.parse(tipInfo).lockoutDuration as number; + remainAttempts = JSON.parse(tipInfo).authRemainAttempts as number; + authResult = JSON.parse(tipInfo).authResult as number; + LogUtils.error(TAG, `====================0===================`); + } else { + LogUtils.error(TAG, `====================1===================`); + return; + } } else { - return; + LogUtils.error(TAG, `====================2===================`); + lockoutDuration = payload.lockoutDuration ?? 10000; + remainAttempts = payload.remainAttempts; + authResult = payload.result ?? -1; } - } else { + } else if (payload.type === Constants.noticeTypePin){ + LogUtils.error(TAG, `====================3===================`); lockoutDuration = payload.lockoutDuration; remainAttempts = payload.remainAttempts; - if (payload.result) { - authResult = payload.result; - } else { - authResult = -1; - } + authResult = payload.result; + } else { + LogUtils.error(TAG, `====================4===================`); + return; } LogUtils.info(TAG, `lockoutDuration: ${lockoutDuration} remainAttempts: ${remainAttempts} authResult: ${authResult}`); if (payload.type === Constants.noticeTypePin) { if (authResult === 0) { AuthUtils.getInstance().sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypePin]); - (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + setTimeout(() => { + (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + }, SECOND) } else if (authResult && authResult === Constants.authResultPinExpired) { this.inputValue = (AppStorage.get('context') as common.ExtensionContext)?.resourceManager .getStringSync($r('app.string.unified_authwidget_hint_pwd_error').id); @@ -231,6 +250,13 @@ export default struct FingerprintAuth { $r('app.string.unified_authwidget_hint_inscreen_fp').id); } if (remainAttempts === AUTH_LOCK) { + if (num === 'first') { + if (lockoutDuration === AUTH_LOCK_TIME) { + this.fingerprintTipCode = TipCode.PERMANENTLY_LOCKED; + } else { + this.fingerprintTipCode = TipCode.TEMPORARILY_LOCKED; + } + } this.prompt = (AppStorage.get('context') as common.ExtensionContext)?.resourceManager .getStringSync($r('app.string.unified_authwidget_title_number_failed_fp_forbidden').id); this.fingerLock = true; @@ -276,7 +302,9 @@ export default struct FingerprintAuth { if (payload.tipType === UserAuthTipType.SINGLE_AUTH_RESULT) { AuthUtils.getInstance().sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypeFinger]); } - (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + setTimeout(() => { + (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); + }, SECOND); } } else { LogUtils.error(TAG, 'onCmdDataChange default'); diff --git a/entry/src/main/ets/pages/components/PasswordAuth.ets b/entry/src/main/ets/pages/components/PasswordAuth.ets index 8721c00..52ecb9f 100644 --- a/entry/src/main/ets/pages/components/PasswordAuth.ets +++ b/entry/src/main/ets/pages/components/PasswordAuth.ets @@ -117,7 +117,6 @@ export default struct PasswordAuth { aboutToDisappear(): void { LogUtils.info(TAG, 'aboutToAppear pinAuthManager unregisterInputer'); - AuthUtils.getInstance().sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypePin]); pinAuthManager?.unregisterInputer?.(); } @@ -138,8 +137,9 @@ export default struct PasswordAuth { } handleCancel(): void { - AuthUtils.getInstance().sendNotice(Constants.noticeEventCancel, [] || - (AppStorage.get('wantParams') as WantParams)?.type as string[]); + AuthUtils.getInstance().sendNotice(Constants.noticeEventWidgetReleased, [Constants.noticeTypePin]); + AuthUtils.getInstance() + .sendNotice(Constants.noticeEventCancel, (AppStorage.get('wantParams') as WantParams)?.type as string[]); (AppStorage.get('session') as UIExtensionContentSession)?.terminateSelf(); } -- Gitee