OffActivity.kt raw

   1  package io.github.domi04151309.alwayson.actions
   2  
   3  import android.annotation.SuppressLint
   4  import android.app.Activity
   5  import android.app.ActivityManager
   6  import android.app.admin.DevicePolicyManager
   7  import android.content.ComponentName
   8  import android.content.pm.ActivityInfo
   9  import android.media.AudioManager
  10  import android.os.Build
  11  import android.os.Bundle
  12  import android.view.KeyEvent
  13  import android.view.View
  14  import android.view.WindowManager
  15  import android.widget.Toast
  16  import androidx.preference.PreferenceManager
  17  import io.github.domi04151309.alwayson.R
  18  import io.github.domi04151309.alwayson.helpers.Root
  19  import io.github.domi04151309.alwayson.receivers.AdminReceiver
  20  
  21  @SuppressLint("Registered")
  22  open class OffActivity : Activity() {
  23      @SuppressLint("SourceLockedOrientationActivity")
  24      override fun onCreate(savedInstanceState: Bundle?) {
  25          requestedOrientation =
  26              when (
  27                  PreferenceManager.getDefaultSharedPreferences(this)
  28                      .getString("orientation", "locked")
  29              ) {
  30                  "portrait" -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
  31                  "landscape" -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  32                  else -> ActivityInfo.SCREEN_ORIENTATION_LOCKED
  33              }
  34          super.onCreate(savedInstanceState)
  35      }
  36  
  37      override fun onKeyDown(
  38          keyCode: Int,
  39          event: KeyEvent,
  40      ): Boolean {
  41          when (keyCode) {
  42              KeyEvent.KEYCODE_VOLUME_UP -> {
  43                  (getSystemService(AUDIO_SERVICE) as AudioManager)
  44                      .adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0)
  45              }
  46  
  47              KeyEvent.KEYCODE_VOLUME_DOWN -> {
  48                  (getSystemService(AUDIO_SERVICE) as AudioManager)
  49                      .adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0)
  50              }
  51          }
  52          return true
  53      }
  54  
  55      override fun onPause() {
  56          super.onPause()
  57          (getSystemService(ACTIVITY_SERVICE) as ActivityManager)
  58              .moveTaskToFront(taskId, 0)
  59      }
  60  
  61      protected fun turnOnScreen() {
  62          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
  63              setShowWhenLocked(true)
  64              setTurnScreenOn(true)
  65          } else {
  66              @Suppress("DEPRECATION")
  67              window.addFlags(
  68                  WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
  69                      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
  70              )
  71          }
  72      }
  73  
  74      protected fun fullscreen(view: View) {
  75          view.systemUiVisibility = (
  76              View.SYSTEM_UI_FLAG_LOW_PROFILE
  77                  or View.SYSTEM_UI_FLAG_FULLSCREEN
  78                  or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  79                  or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
  80                  or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  81                  or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  82          )
  83          /*WindowInsetsControllerCompat(window, view).let { controller ->
  84              controller.hide(WindowInsetsCompat.Type.systemBars())
  85              controller.systemBarsBehavior =
  86                  WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
  87          }*/
  88      }
  89  
  90      protected open fun finishAndOff() {
  91          if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("root_mode", false)) {
  92              Root.shell("input keyevent KEYCODE_POWER")
  93          } else {
  94              val policyManager =
  95                  getSystemService(DEVICE_POLICY_SERVICE)
  96                      as DevicePolicyManager
  97              if (policyManager.isAdminActive(ComponentName(this, AdminReceiver::class.java))) {
  98                  policyManager.lockNow()
  99              } else {
 100                  Toast.makeText(this, R.string.pref_admin_summary, Toast.LENGTH_SHORT).show()
 101              }
 102          }
 103          finish()
 104      }
 105  }
 106