Skip to content

Instantly share code, notes, and snippets.

View oliverspryn's full-sized avatar
☀️
Everyday is a great day!

Oliver Spryn oliverspryn

☀️
Everyday is a great day!
View GitHub Profile
@oliverspryn
oliverspryn / MainActivity.kt
Created November 12, 2021 13:39
Dagger injecting the build type into the MainActivity
class MainActivity : AppCompatActivity() {
@Named(BuildModule.buildType)
@Inject
lateinit var buildType: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerMainComponent
@oliverspryn
oliverspryn / ImageController.kt
Created November 12, 2021 13:36
The image decoder with proper support for testing API-dependent code
class ImageController @Inject constructor(
@Named(BuildModule.sdkVersion) private val sdkVersion
) {
fun decodeAndProcessImage(uri: Uri) {
val bitmap = if (sdkVersion < Build.VERSION_CODES.P) {
MediaStore.Images.Media.getBitmap(contentResolver, uri)
} else {
val source = ImageDecoder.createSource(contentResolver, uri)
ImageDecoder.decodeBitmap(source)
}
@oliverspryn
oliverspryn / BuildModule.kt
Last active November 12, 2021 13:40
Dagger providing static values on the Build and BuildConfig objects
@Module
class BuildModule {
companion object {
const val buildType = "com.example.dagger.modules.BuildModule.buildType"
const val debug = "com.example.dagger.modules.BuildModule.debug"
const val sdkVersion = "com.example.dagger.modules.BuildModule.sdkVersion"
}
@Provides
@Named(debug)
@oliverspryn
oliverspryn / MainActivity.kt
Last active November 12, 2021 13:41
A slightly more realistic view of the compiled code after the constants are inlined
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if ("debug" == "release") {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}
}
}
@oliverspryn
oliverspryn / MainController.kt
Last active November 12, 2021 13:41
An activity which sets the security flag for release builds
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (BuildConfig.BUILD_TYPE == "release") {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}
}
}
@oliverspryn
oliverspryn / TestHelpers.kt
Created November 12, 2021 13:19
A function to change the value of Build.VERSION
object TestHelpers {
// Usage: TestHelpers.setSdkVersion(Build.VERSION_CODES.P)
fun setSdkVersion(version: Int) {
val field = Build.VERSION::class.java.getField("SDK_INT")
field.isAccessible = true
val modifiersField = Field::class.java.getDeclaredField("modifiers")
modifiersField.isAccessible = true
modifiersField.setInt(field, field.modifiers and Modifier.FINAL.inv())
@oliverspryn
oliverspryn / ImageController.kt
Last active November 12, 2021 13:35
A function which spans multiple API versions to decode a bitmap
class ImageController {
fun decodeAndProcessImage(uri: Uri) {
val bitmap = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
MediaStore.Images.Media.getBitmap(contentResolver, uri)
} else {
val source = ImageDecoder.createSource(contentResolver, uri)
ImageDecoder.decodeBitmap(source)
}
// Do something with the Bitmap
@oliverspryn
oliverspryn / colors.xml
Created November 5, 2021 12:41
The light mode variant of the color pallet
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launcher_background_color">@android:color/system_accent1_100</color>
<color name="launcher_foreground_android_color">@android:color/system_neutral1_800</color>
</resources>
@oliverspryn
oliverspryn / colors.xml
Created November 5, 2021 12:41
The dark mode variant of the color pallet
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launcher_background_color">@android:color/system_neutral1_800</color>
<color name="launcher_foreground_android_color">@android:color/system_accent1_100</color>
</resources>
@oliverspryn
oliverspryn / colors.xml
Created November 5, 2021 12:26
A color pallet using my brand's color scheme
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="launcher_background_color">#3DDC84</color>
<color name="launcher_foreground_android_color">#FFFFFF</color>
</resources>