This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env kotlin | |
// Before running this script, install Kotlin with `brew install kotlin` | |
// Then run this with `kotlin shark-custom-script.main.kts` | |
// Edit this script in the latest Android Studio or IntelliJ IDEA releases to get dependency import and auto completion. | |
@file:Repository("https://repo.maven.apache.org/maven2/") | |
@file:DependsOn("com.squareup.leakcanary:shark-android:2.13") | |
import java.io.File |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class CoffeeLogger { | |
fun log(msg: String) { | |
println(msg) | |
} | |
} | |
interface Heater { | |
fun on() | |
fun off() | |
val isHot: Boolean |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env kotlin | |
@file:Repository("https://repo.maven.apache.org/maven2/") | |
@file:DependsOn("com.datumbox:datumbox-framework-lib:0.8.2") | |
@file:DependsOn("com.squareup.okio:okio:3.3.0") | |
@file:DependsOn("com.squareup.moshi:moshi:1.13.0") | |
@file:DependsOn("com.squareup.moshi:moshi-adapters:1.13.0") | |
@file:DependsOn("com.squareup.moshi:moshi-kotlin:1.13.0") | |
import com.squareup.moshi.Moshi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.os.Debug; | |
import android.os.Handler; | |
import android.os.Looper; | |
import android.util.Log; | |
import android.widget.Toast; | |
import com.squareup.haha.perflib.ClassObj; | |
import com.squareup.haha.perflib.HprofParser; | |
import com.squareup.haha.perflib.Snapshot; | |
import com.squareup.haha.perflib.io.HprofBuffer; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Here's an example based on a test that was meant to reproduce a race condition, | |
// where we were launching several coroutines in a specific order without realizing | |
// that a different order would introduce race conditions. The test code here was used to | |
// reproduce the exact bad order. | |
// Note: there are probably better approaches to doing this. | |
val dispatcher = QueueDelegatingTestDispatcher() | |
// ... TODO pass in the dispatcher to the tested code launching coroutines |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.os.Build.VERSION.SDK_INT | |
import android.os.Bundle | |
import android.os.Parcel | |
import android.util.Base64 | |
/** | |
* This class implements a fix for https://issuetracker.google.com/issues/147246567 | |
* Investigation: https://twitter.com/Piwai/status/1374129312153038849 | |
* | |
* Usage: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.annotation.TargetApi | |
import android.os.Build.VERSION_CODES | |
import android.view.View | |
import android.view.Window | |
object WindowSpy { | |
/** | |
* Installs a listener for new [Window] instances. This should only be called once, any new call | |
* will uninstall the previous listener. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Every editable TextView has an Editor instance which has a SpellChecker instance. SpellChecker | |
* is in charge of displaying the little squiggle spans that show typos. SpellChecker starts a | |
* SpellCheckerSession as needed and then closes it when the TextView is detached from the window. | |
* A SpellCheckerSession is in charge of communicating with the spell checker service (which lives | |
* in another process) through TextServicesManager. | |
* | |
* The SpellChecker sends the TextView content to the spell checker service every 400ms, ie every | |
* time the service calls back with a result the SpellChecker schedules another check for 400ms | |
* later. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example | |
import kotlin.annotation.AnnotationRetention.RUNTIME | |
import kotlin.annotation.AnnotationTarget.FUNCTION | |
/** | |
* @see TracingRunListener | |
*/ | |
@Retention(RUNTIME) | |
@Target(FUNCTION) |
NewerOlder