txa-settings-permission 1.3.0 → 1.5.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/README.md +29 -0
- package/android/src/main/java/online/txa/settingspermission/TxaSettingsPermissionPlugin.java +88 -0
- package/dist/cjs/definitions.d.ts +17 -0
- package/dist/cjs/web.d.ts +8 -1
- package/dist/cjs/web.js +8 -0
- package/dist/esm/definitions.d.ts +17 -0
- package/dist/esm/web.d.ts +8 -1
- package/dist/esm/web.js +8 -0
- package/dist/plugin.cjs.js +8 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +8 -0
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/definitions.ts +16 -0
- package/src/web.ts +9 -0
package/README.md
CHANGED
|
@@ -30,6 +30,7 @@ tự động tương thích theo Android version, log đẹp khi lỗi.
|
|
|
30
30
|
| 📡 **System Settings** | WiFi, Location, Bluetooth, NFC, Sound, Display... |
|
|
31
31
|
| 🔍 **Runtime Check** | Check bất kỳ permission nào theo tên |
|
|
32
32
|
| 📋 **Bulk Check** | Check nhiều permission cùng lúc |
|
|
33
|
+
| 📱 **APK Installation** | Cài đặt APK từ đường dẫn file |
|
|
33
34
|
| 🔄 **Auto-compat** | Tự fallback theo Android version |
|
|
34
35
|
| 📝 **Đẹp Log** | Mọi kết quả đều kèm log object chi tiết |
|
|
35
36
|
|
|
@@ -217,6 +218,32 @@ await TxaSettingsPermission.openNotificationPolicyAccess(); // DND / Không làm
|
|
|
217
218
|
|
|
218
219
|
---
|
|
219
220
|
|
|
221
|
+
### APK Installation
|
|
222
|
+
|
|
223
|
+
Cài đặt APK từ đường dẫn file trên thiết bị.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
const result = await TxaSettingsPermission.installApk({
|
|
227
|
+
path: '/storage/emulated/0/Download/app.apk'
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
// result.success = true → Đã mở trình cài đặt
|
|
231
|
+
// result.log.message = "Đã mở trình cài đặt APK"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Lưu ý:**
|
|
235
|
+
- Android 7+: Sử dụng FileProvider để chia sẻ file
|
|
236
|
+
- Android < 7: Sử dụng Uri trực tiếp
|
|
237
|
+
- Cần quyền `MANAGE_EXTERNAL_STORAGE` cho file ở external storage
|
|
238
|
+
- Cần quyền `REQUEST_INSTALL_PACKAGES` trong AndroidManifest.xml
|
|
239
|
+
|
|
240
|
+
```xml
|
|
241
|
+
<!-- AndroidManifest.xml -->
|
|
242
|
+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
220
247
|
### System Settings
|
|
221
248
|
|
|
222
249
|
```typescript
|
|
@@ -342,6 +369,7 @@ Dưới đây là danh sách đầy đủ các Method có trong Package và mứ
|
|
|
342
369
|
| **Accessibility** | - | `openAccessibilitySettings()` | 5.0+ | Cài đặt Trợ năng |
|
|
343
370
|
| **Usage Stats** | - | `openUsageStatsSettings()` | 5.1+ | Dữ liệu sử dụng ứng dụng |
|
|
344
371
|
| **Device Admin** | - | `openDeviceAdminSettings()` | 5.0+ | Quản trị thiết bị |
|
|
372
|
+
| **APK Installation** | - | `installApk({ path: string })` | 5.0+ | Cài đặt APK từ file path |
|
|
345
373
|
|
|
346
374
|
### ⚙️ Cài đặt hệ thống (General System Settings)
|
|
347
375
|
|
|
@@ -391,6 +419,7 @@ Dưới đây là bảng tổng hợp các phương thức chính và mức đ
|
|
|
391
419
|
| `openAccessibilitySettings` | Mở cài đặt Trợ năng | Không | 5.0+ | Mở màn hình danh sách dịch vụ trợ năng |
|
|
392
420
|
| `openAppDetailsSettings` | Mở thông tin ứng dụng | Không | 5.0+ | Màn hình sytem app info (Clear data, Force stop...) |
|
|
393
421
|
| `openSettings` | Mở cài đặt App chung | Không | 5.0+ | Màn hình cài đặt tổng quát của ứng dụng |
|
|
422
|
+
| `installApk` | Cài đặt APK từ file | `{ path: string }` | 5.0+ | Mở trình cài đặt APK từ đường dẫn file |
|
|
394
423
|
| `checkMultiplePermissions` | Check nhiều quyền cùng lúc | `{ permissions: string[] }` | 5.0+ | Truyền vào mảng `android.permission.NAME` |
|
|
395
424
|
|
|
396
425
|
---
|
package/android/src/main/java/online/txa/settingspermission/TxaSettingsPermissionPlugin.java
CHANGED
|
@@ -1048,6 +1048,42 @@ public class TxaSettingsPermissionPlugin extends Plugin {
|
|
|
1048
1048
|
}
|
|
1049
1049
|
}
|
|
1050
1050
|
|
|
1051
|
+
@PluginMethod
|
|
1052
|
+
public void readdir(PluginCall call) {
|
|
1053
|
+
String path = call.getString("path");
|
|
1054
|
+
if (path == null) {
|
|
1055
|
+
call.reject("Path is required");
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
try {
|
|
1060
|
+
File dir = getFileObject(path);
|
|
1061
|
+
if (!dir.exists() || !dir.isDirectory()) {
|
|
1062
|
+
call.reject("Directory does not exist or is not a directory");
|
|
1063
|
+
return;
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
File[] files = dir.listFiles();
|
|
1067
|
+
JSArray filesArray = new JSArray();
|
|
1068
|
+
|
|
1069
|
+
if (files != null) {
|
|
1070
|
+
for (File file : files) {
|
|
1071
|
+
JSObject fileObj = new JSObject();
|
|
1072
|
+
fileObj.put("name", file.getName());
|
|
1073
|
+
fileObj.put("type", file.isDirectory() ? "directory" : "file");
|
|
1074
|
+
fileObj.put("size", file.length());
|
|
1075
|
+
filesArray.put(fileObj);
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
JSObject result = new JSObject();
|
|
1080
|
+
result.put("files", filesArray);
|
|
1081
|
+
call.resolve(result);
|
|
1082
|
+
} catch (Exception e) {
|
|
1083
|
+
call.reject("Failed to read directory: " + e.getMessage());
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1051
1087
|
@PluginMethod
|
|
1052
1088
|
public void getUri(PluginCall call) {
|
|
1053
1089
|
String path = call.getString("path");
|
|
@@ -1078,4 +1114,56 @@ public class TxaSettingsPermissionPlugin extends Plugin {
|
|
|
1078
1114
|
call.reject("TXA_ERR_" + screenName + ": Không thể mở → " + e.getMessage(), screenName + "_FAILED", e);
|
|
1079
1115
|
}
|
|
1080
1116
|
}
|
|
1117
|
+
|
|
1118
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1119
|
+
// installApk: Cài đặt APK từ đường dẫn file
|
|
1120
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1121
|
+
|
|
1122
|
+
@PluginMethod
|
|
1123
|
+
public void installApk(PluginCall call) {
|
|
1124
|
+
String filePath = call.getString("path");
|
|
1125
|
+
if (filePath == null || filePath.isEmpty()) {
|
|
1126
|
+
call.reject("TXA_ERR_PARAM: Thiếu tham số 'path'", "MISSING_PARAM");
|
|
1127
|
+
return;
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
try {
|
|
1131
|
+
File apkFile = new File(filePath);
|
|
1132
|
+
if (!apkFile.exists()) {
|
|
1133
|
+
call.reject("TXA_ERR_FILE: File APK không tồn tại: " + filePath, "FILE_NOT_FOUND");
|
|
1134
|
+
return;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
Activity activity = getActivity();
|
|
1138
|
+
Context context = getContext();
|
|
1139
|
+
|
|
1140
|
+
Intent intent = new Intent(Intent.ACTION_VIEW);
|
|
1141
|
+
Uri apkUri;
|
|
1142
|
+
|
|
1143
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
1144
|
+
// Android 7+: sử dụng FileProvider
|
|
1145
|
+
apkUri = androidx.core.content.FileProvider.getUriForFile(
|
|
1146
|
+
context,
|
|
1147
|
+
context.getPackageName() + ".fileprovider",
|
|
1148
|
+
apkFile
|
|
1149
|
+
);
|
|
1150
|
+
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
|
1151
|
+
} else {
|
|
1152
|
+
apkUri = Uri.fromFile(apkFile);
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
|
|
1156
|
+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
1157
|
+
activity.startActivity(intent);
|
|
1158
|
+
|
|
1159
|
+
logInfo("installApk → Launching installer for: " + filePath);
|
|
1160
|
+
JSObject result = new JSObject();
|
|
1161
|
+
result.put("success", true);
|
|
1162
|
+
result.put("log", buildLog("info", "Đã mở trình cài đặt APK", "INSTALL_APK", true));
|
|
1163
|
+
call.resolve(result);
|
|
1164
|
+
} catch (Exception e) {
|
|
1165
|
+
logError("installApk → " + e.getMessage());
|
|
1166
|
+
call.reject("TXA_ERR_INSTALL_APK: Không thể cài đặt APK → " + e.getMessage(), "INSTALL_APK_FAILED", e);
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1081
1169
|
}
|
|
@@ -82,6 +82,16 @@ export interface GetUriOptions {
|
|
|
82
82
|
export interface GetUriResult {
|
|
83
83
|
uri: string;
|
|
84
84
|
}
|
|
85
|
+
export interface ReaddirOptions {
|
|
86
|
+
path: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ReaddirResult {
|
|
89
|
+
files: {
|
|
90
|
+
name: string;
|
|
91
|
+
type: 'file' | 'directory';
|
|
92
|
+
size: number;
|
|
93
|
+
}[];
|
|
94
|
+
}
|
|
85
95
|
export interface CheckRuntimePermissionOptions {
|
|
86
96
|
/** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
|
|
87
97
|
permission: string;
|
|
@@ -153,5 +163,12 @@ export interface TxaSettingsPermissionPlugin {
|
|
|
153
163
|
path: string;
|
|
154
164
|
recursive?: boolean;
|
|
155
165
|
}): Promise<void>;
|
|
166
|
+
readdir(options: ReaddirOptions): Promise<ReaddirResult>;
|
|
156
167
|
getUri(options: GetUriOptions): Promise<GetUriResult>;
|
|
168
|
+
installApk(options: {
|
|
169
|
+
path: string;
|
|
170
|
+
}): Promise<{
|
|
171
|
+
success: boolean;
|
|
172
|
+
log: TxaPermissionLog;
|
|
173
|
+
}>;
|
|
157
174
|
}
|
package/dist/cjs/web.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
4
4
|
*/
|
|
5
5
|
import { WebPlugin } from '@capacitor/core';
|
|
6
|
-
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult, WriteFileOptions, ReadFileOptions, ReadFileResult, DeleteFileOptions, GetUriOptions, GetUriResult } from './definitions';
|
|
6
|
+
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult, TxaPermissionLog, WriteFileOptions, ReadFileOptions, ReadFileResult, DeleteFileOptions, GetUriOptions, GetUriResult } from './definitions';
|
|
7
7
|
export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSettingsPermissionPlugin {
|
|
8
8
|
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
9
9
|
openSettings(): Promise<OpenSettingsResult>;
|
|
@@ -52,5 +52,12 @@ export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSe
|
|
|
52
52
|
path: string;
|
|
53
53
|
recursive?: boolean;
|
|
54
54
|
}): Promise<void>;
|
|
55
|
+
readdir(_options: import('./definitions').ReaddirOptions): Promise<import('./definitions').ReaddirResult>;
|
|
55
56
|
getUri(options: GetUriOptions): Promise<GetUriResult>;
|
|
57
|
+
installApk(options: {
|
|
58
|
+
path: string;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
success: boolean;
|
|
61
|
+
log: TxaPermissionLog;
|
|
62
|
+
}>;
|
|
56
63
|
}
|
package/dist/cjs/web.js
CHANGED
|
@@ -90,8 +90,16 @@ class TxaSettingsPermissionWeb extends core_1.WebPlugin {
|
|
|
90
90
|
}
|
|
91
91
|
async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }
|
|
92
92
|
async mkdir(_options) { console.warn('mkdir is not implemented on web'); }
|
|
93
|
+
async readdir(_options) {
|
|
94
|
+
console.warn('readdir is not implemented on web');
|
|
95
|
+
return { files: [] };
|
|
96
|
+
}
|
|
93
97
|
async getUri(options) {
|
|
94
98
|
return { uri: options.path };
|
|
95
99
|
}
|
|
100
|
+
async installApk(options) {
|
|
101
|
+
console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');
|
|
102
|
+
return { success: true, log: webLog('INSTALL_APK') };
|
|
103
|
+
}
|
|
96
104
|
}
|
|
97
105
|
exports.TxaSettingsPermissionWeb = TxaSettingsPermissionWeb;
|
|
@@ -82,6 +82,16 @@ export interface GetUriOptions {
|
|
|
82
82
|
export interface GetUriResult {
|
|
83
83
|
uri: string;
|
|
84
84
|
}
|
|
85
|
+
export interface ReaddirOptions {
|
|
86
|
+
path: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ReaddirResult {
|
|
89
|
+
files: {
|
|
90
|
+
name: string;
|
|
91
|
+
type: 'file' | 'directory';
|
|
92
|
+
size: number;
|
|
93
|
+
}[];
|
|
94
|
+
}
|
|
85
95
|
export interface CheckRuntimePermissionOptions {
|
|
86
96
|
/** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
|
|
87
97
|
permission: string;
|
|
@@ -153,5 +163,12 @@ export interface TxaSettingsPermissionPlugin {
|
|
|
153
163
|
path: string;
|
|
154
164
|
recursive?: boolean;
|
|
155
165
|
}): Promise<void>;
|
|
166
|
+
readdir(options: ReaddirOptions): Promise<ReaddirResult>;
|
|
156
167
|
getUri(options: GetUriOptions): Promise<GetUriResult>;
|
|
168
|
+
installApk(options: {
|
|
169
|
+
path: string;
|
|
170
|
+
}): Promise<{
|
|
171
|
+
success: boolean;
|
|
172
|
+
log: TxaPermissionLog;
|
|
173
|
+
}>;
|
|
157
174
|
}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Web không có Android Settings, tất cả mock trả về granted/opened=true
|
|
4
4
|
*/
|
|
5
5
|
import { WebPlugin } from '@capacitor/core';
|
|
6
|
-
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult, WriteFileOptions, ReadFileOptions, ReadFileResult, DeleteFileOptions, GetUriOptions, GetUriResult } from './definitions';
|
|
6
|
+
import type { TxaSettingsPermissionPlugin, DeviceInfoResult, OpenSettingsResult, PermissionResult, BatteryOptimizationResult, CheckAllRequiredResult, CheckRuntimePermissionOptions, CheckRuntimePermissionResult, CheckMultiplePermissionsOptions, CheckMultiplePermissionsResult, TxaPermissionLog, WriteFileOptions, ReadFileOptions, ReadFileResult, DeleteFileOptions, GetUriOptions, GetUriResult } from './definitions';
|
|
7
7
|
export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSettingsPermissionPlugin {
|
|
8
8
|
getDeviceInfo(): Promise<DeviceInfoResult>;
|
|
9
9
|
openSettings(): Promise<OpenSettingsResult>;
|
|
@@ -52,5 +52,12 @@ export declare class TxaSettingsPermissionWeb extends WebPlugin implements TxaSe
|
|
|
52
52
|
path: string;
|
|
53
53
|
recursive?: boolean;
|
|
54
54
|
}): Promise<void>;
|
|
55
|
+
readdir(_options: import('./definitions').ReaddirOptions): Promise<import('./definitions').ReaddirResult>;
|
|
55
56
|
getUri(options: GetUriOptions): Promise<GetUriResult>;
|
|
57
|
+
installApk(options: {
|
|
58
|
+
path: string;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
success: boolean;
|
|
61
|
+
log: TxaPermissionLog;
|
|
62
|
+
}>;
|
|
56
63
|
}
|
package/dist/esm/web.js
CHANGED
|
@@ -87,7 +87,15 @@ export class TxaSettingsPermissionWeb extends WebPlugin {
|
|
|
87
87
|
}
|
|
88
88
|
async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }
|
|
89
89
|
async mkdir(_options) { console.warn('mkdir is not implemented on web'); }
|
|
90
|
+
async readdir(_options) {
|
|
91
|
+
console.warn('readdir is not implemented on web');
|
|
92
|
+
return { files: [] };
|
|
93
|
+
}
|
|
90
94
|
async getUri(options) {
|
|
91
95
|
return { uri: options.path };
|
|
92
96
|
}
|
|
97
|
+
async installApk(options) {
|
|
98
|
+
console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');
|
|
99
|
+
return { success: true, log: webLog('INSTALL_APK') };
|
|
100
|
+
}
|
|
93
101
|
}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -99,9 +99,17 @@ class TxaSettingsPermissionWeb extends core.WebPlugin {
|
|
|
99
99
|
}
|
|
100
100
|
async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }
|
|
101
101
|
async mkdir(_options) { console.warn('mkdir is not implemented on web'); }
|
|
102
|
+
async readdir(_options) {
|
|
103
|
+
console.warn('readdir is not implemented on web');
|
|
104
|
+
return { files: [] };
|
|
105
|
+
}
|
|
102
106
|
async getUri(options) {
|
|
103
107
|
return { uri: options.path };
|
|
104
108
|
}
|
|
109
|
+
async installApk(options) {
|
|
110
|
+
console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');
|
|
111
|
+
return { success: true, log: webLog('INSTALL_APK') };
|
|
112
|
+
}
|
|
105
113
|
}
|
|
106
114
|
|
|
107
115
|
var web = /*#__PURE__*/Object.freeze({
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +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 setBrightness(options) { console.log('Web mock setBrightness:', options.value); }\n async getBrightness() { return { value: 1 }; }\n async setVolume(options) { console.log('Web mock setVolume:', options.value); }\n async getVolume() { return { value: 1 }; }\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 async writeFile(_options) { console.warn('writeFile is not implemented on web'); }\n async appendFile(_options) { console.warn('appendFile is not implemented on web'); }\n async readFile(_options) {\n console.warn('readFile is not implemented on web');\n return { data: '' };\n }\n async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }\n async mkdir(_options) { console.warn('mkdir is not implemented on web'); }\n async getUri(options) {\n return { uri: options.path };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
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 setBrightness(options) { console.log('Web mock setBrightness:', options.value); }\n async getBrightness() { return { value: 1 }; }\n async setVolume(options) { console.log('Web mock setVolume:', options.value); }\n async getVolume() { return { value: 1 }; }\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 async writeFile(_options) { console.warn('writeFile is not implemented on web'); }\n async appendFile(_options) { console.warn('appendFile is not implemented on web'); }\n async readFile(_options) {\n console.warn('readFile is not implemented on web');\n return { data: '' };\n }\n async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }\n async mkdir(_options) { console.warn('mkdir is not implemented on web'); }\n async readdir(_options) {\n console.warn('readdir is not implemented on web');\n return { files: [] };\n }\n async getUri(options) {\n return { uri: options.path };\n }\n async installApk(options) {\n console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');\n return { success: true, log: webLog('INSTALL_APK') };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -98,9 +98,17 @@ var txaSettingsPermission = (function (exports, core) {
|
|
|
98
98
|
}
|
|
99
99
|
async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }
|
|
100
100
|
async mkdir(_options) { console.warn('mkdir is not implemented on web'); }
|
|
101
|
+
async readdir(_options) {
|
|
102
|
+
console.warn('readdir is not implemented on web');
|
|
103
|
+
return { files: [] };
|
|
104
|
+
}
|
|
101
105
|
async getUri(options) {
|
|
102
106
|
return { uri: options.path };
|
|
103
107
|
}
|
|
108
|
+
async installApk(options) {
|
|
109
|
+
console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');
|
|
110
|
+
return { success: true, log: webLog('INSTALL_APK') };
|
|
111
|
+
}
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
var web = /*#__PURE__*/Object.freeze({
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +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 setBrightness(options) { console.log('Web mock setBrightness:', options.value); }\n async getBrightness() { return { value: 1 }; }\n async setVolume(options) { console.log('Web mock setVolume:', options.value); }\n async getVolume() { return { value: 1 }; }\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 async writeFile(_options) { console.warn('writeFile is not implemented on web'); }\n async appendFile(_options) { console.warn('appendFile is not implemented on web'); }\n async readFile(_options) {\n console.warn('readFile is not implemented on web');\n return { data: '' };\n }\n async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }\n async mkdir(_options) { console.warn('mkdir is not implemented on web'); }\n async getUri(options) {\n return { uri: options.path };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
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 setBrightness(options) { console.log('Web mock setBrightness:', options.value); }\n async getBrightness() { return { value: 1 }; }\n async setVolume(options) { console.log('Web mock setVolume:', options.value); }\n async getVolume() { return { value: 1 }; }\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 async writeFile(_options) { console.warn('writeFile is not implemented on web'); }\n async appendFile(_options) { console.warn('appendFile is not implemented on web'); }\n async readFile(_options) {\n console.warn('readFile is not implemented on web');\n return { data: '' };\n }\n async deleteFile(_options) { console.warn('deleteFile is not implemented on web'); }\n async mkdir(_options) { console.warn('mkdir is not implemented on web'); }\n async readdir(_options) {\n console.warn('readdir is not implemented on web');\n return { files: [] };\n }\n async getUri(options) {\n return { uri: options.path };\n }\n async installApk(options) {\n console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');\n return { success: true, log: webLog('INSTALL_APK') };\n }\n}\n"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "txa-settings-permission",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"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",
|
|
6
6
|
"main": "dist/plugin.cjs.js",
|
package/src/definitions.ts
CHANGED
|
@@ -95,6 +95,18 @@ export interface GetUriResult {
|
|
|
95
95
|
uri: string;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
export interface ReaddirOptions {
|
|
99
|
+
path: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface ReaddirResult {
|
|
103
|
+
files: {
|
|
104
|
+
name: string;
|
|
105
|
+
type: 'file' | 'directory';
|
|
106
|
+
size: number;
|
|
107
|
+
}[];
|
|
108
|
+
}
|
|
109
|
+
|
|
98
110
|
export interface CheckRuntimePermissionOptions {
|
|
99
111
|
/** Tên đầy đủ của permission, vd: "android.permission.CAMERA" */
|
|
100
112
|
permission: string;
|
|
@@ -189,5 +201,9 @@ export interface TxaSettingsPermissionPlugin {
|
|
|
189
201
|
readFile(options: ReadFileOptions): Promise<ReadFileResult>;
|
|
190
202
|
deleteFile(options: DeleteFileOptions): Promise<void>;
|
|
191
203
|
mkdir(options: { path: string, recursive?: boolean }): Promise<void>;
|
|
204
|
+
readdir(options: ReaddirOptions): Promise<ReaddirResult>;
|
|
192
205
|
getUri(options: GetUriOptions): Promise<GetUriResult>;
|
|
206
|
+
|
|
207
|
+
// APK Installation
|
|
208
|
+
installApk(options: { path: string }): Promise<{ success: boolean; log: TxaPermissionLog }>;
|
|
193
209
|
}
|
package/src/web.ts
CHANGED
|
@@ -120,7 +120,16 @@ export class TxaSettingsPermissionWeb
|
|
|
120
120
|
}
|
|
121
121
|
async deleteFile(_options: DeleteFileOptions): Promise<void> { console.warn('deleteFile is not implemented on web'); }
|
|
122
122
|
async mkdir(_options: { path: string, recursive?: boolean }): Promise<void> { console.warn('mkdir is not implemented on web'); }
|
|
123
|
+
async readdir(_options: import('./definitions').ReaddirOptions): Promise<import('./definitions').ReaddirResult> {
|
|
124
|
+
console.warn('readdir is not implemented on web');
|
|
125
|
+
return { files: [] };
|
|
126
|
+
}
|
|
123
127
|
async getUri(options: GetUriOptions): Promise<GetUriResult> {
|
|
124
128
|
return { uri: options.path };
|
|
125
129
|
}
|
|
130
|
+
|
|
131
|
+
async installApk(options: { path: string }): Promise<{ success: boolean; log: TxaPermissionLog }> {
|
|
132
|
+
console.warn('[TxaSettingsPermission] Web: installApk không áp dụng trên web, mock trả về success');
|
|
133
|
+
return { success: true, log: webLog('INSTALL_APK') };
|
|
134
|
+
}
|
|
126
135
|
}
|