143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi/* 243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * Copyright (C) 2011 The Android Open Source Project 343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * 443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * Licensed under the Apache License, Version 2.0 (the "License"); 543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * you may not use this file except in compliance with the License. 643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * You may obtain a copy of the License at 743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * 843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * http://www.apache.org/licenses/LICENSE-2.0 943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * 1043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * Unless required by applicable law or agreed to in writing, software 1143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * distributed under the License is distributed on an "AS IS" BASIS, 1243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * See the License for the specific language governing permissions and 1443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi * limitations under the License. 1543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi */ 1643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 1743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchipackage com.android.gallery3d.functional; 1843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 1943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport com.android.camera.CameraActivity; 207db6eb02312a4c649d34351d1d78add1d8ec814bJohn Reckimport com.android.gallery3d.R; 2143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 2243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.app.Activity; 2343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.content.Intent; 2443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.graphics.Bitmap; 2543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.graphics.BitmapFactory; 2643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.net.Uri; 2743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.os.Environment; 2843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.provider.MediaStore; 2943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.test.ActivityInstrumentationTestCase2; 3043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.test.suitebuilder.annotation.LargeTest; 3143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport android.view.KeyEvent; 3243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 3343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport java.io.BufferedInputStream; 3443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport java.io.File; 3543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchiimport java.io.FileInputStream; 3643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 3743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchipublic class ImageCaptureIntentTest extends ActivityInstrumentationTestCase2 <CameraActivity> { 3843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi private Intent mIntent; 3943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 4043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public ImageCaptureIntentTest() { 4143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi super(CameraActivity.class); 4243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 4343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 4443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @Override 4543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi protected void setUp() throws Exception { 4643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi super.setUp(); 4743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 4843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 4943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 5043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @LargeTest 5143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void testNoExtraOutput() throws Exception { 5243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi setActivityIntent(mIntent); 5343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity(); 5443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 5543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi takePicture(); 5643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi pressDone(); 5743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 5843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(getActivity().isFinishing()); 5943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertEquals(Activity.RESULT_OK, getActivity().getResultCode()); 6043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi Intent resultData = getActivity().getResultData(); 6143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi Bitmap bitmap = (Bitmap) resultData.getParcelableExtra("data"); 6243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertNotNull(bitmap); 6343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(bitmap.getWidth() > 0); 6443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(bitmap.getHeight() > 0); 6543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 6643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 6743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @LargeTest 6843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void testExtraOutput() throws Exception { 6943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi File file = new File(Environment.getExternalStorageDirectory(), 7043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi "test.jpg"); 7143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi BufferedInputStream stream = null; 7243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi byte[] jpegData; 7343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 7443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi try { 7543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi mIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 7643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi setActivityIntent(mIntent); 7743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity(); 7843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 7943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi takePicture(); 8043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi pressDone(); 8143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 8243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(getActivity().isFinishing()); 8343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertEquals(Activity.RESULT_OK, getActivity().getResultCode()); 8443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 8543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi // Verify the jpeg file 8643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi int fileLength = (int) file.length(); 8743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(fileLength > 0); 8843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi jpegData = new byte[fileLength]; 8943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi stream = new BufferedInputStream(new FileInputStream(file)); 9043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi stream.read(jpegData); 9143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } finally { 9243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi if (stream != null) stream.close(); 9343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi file.delete(); 9443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 9543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 9643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi Bitmap b = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length); 9743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(b.getWidth() > 0); 9843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(b.getHeight() > 0); 9943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 10043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 10143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @LargeTest 10243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void testCancel() throws Exception { 10343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi setActivityIntent(mIntent); 10443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity(); 10543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 10643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi pressCancel(); 10743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 10843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(getActivity().isFinishing()); 10943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode()); 11043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 11143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 11243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @LargeTest 11343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void testSnapshotCancel() throws Exception { 11443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi setActivityIntent(mIntent); 11543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity(); 11643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 11743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi takePicture(); 11843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi pressCancel(); 11943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 12043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertTrue(getActivity().isFinishing()); 12143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi assertEquals(Activity.RESULT_CANCELED, getActivity().getResultCode()); 12243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 12343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 12443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi private void takePicture() throws Exception { 12543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getInstrumentation().sendKeySync( 12643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS)); 12743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getInstrumentation().sendCharacterSync(KeyEvent.KEYCODE_CAMERA); 12843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi Thread.sleep(4000); 12943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 13043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 13143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi private void pressDone() { 13243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getInstrumentation().runOnMainSync(new Runnable() { 13343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @Override 13443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void run() { 13543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity().findViewById(R.id.btn_done).performClick(); 13643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 13743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi }); 13843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 13943a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi 14043a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi private void pressCancel() { 14143a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getInstrumentation().runOnMainSync(new Runnable() { 14243a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi @Override 14343a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi public void run() { 14443a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi getActivity().findViewById(R.id.btn_cancel).performClick(); 14543a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 14643a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi }); 14743a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi } 14843a4f8b2b2f32299b945fca31bd95a5c3439d835Jason Noguchi} 149