From 6aa37c08e91bae33713c3a1840f1efbed4ff2c56 Mon Sep 17 00:00:00 2001 From: David-Development Date: Sat, 2 Jan 2021 19:12:09 +0100 Subject: Add notification action "Mark all as read" (#911) / Notifications should respect sorting setting #901 Signed-off-by: David Luhmer --- .../de/luhmer/owncloudnewsreader/Constants.java | 3 +- .../owncloudnewsreader/NewsDetailActivity.java | 8 ---- .../NewsReaderDetailFragment.java | 3 +- .../owncloudnewsreader/NewsReaderListActivity.java | 8 ++-- .../PodcastFragmentActivity.java | 3 +- .../authentication/OwnCloudSyncAdapter.java | 2 +- .../database/DatabaseConnectionOrm.java | 22 ++++++++- .../owncloudnewsreader/helper/DatabaseUtils.java | 52 +++++++++++++--------- .../helper/NotificationActionReceiver.java | 24 ++++++++-- .../NotificationActionReceiverDownloadWebPage.java | 27 +++++++++++ .../luhmer/owncloudnewsreader/helper/Search.java | 4 +- .../notification/NextcloudNotificationManager.java | 21 ++++++--- 12 files changed, 125 insertions(+), 52 deletions(-) create mode 100644 News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiverDownloadWebPage.java (limited to 'News-Android-App/src/main/java') diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java index 6fe1b75f..1d42285a 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java @@ -1,8 +1,6 @@ package de.luhmer.owncloudnewsreader; -import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -13,6 +11,7 @@ public class Constants { public static final int maxItemsCount = 1500; public static final String LAST_UPDATE_NEW_ITEMS_COUNT_STRING = "LAST_UPDATE_NEW_ITEMS_COUNT_STRING"; public static final String NOTIFICATION_ACTION_STOP_STRING = "NOTIFICATION_STOP"; + public static final String NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING = "NOTIFICATION_MARK_ALL_AS_READ"; protected static final String NEWS_WEB_VERSION_NUMBER_STRING = "NewsWebVersionNumber"; protected static final int MIN_NEXTCLOUD_FILES_APP_VERSION_CODE = 30030052; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java index 86878af3..34ace45c 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java @@ -57,7 +57,6 @@ import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; -import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm.SORT_DIRECTION; import de.luhmer.owncloudnewsreader.database.model.RssItem; import de.luhmer.owncloudnewsreader.helper.ThemeUtils; import de.luhmer.owncloudnewsreader.model.PodcastItem; @@ -310,13 +309,6 @@ public class NewsDetailActivity extends PodcastFragmentActivity { @Override public void onPageScrollStateChanged(int arg0) { } }; - public static SORT_DIRECTION getSortDirectionFromSettings(SharedPreferences prefs) { - SORT_DIRECTION sDirection = SORT_DIRECTION.asc; - String sortDirection = prefs.getString(SettingsActivity.SP_SORT_ORDER, "1"); - if ("1".equals(sortDirection)) - sDirection = SORT_DIRECTION.desc; - return sDirection; - } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java index 4d31498b..63d30ce8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java @@ -71,6 +71,7 @@ import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm.SORT_DIRECTIO import de.luhmer.owncloudnewsreader.database.model.RssItem; import de.luhmer.owncloudnewsreader.database.model.RssItemDao; import de.luhmer.owncloudnewsreader.helper.AsyncTaskHelper; +import de.luhmer.owncloudnewsreader.helper.DatabaseUtils; import de.luhmer.owncloudnewsreader.helper.PostDelayHandler; import de.luhmer.owncloudnewsreader.helper.Search; import de.luhmer.owncloudnewsreader.helper.StopWatch; @@ -164,7 +165,7 @@ public class NewsReaderDetailFragment extends Fragment { public static SORT_DIRECTION getSortDirection(SharedPreferences prefs) { - return NewsDetailActivity.getSortDirectionFromSettings(prefs); + return DatabaseUtils.getSortDirectionFromSettings(prefs); } /** diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java index 3f7a2b19..2bc105d4 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java @@ -484,13 +484,15 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(SyncStartedEvent event) { - updateButtonLayout(); + Log.d(TAG, "onEventMainThread - SyncStartedEvent"); + updateButtonLayout(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(SyncFinishedEvent event) { - updateButtonLayout(); - syncFinishedHandler(); + Log.d(TAG, "onEventMainThread - SyncFinishedEvent"); + updateButtonLayout(); + syncFinishedHandler(); } /** diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java index d189ea7c..d6a02a15 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java @@ -23,7 +23,6 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.io.File; -import java.lang.reflect.Proxy; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -162,7 +161,7 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP if (NextcloudNotificationManager.isUnreadRssCountNotificationVisible(this)) { DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(this); int count = Integer.parseInt(dbConn.getUnreadItemsCountForSpecificFolder(SubscriptionExpandableListAdapter.SPECIAL_FOLDERS.ALL_UNREAD_ITEMS)); - NextcloudNotificationManager.showUnreadRssItemsNotification(this, count); + NextcloudNotificationManager.showUnreadRssItemsNotification(this, count, mPrefs); if (count == 0) { NextcloudNotificationManager.removeRssItemsNotification(this); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java index 48e6fb99..0ad3dde7 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java @@ -236,7 +236,7 @@ public class OwnCloudSyncAdapter extends AbstractThreadedSyncAdapter { boolean showNotificationOnNewArticles = mPrefs.getBoolean(SettingsActivity.CB_SHOW_NOTIFICATION_NEW_ARTICLES_STRING, true); // If another app is opened show a notification if (!ForegroundListener.isInForeground() && showNotificationOnNewArticles) { - NextcloudNotificationManager.showUnreadRssItemsNotification(getContext(), newItemsCount); + NextcloudNotificationManager.showUnreadRssItemsNotification(getContext(), newItemsCount, mPrefs); } } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java index 987be4d1..a0d28db4 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java @@ -17,6 +17,7 @@ import javax.inject.Inject; import javax.inject.Named; import de.greenrobot.dao.query.LazyList; +import de.greenrobot.dao.query.QueryBuilder; import de.greenrobot.dao.query.WhereCondition; import de.luhmer.owncloudnewsreader.Constants; import de.luhmer.owncloudnewsreader.NewsReaderApplication; @@ -353,8 +354,25 @@ public class DatabaseConnectionOrm { return daoSession.getRssItemDao().queryBuilder().where(RssItemDao.Properties.Read_temp.eq(false)).limit(100).orderDesc(RssItemDao.Properties.PubDate).listLazy(); } - public LazyList getAllUnreadRssItemsForNotification() { - return daoSession.getRssItemDao().queryBuilder().where(RssItemDao.Properties.Read_temp.eq(false)).limit(6).orderDesc(RssItemDao.Properties.PubDate).listLazy(); + public LazyList getAllUnreadRssItemsForNotification(SORT_DIRECTION sortDirection) { + QueryBuilder qb = daoSession.getRssItemDao().queryBuilder().where(RssItemDao.Properties.Read_temp.eq(false)).limit(6); + if (sortDirection == SORT_DIRECTION.asc) { + qb = qb.orderAsc(RssItemDao.Properties.PubDate); + } else { + qb = qb.orderDesc(RssItemDao.Properties.PubDate); + } + return qb.listLazy(); + } + + public void markAllItemsAsRead() { + StopWatch sw = new StopWatch(); + sw.start(); + + String sql = "UPDATE " + RssItemDao.TABLENAME + " SET " + RssItemDao.Properties.Read_temp.columnName + " = 1 WHERE " + RssItemDao.Properties.Read_temp.columnName + " = 0"; + daoSession.getDatabase().execSQL(sql); + + sw.stop(); + Log.v(TAG, "Time needed for marking all unread items as read: " + sw.toString()); } public LazyList getAllUnreadRssItemsForDownloadWebPageService() { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java index 2958524f..ea73cf04 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java @@ -22,37 +22,47 @@ package de.luhmer.owncloudnewsreader.helper; import android.content.Context; +import android.content.SharedPreferences; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import de.luhmer.owncloudnewsreader.SettingsActivity; +import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; + public class DatabaseUtils { - public static final String DATABASE_NAME = "OwncloudNewsReader.db"; + public static final String DATABASE_NAME = "OwncloudNewsReader.db"; - public static boolean CopyDatabaseToSdCard(Context context) - { + public static boolean CopyDatabaseToSdCard(Context context) { String path = context.getDatabasePath(DATABASE_NAME).getPath(); - File db = new File(path); - File backupDb = GetPath(context); - if (db.exists()) { - try - { - File parentFolder = backupDb.getParentFile(); - parentFolder.mkdirs(); - - NewsFileUtils.copyFile(new FileInputStream(db), new FileOutputStream(backupDb)); - return true; - } catch(Exception ex) { - ex.printStackTrace(); - } - } - return false; + File db = new File(path); + File backupDb = GetPath(context); + if (db.exists()) { + try { + File parentFolder = backupDb.getParentFile(); + parentFolder.mkdirs(); + + NewsFileUtils.copyFile(new FileInputStream(db), new FileOutputStream(backupDb)); + return true; + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return false; } - public static File GetPath(Context context) { - return new File(NewsFileUtils.getCacheDirPath(context) + "/dbBackup/" + DATABASE_NAME); - } + public static File GetPath(Context context) { + return new File(NewsFileUtils.getCacheDirPath(context) + "/dbBackup/" + DATABASE_NAME); + } + + public static DatabaseConnectionOrm.SORT_DIRECTION getSortDirectionFromSettings(SharedPreferences prefs) { + DatabaseConnectionOrm.SORT_DIRECTION sDirection = DatabaseConnectionOrm.SORT_DIRECTION.asc; + String sortDirection = prefs.getString(SettingsActivity.SP_SORT_ORDER, "1"); + if ("1".equals(sortDirection)) + sDirection = DatabaseConnectionOrm.SORT_DIRECTION.desc; + return sDirection; + } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java index 237a65e1..43672dc9 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java @@ -1,22 +1,38 @@ package de.luhmer.owncloudnewsreader.helper; +import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.util.Log; import org.greenrobot.eventbus.EventBus; -import de.luhmer.owncloudnewsreader.services.events.StopWebArchiveDownloadEvent; +import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; +import de.luhmer.owncloudnewsreader.services.events.SyncFinishedEvent; -import static de.luhmer.owncloudnewsreader.Constants.NOTIFICATION_ACTION_STOP_STRING; +import static android.app.Notification.EXTRA_NOTIFICATION_ID; +import static de.luhmer.owncloudnewsreader.Constants.NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING; public class NotificationActionReceiver extends BroadcastReceiver { + private static final String TAG = NotificationActionReceiver.class.getCanonicalName(); @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (NOTIFICATION_ACTION_STOP_STRING.equals(action)) { - EventBus.getDefault().post(new StopWebArchiveDownloadEvent()); + if (NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING.equals(action)) { + DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(context); + Log.d(TAG, "NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING"); + dbConn.markAllItemsAsRead(); + EventBus.getDefault().post(new SyncFinishedEvent()); + + Integer notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); + if (notificationId != -1) { + NotificationManager nMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nMgr.cancel(notificationId); + } + } else { + Log.d(TAG, action); } } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiverDownloadWebPage.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiverDownloadWebPage.java new file mode 100644 index 00000000..3a6ad407 --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiverDownloadWebPage.java @@ -0,0 +1,27 @@ +package de.luhmer.owncloudnewsreader.helper; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import org.greenrobot.eventbus.EventBus; + +import de.luhmer.owncloudnewsreader.services.events.StopWebArchiveDownloadEvent; + +import static de.luhmer.owncloudnewsreader.Constants.NOTIFICATION_ACTION_STOP_STRING; + +public class NotificationActionReceiverDownloadWebPage extends BroadcastReceiver { + private static final String TAG = NotificationActionReceiver.class.getCanonicalName(); + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (NOTIFICATION_ACTION_STOP_STRING.equals(action)) { + Log.d(TAG, "NOTIFICATION_ACTION_STOP_STRING"); + EventBus.getDefault().post(new StopWebArchiveDownloadEvent()); + } else { + Log.d(TAG, action); + } + } +} diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/Search.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/Search.java index 38a751a9..e5646a11 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/Search.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/Search.java @@ -2,12 +2,10 @@ package de.luhmer.owncloudnewsreader.helper; import android.content.Context; import android.content.SharedPreferences; -import android.preference.PreferenceManager; import java.util.ArrayList; import java.util.List; -import de.luhmer.owncloudnewsreader.NewsDetailActivity; import de.luhmer.owncloudnewsreader.SettingsActivity; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; import de.luhmer.owncloudnewsreader.database.model.RssItem; @@ -19,7 +17,7 @@ public class Search { private static final String SEARCH_IN_BODY = "1"; public static List PerformSearch(Context context, Long idFolder, Long idFeed, String searchString, SharedPreferences mPrefs) { - DatabaseConnectionOrm.SORT_DIRECTION sortDirection = NewsDetailActivity.getSortDirectionFromSettings(mPrefs); + DatabaseConnectionOrm.SORT_DIRECTION sortDirection = DatabaseUtils.getSortDirectionFromSettings(mPrefs); DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(context); String sqlSelectStatement = null; if (idFeed != null) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java index 105f5059..1671a6fe 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java @@ -6,6 +6,7 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -36,6 +37,11 @@ import de.luhmer.owncloudnewsreader.NewsReaderListActivity; import de.luhmer.owncloudnewsreader.R; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; import de.luhmer.owncloudnewsreader.database.model.RssItem; +import de.luhmer.owncloudnewsreader.helper.DatabaseUtils; +import de.luhmer.owncloudnewsreader.helper.NotificationActionReceiver; + +import static android.app.Notification.EXTRA_NOTIFICATION_ID; +import static de.luhmer.owncloudnewsreader.Constants.NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING; public class NextcloudNotificationManager { @@ -251,9 +257,7 @@ public class NextcloudNotificationManager { } - - - public static void showUnreadRssItemsNotification(Context context, int newItemsCount) { + public static void showUnreadRssItemsNotification(Context context, int newItemsCount, SharedPreferences mPrefs) { Resources res = context.getResources(); String tickerMessage = res.getQuantityString(R.plurals.notification_new_items_ticker, newItemsCount, newItemsCount); String contentText = res.getQuantityString(R.plurals.notification_new_items_text, newItemsCount, newItemsCount); @@ -262,21 +266,28 @@ public class NextcloudNotificationManager { NotificationManager notificationManager = getNotificationManagerAndCreateChannel(context, channelId); DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(context); - List items = dbConn.getAllUnreadRssItemsForNotification(); + DatabaseConnectionOrm.SORT_DIRECTION sortDirection = DatabaseUtils.getSortDirectionFromSettings(mPrefs); + List items = dbConn.getAllUnreadRssItemsForNotification(sortDirection); List previewLines = new ArrayList<>(); - for(RssItem item : items) { + for (RssItem item : items) { // • = \u2022, ● = \u25CF, ○ = \u25CB, ▪ = \u25AA, ■ = \u25A0, □ = \u25A1, ► = \u25BA previewLines.add("\u2022 " + item.getTitle().trim()); } String previewText = TextUtils.join("\n", previewLines); + Intent markAllAsReadIntent = new Intent(context, NotificationActionReceiver.class); + markAllAsReadIntent.setAction(NOTIFICATION_ACTION_MARK_ALL_AS_READ_STRING); + markAllAsReadIntent.putExtra(EXTRA_NOTIFICATION_ID, UNREAD_RSS_ITEMS_NOTIFICATION_ID); + PendingIntent markAllAsReadPendingIntent = PendingIntent.getBroadcast(context, 0, markAllAsReadIntent, PendingIntent.FLAG_ONE_SHOT); + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(tickerMessage) .setStyle(new NotificationCompat.BigTextStyle().bigText(previewText)) //.setDefaults(Notification.DEFAULT_ALL) + .addAction(R.drawable.ic_check_box_white, context.getString(R.string.menu_markAllAsRead), markAllAsReadPendingIntent) .setAutoCancel(true) .setNumber(newItemsCount) .setContentText(contentText); -- cgit v1.2.3 From 453b91000b88615fdda3ca9aacbd000653fe2066 Mon Sep 17 00:00:00 2001 From: David-Development Date: Sat, 2 Jan 2021 19:57:21 +0100 Subject: show progress and status of feeds during import (ignore single failing feeds) Signed-off-by: David Luhmer --- .../luhmer/owncloudnewsreader/NewFeedActivity.java | 59 +++++++++++++++------- 1 file changed, 40 insertions(+), 19 deletions(-) (limited to 'News-Android-App/src/main/java') diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java index 29e2adc9..35284bb9 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java @@ -47,6 +47,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -236,7 +237,7 @@ public class NewFeedActivity extends AppCompatActivity { } } - public class ImportOpmlSubscriptionsTask extends AsyncTask { + public class ImportOpmlSubscriptionsTask extends AsyncTask, Boolean> { private final String mUrlToFile; private HashMap extractedUrls; @@ -254,7 +255,7 @@ public class NewFeedActivity extends AppCompatActivity { pd.setTitle("Parsing OMPL..."); pd.setMessage("Please wait."); pd.setCancelable(false); - pd.setIndeterminate(true); + pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.show(); super.onPreExecute(); @@ -277,34 +278,49 @@ public class NewFeedActivity extends AppCompatActivity { parser.nextTag(); extractedUrls = OpmlXmlParser.ReadFeed(parser); - publishProgress(); + List result = new ArrayList<>(); + publishProgress(result); final HashMap existingFolders = new HashMap<>(); mApi.getNewsAPI().folders().blockingSubscribe(folders -> { - for(Folder folder : folders) { + for (Folder folder : folders) { existingFolders.put(folder.getLabel(), folder.getId()); } }); - for(String feedUrl : extractedUrls.keySet()) { + for (String feedUrl : extractedUrls.keySet()) { long folderId = 0; //id of the parent folder, 0 for root String folderName = extractedUrls.get(feedUrl); if(folderName != null) { //Get Folder ID (create folder if not exists) - if(existingFolders.containsKey(folderName)) { //Check if folder exists - folderId = existingFolders.get(folderName); - } else { //If not, create a new one on the server - //mApi.getAPI().createFolder(foldername) // HttpJsonRequest.getInstance().performCreateFolderRequest(api.getFolderUrl(), folderName); - final Map folderMap = new HashMap<>(2); + if (!existingFolders.containsKey(folderName)) { + // If folder does not exist, create a new one on the server + final Map folderMap = new HashMap<>(1); folderMap.put("name", folderName); Folder folder = mApi.getNewsAPI().createFolder(folderMap).execute().body().get(0); - //TODO test this!!! - existingFolders.put(folder.getLabel(), folder.getId()); //Add folder to list of existing folder in order to prevent that the method tries to create it multiple times + folderId = folder.getId(); + // Add folder to list of existing folder in order to prevent that the method tries to create it multiple times + existingFolders.put(folder.getLabel(), folderId); } + + folderId = existingFolders.get(folderName); + } + + Response> response = mApi.getNewsAPI().createFeed(feedUrl, folderId).execute(); + if (response.isSuccessful()) { + Feed feed = response.body().get(0); + result.add("✓ " + feed.getLink()); + Log.e(TAG, "Successfully imported feed: " + feedUrl + " - Feed-ID: " + feed.getId()); + } else if (response.code() == 409) { + // already exists + result.add("✓ " + " - " + feedUrl); + } else { + result.add("✗ " + response.code() + " - " + feedUrl); + Log.e(TAG, "Failed to import feed: " + feedUrl + " - Status-Code: " + response.code()); + Log.e(TAG, response.errorBody().string()); } - Feed feed = mApi.getNewsAPI().createFeed(feedUrl, folderId).execute().body().get(0); - Log.v(TAG, "New Feed-ID: " + feed.getId()); + publishProgress(result); } } catch (Exception e) { e.printStackTrace(); @@ -314,11 +330,16 @@ public class NewFeedActivity extends AppCompatActivity { } @Override - protected void onProgressUpdate(Void... values) { - String text = "Extracted the following feeds:\n"; - for (String url : extractedUrls.keySet()) { - text += "\n" + url; + protected void onProgressUpdate(List... values) { + String text = "This might take a few minutes.. please wait:\n"; + + List log = values[0]; + for (String line : log) { + text += "\n" + line; } + + pd.setMax(extractedUrls.size()); + pd.setProgress(log.size()); pd.setMessage(text); super.onProgressUpdate(values); @@ -333,7 +354,7 @@ public class NewFeedActivity extends AppCompatActivity { if(!result) { Toast.makeText(mContext, "Failed to parse OPML file", Toast.LENGTH_SHORT).show(); } else { - Toast.makeText(mContext, "Successfully imported OPML!", Toast.LENGTH_LONG).show(); + Toast.makeText(mContext, "Imported done!", Toast.LENGTH_LONG).show(); } super.onPostExecute(result); -- cgit v1.2.3