/* * Copyright (c) 2020 Hemanth Savarla. * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * */ package code.name.monkey.retromusic.activities import android.app.KeyguardManager import android.content.Context import android.os.Build import android.os.Bundle import android.view.View import android.view.WindowManager import androidx.core.view.ViewCompat import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.player.lockscreen.LockScreenControlsFragment import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import com.bumptech.glide.Glide import com.r0adkll.slidr.Slidr import com.r0adkll.slidr.model.SlidrConfig import com.r0adkll.slidr.model.SlidrListener import com.r0adkll.slidr.model.SlidrPosition import kotlinx.android.synthetic.main.activity_lock_screen.* class LockScreenActivity : AbsMusicServiceActivity() { private var fragment: LockScreenControlsFragment? = null override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) lockScreenInit() setContentView(R.layout.activity_lock_screen) hideStatusBar() setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) val config = SlidrConfig.Builder().listener(object : SlidrListener { override fun onSlideStateChanged(state: Int) { } override fun onSlideChange(percent: Float) { } override fun onSlideOpened() { } override fun onSlideClosed(): Boolean { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager keyguardManager.requestDismissKeyguard(this@LockScreenActivity, null) } finish() return true } }).position(SlidrPosition.BOTTOM).build() Slidr.attach(this, config) fragment = whichFragment(R.id.playback_controls_fragment) findViewById(R.id.slide).apply { translationY = 100f alpha = 0f ViewCompat.animate(this).translationY(0f).alpha(1f).setDuration(1500).start() } } private fun lockScreenInit() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { setShowWhenLocked(true) val keyguardManager: KeyguardManager = getSystemService(KeyguardManager::class.java) keyguardManager.requestDismissKeyguard(this, null) } else { this.window.addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED ) } } override fun onPlayingMetaChanged() { super.onPlayingMetaChanged() updateSongs() } override fun onServiceConnected() { super.onServiceConnected() updateSongs() } private fun updateSongs() { val song = MusicPlayerRemote.currentSong SongGlideRequest.Builder.from(Glide.with(this), song).checkIgnoreMediaStore(this) .generatePalette(this).build().dontAnimate() .into(object : RetroMusicColoredTarget(image) { override fun onColorReady(colors: MediaNotificationProcessor) { fragment?.setColor(colors) } }) } }