diff --git a/app/src/main/java/com/readrops/app/fragments/settings/AccountSettingsFragment.java b/app/src/main/java/com/readrops/app/fragments/settings/AccountSettingsFragment.java
index 33c8cd1e..cffaac30 100644
--- a/app/src/main/java/com/readrops/app/fragments/settings/AccountSettingsFragment.java
+++ b/app/src/main/java/com/readrops/app/fragments/settings/AccountSettingsFragment.java
@@ -2,6 +2,8 @@ package com.readrops.app.fragments.settings;
import android.Manifest;
+import android.app.Notification;
+import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
@@ -9,10 +11,11 @@ import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
-import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
@@ -26,6 +29,7 @@ import com.readrops.app.activities.ManageFeedsFoldersActivity;
import com.readrops.app.database.entities.account.Account;
import com.readrops.app.database.entities.account.AccountType;
import com.readrops.app.utils.OPMLMatcher;
+import com.readrops.app.utils.ReadropsApp;
import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.readropslibrary.opml.OPMLParser;
@@ -153,13 +157,13 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
@Override
public void onError(Throwable e) {
- Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
+ Utils.showSnackbar(getView(), e.getMessage());
}
})))
.show();
}
- // region opml parsing
+ // region opml import
private void openOPMLFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
@@ -207,6 +211,14 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
});
}
+ private void displayErrorMessage() {
+ new MaterialDialog.Builder(getActivity())
+ .title(R.string.processing_file_failed)
+ .neutralText(R.string.cancel)
+ .iconRes(R.drawable.ic_error)
+ .show();
+ }
+
//endregion
//region opml export
@@ -232,28 +244,44 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
} catch (IOException e) {
Log.e(TAG, e.getMessage());
- displayErrorMessage();
+ Utils.showSnackbar(getView(), e.getMessage());
}
})
.subscribe(new DisposableCompletableObserver() {
@Override
public void onComplete() {
- Log.d(TAG, "onComplete: ");
+ displayNotification(file);
}
@Override
public void onError(Throwable e) {
-
+ Utils.showSnackbar(getView(), e.getMessage());
}
});
} catch (Exception e) {
Log.e(TAG, e.getMessage());
-
- displayErrorMessage();
+ Utils.showSnackbar(getView(), e.getMessage());
}
}
+ private void displayNotification(File file) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(file.getAbsolutePath()));
+
+ Notification notification = new NotificationCompat.Builder(getContext(), ReadropsApp.OPML_EXPORT_CHANNEL_ID)
+ .setContentTitle(getString(R.string.opml_export))
+ .setContentText(file.getName())
+ .setSmallIcon(R.drawable.ic_readrops)
+ .setContentIntent(PendingIntent.getActivity(getContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT))
+ .setDeleteIntent(PendingIntent.getActivity(getContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT))
+ .setAutoCancel(true)
+ .build();
+
+ NotificationManagerCompat manager = NotificationManagerCompat.from(getContext());
+ manager.notify(2, notification);
+ }
+
private boolean isExternalStoragePermissionGranted() {
return ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
@@ -288,12 +316,4 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
}
//endregion
-
- private void displayErrorMessage() {
- new MaterialDialog.Builder(getActivity())
- .title(R.string.processing_file_failed)
- .neutralText(R.string.cancel)
- .iconRes(R.drawable.ic_error)
- .show();
- }
}
diff --git a/app/src/main/java/com/readrops/app/utils/ReadropsApp.java b/app/src/main/java/com/readrops/app/utils/ReadropsApp.java
index 689d41d1..a92a8282 100644
--- a/app/src/main/java/com/readrops/app/utils/ReadropsApp.java
+++ b/app/src/main/java/com/readrops/app/utils/ReadropsApp.java
@@ -14,28 +14,35 @@ import io.reactivex.plugins.RxJavaPlugins;
public class ReadropsApp extends Application {
public static final String FEEDS_COLORS_CHANNEL_ID = "feedsColorsChannel";
+ public static final String OPML_EXPORT_CHANNEL_ID = "opmlExportChannel";
@Override
public void onCreate() {
super.onCreate();
- RxJavaPlugins.setErrorHandler(e -> { });
+ RxJavaPlugins.setErrorHandler(e -> {
+ });
if (BuildConfig.DEBUG) {
Stetho.initializeWithDefaults(this);
}
- createNotificationChannel();
+ createNotificationChannels();
}
- private void createNotificationChannel() {
+ private void createNotificationChannels() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel feedsColorsChannel = new NotificationChannel(FEEDS_COLORS_CHANNEL_ID,
getString(R.string.feeds_colors), NotificationManager.IMPORTANCE_DEFAULT);
feedsColorsChannel.setDescription(getString(R.string.get_feeds_colors));
+ NotificationChannel opmlExportChannel = new NotificationChannel(OPML_EXPORT_CHANNEL_ID,
+ getString(R.string.opml_export), NotificationManager.IMPORTANCE_DEFAULT);
+
NotificationManager manager = getSystemService(NotificationManager.class);
+
manager.createNotificationChannel(feedsColorsChannel);
+ manager.createNotificationChannel(opmlExportChannel);
}
}
}
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index 073a3e82..cdceeab1 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -97,8 +97,8 @@
Traitement du fichier OPML
Cette opération peut prendre un certain temps car il faut interroger chaque flux.
Une erreur s\'est produite lors du traitement du fichier
- Importer un fichier OPML
- Exporter les flux et les dossiers dans un fichier OPML
+ Import OPML
+ Export OPML
L\'export des soubscriptions nécessite l\'accès au stockage
Réessayer
Permissions
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 05341015..8f06743e 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -6,8 +6,8 @@
- - @string/import_opml
- - @string/export_feeds_folders_opml
+ - @string/opml_import
+ - @string/opml_export
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 071d49f5..0c696f25 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -105,8 +105,8 @@
Processing OPML file
This operation can take a significant time as each feed needs to be queried.
An error occurred during the file processing
- Import OPML file
- Export feeds and folders to an OPML file
+ OPML import
+ OPML export
Subscriptions
Subscriptions export needs external storage permission
Try again