1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.dialer.voicemail; 18 19import android.content.ContentUris; 20import android.database.Cursor; 21import android.net.Uri; 22import android.test.suitebuilder.annotation.Suppress; 23 24import com.android.dialer.calllog.CallLogActivity; 25import com.android.dialer.database.VoicemailArchiveContract; 26import static com.android.dialer.voicemail.VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT; 27import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT; 28 29/** 30 * Unit tests for {@link VoicemailPlaybackPresenter} and {@link VoicemailPlaybackLayout}. 31 */ 32public class VoicemailPlaybackTest 33 extends VoicemailActivityInstrumentationTestCase2<CallLogActivity> { 34 35 public VoicemailPlaybackTest() { 36 super(CallLogActivity.class); 37 } 38 39 @Override 40 public void setUp() throws Exception { 41 super.setUp(); 42 mPresenter = VoicemailPlaybackPresenter.getInstance(getActivity(), null); 43 } 44 45 @Override 46 public void tearDown() throws Exception { 47 cleanUpArchivedVoicemailUri(); 48 super.tearDown(); 49 } 50 51 @Suppress 52 public void testWhenCheckForContentCompletes() throws Throwable { 53 setUriForRealFileVoicemailEntry(); 54 setPlaybackViewForPresenter(); 55 56 getInstrumentation().runOnMainSync(new Runnable() { 57 @Override 58 public void run() { 59 mPresenter.resumePlayback(); 60 } 61 }); 62 mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT); 63 getInstrumentation().waitForIdleSync(); 64 65 assertStateTextContains("Loading voicemail"); 66 } 67 68 public void testArchiveContent() throws Throwable { 69 setUriForRealFileVoicemailEntry(); 70 setPlaybackViewForPresenter(); 71 mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT); 72 73 getInstrumentation().runOnMainSync(new Runnable() { 74 @Override 75 public void run() { 76 mPresenter.archiveContent(mVoicemailUri, true); 77 } 78 }); 79 mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT); 80 mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT); 81 getInstrumentation().waitForIdleSync(); 82 assertVoicemailArchived(); 83 } 84 85 public void testShareContent() throws Throwable { 86 setUriForRealFileVoicemailEntry(); 87 setPlaybackViewForPresenter(); 88 mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT); 89 90 getInstrumentation().runOnMainSync(new Runnable() { 91 @Override 92 public void run() { 93 mPresenter.archiveContent(mVoicemailUri, false); 94 } 95 }); 96 mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT); 97 mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT); 98 getInstrumentation().waitForIdleSync(); 99 assertVoicemailArchived(); 100 } 101 102 private void assertVoicemailArchived() { 103 try (Cursor cursor = getArchivedVoicemailCursor()) { 104 assertTrue(hasContent(cursor)); 105 assertEquals(ContentUris.parseId(mVoicemailUri), getRowServerId(cursor)); 106 } catch (Exception e) { 107 fail("Voicemail was not archived: " + e.toString()); 108 } 109 } 110 111 private void cleanUpArchivedVoicemailUri() { 112 try (Cursor cursor = getArchivedVoicemailCursor()) { 113 if (hasContent(cursor)) { 114 getContentResolver().delete(getRowUri(cursor), null, null); 115 } 116 } 117 } 118 119 private Cursor getArchivedVoicemailCursor() { 120 return getContentResolver().query( 121 VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, 122 new String[] { 123 VoicemailArchiveContract.VoicemailArchive._ID, 124 VoicemailArchiveContract.VoicemailArchive.SERVER_ID 125 }, 126 VoicemailArchiveContract.VoicemailArchive.SERVER_ID + "=" 127 + ContentUris.parseId(mVoicemailUri), 128 null, 129 null); 130 } 131 132 private int getRowServerId(Cursor cursor) { 133 return cursor 134 .getInt(cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive.SERVER_ID)); 135 } 136 137 private Uri getRowUri(Cursor cursor) { 138 return VoicemailArchiveContract.VoicemailArchive.buildWithId(cursor.getInt( 139 cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive._ID))); 140 } 141 142 private boolean hasContent(Cursor cursor) { 143 return cursor != null && cursor.moveToFirst(); 144 } 145}