txa-settings-permission 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +391 -0
- package/android/build.gradle +57 -0
- package/android/src/main/AndroidManifest.xml +42 -0
- package/android/src/main/java/online/txa/settingspermission/TxaSettingsPermissionPlugin.java +744 -0
- package/dist/cjs/definitions.d.ts +114 -0
- package/dist/cjs/definitions.js +7 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/web.d.ts +35 -0
- package/dist/cjs/web.js +82 -0
- package/dist/esm/definitions.d.ts +114 -0
- package/dist/esm/definitions.js +6 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/web.d.ts +35 -0
- package/dist/esm/web.js +78 -0
- package/dist/plugin.cjs.js +98 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +101 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +67 -0
- package/src/definitions.ts +151 -0
- package/src/index.ts +18 -0
- package/src/web.ts +103 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin
|
|
3
|
+
* Author: TXA (txa@nrotxa.online)
|
|
4
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
5
|
+
*/
|
|
6
|
+
export interface TxaPermissionLog {
|
|
7
|
+
level: 'info' | 'warn' | 'error';
|
|
8
|
+
message: string;
|
|
9
|
+
action: string;
|
|
10
|
+
success: boolean;
|
|
11
|
+
androidVersion: number;
|
|
12
|
+
androidRelease: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
export interface PermissionResult {
|
|
16
|
+
granted: boolean;
|
|
17
|
+
log: TxaPermissionLog;
|
|
18
|
+
}
|
|
19
|
+
export interface OpenSettingsResult {
|
|
20
|
+
opened: boolean;
|
|
21
|
+
granted?: boolean;
|
|
22
|
+
screen?: string;
|
|
23
|
+
log: TxaPermissionLog;
|
|
24
|
+
}
|
|
25
|
+
export interface DeviceInfoResult {
|
|
26
|
+
androidSdk: number;
|
|
27
|
+
androidRelease: string;
|
|
28
|
+
manufacturer: string;
|
|
29
|
+
model: string;
|
|
30
|
+
brand: string;
|
|
31
|
+
device: string;
|
|
32
|
+
packageName: string;
|
|
33
|
+
supportsManageAllFiles: boolean;
|
|
34
|
+
supportsNotificationPolicy: boolean;
|
|
35
|
+
supportsOverlay: boolean;
|
|
36
|
+
supportsBatteryOptimization: boolean;
|
|
37
|
+
supportsMediaPermissions: boolean;
|
|
38
|
+
supportsInstallUnknownApps: boolean;
|
|
39
|
+
supportsUsageStats: boolean;
|
|
40
|
+
supportsAccessibility: boolean;
|
|
41
|
+
supportsDeviceAdmin: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface AllRequiredChecks {
|
|
44
|
+
manageAllFiles: boolean;
|
|
45
|
+
overlay: boolean;
|
|
46
|
+
installUnknownApps: boolean;
|
|
47
|
+
batteryOptimization: boolean;
|
|
48
|
+
camera: boolean;
|
|
49
|
+
microphone: boolean;
|
|
50
|
+
location: boolean;
|
|
51
|
+
readMediaImages?: boolean;
|
|
52
|
+
readMediaVideo?: boolean;
|
|
53
|
+
readMediaAudio?: boolean;
|
|
54
|
+
postNotifications?: boolean;
|
|
55
|
+
readExternalStorage?: boolean;
|
|
56
|
+
writeExternalStorage?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface CheckAllRequiredResult {
|
|
59
|
+
checks: AllRequiredChecks;
|
|
60
|
+
androidSdk: number;
|
|
61
|
+
androidRelease: string;
|
|
62
|
+
}
|
|
63
|
+
export interface CheckRuntimePermissionOptions {
|
|
64
|
+
/** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
|
|
65
|
+
permission: string;
|
|
66
|
+
}
|
|
67
|
+
export interface CheckRuntimePermissionResult {
|
|
68
|
+
permission: string;
|
|
69
|
+
granted: boolean;
|
|
70
|
+
log: TxaPermissionLog;
|
|
71
|
+
}
|
|
72
|
+
export interface CheckMultiplePermissionsOptions {
|
|
73
|
+
permissions: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface CheckMultiplePermissionsResult {
|
|
76
|
+
results: Record<string, boolean>;
|
|
77
|
+
allGranted: boolean;
|
|
78
|
+
missing: string[];
|
|
79
|
+
log: TxaPermissionLog;
|
|
80
|
+
}
|
|
81
|
+
export interface BatteryOptimizationResult {
|
|
82
|
+
ignoring: boolean;
|
|
83
|
+
granted: boolean;
|
|
84
|
+
log: TxaPermissionLog;
|
|
85
|
+
}
|
|
86
|
+
export interface TxaSettingsPermissionPlugin {
|
|
87
|
+
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
88
|
+
openSettings(): Promise<OpenSettingsResult>;
|
|
89
|
+
openManageAllFiles(): Promise<OpenSettingsResult>;
|
|
90
|
+
checkManageAllFiles(): Promise<PermissionResult>;
|
|
91
|
+
openOverlaySettings(): Promise<OpenSettingsResult>;
|
|
92
|
+
checkOverlay(): Promise<PermissionResult>;
|
|
93
|
+
openInstallUnknownApps(): Promise<OpenSettingsResult>;
|
|
94
|
+
checkInstallUnknownApps(): Promise<PermissionResult>;
|
|
95
|
+
openBatteryOptimization(): Promise<OpenSettingsResult>;
|
|
96
|
+
checkBatteryOptimization(): Promise<BatteryOptimizationResult>;
|
|
97
|
+
openNotificationSettings(): Promise<OpenSettingsResult>;
|
|
98
|
+
openNotificationPolicyAccess(): Promise<OpenSettingsResult>;
|
|
99
|
+
openAccessibilitySettings(): Promise<OpenSettingsResult>;
|
|
100
|
+
openUsageStatsSettings(): Promise<OpenSettingsResult>;
|
|
101
|
+
openDeviceAdminSettings(): Promise<OpenSettingsResult>;
|
|
102
|
+
openWifiSettings(): Promise<OpenSettingsResult>;
|
|
103
|
+
openLocationSettings(): Promise<OpenSettingsResult>;
|
|
104
|
+
openBluetoothSettings(): Promise<OpenSettingsResult>;
|
|
105
|
+
openNfcSettings(): Promise<OpenSettingsResult>;
|
|
106
|
+
openDateTimeSettings(): Promise<OpenSettingsResult>;
|
|
107
|
+
openLanguageSettings(): Promise<OpenSettingsResult>;
|
|
108
|
+
openStorageSettings(): Promise<OpenSettingsResult>;
|
|
109
|
+
openDisplaySettings(): Promise<OpenSettingsResult>;
|
|
110
|
+
openSoundSettings(): Promise<OpenSettingsResult>;
|
|
111
|
+
checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult>;
|
|
112
|
+
checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult>;
|
|
113
|
+
checkAllRequired(): Promise<CheckAllRequiredResult>;
|
|
114
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin
|
|
3
|
+
* Author: TXA (txa@nrotxa.online)
|
|
4
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
5
|
+
*/
|
|
6
|
+
import type { TxaSettingsPermissionPlugin } from './definitions';
|
|
7
|
+
declare const TxaSettingsPermission: TxaSettingsPermissionPlugin;
|
|
8
|
+
export * from './definitions';
|
|
9
|
+
export { TxaSettingsPermission };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TXA Settings Permission Plugin
|
|
4
|
+
* Author: TXA (txa@nrotxa.online)
|
|
5
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
41
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.TxaSettingsPermission = void 0;
|
|
45
|
+
const core_1 = require("@capacitor/core");
|
|
46
|
+
const TxaSettingsPermission = (0, core_1.registerPlugin)('TxaSettingsPermission', {
|
|
47
|
+
web: () => Promise.resolve().then(() => __importStar(require('./web'))).then(m => new m.TxaSettingsPermissionWeb()),
|
|
48
|
+
});
|
|
49
|
+
exports.TxaSettingsPermission = TxaSettingsPermission;
|
|
50
|
+
__exportStar(require("./definitions"), exports);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin - Web Fallback
|
|
3
|
+
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
4
|
+
*/
|
|
5
|
+
import { WebPlugin } from '@capacitor/core';
|
|
6
|
+
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult } from './definitions';
|
|
7
|
+
export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSettingsPermissionPlugin {
|
|
8
|
+
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
9
|
+
openSettings(): Promise<OpenSettingsResult>;
|
|
10
|
+
openManageAllFiles(): Promise<OpenSettingsResult>;
|
|
11
|
+
checkManageAllFiles(): Promise<PermissionResult>;
|
|
12
|
+
openOverlaySettings(): Promise<OpenSettingsResult>;
|
|
13
|
+
checkOverlay(): Promise<PermissionResult>;
|
|
14
|
+
openInstallUnknownApps(): Promise<OpenSettingsResult>;
|
|
15
|
+
checkInstallUnknownApps(): Promise<PermissionResult>;
|
|
16
|
+
openBatteryOptimization(): Promise<OpenSettingsResult>;
|
|
17
|
+
checkBatteryOptimization(): Promise<BatteryOptimizationResult>;
|
|
18
|
+
openNotificationSettings(): Promise<OpenSettingsResult>;
|
|
19
|
+
openNotificationPolicyAccess(): Promise<OpenSettingsResult>;
|
|
20
|
+
openAccessibilitySettings(): Promise<OpenSettingsResult>;
|
|
21
|
+
openUsageStatsSettings(): Promise<OpenSettingsResult>;
|
|
22
|
+
openDeviceAdminSettings(): Promise<OpenSettingsResult>;
|
|
23
|
+
openWifiSettings(): Promise<OpenSettingsResult>;
|
|
24
|
+
openLocationSettings(): Promise<OpenSettingsResult>;
|
|
25
|
+
openBluetoothSettings(): Promise<OpenSettingsResult>;
|
|
26
|
+
openNfcSettings(): Promise<OpenSettingsResult>;
|
|
27
|
+
openDateTimeSettings(): Promise<OpenSettingsResult>;
|
|
28
|
+
openLanguageSettings(): Promise<OpenSettingsResult>;
|
|
29
|
+
openStorageSettings(): Promise<OpenSettingsResult>;
|
|
30
|
+
openDisplaySettings(): Promise<OpenSettingsResult>;
|
|
31
|
+
openSoundSettings(): Promise<OpenSettingsResult>;
|
|
32
|
+
checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult>;
|
|
33
|
+
checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult>;
|
|
34
|
+
checkAllRequired(): Promise<CheckAllRequiredResult>;
|
|
35
|
+
}
|
package/dist/cjs/web.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TXA Settings Permission Plugin - Web Fallback
|
|
4
|
+
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TxaSettingsPermissionWeb = void 0;
|
|
8
|
+
const core_1 = require("@capacitor/core");
|
|
9
|
+
function webLog(action) {
|
|
10
|
+
return {
|
|
11
|
+
level: 'info',
|
|
12
|
+
message: `[Web] ${action}: không áp dụng trên web, trả về mock`,
|
|
13
|
+
action,
|
|
14
|
+
success: true,
|
|
15
|
+
androidVersion: 0,
|
|
16
|
+
androidRelease: 'web',
|
|
17
|
+
timestamp: Date.now(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function mockOpen(screen) {
|
|
21
|
+
console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);
|
|
22
|
+
return { opened: true, granted: true, screen, log: webLog(screen) };
|
|
23
|
+
}
|
|
24
|
+
function mockGranted(action) {
|
|
25
|
+
return { granted: true, log: webLog(action) };
|
|
26
|
+
}
|
|
27
|
+
class TxaSettingsPermissionWeb extends core_1.WebPlugin {
|
|
28
|
+
async getDeviceInfo() {
|
|
29
|
+
return {
|
|
30
|
+
androidSdk: 0, androidRelease: 'web', manufacturer: 'web',
|
|
31
|
+
model: 'browser', brand: 'web', device: 'web', packageName: 'web',
|
|
32
|
+
supportsManageAllFiles: false, supportsNotificationPolicy: false,
|
|
33
|
+
supportsOverlay: false, supportsBatteryOptimization: false,
|
|
34
|
+
supportsMediaPermissions: false, supportsInstallUnknownApps: false,
|
|
35
|
+
supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async openSettings() { return mockOpen('APP_SETTINGS'); }
|
|
39
|
+
async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }
|
|
40
|
+
async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }
|
|
41
|
+
async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }
|
|
42
|
+
async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }
|
|
43
|
+
async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }
|
|
44
|
+
async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }
|
|
45
|
+
async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }
|
|
46
|
+
async checkBatteryOptimization() {
|
|
47
|
+
return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };
|
|
48
|
+
}
|
|
49
|
+
async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }
|
|
50
|
+
async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }
|
|
51
|
+
async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }
|
|
52
|
+
async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }
|
|
53
|
+
async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }
|
|
54
|
+
async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }
|
|
55
|
+
async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }
|
|
56
|
+
async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }
|
|
57
|
+
async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }
|
|
58
|
+
async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }
|
|
59
|
+
async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }
|
|
60
|
+
async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }
|
|
61
|
+
async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }
|
|
62
|
+
async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }
|
|
63
|
+
async checkRuntimePermission(options) {
|
|
64
|
+
return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };
|
|
65
|
+
}
|
|
66
|
+
async checkMultiplePermissions(options) {
|
|
67
|
+
const results = {};
|
|
68
|
+
options.permissions.forEach(p => { results[p] = true; });
|
|
69
|
+
return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };
|
|
70
|
+
}
|
|
71
|
+
async checkAllRequired() {
|
|
72
|
+
return {
|
|
73
|
+
checks: {
|
|
74
|
+
manageAllFiles: true, overlay: true, installUnknownApps: true,
|
|
75
|
+
batteryOptimization: true, camera: true, microphone: true, location: true,
|
|
76
|
+
},
|
|
77
|
+
androidSdk: 0,
|
|
78
|
+
androidRelease: 'web',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.TxaSettingsPermissionWeb = TxaSettingsPermissionWeb;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin
|
|
3
|
+
* Author: TXA (txa@nrotxa.online)
|
|
4
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
5
|
+
*/
|
|
6
|
+
export interface TxaPermissionLog {
|
|
7
|
+
level: 'info' | 'warn' | 'error';
|
|
8
|
+
message: string;
|
|
9
|
+
action: string;
|
|
10
|
+
success: boolean;
|
|
11
|
+
androidVersion: number;
|
|
12
|
+
androidRelease: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
export interface PermissionResult {
|
|
16
|
+
granted: boolean;
|
|
17
|
+
log: TxaPermissionLog;
|
|
18
|
+
}
|
|
19
|
+
export interface OpenSettingsResult {
|
|
20
|
+
opened: boolean;
|
|
21
|
+
granted?: boolean;
|
|
22
|
+
screen?: string;
|
|
23
|
+
log: TxaPermissionLog;
|
|
24
|
+
}
|
|
25
|
+
export interface DeviceInfoResult {
|
|
26
|
+
androidSdk: number;
|
|
27
|
+
androidRelease: string;
|
|
28
|
+
manufacturer: string;
|
|
29
|
+
model: string;
|
|
30
|
+
brand: string;
|
|
31
|
+
device: string;
|
|
32
|
+
packageName: string;
|
|
33
|
+
supportsManageAllFiles: boolean;
|
|
34
|
+
supportsNotificationPolicy: boolean;
|
|
35
|
+
supportsOverlay: boolean;
|
|
36
|
+
supportsBatteryOptimization: boolean;
|
|
37
|
+
supportsMediaPermissions: boolean;
|
|
38
|
+
supportsInstallUnknownApps: boolean;
|
|
39
|
+
supportsUsageStats: boolean;
|
|
40
|
+
supportsAccessibility: boolean;
|
|
41
|
+
supportsDeviceAdmin: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface AllRequiredChecks {
|
|
44
|
+
manageAllFiles: boolean;
|
|
45
|
+
overlay: boolean;
|
|
46
|
+
installUnknownApps: boolean;
|
|
47
|
+
batteryOptimization: boolean;
|
|
48
|
+
camera: boolean;
|
|
49
|
+
microphone: boolean;
|
|
50
|
+
location: boolean;
|
|
51
|
+
readMediaImages?: boolean;
|
|
52
|
+
readMediaVideo?: boolean;
|
|
53
|
+
readMediaAudio?: boolean;
|
|
54
|
+
postNotifications?: boolean;
|
|
55
|
+
readExternalStorage?: boolean;
|
|
56
|
+
writeExternalStorage?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface CheckAllRequiredResult {
|
|
59
|
+
checks: AllRequiredChecks;
|
|
60
|
+
androidSdk: number;
|
|
61
|
+
androidRelease: string;
|
|
62
|
+
}
|
|
63
|
+
export interface CheckRuntimePermissionOptions {
|
|
64
|
+
/** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
|
|
65
|
+
permission: string;
|
|
66
|
+
}
|
|
67
|
+
export interface CheckRuntimePermissionResult {
|
|
68
|
+
permission: string;
|
|
69
|
+
granted: boolean;
|
|
70
|
+
log: TxaPermissionLog;
|
|
71
|
+
}
|
|
72
|
+
export interface CheckMultiplePermissionsOptions {
|
|
73
|
+
permissions: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface CheckMultiplePermissionsResult {
|
|
76
|
+
results: Record<string, boolean>;
|
|
77
|
+
allGranted: boolean;
|
|
78
|
+
missing: string[];
|
|
79
|
+
log: TxaPermissionLog;
|
|
80
|
+
}
|
|
81
|
+
export interface BatteryOptimizationResult {
|
|
82
|
+
ignoring: boolean;
|
|
83
|
+
granted: boolean;
|
|
84
|
+
log: TxaPermissionLog;
|
|
85
|
+
}
|
|
86
|
+
export interface TxaSettingsPermissionPlugin {
|
|
87
|
+
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
88
|
+
openSettings(): Promise<OpenSettingsResult>;
|
|
89
|
+
openManageAllFiles(): Promise<OpenSettingsResult>;
|
|
90
|
+
checkManageAllFiles(): Promise<PermissionResult>;
|
|
91
|
+
openOverlaySettings(): Promise<OpenSettingsResult>;
|
|
92
|
+
checkOverlay(): Promise<PermissionResult>;
|
|
93
|
+
openInstallUnknownApps(): Promise<OpenSettingsResult>;
|
|
94
|
+
checkInstallUnknownApps(): Promise<PermissionResult>;
|
|
95
|
+
openBatteryOptimization(): Promise<OpenSettingsResult>;
|
|
96
|
+
checkBatteryOptimization(): Promise<BatteryOptimizationResult>;
|
|
97
|
+
openNotificationSettings(): Promise<OpenSettingsResult>;
|
|
98
|
+
openNotificationPolicyAccess(): Promise<OpenSettingsResult>;
|
|
99
|
+
openAccessibilitySettings(): Promise<OpenSettingsResult>;
|
|
100
|
+
openUsageStatsSettings(): Promise<OpenSettingsResult>;
|
|
101
|
+
openDeviceAdminSettings(): Promise<OpenSettingsResult>;
|
|
102
|
+
openWifiSettings(): Promise<OpenSettingsResult>;
|
|
103
|
+
openLocationSettings(): Promise<OpenSettingsResult>;
|
|
104
|
+
openBluetoothSettings(): Promise<OpenSettingsResult>;
|
|
105
|
+
openNfcSettings(): Promise<OpenSettingsResult>;
|
|
106
|
+
openDateTimeSettings(): Promise<OpenSettingsResult>;
|
|
107
|
+
openLanguageSettings(): Promise<OpenSettingsResult>;
|
|
108
|
+
openStorageSettings(): Promise<OpenSettingsResult>;
|
|
109
|
+
openDisplaySettings(): Promise<OpenSettingsResult>;
|
|
110
|
+
openSoundSettings(): Promise<OpenSettingsResult>;
|
|
111
|
+
checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult>;
|
|
112
|
+
checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult>;
|
|
113
|
+
checkAllRequired(): Promise<CheckAllRequiredResult>;
|
|
114
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin
|
|
3
|
+
* Author: TXA (txa@nrotxa.online)
|
|
4
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
5
|
+
*/
|
|
6
|
+
import type { TxaSettingsPermissionPlugin } from './definitions';
|
|
7
|
+
declare const TxaSettingsPermission: TxaSettingsPermissionPlugin;
|
|
8
|
+
export * from './definitions';
|
|
9
|
+
export { TxaSettingsPermission };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin
|
|
3
|
+
* Author: TXA (txa@nrotxa.online)
|
|
4
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
5
|
+
*/
|
|
6
|
+
import { registerPlugin } from '@capacitor/core';
|
|
7
|
+
const TxaSettingsPermission = registerPlugin('TxaSettingsPermission', {
|
|
8
|
+
web: () => import('./web').then(m => new m.TxaSettingsPermissionWeb()),
|
|
9
|
+
});
|
|
10
|
+
export * from './definitions';
|
|
11
|
+
export { TxaSettingsPermission };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin - Web Fallback
|
|
3
|
+
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
4
|
+
*/
|
|
5
|
+
import { WebPlugin } from '@capacitor/core';
|
|
6
|
+
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult } from './definitions';
|
|
7
|
+
export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSettingsPermissionPlugin {
|
|
8
|
+
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
9
|
+
openSettings(): Promise<OpenSettingsResult>;
|
|
10
|
+
openManageAllFiles(): Promise<OpenSettingsResult>;
|
|
11
|
+
checkManageAllFiles(): Promise<PermissionResult>;
|
|
12
|
+
openOverlaySettings(): Promise<OpenSettingsResult>;
|
|
13
|
+
checkOverlay(): Promise<PermissionResult>;
|
|
14
|
+
openInstallUnknownApps(): Promise<OpenSettingsResult>;
|
|
15
|
+
checkInstallUnknownApps(): Promise<PermissionResult>;
|
|
16
|
+
openBatteryOptimization(): Promise<OpenSettingsResult>;
|
|
17
|
+
checkBatteryOptimization(): Promise<BatteryOptimizationResult>;
|
|
18
|
+
openNotificationSettings(): Promise<OpenSettingsResult>;
|
|
19
|
+
openNotificationPolicyAccess(): Promise<OpenSettingsResult>;
|
|
20
|
+
openAccessibilitySettings(): Promise<OpenSettingsResult>;
|
|
21
|
+
openUsageStatsSettings(): Promise<OpenSettingsResult>;
|
|
22
|
+
openDeviceAdminSettings(): Promise<OpenSettingsResult>;
|
|
23
|
+
openWifiSettings(): Promise<OpenSettingsResult>;
|
|
24
|
+
openLocationSettings(): Promise<OpenSettingsResult>;
|
|
25
|
+
openBluetoothSettings(): Promise<OpenSettingsResult>;
|
|
26
|
+
openNfcSettings(): Promise<OpenSettingsResult>;
|
|
27
|
+
openDateTimeSettings(): Promise<OpenSettingsResult>;
|
|
28
|
+
openLanguageSettings(): Promise<OpenSettingsResult>;
|
|
29
|
+
openStorageSettings(): Promise<OpenSettingsResult>;
|
|
30
|
+
openDisplaySettings(): Promise<OpenSettingsResult>;
|
|
31
|
+
openSoundSettings(): Promise<OpenSettingsResult>;
|
|
32
|
+
checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult>;
|
|
33
|
+
checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult>;
|
|
34
|
+
checkAllRequired(): Promise<CheckAllRequiredResult>;
|
|
35
|
+
}
|
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TXA Settings Permission Plugin - Web Fallback
|
|
3
|
+
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
4
|
+
*/
|
|
5
|
+
import { WebPlugin } from '@capacitor/core';
|
|
6
|
+
function webLog(action) {
|
|
7
|
+
return {
|
|
8
|
+
level: 'info',
|
|
9
|
+
message: `[Web] ${action}: không áp dụng trên web, trả về mock`,
|
|
10
|
+
action,
|
|
11
|
+
success: true,
|
|
12
|
+
androidVersion: 0,
|
|
13
|
+
androidRelease: 'web',
|
|
14
|
+
timestamp: Date.now(),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function mockOpen(screen) {
|
|
18
|
+
console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);
|
|
19
|
+
return { opened: true, granted: true, screen, log: webLog(screen) };
|
|
20
|
+
}
|
|
21
|
+
function mockGranted(action) {
|
|
22
|
+
return { granted: true, log: webLog(action) };
|
|
23
|
+
}
|
|
24
|
+
export class TxaSettingsPermissionWeb extends WebPlugin {
|
|
25
|
+
async getDeviceInfo() {
|
|
26
|
+
return {
|
|
27
|
+
androidSdk: 0, androidRelease: 'web', manufacturer: 'web',
|
|
28
|
+
model: 'browser', brand: 'web', device: 'web', packageName: 'web',
|
|
29
|
+
supportsManageAllFiles: false, supportsNotificationPolicy: false,
|
|
30
|
+
supportsOverlay: false, supportsBatteryOptimization: false,
|
|
31
|
+
supportsMediaPermissions: false, supportsInstallUnknownApps: false,
|
|
32
|
+
supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async openSettings() { return mockOpen('APP_SETTINGS'); }
|
|
36
|
+
async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }
|
|
37
|
+
async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }
|
|
38
|
+
async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }
|
|
39
|
+
async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }
|
|
40
|
+
async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }
|
|
41
|
+
async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }
|
|
42
|
+
async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }
|
|
43
|
+
async checkBatteryOptimization() {
|
|
44
|
+
return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };
|
|
45
|
+
}
|
|
46
|
+
async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }
|
|
47
|
+
async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }
|
|
48
|
+
async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }
|
|
49
|
+
async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }
|
|
50
|
+
async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }
|
|
51
|
+
async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }
|
|
52
|
+
async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }
|
|
53
|
+
async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }
|
|
54
|
+
async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }
|
|
55
|
+
async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }
|
|
56
|
+
async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }
|
|
57
|
+
async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }
|
|
58
|
+
async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }
|
|
59
|
+
async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }
|
|
60
|
+
async checkRuntimePermission(options) {
|
|
61
|
+
return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };
|
|
62
|
+
}
|
|
63
|
+
async checkMultiplePermissions(options) {
|
|
64
|
+
const results = {};
|
|
65
|
+
options.permissions.forEach(p => { results[p] = true; });
|
|
66
|
+
return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };
|
|
67
|
+
}
|
|
68
|
+
async checkAllRequired() {
|
|
69
|
+
return {
|
|
70
|
+
checks: {
|
|
71
|
+
manageAllFiles: true, overlay: true, installUnknownApps: true,
|
|
72
|
+
batteryOptimization: true, camera: true, microphone: true, location: true,
|
|
73
|
+
},
|
|
74
|
+
androidSdk: 0,
|
|
75
|
+
androidRelease: 'web',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@capacitor/core');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TXA Settings Permission Plugin
|
|
7
|
+
* Author: TXA (txa@nrotxa.online)
|
|
8
|
+
* GitHub: https://github.com/TXAVLOG/txa-settings-permission
|
|
9
|
+
*/
|
|
10
|
+
const TxaSettingsPermission = core.registerPlugin('TxaSettingsPermission', {
|
|
11
|
+
web: () => Promise.resolve().then(function () { return web; }).then(m => new m.TxaSettingsPermissionWeb()),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* TXA Settings Permission Plugin - Web Fallback
|
|
16
|
+
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
17
|
+
*/
|
|
18
|
+
function webLog(action) {
|
|
19
|
+
return {
|
|
20
|
+
level: 'info',
|
|
21
|
+
message: `[Web] ${action}: không áp dụng trên web, trả về mock`,
|
|
22
|
+
action,
|
|
23
|
+
success: true,
|
|
24
|
+
androidVersion: 0,
|
|
25
|
+
androidRelease: 'web',
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function mockOpen(screen) {
|
|
30
|
+
console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);
|
|
31
|
+
return { opened: true, granted: true, screen, log: webLog(screen) };
|
|
32
|
+
}
|
|
33
|
+
function mockGranted(action) {
|
|
34
|
+
return { granted: true, log: webLog(action) };
|
|
35
|
+
}
|
|
36
|
+
class TxaSettingsPermissionWeb extends core.WebPlugin {
|
|
37
|
+
async getDeviceInfo() {
|
|
38
|
+
return {
|
|
39
|
+
androidSdk: 0, androidRelease: 'web', manufacturer: 'web',
|
|
40
|
+
model: 'browser', brand: 'web', device: 'web', packageName: 'web',
|
|
41
|
+
supportsManageAllFiles: false, supportsNotificationPolicy: false,
|
|
42
|
+
supportsOverlay: false, supportsBatteryOptimization: false,
|
|
43
|
+
supportsMediaPermissions: false, supportsInstallUnknownApps: false,
|
|
44
|
+
supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async openSettings() { return mockOpen('APP_SETTINGS'); }
|
|
48
|
+
async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }
|
|
49
|
+
async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }
|
|
50
|
+
async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }
|
|
51
|
+
async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }
|
|
52
|
+
async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }
|
|
53
|
+
async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }
|
|
54
|
+
async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }
|
|
55
|
+
async checkBatteryOptimization() {
|
|
56
|
+
return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };
|
|
57
|
+
}
|
|
58
|
+
async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }
|
|
59
|
+
async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }
|
|
60
|
+
async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }
|
|
61
|
+
async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }
|
|
62
|
+
async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }
|
|
63
|
+
async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }
|
|
64
|
+
async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }
|
|
65
|
+
async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }
|
|
66
|
+
async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }
|
|
67
|
+
async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }
|
|
68
|
+
async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }
|
|
69
|
+
async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }
|
|
70
|
+
async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }
|
|
71
|
+
async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }
|
|
72
|
+
async checkRuntimePermission(options) {
|
|
73
|
+
return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };
|
|
74
|
+
}
|
|
75
|
+
async checkMultiplePermissions(options) {
|
|
76
|
+
const results = {};
|
|
77
|
+
options.permissions.forEach(p => { results[p] = true; });
|
|
78
|
+
return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };
|
|
79
|
+
}
|
|
80
|
+
async checkAllRequired() {
|
|
81
|
+
return {
|
|
82
|
+
checks: {
|
|
83
|
+
manageAllFiles: true, overlay: true, installUnknownApps: true,
|
|
84
|
+
batteryOptimization: true, camera: true, microphone: true, location: true,
|
|
85
|
+
},
|
|
86
|
+
androidSdk: 0,
|
|
87
|
+
androidRelease: 'web',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
93
|
+
__proto__: null,
|
|
94
|
+
TxaSettingsPermissionWeb: TxaSettingsPermissionWeb
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
exports.TxaSettingsPermission = TxaSettingsPermission;
|
|
98
|
+
//# sourceMappingURL=plugin.cjs.js.map
|