diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 70275a0d..402cf16c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,8 +35,8 @@
-
-
+
+
new AlertDialog.Builder(context)
- .setMessage(R.string.permission_readtorrent)
+ .setMessage(explainer)
.setPositiveButton(android.R.string.ok, (dialog, which) ->
ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode))
.show());
return false;
}
// Permission not granted (and we asked for it already before)
- ActivityCompat.requestPermissions(activity, new String[]{permission}, REQUEST_TORRENT_READ_PERMISSION);
+ ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);
return false;
}
- private boolean hasPermission(String requiredPermission) {
+ public boolean hasPermission(String requiredPermission) {
return ContextCompat.checkSelfPermission(context, requiredPermission) == PackageManager.PERMISSION_GRANTED;
}
- public Boolean handleTorrentReadPermissionResult(int requestCode, int[] grantResults) {
- if (requestCode == REQUEST_TORRENT_READ_PERMISSION) {
- // Return permission granting result
- return grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
- }
- return null;
- }
-
- public Boolean handleSettingsReadPermissionResult(int requestCode, int[] grantResults) {
- if (requestCode == REQUEST_SETTINGS_READ_PERMISSION) {
+ public Boolean handleNotificationPermissionResult(int requestCode, int[] grantResults) {
+ if (requestCode == REQUEST_NOTIFICATIONS_PERMISSION) {
// Return permission granting result
return grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
}
- return null;
- }
-
- public Boolean handleSettingsWritePermissionResult(int requestCode, int[] grantResults) {
- if (requestCode == REQUEST_SETTINGS_WRITE_PERMISSION) {
- // Return permission granting result
- return grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
- }
- return null;
+ return false;
}
/**
diff --git a/app/src/main/java/org/transdroid/core/gui/settings/NotificationSettingsActivity.java b/app/src/main/java/org/transdroid/core/gui/settings/NotificationSettingsActivity.java
index 5495b7af..a64208f5 100644
--- a/app/src/main/java/org/transdroid/core/gui/settings/NotificationSettingsActivity.java
+++ b/app/src/main/java/org/transdroid/core/gui/settings/NotificationSettingsActivity.java
@@ -21,6 +21,7 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.androidannotations.annotations.Bean;
@@ -28,12 +29,15 @@ import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.OptionsItem;
import org.transdroid.R;
import org.transdroid.core.app.settings.NotificationSettings;
+import org.transdroid.core.gui.navigation.NavigationHelper;
import org.transdroid.core.service.RssCheckerJob;
import org.transdroid.core.service.ServerCheckerJob;
@EActivity
public class NotificationSettingsActivity extends PreferenceCompatActivity implements OnSharedPreferenceChangeListener {
+ @Bean
+ protected NavigationHelper navigationHelper;
@Bean
protected NotificationSettings notificationSettings;
@@ -45,9 +49,19 @@ public class NotificationSettingsActivity extends PreferenceCompatActivity imple
// Load the notification-related preferences from XML and update availability thereof
addPreferencesFromResource(R.xml.pref_notifications);
- boolean disabled = !notificationSettings.isEnabledForRss() && !notificationSettings.isEnabledForTorrents();
- updatePrefsEnabled(disabled);
+ updatePrefsEnabled();
+
+ }
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (navigationHelper.handleNotificationPermissionResult(requestCode, grantResults)) {
+ // Now that we have permission, schedule the jobs
+ ServerCheckerJob.schedule(getApplicationContext());
+ RssCheckerJob.schedule(getApplicationContext());
+ updatePrefsEnabled();
+ }
}
@Override
@@ -76,11 +90,18 @@ public class NotificationSettingsActivity extends PreferenceCompatActivity imple
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ boolean needsPermission = notificationSettings.isEnabledForRss() || notificationSettings.isEnabledForTorrents();
+ if (needsPermission && !navigationHelper.checkOrRequestNotificationPermission(this)) {
+ return;
+ }
+ // Already have permission to show notifications, so update the jobs now
ServerCheckerJob.schedule(getApplicationContext());
RssCheckerJob.schedule(getApplicationContext());
+ updatePrefsEnabled();
}
- private void updatePrefsEnabled(boolean disabled) {
+ private void updatePrefsEnabled() {
+ boolean disabled = !notificationSettings.isEnabledForRss() && !notificationSettings.isEnabledForTorrents();
findPreference("notifications_interval").setEnabled(!disabled);
findPreference("notifications_sound").setEnabled(!disabled);
findPreference("notifications_vibrate").setEnabled(!disabled);
diff --git a/app/src/main/java/org/transdroid/core/gui/settings/SystemSettingsActivity.java b/app/src/main/java/org/transdroid/core/gui/settings/SystemSettingsActivity.java
index 0a12c99f..86401617 100644
--- a/app/src/main/java/org/transdroid/core/gui/settings/SystemSettingsActivity.java
+++ b/app/src/main/java/org/transdroid/core/gui/settings/SystemSettingsActivity.java
@@ -24,6 +24,7 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference.OnPreferenceClickListener;
import androidx.preference.PreferenceManager;
@@ -64,6 +65,7 @@ public class SystemSettingsActivity extends PreferenceCompatActivity {
protected ErrorLogSender errorLogSender;
@Bean
protected SettingsPersistence settingsPersistence;
+
private OnPreferenceClickListener onImportSettingsClick = preference -> {
showDialog(DIALOG_IMPORTSETTINGS);
return true;
@@ -73,7 +75,10 @@ public class SystemSettingsActivity extends PreferenceCompatActivity {
return true;
};
private OnPreferenceClickListener onCheckUpdatesClick = preference -> {
- AppUpdateJob.schedule(getApplicationContext());
+ if (!navigationHelper.checkOrRequestNotificationPermission(this)) {
+ // Already have permission: continue
+ AppUpdateJob.schedule(getApplicationContext());
+ }
return true;
};
private OnPreferenceClickListener onClearSearchClick = preference -> {
@@ -137,6 +142,15 @@ public class SystemSettingsActivity extends PreferenceCompatActivity {
MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
}
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (navigationHelper.handleNotificationPermissionResult(requestCode, grantResults)) {
+ // Now that we have permission, schedule the job
+ AppUpdateJob.schedule(getApplicationContext());
+ }
+ }
+
private void importSettingsFromFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a9b77ea5..e6a34d46 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -462,9 +462,7 @@
- 86400
- Transdroid requires read access to your file storage in order to read local .torrent files
- Transdroid requires read access to your file storage if you want to read from a local settings file
- Transdroid requires write access to your file storage to write the local settings file
+ Transdroid requires permission if you want to receive notifications
Error during communication; check your connection
Your torrent client does not support this operation