Skip to content

Commit 729190c

Browse files
authored
Merge pull request #82 from MobileApplicationsClub/cancel-uploads
added cancel action in upload notification
2 parents d600447 + ba5cda2 commit 729190c

File tree

4 files changed

+56
-32
lines changed

4 files changed

+56
-32
lines changed

androidClient/app/build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies {
3838
implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
3939
implementation 'androidx.legacy:legacy-support-v4:1.0.0-rc02'
4040
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
41-
implementation 'com.google.android.material:material:1.0.0-rc01'
41+
implementation 'com.google.android.material:material:1.0.0-rc02'
4242
implementation 'pub.devrel:easypermissions:1.2.0'
4343
implementation('com.google.api-client:google-api-client-android:1.23.0') {
4444
exclude group: 'org.apache.httpcomponents'
@@ -48,9 +48,9 @@ dependencies {
4848
exclude group: 'org.apache.httpcomponents'
4949
}
5050
implementation 'com.google.firebase:firebase-core:16.0.3'
51-
implementation 'com.google.firebase:firebase-database:16.0.1'
51+
implementation 'com.google.firebase:firebase-database:16.0.2'
5252
implementation 'com.google.firebase:firebase-auth:16.0.3'
53-
implementation 'com.google.firebase:firebase-messaging:17.3.0'
53+
implementation 'com.google.firebase:firebase-messaging:17.3.1'
5454
implementation 'com.google.firebase:firebase-config:16.0.0'
5555
implementation 'com.google.android.gms:play-services-auth:16.0.0'
5656
implementation 'com.facebook.fresco:fresco:1.10.0'
@@ -60,12 +60,12 @@ dependencies {
6060
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
6161
def room_version = "2.0.0-rc01"
6262
implementation "androidx.room:room-runtime:$room_version"
63-
implementation 'com.android.support:design:28.0.0-rc01'
63+
implementation 'com.android.support:design:28.0.0-rc02'
6464
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
6565
implementation "com.android.support:support-core-utils:28.1.1"
66-
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
67-
implementation 'com.android.support:support-v4:28.0.0-rc01'
68-
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
66+
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
67+
implementation 'com.android.support:support-v4:28.0.0-rc02'
68+
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
6969
kapt "androidx.room:room-compiler:$room_version"
7070
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
7171
implementation 'com.google.code.gson:gson:2.8.5'

androidClient/app/src/main/java/com/macbitsgoa/comrades/coursematerial/UploadUtil.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.macbitsgoa.comrades.coursematerial;
22

33
import android.app.Notification;
4-
import android.app.PendingIntent;
54
import android.content.Context;
6-
import android.content.Intent;
75
import android.util.Log;
86
import android.webkit.MimeTypeMap;
97

@@ -35,32 +33,19 @@ public class UploadUtil {
3533
public static final String DRIVE_API_BASE_URL = "https://www.googleapis.com/drive/v3/files/";
3634
public static final String AUTHORIZATION_FIELD_KEY = "Authorization";
3735
public static final String AUTHORIZATION_FIELD_VALUE_PREFIX = "Bearer ";
38-
private static final String KEY_ACCESS_TOKEN = "accessToken";
39-
private static final String KEY_FILE_PATH = "filepath";
40-
private static final String KEY_FILE_NAME = "filename";
4136
private static final String TAG = TAG_PREFIX + UploadUtil.class.getSimpleName();
4237

43-
public static Intent makeUploadIntent(final Context context, final String path, final String accessToken,
44-
final String fileName) {
45-
Intent intent = new Intent(context, UploadUtil.class);
46-
intent.putExtra(KEY_FILE_NAME, fileName);
47-
intent.putExtra(KEY_ACCESS_TOKEN, accessToken);
48-
intent.putExtra(KEY_FILE_PATH, path);
49-
return intent;
50-
}
51-
52-
public static NotificationCompat.Builder sendNotification(Context context, int drawable, CharSequence message, CharSequence messageDetails) {
53-
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
54-
new Intent(context, UploadUtil.class), 0);
55-
38+
public static NotificationCompat.Builder sendNotification(Context context, int drawable, CharSequence message, CharSequence messageDetails, NotificationCompat.Action action) {
5639
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "progress")
5740
.setSmallIcon(drawable)
5841
.setContentTitle(message)
5942
.setContentText(messageDetails)
6043
.setColor(R.color.colorAccent)
6144
.setAutoCancel(false)
6245
.setPriority(Notification.PRIORITY_HIGH);
63-
mBuilder.setContentIntent(contentIntent);
46+
if (action != null) {
47+
mBuilder.addAction(action);
48+
}
6449
return mBuilder;
6550
}
6651

androidClient/app/src/main/java/com/macbitsgoa/comrades/coursematerial/Uploader.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.macbitsgoa.comrades.coursematerial;
22

33
import android.app.NotificationManager;
4+
import android.app.PendingIntent;
5+
import android.content.BroadcastReceiver;
46
import android.content.Context;
7+
import android.content.Intent;
8+
import android.content.IntentFilter;
59
import android.media.RingtoneManager;
610
import android.util.Log;
711

@@ -10,6 +14,7 @@
1014
import com.google.firebase.database.DatabaseReference;
1115
import com.macbitsgoa.comrades.R;
1216
import com.macbitsgoa.comrades.persistance.Database;
17+
import com.squareup.okhttp.Call;
1318
import com.squareup.okhttp.MediaType;
1419
import com.squareup.okhttp.OkHttpClient;
1520
import com.squareup.okhttp.Request;
@@ -23,6 +28,7 @@
2328
import java.io.File;
2429
import java.io.IOException;
2530
import java.security.SecureRandom;
31+
import java.util.Objects;
2632
import java.util.concurrent.TimeUnit;
2733

2834
import androidx.annotation.NonNull;
@@ -58,6 +64,9 @@ public class Uploader extends Worker {
5864
public static final String KEY_FILE_NAME = "fileName";
5965
public static final String KEY_COURSE_ID = "courseId";
6066
private static final String TAG = TAG_PREFIX + Uploader.class.getSimpleName();
67+
private static final String ACTION_CANCEL_UPLOAD = Uploader.class.getName() + ".action.cancel.upload";
68+
private static final String KEY_FILE_HASH = Uploader.class.getName() + ".key.fileHash";
69+
private static IntentFilter cancelUploadFilter = new IntentFilter(ACTION_CANCEL_UPLOAD);
6170
private String path;
6271
private String accessToken;
6372
private String fileName;
@@ -68,6 +77,8 @@ public class Uploader extends Worker {
6877
private NotificationManager notificationManager;
6978
private NotificationCompat.Builder builder;
7079
private int notificationId;
80+
private Call uploadCall;
81+
private boolean cancelledByUser = false;
7182

7283
/**
7384
* Handy method to access this class.
@@ -108,7 +119,6 @@ public Result doWork() {
108119
notificationManager = (NotificationManager)
109120
getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
110121

111-
notifyInit();
112122
fileHash = calculateMD5(new File(path));
113123
CourseMaterial duplicate = findDuplicate();
114124
if (duplicate != null) {
@@ -118,6 +128,10 @@ public Result doWork() {
118128

119129
String response = uploadFile();
120130
if (response == null) {
131+
if (cancelledByUser) {
132+
notificationManager.cancel(notificationId);
133+
return Result.SUCCESS;
134+
}
121135
notifyFailure();
122136
return Result.FAILURE;
123137
}
@@ -208,7 +222,9 @@ private String uploadFile() {
208222
)
209223
.post(requestBody)
210224
.build();
211-
final Response response = okHttpClient.newCall(request).execute();
225+
uploadCall = okHttpClient.newCall(request);
226+
notifyInit();
227+
final Response response = uploadCall.execute();
212228
if (response == null) {
213229
Log.e(TAG, "null response");
214230
return null;
@@ -307,31 +323,45 @@ private CourseMaterial findDuplicate() {
307323

308324
private void notifyDuplicate(String originalFileName) {
309325
builder = sendNotification(getApplicationContext(), R.drawable.ic_cloud_done_black_24dp, fileName + " couldn't be uploaded",
310-
"A similar file already exists in this course with name " + originalFileName);
326+
"A similar file already exists in this course with name " + originalFileName, null);
311327
builder.setProgress(0, 0, false);
312328
builder.setOngoing(false);
313329
builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
314330
notificationManager.notify(notificationId, builder.build());
315331
}
316332

317333
private void notifyInit() {
318-
builder = sendNotification(getApplicationContext(), R.drawable.ic_launcher_foreground, "Uploading " + fileName, "Please wait...");
334+
final int cancelUploadRc = notificationId;
335+
Intent broadcast = new Intent(ACTION_CANCEL_UPLOAD);
336+
broadcast.putExtra(KEY_FILE_HASH, fileHash);
337+
PendingIntent cancelIntent = PendingIntent.getBroadcast(getApplicationContext(), cancelUploadRc, broadcast, PendingIntent.FLAG_ONE_SHOT);
338+
final NotificationCompat.Action cancelAction = new NotificationCompat.Action(R.drawable.ic_close_black_24dp, getApplicationContext().getString(R.string.cancel), cancelIntent);
339+
getApplicationContext().registerReceiver(new BroadcastReceiver() {
340+
@Override
341+
public void onReceive(final Context context, final Intent intent) {
342+
if (Objects.equals(fileHash, intent.getStringExtra(KEY_FILE_HASH))) {
343+
cancelledByUser = true;
344+
uploadCall.cancel();
345+
}
346+
}
347+
}, cancelUploadFilter);
348+
builder = sendNotification(getApplicationContext(), R.drawable.ic_launcher_foreground, "Uploading " + fileName, "Please wait...", cancelAction);
319349
builder.setProgress(0, 0, true);
320350
builder.setOngoing(true);
321351
notificationManager.notify(notificationId, builder.build());
322352
}
323353

324354
private void notifyFailure() {
325355
builder = sendNotification(getApplicationContext(), R.drawable.ic_launcher_foreground, "Comrades",
326-
"File Could not be uploaded.Please try again later.");
356+
"File Could not be uploaded. Please try again later.", null);
327357
builder.setProgress(0, 0, false);
328358
builder.setOngoing(false);
329359
notificationManager.notify(notificationId, builder.build());
330360
}
331361

332362
private void notifySuccess() {
333363
builder = sendNotification(getApplicationContext(), R.drawable.ic_cloud_done_black_24dp, fileName + " uploaded",
334-
"Thanks for Contributing");
364+
"Thanks for Contributing", null);
335365
builder.setProgress(0, 0, false);
336366
builder.setOngoing(false);
337367
builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
9+
</vector>

0 commit comments

Comments
 (0)