mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 13:33:13 -07:00
Add Room to Android
This commit is contained in:
parent
e610d1bd60
commit
dae2a03589
7 changed files with 225 additions and 23 deletions
|
@ -1,8 +1,7 @@
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
apply plugin: 'kotlin-kapt'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 29
|
||||||
|
@ -59,4 +58,13 @@ dependencies {
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation 'com.google.android.material:material:1.0.0'
|
||||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
|
||||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
|
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
|
||||||
|
implementation "io.reactivex.rxjava2:rxjava:2.2.12"
|
||||||
|
implementation "io.reactivex.rxjava2:rxkotlin:2.4.0"
|
||||||
|
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||||
|
def room_version = "2.2.0-rc01"
|
||||||
|
implementation "androidx.room:room-runtime:$room_version"
|
||||||
|
kapt "androidx.room:room-compiler:$room_version"
|
||||||
|
implementation "androidx.room:room-ktx:$room_version"
|
||||||
|
implementation "androidx.room:room-rxjava2:$room_version"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Chiaki.
|
||||||
|
*
|
||||||
|
* Chiaki is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Chiaki is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.metallic.chiaki.common
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.room.*
|
||||||
|
|
||||||
|
@Database(
|
||||||
|
version = 1,
|
||||||
|
entities = [RegisteredHost::class, ManualHost::class])
|
||||||
|
@TypeConverters(Converters::class)
|
||||||
|
abstract class AppDatabase: RoomDatabase()
|
||||||
|
{
|
||||||
|
abstract fun registeredHostDao(): RegisteredHostDao
|
||||||
|
abstract fun manualHostDao(): ManualHostDao
|
||||||
|
}
|
||||||
|
|
||||||
|
private var database: AppDatabase? = null
|
||||||
|
fun getDatabase(context: Context): AppDatabase
|
||||||
|
{
|
||||||
|
val currentDb = database
|
||||||
|
if(currentDb != null)
|
||||||
|
return currentDb
|
||||||
|
val db = Room.databaseBuilder(
|
||||||
|
context.applicationContext,
|
||||||
|
AppDatabase::class.java,
|
||||||
|
"chiaki").build()
|
||||||
|
database = db
|
||||||
|
return db
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Converters
|
||||||
|
{
|
||||||
|
@TypeConverter
|
||||||
|
fun macFromValue(v: Long) = MacAddress(v)
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
fun macToValue(addr: MacAddress) = addr.value
|
||||||
|
}
|
|
@ -17,31 +17,19 @@
|
||||||
|
|
||||||
package com.metallic.chiaki.common
|
package com.metallic.chiaki.common
|
||||||
|
|
||||||
import android.net.MacAddress
|
|
||||||
import com.metallic.chiaki.lib.DiscoveryHost
|
import com.metallic.chiaki.lib.DiscoveryHost
|
||||||
|
|
||||||
data class RegisteredHost(
|
sealed class DisplayHost
|
||||||
val apSsid: String?,
|
{
|
||||||
val apBssid: String?,
|
abstract val registeredHost: RegisteredHost?
|
||||||
val apKey: String?,
|
}
|
||||||
val apName: String?,
|
|
||||||
val ps4Mac: MacAddress,
|
|
||||||
val ps4Nickname: String?,
|
|
||||||
val rpRegistKey: ByteArray, // CHIAKI_SESSION_AUTH_SIZE
|
|
||||||
val rpKeyType: UInt,
|
|
||||||
val rpKey: ByteArray // 0x10
|
|
||||||
)
|
|
||||||
|
|
||||||
sealed class DisplayHost(
|
|
||||||
val registeredHost: RegisteredHost?
|
|
||||||
)
|
|
||||||
|
|
||||||
class DiscoveredDisplayServer(
|
class DiscoveredDisplayServer(
|
||||||
registeredHost: RegisteredHost?,
|
override val registeredHost: RegisteredHost?,
|
||||||
val discoveredHost: DiscoveryHost
|
val discoveredHost: DiscoveryHost
|
||||||
): DisplayHost(registeredHost)
|
): DisplayHost()
|
||||||
|
|
||||||
class ManualDisplayServer(
|
class ManualDisplayServer(
|
||||||
registeredHost: RegisteredHost?,
|
override val registeredHost: RegisteredHost?,
|
||||||
val manualHost: Int
|
val manualHost: ManualHost
|
||||||
): DisplayHost(registeredHost)
|
): DisplayHost()
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Chiaki.
|
||||||
|
*
|
||||||
|
* Chiaki is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Chiaki is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.metallic.chiaki.common
|
||||||
|
|
||||||
|
class MacAddress(v: Long)
|
||||||
|
{
|
||||||
|
val value: Long = v and 0xffffffffffff
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean =
|
||||||
|
if(other is MacAddress)
|
||||||
|
other.value == value
|
||||||
|
else
|
||||||
|
super.equals(other)
|
||||||
|
|
||||||
|
override fun hashCode() = value.hashCode()
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Chiaki.
|
||||||
|
*
|
||||||
|
* Chiaki is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Chiaki is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.metallic.chiaki.common
|
||||||
|
|
||||||
|
import androidx.room.*
|
||||||
|
import androidx.room.ForeignKey.SET_NULL
|
||||||
|
import io.reactivex.Completable
|
||||||
|
import io.reactivex.Flowable
|
||||||
|
|
||||||
|
@Entity(tableName = "manual_host",
|
||||||
|
foreignKeys = [
|
||||||
|
ForeignKey(
|
||||||
|
entity = RegisteredHost::class,
|
||||||
|
parentColumns = ["id"],
|
||||||
|
childColumns = ["registered_host"],
|
||||||
|
onDelete = SET_NULL
|
||||||
|
)
|
||||||
|
])
|
||||||
|
data class ManualHost(
|
||||||
|
@PrimaryKey(autoGenerate = true) val id: Int = 0,
|
||||||
|
val host: String,
|
||||||
|
@ColumnInfo(name = "registered_host") val registeredHost: Int?
|
||||||
|
)
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface ManualHostDao
|
||||||
|
{
|
||||||
|
@Query("SELECT * FROM manual_host")
|
||||||
|
fun getAll(): Flowable<List<ManualHost>>
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
fun insert(host: ManualHost): Completable
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Chiaki.
|
||||||
|
*
|
||||||
|
* Chiaki is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Chiaki is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.metallic.chiaki.common
|
||||||
|
|
||||||
|
import androidx.room.*
|
||||||
|
import androidx.room.ColumnInfo.BLOB
|
||||||
|
import io.reactivex.Flowable
|
||||||
|
|
||||||
|
@Suppress("ArrayInDataClass")
|
||||||
|
@Entity(tableName = "registered_host")
|
||||||
|
data class RegisteredHost(
|
||||||
|
@PrimaryKey(autoGenerate = true) val id: Int = 0,
|
||||||
|
@ColumnInfo(name = "ap_ssid") val apSsid: String?,
|
||||||
|
@ColumnInfo(name = "ap_bssid") val apBssid: String?,
|
||||||
|
@ColumnInfo(name = "ap_key") val apKey: String?,
|
||||||
|
@ColumnInfo(name = "ap_name") val apName: String?,
|
||||||
|
@ColumnInfo(name = "ps4_mac") val ps4Mac: MacAddress,
|
||||||
|
@ColumnInfo(name = "ps4_nickname") val ps4Nickname: String?,
|
||||||
|
@ColumnInfo(name = "rp_regist_key", typeAffinity = BLOB) val rpRegistKey: ByteArray, // CHIAKI_SESSION_AUTH_SIZE
|
||||||
|
@ColumnInfo(name = "rp_key_type") val rpKeyType: Int,
|
||||||
|
@ColumnInfo(name = "rp_key", typeAffinity = BLOB) val rpKey: ByteArray // 0x10
|
||||||
|
)
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface RegisteredHostDao
|
||||||
|
{
|
||||||
|
@Query("SELECT * FROM registered_host")
|
||||||
|
fun getAll(): Flowable<List<RegisteredHost>>
|
||||||
|
}
|
|
@ -21,12 +21,22 @@ import android.app.ActivityOptions
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import com.metallic.chiaki.R
|
import com.metallic.chiaki.R
|
||||||
import com.metallic.chiaki.TestStartActivity
|
import com.metallic.chiaki.TestStartActivity
|
||||||
|
import com.metallic.chiaki.common.ManualHost
|
||||||
|
import com.metallic.chiaki.common.getDatabase
|
||||||
|
import io.reactivex.Completable
|
||||||
|
import io.reactivex.Observable
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity()
|
class MainActivity : AppCompatActivity()
|
||||||
{
|
{
|
||||||
|
private val disposable = CompositeDisposable()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?)
|
override fun onCreate(savedInstanceState: Bundle?)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -39,5 +49,24 @@ class MainActivity : AppCompatActivity()
|
||||||
startActivity(it, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
|
startActivity(it, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*val db = getDatabase(this)
|
||||||
|
Completable.mergeArray(
|
||||||
|
db.manualHostDao().insert(ManualHost(host = "test", registeredHost = null)),
|
||||||
|
db.manualHostDao().insert(ManualHost(host = "adsgsdfgdsfg", registeredHost = null)),
|
||||||
|
db.manualHostDao().insert(ManualHost(host = "sdfgsdfg", registeredHost = null))
|
||||||
|
).andThen(db.manualHostDao().getAll())
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe {
|
||||||
|
Log.i("MainActivity", "got $it")
|
||||||
|
}
|
||||||
|
.also { disposable.add(it) }*/
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy()
|
||||||
|
{
|
||||||
|
super.onDestroy()
|
||||||
|
disposable.dispose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue