Skip to content

Commit 6842420

Browse files
whymneslihanturan
authored andcommitted
Use NotificationChannel and prevent crash in API 26 (commons-app#1835)
1 parent 7a43c59 commit 6842420

File tree

4 files changed

+44
-16
lines changed

4 files changed

+44
-16
lines changed

app/src/main/java/fr/free/nrw/commons/CommonsApplication.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package fr.free.nrw.commons;
22

3+
import android.app.NotificationChannel;
4+
import android.app.NotificationManager;
35
import android.content.Context;
46
import android.content.SharedPreferences;
57
import android.database.sqlite.SQLiteDatabase;
8+
import android.os.Build;
9+
import android.support.annotation.RequiresApi;
610
import android.support.multidex.MultiDexApplication;
711

812
import com.facebook.drawee.backends.pipeline.Fresco;
@@ -60,6 +64,8 @@ public class CommonsApplication extends MultiDexApplication {
6064

6165
public static final String LOGS_PRIVATE_EMAIL_SUBJECT = "Commons Android App (%s) Logs";
6266

67+
public static final String NOTIFICATION_CHANNEL_ID_ALL = "CommonsNotificationAll";
68+
6369
private RefWatcher refWatcher;
6470

6571

@@ -92,10 +98,23 @@ public void onCreate() {
9298
Stetho.initializeWithDefaults(this);
9399
}
94100

101+
102+
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
103+
createNotificationChannel();
104+
}
105+
95106
// Fire progress callbacks for every 3% of uploaded content
96107
System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0");
97108
}
98109

110+
@RequiresApi(26)
111+
private void createNotificationChannel() {
112+
NotificationChannel channel = new NotificationChannel(
113+
NOTIFICATION_CHANNEL_ID_ALL,
114+
getString(R.string.notifications_channel_name_all), NotificationManager.IMPORTANCE_NONE);
115+
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
116+
manager.createNotificationChannel(channel);
117+
}
99118

100119
/**
101120
* Helps in setting up LeakCanary library

app/src/main/java/fr/free/nrw/commons/delete/DeleteTask.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import javax.inject.Inject;
1616

17+
import fr.free.nrw.commons.CommonsApplication;
1718
import fr.free.nrw.commons.Media;
1819
import fr.free.nrw.commons.R;
1920
import fr.free.nrw.commons.auth.SessionManager;
@@ -44,14 +45,17 @@ public DeleteTask (Context context, Media media, String reason){
4445
}
4546

4647
@Override
47-
protected void onPreExecute(){
48+
protected void onPreExecute() {
4849
ApplicationlessInjection
4950
.getInstance(context.getApplicationContext())
5051
.getCommonsApplicationComponent()
5152
.inject(this);
5253

53-
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
54-
notificationBuilder = new NotificationCompat.Builder(context);
54+
notificationManager =
55+
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
56+
notificationBuilder = new NotificationCompat.Builder(
57+
context,
58+
CommonsApplication.NOTIFICATION_CHANNEL_ID_ALL);
5559
Toast toast = new Toast(context);
5660
toast.setGravity(Gravity.CENTER,0,0);
5761
toast = Toast.makeText(context,"Trying to nominate "+media.getDisplayTitle()+ " for deletion",Toast.LENGTH_SHORT);

app/src/main/java/fr/free/nrw/commons/upload/UploadService.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import android.graphics.BitmapFactory;
1111
import android.os.Bundle;
1212
import android.support.v4.app.NotificationCompat;
13-
import android.util.Log;
1413
import android.webkit.MimeTypeMap;
1514
import android.widget.Toast;
1615

@@ -27,6 +26,7 @@
2726
import javax.inject.Inject;
2827

2928
import fr.free.nrw.commons.BuildConfig;
29+
import fr.free.nrw.commons.CommonsApplication;
3030
import fr.free.nrw.commons.HandlerService;
3131
import fr.free.nrw.commons.R;
3232
import fr.free.nrw.commons.Utils;
@@ -35,7 +35,6 @@
3535
import fr.free.nrw.commons.contributions.ContributionDao;
3636
import fr.free.nrw.commons.contributions.ContributionsActivity;
3737
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
38-
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
3938
import fr.free.nrw.commons.mwapi.MediaWikiApi;
4039
import fr.free.nrw.commons.mwapi.UploadResult;
4140
import fr.free.nrw.commons.wikidata.WikidataEditService;
@@ -182,6 +181,19 @@ public int onStartCommand(Intent intent, int flags, int startId) {
182181
}
183182

184183
@SuppressLint("StringFormatInvalid")
184+
private NotificationCompat.Builder getNotificationBuilder(Contribution contribution, String channelId) {
185+
return new NotificationCompat.Builder(this, channelId).setAutoCancel(true)
186+
.setSmallIcon(R.drawable.ic_launcher)
187+
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
188+
.setAutoCancel(true)
189+
.setContentTitle(getString(R.string.upload_progress_notification_title_start, contribution.getDisplayTitle()))
190+
.setContentText(getResources().getQuantityString(R.plurals.uploads_pending_notification_indicator, toUpload, toUpload))
191+
.setOngoing(true)
192+
.setProgress(100, 0, true)
193+
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, ContributionsActivity.class), 0))
194+
.setTicker(getString(R.string.upload_progress_notification_title_in_progress, contribution.getDisplayTitle()));
195+
}
196+
185197
private void uploadContribution(Contribution contribution) {
186198
InputStream fileInputStream;
187199

@@ -207,17 +219,9 @@ private void uploadContribution(Contribution contribution) {
207219
}
208220

209221
Timber.d("Before execution!");
210-
curProgressNotification = new NotificationCompat.Builder(this).setAutoCancel(true)
211-
.setSmallIcon(R.drawable.ic_launcher)
212-
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
213-
.setAutoCancel(true)
214-
.setContentTitle(getString(R.string.upload_progress_notification_title_start, contribution.getDisplayTitle()))
215-
.setContentText(getResources().getQuantityString(R.plurals.uploads_pending_notification_indicator, toUpload, toUpload))
216-
.setOngoing(true)
217-
.setProgress(100, 0, true)
218-
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, ContributionsActivity.class), 0))
219-
.setTicker(getString(R.string.upload_progress_notification_title_in_progress, contribution.getDisplayTitle()));
220-
222+
curProgressNotification = getNotificationBuilder(
223+
contribution,
224+
CommonsApplication.NOTIFICATION_CHANNEL_ID_ALL);
221225
this.startForeground(NOTIFICATION_UPLOAD_IN_PROGRESS, curProgressNotification.build());
222226

223227
String filename = null;

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,5 @@
349349
<string name="images_uploaded_explanation">The number of images you have uploaded to Commons, via any upload software</string>
350350
<string name="images_reverted_explanation">The percentage of images you have uploaded to Commons that were not deleted</string>
351351
<string name="images_used_explanation">The number of images you have uploaded to Commons that were used in Wikimedia articles</string>
352+
<string name="notifications_channel_name_all">Commons Notification</string>
352353
</resources>

0 commit comments

Comments
 (0)