Skip to content

Instantly share code, notes, and snippets.

View justasm's full-sized avatar

Justas Medeišis justasm

View GitHub Profile
@justasm
justasm / LegacyLineBreak.kt
Created August 14, 2018 13:42
Soft-hyphen (U+00AD) support for API <21
/*
* Copyright (C) 2006 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
@justasm
justasm / MobileDataOnlyInterceptor.kt
Created March 20, 2020 12:47
OkHttp Interceptor that ensures requests happen on mobile data even if WiFi is on
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Build
import android.support.annotation.RequiresApi
import android.support.v4.content.ContextCompat
@justasm
justasm / VideoPlaybackActivity2.java
Last active September 26, 2023 09:14
Android video playback - using MediaPlayer and SurfaceView to play file from res/raw/.
package com.example.videotest;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class VideoPlaybackActivity2 extends Activity {
@justasm
justasm / AuthorizationInterceptor.kt
Created February 12, 2021 12:57
OkHttp Interceptor to retry 401 requests after a token refresh
import java.io.IOException
import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
class AuthorizationInterceptor(private val delegate: TokenDelegate) : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
@justasm
justasm / HorSwipeAwareRelativeLayout.java
Last active May 18, 2020 06:40
Android detecting horizontal swipe gestures. Designed for use in layout parent for top-level back navigation, but easily made more flexible.
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.ViewConfiguration;
import android.widget.RelativeLayout;
@justasm
justasm / app_build.gradle
Last active May 15, 2020 17:55
Kotlin Android Extensions with Android library module https://youtrack.jetbrains.com/issue/KT-16934
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.kxt"
minSdkVersion 15
@justasm
justasm / NonPersistentCookieJar.java
Last active April 21, 2019 10:03
OkHttp 3 non-persistent CookieJar with an ACCEPT_ALL policy
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
@justasm
justasm / MaskImageView.java
Created September 1, 2014 17:14
Android image compositing - masking Bitmap with another Bitmap.
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
@justasm
justasm / MultiTouchView.java
Last active October 17, 2018 12:41
Android multitouch - tracking individual pointers (fingers) across space and time.
package com.example.multitouch;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
@justasm
justasm / AndroidDebounced.kt
Last active August 22, 2018 12:23
Debounced property delegate Android implementation
import android.os.Handler
fun <T> debounced(initialValue: T, debounceMs: Long = 500L): Debounced<T> {
return AndroidDebounced(initialValue, debounceMs)
}
private class AndroidDebounced<T>(initialValue: T, private val debounceMs: Long) : Debounced<T> {
private val handler = Handler()
private var _value: T = initialValue