1e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck/* 2e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Copyright (C) 2011 The Android Open Source Project 3e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * 4e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * you may not use this file except in compliance with the License. 6e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * You may obtain a copy of the License at 7e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * 8e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * http://www.apache.org/licenses/LICENSE-2.0 9e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * 10e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Unless required by applicable law or agreed to in writing, software 11e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * distributed under the License is distributed on an "AS IS" BASIS, 12e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * See the License for the specific language governing permissions and 14e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * limitations under the License. 15e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck */ 16e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 17e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckpackage com.android.browser.tests.utils; 18e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 19e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport com.google.android.collect.Maps; 20e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 21e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.content.ContentProvider; 22e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.content.ContentResolver; 23e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.content.Context; 24e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.content.IContentProvider; 25e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.database.ContentObserver; 26e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport android.net.Uri; 27e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 28e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckimport java.util.Map; 29e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 30e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reckpublic class MockContentResolver2 extends ContentResolver { 31e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 32e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck Map<String, ContentProvider> mProviders; 33e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck private final MockObserverNode mRootNode = new MockObserverNode(""); 34e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 35e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /* 36e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Creates a local map of providers. This map is used instead of the global map when an 37e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * API call tries to acquire a provider. 38e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck */ 39e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public MockContentResolver2() { 40e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck super(null); 41e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck mProviders = Maps.newHashMap(); 42e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 43e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 44e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /** 45e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Adds access to a provider based on its authority 46e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * 47e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * @param name The authority name associated with the provider. 48e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * @param provider An instance of {@link android.content.ContentProvider} or one of its 49e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * subclasses, or null. 50e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck */ 51e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public void addProvider(String name, ContentProvider provider) { 52e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 53e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /* 54e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Maps the authority to the provider locally. 55e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck */ 56e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck mProviders.put(name, provider); 57e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 58e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 59e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /** @hide */ 60e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck @Override 61e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck protected IContentProvider acquireProvider(Context context, String name) { 62e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck return acquireExistingProvider(context, name); 63e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 64e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 65e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /** @hide */ 66e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck @Override 67e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck protected IContentProvider acquireExistingProvider(Context context, String name) { 68e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 69e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /* 70e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck * Gets the content provider from the local map 71e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck */ 72e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck final ContentProvider provider = mProviders.get(name); 73e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 74e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck if (provider != null) { 75e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck return provider.getIContentProvider(); 76e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } else { 77e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck return null; 78e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 79e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 80e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 81e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck /** @hide */ 82e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck @Override 83e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public boolean releaseProvider(IContentProvider provider) { 84e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck return true; 85e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 86e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 875bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn /** @hide */ 885bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn protected IContentProvider acquireUnstableProvider(Context c, String name) { 895bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn return acquireProvider(c, name); 905bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn } 915bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn 925bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn /** @hide */ 935bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn public boolean releaseUnstableProvider(IContentProvider icp) { 945bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn return releaseProvider(icp); 955bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn } 965bc61e23008567a9d934848359439d8936aa3482Dianne Hackborn 97e7ac37e77ad8605b5e730fe48f088bb77df4b57aDianne Hackborn /** @hide */ 98e7ac37e77ad8605b5e730fe48f088bb77df4b57aDianne Hackborn public void unstableProviderDied(IContentProvider icp) { 99e7ac37e77ad8605b5e730fe48f088bb77df4b57aDianne Hackborn } 100e7ac37e77ad8605b5e730fe48f088bb77df4b57aDianne Hackborn 101e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck @Override 102e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public void notifyChange(Uri uri, ContentObserver observer, 103e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck boolean syncToNetwork) { 104e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck mRootNode.notifyMyObservers(uri, 0, observer, false); 105e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 106e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 107e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public void safeRegisterContentObserver(Uri uri, boolean notifyForDescendents, 108e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck ContentObserver observer) { 109e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck mRootNode.addObserver(uri, observer, notifyForDescendents); 110e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 111e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 112e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck public void safeUnregisterContentObserver(ContentObserver observer) { 113e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck mRootNode.removeObserver(observer); 114e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck } 115e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck 116e6adaf57a9a4f05e88505e4a86c565b5f18a1d3bJohn Reck} 117