Skip to content

Commit 90d8382

Browse files
committed
Display notification as upload/download finishes
1 parent 06f54d1 commit 90d8382

File tree

2 files changed

+84
-21
lines changed

2 files changed

+84
-21
lines changed

app/src/main/java/ca/pkay/rcloneexplorer/Services/DownloadService.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package ca.pkay.rcloneexplorer.Services;
22

3+
import android.annotation.SuppressLint;
34
import android.app.IntentService;
45
import android.app.NotificationChannel;
56
import android.app.NotificationManager;
67
import android.app.PendingIntent;
78
import android.content.Context;
89
import android.content.Intent;
10+
import android.os.AsyncTask;
911
import android.os.Build;
1012
import android.support.annotation.Nullable;
1113
import android.support.v4.app.NotificationCompat;
1214

1315
import java.util.List;
16+
import java.util.concurrent.ExecutionException;
1417

1518
import ca.pkay.rcloneexplorer.BroadcastReceivers.DownloadCancelAction;
1619
import ca.pkay.rcloneexplorer.Items.FileItem;
@@ -28,6 +31,9 @@ public class DownloadService extends IntentService {
2831
private final int PERSISTENT_NOTIFICATION_ID = 167;
2932
private final int FAILED_DOWNLOAD_NOTIFICATION_ID = 138;
3033
private final int DOWNLOAD_FINISHED_NOTIFICATION_ID = 80;
34+
private int numOfRunningProcesses;
35+
private int numOfFinishedDownloads;
36+
private int numOfFailedDownloads;
3137
private Rclone rclone;
3238
private List<Process> runningProcesses;
3339

@@ -71,19 +77,19 @@ protected void onHandleIntent(@Nullable Intent intent) {
7177
final String remote = intent.getStringExtra(REMOTE_ARG);
7278

7379
runningProcesses = rclone.downloadItems(remote, downloadList, downloadPath);
74-
int numOfRunningProcesses = runningProcesses.size();
75-
int numOfFinishedDownloads = 0;
76-
int numOfFailedDownloads = 0;
80+
numOfRunningProcesses = runningProcesses.size();
81+
numOfFinishedDownloads = 0;
82+
numOfFailedDownloads = 0;
83+
AsyncTask[] asyncTasks = new AsyncTask[numOfRunningProcesses];
84+
int i = 0;
7785
for (Process process : runningProcesses) {
78-
try {
79-
process.waitFor();
80-
if (process.exitValue() != 0) {
81-
showDownloadFailedNotification(++numOfFailedDownloads, numOfRunningProcesses);
82-
} else {
83-
showDownloadFinishedNotification(++numOfFinishedDownloads, numOfRunningProcesses);
84-
}
86+
asyncTasks[i++] = new MonitorDownload().execute(process);
87+
}
8588

86-
} catch (InterruptedException e) {
89+
for (AsyncTask asyncTask : asyncTasks) {
90+
try {
91+
asyncTask.get();
92+
} catch (InterruptedException | ExecutionException e) {
8793
e.printStackTrace();
8894
}
8995
}
@@ -140,4 +146,29 @@ private void setNotificationChannel() {
140146
}
141147
}
142148
}
149+
150+
@SuppressLint("StaticFieldLeak")
151+
private class MonitorDownload extends AsyncTask<Process, Void, Boolean> {
152+
153+
@Override
154+
protected Boolean doInBackground(Process... processes) {
155+
Process process = processes[0];
156+
try {
157+
process.waitFor();
158+
} catch (InterruptedException e) {
159+
e.printStackTrace();
160+
}
161+
return process.exitValue() == 0;
162+
}
163+
164+
@Override
165+
protected void onPostExecute(Boolean result) {
166+
super.onPostExecute(result);
167+
if (result) {
168+
showDownloadFinishedNotification(++numOfFinishedDownloads, numOfRunningProcesses);
169+
} else {
170+
showDownloadFailedNotification(++numOfFailedDownloads, numOfRunningProcesses);
171+
}
172+
}
173+
}
143174
}

app/src/main/java/ca/pkay/rcloneexplorer/Services/UploadService.java

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package ca.pkay.rcloneexplorer.Services;
22

3+
import android.annotation.SuppressLint;
34
import android.app.IntentService;
45
import android.app.NotificationChannel;
56
import android.app.NotificationManager;
67
import android.app.PendingIntent;
78
import android.content.Context;
89
import android.content.Intent;
10+
import android.os.AsyncTask;
911
import android.os.Build;
1012
import android.support.annotation.Nullable;
1113
import android.support.v4.app.NotificationCompat;
1214

1315
import java.util.ArrayList;
1416
import java.util.List;
17+
import java.util.concurrent.ExecutionException;
1518

1619
import ca.pkay.rcloneexplorer.BroadcastReceivers.DownloadCancelAction;
1720
import ca.pkay.rcloneexplorer.BroadcastReceivers.UploadCancelAction;
@@ -30,6 +33,9 @@ public class UploadService extends IntentService {
3033
private final int UPLOAD_FINISHED_NOTIFICATION_ID = 41;
3134
private final int UPLOAD_FAILED_NOTIFICATION_ID = 14;
3235
private Rclone rclone;
36+
private int numOfProcessesRunning;
37+
private int numOfFinishedUploads;
38+
private int numOfFailedUploads;
3339
private List<Process> runningProcesses;
3440

3541
/**
@@ -71,18 +77,19 @@ protected void onHandleIntent(@Nullable Intent intent) {
7177
final String remote = intent.getStringExtra(REMOTE_ARG);
7278

7379
runningProcesses = rclone.uploadFiles(remote, uploadPath, uploadList);
74-
int numOfProcessesRunning = runningProcesses.size();
75-
int numOfFinishedUploads = 0;
76-
int numOfFailedUploads = 0;
80+
numOfProcessesRunning = runningProcesses.size();
81+
numOfFinishedUploads = 0;
82+
numOfFailedUploads = 0;
83+
AsyncTask[] asyncTasks = new AsyncTask[numOfProcessesRunning];
84+
int i = 0;
7785
for (Process process : runningProcesses) {
86+
asyncTasks[i++] = new MonitorUpload().execute(process);
87+
}
88+
89+
for (AsyncTask asyncTask : asyncTasks) {
7890
try {
79-
process.waitFor();
80-
if (process.exitValue() != 0) {
81-
showUploadFailedNotification(++numOfFailedUploads, numOfProcessesRunning);
82-
} else {
83-
showUploadFinishedNotification(++numOfFinishedUploads, numOfProcessesRunning);
84-
}
85-
} catch (InterruptedException e) {
91+
asyncTask.get();
92+
} catch (InterruptedException | ExecutionException e) {
8693
e.printStackTrace();
8794
}
8895
}
@@ -139,4 +146,29 @@ private void setNotificationChannel() {
139146
}
140147
}
141148
}
149+
150+
@SuppressLint("StaticFieldLeak")
151+
private class MonitorUpload extends AsyncTask<Process, Void, Boolean> {
152+
153+
@Override
154+
protected Boolean doInBackground(Process... processes) {
155+
Process process = processes[0];
156+
try {
157+
process.waitFor();
158+
} catch (InterruptedException e) {
159+
e.printStackTrace();
160+
}
161+
return process.exitValue() == 0;
162+
}
163+
164+
@Override
165+
protected void onPostExecute(Boolean result) {
166+
super.onPostExecute(result);
167+
if (result) {
168+
showUploadFinishedNotification(++numOfFinishedUploads, numOfProcessesRunning);
169+
} else {
170+
showUploadFailedNotification(++numOfFailedUploads, numOfProcessesRunning);
171+
}
172+
}
173+
}
142174
}

0 commit comments

Comments
 (0)