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