mirror of
https://git.sr.ht/~oppen/ariane
synced 2025-03-15 08:08:43 +00:00
bookmarks wip
This commit is contained in:
parent
a501ca1260
commit
a2e9151296
12 changed files with 134 additions and 10 deletions
|
@ -1,6 +1,7 @@
|
|||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
|
@ -11,7 +12,7 @@ android {
|
|||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 7
|
||||
versionName "0.4.0 Beta"
|
||||
versionName "1.0.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
@ -46,14 +47,21 @@ dependencies {
|
|||
implementation "androidx.recyclerview:recyclerview:1.1.0"
|
||||
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
|
||||
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
|
||||
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
|
||||
//ROOM DB
|
||||
def room_version = "2.2.5"
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
|
||||
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
testImplementation 'junit:junit:4.13'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||
|
||||
}
|
8
app/src/main/java/oppen/tva/io/bookmarks/Bookmark.kt
Normal file
8
app/src/main/java/oppen/tva/io/bookmarks/Bookmark.kt
Normal file
|
@ -0,0 +1,8 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import java.net.URI
|
||||
|
||||
class Bookmark(
|
||||
val label: String,
|
||||
val uri: URI
|
||||
)
|
14
app/src/main/java/oppen/tva/io/bookmarks/BookmarkEntity.kt
Normal file
14
app/src/main/java/oppen/tva/io/bookmarks/BookmarkEntity.kt
Normal file
|
@ -0,0 +1,14 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "bookmarks")
|
||||
class BookmarkEntity(
|
||||
@ColumnInfo(name = "label") val label: String?,
|
||||
@ColumnInfo(name = "uri") val uri: String?
|
||||
){
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
var uid: Int = 0
|
||||
}
|
9
app/src/main/java/oppen/tva/io/bookmarks/BookmarksDB.kt
Normal file
9
app/src/main/java/oppen/tva/io/bookmarks/BookmarksDB.kt
Normal file
|
@ -0,0 +1,9 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
|
||||
@Database(entities = [BookmarkEntity::class], version = 1)
|
||||
abstract class BookmarksDB: RoomDatabase() {
|
||||
abstract fun bookmarksDao(): BookmarksDao
|
||||
}
|
15
app/src/main/java/oppen/tva/io/bookmarks/BookmarksDao.kt
Normal file
15
app/src/main/java/oppen/tva/io/bookmarks/BookmarksDao.kt
Normal file
|
@ -0,0 +1,15 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import androidx.room.*
|
||||
|
||||
@Dao
|
||||
interface BookmarksDao {
|
||||
@Query("SELECT * FROM bookmarks")
|
||||
suspend fun getAll(): List<BookmarkEntity>
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertAll(vararg bookmarks: BookmarkEntity)
|
||||
|
||||
@Delete
|
||||
suspend fun delete(bookmark: BookmarkEntity)
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import android.content.Context
|
||||
|
||||
interface BookmarksDatasource {
|
||||
fun get(onBookmarks: (List<Bookmark>) -> Unit)
|
||||
fun add(bookmark: Bookmark, onAdded: () -> Unit)
|
||||
fun delete(bookmark: Bookmark, onDelete: () -> Unit)
|
||||
|
||||
companion object{
|
||||
fun getDefault(applicationContext: Context): BookmarksDatasource{
|
||||
return RoomBookmarks(applicationContext)
|
||||
}
|
||||
}
|
||||
}
|
41
app/src/main/java/oppen/tva/io/bookmarks/RoomBookmarks.kt
Normal file
41
app/src/main/java/oppen/tva/io/bookmarks/RoomBookmarks.kt
Normal file
|
@ -0,0 +1,41 @@
|
|||
package oppen.tva.io.bookmarks
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URI
|
||||
|
||||
class RoomBookmarks(applicationContext: Context): BookmarksDatasource {
|
||||
|
||||
private val db: BookmarksDB = Room.databaseBuilder(applicationContext, BookmarksDB::class.java, "tva_bookmarks").build()
|
||||
|
||||
override fun get(onBookmarks: (List<Bookmark>) -> Unit) {
|
||||
GlobalScope.launch(Dispatchers.IO){
|
||||
val dbBookmarks = db.bookmarksDao().getAll()
|
||||
val bookmarks = mutableListOf<Bookmark>()
|
||||
|
||||
dbBookmarks.forEach { bookmarkEntity ->
|
||||
bookmarks.add(
|
||||
Bookmark(
|
||||
bookmarkEntity.label ?: "Unknown",
|
||||
URI.create(bookmarkEntity.uri))
|
||||
)
|
||||
}
|
||||
onBookmarks(bookmarks)
|
||||
}
|
||||
}
|
||||
|
||||
override fun add(bookmark: Bookmark, onAdded: () -> Unit) {
|
||||
GlobalScope.launch(Dispatchers.IO){
|
||||
val bookmarkEntity = BookmarkEntity(bookmark.label, bookmark.uri.toString())
|
||||
db.bookmarksDao().insertAll(bookmarkEntity)
|
||||
onAdded()
|
||||
}
|
||||
}
|
||||
|
||||
override fun delete(bookmark: Bookmark, onDelete: () -> Unit) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ import oppen.tva.R
|
|||
import oppen.tva.Tva
|
||||
import oppen.tva.databinding.ActivityTvaBinding
|
||||
import oppen.tva.io.TvaState
|
||||
import oppen.tva.io.bookmarks.BookmarksDatasource
|
||||
import oppen.tva.io.gemini.Datasource
|
||||
import oppen.tva.io.gemini.GeminiResponse
|
||||
import oppen.tva.io.gemini.RuntimeCache
|
||||
|
@ -86,7 +87,9 @@ class TvaActivity : AppCompatActivity() {
|
|||
|
||||
history = HistoryInterface.default(this)
|
||||
|
||||
model.initialise(Datasource.factory(this)){ state ->
|
||||
model.initialise(
|
||||
Datasource.factory(this),
|
||||
BookmarksDatasource.getDefault(applicationContext)){ state ->
|
||||
when(state){
|
||||
is TvaState.AppQuery -> runOnUiThread{ showAlert("App backdoor/query not implemented yet") }
|
||||
is TvaState.ResponseInput -> runOnUiThread {
|
||||
|
|
|
@ -4,20 +4,23 @@ import androidx.lifecycle.ViewModel
|
|||
import oppen.tva.Tva
|
||||
import oppen.tva.io.gemini.Datasource
|
||||
import oppen.tva.io.TvaState
|
||||
import oppen.tva.io.bookmarks.BookmarksDatasource
|
||||
import java.net.URI
|
||||
|
||||
class TvaViewModel: ViewModel() {
|
||||
|
||||
private lateinit var gemini: Datasource
|
||||
private lateinit var bookmarks: BookmarksDatasource
|
||||
private var onState: (state: TvaState) -> Unit = {}
|
||||
|
||||
private val history = mutableListOf<URI>()
|
||||
|
||||
fun initialise(gemini: Datasource, onState: (state: TvaState) -> Unit){
|
||||
fun initialise(gemini: Datasource, bookmarks: BookmarksDatasource, onState: (state: TvaState) -> Unit){
|
||||
this.gemini = gemini
|
||||
this.bookmarks = bookmarks
|
||||
this.onState = onState
|
||||
|
||||
request(URI.create(Tva.DEFAULT_HOME_CAPSULE))
|
||||
request(URI.create(Tva.DEFAULT_HOME_CAPSULE))//todo - regression: should check prefs...
|
||||
onState(TvaState.TabChange(1))
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
<item
|
||||
android:id="@+id/overflow_menu_search"
|
||||
android:title="@string/search" />
|
||||
<item
|
||||
android:id="@+id/overflow_menu_bookmark"
|
||||
android:title="@string/add_bookmark" />
|
||||
<item
|
||||
android:id="@+id/overflow_menu_bookmarks"
|
||||
android:title="@string/bookmarks" />
|
||||
<item
|
||||
android:id="@+id/overflow_menu_history"
|
||||
android:title="@string/history" />
|
||||
|
|
|
@ -27,4 +27,6 @@
|
|||
<string name="save_track">Save track</string>
|
||||
<string name="dismiss_player">Dismiss player</string>
|
||||
<string name="page_backlinks">Backlinks</string>
|
||||
<string name="add_bookmark">Add Bookmark</string>
|
||||
<string name="bookmarks">Bookmarks</string>
|
||||
</resources>
|
|
@ -1,6 +1,6 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
buildscript {
|
||||
ext.kotlin_version = "1.3.72"
|
||||
ext.kotlin_version = "1.4.0"
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
|
|
Loading…
Add table
Reference in a new issue