Заблокировать дисплей покупателя

Чтобы предотвратить нежелательные действия на дисплее покупателя, вы можете скрыть с него элементы управления и навигации. Тогда клиенты не смогут, например, закрыть приложение отображаемое на дисплее покупателя.

В дополнение к встроенным возможностям Android, мы создали несколько собственых флагов.

Список обязательных констант

В функции для блокирования экрана объявите следующие константы:

Пример реализации блокировки экрана

Функция блокирования экрана

private fun enableLock() {
  activity?.window?.decorView?.systemUiVisibility = (
    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
      or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
      or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
      or View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
      or View.SYSTEM_UI_FLAG_IMMERSIVE
      or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
      or SYSTEM_UI_FLAG_IMMERSIVE_HIDDEN
      or STATUS_BAR_DISABLE_HOME
      or STATUS_BAR_DISABLE_RECENT
      or STATUS_BAR_DISABLE_NOTIFICATION_ALERTS
      or STATUS_BAR_DISABLE_CLOCK
    )
  activity?.startLockTask()
}

Функция разблокирования экрана

private fun disableLock() {
  activity?.window?.decorView?.systemUiVisibility = 0
  activity?.stopLockTask()
}

Реализация механизма разблокирования в приложении

  1. Добавьте на экран невидимую кнопку размером 100x150 пикселей:
    <?xml version="1.0" encoding="utf-8"?>
      <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background">
        <View
          android:id="@+id/invisible_button"
          android:layout_width="100dp"
          android:layout_height="150dp"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintTop_toTopOf="parent" />
        // код экрана
      </androidx.constraintlayout.widget.ConstraintLayout>
    
  2. Добавьте класс-обработчик нажатий на кнопку:
    abstract class MultipleOnClickListener(private val clickTimes: Int) : View.OnClickListener {
      private var lastTimeClicked: Long = 0
      private var clickCount = 0
      override fun onClick(v: View?) {
        onSingleClick()
        if (System.currentTimeMillis() > lastTimeClicked + CLICK_DELAY) {
          clickCount = 0
        }
        lastTimeClicked = System.currentTimeMillis()
        clickCount++
        if (clickCount == clickTimes) {
          onMultipleClick()
          clickCount = 0
        }
      }
      open fun onSingleClick() {}
      abstract fun onMultipleClick()
      companion object {
        private const val CLICK_DELAY = 500L
      }
    }
    
  3. Зарегистрируйте его на обработку нажатий по кнопке:
    view.findViewById<View>(R.id.invisible_button)
      .setOnClickListener(object : MultipleOnClickListener(clickTimes = 7) {
        override fun onMultipleClick() {
          disableLock()
          onBackPressed()
        }
      })
    

    В параметре clickTimes укажите сколько нажатий нужно для активации обработчика. Тут действует строгое правило для всех приложений: для снятия блокировки экрана нужно сделать 7 нажатий в правом верхнем углу экрана.