diff --git a/app/src/main/java/com/readrops/app/activities/NotificationPermissionActivity.kt b/app/src/main/java/com/readrops/app/activities/NotificationPermissionActivity.kt index 0cd96336..f8a37e77 100644 --- a/app/src/main/java/com/readrops/app/activities/NotificationPermissionActivity.kt +++ b/app/src/main/java/com/readrops/app/activities/NotificationPermissionActivity.kt @@ -9,7 +9,7 @@ import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.readrops.app.R -import com.readrops.app.adapters.NotificationPermissionAdapter +import com.readrops.app.adapters.NotificationPermissionListAdapter import com.readrops.app.databinding.ActivityNotificationPermissionBinding import com.readrops.app.utils.Utils import com.readrops.app.viewmodels.NotificationPermissionViewModel @@ -29,7 +29,7 @@ class NotificationPermissionActivity : AppCompatActivity() { val accountId = intent.getIntExtra(ACCOUNT_ID, 0) val viewModel by viewModels() - var adapter: NotificationPermissionAdapter? = null + var adapter: NotificationPermissionListAdapter? = null viewModel.getAccount(accountId).observe(this, Observer { account -> viewModel.account = account @@ -39,6 +39,8 @@ class NotificationPermissionActivity : AppCompatActivity() { binding.notifPermissionAccountSwitch.isChecked = account.isNotificationsEnabled binding.notifPermissionAccountSwitch.setOnCheckedChangeListener { _, isChecked -> account.isNotificationsEnabled = isChecked + binding.notifPermissionFeedsSwitch.isEnabled = isChecked + adapter?.enableAll = isChecked adapter?.notifyDataSetChanged() @@ -49,7 +51,16 @@ class NotificationPermissionActivity : AppCompatActivity() { .subscribe() } - adapter = NotificationPermissionAdapter(account.isNotificationsEnabled) { feed -> + binding.notifPermissionFeedsSwitch.isEnabled = account.isNotificationsEnabled + binding.notifPermissionFeedsSwitch.setOnCheckedChangeListener { _, isChecked -> + viewModel.setAllFeedsNotificationState(isChecked) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError { Utils.showSnackbar(binding.root, it.message) } + .subscribe() + } + + adapter = NotificationPermissionListAdapter(account.isNotificationsEnabled) { feed -> viewModel.setFeedNotificationState(feed) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -60,8 +71,9 @@ class NotificationPermissionActivity : AppCompatActivity() { binding.notifPermissionAccountList.layoutManager = LinearLayoutManager(this) binding.notifPermissionAccountList.adapter = adapter - viewModel.getFeedsWithNotifPermission().observe(this, Observer { - adapter?.submitList(it) + viewModel.getFeedsWithNotifPermission().observe(this, Observer { feeds -> + binding.notifPermissionFeedsSwitch.isChecked = feeds.all { it.isNotificationEnabled } + adapter?.submitList(feeds) }) } diff --git a/app/src/main/java/com/readrops/app/adapters/NotificationPermissionAdapter.kt b/app/src/main/java/com/readrops/app/adapters/NotificationPermissionListAdapter.kt similarity index 86% rename from app/src/main/java/com/readrops/app/adapters/NotificationPermissionAdapter.kt rename to app/src/main/java/com/readrops/app/adapters/NotificationPermissionListAdapter.kt index 68faaa34..d3c7f16b 100644 --- a/app/src/main/java/com/readrops/app/adapters/NotificationPermissionAdapter.kt +++ b/app/src/main/java/com/readrops/app/adapters/NotificationPermissionListAdapter.kt @@ -12,8 +12,8 @@ import com.readrops.app.databinding.NotificationLayoutBinding import com.readrops.app.utils.GlideApp import com.readrops.readropsdb.entities.Feed -class NotificationPermissionAdapter(var enableAll: Boolean, val listener: (feed: Feed) -> Unit) : - ListAdapter(DIFF_CALLBACK) { +class NotificationPermissionListAdapter(var enableAll: Boolean, val listener: (feed: Feed) -> Unit) : + ListAdapter(DIFF_CALLBACK) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotificationPermissionViewHolder { val binding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), @@ -49,7 +49,8 @@ class NotificationPermissionAdapter(var enableAll: Boolean, val listener: (feed: } else onBindViewHolder(holder, position) } - inner class NotificationPermissionViewHolder(val binding: NotificationLayoutBinding) : RecyclerView.ViewHolder(binding.root) + inner class NotificationPermissionViewHolder(val binding: NotificationLayoutBinding) : + RecyclerView.ViewHolder(binding.root) companion object { val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { @@ -60,6 +61,10 @@ class NotificationPermissionAdapter(var enableAll: Boolean, val listener: (feed: override fun areContentsTheSame(oldItem: Feed, newItem: Feed): Boolean { return oldItem.isNotificationEnabled == newItem.isNotificationEnabled } + + override fun getChangePayload(oldItem: Feed, newItem: Feed): Any? { + return newItem + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/readrops/app/utils/SyncResultDebugData.kt b/app/src/main/java/com/readrops/app/utils/SyncResultDebugData.kt index e3bbeb07..c3d9b7e6 100644 --- a/app/src/main/java/com/readrops/app/utils/SyncResultDebugData.kt +++ b/app/src/main/java/com/readrops/app/utils/SyncResultDebugData.kt @@ -39,7 +39,7 @@ class SyncResultDebugData { val database = Database.getInstance(context) val item = database.itemDao().select(5055) - database.feedDao().updateNotificationState(item.feedId, false).subscribe() + database.feedDao().updateFeedNotificationState(item.feedId, false).subscribe() val item2 = database.itemDao().select(5056) diff --git a/app/src/main/java/com/readrops/app/viewmodels/NotificationPermissionViewModel.kt b/app/src/main/java/com/readrops/app/viewmodels/NotificationPermissionViewModel.kt index dde09dc8..4d886dbe 100644 --- a/app/src/main/java/com/readrops/app/viewmodels/NotificationPermissionViewModel.kt +++ b/app/src/main/java/com/readrops/app/viewmodels/NotificationPermissionViewModel.kt @@ -22,5 +22,8 @@ class NotificationPermissionViewModel(application: Application) : AndroidViewMod .updateNotificationState(account?.id!!, enabled) fun setFeedNotificationState(feed: Feed): Completable = database.feedDao() - .updateNotificationState(feed.id, !feed.isNotificationEnabled) + .updateFeedNotificationState(feed.id, !feed.isNotificationEnabled) + + fun setAllFeedsNotificationState(enabled: Boolean) = database.feedDao() + .updateAllFeedsNotificationState(account?.id!!, enabled) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_notification_permission.xml b/app/src/main/res/layout/activity_notification_permission.xml index c8afbf7a..df166c48 100644 --- a/app/src/main/res/layout/activity_notification_permission.xml +++ b/app/src/main/res/layout/activity_notification_permission.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/md_white_1000" - android:padding="16dp" + android:padding="12dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -38,6 +38,38 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" /> + + + + + + + + %1$s nouveaux articles Activer les notifications Notifications + Activer tous les flux \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d52956c..1470e261 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,4 +131,5 @@ %1$s new articles Enable notifications Notifications + Enable all feeds diff --git a/readropsdb/src/main/java/com/readrops/readropsdb/dao/FeedDao.java b/readropsdb/src/main/java/com/readrops/readropsdb/dao/FeedDao.java index 63fbbbcf..0fc1a7ad 100644 --- a/readropsdb/src/main/java/com/readrops/readropsdb/dao/FeedDao.java +++ b/readropsdb/src/main/java/com/readrops/readropsdb/dao/FeedDao.java @@ -85,7 +85,10 @@ public abstract class FeedDao implements BaseDao { abstract int getRemoteFolderLocalId(String remoteId, int accountId); @Query("Update Feed set notification_enabled = :enabled Where id = :feedId") - public abstract Completable updateNotificationState(int feedId, boolean enabled); + public abstract Completable updateFeedNotificationState(int feedId, boolean enabled); + + @Query("Update Feed set notification_enabled = :enabled Where account_id = :accountId") + public abstract Completable updateAllFeedsNotificationState(int accountId, boolean enabled); /** * Insert, update and delete feeds, by account