1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.classifier; 18 19 import static com.google.common.truth.Truth.assertWithMessage; 20 21 import android.net.Uri; 22 23 import com.android.internal.annotations.VisibleForTesting; 24 import com.android.systemui.dagger.SysUISingleton; 25 import com.android.systemui.plugins.FalsingManager; 26 27 import java.io.PrintWriter; 28 import java.util.ArrayList; 29 import java.util.List; 30 31 import javax.inject.Inject; 32 33 /** 34 * Simple Fake for testing where {@link FalsingManager} is required. 35 */ 36 @SysUISingleton 37 public class FalsingManagerFake implements FalsingManager { 38 private boolean mIsFalseTouch; 39 private boolean mIsSimpleTap; 40 private boolean mIsFalseDoubleTap; 41 private boolean mIsUnlockingDisabled; 42 private boolean mIsClassifierEnabled; 43 private boolean mShouldEnforceBouncer; 44 private boolean mIsReportingEnabled; 45 private boolean mIsFalseRobustTap; 46 private boolean mIsFalseLongTap; 47 private boolean mDestroyed; 48 private boolean mIsProximityNear; 49 50 private final List<FalsingBeliefListener> mFalsingBeliefListeners = new ArrayList<>(); 51 private final List<FalsingTapListener> mTapListeners = new ArrayList<>(); 52 53 @Inject FalsingManagerFake()54 public FalsingManagerFake() { 55 } 56 57 @Override onSuccessfulUnlock()58 public void onSuccessfulUnlock() { 59 60 } 61 62 @VisibleForTesting setIsUnlockingDisabled(boolean isUnlockingDisabled)63 public void setIsUnlockingDisabled(boolean isUnlockingDisabled) { 64 mIsUnlockingDisabled = isUnlockingDisabled; 65 } 66 67 @Override isUnlockingDisabled()68 public boolean isUnlockingDisabled() { 69 return mIsUnlockingDisabled; 70 } 71 72 @VisibleForTesting setIsFalseTouch(boolean isFalseTouch)73 public void setIsFalseTouch(boolean isFalseTouch) { 74 mIsFalseTouch = isFalseTouch; 75 } 76 77 @Override isFalseTouch(@lassifier.InteractionType int interactionType)78 public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { 79 checkDestroyed(); 80 return mIsFalseTouch; 81 } 82 setFalseTap(boolean falseRobustTap)83 public void setFalseTap(boolean falseRobustTap) { 84 mIsFalseRobustTap = falseRobustTap; 85 } 86 setSimpleTap(boolean isSimpleTape)87 public void setSimpleTap(boolean isSimpleTape) { 88 mIsSimpleTap = isSimpleTape; 89 } 90 setFalseDoubleTap(boolean falseDoubleTap)91 public void setFalseDoubleTap(boolean falseDoubleTap) { 92 mIsFalseDoubleTap = falseDoubleTap; 93 } 94 setIsProximityNear(boolean proxNear)95 public void setIsProximityNear(boolean proxNear) { 96 mIsProximityNear = proxNear; 97 } 98 setFalseLongTap(boolean falseLongTap)99 public void setFalseLongTap(boolean falseLongTap) { 100 mIsFalseLongTap = falseLongTap; 101 } 102 103 @Override isSimpleTap()104 public boolean isSimpleTap() { 105 checkDestroyed(); 106 return mIsSimpleTap; 107 } 108 109 @Override isFalseTap(@enalty int penalty)110 public boolean isFalseTap(@Penalty int penalty) { 111 checkDestroyed(); 112 return mIsFalseRobustTap; 113 } 114 115 @Override isFalseLongTap(int penalty)116 public boolean isFalseLongTap(int penalty) { 117 checkDestroyed(); 118 return mIsFalseLongTap; 119 } 120 121 @Override isFalseDoubleTap()122 public boolean isFalseDoubleTap() { 123 checkDestroyed(); 124 return mIsFalseDoubleTap; 125 } 126 127 @Override isProximityNear()128 public boolean isProximityNear() { 129 return mIsProximityNear; 130 } 131 132 @VisibleForTesting setIsClassifierEnabled(boolean isClassifierEnabled)133 public void setIsClassifierEnabled(boolean isClassifierEnabled) { 134 mIsClassifierEnabled = isClassifierEnabled; 135 } 136 137 @Override isClassifierEnabled()138 public boolean isClassifierEnabled() { 139 return mIsClassifierEnabled; 140 } 141 142 @Override shouldEnforceBouncer()143 public boolean shouldEnforceBouncer() { 144 return mShouldEnforceBouncer; 145 } 146 147 @Override reportRejectedTouch()148 public Uri reportRejectedTouch() { 149 return null; 150 } 151 152 @VisibleForTesting setIsReportingEnabled(boolean isReportingEnabled)153 public void setIsReportingEnabled(boolean isReportingEnabled) { 154 mIsReportingEnabled = isReportingEnabled; 155 } 156 157 @Override isReportingEnabled()158 public boolean isReportingEnabled() { 159 return mIsReportingEnabled; 160 } 161 162 @Override dump(PrintWriter pw, String[] args)163 public void dump(PrintWriter pw, String[] args) { 164 } 165 166 @Override cleanupInternal()167 public void cleanupInternal() { 168 mDestroyed = true; 169 } 170 checkDestroyed()171 private void checkDestroyed() { 172 assertWithMessage("FakeFasingManager has been destroyed") 173 .that(mDestroyed).isFalse(); 174 } 175 176 @Override onProximityEvent(ProximityEvent proximityEvent)177 public void onProximityEvent(ProximityEvent proximityEvent) { 178 179 } 180 181 @Override addFalsingBeliefListener(FalsingBeliefListener listener)182 public void addFalsingBeliefListener(FalsingBeliefListener listener) { 183 mFalsingBeliefListeners.add(listener); 184 } 185 186 @Override removeFalsingBeliefListener(FalsingBeliefListener listener)187 public void removeFalsingBeliefListener(FalsingBeliefListener listener) { 188 mFalsingBeliefListeners.remove(listener); 189 } 190 191 @Override addTapListener(FalsingTapListener falsingTapListener)192 public void addTapListener(FalsingTapListener falsingTapListener) { 193 mTapListeners.add(falsingTapListener); 194 } 195 196 @Override removeTapListener(FalsingTapListener falsingTapListener)197 public void removeTapListener(FalsingTapListener falsingTapListener) { 198 mTapListeners.remove(falsingTapListener); 199 } 200 getTapListeners()201 public List<FalsingTapListener> getTapListeners() { 202 return mTapListeners; 203 } 204 205 /** 206 * Calls every registered {@link FalsingBeliefListener} as if false touch occurred. 207 */ sendFalsingBelief()208 public void sendFalsingBelief() { 209 for (FalsingBeliefListener listener : mFalsingBeliefListeners) { 210 listener.onFalse(); 211 } 212 } 213 } 214