Skip to content

Instantly share code, notes, and snippets.

View AlShevelev's full-sized avatar

Alexander Shevelev AlShevelev

View GitHub Profile
class AudioPlayerUtil {
private var mediaPlayer: MediaPlayer? = null
/**
*
*/
fun stop() {
if (mediaPlayer != null) {
mediaPlayer!!.release()
mediaPlayer = null
abstract class VisualizerBase
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
protected var audioBytes: ByteArray? = null
private var visualizer: Visualizer? = null
class WaveVisualizer
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : VisualizerBase(context, attrs, defStyleAttr) {
private var paint: Paint
private val waveformPath: Path = Path()
@AlShevelev
AlShevelev / gist:ea43096e8f66b0ec45a0ec0dd1e8cacc
Created June 24, 2019 05:40
ViewPager2 extension for reducing drag sensitivity
/**
* Reduces drag sensitivity of [ViewPager2] widget
*/
fun ViewPager2.reduceDragSensitivity() {
val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
recyclerViewField.isAccessible = true
val recyclerView = recyclerViewField.get(this) as RecyclerView
val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
touchSlopField.isAccessible = true
class ShakeDetector : SensorEventListener {
private companion object {
const val SHAKE_THRESHOLD_GRAVITY = 2.7f // In "Gs" (one Earth gravity unit)
const val SHAKE_SLOP_TIME = 500 // In [ms]
const val SHAKE_COUNT_RESET_TIME = 3000
}
private var shakeListener: ((Int) -> Unit)? = null // argument - shakes count in a row
class FeedbackService : Service() {
companion object {
fun start(appContext: Context) {
if(isRunning) {
return
}
appContext.startService(Intent(appContext, FeedbackService::class.java))
}
class FeedbackService : Service() {
companion object {
fun start(appContext: Context) {
if(isRunning) {
return
}
appContext.startService(Intent(appContext, FeedbackService::class.java))
}
class ActivitiesMonitor(private val appContext: Context): Application.ActivityLifecycleCallbacks {
private var activeActivities = 0
init {
(appContext as Application).registerActivityLifecycleCallbacks(this)
}
override fun onActivityPaused(activity: Activity?) {
activeActivities--
class App : Application() {
private lateinit var activitiesMonitor: ActivitiesMonitor
override fun onCreate() {
super.onCreate()
activitiesMonitor = ActivitiesMonitor(this.applicationContext)
}
}
class FeedbackFormActivity : AppCompatActivity() {
companion object {
private var isRunning = false
fun start(context: Context) {
if(isRunning) {
return
}
Intent(context, FeedbackFormActivity::class.java)