diff options
author | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 16:03:24 +0000 |
---|---|---|
committer | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 16:03:24 +0000 |
commit | 07dd227b3795124f7c4d085535713765580d2504 (patch) | |
tree | 8a5563e532ef8ad180f3a59da20e046b4d087f5d | |
parent | aedc715faccbe4151dc23d8ad5b657d26dbcd113 (diff) | |
download | chromium_src-07dd227b3795124f7c4d085535713765580d2504.zip chromium_src-07dd227b3795124f7c4d085535713765580d2504.tar.gz chromium_src-07dd227b3795124f7c4d085535713765580d2504.tar.bz2 |
Merge 284018 "[Android] Add meta-data to point to implementation..."
> [Android] Add meta-data to point to implementations of SmartClipProvider
>
> Also enhance SmartClipProviderTest to emulate what OEM will do.
>
> BUG=388961
> TEST=passed SmartClipProviderTest
>
> Review URL: https://codereview.chromium.org/391813006
TBR=changwan@chromium.org
Review URL: https://codereview.chromium.org/477923002
git-svn-id: svn://svn.chromium.org/chrome/branches/2062/src@289890 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java (renamed from chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java) | 73 | ||||
-rw-r--r-- | chrome/android/shell/java/AndroidManifest.xml | 3 | ||||
-rw-r--r-- | content/shell/android/shell_apk/AndroidManifest.xml | 2 |
3 files changed, 71 insertions, 7 deletions
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java index abfb652..c9a3bde 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/SmartClipProviderTest.java @@ -4,26 +4,36 @@ package org.chromium.chrome.browser; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.test.suitebuilder.annotation.MediumTest; +import android.view.View; +import android.view.ViewGroup; import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.Feature; import org.chromium.chrome.shell.ChromeShellActivity; import org.chromium.chrome.shell.ChromeShellTestBase; -import org.chromium.content.browser.ContentView; +import org.chromium.chrome.shell.R; import org.chromium.content.browser.test.util.CallbackHelper; +import java.lang.reflect.Method; import java.util.concurrent.TimeoutException; /** - * Tests for the ContentView. + * Tests for the SmartClipProvider. */ -public class ContentViewTest extends ChromeShellTestBase implements Handler.Callback { +public class SmartClipProviderTest extends ChromeShellTestBase implements Handler.Callback { + // This is a key for meta-data in the package manifest. It should NOT + // change, as OEMs will use it when they look for the SmartClipProvider + // interface. + private static final String SMART_CLIP_PROVIDER_KEY = + "org.chromium.content.browser.SMART_CLIP_PROVIDER"; private static class MyCallbackHelper extends CallbackHelper { public String getTitle() { @@ -66,6 +76,9 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call private MyCallbackHelper mCallbackHelper; private HandlerThread mHandlerThread; private Handler mHandler; + private Class<?> mSmartClipProviderClass; + private Method mSetSmartClipResultHandlerMethod; + private Method mExtractSmartClipDataMethod; @Override public void setUp() throws Exception { @@ -75,6 +88,14 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call mHandlerThread = new HandlerThread("ContentViewTest thread"); mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper(), this); + + mSmartClipProviderClass = getSmartClipProviderClass(); + assertNotNull(mSmartClipProviderClass); + mSetSmartClipResultHandlerMethod = mSmartClipProviderClass.getDeclaredMethod( + "setSmartClipResultHandler", new Class[] { Handler.class }); + mExtractSmartClipDataMethod = mSmartClipProviderClass.getDeclaredMethod( + "extractSmartClipData", + new Class[] { Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE }); } @Override @@ -101,16 +122,54 @@ public class ContentViewTest extends ChromeShellTestBase implements Handler.Call return true; } + // Create SmartClipProvider interface from package meta-data. + private Class<?> getSmartClipProviderClass() throws Exception { + ApplicationInfo ai = mActivity.getPackageManager().getApplicationInfo( + mActivity.getPackageName(), PackageManager.GET_META_DATA); + Bundle bundle = ai.metaData; + String className = bundle.getString(SMART_CLIP_PROVIDER_KEY); + assertNotNull(className); + return Class.forName(className); + } + + // Returns the first smart clip provider under the root view using DFS. + private Object findSmartClipProvider(View v) { + if (mSmartClipProviderClass.isInstance(v)) { + return v; + } else if (v instanceof ViewGroup) { + ViewGroup viewGroup = (ViewGroup) v; + int count = viewGroup.getChildCount(); + for (int i = 0; i < count; ++i) { + View c = viewGroup.getChildAt(i); + Object found = findSmartClipProvider(c); + if (found != null) + return found; + } + } + return null; + } + @MediumTest @Feature({"SmartClip"}) public void testSmartClipDataCallback() throws InterruptedException, TimeoutException { ThreadUtils.runOnUiThreadBlocking(new Runnable() { @Override public void run() { - ContentView cv = (ContentView) getActivity().getActiveTab().getView(); - assertNotNull(cv); - cv.setSmartClipResultHandler(mHandler); - cv.extractSmartClipData(10, 20, 100, 70); + // This emulates what OEM will be doing when they want to call + // functions on SmartClipProvider through view hierarchy. + + // Implementation of SmartClipProvider such as ContentView or + // JellyBeanContentView can be found somewhere under content_container. + Object scp = findSmartClipProvider( + getActivity().findViewById(R.id.content_container)); + assertNotNull(scp); + try { + mSetSmartClipResultHandlerMethod.invoke(scp, mHandler); + mExtractSmartClipDataMethod.invoke(scp, 10, 20, 100, 70); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } } }); mCallbackHelper.waitForCallback(0, 1); // call count: 0 --> 1 diff --git a/chrome/android/shell/java/AndroidManifest.xml b/chrome/android/shell/java/AndroidManifest.xml index 476deb9..3499dd3 100644 --- a/chrome/android/shell/java/AndroidManifest.xml +++ b/chrome/android/shell/java/AndroidManifest.xml @@ -198,5 +198,8 @@ <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> </intent-filter> </receiver> + <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER" + android:value="org.chromium.content.browser.SmartClipProvider" /> + </application> </manifest> diff --git a/content/shell/android/shell_apk/AndroidManifest.xml b/content/shell/android/shell_apk/AndroidManifest.xml index 3cd5a12..83f50e8 100644 --- a/content/shell/android/shell_apk/AndroidManifest.xml +++ b/content/shell/android/shell_apk/AndroidManifest.xml @@ -95,6 +95,8 @@ android:permission="org.chromium.content_shell.permission.SANDBOX" android:isolatedProcess="true" android:exported="false" /> + <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER" + android:value="org.chromium.content.browser.SmartClipProvider" /> </application> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> |