Skip to content

Instantly share code, notes, and snippets.

View wafer-li's full-sized avatar
💭
I may be slow to respond.

Wafer Li wafer-li

💭
I may be slow to respond.
View GitHub Profile
@wafer-li
wafer-li / RandomSequencer.kt
Last active December 21, 2019 02:40
A Random Sequencer generate sequence of random item within range which ensure no duplicate item in a range block
package profile.adapter
import profile.adapter.RandomSequencer.Companion.fromCharRange
import profile.adapter.RandomSequencer.Companion.fromIntRange
import profile.adapter.RandomSequencer.Companion.fromLongRange
import kotlin.random.Random
/**
* A Random Sequencer which accomplish :
* 1. Generate a sequence of random items within range.
@wafer-li
wafer-li / GridSpaceItemDecoration.kt
Last active May 12, 2020 09:01
基于公式法写的一个 GridSpaceItemDecoration, 实现 GridLayoutManager 居中元素空隙
import android.graphics.Rect
import android.view.View
import androidx.annotation.Dimension
import androidx.core.text.TextUtilsCompat
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import li.wafer.nbnhhshandroid.common.extensions.dipToPx
import java.util.*
import kotlin.math.roundToInt
@wafer-li
wafer-li / TouchDelegateComposite.java
Last active June 10, 2020 08:14
TouchDelegateComposite to handle multiple view delegate their touch event to one specific view
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.TouchDelegate;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class TouchDelegateComposite extends TouchDelegate {
@wafer-li
wafer-li / App.kt
Created July 15, 2021 11:42
CameraX Custom SurfaceCombination
@SuppressLint("RestrictedApi")
class App : Application(), CameraXConfig.Provider {
override fun getCameraXConfig(): CameraXConfig {
val defaultConfig = Camera2Config.defaultConfig()
val provider = CameraDeviceSurfaceManager.Provider { context, cameraManager, availableCameraIds ->
Camera2DeviceSurfaceManagerModified(context, cameraManager, availableCameraIds)
}
@wafer-li
wafer-li / EquivalentUntilWindowedFlow.kt
Last active August 9, 2021 12:40
Kotlin Flow emit when the upstream emit the same value [windowSize] times
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.collect
import java.util.concurrent.atomic.AtomicInteger
private val defaultKeySelector: (Any?) -> Any? = { it }
private val defaultAreEquivalent: (Any?, Any?) -> Boolean = { old, new -> old == new }
@wafer-li
wafer-li / dmr_contacts.py
Last active December 18, 2023 06:13
Get Contacts in China from RadioID.net and change to YSHON AR-55A format
import requests
import csv
def main():
response = requests.get('https://database.radioid.net/static/user.csv')
with open('user.csv', 'wb') as csv_file:
csv_file.write(response.content)
with open('user.csv', newline='') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')