zcash-android-wallet-sdk/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/NoBackupContextWrapper.kt

45 lines
1.6 KiB
Kotlin

package cash.z.ecc.android.sdk.internal
import android.content.Context
import android.content.ContextWrapper
import java.io.File
/**
* A context class wrapper used for building our database classes. The advantage of this implementation
* is that we can control actions run on this context class. This is supposed to be used only for
* Android SDK level 27 and higher. The Room's underlying SQLite has a different implementation of
* SQLiteOpenHelper#getDatabaseLocked() and possibly other methods for Android SDK level 26 and lower.
* Which at the end call ContextImpl#openOrCreateDatabase(), instead of the overridden getDatabasePath(),
* and thus is not suitable for this custom context wrapper class.
*
* @param context
* @param parentDir The directory in which is the database file placed.
* @return Wrapped context class.
*/
internal class NoBackupContextWrapper(
context: Context,
private val parentDir: File
) : ContextWrapper(context.applicationContext) {
/**
* Overriding this function gives us ability to control the result database file location.
*
* @param name Database file name.
* @return File located under no_backup/co.electricoin.zcash directory.
*/
override fun getDatabasePath(name: String): File {
Twig.debug { "Database: $name in directory: ${parentDir.absolutePath}" }
return File(parentDir, name)
}
override fun getApplicationContext(): Context {
// Prevent breakout
return this
}
override fun getBaseContext(): Context {
// Prevent breakout
return this
}
}