Skip to content

Commit 6f64012

Browse files
committed
Add adb commands for installing and uninstalling
1 parent 8f50e84 commit 6f64012

File tree

3 files changed

+46
-20
lines changed

3 files changed

+46
-20
lines changed

lib/pages/main/package_list.dart

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import 'package:desktop_adb_file_browser/riverpod/package_list.dart';
2+
import 'package:desktop_adb_file_browser/riverpod/selected_device.dart';
3+
import 'package:desktop_adb_file_browser/utils/adb.dart';
4+
import 'package:desktop_adb_file_browser/widgets/adb_queue_indicator.dart';
25
import 'package:flutter/material.dart';
36
import 'package:flutter/services.dart';
47
import 'package:flutter_riverpod/flutter_riverpod.dart';
5-
import 'package:freezed_annotation/freezed_annotation.dart';
68

79
class PackageList extends ConsumerStatefulWidget {
810
const PackageList({super.key, required this.serial});
@@ -23,22 +25,24 @@ class _PackageListState extends ConsumerState<PackageList> {
2325
title: const Text("Packages"),
2426
automaticallyImplyLeading: true,
2527
),
26-
body: packageListFuture.when(
27-
data: (packageList) => ListView.separated(
28-
itemBuilder: (c, i) => itemBuilder(c, i, packageList),
29-
itemCount: packageList.length,
30-
shrinkWrap: true,
31-
separatorBuilder: (context, index) => const Divider(),
32-
),
33-
error: (error, stackTrace) {
34-
debugPrint(error.toString());
35-
debugPrint(stackTrace.toString());
36-
return Center(
37-
child: Text("Error: $error"),
38-
);
39-
},
40-
loading: () => const Center(
41-
child: CircularProgressIndicator(),
28+
body: ADBQueueIndicator(
29+
child: packageListFuture.when(
30+
data: (packageList) => ListView.separated(
31+
itemBuilder: (c, i) => itemBuilder(c, i, packageList),
32+
itemCount: packageList.length,
33+
shrinkWrap: true,
34+
separatorBuilder: (context, index) => const Divider(),
35+
),
36+
error: (error, stackTrace) {
37+
debugPrint(error.toString());
38+
debugPrint(stackTrace.toString());
39+
return Center(
40+
child: Text("Error: $error"),
41+
);
42+
},
43+
loading: () => const Center(
44+
child: CircularProgressIndicator(),
45+
),
4246
),
4347
),
4448
);
@@ -48,6 +52,7 @@ class _PackageListState extends ConsumerState<PackageList> {
4852
BuildContext context, int index, List<String> packageList) {
4953
final packageId = packageList[index];
5054
final packageMetadataFuture = ref.watch(packageInfoProvider(packageId));
55+
final selectedDevice = ref.watch(selectedDeviceProvider);
5156

5257
return packageMetadataFuture.when(
5358
data: (packageMetadata) => ListTile(
@@ -59,7 +64,17 @@ class _PackageListState extends ConsumerState<PackageList> {
5964
trailing: Wrap(
6065
children: [
6166
IconButton(onPressed: () {}, icon: const Icon(Icons.download)),
62-
IconButton(onPressed: () {}, icon: const Icon(Icons.delete)),
67+
IconButton(
68+
onPressed: () async {
69+
await Adb.uninstallPackage(
70+
selectedDevice!.serialName, packageId);
71+
if (!context.mounted) return;
72+
const snackBar = SnackBar(
73+
content: Text('Uninstalled package'),
74+
);
75+
ScaffoldMessenger.of(context).showSnackBar(snackBar);
76+
},
77+
icon: const Icon(Icons.delete)),
6378
IconButton(
6479
onPressed: () async {
6580
await Clipboard.setData(

lib/utils/adb.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,13 +310,20 @@ drwxrwx--x 2 u0_a140 sdcard_rw 3488 2023-11-01 10:45 mods_old
310310
final version = _packageVersion.firstMatch(str)?[1] ?? "version n/a";
311311

312312
return PackageMetadata(
313-
packageName: "",
313+
packageName: adbPathContext
314+
.basenameWithoutExtension(packageId.replaceAll(".", "/")),
314315
packageId: packageId,
315316
version: version,
316-
groupId: "",
317317
);
318318
}
319319

320+
static Future<void> installPackage(String? serialName, String path) async {
321+
await runAdbCommand(serialName, ["install", path]);
322+
}
323+
static Future<void> uninstallPackage(String? serialName, String packageId) async {
324+
await runAdbCommand(serialName, ["uninstall", packageId]);
325+
}
326+
320327
static Future<List<String>?> getDevicesSerial() async {
321328
const requiredString = "List of devices attached\n";
322329

lib/widgets/adb_queue_indicator.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import 'package:flutter/material.dart';
55
import 'package:flutter_riverpod/flutter_riverpod.dart';
66
import 'package:open_file/open_file.dart';
77

8+
9+
///
10+
/// Display ADB Queue
11+
///
812
class ADBQueueIndicator extends ConsumerStatefulWidget {
913
const ADBQueueIndicator({super.key, required this.child});
1014

0 commit comments

Comments
 (0)