Advertisement
Martinocom

Brightness regulation - Android Kotlin

Feb 5th, 2020
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.74 KB | None | 0 0
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // In the Activity I have a companion
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. companion object {
  5.     private const val WRITE_SETTINGS_PERMISSION = 100
  6.     private const val MAX_BRIGHTNESS = 255
  7.     private const val MIN_BRIGHTNESS = 20
  8. }
  9.  
  10. ///////////////////////////////////////////////////////////////////////////////////////////////////
  11. // In the onCreate method I have a button that activate permission for brightness
  12. ///////////////////////////////////////////////////////////////////////////////////////////////////
  13.  
  14. // Listener on the onCreate method for a button to grant WRITE_SETTINGS permission
  15. btn_settings_grant_write_permission.setOnClickListener {
  16.     val hasPermissions = hasPermissionsToWriteSettings(this)
  17.     setBrightnessRegulation(hasPermissions)
  18.     if (!hasPermissions) askForPermissionsToWriteSettings(this)
  19. }
  20.  
  21. // Settings progress bar to change brightness
  22.     skb_settings_brightness.max = MAX_BRIGHTNESS
  23.     skb_settings_brightness.progress = AppPreferences.getInstance(this).brightnessKey
  24.     skb_settings_brightness.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
  25.         var brightnessProgress = 0
  26.  
  27.         override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
  28.             brightnessProgress = map(progress, 0, MAX_BRIGHTNESS, MIN_BRIGHTNESS, MAX_BRIGHTNESS)
  29.             if (hasPermissionsToWriteSettings(this@SettingsActivity)) {
  30.                 Settings.System.putInt(this@SettingsActivity.contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightnessProgress)
  31.                 // Do not write this in one-line, won't work
  32.                 val lp = this@SettingsActivity.window.attributes
  33.                 lp.screenBrightness = brightnessProgress.toFloat() / 255
  34.                 this@SettingsActivity.window.attributes = lp
  35.             }
  36.         }
  37.  
  38.         override fun onStartTrackingTouch(seekBar: SeekBar?) {}
  39.  
  40.         override fun onStopTrackingTouch(seekBar: SeekBar?) {
  41.             AppPreferences.getInstance(this@SettingsActivity).brightnessKey = brightnessProgress
  42.         }
  43.     })
  44.  
  45. ///////////////////////////////////////////////////////////////////////////////////////////////////
  46. // Helper methods + onRequestPermissionResult
  47. ///////////////////////////////////////////////////////////////////////////////////////////////////
  48.  
  49. // Fun 1, outside (MAYBE HERE YOU CAN FIND THE MISSING LINE)
  50. private fun setBrightnessRegulation(isEnabled: Boolean) {
  51.     if (isEnabled) {
  52.         btn_settings_grant_write_permission.visibility = View.GONE
  53.         skb_settings_brightness.visibility = View.VISIBLE
  54.         Settings.System.putInt(this@SettingsActivity.contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
  55.     } else {
  56.         btn_settings_grant_write_permission.visibility = View.VISIBLE
  57.         skb_settings_brightness.visibility = View.GONE
  58.     }
  59. }
  60.  
  61. // Fun 2, outside
  62. private fun hasPermissionsToWriteSettings(context: Activity): Boolean {
  63.     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  64.         Settings.System.canWrite(context)
  65.     } else {
  66.         ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED
  67.     }
  68. }
  69.  
  70. // Fun 3, outside
  71. private fun askForPermissionsToWriteSettings(context: Activity) {
  72.     if (!hasPermissionsToWriteSettings(context)) {
  73.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  74.             val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
  75.             intent.data = Uri.parse("package:" + context.packageName)
  76.             startActivityForResult(intent, WRITE_SETTINGS_PERMISSION)
  77.         } else {
  78.             ActivityCompat.requestPermissions(context, arrayOf(Manifest.permission.WRITE_SETTINGS), WRITE_SETTINGS_PERMISSION)
  79.         }
  80.     }
  81. }
  82.  
  83. override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
  84.     when (requestCode) {
  85.         WRITE_SETTINGS_PERMISSION -> {
  86.             if (grantResults.isEmpty() || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
  87.                 Toast.makeText(this, R.string.write_settings_permission_denied, Toast.LENGTH_LONG).show()
  88.             } else {
  89.                 btn_settings_grant_write_permission.visibility = View.GONE
  90.                 skb_settings_brightness.visibility = View.VISIBLE
  91.             }
  92.         }
  93.     }
  94. }
  95.  
  96. // Map fun
  97. private fun map(currentValue: Int, inputMin: Int, inputMax: Int, outputMin: Int, outputMax: Int): Int {
  98.         return (currentValue - inputMin) * (outputMax - outputMin) / (inputMax - inputMin) + outputMin
  99.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement