From e24b80eeebcf25ce94dffddb2e8b0ced7bb36c88 Mon Sep 17 00:00:00 2001 From: jhonboy121 Date: Tue, 29 Jun 2021 14:35:49 +0300 Subject: [YAAP][eleven] FODCircleView: Don't show on top of assistant UI * register a task stack change listener to hide fod when assistant is visibile in lockscreen * aosp implementation does not take fod into account so we have to register our own listeners idoybh: taken from AOSP-Krypton/frameworks_base@b9c454a and stripped down what we need. Ignore assistant UI when showing bouncer & Fix NPE Change-Id: I4b4927704fcb179826d914e529f9c43748464d9f --- .../android/systemui/biometrics/FODCircleView.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java b/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java index 10b304bb8434..e041fcac5f6b 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java @@ -16,6 +16,11 @@ package com.android.systemui.biometrics; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; + +import android.app.ActivityManager.StackInfo; +import android.app.ActivityTaskManager; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.Configuration; @@ -45,6 +50,8 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import vendor.lineage.biometrics.fingerprint.inscreen.V1_0.IFingerprintInscreen; import vendor.lineage.biometrics.fingerprint.inscreen.V1_0.IFingerprintInscreenCallback; @@ -74,6 +81,7 @@ public class FODCircleView extends ImageView { private int mDreamingOffsetY; private boolean mFading; + private boolean mIsAssistantVisible = false; private boolean mIsBouncer; private boolean mIsBiometricRunning; private boolean mIsCircleShowing; @@ -158,6 +166,7 @@ public class FODCircleView extends ImageView { mIsBouncer = isBouncer; if (mUpdateMonitor.isFingerprintDetectionRunning()) { if (isPinOrPattern(mUpdateMonitor.getCurrentUser()) || !isBouncer) { + mIsAssistantVisible = false; show(); } else { hide(); @@ -187,6 +196,28 @@ public class FODCircleView extends ImageView { } }; + private final TaskStackChangeListener + mTaskStackChangeListener = new TaskStackChangeListener() { + @Override + public void onTaskStackChangedBackground() { + try { + StackInfo stackInfo = ActivityTaskManager.getService().getStackInfo( + WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_ASSISTANT); + if (stackInfo == null && mIsAssistantVisible) { + mIsAssistantVisible = false; + if (mUpdateMonitor.isFingerprintDetectionRunning()) { + mHandler.post(() -> show()); + } + return; + } + if (stackInfo != null) mIsAssistantVisible = stackInfo.visible; + if (mIsAssistantVisible) { + mHandler.post(() -> hide()); + } + } catch (RemoteException ignored) { } + } + }; + public FODCircleView(Context context) { super(context); @@ -262,6 +293,20 @@ public class FODCircleView extends ImageView { mUpdateMonitor.registerCallback(mMonitorCallback); } + @Override + protected void onAttachedToWindow() { + ActivityManagerWrapper.getInstance().registerTaskStackListener( + mTaskStackChangeListener); + super.onAttachedToWindow(); + } + + @Override + protected void onDetachedFromWindow() { + ActivityManagerWrapper.getInstance().unregisterTaskStackListener( + mTaskStackChangeListener); + super.onDetachedFromWindow(); + } + @Override protected void onDraw(Canvas canvas) { if (!mIsCircleShowing) { @@ -400,6 +445,11 @@ public class FODCircleView extends ImageView { return; } + if (mIsAssistantVisible) { + // Don't show when assistant UI is visible + return; + } + updatePosition(); setVisibility(View.VISIBLE); -- cgit v1.2.3