Skip to content

Instantly share code, notes, and snippets.

View krzdabrowski's full-sized avatar

Krzysztof Dąbrowski krzdabrowski

View GitHub Profile
val boxModule = module {
single { ObjectBox.init(androidContext()) }
}
inline fun <reified T: Any> saveToDatabase(data: List<T>) {
CoroutineScope(Dispatchers.IO).launch {
boxStore.boxFor<T>().put(data)
}
}
internal class DarkModeHelper(private val context: Context) {
internal fun onModeChanged(newMode: Boolean, delegate: AppCompatDelegate) {
if (newMode) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
delegate.applyDayNight()
}
}
private val darkModeHelper: DarkModeHelper by inject()
// ...
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
R.id.mnu_set_theme -> {
darkMode = !darkMode
sharedPref.edit {
putBoolean("darkMode", darkMode)
override fun onResume() {
super.onResume()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
configureAutoDarkMode()
} else {
darkModeHelper.onModeChanged(darkMode, delegate)
}
}
private fun configureAutoDarkMode() {
[versions]
hilt = "2.50"
kotlin = "1.9.22"
kotlin-coroutines = "1.7.3"
retrofit = "2.9.0"
room = "2.6.1"
(...)
[plugins]
interface RocketApi {
@GET("rockets")
suspend fun getRockets(): List<RocketResponse>
}
@Serializable
data class RocketResponse(
@SerialName("id")
val id: String = "",
@SerialName("name")
val name: String = "",
@SerialName("cost_per_launch")
val costPerLaunch: Int = 0,
private const val DATABASE_VERSION = 1
@Database(
entities = [RocketCached::class],
version = DATABASE_VERSION
)
abstract class AppDatabase : RoomDatabase() {
abstract fun rocketDao(): RocketDao
}
@Dao
interface RocketDao {
@Query("SELECT * FROM RocketCached")
fun getRockets(): Flow<List<RocketCached>>
@Upsert
suspend fun saveRockets(rockets: List<RocketCached>)
}