Revert "Initial checkin of AOSP Messaging app."

This reverts commit 461a34b466.

Change-Id: Iac4ca77eeaa94989e91dead49a7959c905bd3078
This commit is contained in:
Mike Dodd
2015-08-12 18:48:39 +00:00
parent 461a34b466
commit ef8c7abbcf
1645 changed files with 0 additions and 186271 deletions
@@ -1,89 +0,0 @@
/*
* 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;
}
}
@@ -1,154 +0,0 @@
/*
* 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();
}
}
}
@@ -1,145 +0,0 @@
/*
* 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;
}
}
@@ -1,129 +0,0 @@
/*
* 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());
}
}
}
@@ -1,73 +0,0 @@
/*
* 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();
}
}