diff options
author | jhonboy121 <alfredmathew05@gmail.com> | 2021-06-29 14:35:49 +0300 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2021-09-27 21:17:05 +0800 |
commit | e24b80eeebcf25ce94dffddb2e8b0ced7bb36c88 (patch) | |
tree | e0bce2e6612fdb294f896c333b9e82bd34b9ecfa | |
parent | d1bc701d4f7a72cf5b7e32d780edfa68c3655fd9 (diff) |
[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
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java | 50 |
1 files changed, 50 insertions, 0 deletions
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); @@ -263,6 +294,20 @@ public class FODCircleView extends ImageView { } @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) { canvas.drawCircle(mSize / 2, mSize / 2, mSize / 2.0f, mPaintFingerprintBackground); @@ -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); |