1c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/* 2c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project 3c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 4c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License"); 5c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * you may not use this file except in compliance with the License. 6c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * You may obtain a copy of the License at 7c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 8c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * http://www.apache.org/licenses/LICENSE-2.0 9c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * 10c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software 11c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS, 12c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * See the License for the specific language governing permissions and 14c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * limitations under the License 15c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */ 16c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 17c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepackage com.android.providers.contacts; 18c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 19c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.ContentProvider; 20aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerdaimport android.content.ContentValues; 21c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.Context; 22c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.ContextWrapper; 23c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.Intent; 24c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.pm.PackageManager; 25aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerdaimport android.provider.CallLog.Calls; 26c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.provider.VoicemailContract; 27c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 28c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.io.File; 29c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.ArrayList; 30c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.Collections; 31c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport java.util.List; 32c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 33c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/** 34c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Base class for all tests that require interacting with the voicemail content provider. 35c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */ 360a54148a9a8313f78ecd3d112134f2dee4479bb8Makoto Onukipublic abstract class BaseVoicemailProviderTest extends BaseContactsProvider2Test { 37c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 38c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected boolean mUseSourceUri = false; 39c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private File mTestDirectory; 40c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 41c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 42c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUp() throws Exception { 43c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee super.setUp(); 44c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee addProvider(TestVoicemailProvider.class, VoicemailContract.AUTHORITY); 45c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee TestVoicemailProvider.setVvmProviderCallDelegate(createMockProviderCalls()); 46c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 47c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 48c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 49c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void tearDown() throws Exception { 50c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee removeTestDirectory(); 51c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee super.tearDown(); 52c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 53c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 54c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 55c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected Class<? extends ContentProvider> getProviderClass() { 56c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return TestVoicemailProvider.class; 57c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 58c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 59c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 60c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected String getAuthority() { 61c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return VoicemailContract.AUTHORITY; 62c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 63c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 64c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForOwnPermission() { 652ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.removePermissions(READ_VOICEMAIL_PERMISSION); 662ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.removePermissions(WRITE_VOICEMAIL_PERMISSION); 670b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); 68c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = true; 69c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 70c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 71c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForFullPermission() { 720b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); 732ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.addPermissions(READ_VOICEMAIL_PERMISSION); 742ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.addPermissions(WRITE_VOICEMAIL_PERMISSION); 75c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = false; 76c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 77c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 78c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected void setUpForNoPermission() { 790b442c4154c77f39aeb84216f433e5bd11cbf79eDebashish Chatterjee mActor.removePermissions(ADD_VOICEMAIL_PERMISSION); 802ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.removePermissions(READ_VOICEMAIL_PERMISSION); 812ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee mActor.removePermissions(WRITE_VOICEMAIL_PERMISSION); 82c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mUseSourceUri = true; 83c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 84c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 85c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected int countFilesInTestDirectory() { 86c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return findAllFiles(mTestDirectory).size(); 87c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 88c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 89c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee // TODO: Use a mocking framework to mock these calls. 90c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private VvmProviderCalls createMockProviderCalls() { 91c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new VvmProviderCalls() { 92c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 93c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendOrderedBroadcast(Intent intent, String receiverPermission) { 94c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee // Do nothing for now. 95c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 96c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 97c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 98c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode) { 99c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return getTestDirectory(); 100c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 101c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee }; 102c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 103c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 104c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee /** Lazily construct the test directory when required. */ 105c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private synchronized File getTestDirectory() { 106c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (mTestDirectory == null) { 107c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee File baseDirectory = getContext().getCacheDir(); 108c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mTestDirectory = new File(baseDirectory, Long.toString(System.currentTimeMillis())); 109c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertFalse(mTestDirectory.exists()); 110c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertTrue(mTestDirectory.mkdirs()); 111c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 112c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return mTestDirectory; 113c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 114c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 115c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private void removeTestDirectory() { 116c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (mTestDirectory != null) { 117c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee recursiveDeleteAll(mTestDirectory); 118c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 119c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 120c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 121c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private static void recursiveDeleteAll(File input) { 122c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (input.isDirectory()) { 123c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee for (File file : input.listFiles()) { 124c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee recursiveDeleteAll(file); 125c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 126c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 127c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee assertTrue("error deleting " + input.getAbsolutePath(), input.delete()); 128c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 129c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 130c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private List<File> findAllFiles(File input) { 131c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (input == null) { 132c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return Collections.emptyList(); 133c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 134c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee if (!input.isDirectory()) { 135c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return Collections.singletonList(input); 136c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 137c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee List<File> results = new ArrayList<File>(); 138c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee for (File file : input.listFiles()) { 139c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee results.addAll(findAllFiles(file)); 140c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 141c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return results; 142c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 143c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 144c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee /** The calls that we need to mock out for our VvmProvider, used by TestVoicemailProvider. */ 145c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private interface VvmProviderCalls { 146c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendOrderedBroadcast(Intent intent, String receiverPermission); 147c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode); 148c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 149c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 150c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public static class TestVoicemailProvider extends VoicemailContentProvider { 151c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee private static VvmProviderCalls mDelegate; 152c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public static synchronized void setVvmProviderCallDelegate(VvmProviderCalls delegate) { 153c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mDelegate = delegate; 154c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 155c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 156c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 157c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected ContactsDatabaseHelper getDatabaseHelper(Context context) { 1589b626252d91e451a822f48cd127aef5d609a6257Makoto Onuki return ContactsDatabaseHelper.getNewInstanceForTest(context); 159c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 160c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 161c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 162c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee protected Context context() { 163c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new ContextWrapper(getContext()) { 164c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 165c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public File getDir(String name, int mode) { 166c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return mDelegate.getDir(name, mode); 167c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 168c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 169c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public void sendBroadcast(Intent intent, String receiverPermission) { 170c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee mDelegate.sendOrderedBroadcast(intent, receiverPermission); 171c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 172c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 173c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee public PackageManager getPackageManager() { 174c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return new MockPackageManager("com.test.package1", "com.test.package2"); 175c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 176c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee }; 177c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 178c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee 179c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee @Override 18066d989c439fbb82a5b40a7efffa2f28208cf11d8Jeff Sharkey protected String getCallingPackage_() { 181c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee return getContext().getPackageName(); 182c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 183aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda 184aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 185aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda CallLogInsertionHelper createCallLogInsertionHelper(Context context) { 186aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda return new CallLogInsertionHelper() { 187aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 188aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda public String getGeocodedLocationFor(String number, String countryIso) { 189aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda return "usa"; 190aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 191aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda 192aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda @Override 193aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda public void addComputedValues(ContentValues values) { 194aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda values.put(Calls.COUNTRY_ISO, "us"); 195aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda values.put(Calls.GEOCODED_LOCATION, "usa"); 196aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 197aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda }; 198aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda } 199c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee } 200c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee} 201