diff options
author | David-Development <david-dev@live.de> | 2021-01-02 21:12:09 +0300 |
---|---|---|
committer | David Luhmer <david-dev@live.de> | 2021-01-02 21:12:09 +0300 |
commit | 6aa37c08e91bae33713c3a1840f1efbed4ff2c56 (patch) | |
tree | ed670b8ff2cb553a377696cbd3d52eaa6c37fd8e /News-Android-App/src/main/java | |
parent | 07e4525fa3c04116c01079264997e0ca6561e27e (diff) |
Add notification action "Mark all as read" (#911) / Notifications should respect sorting setting #901
Signed-off-by: David Luhmer <david-dev@live.de>
Diffstat (limited to 'News-Android-App/src/main/java')
12 files changed, 125 insertions, 52 deletions
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<RssItem> getAllUnreadRssItemsForNotification() { - return daoSession.getRssItemDao().queryBuilder().where(RssItemDao.Properties.Read_temp.eq(false)).limit(6).orderDesc(RssItemDao.Properties.PubDate).listLazy(); + public LazyList<RssItem> getAllUnreadRssItemsForNotification(SORT_DIRECTION sortDirection) { + QueryBuilder<RssItem> 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<RssItem> 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<RssItem> 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<RssItem> items = dbConn.getAllUnreadRssItemsForNotification(); + DatabaseConnectionOrm.SORT_DIRECTION sortDirection = DatabaseUtils.getSortDirectionFromSettings(mPrefs); + List<RssItem> items = dbConn.getAllUnreadRssItemsForNotification(sortDirection); List<String> 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); |