secant-android-wallet/spackle-android-lib/src/main/kotlin/co/electriccoin/zcash/spackle/process/AbstractProcessNameContentP...

92 lines
2.5 KiB
Kotlin
Raw Normal View History

package co.electriccoin.zcash.spackle.process
import android.app.Application
import android.content.ContentProvider
import android.content.ContentValues
import android.content.Context
import android.content.pm.ProviderInfo
import android.database.Cursor
import android.net.Uri
import android.os.Build
import android.os.Process
import androidx.annotation.RequiresApi
import co.electriccoin.zcash.spackle.AndroidApiVersion
/**
* Implement an empty subclass of this ContentProvider for each process the application uses.
*
* This works in conjunction with [ProcessNameCompat].
*/
open class AbstractProcessNameContentProvider : ContentProvider() {
override fun onCreate() = true
override fun attachInfo(
context: Context,
info: ProviderInfo
) {
super.attachInfo(context, info)
val processName: String =
if (AndroidApiVersion.isAtLeastT) {
getProcessNameTPlus()
} else if (AndroidApiVersion.isAtLeastP) {
getProcessNamePPlus()
} else {
getProcessNameLegacy(context, info)
}
ProcessNameCompat.setProcessName(processName)
}
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
private fun getProcessNameTPlus() = Process.myProcessName()
@RequiresApi(api = Build.VERSION_CODES.P)
private fun getProcessNamePPlus(): String = Application.getProcessName()
override fun query(
uri: Uri,
projection: Array<out String>?,
selection: String?,
selectionArgs: Array<out String>?,
sortOrder: String?
): Cursor? {
throw UnsupportedOperationException()
}
override fun getType(uri: Uri): String? {
throw UnsupportedOperationException()
}
override fun insert(
uri: Uri,
values: ContentValues?
): Uri? {
throw UnsupportedOperationException()
}
override fun delete(
uri: Uri,
selection: String?,
selectionArgs: Array<out String>?
): Int {
throw UnsupportedOperationException()
}
override fun update(
uri: Uri,
values: ContentValues?,
selection: String?,
selectionArgs: Array<out String>?
): Int {
throw UnsupportedOperationException()
}
companion object {
internal fun getProcessNameLegacy(
context: Context,
info: ProviderInfo
) = info.processName ?: context.applicationInfo.processName ?: context.packageName
}
}