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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/**\n * TXA Settings Permission Plugin\n * Author: TXA (txa@nrotxa.online)\n * GitHub: https://github.com/TXAVLOG/txa-settings-permission\n */\nimport { registerPlugin } from '@capacitor/core';\nconst TxaSettingsPermission = registerPlugin('TxaSettingsPermission', {\n web: () => import('./web').then(m => new m.TxaSettingsPermissionWeb()),\n});\nexport * from './definitions';\nexport { TxaSettingsPermission };\n","/**\n * TXA Settings Permission Plugin - Web Fallback\n * Web không có Android Settings, tất cả mock trả về granted/opened=true\n */\nimport { WebPlugin } from '@capacitor/core';\nfunction webLog(action) {\n return {\n level: 'info',\n message: `[Web] ${action}: không áp dụng trên web, trả về mock`,\n action,\n success: true,\n androidVersion: 0,\n androidRelease: 'web',\n timestamp: Date.now(),\n };\n}\nfunction mockOpen(screen) {\n console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);\n return { opened: true, granted: true, screen, log: webLog(screen) };\n}\nfunction mockGranted(action) {\n return { granted: true, log: webLog(action) };\n}\nexport class TxaSettingsPermissionWeb extends WebPlugin {\n async getDeviceInfo() {\n return {\n androidSdk: 0, androidRelease: 'web', manufacturer: 'web',\n model: 'browser', brand: 'web', device: 'web', packageName: 'web',\n supportsManageAllFiles: false, supportsNotificationPolicy: false,\n supportsOverlay: false, supportsBatteryOptimization: false,\n supportsMediaPermissions: false, supportsInstallUnknownApps: false,\n supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,\n };\n }\n async openSettings() { return mockOpen('APP_SETTINGS'); }\n async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }\n async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }\n async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }\n async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }\n async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }\n async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }\n async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }\n async checkBatteryOptimization() {\n return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };\n }\n async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }\n async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }\n async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }\n async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }\n async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }\n async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }\n async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }\n async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }\n async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }\n async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }\n async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }\n async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }\n async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }\n async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }\n async checkRuntimePermission(options) {\n return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };\n }\n async checkMultiplePermissions(options) {\n const results = {};\n options.permissions.forEach(p => { results[p] = true; });\n return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };\n }\n async checkAllRequired() {\n return {\n checks: {\n manageAllFiles: true, overlay: true, installUnknownApps: true,\n batteryOptimization: true, camera: true, microphone: true, location: true,\n },\n androidSdk: 0,\n androidRelease: 'web',\n };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js ADDED
@@ -0,0 +1,101 @@
1
+ var txaSettingsPermission = (function (exports, core) {
2
+ 'use strict';
3
+
4
+ /**
5
+ * TXA Settings Permission Plugin
6
+ * Author: TXA (txa@nrotxa.online)
7
+ * GitHub: https://github.com/TXAVLOG/txa-settings-permission
8
+ */
9
+ const TxaSettingsPermission = core.registerPlugin('TxaSettingsPermission', {
10
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.TxaSettingsPermissionWeb()),
11
+ });
12
+
13
+ /**
14
+ * TXA Settings Permission Plugin - Web Fallback
15
+ * Web không có Android Settings, tất cả mock trả về granted/opened=true
16
+ */
17
+ function webLog(action) {
18
+ return {
19
+ level: 'info',
20
+ message: `[Web] ${action}: không áp dụng trên web, trả về mock`,
21
+ action,
22
+ success: true,
23
+ androidVersion: 0,
24
+ androidRelease: 'web',
25
+ timestamp: Date.now(),
26
+ };
27
+ }
28
+ function mockOpen(screen) {
29
+ console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);
30
+ return { opened: true, granted: true, screen, log: webLog(screen) };
31
+ }
32
+ function mockGranted(action) {
33
+ return { granted: true, log: webLog(action) };
34
+ }
35
+ class TxaSettingsPermissionWeb extends core.WebPlugin {
36
+ async getDeviceInfo() {
37
+ return {
38
+ androidSdk: 0, androidRelease: 'web', manufacturer: 'web',
39
+ model: 'browser', brand: 'web', device: 'web', packageName: 'web',
40
+ supportsManageAllFiles: false, supportsNotificationPolicy: false,
41
+ supportsOverlay: false, supportsBatteryOptimization: false,
42
+ supportsMediaPermissions: false, supportsInstallUnknownApps: false,
43
+ supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,
44
+ };
45
+ }
46
+ async openSettings() { return mockOpen('APP_SETTINGS'); }
47
+ async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }
48
+ async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }
49
+ async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }
50
+ async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }
51
+ async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }
52
+ async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }
53
+ async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }
54
+ async checkBatteryOptimization() {
55
+ return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };
56
+ }
57
+ async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }
58
+ async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }
59
+ async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }
60
+ async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }
61
+ async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }
62
+ async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }
63
+ async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }
64
+ async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }
65
+ async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }
66
+ async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }
67
+ async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }
68
+ async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }
69
+ async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }
70
+ async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }
71
+ async checkRuntimePermission(options) {
72
+ return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };
73
+ }
74
+ async checkMultiplePermissions(options) {
75
+ const results = {};
76
+ options.permissions.forEach(p => { results[p] = true; });
77
+ return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };
78
+ }
79
+ async checkAllRequired() {
80
+ return {
81
+ checks: {
82
+ manageAllFiles: true, overlay: true, installUnknownApps: true,
83
+ batteryOptimization: true, camera: true, microphone: true, location: true,
84
+ },
85
+ androidSdk: 0,
86
+ androidRelease: 'web',
87
+ };
88
+ }
89
+ }
90
+
91
+ var web = /*#__PURE__*/Object.freeze({
92
+ __proto__: null,
93
+ TxaSettingsPermissionWeb: TxaSettingsPermissionWeb
94
+ });
95
+
96
+ exports.TxaSettingsPermission = TxaSettingsPermission;
97
+
98
+ return exports;
99
+
100
+ })({}, capacitorExports);
101
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["/**\n * TXA Settings Permission Plugin\n * Author: TXA (txa@nrotxa.online)\n * GitHub: https://github.com/TXAVLOG/txa-settings-permission\n */\nimport { registerPlugin } from '@capacitor/core';\nconst TxaSettingsPermission = registerPlugin('TxaSettingsPermission', {\n web: () => import('./web').then(m => new m.TxaSettingsPermissionWeb()),\n});\nexport * from './definitions';\nexport { TxaSettingsPermission };\n","/**\n * TXA Settings Permission Plugin - Web Fallback\n * Web không có Android Settings, tất cả mock trả về granted/opened=true\n */\nimport { WebPlugin } from '@capacitor/core';\nfunction webLog(action) {\n return {\n level: 'info',\n message: `[Web] ${action}: không áp dụng trên web, trả về mock`,\n action,\n success: true,\n androidVersion: 0,\n androidRelease: 'web',\n timestamp: Date.now(),\n };\n}\nfunction mockOpen(screen) {\n console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);\n return { opened: true, granted: true, screen, log: webLog(screen) };\n}\nfunction mockGranted(action) {\n return { granted: true, log: webLog(action) };\n}\nexport class TxaSettingsPermissionWeb extends WebPlugin {\n async getDeviceInfo() {\n return {\n androidSdk: 0, androidRelease: 'web', manufacturer: 'web',\n model: 'browser', brand: 'web', device: 'web', packageName: 'web',\n supportsManageAllFiles: false, supportsNotificationPolicy: false,\n supportsOverlay: false, supportsBatteryOptimization: false,\n supportsMediaPermissions: false, supportsInstallUnknownApps: false,\n supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,\n };\n }\n async openSettings() { return mockOpen('APP_SETTINGS'); }\n async openManageAllFiles() { return mockOpen('MANAGE_ALL_FILES'); }\n async checkManageAllFiles() { return mockGranted('CHECK_MANAGE_ALL_FILES'); }\n async openOverlaySettings() { return mockOpen('OVERLAY_SETTINGS'); }\n async checkOverlay() { return mockGranted('CHECK_OVERLAY'); }\n async openInstallUnknownApps() { return mockOpen('INSTALL_UNKNOWN_APPS'); }\n async checkInstallUnknownApps() { return mockGranted('CHECK_INSTALL_UNKNOWN'); }\n async openBatteryOptimization() { return mockOpen('BATTERY_OPTIMIZATION'); }\n async checkBatteryOptimization() {\n return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };\n }\n async openNotificationSettings() { return mockOpen('NOTIFICATION_SETTINGS'); }\n async openNotificationPolicyAccess() { return mockOpen('NOTIFICATION_POLICY'); }\n async openAccessibilitySettings() { return mockOpen('ACCESSIBILITY_SETTINGS'); }\n async openUsageStatsSettings() { return mockOpen('USAGE_STATS_SETTINGS'); }\n async openDeviceAdminSettings() { return mockOpen('DEVICE_ADMIN_SETTINGS'); }\n async openWifiSettings() { return mockOpen('WIFI_SETTINGS'); }\n async openLocationSettings() { return mockOpen('LOCATION_SETTINGS'); }\n async openBluetoothSettings() { return mockOpen('BLUETOOTH_SETTINGS'); }\n async openNfcSettings() { return mockOpen('NFC_SETTINGS'); }\n async openDateTimeSettings() { return mockOpen('DATE_SETTINGS'); }\n async openLanguageSettings() { return mockOpen('LOCALE_SETTINGS'); }\n async openStorageSettings() { return mockOpen('STORAGE_SETTINGS'); }\n async openDisplaySettings() { return mockOpen('DISPLAY_SETTINGS'); }\n async openSoundSettings() { return mockOpen('SOUND_SETTINGS'); }\n async checkRuntimePermission(options) {\n return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };\n }\n async checkMultiplePermissions(options) {\n const results = {};\n options.permissions.forEach(p => { results[p] = true; });\n return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };\n }\n async checkAllRequired() {\n return {\n checks: {\n manageAllFiles: true, overlay: true, installUnknownApps: true,\n batteryOptimization: true, camera: true, microphone: true, location: true,\n },\n androidSdk: 0,\n androidRelease: 'web',\n };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "txa-settings-permission",
3
+ "version": "1.0.0",
4
+ "description": "Capacitor plugin by TXA — Mở tất cả màn hình Settings cấp quyền trên Android, tự tương thích theo Android version",
5
+ "main": "dist/plugin.cjs.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/esm/index.d.ts",
8
+ "unpkg": "dist/plugin.js",
9
+ "files": [
10
+ "android/src/main/",
11
+ "android/build.gradle",
12
+ "dist/",
13
+ "src/",
14
+ "README.md",
15
+ "LICENSE"
16
+ ],
17
+ "author": "TXA <txa@nrotxa.online>",
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/TXAVLOG/txa-settings-permission.git"
22
+ },
23
+ "homepage": "https://github.com/TXAVLOG/txa-settings-permission",
24
+ "bugs": {
25
+ "url": "https://github.com/TXAVLOG/txa-settings-permission/issues"
26
+ },
27
+ "keywords": [
28
+ "capacitor", "plugin", "android", "permission", "settings",
29
+ "manage-external-storage", "overlay", "battery", "install-unknown",
30
+ "notification", "accessibility", "txa", "txavlog"
31
+ ],
32
+ "scripts": {
33
+ "build": "npm run clean && npm run compile",
34
+ "clean": "rimraf ./dist",
35
+ "compile": "npm run compile:esm && npm run compile:cjs && npm run compile:bundle",
36
+ "compile:esm": "tsc --module es2020 --outDir ./dist/esm",
37
+ "compile:cjs": "tsc --module commonjs --outDir ./dist/cjs",
38
+ "compile:bundle": "rollup -c rollup.config.js",
39
+ "verify:android": "cd android && ./gradlew clean build test && cd ..",
40
+ "prepublishOnly": "npm run build",
41
+ "postinstall": "node scripts/check-capacitor.js"
42
+ },
43
+ "peerDependencies": {
44
+ "@capacitor/core": ">=4.0.0"
45
+ },
46
+ "peerDependenciesMeta": {
47
+ "@capacitor/core": {
48
+ "optional": false
49
+ }
50
+ },
51
+ "devDependencies": {
52
+ "@capacitor/android": "^6.0.0",
53
+ "@capacitor/core": "^6.0.0",
54
+ "@rollup/plugin-node-resolve": "^15.0.0",
55
+ "rimraf": "^5.0.0",
56
+ "rollup": "^4.0.0",
57
+ "typescript": "^5.0.0"
58
+ },
59
+ "capacitor": {
60
+ "android": {
61
+ "src": "android"
62
+ }
63
+ },
64
+ "engines": {
65
+ "node": ">=16.0.0"
66
+ }
67
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * TXA Settings Permission Plugin
3
+ * Author: TXA (txa@nrotxa.online)
4
+ * GitHub: https://github.com/TXAVLOG/txa-settings-permission
5
+ */
6
+
7
+ export interface TxaPermissionLog {
8
+ level: 'info' | 'warn' | 'error';
9
+ message: string;
10
+ action: string;
11
+ success: boolean;
12
+ androidVersion: number;
13
+ androidRelease: string;
14
+ timestamp: number;
15
+ }
16
+
17
+ export interface PermissionResult {
18
+ granted: boolean;
19
+ log: TxaPermissionLog;
20
+ }
21
+
22
+ export interface OpenSettingsResult {
23
+ opened: boolean;
24
+ granted?: boolean;
25
+ screen?: string;
26
+ log: TxaPermissionLog;
27
+ }
28
+
29
+ export interface DeviceInfoResult {
30
+ androidSdk: number;
31
+ androidRelease: string;
32
+ manufacturer: string;
33
+ model: string;
34
+ brand: string;
35
+ device: string;
36
+ packageName: string;
37
+ supportsManageAllFiles: boolean;
38
+ supportsNotificationPolicy: boolean;
39
+ supportsOverlay: boolean;
40
+ supportsBatteryOptimization: boolean;
41
+ supportsMediaPermissions: boolean;
42
+ supportsInstallUnknownApps: boolean;
43
+ supportsUsageStats: boolean;
44
+ supportsAccessibility: boolean;
45
+ supportsDeviceAdmin: boolean;
46
+ }
47
+
48
+ export interface AllRequiredChecks {
49
+ manageAllFiles: boolean;
50
+ overlay: boolean;
51
+ installUnknownApps: boolean;
52
+ batteryOptimization: boolean;
53
+ camera: boolean;
54
+ microphone: boolean;
55
+ location: boolean;
56
+ readMediaImages?: boolean;
57
+ readMediaVideo?: boolean;
58
+ readMediaAudio?: boolean;
59
+ postNotifications?: boolean;
60
+ readExternalStorage?: boolean;
61
+ writeExternalStorage?: boolean;
62
+ }
63
+
64
+ export interface CheckAllRequiredResult {
65
+ checks: AllRequiredChecks;
66
+ androidSdk: number;
67
+ androidRelease: string;
68
+ }
69
+
70
+ export interface CheckRuntimePermissionOptions {
71
+ /** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
72
+ permission: string;
73
+ }
74
+
75
+ export interface CheckRuntimePermissionResult {
76
+ permission: string;
77
+ granted: boolean;
78
+ log: TxaPermissionLog;
79
+ }
80
+
81
+ export interface CheckMultiplePermissionsOptions {
82
+ permissions: string[];
83
+ }
84
+
85
+ export interface CheckMultiplePermissionsResult {
86
+ results: Record<string, boolean>;
87
+ allGranted: boolean;
88
+ missing: string[];
89
+ log: TxaPermissionLog;
90
+ }
91
+
92
+ export interface BatteryOptimizationResult {
93
+ ignoring: boolean;
94
+ granted: boolean;
95
+ log: TxaPermissionLog;
96
+ }
97
+
98
+ export interface TxaSettingsPermissionPlugin {
99
+ // Device Info
100
+ getDeviceInfo(): Promise<DeviceInfoResult>;
101
+
102
+ // App Settings
103
+ openSettings(): Promise<OpenSettingsResult>;
104
+
105
+ // Manage All Files (Android 11+)
106
+ openManageAllFiles(): Promise<OpenSettingsResult>;
107
+ checkManageAllFiles(): Promise<PermissionResult>;
108
+
109
+ // Overlay (Android 6+)
110
+ openOverlaySettings(): Promise<OpenSettingsResult>;
111
+ checkOverlay(): Promise<PermissionResult>;
112
+
113
+ // Install Unknown Apps (Android 8+)
114
+ openInstallUnknownApps(): Promise<OpenSettingsResult>;
115
+ checkInstallUnknownApps(): Promise<PermissionResult>;
116
+
117
+ // Battery Optimization (Android 6+)
118
+ openBatteryOptimization(): Promise<OpenSettingsResult>;
119
+ checkBatteryOptimization(): Promise<BatteryOptimizationResult>;
120
+
121
+ // Notifications
122
+ openNotificationSettings(): Promise<OpenSettingsResult>;
123
+ openNotificationPolicyAccess(): Promise<OpenSettingsResult>;
124
+
125
+ // Accessibility
126
+ openAccessibilitySettings(): Promise<OpenSettingsResult>;
127
+
128
+ // Usage Stats (Android 5.1+)
129
+ openUsageStatsSettings(): Promise<OpenSettingsResult>;
130
+
131
+ // Device Admin
132
+ openDeviceAdminSettings(): Promise<OpenSettingsResult>;
133
+
134
+ // System Settings
135
+ openWifiSettings(): Promise<OpenSettingsResult>;
136
+ openLocationSettings(): Promise<OpenSettingsResult>;
137
+ openBluetoothSettings(): Promise<OpenSettingsResult>;
138
+ openNfcSettings(): Promise<OpenSettingsResult>;
139
+ openDateTimeSettings(): Promise<OpenSettingsResult>;
140
+ openLanguageSettings(): Promise<OpenSettingsResult>;
141
+ openStorageSettings(): Promise<OpenSettingsResult>;
142
+ openDisplaySettings(): Promise<OpenSettingsResult>;
143
+ openSoundSettings(): Promise<OpenSettingsResult>;
144
+
145
+ // Runtime Permission checks
146
+ checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult>;
147
+ checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult>;
148
+
149
+ // All-in-one check
150
+ checkAllRequired(): Promise<CheckAllRequiredResult>;
151
+ }
package/src/index.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * TXA Settings Permission Plugin
3
+ * Author: TXA (txa@nrotxa.online)
4
+ * GitHub: https://github.com/TXAVLOG/txa-settings-permission
5
+ */
6
+
7
+ import { registerPlugin } from '@capacitor/core';
8
+ import type { TxaSettingsPermissionPlugin } from './definitions';
9
+
10
+ const TxaSettingsPermission = registerPlugin<TxaSettingsPermissionPlugin>(
11
+ 'TxaSettingsPermission',
12
+ {
13
+ web: () => import('./web').then(m => new m.TxaSettingsPermissionWeb()),
14
+ }
15
+ );
16
+
17
+ export * from './definitions';
18
+ export { TxaSettingsPermission };
package/src/web.ts ADDED
@@ -0,0 +1,103 @@
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
+
6
+ import { WebPlugin } from '@capacitor/core';
7
+ import type {
8
+ TxaSettingsPermissionPlugin,
9
+ DeviceInfoResult,
10
+ OpenSettingsResult,
11
+ PermissionResult,
12
+ BatteryOptimizationResult,
13
+ CheckAllRequiredResult,
14
+ CheckRuntimePermissionOptions,
15
+ CheckRuntimePermissionResult,
16
+ CheckMultiplePermissionsOptions,
17
+ CheckMultiplePermissionsResult,
18
+ TxaPermissionLog,
19
+ } from './definitions';
20
+
21
+ function webLog(action: string): TxaPermissionLog {
22
+ return {
23
+ level: 'info',
24
+ message: `[Web] ${action}: không áp dụng trên web, trả về mock`,
25
+ action,
26
+ success: true,
27
+ androidVersion: 0,
28
+ androidRelease: 'web',
29
+ timestamp: Date.now(),
30
+ };
31
+ }
32
+
33
+ function mockOpen(screen: string): OpenSettingsResult {
34
+ console.warn(`[TxaSettingsPermission] Web: ${screen} không áp dụng trên web`);
35
+ return { opened: true, granted: true, screen, log: webLog(screen) };
36
+ }
37
+
38
+ function mockGranted(action: string): PermissionResult {
39
+ return { granted: true, log: webLog(action) };
40
+ }
41
+
42
+ export class TxaSettingsPermissionWeb
43
+ extends WebPlugin
44
+ implements TxaSettingsPermissionPlugin
45
+ {
46
+ async getDeviceInfo(): Promise<DeviceInfoResult> {
47
+ return {
48
+ androidSdk: 0, androidRelease: 'web', manufacturer: 'web',
49
+ model: 'browser', brand: 'web', device: 'web', packageName: 'web',
50
+ supportsManageAllFiles: false, supportsNotificationPolicy: false,
51
+ supportsOverlay: false, supportsBatteryOptimization: false,
52
+ supportsMediaPermissions: false, supportsInstallUnknownApps: false,
53
+ supportsUsageStats: false, supportsAccessibility: false, supportsDeviceAdmin: false,
54
+ };
55
+ }
56
+
57
+ async openSettings(): Promise<OpenSettingsResult> { return mockOpen('APP_SETTINGS'); }
58
+ async openManageAllFiles(): Promise<OpenSettingsResult> { return mockOpen('MANAGE_ALL_FILES'); }
59
+ async checkManageAllFiles(): Promise<PermissionResult> { return mockGranted('CHECK_MANAGE_ALL_FILES'); }
60
+ async openOverlaySettings(): Promise<OpenSettingsResult> { return mockOpen('OVERLAY_SETTINGS'); }
61
+ async checkOverlay(): Promise<PermissionResult> { return mockGranted('CHECK_OVERLAY'); }
62
+ async openInstallUnknownApps(): Promise<OpenSettingsResult> { return mockOpen('INSTALL_UNKNOWN_APPS'); }
63
+ async checkInstallUnknownApps(): Promise<PermissionResult> { return mockGranted('CHECK_INSTALL_UNKNOWN'); }
64
+ async openBatteryOptimization(): Promise<OpenSettingsResult> { return mockOpen('BATTERY_OPTIMIZATION'); }
65
+ async checkBatteryOptimization(): Promise<BatteryOptimizationResult> {
66
+ return { ignoring: true, granted: true, log: webLog('CHECK_BATTERY') };
67
+ }
68
+ async openNotificationSettings(): Promise<OpenSettingsResult> { return mockOpen('NOTIFICATION_SETTINGS'); }
69
+ async openNotificationPolicyAccess(): Promise<OpenSettingsResult> { return mockOpen('NOTIFICATION_POLICY'); }
70
+ async openAccessibilitySettings(): Promise<OpenSettingsResult> { return mockOpen('ACCESSIBILITY_SETTINGS'); }
71
+ async openUsageStatsSettings(): Promise<OpenSettingsResult> { return mockOpen('USAGE_STATS_SETTINGS'); }
72
+ async openDeviceAdminSettings(): Promise<OpenSettingsResult> { return mockOpen('DEVICE_ADMIN_SETTINGS'); }
73
+ async openWifiSettings(): Promise<OpenSettingsResult> { return mockOpen('WIFI_SETTINGS'); }
74
+ async openLocationSettings(): Promise<OpenSettingsResult> { return mockOpen('LOCATION_SETTINGS'); }
75
+ async openBluetoothSettings(): Promise<OpenSettingsResult> { return mockOpen('BLUETOOTH_SETTINGS'); }
76
+ async openNfcSettings(): Promise<OpenSettingsResult> { return mockOpen('NFC_SETTINGS'); }
77
+ async openDateTimeSettings(): Promise<OpenSettingsResult> { return mockOpen('DATE_SETTINGS'); }
78
+ async openLanguageSettings(): Promise<OpenSettingsResult> { return mockOpen('LOCALE_SETTINGS'); }
79
+ async openStorageSettings(): Promise<OpenSettingsResult> { return mockOpen('STORAGE_SETTINGS'); }
80
+ async openDisplaySettings(): Promise<OpenSettingsResult> { return mockOpen('DISPLAY_SETTINGS'); }
81
+ async openSoundSettings(): Promise<OpenSettingsResult> { return mockOpen('SOUND_SETTINGS'); }
82
+
83
+ async checkRuntimePermission(options: CheckRuntimePermissionOptions): Promise<CheckRuntimePermissionResult> {
84
+ return { permission: options.permission, granted: true, log: webLog('CHECK_RUNTIME_PERMISSION') };
85
+ }
86
+
87
+ async checkMultiplePermissions(options: CheckMultiplePermissionsOptions): Promise<CheckMultiplePermissionsResult> {
88
+ const results: Record<string, boolean> = {};
89
+ options.permissions.forEach(p => { results[p] = true; });
90
+ return { results, allGranted: true, missing: [], log: webLog('CHECK_MULTIPLE_PERMISSIONS') };
91
+ }
92
+
93
+ async checkAllRequired(): Promise<CheckAllRequiredResult> {
94
+ return {
95
+ checks: {
96
+ manageAllFiles: true, overlay: true, installUnknownApps: true,
97
+ batteryOptimization: true, camera: true, microphone: true, location: true,
98
+ },
99
+ androidSdk: 0,
100
+ androidRelease: 'web',
101
+ };
102
+ }
103
+ }