Skip to content

Commit 46a2468

Browse files
committed
Upload and install APK
1 parent 3f14543 commit 46a2468

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

lib/pages/main/package_list.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
import 'package:desktop_adb_file_browser/riverpod/file_queue.dart';
12
import 'package:desktop_adb_file_browser/riverpod/package_list.dart';
23
import 'package:desktop_adb_file_browser/riverpod/selected_device.dart';
34
import 'package:desktop_adb_file_browser/utils/adb.dart';
45
import 'package:desktop_adb_file_browser/widgets/adb_queue_indicator.dart';
6+
import 'package:file_selector/file_selector.dart';
7+
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
58
import 'package:flutter/material.dart';
69
import 'package:flutter/services.dart';
710
import 'package:flutter_riverpod/flutter_riverpod.dart';
11+
import 'package:uuid/uuid.dart';
812

913
class PackageList extends ConsumerStatefulWidget {
1014
const PackageList({super.key, required this.serial});
@@ -24,6 +28,16 @@ class _PackageListState extends ConsumerState<PackageList> {
2428
appBar: AppBar(
2529
title: const Text("Packages"),
2630
automaticallyImplyLeading: true,
31+
actions: [
32+
IconButton(
33+
onPressed: () async {
34+
final path = await openFile();
35+
if (path == null) return;
36+
37+
await uploadAndInstallAPK(path.path);
38+
},
39+
icon: const Icon(FluentIcons.arrow_upload_32_regular))
40+
],
2741
),
2842
body: ADBQueueIndicator(
2943
child: packageListFuture.when(
@@ -100,4 +114,24 @@ class _PackageListState extends ConsumerState<PackageList> {
100114
),
101115
);
102116
}
117+
118+
Future<void> uploadAndInstallAPK(String apkPath) async {
119+
var notifier = ref.read(uploadQueueProvider.notifier);
120+
var device = ref.read(selectedDeviceProvider);
121+
122+
var uuid = const Uuid();
123+
var randomPath = "/tmp/${uuid.v8()}.apk";
124+
125+
await notifier.doUpload(device?.serialName, apkPath, randomPath);
126+
await Adb.installPackage(device?.serialName, randomPath);
127+
128+
if (!context.mounted) return;
129+
final snackBar = SnackBar(
130+
content:
131+
Text('Installed package ${Adb.adbPathContext.basename(apkPath)}'),
132+
);
133+
ScaffoldMessenger.of(context).showSnackBar(snackBar);
134+
135+
await Adb.removeFile(device?.serialName, randomPath);
136+
}
103137
}

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ packages:
11031103
source: hosted
11041104
version: "1.3.2"
11051105
uuid:
1106-
dependency: transitive
1106+
dependency: "direct main"
11071107
description:
11081108
name: uuid
11091109
sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ dependencies:
6262
riverpod_annotation: ^2.3.5
6363
freezed_annotation: ^2.4.1
6464
json_annotation: ^4.8.1
65+
uuid: ^4.4.2
6566

6667
dev_dependencies:
6768
flutter_test:

0 commit comments

Comments
 (0)