1135e465360dc36f1b9602660e290825d1e1fd00eYorke Leepackage com.android.dialer.dialpad; 2135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 3135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport android.test.ActivityInstrumentationTestCase2; 4135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport android.view.View; 5135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 6135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport com.android.dialer.DialtactsActivity; 7135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport com.android.dialer.R; 8135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 9135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee/** 10135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * Tests that rely on instrumenting an actual instance of a {@link DialpadFragment}. 11135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee */ 12135e465360dc36f1b9602660e290825d1e1fd00eYorke Leepublic class DialpadFragmentInstrumentationTest extends 13135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee ActivityInstrumentationTestCase2<DialtactsActivity> { 14135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee private DialtactsActivity mActivity; 15135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 16135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public DialpadFragmentInstrumentationTest() { 17135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee super(DialtactsActivity.class); 18135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 19135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 20135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee @Override 21135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee protected void setUp() throws Exception { 22135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee super.setUp(); 23135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee mActivity = getActivity(); 24135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 25135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 26135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee /** 27135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * Simulates a long click event on the zero key with a prior onPressed callback. 28135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * 29135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee */ 30135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void testManualLongClickZero_DeletesPreviousCharacter() { 31135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final DialpadFragment fragment = showDialpad(); 32135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee pressAndReleaseKey(9, fragment); 33135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 34135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee getInstrumentation().runOnMainSync(new Runnable() { 35135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee @Override 36135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void run() { 37135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final View zeroKey = findViewByDigit(0, fragment); 38135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.onPressed(zeroKey, true); 39135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.onLongClick(zeroKey); 40135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 41135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee }); 42135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 43135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee assertEquals("9+", fragment.getDigitsWidget().getText().toString()); 44135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 45135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 46135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee /** 47135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * Simulates a long click event on the zero key without a prior onPressed 48135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * callback. 49135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee */ 50135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void testSystemLongClickZero_PreservesPreviousCharacter() { 51135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final DialpadFragment fragment = showDialpad(); 52135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee pressAndReleaseKey(9, fragment); 53135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 54135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee getInstrumentation().runOnMainSync(new Runnable() { 55135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee @Override 56135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void run() { 57135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final View zeroKey = findViewByDigit(0, fragment); 58135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.onLongClick(zeroKey); 59135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 60135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee }); 61135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 62135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee assertEquals("9+", fragment.getDigitsWidget().getText().toString()); 63135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 64135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 65135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee private DialpadFragment showDialpad() { 66135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee getInstrumentation().runOnMainSync(new Runnable() { 67135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee @Override 68135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void run() { 69135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee mActivity.showDialpad(); 70135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 71135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee }); 72135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee getInstrumentation().waitForIdleSync(); 73135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return (DialpadFragment) mActivity.getFragmentManager().findFragmentByTag( 74135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee DialtactsActivity.TAG_DIALPAD_FRAGMENT); 75135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 76135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 77135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee private void pressAndReleaseKey(int digit, final DialpadFragment fragment) { 78135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final View dialpadKey = findViewByDigit(digit, fragment); 79135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee final String digitsBefore = fragment.getDigitsWidget().getText().toString(); 80135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee getInstrumentation().runOnMainSync(new Runnable() { 81135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee @Override 82135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee public void run() { 83135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.onPressed(dialpadKey, true); 84135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.onPressed(dialpadKey, false); 85135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 86135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee }); 87135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee assertEquals(digitsBefore + String.valueOf(digit), 88135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee fragment.getDigitsWidget().getText().toString()); 89135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 90135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 91135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee private View findViewByDigit(int digit, DialpadFragment fragment) { 92135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return fragment.getView().findViewById(getViewIdByDigit(digit)); 93135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 94135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee 95135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee private int getViewIdByDigit(int digit) { 96135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee switch (digit) { 97135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 0: 98135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.zero; 99135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 1: 100135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.one; 101135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 2: 102135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.two; 103135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 3: 104135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.three; 105135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 4: 106135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.four; 107135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 5: 108135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.five; 109135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 6: 110135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.six; 111135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 7: 112135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.seven; 113135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 8: 114135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.eight; 115135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee case 9: 116135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return R.id.nine; 117135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee default: 118135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee return 0; 119135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 120135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee } 121135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee} 122