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

92 lines
2.5 KiB
Kotlin

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