@@ -101,29 +101,17 @@ class _PackageListState extends ConsumerState<PackageList> {
101
101
onTap: () {},
102
102
trailing: Wrap (
103
103
children: [
104
- IconButton (onPressed: () {}, icon: const Icon (Icons .download)),
105
104
IconButton (
106
- onPressed: () async {
107
- await Adb .uninstallPackage (
108
- selectedDevice! .serialName, packageId);
109
- if (! context.mounted) return ;
110
- const snackBar = SnackBar (
111
- content: Text ('Uninstalled package' ),
112
- );
113
- ScaffoldMessenger .of (context).showSnackBar (snackBar);
114
- },
115
- icon: const Icon (Icons .delete)),
105
+ onPressed: () =>
106
+ _downloadPackage (selectedDevice! .serialName, packageId),
107
+ icon: const Icon (Icons .download)),
116
108
IconButton (
117
- onPressed: () async {
118
- await Clipboard .setData (
119
- ClipboardData (text: packageMetadata.packageId));
120
-
121
- if (! context.mounted) return ;
122
- const snackBar = SnackBar (
123
- content: Text ('Copied package id to clipboard' ),
124
- );
125
- ScaffoldMessenger .of (context).showSnackBar (snackBar);
126
- },
109
+ onPressed: () =>
110
+ _deletePackage (selectedDevice! .serialName, packageId),
111
+ icon: const Icon (Icons .delete),
112
+ ),
113
+ IconButton (
114
+ onPressed: () => _copyPath (packageMetadata),
127
115
icon: const Icon (Icons .copy))
128
116
],
129
117
),
@@ -156,6 +144,45 @@ class _PackageListState extends ConsumerState<PackageList> {
156
144
);
157
145
ScaffoldMessenger .of (context).showSnackBar (snackBar);
158
146
147
+ // cleanup
159
148
await Adb .removeFile (device? .serialName, randomPath);
160
149
}
150
+
151
+ void _deletePackage (String serialName, String packageId) async {
152
+ await Adb .uninstallPackage (serialName, packageId);
153
+ if (! context.mounted) return ;
154
+ const snackBar = SnackBar (
155
+ content: Text ('Uninstalled package' ),
156
+ showCloseIcon: true ,
157
+ );
158
+ ScaffoldMessenger .of (context).showSnackBar (snackBar);
159
+ }
160
+
161
+ void _downloadPackage (String serialName, String packageId) async {
162
+ var destPath = await getSaveLocation (suggestedName: "$packageId .apk" );
163
+ if (destPath == null ) return ;
164
+
165
+ var apkPath = await Adb .getPackagePath (serialName, packageId);
166
+ var notifier = ref.read (downloadQueueProvider.notifier);
167
+
168
+ await notifier.doDownload (serialName, apkPath, destPath.path);
169
+
170
+ if (! context.mounted) return ;
171
+ final snackBar = SnackBar (
172
+ content: Text ('Downloaded apk to ${destPath .path }' ),
173
+ showCloseIcon: true ,
174
+ );
175
+ ScaffoldMessenger .of (context).showSnackBar (snackBar);
176
+ }
177
+
178
+ void _copyPath (PackageMetadata packageMetadata) async {
179
+ await Clipboard .setData (ClipboardData (text: packageMetadata.packageId));
180
+
181
+ if (! context.mounted) return ;
182
+ const snackBar = SnackBar (
183
+ content: Text ('Copied package id to clipboard' ),
184
+ showCloseIcon: true ,
185
+ );
186
+ ScaffoldMessenger .of (context).showSnackBar (snackBar);
187
+ }
161
188
}
0 commit comments