bookmarks wip

This commit is contained in:
Öppen 2020-09-07 22:15:18 +01:00
parent a501ca1260
commit a2e9151296
12 changed files with 134 additions and 10 deletions

View File

@ -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'
}

View File

@ -0,0 +1,8 @@
package oppen.tva.io.bookmarks
import java.net.URI
class Bookmark(
val label: String,
val uri: URI
)

View 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
}

View 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
}

View 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)
}

View File

@ -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)
}
}
}

View 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")
}
}

View File

@ -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 {

View File

@ -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))
}

View File

@ -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" />

View File

@ -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>

View File

@ -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()