diff --git a/app/src/main/java/io/heckel/ntfy/app/Application.kt b/app/src/main/java/io/heckel/ntfy/app/Application.kt index 5c33b86..b4b104c 100644 --- a/app/src/main/java/io/heckel/ntfy/app/Application.kt +++ b/app/src/main/java/io/heckel/ntfy/app/Application.kt @@ -12,8 +12,7 @@ class Application : Application() { Database.getInstance(this) } val repository by lazy { - val sharedPrefs = applicationContext.getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE) - val repository = Repository.getInstance(sharedPrefs, database) + val repository = Repository.getInstance(applicationContext) if (repository.getRecordLogs()) { Log.setRecord(true) } diff --git a/app/src/main/java/io/heckel/ntfy/db/Repository.kt b/app/src/main/java/io/heckel/ntfy/db/Repository.kt index e7642cc..34e9eb2 100644 --- a/app/src/main/java/io/heckel/ntfy/db/Repository.kt +++ b/app/src/main/java/io/heckel/ntfy/db/Repository.kt @@ -7,6 +7,7 @@ import androidx.annotation.WorkerThread import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.* import io.heckel.ntfy.util.Log +import io.heckel.ntfy.util.validUrl import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong @@ -346,6 +347,18 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas return false } + fun getLastShareTopics(): List { + val topics = sharedPrefs.getString(SHARED_PREFS_LAST_TOPICS, "") ?: "" + return topics.split("\n").filter { validUrl(it) } + } + + fun addLastShareTopic(topic: String) { + val topics = (getLastShareTopics() + topic).takeLast(LAST_TOPICS_COUNT) + sharedPrefs.edit() + .putString(SHARED_PREFS_LAST_TOPICS, topics.joinToString(separator = "\n")) + .apply() + } + private fun toSubscriptionList(list: List): List { return list.map { s -> val connectionState = connectionStates.getOrElse(s.id) { ConnectionState.NOT_APPLICABLE } @@ -422,6 +435,9 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas const val SHARED_PREFS_BATTERY_OPTIMIZATIONS_REMIND_TIME = "BatteryOptimizationsRemindTime" const val SHARED_PREFS_UNIFIED_PUSH_ENABLED = "UnifiedPushEnabled" const val SHARED_PREFS_UNIFIED_PUSH_BASE_URL = "UnifiedPushBaseURL" + const val SHARED_PREFS_LAST_TOPICS = "LastTopics" + + private const val LAST_TOPICS_COUNT = 5 const val MUTED_UNTIL_SHOW_ALL = 0L const val MUTED_UNTIL_FOREVER = 1L @@ -456,7 +472,7 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas return getInstance(sharedPrefs, database) } - fun getInstance(sharedPrefs: SharedPreferences, database: Database): Repository { + private fun getInstance(sharedPrefs: SharedPreferences, database: Database): Repository { return synchronized(Repository::class) { val newInstance = instance ?: Repository(sharedPrefs, database) instance = newInstance diff --git a/app/src/main/java/io/heckel/ntfy/ui/NotificationFragment.kt b/app/src/main/java/io/heckel/ntfy/ui/NotificationFragment.kt index bd64799..8509e8e 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/NotificationFragment.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/NotificationFragment.kt @@ -43,9 +43,7 @@ class NotificationFragment : DialogFragment() { } // Dependencies - val database = Database.getInstance(requireActivity().applicationContext) - val sharedPrefs = requireActivity().getSharedPreferences(Repository.SHARED_PREFS_ID, Context.MODE_PRIVATE) - repository = Repository.getInstance(sharedPrefs, database) + repository = Repository.getInstance(requireContext()) // Build root view val view = requireActivity().layoutInflater.inflate(R.layout.fragment_notification_dialog, null) diff --git a/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt index 8345b04..bd807fa 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/ShareActivity.kt @@ -28,7 +28,7 @@ class ShareActivity : AppCompatActivity() { // File to share private var fileUri: Uri? = null - // List of base URLs used, excluding app_base_url + // Lazy-loaded things from Repository private lateinit var baseUrls: List // UI elements @@ -115,6 +115,10 @@ class ShareActivity : AppCompatActivity() { } } + // Populate "last topics" + val lastTopics = repository.getLastShareTopics() + Log.d(TAG, "last topics: $lastTopics") + // Incoming intent val intent = intent ?: return if (intent.action != Intent.ACTION_SEND) return @@ -229,14 +233,11 @@ class ShareActivity : AppCompatActivity() { topic = topic, user = user, message = message, - title = "", - priority = 3, - tags = emptyList(), - delay = "", body = body, // May be null filename = filename, // May be empty ) runOnUiThread { + repository.addLastShareTopic(topicUrl(baseUrl, topic)) finish() Toast .makeText(this@ShareActivity, getString(R.string.share_successful), Toast.LENGTH_LONG) diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index d11421f..44265e2 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -21,7 +21,7 @@ android:paddingBottom="2dp" android:text="@string/share_content_title" android:textAlignment="viewStart" - android:textAppearance="@style/TextAppearance.Material3.TitleMedium" + android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:paddingStart="2dp"/> + + + + android:layout_marginTop="10dp" app:layout_constraintTop_toBottomOf="@id/share_last_title"/> - + Cannot read image: %1$s A file was shared with you Cannot read file infos: %1$s + Share to + Last topics Message successfully published