11ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling/* 21ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * Copyright (C) 2011 The Android Open Source Project 31ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * 41ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * Licensed under the Apache License, Version 2.0 (the "License"); 51ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * you may not use this file except in compliance with the License. 61ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * You may obtain a copy of the License at 71ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * 81ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * http://www.apache.org/licenses/LICENSE-2.0 91ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * 101ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * Unless required by applicable law or agreed to in writing, software 111ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * distributed under the License is distributed on an "AS IS" BASIS, 121ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * See the License for the specific language governing permissions and 141ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling * limitations under the License. 151ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling */ 161ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 173189c037886fda47be73da9885e6760df50efd71Jason Noguchipackage com.android.camera.functional; 181ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 191ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport com.android.camera.CameraActivity; 201ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport com.android.camera2.R; 211ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 221ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.app.Activity; 231ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.content.Intent; 241ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.graphics.Bitmap; 251ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.graphics.BitmapFactory; 261ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.net.Uri; 271ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.os.Environment; 281ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.provider.MediaStore; 291ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.test.ActivityInstrumentationTestCase2; 301ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.test.suitebuilder.annotation.LargeTest; 311ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport android.view.KeyEvent; 321ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 331ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport java.io.BufferedInputStream; 341ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport java.io.File; 351ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingimport java.io.FileInputStream; 361ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 371ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberlingpublic class ImageCaptureIntentTest extends ActivityInstrumentationTestCase2 <CameraActivity> { 381ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling private Intent mIntent; 391ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 401ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public ImageCaptureIntentTest() { 411ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling super(CameraActivity.class); 421ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 431ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 441ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @Override 451ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling protected void setUp() throws Exception { 461ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling super.setUp(); 471ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 481ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 491ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 501ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @LargeTest 511ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void testNoExtraOutput() throws Exception { 521ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling setActivityIntent(mIntent); 531ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity(); 541ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 551ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling takePicture(); 561ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling pressDone(); 571ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 581ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(getActivity().isFinishing()); 591ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertEquals(Activity.RESULT_OK, getActivity().getResultCode()); 601ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling Intent resultData = getActivity().getResultData(); 611ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling Bitmap bitmap = (Bitmap) resultData.getParcelableExtra("data"); 621ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertNotNull(bitmap); 631ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(bitmap.getWidth() > 0); 641ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(bitmap.getHeight() > 0); 651ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 661ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 671ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @LargeTest 681ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void testExtraOutput() throws Exception { 691ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling File file = new File(Environment.getExternalStorageDirectory(), 701ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling "test.jpg"); 711ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling BufferedInputStream stream = null; 721ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling byte[] jpegData; 731ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 741ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling try { 751ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling mIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 761ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling setActivityIntent(mIntent); 771ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity(); 781ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 791ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling takePicture(); 801ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling pressDone(); 811ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 821ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(getActivity().isFinishing()); 831ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertEquals(Activity.RESULT_OK, getActivity().getResultCode()); 841ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 851ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling // Verify the jpeg file 861ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling int fileLength = (int) file.length(); 871ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(fileLength > 0); 881ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling jpegData = new byte[fileLength]; 891ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling stream = new BufferedInputStream(new FileInputStream(file)); 901ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling stream.read(jpegData); 911ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } finally { 921ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling if (stream != null) stream.close(); 931ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling file.delete(); 941ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 951ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 961ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling Bitmap b = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length); 971ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(b.getWidth() > 0); 981ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(b.getHeight() > 0); 991ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1001ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1011ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @LargeTest 1021ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void testCancel() throws Exception { 1031ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling setActivityIntent(mIntent); 1041ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity(); 1051ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1061ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling pressCancel(); 1071ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1081ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(getActivity().isFinishing()); 1091ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode()); 1101ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1111ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1121ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @LargeTest 1131ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void testSnapshotCancel() throws Exception { 1141ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling setActivityIntent(mIntent); 1151ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity(); 1161ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1171ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling takePicture(); 1181ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling pressCancel(); 1191ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1201ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertTrue(getActivity().isFinishing()); 1211ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode()); 1221ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1231ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1241ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling private void takePicture() throws Exception { 1251ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getInstrumentation().sendKeySync( 1261ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS)); 1271ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getInstrumentation().sendCharacterSync(KeyEvent.KEYCODE_CAMERA); 1281ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling Thread.sleep(4000); 1291ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1301ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1311ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling private void pressDone() { 1321ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getInstrumentation().runOnMainSync(new Runnable() { 1331ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @Override 1341ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void run() { 1351ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity().findViewById(R.id.btn_done).performClick(); 1361ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1371ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling }); 1381ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1391ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling 1401ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling private void pressCancel() { 1411ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getInstrumentation().runOnMainSync(new Runnable() { 1421ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling @Override 1431ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling public void run() { 1441ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling getActivity().findViewById(R.id.btn_cancel).performClick(); 1451ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1461ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling }); 1471ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling } 1481ac5817f362f6f8262bf00191e1e419996475380Sascha Haeberling} 149