Skip to content

Instantly share code, notes, and snippets.

@hvisser
hvisser / MaterialConversions.kt
Last active May 15, 2024 09:16
Using both Material 3 and material components in Compose within the same theme
// conversions based on https://material.io/blog/migrating-material-3, deprecated colors set to Colors.Red
@Composable
fun fromMaterial3Theme(isLight: Boolean): Colors {
val scheme = MaterialTheme.colorScheme
return Colors(
primary = scheme.primary,
primaryVariant = Color.Red,
secondary = scheme.secondary,
secondaryVariant = Color.Red,
background = scheme.background,
@hvisser
hvisser / DemoModeEnabler.kt
Created January 23, 2018 11:44
Enables demo mode on a device for the purpose of taking screenshots
class DemoModeEnabler {
fun enable() {
executeShellCommand("settings put global sysui_demo_allowed 1")
sendCommand("exit")
sendCommand("enter")
sendCommand("notifications", "visible" to "false")
sendCommand("network", "wifi" to "hide")
sendCommand("battery", "level" to "100", "plugged" to "false")
sendCommand("clock", "hhmm" to "1000")
@hvisser
hvisser / KeepScreenOn.kt
Created January 21, 2022 09:16
LocalView.current can be useful if you need to tap into a view function like keepScreenOn or haptics from Compose
@Composable
fun KeepScreenOn() {
val currentView = LocalView.current
DisposableEffect(Unit) {
currentView.keepScreenOn = true
onDispose {
currentView.keepScreenOn = false
}
}
@hvisser
hvisser / init.gradle
Last active February 7, 2021 15:32
Init script to load additional properties from gradle.local.properties
gradle.projectsLoaded { gradle ->
def file = rootProject.file("gradle.local.properties")
if (file.exists()) {
def properties = new Properties()
file.withInputStream { properties.load(it) }
// set the loaded properties for all projects
gradle.beforeProject { project ->
properties.entrySet().forEach { prop ->
@hvisser
hvisser / TestListFragment.java
Created October 30, 2012 08:23
ListFragment with custom header
package com.neenbedankt.listfragmentbug;
import android.annotation.TargetApi;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class TestListFragment extends ListFragment {
@hvisser
hvisser / TestStringArrayConverter.java
Last active February 20, 2017 00:40
Custom field converter example for Cupboard
package nl.qbusict.cupboard;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.test.AndroidTestCase;
import nl.qbusict.cupboard.convert.EntityConverter.ColumnType;
import nl.qbusict.cupboard.convert.FieldConverter;
@hvisser
hvisser / layout.xml
Created July 24, 2013 15:58
Foreground selector maybe?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:addStatesFromChildren="true" // when any child has state_pressed, this container will also have!
android:orientation="vertical" android:background="@drawable/my_selector">
<ImageView android:clickable="true" .../>
<TextView android:clickable="true" .../>
</LinearLayout>
@hvisser
hvisser / gist:4504794
Created January 10, 2013 19:01
Android style lint check
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style android:name="MyStyle" parent="android:Theme.Light">
<!-- if the minSdk level is less then 11, then this should be a lint error, since android:actionBarStyle is since API 11,
unless this is in a -v11 (or better) resource folder -->
<item name="android:actionBarStyle">...</item>
</style>
</resources>
@hvisser
hvisser / TestListFragment.java
Created October 30, 2012 08:38
Fixed TestListFragment that won't crash on hitting the back key
package com.neenbedankt.listfragmentbug;
import android.annotation.TargetApi;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class TestListFragment extends ListFragment {
@hvisser
hvisser / Example.java
Created September 14, 2014 18:17
Another example of "embedding" entities in another Cupboard entity
// TypeToken is a Gson class
Type type = new TypeToken<List<Author>>(){}.getType();
GsonFieldConverterFactory factory = new GsonFieldConverterFactory(type);
// Register the factory and set the instance as the global Cupboard instance
CupboardFactory.setCupboard(new CupboardBuilder().registerFieldConverterFactory(factory).build());