Skip to content

Instantly share code, notes, and snippets.

@eygraber
eygraber / GatherDependenciesTask.kt
Last active August 25, 2021 17:28
Initial exploration of a configuration cache compatible way of collecting dependencies in Gradle (Heavily borrowed from https://github.com/google/play-services-plugins/blob/master/oss-licenses-plugin/src/main/groovy/com/google/android/gms/oss/licenses/plugin/LicensesTask.groovy)
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ExternalModuleDependency
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.gradle.api.artifacts.result.UnresolvedArtifactResult
@eygraber
eygraber / text_editing_shortcuts.kt
Last active April 20, 2021 23:42
An initial attempt at providing some basic text editing shortcuts for Compose
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.KeysSet
import androidx.compose.ui.input.key.ShortcutsBuilderScope
import androidx.compose.ui.input.key.plus
import androidx.compose.ui.text.TextRange
import java.awt.Toolkit
import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.StringSelection
import java.awt.event.KeyEvent
import java.util.Stack
@eygraber
eygraber / FlipOnAccess.kt
Created August 9, 2017 09:07
Delegate for flipping a boolean on access
class FlipOnAccess(
private val initialValue: Boolean = false,
private val onlyFirstAccess: Boolean = false
) : ReadOnlyProperty<Any?, Boolean> {
private val flipper = AtomicInteger(1)
private val Int.isEven get() = and(1) == 0
override fun getValue(thisRef: Any?, property: KProperty<*>) =
with(flipper.getAndIncrement()) {
@eygraber
eygraber / OkHttpDataSource.java
Last active September 20, 2016 10:19
Copied from DefaultHttpDataSource, but uses OkHttpClient instead of URLConnection
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import com.google.android.exoplayer.C;
import com.google.android.exoplayer.upstream.DataSpec;
import com.google.android.exoplayer.upstream.HttpDataSource;
import com.google.android.exoplayer.upstream.TransferListener;
import com.google.android.exoplayer.util.Assertions;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
@eygraber
eygraber / Asset.java
Created September 21, 2015 12:19
Wear Assets
PutDataMapRequest putDataMapReq = PutDataMapRequest.create(PATH);
DataMap dataMap = putDataMapReq.getDataMap();
// I checked and the Asset gets created correctly
Asset asset = Asset.createFromUri(Uri.parse(uri));
dataMap.putAsset(<some_key>, asset);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
Wearable.DataApi.putDataItem(apiClient, putDataReq).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(DataApi.DataItemResult dataItemResult) {
Status status = dataItemResult.getStatus();
@eygraber
eygraber / gist:5b150d549196168fa2e8
Created December 1, 2014 07:00
Response DataCallback Never Called #287 - Example
package com.pacakge;
import android.net.Uri;
import com.koushikdutta.async.DataEmitter;
import com.koushikdutta.async.DataSink;
import com.koushikdutta.async.Util;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.http.AsyncHttpClient;
import com.koushikdutta.async.http.AsyncHttpRequest;
import com.koushikdutta.async.http.AsyncHttpResponse;