Skip to content

Instantly share code, notes, and snippets.

@ademirqueiroga
ademirqueiroga / comparison.md
Last active April 18, 2025 14:32
MD Comparison table
Project LOC Modules Lint On Lint Off Saved Reduction %
fenix 487398 5 220s 166s 54s 25
nowinandroid 90939 30 256s 189s 67s 27
tivi 180888 66 344s 293s 51s 15
white-label 216956 2 91s 55s 36s 40
@ademirqueiroga
ademirqueiroga / comparison.csv
Created April 18, 2025 01:59
Build Time Comparison
Project LOC (Java,Kt,XML) Modules Build Time (With Lint) Lint Time %
mozilla/fenix 487398 3 268s 47s 17
android/nowinandroid 90939 31 135s 35s 25
chrisbanes/tivi 180888 11 202s 8s 4
private/white-label 216956 2 158s 58s 36
@ademirqueiroga
ademirqueiroga / build.gradle.kts
Last active April 7, 2025 00:08
Conditionally Disabling AGP Lint
lint {
if (project.hasProperty("disableReleaseLint")) {
checkReleaseBuilds = false
}
}
@ademirqueiroga
ademirqueiroga / build.gradle.kts
Created April 6, 2025 23:58
Disable AGP Release Lint
android {
lint {
checkReleaseBuilds = false
}
}
@ademirqueiroga
ademirqueiroga / SimplePlaybackTransportControlGlue.kt
Created March 15, 2023 00:32
SimplePlaybackTransportControlGlue player listeners
class SimplePlaybackTransportControlGlue(...) {
...
override fun onPlayCompleted() {
super.onPlayCompleted()
playbackState = PlaybackStateCompat.STATE_NONE
}
fun onStartBuffering() {
playbackState = PlaybackStateCompat.STATE_BUFFERING
}
@ademirqueiroga
ademirqueiroga / SimplePlaybackTransportControlGlue.kt
Created March 14, 2023 17:32
SimplePlaybackTransportControlGlue invalidatePlaybackState
private fun invalidatePlaybackState() {
val playbackStateBuilder = PlaybackStateCompat.Builder()
.setState(playbackState, currentPosition, 1.0F)
.setActions(mediaSessionSupportedActions())
.setBufferedPosition(bufferedPosition)
mediaSession.setPlaybackState(playbackStateBuilder.build())
}
@ademirqueiroga
ademirqueiroga / SimplePlaybackTransportControlGlue.kt
Last active March 15, 2023 00:43
MediaSession playback state
private var playbackState: Int = -1
set(value) {
if (field != value) {
field = value
invalidatePlaybackState() // We'll cover this function later on.
}
}
@ademirqueiroga
ademirqueiroga / SimplePlaybackTransportControlGlue.kt
Created March 14, 2023 17:17
MediaSession supported actions
fun mediaSessionSupportedActions(): Long {
return PlaybackStateCompat.ACTION_PAUSE xor
PlaybackStateCompat.ACTION_PLAY xor
PlaybackStateCompat.ACTION_PLAY_PAUSE xor
PlaybackStateCompat.ACTION_REWIND xor
PlaybackStateCompat.ACTION_FAST_FORWARD xor
PlaybackStateCompat.ACTION_SKIP_TO_NEXT xor
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
}
@ademirqueiroga
ademirqueiroga / PlaybackStateCompat.java
Created March 14, 2023 16:59
MediaSession Playback states
public final static int STATE_NONE = 0;
public final static int STATE_STOPPED = 1;
public final static int STATE_PAUSED = 2;
public final static int STATE_PLAYING = 3;
public final static int STATE_FAST_FORWARDING = 4;
public final static int STATE_REWINDING = 5;
public final static int STATE_BUFFERING = 6;
public final static int STATE_ERROR = 7;
public final static int STATE_CONNECTING = 8;
public final static int STATE_SKIPPING_TO_PREVIOUS = 9;
@ademirqueiroga
ademirqueiroga / SimplePlaybackTransportControlGlue.kt
Last active March 15, 2023 00:26
SimpleMediaSessionCallback inside SimplePlaybackTransportControlGlue
private inner class SimpleMediaSessionCallback : MediaSessionCompat.Callback() {
override fun onPlay() = this@SimplePlaybackTransportControlGlue.play()
override fun onPause() = this@SimplePlaybackTransportControlGlue.pause()
override fun onSkipToNext() = this@SimplePlaybackTransportControlGlue.next()
override fun onSkipToPrevious() = this@SimplePlaybackTransportControlGlue.previous()
override fun onRewind() = this@SimplePlaybackTransportControlGlue.rewind()
override fun onFastForward() = this@SimplePlaybackTransportControlGlue.fastForward()
override fun onSeekTo(pos: Long) = this@SimplePlaybackTransportControlGlue.seekTo(pos)
}