Skip to content

Commit b4256d6

Browse files
committed
调试应用增加系统应用
1 parent 4714521 commit b4256d6

File tree

2 files changed

+80
-7
lines changed

2 files changed

+80
-7
lines changed

lib/page/common/package_help_mixin.dart

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ import 'package:android_tool/page/common/base_view_model.dart';
33
import 'package:android_tool/widget/list_filter_dialog.dart';
44
import 'package:flutter/material.dart';
55
import 'package:process_run/shell.dart';
6+
import 'package:shared_preferences/shared_preferences.dart';
67

78
mixin PackageHelpMixin implements BaseViewModel {
9+
static const String isShowSystemApp = 'isShowSystemApp';
10+
811
String packageName = "";
912

1013
ListFilterController<ListFilterItem> packageNameController =
@@ -13,14 +16,16 @@ mixin PackageHelpMixin implements BaseViewModel {
1316
List<ListFilterItem> packageNameList = [];
1417

1518
/// 选择调试应用
16-
Future<String> showPackageSelect(BuildContext context, String deviceId) async {
19+
Future<String> showPackageSelect(
20+
BuildContext context, String deviceId) async {
1721
if (packageNameList.isEmpty) {
1822
return "";
1923
}
2024
var value = await packageNameController.show(
2125
context,
2226
packageNameList,
2327
ListFilterItem(packageName),
28+
isSelectApp: true,
2429
refreshCallback: () {
2530
getInstalledApp(deviceId);
2631
},
@@ -33,8 +38,17 @@ mixin PackageHelpMixin implements BaseViewModel {
3338

3439
/// 获取已安装的应用
3540
Future<void> getInstalledApp(String deviceId) async {
36-
var installedApp = await execAdb(
37-
['-s', deviceId, 'shell', 'pm', 'list', 'packages', '-3']);
41+
var preferences = await SharedPreferences.getInstance();
42+
var isShowSysApp = preferences.getBool(isShowSystemApp) ?? false;
43+
var installedApp = await execAdb([
44+
'-s',
45+
deviceId,
46+
'shell',
47+
'pm',
48+
'list',
49+
'packages',
50+
isShowSysApp ? '' : '-3',
51+
]);
3852
if (installedApp == null) {
3953
resetPackage();
4054
return;
@@ -44,18 +58,23 @@ mixin PackageHelpMixin implements BaseViewModel {
4458
return ListFilterItem(e.replaceAll("package:", ""));
4559
}).toList();
4660
packageNameList.sort((a, b) => a.itemTitle.compareTo(b.itemTitle));
47-
packageNameController.setData(packageNameList);
4861
if (packageNameList.isNotEmpty) {
4962
var package = await App().getPackageName();
5063
if (package.isNotEmpty) {
5164
packageName = packageNameList
52-
.firstWhere((element) => element.itemTitle == package,
53-
orElse: () => packageNameList.first)
65+
.firstWhere(
66+
(element) => element.itemTitle == package,
67+
orElse: () => packageNameList.first,
68+
)
5469
.itemTitle;
5570
} else {
5671
packageName = packageNameList.first.itemTitle;
5772
}
5873
}
74+
packageNameController.setData(
75+
packageNameList,
76+
current: ListFilterItem(packageName),
77+
);
5978
}
6079

6180
void resetPackage() {

lib/widget/list_filter_dialog.dart

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1+
import 'package:android_tool/page/common/package_help_mixin.dart';
12
import 'package:android_tool/widget/text_view.dart';
23
import 'package:flutter/material.dart';
34
import 'package:flutter/rendering.dart';
45
import 'package:provider/provider.dart';
56
import 'package:selector_plus/selector_plus.dart';
7+
import 'package:shared_preferences/shared_preferences.dart';
68

79
class ListFilterDialog<T extends ListFilterItem> extends StatefulWidget {
810
final ListFilterController controller;
911

1012
final String? title;
1113
final String? tipText;
1214
final String? notFoundText;
15+
final bool isSelectApp;
1316
final Function()? refreshCallback;
1417

1518
const ListFilterDialog({
@@ -18,6 +21,7 @@ class ListFilterDialog<T extends ListFilterItem> extends StatefulWidget {
1821
this.title,
1922
this.tipText,
2023
this.notFoundText,
24+
this.isSelectApp = false,
2125
this.refreshCallback,
2226
}) : super(key: key);
2327

@@ -126,13 +130,38 @@ class _ListFilterDialogState<T extends ListFilterItem>
126130
},
127131
selector: widget.controller.selectorList,
128132
),
133+
Offstage(
134+
offstage: !widget.isSelectApp,
135+
child: _buildShowSelectSystemAppView(),
136+
),
129137
],
130138
),
131139
),
132140
),
133141
);
134142
});
135143
}
144+
145+
Widget _buildShowSelectSystemAppView() {
146+
return Row(
147+
mainAxisAlignment: MainAxisAlignment.end,
148+
children: [
149+
const TextView("显示系统应用"),
150+
Selector<ListFilterController, bool>(
151+
selector: (context, controller) => controller._isShowSystemApp,
152+
builder: (context, isFilter, child) {
153+
return Checkbox(
154+
value: isFilter,
155+
onChanged: (value) async {
156+
await widget.controller._setShowSystemApp(value ?? false);
157+
widget.refreshCallback?.call();
158+
},
159+
);
160+
},
161+
)
162+
],
163+
);
164+
}
136165
}
137166

138167
class ListFilterItem {
@@ -150,6 +179,8 @@ class ListFilterController<T extends ListFilterItem> extends ChangeNotifier {
150179

151180
T? current;
152181

182+
bool _isShowSystemApp = false;
183+
153184
ListFilterController() {
154185
controller.addListener(() {
155186
if (controller.text.isEmpty) {
@@ -172,28 +203,51 @@ class ListFilterController<T extends ListFilterItem> extends ChangeNotifier {
172203
String? title,
173204
String? tipText,
174205
String? notFoundText,
206+
bool isSelectApp = false,
175207
Function()? refreshCallback,
176208
}) async {
177209
dataList = data;
178210
selectorList.value = data;
179211
this.current = current;
212+
if (isSelectApp) {
213+
_getIsShowSystemApp();
214+
}
180215
return await showDialog<T>(
181216
context: context,
182217
builder: (context) => ListFilterDialog(
183218
controller: this,
184219
title: title,
185220
tipText: tipText,
186221
notFoundText: notFoundText,
222+
isSelectApp: isSelectApp,
187223
refreshCallback: refreshCallback,
188224
),
189225
);
190226
}
191227

192-
void setData(List<T> data) {
228+
void setData(List<T> data, {T? current}) {
229+
if (current != null) {
230+
this.current = current;
231+
}
193232
dataList = data;
194233
selectorList.value = dataList
195234
.where((element) => element.itemTitle.contains(controller.text))
196235
.toList();
197236
notifyListeners();
198237
}
238+
239+
_setShowSystemApp(bool bool) async {
240+
_isShowSystemApp = bool;
241+
notifyListeners();
242+
var prefs = await SharedPreferences.getInstance();
243+
prefs.setBool(PackageHelpMixin.isShowSystemApp, bool);
244+
}
245+
246+
void _getIsShowSystemApp() {
247+
SharedPreferences.getInstance().then((value) {
248+
_isShowSystemApp =
249+
value.getBool(PackageHelpMixin.isShowSystemApp) ?? false;
250+
notifyListeners();
251+
});
252+
}
199253
}

0 commit comments

Comments
 (0)