10436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa/* 20436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * Copyright (C) 2016 The Android Open Source Project 30436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * 40436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * Licensed under the Apache License, Version 2.0 (the "License"); 50436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * you may not use this file except in compliance with the License. 60436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * You may obtain a copy of the License at 70436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * 80436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * http://www.apache.org/licenses/LICENSE-2.0 90436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * 100436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * Unless required by applicable law or agreed to in writing, software 110436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * distributed under the License is distributed on an "AS IS" BASIS, 120436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * See the License for the specific language governing permissions and 140436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa * limitations under the License. 150436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa */ 160436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 170436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwapackage com.android.documentsui.dirlist; 180436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 190436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.content.Context; 200436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.database.Cursor; 210436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.graphics.Rect; 220436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.os.SystemClock; 230436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.test.AndroidTestCase; 240436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.test.suitebuilder.annotation.SmallTest; 256792489dc490eb029469f73490a560c76e84dc98Ben Kwaimport android.view.KeyEvent; 260436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.view.LayoutInflater; 270436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.view.MotionEvent; 280436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.view.MotionEvent.PointerCoords; 290436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport android.view.MotionEvent.PointerProperties; 300436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 310436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport com.android.documentsui.R; 320436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwaimport com.android.documentsui.State; 330436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 340436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa@SmallTest 350436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwapublic class DocumentHolderTest extends AndroidTestCase { 360436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 370436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa DocumentHolder mHolder; 380436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa TestListener mListener; 390436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 400436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void setUp() throws Exception { 410436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa Context context = getContext(); 420436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa LayoutInflater inflater = LayoutInflater.from(context); 430436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder = new DocumentHolder(getContext(), inflater.inflate(R.layout.item_doc_list, null)) { 440436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa @Override 450436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void bind(Cursor cursor, String modelId, State state) {} 460436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa }; 470436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 480436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mListener = new TestListener(); 490436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.addEventListener(mListener); 500436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 510436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.itemView.requestLayout(); 520436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.itemView.invalidate(); 530436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 540436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 550436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void testClickActivates() { 560436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa click(); 570436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mListener.assertSelected(); 580436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 590436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 600436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void testTapActivates() { 610436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa tap(); 620436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mListener.assertActivated(); 630436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 640436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 650436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void click() { 660436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.onSingleTapUp(createEvent(MotionEvent.TOOL_TYPE_MOUSE)); 670436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 680436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 690436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void tap() { 700436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.onSingleTapUp(createEvent(MotionEvent.TOOL_TYPE_FINGER)); 710436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 720436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 730436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public MotionEvent createEvent(int tooltype) { 740436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa long time = SystemClock.uptimeMillis(); 750436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 760436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa PointerProperties properties[] = new PointerProperties[] { 770436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa new PointerProperties() 780436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa }; 790436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa properties[0].toolType = tooltype; 800436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 810436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa PointerCoords coords[] = new PointerCoords[] { 820436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa new PointerCoords() 830436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa }; 840436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 850436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa Rect rect = new Rect(); 860436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mHolder.itemView.getHitRect(rect); 870436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa coords[0].x = rect.left; 880436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa coords[0].y = rect.top; 890436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 900436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa return MotionEvent.obtain( 910436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa time, // down time 920436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa time, // event time 930436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa MotionEvent.ACTION_UP, // action 940436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1, // pointer count 950436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa properties, // pointer properties 960436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa coords, // pointer coords 970436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // metastate 980436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // button state 990436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // xprecision 1000436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // yprecision 1010436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // deviceid 1020436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // edgeflags 1030436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0, // source 1040436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 0 // flags 1050436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa ); 1060436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1070436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1080436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa private class TestListener implements DocumentHolder.EventListener { 1090436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa private boolean mActivated = false; 1100436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa private boolean mSelected = false; 1110436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1120436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void assertActivated() { 1130436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa assertTrue(mActivated); 1140436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa assertFalse(mSelected); 1150436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1160436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1170436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public void assertSelected() { 1180436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa assertTrue(mSelected); 1190436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa assertFalse(mActivated); 1200436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1210436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1220436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa @Override 1230436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public boolean onActivate(DocumentHolder doc) { 1240436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mActivated = true; 1250436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa return true; 1260436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1270436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1280436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa @Override 1290436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa public boolean onSelect(DocumentHolder doc) { 1300436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa mSelected = true; 1310436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa return true; 1320436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1330436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa 1346792489dc490eb029469f73490a560c76e84dc98Ben Kwa @Override 1356792489dc490eb029469f73490a560c76e84dc98Ben Kwa public boolean onKey(DocumentHolder doc, int keyCode, KeyEvent event) { 1366792489dc490eb029469f73490a560c76e84dc98Ben Kwa return false; 1376792489dc490eb029469f73490a560c76e84dc98Ben Kwa } 1386792489dc490eb029469f73490a560c76e84dc98Ben Kwa 1390436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa } 1400436a757211bd5b485ba5e484ee37082c59e1c47Ben Kwa} 141