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

This commit is contained in:
TreeHugger Robot
2022-11-10 18:57:13 +00:00
committed by Android (Google) Code Review

View File

@@ -15,12 +15,17 @@
*/ */
package com.android.systemui.screenshot package com.android.systemui.screenshot
import android.app.Service
import android.content.Intent import android.content.Intent
import android.os.IBinder import android.os.IBinder
import android.util.Log 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.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.CentralSurfaces
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.Optional import java.util.Optional
import javax.inject.Inject import javax.inject.Inject
@@ -30,7 +35,8 @@ import javax.inject.Inject
internal class ScreenshotProxyService @Inject constructor( internal class ScreenshotProxyService @Inject constructor(
private val mExpansionMgr: ShadeExpansionStateManager, private val mExpansionMgr: ShadeExpansionStateManager,
private val mCentralSurfacesOptional: Optional<CentralSurfaces>, private val mCentralSurfacesOptional: Optional<CentralSurfaces>,
) : Service() { @Main private val mMainDispatcher: CoroutineDispatcher,
) : LifecycleService() {
private val mBinder: IBinder = object : IScreenshotProxy.Stub() { private val mBinder: IBinder = object : IScreenshotProxy.Stub() {
/** /**
@@ -43,18 +49,26 @@ internal class ScreenshotProxyService @Inject constructor(
} }
override fun dismissKeyguard(callback: IOnDoneCallback) { override fun dismissKeyguard(callback: IOnDoneCallback) {
if (mCentralSurfacesOptional.isPresent) { lifecycleScope.launch {
mCentralSurfacesOptional.get().executeRunnableDismissingKeyguard( executeAfterDismissing(callback)
}
}
}
private suspend fun executeAfterDismissing(callback: IOnDoneCallback) =
withContext(mMainDispatcher) {
mCentralSurfacesOptional.ifPresentOrElse(
{
it.executeRunnableDismissingKeyguard(
Runnable { Runnable {
callback.onDone(true) callback.onDone(true)
}, null, }, null,
true /* dismissShade */, true /* afterKeyguardGone */, true /* dismissShade */, true /* afterKeyguardGone */,
true /* deferred */ true /* deferred */
) )
} else { },
callback.onDone(false) { callback.onDone(false) }
} )
}
} }
override fun onBind(intent: Intent): IBinder? { override fun onBind(intent: Intent): IBinder? {