diff --git a/app/src/main/java/net/underdesk/circolapp/MainActivity.kt b/app/src/main/java/net/underdesk/circolapp/MainActivity.kt
index 58cc52e..fa34bdf 100644
--- a/app/src/main/java/net/underdesk/circolapp/MainActivity.kt
+++ b/app/src/main/java/net/underdesk/circolapp/MainActivity.kt
@@ -30,6 +30,7 @@ import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.widget.SearchView
+import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
@@ -38,7 +39,9 @@ import androidx.preference.PreferenceManager
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.snackbar.Snackbar
import com.mikepenz.aboutlibraries.LibsBuilder
+import kotlinx.coroutines.launch
import net.underdesk.circolapp.adapters.CircularLetterAdapter
+import net.underdesk.circolapp.data.AndroidDatabase
import net.underdesk.circolapp.databinding.ActivityMainBinding
import net.underdesk.circolapp.utils.DownloadableFile
import net.underdesk.circolapp.works.PollWork
@@ -113,6 +116,12 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
refreshCallback?.refresh()
true
}
+ R.id.menu_main_mark_all_read -> {
+ lifecycleScope.launch {
+ AndroidDatabase.getDaoInstance(this@MainActivity).markAllRead(true)
+ }
+ true
+ }
R.id.menu_main_settings -> {
startActivity(Intent(this, SettingsActivity::class.java))
true
diff --git a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt
index 9079a85..3810591 100644
--- a/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt
+++ b/app/src/main/java/net/underdesk/circolapp/adapters/CircularLetterAdapter.kt
@@ -21,6 +21,7 @@ package net.underdesk.circolapp.adapters
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
+import android.graphics.Typeface
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -85,6 +86,14 @@ class CircularLetterAdapter(
holder.title.text = circulars[position].name
holder.date.text = circulars[position].date
+ if (circulars[position].read) {
+ holder.number.typeface = Typeface.DEFAULT
+ holder.date.typeface = Typeface.DEFAULT
+ } else {
+ holder.number.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
+ holder.date.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
+ }
+
holder.favouriteButton.setImageResource(
if (circulars[position].favourite) {
holder.favouriteButton.contentDescription =
@@ -154,6 +163,14 @@ class CircularLetterAdapter(
}
holder.viewButton.setOnClickListener {
+ adapterScope.launch {
+ AndroidDatabase.getDaoInstance(context).markRead(
+ circulars[position].id,
+ circulars[position].school,
+ true
+ )
+ }
+
FileUtils.viewFile(circulars[position].url, context)
}
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 5f85753..3943628 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -12,6 +12,10 @@
android:id="@+id/menu_main_refresh"
android:title="@string/menu_refresh"
app:showAsAction="never" />
+
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 7a37860..2818300 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -9,6 +9,7 @@
Informazioni
Cerca
Aggiorna
+ Segna tutte le circolari come lette
Generale
Notifiche
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7e4e9ac..c4d2324 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,6 +9,7 @@
About
Search
Refresh
+ Mark all circulars as read
General
Notifications
diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/Circular.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/Circular.kt
index 44eecf4..687f010 100644
--- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/Circular.kt
+++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/Circular.kt
@@ -26,6 +26,7 @@ data class Circular(
val date: String,
var favourite: Boolean = false,
var reminder: Boolean = false,
+ var read: Boolean = false,
val attachmentsNames: MutableList = mutableListOf(),
val attachmentsUrls: MutableList = mutableListOf()
)
diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularDao.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularDao.kt
index a585dde..ce26d65 100644
--- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularDao.kt
+++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularDao.kt
@@ -16,7 +16,7 @@ class CircularDao(
private val appDatabaseQueries = database.appDatabaseQueries
private val circularMapper =
- { id: Long, school: Long, name: String, url: String, date: String, favourite: Long, reminder: Long, attachmentsNames: String, attachmentsUrls: String ->
+ { id: Long, school: Long, name: String, url: String, date: String, favourite: Long, reminder: Long, read: Long, attachmentsNames: String, attachmentsUrls: String ->
Circular(
id,
school.toInt(),
@@ -25,6 +25,7 @@ class CircularDao(
date,
favourite.toBoolean(),
reminder.toBoolean(),
+ read.toBoolean(),
attachmentsNames.toList(),
attachmentsUrls.toList()
)
@@ -40,6 +41,7 @@ class CircularDao(
it.date,
it.favourite.toLong(),
it.reminder.toLong(),
+ it.read.toLong(),
it.attachmentsNames.joinToString(),
it.attachmentsUrls.joinToString()
)
@@ -56,11 +58,28 @@ class CircularDao(
)
}
+ suspend fun markRead(id: Long, school: Int, read: Boolean) =
+ withContext(PlatformDispatcher.IO) {
+ appDatabaseQueries.markCircularRead(
+ read.toLong(),
+ id,
+ school.toLong()
+ )
+ }
+
+ suspend fun markAllRead(read: Boolean) =
+ withContext(PlatformDispatcher.IO) {
+ appDatabaseQueries.markAllRead(
+ read.toLong()
+ )
+ }
+
suspend fun deleteAll() = withContext(PlatformDispatcher.IO) {
appDatabaseQueries.deleteAllCirculars()
}
- fun getCircular(id: Long, school: Int) = appDatabaseQueries.getCircular(id, school.toLong(), circularMapper).executeAsOne()
+ fun getCircular(id: Long, school: Int) =
+ appDatabaseQueries.getCircular(id, school.toLong(), circularMapper).executeAsOne()
fun getCirculars(school: Int) =
appDatabaseQueries.getCirculars(school.toLong(), circularMapper).executeAsList()
diff --git a/shared/src/commonMain/sqldelight/net.underdesk.circolapp.shared.data/AppDatabase.sq b/shared/src/commonMain/sqldelight/net.underdesk.circolapp.shared.data/AppDatabase.sq
index 656f335..b5b4303 100644
--- a/shared/src/commonMain/sqldelight/net.underdesk.circolapp.shared.data/AppDatabase.sq
+++ b/shared/src/commonMain/sqldelight/net.underdesk.circolapp.shared.data/AppDatabase.sq
@@ -6,20 +6,30 @@ CREATE TABLE Circulars (
date TEXT NOT NULL,
favourite INTEGER NOT NULL DEFAULT 0,
reminder INTEGER NOT NULL DEFAULT 0,
+ read INTEGER NOT NULL DEFAULT 0,
attachmentsNames TEXT NOT NULL,
attachmentsUrls TEXT NOT NULL,
PRIMARY KEY (id, school)
);
insertCircular:
-INSERT OR IGNORE INTO Circulars(id, school, name, url, date, favourite, reminder, attachmentsNames, attachmentsUrls)
-VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?);
+INSERT OR IGNORE INTO Circulars(id, school, name, url, date, favourite, reminder, read, attachmentsNames, attachmentsUrls)
+VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
updateCircular:
UPDATE Circulars
SET favourite = ?, reminder = ?
WHERE id = ? AND school = ?;
+markCircularRead:
+UPDATE Circulars
+SET read = ?
+WHERE id = ? AND school = ?;
+
+markAllRead:
+UPDATE Circulars
+SET read = ?;
+
deleteAllCirculars:
DELETE FROM Circulars;