Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c9fabbd authored by Orhan Uysal's avatar Orhan Uysal
Browse files

Update status bar icon colours...

depending on the wallpaper hint.

Test: Change the wallpaper and observer light/dark colours of status bar
icons
Flag: com.android.window.flags.enable_desktop_windowing_wallpaper_activity
Bug: 415332896

Change-Id: Ida39e40c3e18f81364ac69cb855221b94babc847
parent 2583ac54
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -17,12 +17,16 @@
package com.android.wm.shell.desktopmode

import android.app.TaskInfo
import android.app.WallpaperColors
import android.app.WallpaperManager
import android.content.ComponentName
import android.os.Bundle
import android.util.Log
import android.view.WindowManager
import android.window.DesktopExperienceFlags
import androidx.activity.addCallback
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.fragment.app.FragmentActivity

/**
@@ -36,6 +40,13 @@ import androidx.fragment.app.FragmentActivity
 */
class DesktopWallpaperActivity : FragmentActivity() {

    private var wallpaperManager: WallpaperManager? = null

    private val wallpaperColorsListener =
        WallpaperManager.OnColorsChangedListener { colors, which ->
            updateStatusBarIconColors(colors)
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d(TAG, "onCreate")
@@ -55,6 +66,20 @@ class DesktopWallpaperActivity : FragmentActivity() {
        ) {
            onBackPressedDispatcher.addCallback(this) { moveTaskToBack(true) }
        }

        // Handle wallpaper color changes
        wallpaperManager = getSystemService(WallpaperManager::class.java)
        wallpaperManager?.addOnColorsChangedListener(wallpaperColorsListener, mainThreadHandler)

        // Set the initial color of status bar icons on activity creation.
        updateStatusBarIconColors(
            wallpaperManager?.getWallpaperColors(WallpaperManager.FLAG_SYSTEM)
        )
    }

    override fun onDestroy() {
        super.onDestroy()
        wallpaperManager?.removeOnColorsChangedListener(wallpaperColorsListener)
    }

    override fun onTopResumedActivityChanged(isTopResumedActivity: Boolean) {
@@ -73,6 +98,19 @@ class DesktopWallpaperActivity : FragmentActivity() {
        }
    }

    /** Set the status bar icon colours depending on wallpaper hint. */
    private fun updateStatusBarIconColors(wallpaperColors: WallpaperColors?) {
        wallpaperColors?.colorHints?.let {
            getWindowInsetsController().isAppearanceLightStatusBars =
                (it and WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0
        }
    }

    private fun getWindowInsetsController(): WindowInsetsControllerCompat {
        val window = getWindow()
        return WindowCompat.getInsetsController(window, window.decorView)
    }

    companion object {
        private const val TAG = "DesktopWallpaperActivity"
        private const val SYSTEM_UI_PACKAGE_NAME = "com.android.systemui"