feat(release): close handler and microphone gaps
This commit is contained in:
@@ -54,6 +54,7 @@ test('Android 运行时主动申请 RECORD_AUDIO 并区分拒绝与永久拒绝'
|
||||
const requested = [];
|
||||
globalThis.plus = {
|
||||
android: {
|
||||
runtimeMainActivity: () => ({ hasWindowFocus: () => true }),
|
||||
requestPermissions: (permissions, success) => {
|
||||
requested.push(...permissions);
|
||||
success(pendingResult);
|
||||
@@ -75,6 +76,42 @@ test('Android 运行时主动申请 RECORD_AUDIO 并区分拒绝与永久拒绝'
|
||||
delete globalThis.plus;
|
||||
});
|
||||
|
||||
test('权限 Activity 未归还窗口焦点前不结束授权流程,避免文件选择器被系统吞掉', async () => {
|
||||
let focused = false;
|
||||
let importedActivity = false;
|
||||
const activity = { hasWindowFocus: () => focused };
|
||||
globalThis.plus = {
|
||||
android: {
|
||||
importClass: (target) => {
|
||||
assert.equal(target, activity);
|
||||
importedActivity = true;
|
||||
},
|
||||
runtimeMainActivity: () => activity,
|
||||
requestPermissions: (_permissions, success) => {
|
||||
success({ deniedAlways: ['android.permission.RECORD_AUDIO'] });
|
||||
}
|
||||
}
|
||||
};
|
||||
const { requestMicrophonePermission } = await load();
|
||||
const lifecycle = await vite.ssrLoadModule('/src/services/file-selection-lifecycle.ts');
|
||||
let resolved = false;
|
||||
const permission = requestMicrophonePermission().then((result) => {
|
||||
resolved = true;
|
||||
return result;
|
||||
});
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 20));
|
||||
assert.equal(importedActivity, true);
|
||||
assert.equal(lifecycle.isPlatformNativeActivityActive(), true);
|
||||
assert.equal(lifecycle.isPlatformFileSelectionActive(), false);
|
||||
assert.equal(resolved, false);
|
||||
|
||||
focused = true;
|
||||
assert.equal(await permission, 'denied-always');
|
||||
assert.equal(resolved, true);
|
||||
assert.equal(lifecycle.isPlatformNativeActivityActive(), false);
|
||||
});
|
||||
|
||||
test('非 App 运行时返回 unsupported,交由平台原生授权流程处理', async () => {
|
||||
delete globalThis.plus;
|
||||
const { requestMicrophonePermission } = await load();
|
||||
|
||||
Reference in New Issue
Block a user