Initial checkin of AOSP Messaging app.
b/23110861 Change-Id: I9aa980d7569247d6b2ca78f5dcb4502e1eaadb8a
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.messaging.ui.mediapicker;
|
||||
|
||||
import android.media.MediaPlayer;
|
||||
import android.media.MediaRecorder.OnErrorListener;
|
||||
import android.media.MediaRecorder.OnInfoListener;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.android.messaging.FakeFactory;
|
||||
import com.android.messaging.R;
|
||||
import com.android.messaging.datamodel.data.MessagePartData;
|
||||
import com.android.messaging.ui.ViewTest;
|
||||
import com.android.messaging.util.FakeMediaUtil;
|
||||
|
||||
import org.mockito.Matchers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class AudioRecordViewTest extends ViewTest<AudioRecordView> {
|
||||
|
||||
@Mock AudioRecordView.HostInterface mockHost;
|
||||
@Mock LevelTrackingMediaRecorder mockRecorder;
|
||||
@Mock MediaPlayer mockMediaPlayer;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
FakeFactory.register(getInstrumentation().getContext())
|
||||
.withMediaUtil(new FakeMediaUtil(mockMediaPlayer));
|
||||
}
|
||||
|
||||
private void verifyAudioSubmitted() {
|
||||
Mockito.verify(mockHost).onAudioRecorded(Matchers.any(MessagePartData.class));
|
||||
}
|
||||
|
||||
private AudioRecordView initView() {
|
||||
final AudioRecordView view = getView();
|
||||
view.testSetMediaRecorder(mockRecorder);
|
||||
view.setHostInterface(mockHost);
|
||||
return view;
|
||||
}
|
||||
|
||||
public void testRecording() {
|
||||
Mockito.when(mockRecorder.isRecording()).thenReturn(false);
|
||||
Mockito.when(mockRecorder.startRecording(Matchers.<OnErrorListener>any(),
|
||||
Matchers.<OnInfoListener>any(), Matchers.anyInt())).thenReturn(true);
|
||||
Mockito.when(mockRecorder.stopRecording()).thenReturn(Uri.parse("content://someaudio/2"));
|
||||
final AudioRecordView view = initView();
|
||||
view.onRecordButtonTouchDown();
|
||||
Mockito.verify(mockRecorder).startRecording(Matchers.<OnErrorListener>any(),
|
||||
Matchers.<OnInfoListener>any(), Matchers.anyInt());
|
||||
Mockito.when(mockRecorder.isRecording()).thenReturn(true);
|
||||
// Record for 1 second to make it meaningful.
|
||||
sleepNoThrow(1000);
|
||||
view.onRecordButtonTouchUp();
|
||||
// We added some buffer to the end of the audio recording, so sleep for sometime and
|
||||
// verify audio is recorded.
|
||||
sleepNoThrow(700);
|
||||
Mockito.verify(mockRecorder).stopRecording();
|
||||
verifyAudioSubmitted();
|
||||
}
|
||||
|
||||
private void sleepNoThrow(final long duration) {
|
||||
try {
|
||||
Thread.sleep(duration);
|
||||
} catch (final InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutIdForView() {
|
||||
return R.layout.mediapicker_audio_chooser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.messaging.ui.mediapicker;
|
||||
|
||||
import android.hardware.Camera;
|
||||
import android.hardware.Camera.CameraInfo;
|
||||
import android.os.AsyncTask;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import com.android.messaging.BugleTestCase;
|
||||
import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
@SmallTest
|
||||
public class CameraManagerTest extends BugleTestCase {
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
// Force each test to set up a camera wrapper to match their needs
|
||||
CameraManager.setCameraWrapper(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
MockCameraFactory.cleanup();
|
||||
}
|
||||
|
||||
public void testNoCameraDeviceGetInfo() {
|
||||
CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper());
|
||||
assertEquals(false, CameraManager.get().hasAnyCamera());
|
||||
assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
|
||||
try {
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
fail("selectCamera should have thrown");
|
||||
} catch (AssertionError e) {
|
||||
}
|
||||
}
|
||||
|
||||
public void testFrontFacingOnlyGetInfo() {
|
||||
CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT)
|
||||
));
|
||||
assertEquals(true, CameraManager.get().hasAnyCamera());
|
||||
assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
|
||||
}
|
||||
|
||||
public void testBackFacingOnlyGetInfo() {
|
||||
CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
|
||||
));
|
||||
assertEquals(true, CameraManager.get().hasAnyCamera());
|
||||
assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
|
||||
}
|
||||
|
||||
public void testFrontAndBackGetInfo() {
|
||||
CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
|
||||
));
|
||||
assertEquals(true, CameraManager.get().hasAnyCamera());
|
||||
assertEquals(true, CameraManager.get().hasFrontAndBackCamera());
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
|
||||
}
|
||||
|
||||
public void testSwapCamera() {
|
||||
CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
|
||||
MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
|
||||
));
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
|
||||
assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
|
||||
CameraManager.get().swapCamera();
|
||||
assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
|
||||
}
|
||||
|
||||
public void testOpenCamera() {
|
||||
Camera backCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
Camera frontCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT);
|
||||
CameraWrapper wrapper = MockCameraFactory.createCameraWrapper(frontCamera, backCamera);
|
||||
CameraManager.setCameraWrapper(wrapper);
|
||||
CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
|
||||
CameraManager.get().openCamera();
|
||||
CameraManager.get().openCamera();
|
||||
CameraManager.get().openCamera();
|
||||
waitForPendingAsyncTasks();
|
||||
Mockito.verify(wrapper, Mockito.never()).open(0);
|
||||
Mockito.verify(wrapper).open(1);
|
||||
Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
|
||||
Mockito.verify(wrapper, Mockito.never()).release(backCamera);
|
||||
CameraManager.get().swapCamera();
|
||||
waitForPendingAsyncTasks();
|
||||
Mockito.verify(wrapper).open(0);
|
||||
Mockito.verify(wrapper).open(1);
|
||||
Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
|
||||
Mockito.verify(wrapper).release(backCamera);
|
||||
InOrder inOrder = Mockito.inOrder(wrapper);
|
||||
inOrder.verify(wrapper).open(1);
|
||||
inOrder.verify(wrapper).release(backCamera);
|
||||
inOrder.verify(wrapper).open(0);
|
||||
}
|
||||
|
||||
private void waitForPendingAsyncTasks() {
|
||||
try {
|
||||
final Object lockObject = new Object();
|
||||
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
synchronized (lockObject) {
|
||||
lockObject.notifyAll();
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
|
||||
synchronized (lockObject) {
|
||||
lockObject.wait(500);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
fail();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.messaging.ui.mediapicker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.provider.MediaStore.Images.Media;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
|
||||
import com.android.messaging.FakeFactory;
|
||||
import com.android.messaging.R;
|
||||
import com.android.messaging.datamodel.FakeCursor;
|
||||
import com.android.messaging.datamodel.FakeDataModel;
|
||||
import com.android.messaging.datamodel.data.GalleryGridItemData;
|
||||
import com.android.messaging.datamodel.data.TestDataFactory;
|
||||
import com.android.messaging.ui.AsyncImageView;
|
||||
import com.android.messaging.ui.ViewTest;
|
||||
import com.android.messaging.util.UriUtil;
|
||||
|
||||
import org.mockito.Matchers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class GalleryGridItemViewTest extends ViewTest<GalleryGridItemView> {
|
||||
|
||||
@Mock GalleryGridItemView.HostInterface mockHost;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
FakeFactory.register(context)
|
||||
.withDataModel(new FakeDataModel(context));
|
||||
}
|
||||
|
||||
protected void verifyClickedItem(final View view, final GalleryGridItemData data) {
|
||||
Mockito.verify(mockHost).onItemClicked(view, data, false /* longClick */);
|
||||
}
|
||||
|
||||
protected void verifyContent(
|
||||
final GalleryGridItemView view,
|
||||
final String imageUrl,
|
||||
final boolean showCheckbox,
|
||||
final boolean isSelected) {
|
||||
final AsyncImageView imageView = (AsyncImageView) view.findViewById(R.id.image);
|
||||
final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
|
||||
|
||||
assertNotNull(imageView);
|
||||
assertTrue(imageView.mImageRequestBinding.isBound());
|
||||
assertTrue(imageView.mImageRequestBinding.getData().getKey().startsWith(imageUrl));
|
||||
assertNotNull(checkBox);
|
||||
if (showCheckbox) {
|
||||
assertEquals(View.VISIBLE, checkBox.getVisibility());
|
||||
assertEquals(isSelected, checkBox.isChecked());
|
||||
} else {
|
||||
assertNotSame(View.VISIBLE, checkBox.getVisibility());
|
||||
}
|
||||
}
|
||||
|
||||
public void testBind() {
|
||||
Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false);
|
||||
Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
|
||||
.thenReturn(false);
|
||||
final GalleryGridItemView view = getView();
|
||||
final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
|
||||
cursor.moveToFirst();
|
||||
final String path = (String) cursor.getAt(Media.DATA, 0);
|
||||
view.bind(cursor, mockHost);
|
||||
verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
|
||||
false, false);
|
||||
}
|
||||
|
||||
public void testBindMultiSelectUnSelected() {
|
||||
Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
|
||||
Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
|
||||
.thenReturn(false);
|
||||
final GalleryGridItemView view = getView();
|
||||
final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
|
||||
cursor.moveToFirst();
|
||||
final String path = (String) cursor.getAt(Media.DATA, 0);
|
||||
view.bind(cursor, mockHost);
|
||||
verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
|
||||
true, false);
|
||||
}
|
||||
|
||||
public void testBindMultiSelectSelected() {
|
||||
Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
|
||||
Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
|
||||
.thenReturn(true);
|
||||
final GalleryGridItemView view = getView();
|
||||
final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
|
||||
cursor.moveToFirst();
|
||||
final String path = (String) cursor.getAt(Media.DATA, 0);
|
||||
view.bind(cursor, mockHost);
|
||||
verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
|
||||
true, true);
|
||||
}
|
||||
|
||||
public void testClick() {
|
||||
Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false);
|
||||
Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
|
||||
.thenReturn(false);
|
||||
final GalleryGridItemView view = getView();
|
||||
final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
|
||||
cursor.moveToFirst();
|
||||
view.bind(cursor, mockHost);
|
||||
view.performClick();
|
||||
verifyClickedItem(view, view.mData);
|
||||
}
|
||||
|
||||
public void testBindTwice() {
|
||||
Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
|
||||
Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
|
||||
.thenReturn(false);
|
||||
final GalleryGridItemView view = getView();
|
||||
final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
|
||||
|
||||
cursor.moveToFirst();
|
||||
view.bind(cursor, mockHost);
|
||||
|
||||
cursor.moveToNext();
|
||||
final String path = (String) cursor.getAt(Media.DATA, 1);
|
||||
view.bind(cursor, mockHost);
|
||||
verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
|
||||
true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutIdForView() {
|
||||
return R.layout.gallery_grid_item_view;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.messaging.ui.mediapicker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import com.android.messaging.FakeFactory;
|
||||
import com.android.messaging.R;
|
||||
import com.android.messaging.datamodel.FakeDataModel;
|
||||
import com.android.messaging.datamodel.binding.Binding;
|
||||
import com.android.messaging.datamodel.binding.BindingBase;
|
||||
import com.android.messaging.datamodel.data.DraftMessageData;
|
||||
import com.android.messaging.datamodel.data.MediaPickerData;
|
||||
import com.android.messaging.ui.FragmentTestCase;
|
||||
|
||||
import org.mockito.Matchers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class MediaPickerTest extends FragmentTestCase<MediaPicker> {
|
||||
@Mock protected MediaPickerData mMockMediaPickerData;
|
||||
@Mock protected DraftMessageData mMockDraftMessageData;
|
||||
protected FakeDataModel mFakeDataModel;
|
||||
|
||||
public MediaPickerTest() {
|
||||
super(MediaPicker.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MediaPicker getFragment() {
|
||||
if (mFragment == null) {
|
||||
mFragment = new MediaPicker(getInstrumentation().getTargetContext());
|
||||
}
|
||||
return mFragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
mFakeDataModel = new FakeDataModel(context)
|
||||
.withMediaPickerData(mMockMediaPickerData);
|
||||
FakeFactory.register(context)
|
||||
.withDataModel(mFakeDataModel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to initialize the MediaPicker and its data.
|
||||
*/
|
||||
private void initFragment(final int supportedMediaTypes, final Integer[] expectedLoaderIds,
|
||||
final boolean filterTabBeforeAttach) {
|
||||
Mockito.when(mMockMediaPickerData.isBound(Matchers.anyString()))
|
||||
.thenReturn(true);
|
||||
Mockito.when(mMockDraftMessageData.isBound(Matchers.anyString()))
|
||||
.thenReturn(true);
|
||||
final Binding<DraftMessageData> draftBinding = BindingBase.createBinding(this);
|
||||
draftBinding.bind(mMockDraftMessageData);
|
||||
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final MediaPicker fragment = getFragment();
|
||||
if (filterTabBeforeAttach) {
|
||||
fragment.setSupportedMediaTypes(supportedMediaTypes);
|
||||
getActivity().setFragment(fragment);
|
||||
} else {
|
||||
getActivity().setFragment(fragment);
|
||||
fragment.setSupportedMediaTypes(supportedMediaTypes);
|
||||
}
|
||||
fragment.setDraftMessageDataModel(draftBinding);
|
||||
Mockito.verify(mMockMediaPickerData,
|
||||
Mockito.atLeastOnce()).init(
|
||||
Matchers.eq(fragment.getLoaderManager()));
|
||||
fragment.open(MediaPicker.MEDIA_TYPE_ALL, false);
|
||||
}
|
||||
});
|
||||
getInstrumentation().waitForIdleSync();
|
||||
}
|
||||
|
||||
public void testDefaultTabs() {
|
||||
Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
|
||||
initFragment(MediaPicker.MEDIA_TYPE_ALL, new Integer[] {
|
||||
MediaPickerData.GALLERY_IMAGE_LOADER },
|
||||
false);
|
||||
final MediaPicker mediaPicker = getFragment();
|
||||
final View view = mediaPicker.getView();
|
||||
assertNotNull(view);
|
||||
final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
|
||||
assertEquals(tabStrip.getChildCount(), 3);
|
||||
for (int i = 0; i < tabStrip.getChildCount(); i++) {
|
||||
final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
|
||||
assertEquals(View.VISIBLE, tabButton.getVisibility());
|
||||
assertEquals(i == 0, tabButton.isSelected());
|
||||
}
|
||||
}
|
||||
|
||||
public void testFilterTabsBeforeAttach() {
|
||||
Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
|
||||
initFragment(MediaPicker.MEDIA_TYPE_IMAGE, new Integer[] {
|
||||
MediaPickerData.GALLERY_IMAGE_LOADER },
|
||||
true);
|
||||
final MediaPicker mediaPicker = getFragment();
|
||||
final View view = mediaPicker.getView();
|
||||
assertNotNull(view);
|
||||
final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
|
||||
assertEquals(tabStrip.getChildCount(), 3);
|
||||
for (int i = 0; i < tabStrip.getChildCount(); i++) {
|
||||
final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
|
||||
assertEquals(i == 0, tabButton.isSelected());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.messaging.ui.mediapicker;
|
||||
|
||||
import android.hardware.Camera;
|
||||
import android.hardware.Camera.CameraInfo;
|
||||
|
||||
import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
class MockCameraFactory {
|
||||
private static Map<Camera, CameraInfo> sCameraInfos = new HashMap<Camera, CameraInfo>();
|
||||
|
||||
public static Camera createCamera(int facing) {
|
||||
Camera camera = Mockito.mock(Camera.class);
|
||||
CameraInfo cameraInfo = new CameraInfo();
|
||||
cameraInfo.facing = facing;
|
||||
sCameraInfos.put(camera, cameraInfo);
|
||||
return camera;
|
||||
}
|
||||
|
||||
public static void getCameraInfo(Camera camera, CameraInfo outCameraInfo) {
|
||||
CameraInfo cameraInfo = sCameraInfos.get(camera);
|
||||
outCameraInfo.facing = cameraInfo.facing;
|
||||
outCameraInfo.orientation = cameraInfo.orientation;
|
||||
outCameraInfo.canDisableShutterSound = cameraInfo.canDisableShutterSound;
|
||||
}
|
||||
|
||||
public static CameraWrapper createCameraWrapper(final Camera... cameras) {
|
||||
CameraWrapper wrapper = Mockito.mock(CameraWrapper.class);
|
||||
Mockito.when(wrapper.getNumberOfCameras()).thenReturn(cameras.length);
|
||||
Mockito.when(wrapper.open(Mockito.anyInt())).then(new Answer<Camera>() {
|
||||
@Override
|
||||
public Camera answer(InvocationOnMock invocation) {
|
||||
return cameras[(Integer) invocation.getArguments()[0]];
|
||||
}
|
||||
});
|
||||
Mockito.doAnswer(new Answer<Void>() {
|
||||
@Override
|
||||
public Void answer(InvocationOnMock invocation) throws Throwable {
|
||||
getCameraInfo(
|
||||
cameras[(Integer) invocation.getArguments()[0]],
|
||||
(CameraInfo) invocation.getArguments()[1]
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}).when(wrapper).getCameraInfo(Mockito.anyInt(), Mockito.any(CameraInfo.class));
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
public static void cleanup() {
|
||||
sCameraInfos.clear();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user