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

Commit 2aea66b3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don't dismiss the keyguard from the binder thread" into tm-qpr-dev

parents 0f8d00ae 233b5d21
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -15,12 +15,17 @@
 */
package com.android.systemui.screenshot

import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.util.Log
import androidx.lifecycle.LifecycleService
import androidx.lifecycle.lifecycleScope
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.phone.CentralSurfaces
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.Optional
import javax.inject.Inject

@@ -30,7 +35,8 @@ import javax.inject.Inject
internal class ScreenshotProxyService @Inject constructor(
    private val mExpansionMgr: ShadeExpansionStateManager,
    private val mCentralSurfacesOptional: Optional<CentralSurfaces>,
) : Service() {
    @Main private val mMainDispatcher: CoroutineDispatcher,
) : LifecycleService() {

    private val mBinder: IBinder = object : IScreenshotProxy.Stub() {
        /**
@@ -43,18 +49,26 @@ internal class ScreenshotProxyService @Inject constructor(
        }

        override fun dismissKeyguard(callback: IOnDoneCallback) {
            if (mCentralSurfacesOptional.isPresent) {
                mCentralSurfacesOptional.get().executeRunnableDismissingKeyguard(
            lifecycleScope.launch {
                executeAfterDismissing(callback)
            }
        }
    }

    private suspend fun executeAfterDismissing(callback: IOnDoneCallback) =
        withContext(mMainDispatcher) {
            mCentralSurfacesOptional.ifPresentOrElse(
                    {
                        it.executeRunnableDismissingKeyguard(
                                Runnable {
                                    callback.onDone(true)
                                }, null,
                                true /* dismissShade */, true /* afterKeyguardGone */,
                                true /* deferred */
                        )
            } else {
                callback.onDone(false)
            }
        }
                    },
                    { callback.onDone(false) }
            )
        }

    override fun onBind(intent: Intent): IBinder? {