Skip to content

Instantly share code, notes, and snippets.

View adavis's full-sized avatar

Annyce Davis adavis

View GitHub Profile
@adavis
adavis / PizzaDsl.kt
Last active October 15, 2024 16:03
Sample Kotlin DSL for making a pizza
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
@DslMarker
annotation class PizzaMarker
class Pizza(
val name: String,
@adavis
adavis / system_context.puml
Created November 27, 2022 20:07
A sample PlantUML file using the C4 model
@startuml Member+ Subscription
!include <C4/C4_Container>
Person(member, "Member")
System_Boundary(c1, "Member+ System") {
Container(api, "API", "Java 17, GraphQL", "Allows members to create and manage their subscriptions")
}
ContainerDb(db, "Database", "MySQL", "Holds plan, order and member information")
Rel(member, api, "Uses", "HTTPS")
@adavis
adavis / NonOrganizerTest.kt
Last active September 17, 2021 09:32
Instrumentation tests for Jetpack Compose screen using Intents for navigation
@ExperimentalAnimationApi
@RunWith(AndroidJUnit4::class)
class NonOrganizerTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
@Before
fun goToNonOrganizerFragment() {
composeTestRule.activityRule.scenario.onActivity {
@adavis
adavis / product_item.xml
Created March 13, 2021 17:39
Sample Android XML layout file for a RecyclerView item
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<ImageView
@adavis
adavis / ChipsView.kt
Last active March 26, 2024 02:00
A function to programmatically add views to ConstraintLayout with Flow
class ChipsView<T : Parcelable>(ctx: Context, attr: AttributeSet) : ConstraintLayout(ctx, attr) {
...
private fun addSubviews() {
val flow = Flow(context).apply {
id = generateViewId()
setWrapMode(Flow.WRAP_CHAIN)
setHorizontalStyle(Flow.CHAIN_PACKED)
setHorizontalAlign(Flow.HORIZONTAL_ALIGN_START)
setHorizontalBias(0f)
@adavis
adavis / commit_message_clean_up.kts
Created March 11, 2020 20:13
Removes the commit messages that reference merging pull requests from logs
import java.io.File
// Get the passed in file, i.e. "-f some/path" or use the default file name
val file = if (args.contains("-f")) args[1 + args.indexOf("-f")]
else "commit_messages.log"
File("${file}_clean").printWriter().use { out ->
File(file).forEachLine { msg ->
if (msg.startsWith("Merge pull request").not()) {
out.println(msg)
@adavis
adavis / ConfettiJobCreator.kt
Last active June 21, 2019 20:47
Snippets from Dagger and Dynamic Feature Module Support Article
class ConfettiJobCreator @Inject constructor(
private val jobs: @JvmSuppressWildcards Map<String, Provider<Job>>
) : JobCreator {
override fun create(tag: String): Job? = jobs[tag]?.get()
}
@adavis
adavis / unique_id_widget.dart
Last active April 25, 2019 08:24
Displays a pin number pad with 6 fields
import 'dart:math' show min;
import 'package:flutter/material.dart';
class UniqueId extends StatefulWidget {
const UniqueId({Key key, this.onSubmit}) : super(key: key);
final ValueChanged<String> onSubmit;
@adavis
adavis / tests_with_coverage.sh
Last active January 2, 2024 22:55
Script for running all Flutter unit and widget tests with code coverage and then displaying the HTML report.
#!/usr/bin/env bash
red=$(tput setaf 1)
none=$(tput sgr0)
show_help() {
printf "usage: $0 [--help] [--report] [--test] [<path to package>]
Script for running all unit and widget tests with code coverage.
(run from root of repo)
@adavis
adavis / PULL_REQUEST_TEMPLATE.md
Last active July 28, 2024 15:12
Sample Pull Request template for use on GitHub

Description

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.

Fixed #issue

Type of Change

Please delete options that are not relevant.