aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-09-27 19:45:25 +0200
committerChristian Schneppe <christian@pix-art.de>2018-09-27 19:45:25 +0200
commit59dd2bb1c9b2be4c6b8802fbe0ee48085881d74d (patch)
treeef4ba57451d409f99653ea537aa4f6f021500bca /src/main/java/de/pixart/messenger
parentc8d159adca8258c88e91c8decc41fe1b90afc765 (diff)
behave nicely (no foreground service by default) if app is built with targetSdk <26
Diffstat (limited to 'src/main/java/de/pixart/messenger')
-rw-r--r--src/main/java/de/pixart/messenger/services/EventReceiver.java7
-rw-r--r--src/main/java/de/pixart/messenger/services/NotificationService.java12
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java2
-rw-r--r--src/main/java/de/pixart/messenger/utils/Compatibility.java35
4 files changed, 44 insertions, 12 deletions
diff --git a/src/main/java/de/pixart/messenger/services/EventReceiver.java b/src/main/java/de/pixart/messenger/services/EventReceiver.java
index 529741ead..a77db569e 100644
--- a/src/main/java/de/pixart/messenger/services/EventReceiver.java
+++ b/src/main/java/de/pixart/messenger/services/EventReceiver.java
@@ -8,6 +8,7 @@ import android.support.v4.content.ContextCompat;
import android.util.Log;
import de.pixart.messenger.Config;
+import de.pixart.messenger.utils.Compatibility;
public class EventReceiver extends BroadcastReceiver {
@@ -24,7 +25,11 @@ public class EventReceiver extends BroadcastReceiver {
final String action = originalIntent.getAction();
if (action.equals("ui") || hasEnabledAccounts(context)) {
try {
- ContextCompat.startForegroundService(context, intentForService);
+ if (Compatibility.runsAndTargetsTwentySix(context)) {
+ ContextCompat.startForegroundService(context, intentForService);
+ } else {
+ context.startService(intentForService);
+ }
} catch (RuntimeException e) {
Log.d(Config.LOGTAG, "EventReceiver was unable to start service");
}
diff --git a/src/main/java/de/pixart/messenger/services/NotificationService.java b/src/main/java/de/pixart/messenger/services/NotificationService.java
index 8f82207ac..bce648731 100644
--- a/src/main/java/de/pixart/messenger/services/NotificationService.java
+++ b/src/main/java/de/pixart/messenger/services/NotificationService.java
@@ -845,7 +845,7 @@ public class NotificationService {
public Notification createForegroundNotification() {
final Notification.Builder mBuilder = new Notification.Builder(mXmppConnectionService);
mBuilder.setContentTitle(mXmppConnectionService.getString(R.string.conversations_foreground_service));
- if (Compatibility.twentySix() || Config.SHOW_CONNECTED_ACCOUNTS) {
+ if (Compatibility.runsAndTargetsTwentySix(mXmppConnectionService) || Config.SHOW_CONNECTED_ACCOUNTS) {
List<Account> accounts = mXmppConnectionService.getAccounts();
int enabled = 0;
int connected = 0;
@@ -896,7 +896,7 @@ public class NotificationService {
mBuilder.setWhen(0);
mBuilder.setPriority(Notification.PRIORITY_LOW);
mBuilder.setSmallIcon(R.drawable.ic_link_white_24dp);
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mBuilder.setChannelId(FOREGROUND_CHANNEL_ID);
}
return mBuilder.build();
@@ -949,7 +949,7 @@ public class NotificationService {
145,
new Intent(mXmppConnectionService, ManageAccountActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT));
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mBuilder.setChannelId(ERROR_CHANNEL_ID);
}
notify(ERROR_NOTIFICATION_ID, mBuilder.build());
@@ -962,7 +962,7 @@ public class NotificationService {
mBuilder.setSmallIcon(R.drawable.ic_hourglass_empty_white_24dp);
mBuilder.setContentIntent(createContentIntent(message.getConversation()));
mBuilder.setOngoing(true);
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mBuilder.setChannelId(VIDEOCOMPRESSION_CHANNEL_ID);
}
Notification notification = mBuilder.build();
@@ -980,7 +980,7 @@ public class NotificationService {
mBuilder.setProgress(0, 0, true);
mBuilder.setSmallIcon(R.drawable.ic_import_export_white_24dp);
mBuilder.setOngoing(true);
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mBuilder.setChannelId(BACKUP_CHANNEL_ID);
}
return mBuilder.build();
@@ -998,7 +998,7 @@ public class NotificationService {
mBuilder.setSmallIcon(R.drawable.ic_update_notification);
mBuilder.setContentIntent(intent);
mBuilder.setOngoing(true);
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mBuilder.setChannelId(UPDATE_CHANNEL_ID);
}
return mBuilder.build();
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 525354957..a32f591a6 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -1103,7 +1103,7 @@ public class XmppConnectionService extends Service {
Resolver.init(this);
this.mRandom = new SecureRandom();
updateMemorizingTrustmanager();
- if (Compatibility.twentySix()) {
+ if (Compatibility.runsTwentySix()) {
mNotificationService.initializeChannels();
}
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
diff --git a/src/main/java/de/pixart/messenger/utils/Compatibility.java b/src/main/java/de/pixart/messenger/utils/Compatibility.java
index 3ebc7c4f6..6d5f35bc4 100644
--- a/src/main/java/de/pixart/messenger/utils/Compatibility.java
+++ b/src/main/java/de/pixart/messenger/utils/Compatibility.java
@@ -2,6 +2,7 @@ package de.pixart.messenger.utils;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.preference.Preference;
@@ -26,13 +27,13 @@ public class Compatibility {
"notification_ringtone",
"notification_headsup",
"vibrate_on_notification");
- private static final List<String> UNUESD_SETTINGS_PRE_TWENTYSIX = Collections.singletonList("more_notification_settings");
+ private static final List<String> UNUSED_SETTINGS_PRE_TWENTYSIX = Collections.singletonList("more_notification_settings");
public static boolean hasStoragePermission(Context context) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ContextCompat.checkSelfPermission(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
- public static boolean twentySix() {
+ public static boolean runsTwentySix() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
@@ -48,8 +49,22 @@ public class Compatibility {
return PreferenceManager.getDefaultSharedPreferences(context);
}
+ private static boolean targetsTwentySix(Context context) {
+ try {
+ final PackageManager packageManager = context.getPackageManager();
+ final ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
+ return applicationInfo == null || applicationInfo.targetSdkVersion >= 26;
+ } catch (PackageManager.NameNotFoundException e) {
+ return true; //when in doubt…
+ }
+ }
+
+ public static boolean runsAndTargetsTwentySix(Context context) {
+ return runsTwentySix() && targetsTwentySix(context);
+ }
+
public static boolean keepForegroundService(Context context) {
- return twentySix() || getBooleanPreference(context, SettingsActivity.SHOW_FOREGROUND_SERVICE, R.bool.show_foreground_service);
+ return runsTwentySix() || getBooleanPreference(context, SettingsActivity.SHOW_FOREGROUND_SERVICE, R.bool.show_foreground_service);
}
public static void removeUnusedPreferences(SettingsFragment settingsFragment) {
@@ -57,7 +72,7 @@ public class Compatibility {
(PreferenceScreen) settingsFragment.findPreference("notifications"));
List<PreferenceCategory> categories = Arrays.asList(
(PreferenceCategory) settingsFragment.findPreference("general"));
- for (String key : (twentySix() ? UNUSED_SETTINGS_POST_TWENTYSIX : UNUESD_SETTINGS_PRE_TWENTYSIX)) {
+ for (String key : (runsTwentySix() ? UNUSED_SETTINGS_POST_TWENTYSIX : UNUSED_SETTINGS_PRE_TWENTYSIX)) {
Preference preference = settingsFragment.findPreference(key);
if (preference != null) {
for (PreferenceScreen screen : screens) {
@@ -72,5 +87,17 @@ public class Compatibility {
}
}
}
+ if (Compatibility.runsTwentySix()) {
+ if (targetsTwentySix(settingsFragment.getContext())) {
+ Preference preference = settingsFragment.findPreference(SettingsActivity.SHOW_FOREGROUND_SERVICE);
+ if (preference != null) {
+ for (PreferenceCategory category : categories) {
+ if (category != null) {
+ category.removePreference(preference);
+ }
+ }
+ }
+ }
+ }
}
} \ No newline at end of file