Loading play-services-basement/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt +13 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import android.content.ContentValues import android.content.Context import android.database.Cursor import android.net.Uri import android.os.Binder object SettingsContract { const val AUTHORITY = "org.microg.gms.settings" Loading Loading @@ -103,15 +104,24 @@ object SettingsContract { const val CONTENT_TYPE = "vnd.android.cursor.item/vnd.$AUTHORITY.$id" } fun <T> getSettings(context: Context, uri: Uri, projection: Array<out String>?, f: (Cursor) -> T): T { private fun <T> withoutCallingIdentity(f: () -> T): T { val identity = Binder.clearCallingIdentity() try { return f.invoke() } finally { Binder.restoreCallingIdentity(identity) } } fun <T> getSettings(context: Context, uri: Uri, projection: Array<out String>?, f: (Cursor) -> T): T = withoutCallingIdentity { context.contentResolver.query(uri, projection, null, null, null).use { c -> require(c != null) { "Cursor for query $uri ${projection?.toList()} was null" } if (!c.moveToFirst()) error("Cursor for query $uri ${projection?.toList()} was empty") return f.invoke(c) f.invoke(c) } } fun setSettings(context: Context, uri: Uri, v: ContentValues.() -> Unit) { fun setSettings(context: Context, uri: Uri, v: ContentValues.() -> Unit) = withoutCallingIdentity { val values = ContentValues().apply { v.invoke(this) } val affected = context.contentResolver.update(uri, values, null, null) require(affected == 1) { "Update for $uri with $values affected 0 rows"} Loading Loading
play-services-basement/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt +13 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import android.content.ContentValues import android.content.Context import android.database.Cursor import android.net.Uri import android.os.Binder object SettingsContract { const val AUTHORITY = "org.microg.gms.settings" Loading Loading @@ -103,15 +104,24 @@ object SettingsContract { const val CONTENT_TYPE = "vnd.android.cursor.item/vnd.$AUTHORITY.$id" } fun <T> getSettings(context: Context, uri: Uri, projection: Array<out String>?, f: (Cursor) -> T): T { private fun <T> withoutCallingIdentity(f: () -> T): T { val identity = Binder.clearCallingIdentity() try { return f.invoke() } finally { Binder.restoreCallingIdentity(identity) } } fun <T> getSettings(context: Context, uri: Uri, projection: Array<out String>?, f: (Cursor) -> T): T = withoutCallingIdentity { context.contentResolver.query(uri, projection, null, null, null).use { c -> require(c != null) { "Cursor for query $uri ${projection?.toList()} was null" } if (!c.moveToFirst()) error("Cursor for query $uri ${projection?.toList()} was empty") return f.invoke(c) f.invoke(c) } } fun setSettings(context: Context, uri: Uri, v: ContentValues.() -> Unit) { fun setSettings(context: Context, uri: Uri, v: ContentValues.() -> Unit) = withoutCallingIdentity { val values = ContentValues().apply { v.invoke(this) } val affected = context.contentResolver.update(uri, values, null, null) require(affected == 1) { "Update for $uri with $values affected 0 rows"} Loading