1 /* 2 * Copyright (C) 2017 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.documentsui.selection; 18 19 import android.graphics.Point; 20 import android.graphics.Rect; 21 import android.support.v7.widget.RecyclerView.OnScrollListener; 22 import android.test.AndroidTestCase; 23 import android.test.suitebuilder.annotation.SmallTest; 24 import android.view.MotionEvent; 25 26 import com.android.documentsui.DirectoryReloadLock; 27 import com.android.documentsui.dirlist.TestData; 28 import com.android.documentsui.dirlist.TestDocumentsAdapter; 29 import com.android.documentsui.dirlist.TestFocusHandler; 30 import com.android.documentsui.testing.SelectionManagers; 31 import com.android.documentsui.testing.TestEvent.Builder; 32 33 import java.util.Collections; 34 import java.util.List; 35 36 @SmallTest 37 public class BandControllerTest extends AndroidTestCase { 38 39 private static final List<String> ITEMS = TestData.create(10); 40 private BandController mBandController; 41 private boolean mIsActive; 42 43 @Override 44 public void setUp() throws Exception { 45 mIsActive = false; 46 mBandController = new BandController(new TestSelectionEnvironment(), 47 new TestDocumentsAdapter(ITEMS), SelectionManagers.createTestInstance(ITEMS), 48 new DirectoryReloadLock(), null) { 49 @Override 50 public boolean isActive() { 51 return mIsActive; 52 } 53 }; 54 } 55 56 public void testGoodStart() { 57 assertTrue(mBandController.shouldStart(goodStartEventBuilder().build())); 58 } 59 60 public void testBadStart_NoButtons() { 61 assertFalse(mBandController.shouldStart( 62 goodStartEventBuilder().releaseButton(MotionEvent.BUTTON_PRIMARY).build())); 63 } 64 65 public void testBadStart_SecondaryButton() { 66 assertFalse( 67 mBandController.shouldStart(goodStartEventBuilder().secondary().build())); 68 } 69 70 public void testBadStart_TertiaryButton() { 71 assertFalse( 72 mBandController.shouldStart(goodStartEventBuilder().tertiary().build())); 73 } 74 75 public void testBadStart_Touch() { 76 assertFalse(mBandController.shouldStart( 77 goodStartEventBuilder().touch().releaseButton(MotionEvent.BUTTON_PRIMARY).build())); 78 } 79 80 public void testBadStart_inDragSpot() { 81 assertFalse( 82 mBandController.shouldStart(goodStartEventBuilder().at(1).inDragHotspot().build())); 83 } 84 85 public void testBadStart_ActionDown() { 86 assertFalse(mBandController 87 .shouldStart(goodStartEventBuilder().action(MotionEvent.ACTION_DOWN).build())); 88 } 89 90 public void testBadStart_ActionUp() { 91 assertFalse(mBandController 92 .shouldStart(goodStartEventBuilder().action(MotionEvent.ACTION_UP).build())); 93 } 94 95 public void testBadStart_ActionPointerDown() { 96 assertFalse(mBandController.shouldStart( 97 goodStartEventBuilder().action(MotionEvent.ACTION_POINTER_DOWN).build())); 98 } 99 100 public void testBadStart_ActionPointerUp() { 101 assertFalse(mBandController.shouldStart( 102 goodStartEventBuilder().action(MotionEvent.ACTION_POINTER_UP).build())); 103 } 104 105 public void testBadStart_NoItems() { 106 mBandController = new BandController(new TestSelectionEnvironment(), 107 new TestDocumentsAdapter(Collections.EMPTY_LIST), 108 SelectionManagers.createTestInstance(ITEMS), 109 new DirectoryReloadLock(), null); 110 assertFalse(mBandController.shouldStart(goodStartEventBuilder().build())); 111 } 112 113 public void testBadStart_alreadyActive() { 114 mIsActive = true; 115 assertFalse(mBandController.shouldStart(goodStartEventBuilder().build())); 116 } 117 118 public void testGoodStop() { 119 mIsActive = true; 120 assertTrue(mBandController.shouldStop(goodStopEventBuilder().build())); 121 } 122 123 public void testGoodStop_PointerUp() { 124 mIsActive = true; 125 assertTrue(mBandController 126 .shouldStop(goodStopEventBuilder().action(MotionEvent.ACTION_POINTER_UP).build())); 127 } 128 129 public void testGoodStop_Cancel() { 130 mIsActive = true; 131 assertTrue(mBandController 132 .shouldStop(goodStopEventBuilder().action(MotionEvent.ACTION_CANCEL).build())); 133 } 134 135 public void testBadStop_NotActive() { 136 assertFalse(mBandController.shouldStop(goodStopEventBuilder().build())); 137 } 138 139 public void testBadStop_NonMouse() { 140 mIsActive = true; 141 assertFalse(mBandController.shouldStop(goodStopEventBuilder().touch().build())); 142 } 143 144 public void testBadStop_Move() { 145 mIsActive = true; 146 assertFalse(mBandController.shouldStop( 147 goodStopEventBuilder().action(MotionEvent.ACTION_MOVE).touch().build())); 148 } 149 150 public void testBadStop_Down() { 151 mIsActive = true; 152 assertFalse(mBandController.shouldStop( 153 goodStopEventBuilder().action(MotionEvent.ACTION_DOWN).touch().build())); 154 } 155 156 157 private Builder goodStartEventBuilder() { 158 return new Builder().mouse().primary().action(MotionEvent.ACTION_MOVE).notInDragHotspot(); 159 } 160 161 private Builder goodStopEventBuilder() { 162 return new Builder().mouse().action(MotionEvent.ACTION_UP).notInDragHotspot(); 163 } 164 165 private final class TestSelectionEnvironment implements BandController.SelectionEnvironment { 166 @Override 167 public void scrollBy(int dy) { 168 } 169 170 @Override 171 public void runAtNextFrame(Runnable r) { 172 } 173 174 @Override 175 public void removeCallback(Runnable r) { 176 } 177 178 @Override 179 public void showBand(Rect rect) { 180 } 181 182 @Override 183 public void hideBand() { 184 } 185 186 @Override 187 public void addOnScrollListener(OnScrollListener listener) { 188 } 189 190 @Override 191 public void removeOnScrollListener(OnScrollListener listener) { 192 } 193 194 @Override 195 public int getHeight() { 196 return 0; 197 } 198 199 @Override 200 public void invalidateView() { 201 } 202 203 @Override 204 public Point createAbsolutePoint(Point relativePoint) { 205 return null; 206 } 207 208 @Override 209 public Rect getAbsoluteRectForChildViewAt(int index) { 210 return null; 211 } 212 213 @Override 214 public int getAdapterPositionAt(int index) { 215 return 0; 216 } 217 218 @Override 219 public int getColumnCount() { 220 return 0; 221 } 222 223 @Override 224 public int getChildCount() { 225 return 0; 226 } 227 228 @Override 229 public int getVisibleChildCount() { 230 return 0; 231 } 232 233 @Override 234 public boolean hasView(int adapterPosition) { 235 return false; 236 } 237 } 238 } 239