From e69c55ae7e35e32ca237649f66a925a136d98932 Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Wed, 21 May 2014 16:16:05 +0800 Subject: [PATCH 01/12] [Android][Shared Core] Add create internal script This script is used to create xwalk core internal from current xwalk core. The reason to scripten this process is to make it easy for rebasing. The whole feature for shared xwalk core is so complex that it will take amount of time to review. The rebase for moving core to core_internal will be a nightmare then. --- create_internal.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 create_internal.py diff --git a/create_internal.py b/create_internal.py new file mode 100644 index 0000000000..9ce32d7a01 --- /dev/null +++ b/create_internal.py @@ -0,0 +1,69 @@ +import os +import re +import shutil + + +xwalk_path = os.path.dirname(__file__) +core_path = os.path.join(xwalk_path, 'runtime', 'android', 'core') +core_internal_path = os.path.join(xwalk_path, 'runtime', 'android', 'core_internal') +extension_path = os.path.join(xwalk_path, 'extensions', 'android', 'java') + +class_list = [ + 'XWalkJavascriptResultHandler', + 'XWalkNavigationHistory', + 'XWalkPreferences', + 'XWalkUIClient', + 'XWalkJavascriptResult', + 'XWalkNavigationItem', + 'XWalkResourceClient', + 'XWalkView' +] + + +def RenamePackage(src_root, orig): + for d, _, files in os.walk(os.path.join(src_root, 'src')): + for f in files: + if os.path.splitext(f)[1] == '.java': + in_f = open(os.path.join(d, f), 'r') + content = in_f.readlines() + in_f.close() + out_f = open(os.path.join(d, f), 'w') + for line in content: + out_f.write(line.replace(orig, '%s.internal' % orig)) + out_f.close() + orig_dir = os.path.join(src_root, 'src', orig.replace('.', os.path.sep)) + new_dir = os.path.join(src_root, 'src', orig.replace('.', os.path.sep), 'internal') + temp_dir = orig_dir + 'tmp' + if os.path.isdir(new_dir): + shutil.rmtree(new_dir) + if os.path.isdir(temp_dir): + shutil.rmtree(temp_dir) + os.rename(orig_dir, temp_dir) + os.mkdir(orig_dir) + os.rename(temp_dir, new_dir) + + +def RenameClass(src_root, orig): + for d, _, files in os.walk(os.path.join(src_root, 'src')): + for f in files: + if os.path.splitext(f)[1] == '.java': + in_f = open(os.path.join(d, f), 'r') + content = in_f.readlines() + in_f.close() + if os.path.splitext(f)[0] == orig: + os.remove(os.path.join(d, f)) + f = '%sInternal.java' % orig + out_f = open(os.path.join(d, f), 'w') + for line in content: + out_f.write(re.sub(r'\b%s\b' % orig, '%sInternal' % orig, line)) + out_f.close() + + +for clazz in class_list: + RenameClass(core_path, clazz) +RenamePackage(core_path, 'org.xwalk.core') +RenamePackage(extension_path, 'org.xwalk.core') +if os.path.isdir(core_internal_path): + shutil.rmtree(core_internal_path) +os.rename(core_path, core_internal_path) + From 6471e0594670c4f0f00f020c39045320d6f13a7f Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Wed, 21 May 2014 16:19:46 +0800 Subject: [PATCH 02/12] [Android][Shared Core] Move xwalk core to xwalk core shell The commit is generated by create_internal.py. It contains renaming the package and rename the classes Embedding API exposes with "Intenal" suffix appended. --- .../extensions/XWalkExtensionAndroid.java | 2 +- .../res/values/strings.xml | 0 .../internal}/AndroidProtocolHandler.java | 2 +- .../core/internal}/DownloadListener.java | 2 +- .../internal}/ErrorCodeConversionHelper.java | 34 +++---- .../internal}/InMemorySharedPreferences.java | 2 +- .../internal}/InterceptedRequestData.java | 2 +- .../core/internal}/JavascriptInterface.java | 4 +- .../core/internal}/PageLoadListener.java | 2 +- .../src/org/xwalk/core/internal}/SslUtil.java | 2 +- .../org/xwalk/core/internal}/XWalkClient.java | 92 +++++++++--------- .../xwalk/core/internal}/XWalkContent.java | 36 +++---- .../XWalkContentVideoViewClient.java | 8 +- .../core/internal}/XWalkContentsClient.java | 12 +-- .../internal}/XWalkContentsClientBridge.java | 34 +++---- .../XWalkContentsClientCallbackHelper.java | 2 +- .../XWalkContentsIoThreadClient.java | 2 +- .../core/internal}/XWalkCookieManager.java | 2 +- .../core/internal}/XWalkDevToolsServer.java | 2 +- .../internal}/XWalkDownloadListenerImpl.java | 8 +- .../XWalkGeolocationPermissions.java | 2 +- .../core/internal}/XWalkHttpAuthHandler.java | 2 +- .../internal}/XWalkInternalResources.java | 6 +- ...XWalkJavascriptResultHandlerInternal.java} | 6 +- .../XWalkJavascriptResultInternal.java} | 8 +- .../internal}/XWalkLaunchScreenManager.java | 6 +- ...XWalkMediaPlayerResourceLoadingFilter.java | 2 +- .../internal}/XWalkNavigationHandler.java | 2 +- .../internal}/XWalkNavigationHandlerImpl.java | 4 +- .../XWalkNavigationHistoryInternal.java} | 32 +++---- .../XWalkNavigationItemInternal.java} | 14 +-- .../internal}/XWalkNotificationService.java | 2 +- .../XWalkNotificationServiceImpl.java | 12 +-- .../internal/XWalkPreferencesInternal.java} | 16 ++-- .../XWalkResourceClientInternal.java} | 36 +++---- .../xwalk/core/internal}/XWalkSettings.java | 2 +- .../core/internal/XWalkUIClientInternal.java} | 60 ++++++------ .../core/internal}/XWalkViewDelegate.java | 4 +- .../core/internal/XWalkViewInternal.java} | 96 +++++++++---------- .../core/internal}/XWalkWebChromeClient.java | 42 ++++---- .../internal}/XWalkWebContentsDelegate.java | 2 +- .../XWalkWebContentsDelegateAdapter.java | 2 +- .../extension/XWalkCoreExtensionBridge.java | 6 +- .../internal}/extension/XWalkExtension.java | 2 +- .../extension/XWalkExtensionBridge.java | 2 +- .../XWalkExtensionBridgeFactory.java | 2 +- .../extension/XWalkExtensionClientImpl.java | 2 +- .../extension/XWalkExtensionContext.java | 2 +- .../XWalkExtensionContextWrapper.java | 2 +- .../extension/XWalkExtensionManager.java | 14 +-- .../extension/api/DisplayManagerJBMR1.java | 2 +- .../extension/api/DisplayManagerNull.java | 2 +- .../xwalk/core/internal}/extension/api/OWNERS | 0 .../extension/api/XWalkDisplayManager.java | 2 +- .../api/contacts/ContactConstants.java | 2 +- .../api/contacts/ContactEventListener.java | 2 +- .../extension/api/contacts/ContactFinder.java | 2 +- .../extension/api/contacts/ContactJson.java | 2 +- .../extension/api/contacts/ContactSaver.java | 4 +- .../extension/api/contacts/ContactUtils.java | 2 +- .../extension/api/contacts/Contacts.java | 6 +- .../extension/api/contacts/contacts_api.js | 0 .../DeviceCapabilities.java | 6 +- .../DeviceCapabilitiesCPU.java | 4 +- .../DeviceCapabilitiesCodecs.java | 4 +- .../DeviceCapabilitiesDisplay.java | 6 +- .../DeviceCapabilitiesMemory.java | 4 +- .../DeviceCapabilitiesStorage.java | 4 +- .../api/device_capabilities/MediaCodec.java | 2 +- .../device_capabilities/MediaCodecNull.java | 2 +- .../device_capabilities/XWalkMediaCodec.java | 2 +- .../device_capabilities_api.js | 0 .../launchscreen/LaunchScreenExtension.java | 8 +- .../extension/api/messaging/Messaging.java | 10 +- .../api/messaging/MessagingHelpers.java | 6 +- .../api/messaging/MessagingManager.java | 10 +- .../api/messaging/MessagingSmsConstMaps.java | 4 +- .../api/messaging/MessagingSmsConsts.java | 2 +- .../api/messaging/MessagingSmsManager.java | 4 +- .../extension/api/messaging/messaging_api.js | 0 .../extension/api/presentation/OWNERS | 0 .../presentation/PresentationExtension.java | 8 +- .../api/presentation/PresentationView.java | 2 +- .../presentation/PresentationViewJBMR1.java | 2 +- .../presentation/PresentationViewNull.java | 2 +- .../XWalkPresentationContent.java | 18 ++-- .../ScreenOrientationExtension.java | 6 +- .../src/org/xwalk/core/internal}/package.html | 0 .../strings/android_xwalk_strings.grd | 0 89 files changed, 391 insertions(+), 391 deletions(-) rename extensions/android/java/src/org/xwalk/core/{ => internal}/extensions/XWalkExtensionAndroid.java (98%) rename runtime/android/{core => core_internal}/res/values/strings.xml (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/AndroidProtocolHandler.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/DownloadListener.java (91%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/ErrorCodeConversionHelper.java (76%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/InMemorySharedPreferences.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/InterceptedRequestData.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/JavascriptInterface.java (85%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/PageLoadListener.java (88%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/SslUtil.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkClient.java (77%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContent.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContentVideoViewClient.java (89%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContentsClient.java (94%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContentsClientBridge.java (94%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContentsClientCallbackHelper.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkContentsIoThreadClient.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkCookieManager.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkDevToolsServer.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkDownloadListenerImpl.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkGeolocationPermissions.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkHttpAuthHandler.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkInternalResources.java (97%) rename runtime/android/{core/src/org/xwalk/core/XWalkJavascriptResultHandler.java => core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java} (84%) rename runtime/android/{core/src/org/xwalk/core/XWalkJavascriptResult.java => core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java} (77%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkLaunchScreenManager.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkMediaPlayerResourceLoadingFilter.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkNavigationHandler.java (93%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkNavigationHandlerImpl.java (98%) rename runtime/android/{core/src/org/xwalk/core/XWalkNavigationHistory.java => core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java} (71%) rename runtime/android/{core/src/org/xwalk/core/XWalkNavigationItem.java => core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java} (71%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkNotificationService.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkNotificationServiceImpl.java (97%) rename runtime/android/{core/src/org/xwalk/core/XWalkPreferences.java => core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java} (92%) rename runtime/android/{core/src/org/xwalk/core/XWalkResourceClient.java => core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java} (76%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkSettings.java (99%) rename runtime/android/{core/src/org/xwalk/core/XWalkUIClient.java => core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java} (84%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkViewDelegate.java (98%) rename runtime/android/{core/src/org/xwalk/core/XWalkView.java => core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java} (88%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkWebChromeClient.java (90%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkWebContentsDelegate.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/XWalkWebContentsDelegateAdapter.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkCoreExtensionBridge.java (91%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtension.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionBridge.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionBridgeFactory.java (92%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionClientImpl.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionContext.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionContextWrapper.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/XWalkExtensionManager.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/DisplayManagerJBMR1.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/DisplayManagerNull.java (93%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/OWNERS (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/XWalkDisplayManager.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactConstants.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactEventListener.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactFinder.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactJson.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactSaver.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/ContactUtils.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/Contacts.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/contacts/contacts_api.js (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilities.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilitiesCPU.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java (81%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilitiesMemory.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/DeviceCapabilitiesStorage.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/MediaCodec.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/MediaCodecNull.java (85%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/XWalkMediaCodec.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/device_capabilities/device_capabilities_api.js (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/launchscreen/LaunchScreenExtension.java (86%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/Messaging.java (93%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/MessagingHelpers.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/MessagingManager.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/MessagingSmsConstMaps.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/MessagingSmsConsts.java (97%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/MessagingSmsManager.java (99%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/messaging/messaging_api.js (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/OWNERS (100%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/PresentationExtension.java (98%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/PresentationView.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/PresentationViewJBMR1.java (96%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/PresentationViewNull.java (92%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/presentation/XWalkPresentationContent.java (82%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/extension/api/screenorientation/ScreenOrientationExtension.java (95%) rename runtime/android/{core/src/org/xwalk/core => core_internal/src/org/xwalk/core/internal}/package.html (100%) rename runtime/android/{core => core_internal}/strings/android_xwalk_strings.grd (100%) diff --git a/extensions/android/java/src/org/xwalk/core/extensions/XWalkExtensionAndroid.java b/extensions/android/java/src/org/xwalk/core/internal/extensions/XWalkExtensionAndroid.java similarity index 98% rename from extensions/android/java/src/org/xwalk/core/extensions/XWalkExtensionAndroid.java rename to extensions/android/java/src/org/xwalk/core/internal/extensions/XWalkExtensionAndroid.java index ea52ff12e6..5198ba72cb 100644 --- a/extensions/android/java/src/org/xwalk/core/extensions/XWalkExtensionAndroid.java +++ b/extensions/android/java/src/org/xwalk/core/internal/extensions/XWalkExtensionAndroid.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extensions; +package org.xwalk.core.internal.extensions; import android.util.Log; diff --git a/runtime/android/core/res/values/strings.xml b/runtime/android/core_internal/res/values/strings.xml similarity index 100% rename from runtime/android/core/res/values/strings.xml rename to runtime/android/core_internal/res/values/strings.xml diff --git a/runtime/android/core/src/org/xwalk/core/AndroidProtocolHandler.java b/runtime/android/core_internal/src/org/xwalk/core/internal/AndroidProtocolHandler.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/AndroidProtocolHandler.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/AndroidProtocolHandler.java index 1373072725..d4cf78ab79 100644 --- a/runtime/android/core/src/org/xwalk/core/AndroidProtocolHandler.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/AndroidProtocolHandler.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.Context; import android.content.res.AssetManager; diff --git a/runtime/android/core/src/org/xwalk/core/DownloadListener.java b/runtime/android/core_internal/src/org/xwalk/core/internal/DownloadListener.java similarity index 91% rename from runtime/android/core/src/org/xwalk/core/DownloadListener.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/DownloadListener.java index f2c3771e79..79ce37e318 100644 --- a/runtime/android/core/src/org/xwalk/core/DownloadListener.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/DownloadListener.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; interface DownloadListener { diff --git a/runtime/android/core/src/org/xwalk/core/ErrorCodeConversionHelper.java b/runtime/android/core_internal/src/org/xwalk/core/internal/ErrorCodeConversionHelper.java similarity index 76% rename from runtime/android/core/src/org/xwalk/core/ErrorCodeConversionHelper.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/ErrorCodeConversionHelper.java index ea2d849a5a..050f0dafca 100644 --- a/runtime/android/core/src/org/xwalk/core/ErrorCodeConversionHelper.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/ErrorCodeConversionHelper.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.net.NetError; @@ -15,41 +15,41 @@ static int convertErrorCode(int netError) { // These will be handled by the default case, ERROR_UNKNOWN. switch (netError) { case NetError.ERR_UNSUPPORTED_AUTH_SCHEME: - return XWalkResourceClient.ERROR_UNSUPPORTED_AUTH_SCHEME; + return XWalkResourceClientInternal.ERROR_UNSUPPORTED_AUTH_SCHEME; case NetError.ERR_INVALID_AUTH_CREDENTIALS: case NetError.ERR_MISSING_AUTH_CREDENTIALS: case NetError.ERR_MISCONFIGURED_AUTH_ENVIRONMENT: - return XWalkResourceClient.ERROR_AUTHENTICATION; + return XWalkResourceClientInternal.ERROR_AUTHENTICATION; case NetError.ERR_TOO_MANY_REDIRECTS: - return XWalkResourceClient.ERROR_REDIRECT_LOOP; + return XWalkResourceClientInternal.ERROR_REDIRECT_LOOP; case NetError.ERR_UPLOAD_FILE_CHANGED: - return XWalkResourceClient.ERROR_FILE_NOT_FOUND; + return XWalkResourceClientInternal.ERROR_FILE_NOT_FOUND; case NetError.ERR_INVALID_URL: - return XWalkResourceClient.ERROR_BAD_URL; + return XWalkResourceClientInternal.ERROR_BAD_URL; case NetError.ERR_DISALLOWED_URL_SCHEME: case NetError.ERR_UNKNOWN_URL_SCHEME: - return XWalkResourceClient.ERROR_UNSUPPORTED_SCHEME; + return XWalkResourceClientInternal.ERROR_UNSUPPORTED_SCHEME; case NetError.ERR_IO_PENDING: case NetError.ERR_NETWORK_IO_SUSPENDED: - return XWalkResourceClient.ERROR_IO; + return XWalkResourceClientInternal.ERROR_IO; case NetError.ERR_CONNECTION_TIMED_OUT: case NetError.ERR_TIMED_OUT: - return XWalkResourceClient.ERROR_TIMEOUT; + return XWalkResourceClientInternal.ERROR_TIMEOUT; case NetError.ERR_FILE_TOO_BIG: - return XWalkResourceClient.ERROR_FILE; + return XWalkResourceClientInternal.ERROR_FILE; case NetError.ERR_HOST_RESOLVER_QUEUE_TOO_LARGE: case NetError.ERR_INSUFFICIENT_RESOURCES: case NetError.ERR_OUT_OF_MEMORY: - return XWalkResourceClient.ERROR_TOO_MANY_REQUESTS; + return XWalkResourceClientInternal.ERROR_TOO_MANY_REQUESTS; case NetError.ERR_CONNECTION_CLOSED: case NetError.ERR_CONNECTION_RESET: @@ -57,14 +57,14 @@ static int convertErrorCode(int netError) { case NetError.ERR_CONNECTION_ABORTED: case NetError.ERR_CONNECTION_FAILED: case NetError.ERR_SOCKET_NOT_CONNECTED: - return XWalkResourceClient.ERROR_CONNECT; + return XWalkResourceClientInternal.ERROR_CONNECT; case NetError.ERR_INTERNET_DISCONNECTED: case NetError.ERR_ADDRESS_INVALID: case NetError.ERR_ADDRESS_UNREACHABLE: case NetError.ERR_NAME_NOT_RESOLVED: case NetError.ERR_NAME_RESOLUTION_FAILED: - return XWalkResourceClient.ERROR_HOST_LOOKUP; + return XWalkResourceClientInternal.ERROR_HOST_LOOKUP; case NetError.ERR_SSL_PROTOCOL_ERROR: case NetError.ERR_SSL_CLIENT_AUTH_CERT_NEEDED: @@ -81,13 +81,13 @@ static int convertErrorCode(int netError) { case NetError.ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY: case NetError.ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: case NetError.ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: - return XWalkResourceClient.ERROR_FAILED_SSL_HANDSHAKE; + return XWalkResourceClientInternal.ERROR_FAILED_SSL_HANDSHAKE; case NetError.ERR_PROXY_AUTH_UNSUPPORTED: case NetError.ERR_PROXY_AUTH_REQUESTED: case NetError.ERR_PROXY_CONNECTION_FAILED: case NetError.ERR_UNEXPECTED_PROXY_AUTH: - return XWalkResourceClient.ERROR_PROXY_AUTHENTICATION; + return XWalkResourceClientInternal.ERROR_PROXY_AUTHENTICATION; // The certificate errors are handled by onReceivedSslError // and don't need to be reported here. @@ -101,10 +101,10 @@ static int convertErrorCode(int netError) { case NetError.ERR_CERT_INVALID: case NetError.ERR_CERT_WEAK_SIGNATURE_ALGORITHM: case NetError.ERR_CERT_NON_UNIQUE_NAME: - return XWalkResourceClient.ERROR_OK; + return XWalkResourceClientInternal.ERROR_OK; default: - return XWalkResourceClient.ERROR_UNKNOWN; + return XWalkResourceClientInternal.ERROR_UNKNOWN; } } } diff --git a/runtime/android/core/src/org/xwalk/core/InMemorySharedPreferences.java b/runtime/android/core_internal/src/org/xwalk/core/internal/InMemorySharedPreferences.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/InMemorySharedPreferences.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/InMemorySharedPreferences.java index 37747094ec..dc39b201d3 100644 --- a/runtime/android/core/src/org/xwalk/core/InMemorySharedPreferences.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/InMemorySharedPreferences.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.SharedPreferences; diff --git a/runtime/android/core/src/org/xwalk/core/InterceptedRequestData.java b/runtime/android/core_internal/src/org/xwalk/core/internal/InterceptedRequestData.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/InterceptedRequestData.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/InterceptedRequestData.java index da48833d81..35e23112ef 100644 --- a/runtime/android/core/src/org/xwalk/core/InterceptedRequestData.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/InterceptedRequestData.java @@ -3,7 +3,7 @@ // found in the LICENSE file. // This file is imported from the upstream. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/JavascriptInterface.java b/runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java similarity index 85% rename from runtime/android/core/src/org/xwalk/core/JavascriptInterface.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java index af18ec6847..1c36f37d4c 100644 --- a/runtime/android/core/src/org/xwalk/core/JavascriptInterface.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java @@ -3,7 +3,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -14,7 +14,7 @@ * Marks a method as being able to be exposed to JavaScript. This is used for * safety purposes so that only explicitly marked methods get exposed instead * of every method in a class. - * See the explanation for {@link XWalkView#addJavascriptInterface(Object, String)} + * See the explanation for {@link XWalkViewInternal#addJavascriptInterface(Object, String)} * about the usage. */ @SuppressWarnings("javadoc") diff --git a/runtime/android/core/src/org/xwalk/core/PageLoadListener.java b/runtime/android/core_internal/src/org/xwalk/core/internal/PageLoadListener.java similarity index 88% rename from runtime/android/core/src/org/xwalk/core/PageLoadListener.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/PageLoadListener.java index e5f2ad79d7..758ac17327 100644 --- a/runtime/android/core/src/org/xwalk/core/PageLoadListener.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/PageLoadListener.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; interface PageLoadListener { diff --git a/runtime/android/core/src/org/xwalk/core/SslUtil.java b/runtime/android/core_internal/src/org/xwalk/core/internal/SslUtil.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/SslUtil.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/SslUtil.java index 430daf7746..398c244e1f 100644 --- a/runtime/android/core/src/org/xwalk/core/SslUtil.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/SslUtil.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.net.http.SslCertificate; import android.net.http.SslError; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkClient.java similarity index 77% rename from runtime/android/core/src/org/xwalk/core/XWalkClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkClient.java index 140f47fc49..c6408a6de3 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkClient.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.app.AlertDialog; @@ -33,7 +33,7 @@ /** * It's the Internal class to handle legacy resource related callbacks not - * handled by XWalkResourceClient. + * handled by XWalkResourceClientInternal. * * @hide */ @@ -41,27 +41,27 @@ public class XWalkClient { private Context mContext; private AlertDialog mDialog; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; - public XWalkClient(XWalkView view) { + public XWalkClient(XWalkViewInternal view) { mContext = view.getContext(); mXWalkView = view; } /** * Give the host application a chance to take over the control when a new - * url is about to be loaded in the current XWalkView. If XWalkClient is not - * provided, by default XWalkView will ask Activity Manager to choose the + * url is about to be loaded in the current XWalkViewInternal. If XWalkClient is not + * provided, by default XWalkViewInternal will ask Activity Manager to choose the * proper handler for the url. If XWalkClient is provided, return true * means the host application handles the url, while return false means the - * current XWalkView handles the url. + * current XWalkViewInternal handles the url. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param url The url to be loaded. - * @return True if the host application wants to leave the current XWalkView + * @return True if the host application wants to leave the current XWalkViewInternal * and handle the url itself, otherwise return false. */ - public boolean shouldOverrideUrlLoading(XWalkView view, String url) { + public boolean shouldOverrideUrlLoading(XWalkViewInternal view, String url) { return false; } @@ -72,38 +72,38 @@ public boolean shouldOverrideUrlLoading(XWalkView view, String url) { * means that onPageStarted will not be called when the contents of an * embedded frame changes, i.e. clicking a link whose target is an iframe. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param url The url to be loaded. */ - public void onPageStarted(XWalkView view, String url) { + public void onPageStarted(XWalkViewInternal view, String url) { } /** * Notify the host application that a page has finished loading. This method * is called only for main frame. When onPageFinished() is called, the * rendering picture may not be updated yet. To get the notification for the - * new Picture, use {@link XWalkView.PictureListener#onNewPicture}. + * new Picture, use {@link XWalkViewInternal.PictureListener#onNewPicture}. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param url The url of the page. */ - public void onPageFinished(XWalkView view, String url) { + public void onPageFinished(XWalkViewInternal view, String url) { } /** - * Notify the host application that the renderer of XWalkView is hung. + * Notify the host application that the renderer of XWalkViewInternal is hung. * - * @param view The XWalkView on which the render is hung. + * @param view The XWalkViewInternal on which the render is hung. */ - public void onRendererUnresponsive(XWalkView view) { + public void onRendererUnresponsive(XWalkViewInternal view) { } /** - * Notify the host application that the renderer of XWalkView is no longer hung. + * Notify the host application that the renderer of XWalkViewInternal is no longer hung. * - * @param view The XWalkView which becomes responsive now. + * @param view The XWalkViewInternal which becomes responsive now. */ - public void onRendererResponsive(XWalkView view) { + public void onRendererResponsive(XWalkViewInternal view) { } /** @@ -112,14 +112,14 @@ public void onRendererResponsive(XWalkView view) { * trying to load the resource. The default behavior is to send the cancel * message. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param cancelMsg The message to send if the host wants to cancel * @param continueMsg The message to send if the host wants to continue - * @deprecated This method is no longer called. When the XWalkView encounters + * @deprecated This method is no longer called. When the XWalkViewInternal encounters * a redirect loop, it will cancel the load. */ @Deprecated - public void onTooManyRedirects(XWalkView view, Message cancelMsg, + public void onTooManyRedirects(XWalkViewInternal view, Message cancelMsg, Message continueMsg) { cancelMsg.sendToTarget(); } @@ -129,11 +129,11 @@ public void onTooManyRedirects(XWalkView view, Message cancelMsg, * requested page was a result of a POST. The default is to not resend the * data. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param dontResend The message to send if the browser should not resend * @param resend The message to send if the browser should resend data */ - public void onFormResubmission(XWalkView view, Message dontResend, + public void onFormResubmission(XWalkViewInternal view, Message dontResend, Message resend) { dontResend.sendToTarget(); } @@ -141,11 +141,11 @@ public void onFormResubmission(XWalkView view, Message dontResend, /** * Notify the host application to update its visited links database. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param url The url being visited. * @param isReload True if this url is being reloaded. */ - public void doUpdateVisitedHistory(XWalkView view, String url, + public void doUpdateVisitedHistory(XWalkViewInternal view, String url, boolean isReload) { } @@ -156,13 +156,13 @@ public void doUpdateVisitedHistory(XWalkView view, String url, * response to future SSL errors. The default behavior is to cancel the * load. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param callback The callback class. Passing 'true' means accepting the * ssl error and continue to load. Passing 'false' means * forbidding to load the web page. * @param error The SSL error object. */ - public void onReceivedSslError(XWalkView view, ValueCallback callback, + public void onReceivedSslError(XWalkViewInternal view, ValueCallback callback, SslError error) { final ValueCallback valueCallback = callback; AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); @@ -186,11 +186,11 @@ public void onCancel(DialogInterface dialog) { /** * Notify the host application that an SSL error occurred while loading a - * resource, but the XWalkView chose to proceed anyway based on a + * resource, but the XWalkViewInternal chose to proceed anyway based on a * decision retained from a previous response to onReceivedSslError(). * @hide */ - public void onProceededAfterSslError(XWalkView view, SslError error) { + public void onProceededAfterSslError(XWalkViewInternal view, SslError error) { } /** @@ -201,7 +201,7 @@ public void onProceededAfterSslError(XWalkView view, SslError error) { * connection is suspended and waiting for the response. The * default behavior is to cancel, returning no client certificate. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param handler A ClientCertRequestHandler object that will * handle the user's response. * @param host_and_port The host and port of the requesting server. @@ -210,7 +210,7 @@ public void onProceededAfterSslError(XWalkView view, SslError error) { */ // TODO: comment this method temporarily, will implemtent later when all // dependencies are resovled. - // public void onReceivedClientCertRequest(XWalkView view, + // public void onReceivedClientCertRequest(XWalkViewInternal view, // ClientCertRequestHandler handler, String host_and_port) { // handler.cancel(); // } @@ -219,13 +219,13 @@ public void onProceededAfterSslError(XWalkView view, SslError error) { * Notify the host application to handle an authentication request. The * default behavior is to cancel the request. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param handler The XWalkHttpAuthHandler that will handle the user's response. * @param host The host requiring authentication. * @param realm A description to help store user credentials for future * visits. */ - public void onReceivedHttpAuthRequest(XWalkView view, + public void onReceivedHttpAuthRequest(XWalkViewInternal view, XWalkHttpAuthHandler handler, String host, String realm) { if (view == null) return; @@ -263,30 +263,30 @@ public void onCancel(DialogInterface dialog) { /** * Give the host application a chance to handle the key event synchronously. * e.g. menu shortcut key events need to be filtered this way. If return - * true, XWalkView will not handle the key event. If return false, XWalkView + * true, XWalkViewInternal will not handle the key event. If return false, XWalkViewInternal * will always handle the key event, so none of the super in the view chain * will see the key event. The default behavior returns false. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param event The key event. * @return True if the host application wants to handle the key event * itself, otherwise return false */ - public boolean shouldOverrideKeyEvent(XWalkView view, KeyEvent event) { + public boolean shouldOverrideKeyEvent(XWalkViewInternal view, KeyEvent event) { return false; } /** - * Notify the host application that a key was not handled by the XWalkView. - * Except system keys, XWalkView always consumes the keys in the normal flow + * Notify the host application that a key was not handled by the XWalkViewInternal. + * Except system keys, XWalkViewInternal always consumes the keys in the normal flow * or if shouldOverrideKeyEvent returns true. This is called asynchronously * from where the key is dispatched. It gives the host application a chance * to handle the unhandled key events. * - * @param view The XWalkView that is initiating the callback. + * @param view The XWalkViewInternal that is initiating the callback. * @param event The key event. */ - public void onUnhandledKeyEvent(XWalkView view, KeyEvent event) { + public void onUnhandledKeyEvent(XWalkViewInternal view, KeyEvent event) { // TODO: Commment the below code for compile // ViewRootImpl root = view.getViewRootImpl(); // if (root != null) { @@ -297,18 +297,18 @@ public void onUnhandledKeyEvent(XWalkView view, KeyEvent event) { /** * Notify the host application that a request to automatically log in the * user has been processed. - * @param view The XWalkView requesting the login. + * @param view The XWalkViewInternal requesting the login. * @param realm The account realm used to look up accounts. * @param account An optional account. If not null, the account should be * checked against accounts on the device. If it is a valid * account, it should be used to log in the user. * @param args Authenticator specific arguments used to log in the user. */ - public void onReceivedLoginRequest(XWalkView view, String realm, + public void onReceivedLoginRequest(XWalkViewInternal view, String realm, String account, String args) { } // TODO(yongsheng): legacy method. Consider removing it? - public void onLoadResource(XWalkView view, String url) { + public void onLoadResource(XWalkViewInternal view, String url) { } } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContent.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/XWalkContent.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java index 611d8d1582..6ed1c475ac 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContent.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java @@ -3,7 +3,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.content.Context; @@ -38,17 +38,17 @@ @JNINamespace("xwalk") /** - * This class is the implementation class for XWalkView by calling internal + * This class is the implementation class for XWalkViewInternal by calling internal * various classes. */ -class XWalkContent extends FrameLayout implements XWalkPreferences.KeyValueChangeListener { +class XWalkContent extends FrameLayout implements XWalkPreferencesInternal.KeyValueChangeListener { private static String TAG = "XWalkContent"; private ContentViewCore mContentViewCore; private ContentView mContentView; private ContentViewRenderView mContentViewRenderView; private ActivityWindowAndroid mWindow; private XWalkDevToolsServer mDevToolsServer; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; private XWalkContentsClientBridge mContentsClientBridge; private XWalkContentsIoThreadClient mIoThreadClient; private XWalkWebContentsDelegateAdapter mXWalkContentsDelegateAdapter; @@ -62,7 +62,7 @@ class XWalkContent extends FrameLayout implements XWalkPreferences.KeyValueChang String mPendingUrl = null; String mPendingData = null; - public XWalkContent(Context context, AttributeSet attrs, XWalkView xwView) { + public XWalkContent(Context context, AttributeSet attrs, XWalkViewInternal xwView) { super(context, attrs); // Initialize the WebContensDelegate. @@ -76,7 +76,7 @@ public XWalkContent(Context context, AttributeSet attrs, XWalkView xwView) { mWindow = new ActivityWindowAndroid(xwView.getActivity()); // Initialize ContentViewRenderView - boolean animated = XWalkPreferences.getValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW); + boolean animated = XWalkPreferencesInternal.getValue(XWalkPreferencesInternal.ANIMATABLE_XWALK_VIEW); CompositingSurfaceType surfaceType = animated ? CompositingSurfaceType.TEXTURE_VIEW : CompositingSurfaceType.SURFACE_VIEW; mContentViewRenderView = new ContentViewRenderView(context, mWindow, surfaceType) { @@ -131,7 +131,7 @@ protected void onReadyToRender() { MediaPlayerBridge.setResourceLoadingFilter( new XWalkMediaPlayerResourceLoadingFilter()); - XWalkPreferences.load(this); + XWalkPreferencesInternal.load(this); } void doLoadUrl(String url, String content) { @@ -171,10 +171,10 @@ public void loadUrl(String url, String data) { public void reload(int mode) { if (mReadyToLoad) { switch (mode) { - case XWalkView.RELOAD_IGNORE_CACHE: + case XWalkViewInternal.RELOAD_IGNORE_CACHE: mContentViewCore.reloadIgnoringCache(true); break; - case XWalkView.RELOAD_NORMAL: + case XWalkViewInternal.RELOAD_NORMAL: default: mContentViewCore.reload(true); @@ -210,11 +210,11 @@ public void handleJavaScriptResult(String jsonResult) { mContentViewCore.evaluateJavaScript(script, coreCallback); } - public void setUIClient(XWalkUIClient client) { + public void setUIClient(XWalkUIClientInternal client) { mContentsClientBridge.setUIClient(client); } - public void setResourceClient(XWalkResourceClient client) { + public void setResourceClient(XWalkResourceClientInternal client) { mContentsClientBridge.setResourceClient(client); } @@ -373,13 +373,13 @@ public void loadAppFromManifest(String url, String data) { } } - public XWalkNavigationHistory getNavigationHistory() { - return new XWalkNavigationHistory(mXWalkView, mContentViewCore.getNavigationHistory()); + public XWalkNavigationHistoryInternal getNavigationHistory() { + return new XWalkNavigationHistoryInternal(mXWalkView, mContentViewCore.getNavigationHistory()); } public static final String SAVE_RESTORE_STATE_KEY = "XWALKVIEW_STATE"; - public XWalkNavigationHistory saveState(Bundle outState) { + public XWalkNavigationHistoryInternal saveState(Bundle outState) { if (outState == null) return null; byte[] state = nativeGetState(mXWalkContent); @@ -389,7 +389,7 @@ public XWalkNavigationHistory saveState(Bundle outState) { return getNavigationHistory(); } - public XWalkNavigationHistory restoreState(Bundle inState) { + public XWalkNavigationHistoryInternal restoreState(Bundle inState) { if (inState == null) return null; byte[] state = inState.getByteArray(SAVE_RESTORE_STATE_KEY); @@ -441,7 +441,7 @@ public void onGetFullscreenFlagFromManifest(boolean enterFullscreen) { public void destroy() { if (mXWalkContent == 0) return; - XWalkPreferences.unload(this); + XWalkPreferencesInternal.unload(this); // Reset existing notification service in order to destruct it. setNotificationService(null); // Remove its children used for page rendering from view hierarchy. @@ -486,7 +486,7 @@ public InterceptedRequestData shouldInterceptRequest(final String url, } else { if (isMainFrame && webResourceResponse.getData() == null) { mContentsClientBridge.getCallbackHelper().postOnReceivedError( - XWalkResourceClient.ERROR_UNKNOWN, null, url); + XWalkResourceClientInternal.ERROR_UNKNOWN, null, url); } interceptedRequestData = new InterceptedRequestData(webResourceResponse.getMimeType(), webResourceResponse.getEncoding(), @@ -599,7 +599,7 @@ void disableRemoteDebugging() { @Override public void onKeyValueChanged(String key, boolean value) { - if (key == XWalkPreferences.REMOTE_DEBUGGING) { + if (key == XWalkPreferencesInternal.REMOTE_DEBUGGING) { if (value) enableRemoteDebugging(); else disableRemoteDebugging(); } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContentVideoViewClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentVideoViewClient.java similarity index 89% rename from runtime/android/core/src/org/xwalk/core/XWalkContentVideoViewClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentVideoViewClient.java index c26877a918..df6aa08cf0 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContentVideoViewClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentVideoViewClient.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.content.Context; @@ -12,14 +12,14 @@ import org.chromium.base.CommandLine; import org.chromium.content.browser.ContentVideoViewClient; import org.chromium.content.common.ContentSwitches; -import org.xwalk.core.XWalkWebChromeClient.CustomViewCallback; +import org.xwalk.core.internal.XWalkWebChromeClient.CustomViewCallback; class XWalkContentVideoViewClient implements ContentVideoViewClient { private XWalkContentsClient mContentsClient; private Activity mActivity; - private XWalkView mView; + private XWalkViewInternal mView; - public XWalkContentVideoViewClient(XWalkContentsClient client, Activity activity, XWalkView view) { + public XWalkContentVideoViewClient(XWalkContentsClient client, Activity activity, XWalkViewInternal view) { mContentsClient = client; mActivity = activity; mView = view; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContentsClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClient.java similarity index 94% rename from runtime/android/core/src/org/xwalk/core/XWalkContentsClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClient.java index 010d609b5b..449d2b6dc1 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContentsClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClient.java @@ -3,7 +3,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; @@ -60,12 +60,12 @@ public void didFailLoad(boolean isProvisionalLoad, boolean isMainFrame, int errorCode, String description, String failingUrl) { if (errorCode == NetError.ERR_ABORTED || !isMainFrame) { // This error code is generated for the following reasons: - // - XWalkView.stopLoading is called, + // - XWalkViewInternal.stopLoading is called, // - the navigation is intercepted by the embedder via shouldOverrideNavigation. // - // The XWalkView does not notify the embedder of these situations using this + // The XWalkViewInternal does not notify the embedder of these situations using this // error code with the XWalkClient.onReceivedError callback. What's more, - // the XWalkView does not notify the embedder of sub-frame failures. + // the XWalkViewInternal does not notify the embedder of sub-frame failures. return; } onReceivedError(ErrorCodeConversionHelper.convertErrorCode(errorCode), @@ -109,7 +109,7 @@ final XWalkContentsClientCallbackHelper getCallbackHelper() { } //-------------------------------------------------------------------------------------------- - // XWalkView specific methods that map directly to XWalkViewClient / XWalkWebChromeClient + // XWalkViewInternal specific methods that map directly to XWalkViewClient / XWalkWebChromeClient //-------------------------------------------------------------------------------------------- public abstract void getVisitedHistory(ValueCallback callback); @@ -205,7 +205,7 @@ public void onShowCustomView(View view, XWalkWebChromeClient.CustomViewCallback public abstract void didFinishLoad(String url); //-------------------------------------------------------------------------------------------- - // Other XWalkView-specific methods + // Other XWalkViewInternal-specific methods //-------------------------------------------------------------------------------------------- // public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContentsClientBridge.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java similarity index 94% rename from runtime/android/core/src/org/xwalk/core/XWalkContentsClientBridge.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java index ad3784505c..32211a772f 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContentsClientBridge.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java @@ -3,7 +3,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.ContentResolver; import android.content.Intent; @@ -37,9 +37,9 @@ class XWalkContentsClientBridge extends XWalkContentsClient implements ContentViewDownloadDelegate { - private XWalkView mXWalkView; - private XWalkUIClient mXWalkUIClient; - private XWalkResourceClient mXWalkResourceClient; + private XWalkViewInternal mXWalkView; + private XWalkUIClientInternal mXWalkUIClient; + private XWalkResourceClientInternal mXWalkResourceClient; private XWalkClient mXWalkClient; private XWalkWebChromeClient mXWalkWebChromeClient; private Bitmap mFavicon; @@ -75,28 +75,28 @@ public boolean shouldIgnoreNavigation(NavigationParams navigationParams) { } } - public XWalkContentsClientBridge(XWalkView xwView) { + public XWalkContentsClientBridge(XWalkViewInternal xwView) { mXWalkView = xwView; mInterceptNavigationDelegate = new InterceptNavigationDelegateImpl(this); } - public void setUIClient(XWalkUIClient client) { + public void setUIClient(XWalkUIClientInternal client) { // If it's null, use Crosswalk implementation. if (client != null) { mXWalkUIClient = client; return; } - mXWalkUIClient = new XWalkUIClient(mXWalkView); + mXWalkUIClient = new XWalkUIClientInternal(mXWalkView); } - public void setResourceClient(XWalkResourceClient client) { + public void setResourceClient(XWalkResourceClientInternal client) { // If it's null, use Crosswalk implementation. if (client != null) { mXWalkResourceClient = client; return; } - mXWalkResourceClient = new XWalkResourceClient(mXWalkView); + mXWalkResourceClient = new XWalkResourceClientInternal(mXWalkView); } @@ -510,27 +510,27 @@ private void proceedSslError(boolean proceed, int id) { @CalledByNative private void handleJsAlert(String url, String message, int id) { if (isOwnerActivityRunning()) { - XWalkJavascriptResultHandler result = new XWalkJavascriptResultHandler(this, id); + XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClient.JavascriptMessageType.JAVASCRIPT_ALERT, url, message, "", result); + XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_ALERT, url, message, "", result); } } @CalledByNative private void handleJsConfirm(String url, String message, int id) { if (isOwnerActivityRunning()) { - XWalkJavascriptResultHandler result = new XWalkJavascriptResultHandler(this, id); + XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClient.JavascriptMessageType.JAVASCRIPT_CONFIRM, url, message, "", result); + XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_CONFIRM, url, message, "", result); } } @CalledByNative private void handleJsPrompt(String url, String message, String defaultValue, int id) { if (isOwnerActivityRunning()) { - XWalkJavascriptResultHandler result = new XWalkJavascriptResultHandler(this, id); + XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClient.JavascriptMessageType.JAVASCRIPT_PROMPT, url, message, defaultValue, + XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_PROMPT, url, message, defaultValue, result); } } @@ -538,9 +538,9 @@ private void handleJsPrompt(String url, String message, String defaultValue, int @CalledByNative private void handleJsBeforeUnload(String url, String message, int id) { if (isOwnerActivityRunning()) { - XWalkJavascriptResultHandler result = new XWalkJavascriptResultHandler(this, id); + XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClient.JavascriptMessageType.JAVASCRIPT_BEFOREUNLOAD, url, message, "", + XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_BEFOREUNLOAD, url, message, "", result); } } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContentsClientCallbackHelper.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientCallbackHelper.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/XWalkContentsClientCallbackHelper.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientCallbackHelper.java index 89b4ca4be0..d1ccaad061 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContentsClientCallbackHelper.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientCallbackHelper.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.os.Handler; import android.os.Looper; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkContentsIoThreadClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsIoThreadClient.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkContentsIoThreadClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsIoThreadClient.java index 17e39c577b..e2f96bb623 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkContentsIoThreadClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsIoThreadClient.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkCookieManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkCookieManager.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/XWalkCookieManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkCookieManager.java index 6206cf0682..3748033229 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkCookieManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkCookieManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkDevToolsServer.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDevToolsServer.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkDevToolsServer.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDevToolsServer.java index b8ae00e8f1..9947f271b1 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkDevToolsServer.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDevToolsServer.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkDownloadListenerImpl.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDownloadListenerImpl.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkDownloadListenerImpl.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDownloadListenerImpl.java index 31580466cd..4884b83aa5 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkDownloadListenerImpl.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDownloadListenerImpl.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.DownloadManager; import android.app.DownloadManager.Request; @@ -22,9 +22,9 @@ import java.io.IOException; import java.io.OutputStream; -import org.xwalk.core.AndroidProtocolHandler; -import org.xwalk.core.DownloadListener; -import org.xwalk.core.R; +import org.xwalk.core.internal.AndroidProtocolHandler; +import org.xwalk.core.internal.DownloadListener; +import org.xwalk.core.internal.R; class XWalkDownloadListenerImpl implements DownloadListener { private static String DOWNLOAD_START_TOAST; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkGeolocationPermissions.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkGeolocationPermissions.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/XWalkGeolocationPermissions.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkGeolocationPermissions.java index e384ba2d1a..10a9000b39 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkGeolocationPermissions.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkGeolocationPermissions.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.SharedPreferences; import android.webkit.ValueCallback; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkHttpAuthHandler.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkHttpAuthHandler.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/XWalkHttpAuthHandler.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkHttpAuthHandler.java index db6078dadd..f2a22e488d 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkHttpAuthHandler.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkHttpAuthHandler.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkInternalResources.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkInternalResources.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java index 7768dc85bc..50acc5759e 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkInternalResources.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.Context; import android.util.Log; @@ -18,9 +18,9 @@ class XWalkInternalResources { "org.chromium.content.R", "org.chromium.ui.R" }; - private final static String GENERATED_RESOURCE_CLASS = "org.xwalk.core.R"; + private final static String GENERATED_RESOURCE_CLASS = "org.xwalk.core.internal.R"; - // Doing org.chromium.content.R.. = org.xwalk.core.R.. + // Doing org.chromium.content.R.. = org.xwalk.core.internal.R.. // Use reflection to iterate over the target class is to avoid hardcode. private static void doResetIds(Context context) { ClassLoader classLoader = context.getClassLoader(); diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java similarity index 84% rename from runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java index 6298262719..6aea0ad554 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java @@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.ThreadUtils; -class XWalkJavascriptResultHandler implements XWalkJavascriptResult { +class XWalkJavascriptResultHandlerInternal implements XWalkJavascriptResultInternal { private XWalkContentsClientBridge mBridge; private final int mId; - XWalkJavascriptResultHandler(XWalkContentsClientBridge bridge, int id) { + XWalkJavascriptResultHandlerInternal(XWalkContentsClientBridge bridge, int id) { mBridge = bridge; mId = id; } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java similarity index 77% rename from runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java index fae1cb2a98..51d5117a51 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java @@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; /** - * This interface is used when XWalkUIClient offers a JavaScript + * This interface is used when XWalkUIClientInternal offers a JavaScript * modal dialog (alert, beforeunload or confirm) to enable the client to - * handle the dialog in their own way. XWalkUIClient will offer an object + * handle the dialog in their own way. XWalkUIClientInternal will offer an object * that implements this interface to the client and when the client has handled * the dialog, it must either callback with confirm() or cancel() to allow * processing to continue. */ -public interface XWalkJavascriptResult { +public interface XWalkJavascriptResultInternal { /** * Handle a confirm with a result from caller. * @param result the result string from caller. diff --git a/runtime/android/core/src/org/xwalk/core/XWalkLaunchScreenManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkLaunchScreenManager.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/XWalkLaunchScreenManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkLaunchScreenManager.java index 1f57e2c033..67f26bbf07 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkLaunchScreenManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkLaunchScreenManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.lang.Runnable; import java.util.ArrayList; @@ -58,7 +58,7 @@ public class XWalkLaunchScreenManager private final static String BORDER_MODE_STRETCH = "stretch"; private final static String BORDER_MODE_ROUND = "round"; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; private Activity mActivity; private Context mLibContext; private Dialog mLaunchScreenDialog; @@ -84,7 +84,7 @@ private enum BorderModeType { NONE } - public XWalkLaunchScreenManager(Context context, XWalkView xwView) { + public XWalkLaunchScreenManager(Context context, XWalkViewInternal xwView) { mXWalkView = xwView; mLibContext = context; mActivity = mXWalkView.getActivity(); diff --git a/runtime/android/core/src/org/xwalk/core/XWalkMediaPlayerResourceLoadingFilter.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkMediaPlayerResourceLoadingFilter.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkMediaPlayerResourceLoadingFilter.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkMediaPlayerResourceLoadingFilter.java index 563db0f9e1..fa4a2cef7b 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkMediaPlayerResourceLoadingFilter.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkMediaPlayerResourceLoadingFilter.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.Context; import android.content.res.AssetFileDescriptor; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHandler.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandler.java similarity index 93% rename from runtime/android/core/src/org/xwalk/core/XWalkNavigationHandler.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandler.java index 6bc8f17f60..9cfd457682 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHandler.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandler.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.components.navigation_interception.NavigationParams; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHandlerImpl.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandlerImpl.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/XWalkNavigationHandlerImpl.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandlerImpl.java index 6258d74811..d45b07f665 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHandlerImpl.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHandlerImpl.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.content.ActivityNotFoundException; @@ -14,7 +14,7 @@ import org.chromium.components.navigation_interception.NavigationParams; -import org.xwalk.core.XWalkNavigationHandler; +import org.xwalk.core.internal.XWalkNavigationHandler; /** * @hide diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java similarity index 71% rename from runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java index 88022881cd..23db336607 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java @@ -2,32 +2,32 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.io.Serializable; import org.chromium.content.browser.NavigationHistory; /** - * This class represents a navigation history for a XWalkView instance. + * This class represents a navigation history for a XWalkViewInternal instance. * It's not thread-safe and should be only called on UI thread. */ -public final class XWalkNavigationHistory implements Cloneable, Serializable { +public final class XWalkNavigationHistoryInternal implements Cloneable, Serializable { private NavigationHistory mHistory; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; - XWalkNavigationHistory(XWalkView view, NavigationHistory history) { + XWalkNavigationHistoryInternal(XWalkViewInternal view, NavigationHistory history) { mXWalkView = view; mHistory = history; } - XWalkNavigationHistory(XWalkNavigationHistory history) { + XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { mXWalkView = history.mXWalkView; mHistory = history.mHistory; } /** - * Total size of navigation history for the XWalkView. + * Total size of navigation history for the XWalkViewInternal. * @return the size of total navigation items. */ public int size() { @@ -48,20 +48,20 @@ public boolean hasItemAt(int index) { * @param index the given index. * @return the navigation item for the given index. */ - public XWalkNavigationItem getItemAt(int index) { - return new XWalkNavigationItem(mHistory.getEntryAtIndex(index)); + public XWalkNavigationItemInternal getItemAt(int index) { + return new XWalkNavigationItemInternal(mHistory.getEntryAtIndex(index)); } /** - * Get the current item which XWalkView displays. + * Get the current item which XWalkViewInternal displays. * @return the current navigation item. */ - public XWalkNavigationItem getCurrentItem() { + public XWalkNavigationItemInternal getCurrentItem() { return getItemAt(getCurrentIndex()); } /** - * Test whether XWalkView can go back. + * Test whether XWalkViewInternal can go back. * @return true if it can go back. */ public boolean canGoBack() { @@ -69,7 +69,7 @@ public boolean canGoBack() { } /** - * Test whether XWalkView can go forward. + * Test whether XWalkViewInternal can go forward. * @return true if it can go forward. */ public boolean canGoForward() { @@ -114,13 +114,13 @@ public int getCurrentIndex() { } /** - * Clear all history owned by this XWalkView. + * Clear all history owned by this XWalkViewInternal. */ public void clear() { mXWalkView.clearHistory(); } - protected synchronized XWalkNavigationHistory clone() { - return new XWalkNavigationHistory(this); + protected synchronized XWalkNavigationHistoryInternal clone() { + return new XWalkNavigationHistoryInternal(this); } } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java similarity index 71% rename from runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java index a879a60a13..36d08bad2d 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java @@ -2,21 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.content.browser.NavigationEntry; /** - * This class represents a navigation item and is managed in XWalkNavigationHistory. + * This class represents a navigation item and is managed in XWalkNavigationHistoryInternal. */ -public final class XWalkNavigationItem implements Cloneable { +public final class XWalkNavigationItemInternal implements Cloneable { private NavigationEntry mEntry; - XWalkNavigationItem(NavigationEntry entry) { + XWalkNavigationItemInternal(NavigationEntry entry) { mEntry = entry; } - XWalkNavigationItem(XWalkNavigationItem item) { + XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { mEntry = item.mEntry; } @@ -44,7 +44,7 @@ public String getTitle() { return mEntry.getTitle(); } - protected synchronized XWalkNavigationItem clone() { - return new XWalkNavigationItem(this); + protected synchronized XWalkNavigationItemInternal clone() { + return new XWalkNavigationItemInternal(this); } } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNotificationService.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationService.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/XWalkNotificationService.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationService.java index bd06aad61c..466cebd716 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNotificationService.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationService.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.Intent; import android.graphics.Bitmap; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNotificationServiceImpl.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationServiceImpl.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkNotificationServiceImpl.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationServiceImpl.java index e860f0c36f..da99005b07 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkNotificationServiceImpl.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNotificationServiceImpl.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.util.HashMap; @@ -19,9 +19,9 @@ import android.util.AndroidRuntimeException; import android.util.Log; -import org.xwalk.core.XWalkContentsClientBridge; -import org.xwalk.core.XWalkNotificationService; -import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkContentsClientBridge; +import org.xwalk.core.internal.XWalkNotificationService; +import org.xwalk.core.internal.XWalkViewInternal; /** * @hide @@ -37,13 +37,13 @@ public class XWalkNotificationServiceImpl implements XWalkNotificationService { private Context mContext; private XWalkContentsClientBridge mBridge; - private XWalkView mView; + private XWalkViewInternal mView; private NotificationManager mNotificationManager; private BroadcastReceiver mNotificationCloseReceiver; private IntentFilter mNotificationCloseIntentFilter; private HashMap mExistNotificationIds; - public XWalkNotificationServiceImpl(Context context, XWalkView view) { + public XWalkNotificationServiceImpl(Context context, XWalkViewInternal view) { mContext = context; mView = view; mNotificationManager = diff --git a/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java similarity index 92% rename from runtime/android/core/src/org/xwalk/core/XWalkPreferences.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java index 6605711dfb..a29cc8b45d 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; @@ -14,9 +14,9 @@ * This class represents the preferences and could be set by callers. * It is not thread-safe and must be called on the UI thread. * Afterwards, the preference could be read from all threads and can impact - * all XWalkView instances. + * all XWalkViewInternal instances. */ -public final class XWalkPreferences { +public final class XWalkPreferencesInternal { private static HashMap sPrefMap = new HashMap(); // Here we use WeakReference to make sure the KeyValueChangeListener instance // can be GC-ed to avoid memory leaking issue. @@ -31,12 +31,12 @@ public final class XWalkPreferences { public static final String REMOTE_DEBUGGING = "remote-debugging"; /** - * The key string to enable/disable animatable XWalkView. Default value is + * The key string to enable/disable animatable XWalkViewInternal. Default value is * false. * - * If this key is set to True, the XWalkView created by Crosswalk can be + * If this key is set to True, the XWalkViewInternal created by Crosswalk can be * transformed and animated. Internally, Crosswalk is alternatively using - * TextureView as the backend of XWalkView. + * TextureView as the backend of XWalkViewInternal. * * * TextureView is a kind of @@ -44,12 +44,12 @@ public final class XWalkPreferences { * android.view.View that is different from * * SurfaceView. Unlike SurfaceView, it can be resized, transformed and - * animated. Once this key is set to True, all XWalkView will use TextureView + * animated. Once this key is set to True, all XWalkViewInternal will use TextureView * as the rendering target instead of SurfaceView. The downside of TextureView * is, it would consume more graphics memory than SurfaceView and may have * 1~3 extra frames of latency to display updates. * - * Note this key MUST be set before creating the first XWalkView, otherwise + * Note this key MUST be set before creating the first XWalkViewInternal, otherwise * a RuntimeException will be thrown. */ public static final String ANIMATABLE_XWALK_VIEW = "animatable-xwalk-view"; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java similarity index 76% rename from runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java index 63fa3a7cf6..c13e5794f5 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.AlertDialog; import android.content.Context; @@ -13,7 +13,7 @@ /** * This class notifies the embedder resource events/callbacks. */ -public class XWalkResourceClient { +public class XWalkResourceClientInternal { /** Success */ public static final int ERROR_OK = 0; /** Generic error */ @@ -49,64 +49,64 @@ public class XWalkResourceClient { /** * Constructor. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. */ - public XWalkResourceClient(XWalkView view) { + public XWalkResourceClientInternal(XWalkViewInternal view) { // Keep the above parameter for future use. } /** - * Notify the client that the XWalkView will load the resource specified + * Notify the client that the XWalkViewInternal will load the resource specified * by the given url. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param url the url for the resource to be loaded. */ - public void onLoadStarted(XWalkView view, String url) { + public void onLoadStarted(XWalkViewInternal view, String url) { } /** - * Notify the client that the XWalkView completes to load the resource + * Notify the client that the XWalkViewInternal completes to load the resource * specified by the given url. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param url the url for the resource done for loading. */ - public void onLoadFinished(XWalkView view, String url) { + public void onLoadFinished(XWalkViewInternal view, String url) { } /** * Notify the client the progress info of loading a specific url. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param progressInPercent the loading process in percent. */ - public void onProgressChanged(XWalkView view, int progressInPercent) { + public void onProgressChanged(XWalkViewInternal view, int progressInPercent) { } /** * Notify the client of a resource request and allow the client to return - * the data. If the return value is null, the XWalkView + * the data. If the return value is null, the XWalkViewInternal * will continue to load the resource as usual. Otherwise, the return * response and data will be used. NOTE: This method is called by the * network thread so clients should exercise caution when accessing private * data. - * @param view The {@link org.xwalk.core.XWalkView} that is requesting the + * @param view The {@link org.xwalk.core.internal.XWalkViewInternal} that is requesting the * resource. * @param url The raw url of the resource. * @return A {@link android.webkit.WebResourceResponse} containing the - * response information or null if the XWalkView should load the + * response information or null if the XWalkViewInternal should load the * resource itself. */ - public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { + public WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, String url) { return null; } /** * Report an error to the client. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param errorCode the error id. * @param description A String describing the error. * @param failingUrl The url that failed to load. */ - public void onReceivedLoadError(XWalkView view, int errorCode, String description, + public void onReceivedLoadError(XWalkViewInternal view, int errorCode, String description, String failingUrl) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(view.getContext()); dialogBuilder.setTitle(android.R.string.dialog_alert_title) diff --git a/runtime/android/core/src/org/xwalk/core/XWalkSettings.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkSettings.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/XWalkSettings.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkSettings.java index a77515f52c..62f92aa3c7 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkSettings.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkSettings.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.content.Context; import android.content.pm.PackageManager; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java similarity index 84% rename from runtime/android/core/src/org/xwalk/core/XWalkUIClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java index 58d445329d..8c5ade1881 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.app.AlertDialog; @@ -20,7 +20,7 @@ /** * This class notifies the embedder UI events/callbacks. */ -public class XWalkUIClient { +public class XWalkUIClientInternal { // Strings for displaying Dialog. private static String mJSAlertTitle; @@ -34,14 +34,14 @@ public class XWalkUIClient { private EditText mPromptText; private int mSystemUiFlag; private View mDecorView; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; private boolean mOriginalFullscreen; /** * Constructor. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. */ - public XWalkUIClient(XWalkView view) { + public XWalkUIClientInternal(XWalkViewInternal view) { mContext = view.getContext(); mDecorView = view.getActivity().getWindow().getDecorView(); if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { @@ -63,17 +63,17 @@ private void initResources() { } /** - * Request display and focus for this XWalkView. - * @param view the owner XWalkView instance. + * Request display and focus for this XWalkViewInternal. + * @param view the owner XWalkViewInternal instance. */ - public void onRequestFocus(XWalkView view) { + public void onRequestFocus(XWalkViewInternal view) { } /** - * Notify the client to close the given XWalkView. - * @param view the owner XWalkView instance. + * Notify the client to close the given XWalkViewInternal. + * @param view the owner XWalkViewInternal instance. */ - public void onJavascriptCloseWindow(XWalkView view) { + public void onJavascriptCloseWindow(XWalkViewInternal view) { if (view != null && view.getActivity() != null) { view.getActivity().finish(); } @@ -95,15 +95,15 @@ public enum JavascriptMessageType { /** * Tell the client to display a prompt dialog to the user. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param type the type of JavaScript modal dialog. * @param url the url of the web page which wants to show this dialog. * @param message the message to be shown. * @param defaultValue the default value string. Only valid for Prompt dialog. * @param result the callback to handle the result from caller. */ - public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType type, String url, - String message, String defaultValue, XWalkJavascriptResult result) { + public boolean onJavascriptModalDialog(XWalkViewInternal view, JavascriptMessageType type, String url, + String message, String defaultValue, XWalkJavascriptResultInternal result) { switch(type) { case JAVASCRIPT_ALERT: return onJsAlert(view, url, message, result); @@ -123,10 +123,10 @@ public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType typ /** * Tell the client to toggle fullscreen mode. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param enterFullscreen true if it has entered fullscreen mode. */ - public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) { + public void onFullscreenToggled(XWalkViewInternal view, boolean enterFullscreen) { Activity activity = view.getActivity(); if (enterFullscreen) { if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { @@ -165,7 +165,7 @@ public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) { /** * Tell the client to open a file chooser. - * @param view the owner XWalkView instance. + * @param view the owner XWalkViewInternal instance. * @param uploadFile the callback class to handle the result from caller. It MUST * be invoked in all cases. Leave it not invoked will block all following * requests to open file chooser. @@ -174,23 +174,23 @@ public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) { * @param capture value of the 'capture' attribute of the input tag associated * with this file picker */ - public void openFileChooser(XWalkView view, ValueCallback uploadFile, + public void openFileChooser(XWalkViewInternal view, ValueCallback uploadFile, String acceptType, String capture) { uploadFile.onReceiveValue(null); } /** - * Notify the client that the scale applied to the XWalkView has changed. - * @param view the owner XWalkView instance. + * Notify the client that the scale applied to the XWalkViewInternal has changed. + * @param view the owner XWalkViewInternal instance. * @param oldScale the old scale before scaling. * @param newScale the current scale factor after scaling. */ - public void onScaleChanged(XWalkView view, float oldScale, float newScale) { + public void onScaleChanged(XWalkViewInternal view, float oldScale, float newScale) { } - private boolean onJsAlert(XWalkView view, String url, String message, - XWalkJavascriptResult result) { - final XWalkJavascriptResult fResult = result; + private boolean onJsAlert(XWalkViewInternal view, String url, String message, + XWalkJavascriptResultInternal result) { + final XWalkJavascriptResultInternal fResult = result; AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); dialogBuilder.setTitle(mJSAlertTitle) .setMessage(message) @@ -213,9 +213,9 @@ public void onCancel(DialogInterface dialog) { return false; } - private boolean onJsConfirm(XWalkView view, String url, String message, - XWalkJavascriptResult result) { - final XWalkJavascriptResult fResult = result; + private boolean onJsConfirm(XWalkViewInternal view, String url, String message, + XWalkJavascriptResultInternal result) { + final XWalkJavascriptResultInternal fResult = result; AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); dialogBuilder.setTitle(mJSConfirmTitle) .setMessage(message) @@ -247,9 +247,9 @@ public void onCancel(DialogInterface dialog) { return false; } - private boolean onJsPrompt(XWalkView view, String url, String message, - String defaultValue, XWalkJavascriptResult result) { - final XWalkJavascriptResult fResult = result; + private boolean onJsPrompt(XWalkViewInternal view, String url, String message, + String defaultValue, XWalkJavascriptResultInternal result) { + final XWalkJavascriptResultInternal fResult = result; AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); dialogBuilder.setTitle(mJSPromptTitle) .setMessage(message) diff --git a/runtime/android/core/src/org/xwalk/core/XWalkViewDelegate.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewDelegate.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/XWalkViewDelegate.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewDelegate.java index 2f44fe9209..c5c95236cd 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkViewDelegate.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewDelegate.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import java.io.InputStream; import java.io.InputStreamReader; @@ -77,7 +77,7 @@ private static String[] readCommandLine(Context context) { } } - public static void init(XWalkView xwalkView) throws UnsatisfiedLinkError { + public static void init(XWalkViewInternal xwalkView) throws UnsatisfiedLinkError { if (sInitialized) { return; } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkView.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java similarity index 88% rename from runtime/android/core/src/org/xwalk/core/XWalkView.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java index c46ff7865e..f8b27cc147 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkView.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.app.AlertDialog; @@ -26,21 +26,21 @@ import org.chromium.base.ActivityState; import org.chromium.base.ApplicationStatus; -import org.xwalk.core.extension.XWalkExtensionManager; +import org.xwalk.core.internal.extension.XWalkExtensionManager; /** - *

XWalkView represents an Android view for web apps/pages. Thus most of attributes + *

XWalkViewInternal represents an Android view for web apps/pages. Thus most of attributes * for Android view are valid for this class. Since it internally uses * * android.view.SurfaceView for rendering web pages by default, it can't be resized, * rotated, transformed and animated due to the limitations of SurfaceView. - * Alternatively, if the preference key {@link XWalkPreferences#ANIMATABLE_XWALK_VIEW} - * is set to True, XWalkView can be transformed and animated because + * Alternatively, if the preference key {@link XWalkPreferencesInternal#ANIMATABLE_XWALK_VIEW} + * is set to True, XWalkViewInternal can be transformed and animated because * * TextureView is intentionally used to render web pages for animation support. - * Besides, XWalkView won't be rendered if it's invisible.

+ * Besides, XWalkViewInternal won't be rendered if it's invisible.

* - *

XWalkView needs hardware acceleration to render web pages. As a result, the + *

XWalkViewInternal needs hardware acceleration to render web pages. As a result, the * AndroidManifest.xml of the caller's app must be appended with the attribute * "android:hardwareAccelerated" and its value must be set as "true".

*
@@ -48,8 +48,8 @@
  *     android:hardwareAccelerated="true">
  * 
* - *

Crosswalk provides 2 major callback classes, namely {@link XWalkResourceClient} and - * {@link XWalkUIClient} for listening to the events related to resource loading and UI. + *

Crosswalk provides 2 major callback classes, namely {@link XWalkResourceClientInternal} and + * {@link XWalkUIClientInternal} for listening to the events related to resource loading and UI. * By default, Crosswalk has a default implementation. Callers can override them if needed.

* *

Unlike other Android views, this class has to listen to system events like application life @@ -60,32 +60,32 @@ * import android.app.Activity; * import android.os.Bundle; * - * import org.xwalk.core.XWalkResourceClient; - * import org.xwalk.core.XWalkUIClient; - * import org.xwalk.core.XWalkView; + * import org.xwalk.core.internal.XWalkResourceClientInternal; + * import org.xwalk.core.internal.XWalkUIClientInternal; + * import org.xwalk.core.internal.XWalkViewInternal; * * public class MyActivity extends Activity { - * XWalkView mXwalkView; + * XWalkViewInternal mXwalkView; * - * class MyResourceClient extends XWalkResourceClient { - * MyResourceClient(XWalkView view) { + * class MyResourceClient extends XWalkResourceClientInternal { + * MyResourceClient(XWalkViewInternal view) { * super(view); * } * * @Override - * WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { + * WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, String url) { * // Handle it here. * ... * } * } * - * class MyUIClient extends XWalkUIClient { - * MyUIClient(XWalkView view) { + * class MyUIClient extends XWalkUIClientInternal { + * MyUIClient(XWalkViewInternal view) { * super(view); * } * * @Override - * void onFullscreenToggled(XWalkView view, String url) { + * void onFullscreenToggled(XWalkViewInternal view, String url) { * // Handle it here. * ... * } @@ -93,7 +93,7 @@ * * @Override * protected void onCreate(Bundle savedInstanceState) { - * mXwalkView = new XWalkView(this, null); + * mXwalkView = new XWalkViewInternal(this, null); * setContentView(mXwalkView); * mXwalkView.setResourceClient(new MyResourceClient(mXwalkView)); * mXwalkView.setUIClient(new MyUIClient(mXwalkView)); @@ -142,7 +142,7 @@ * } * */ -public class XWalkView extends android.widget.FrameLayout { +public class XWalkViewInternal extends android.widget.FrameLayout { static final String PLAYSTORE_DETAIL_URI = "market://details?id="; @@ -162,7 +162,7 @@ public class XWalkView extends android.widget.FrameLayout { * @param context a Context object used to access application assets. * @param attrs an AttributeSet passed to our parent. */ - public XWalkView(Context context, AttributeSet attrs) { + public XWalkViewInternal(Context context, AttributeSet attrs) { super(context, attrs); checkThreadSafety(); @@ -174,9 +174,9 @@ public XWalkView(Context context, AttributeSet attrs) { * Constructor for Crosswalk runtime. In shared mode, context isi * different from activity. In embedded mode, they're same. * @param context a Context object used to access application assets - * @param activity the activity for this XWalkView. + * @param activity the activity for this XWalkViewInternal. */ - public XWalkView(Context context, Activity activity) { + public XWalkViewInternal(Context context, Activity activity) { super(context, null); checkThreadSafety(); @@ -300,8 +300,8 @@ private void initXWalkContent(Context context, AttributeSet attrs) { // Set with internal implementation. Could be overwritten by embedders' // setting. - setUIClient(new XWalkUIClient(this)); - setResourceClient(new XWalkResourceClient(this)); + setUIClient(new XWalkUIClientInternal(this)); + setResourceClient(new XWalkResourceClientInternal(this)); setDownloadListener(new XWalkDownloadListenerImpl(context)); setNavigationHandler(new XWalkNavigationHandlerImpl(context)); @@ -319,7 +319,7 @@ private void initXWalkContent(Context context, AttributeSet attrs) { * will do nothing. * If content is not null, load the web page/app from the content. * If content is not null and the url is not set, return "about:blank" ifi - * calling {@link XWalkView#getUrl()}. + * calling {@link XWalkViewInternal#getUrl()}. * If content is null, try to load the content from the url. * * It supports URL schemes like 'http:', 'https:' and 'file:'. @@ -402,18 +402,18 @@ public String getOriginalUrl() { } /** - * Get the navigation history for current XWalkView. It's synchronized with - * this XWalkView if any backward/forward and navigation operations. + * Get the navigation history for current XWalkViewInternal. It's synchronized with + * this XWalkViewInternal if any backward/forward and navigation operations. * @return the navigation history. */ - public XWalkNavigationHistory getNavigationHistory() { + public XWalkNavigationHistoryInternal getNavigationHistory() { if (mContent == null) return null; checkThreadSafety(); return mContent.getNavigationHistory(); } /** - * Injects the supplied Java object into this XWalkView. + * Injects the supplied Java object into this XWalkViewInternal. * Each method defined in the class of the object should be * marked with {@link JavascriptInterface} if it's called by JavaScript. * @param object the supplied Java object, called by JavaScript. @@ -468,13 +468,13 @@ public void leaveFullscreen() { } /** - * Pause all layout, parsing and JavaScript timers for all XWalkView instances. + * Pause all layout, parsing and JavaScript timers for all XWalkViewInternal instances. * Typically it should be called when the activity for this view is paused, * and accordingly {@link #resumeTimers} should be called when the activity * is resumed again. * - * Note that it will globally impact all XWalkView instances, not limited to - * just this XWalkView. + * Note that it will globally impact all XWalkViewInternal instances, not limited to + * just this XWalkViewInternal. */ public void pauseTimers() { if (mContent == null) return; @@ -483,11 +483,11 @@ public void pauseTimers() { } /** - * Resume all layout, parsing and JavaScript timers for all XWalkView instances. + * Resume all layout, parsing and JavaScript timers for all XWalkViewInternal instances. * Typically it should be called when the activity for this view is resumed. * - * Note that it will globally impact all XWalkView instances, not limited to - * just this XWalkView. + * Note that it will globally impact all XWalkViewInternal instances, not limited to + * just this XWalkViewInternal. */ public void resumeTimers() { if (mContent == null) return; @@ -521,14 +521,14 @@ public void onShow() { } /** - * Release internal resources occupied by this XWalkView. + * Release internal resources occupied by this XWalkViewInternal. */ public void onDestroy() { destroy(); } /** - * Pass through activity result to XWalkView. Many internal facilities need this + * Pass through activity result to XWalkViewInternal. Many internal facilities need this * to handle activity result like JavaScript dialog, Crosswalk extensions, etc. * See * android.app.Activity.onActivityResult(). @@ -543,7 +543,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } /** - * Pass through intents to XWalkView. Many internal facilities need this + * Pass through intents to XWalkViewInternal. Many internal facilities need this * to receive the intents like web notification. See * * android.app.Activity.onNewIntent(). @@ -555,7 +555,7 @@ public boolean onNewIntent(Intent intent) { } /** - * Save current internal state of this XWalkView. This can help restore this state + * Save current internal state of this XWalkViewInternal. This can help restore this state * afterwards restoring. * @param outState the saved state for restoring. */ @@ -598,9 +598,9 @@ public String getXWalkVersion() { /** * Embedders use this to customize their handlers to events/callbacks related * to UI. - * @param client the XWalkUIClient defined by callers. + * @param client the XWalkUIClientInternal defined by callers. */ - public void setUIClient(XWalkUIClient client) { + public void setUIClient(XWalkUIClientInternal client) { if (mContent == null) return; checkThreadSafety(); mContent.setUIClient(client); @@ -609,9 +609,9 @@ public void setUIClient(XWalkUIClient client) { /** * Embedders use this to customize their handlers to events/callbacks related * to resource loading. - * @param client the XWalkResourceClient defined by callers. + * @param client the XWalkResourceClientInternal defined by callers. */ - public void setResourceClient(XWalkResourceClient client) { + public void setResourceClient(XWalkResourceClientInternal client) { if (mContent == null) return; checkThreadSafety(); mContent.setResourceClient(client); @@ -667,7 +667,7 @@ public void setNetworkAvailable(boolean networkUp) { * Enables remote debugging and returns the URL at which the dev tools server is listening * for commands. The allowedUid argument can be used to specify the uid of the process that is * permitted to connect. - * TODO(yongsheng): how to enable this in XWalkPreferences? + * TODO(yongsheng): how to enable this in XWalkPreferencesInternal? * * @hide */ @@ -738,9 +738,9 @@ void disableRemoteDebugging() { private static void checkThreadSafety() { if (Looper.myLooper() != Looper.getMainLooper()) { Throwable throwable = new Throwable( - "Warning: A XWalkView method was called on thread '" + + "Warning: A XWalkViewInternal method was called on thread '" + Thread.currentThread().getName() + "'. " + - "All XWalkView methods must be called on the UI thread. "); + "All XWalkViewInternal methods must be called on the UI thread. "); throw new RuntimeException(throwable); } } diff --git a/runtime/android/core/src/org/xwalk/core/XWalkWebChromeClient.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebChromeClient.java similarity index 90% rename from runtime/android/core/src/org/xwalk/core/XWalkWebChromeClient.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebChromeClient.java index 6fabedee4d..85ba8d9de2 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkWebChromeClient.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebChromeClient.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.xwalk.core; +package org.xwalk.core.internal; import android.app.Activity; import android.content.Context; @@ -33,19 +33,19 @@ /** * It's an internal legacy class which is to handle kinds of ui related * callback functions. It only handles those which are not exposed to - * external users compared to XWalkUIClient. + * external users compared to XWalkUIClientInternal. * * @hide */ public class XWalkWebChromeClient { private Context mContext; private View mCustomXWalkView; - private XWalkView mXWalkView; + private XWalkViewInternal mXWalkView; private XWalkWebChromeClient.CustomViewCallback mCustomViewCallback; private XWalkContentsClient mContentsClient = null; private long XWALK_MAX_QUOTA = 1024 * 1024 * 100; - public XWalkWebChromeClient(XWalkView view) { + public XWalkWebChromeClient(XWalkViewInternal view) { mContext = view.getContext(); mXWalkView = view; } @@ -56,25 +56,25 @@ void setContentsClient(XWalkContentsClient client) { /** * Notify the host application of a change in the document title. - * @param view The XWalkView that initiated the callback. + * @param view The XWalkViewInternal that initiated the callback. * @param title A String containing the new title of the document. */ - public void onReceivedTitle(XWalkView view, String title) {} + public void onReceivedTitle(XWalkViewInternal view, String title) {} /** * Notify the host application of a new favicon for the current page. - * @param view The XWalkView that initiated the callback. + * @param view The XWalkViewInternal that initiated the callback. * @param icon A Bitmap containing the favicon for the current page. */ - public void onReceivedIcon(XWalkView view, Bitmap icon) {} + public void onReceivedIcon(XWalkViewInternal view, Bitmap icon) {} /** * Notify the host application of the url for an apple-touch-icon. - * @param view The XWalkView that initiated the callback. + * @param view The XWalkViewInternal that initiated the callback. * @param url The icon url. * @param precomposed True if the url is for a precomposed touch icon. */ - public void onReceivedTouchIconUrl(XWalkView view, String url, + public void onReceivedTouchIconUrl(XWalkViewInternal view, String url, boolean precomposed) {} /** @@ -156,30 +156,30 @@ public void onHideCustomView() { /** * Request the host application to create a new window. If the host * application chooses to honor this request, it should return true from - * this method, create a new XWalkView to host the window, insert it into the + * this method, create a new XWalkViewInternal to host the window, insert it into the * View system and send the supplied resultMsg message to its target with - * the new XWalkView as an argument. If the host application chooses not to + * the new XWalkViewInternal as an argument. If the host application chooses not to * honor the request, it should return false from this method. The default * implementation of this method does nothing and hence returns false. - * @param view The XWalkView from which the request for a new window + * @param view The XWalkViewInternal from which the request for a new window * originated. * @param isDialog True if the new window should be a dialog, rather than * a full-size window. * @param isUserGesture True if the request was initiated by a user gesture, * such as the user clicking a link. - * @param resultMsg The message to send when once a new XWalkView has been + * @param resultMsg The message to send when once a new XWalkViewInternal has been * created. resultMsg.obj is a - * {@link XWalkView.XWalkViewTransport} object. This should be - * used to transport the new XWalkView, by calling - * {@link XWalkView.XWalkViewTransport#setXWalkView(XWalkView) - * XWalkView.XWalkViewTransport.setXWalkView(XWalkView)}. + * {@link XWalkViewInternal.XWalkViewTransport} object. This should be + * used to transport the new XWalkViewInternal, by calling + * {@link XWalkViewInternal.XWalkViewTransport#setXWalkView(XWalkViewInternal) + * XWalkViewInternal.XWalkViewTransport.setXWalkView(XWalkViewInternal)}. * @return This method should return true if the host application will * create a new window, in which case resultMsg should be sent to * its target. Otherwise, this method should return false. Returning * false from this method but also sending resultMsg will result in * undefined behavior. */ - public boolean onCreateWindow(XWalkView view, boolean isDialog, + public boolean onCreateWindow(XWalkViewInternal view, boolean isDialog, boolean isUserGesture, Message resultMsg) { return false; } @@ -201,7 +201,7 @@ public boolean onCreateWindow(XWalkView view, boolean isDialog, * database, in bytes * @param totalQuota The total quota for all origins, in bytes * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which - * must be used to inform the XWalkView of the new quota. + * must be used to inform the XWalkViewInternal of the new quota. */ // Note that the callback must always be executed at some point to ensure // that the sleeping WebCore thread is woken up. @@ -232,7 +232,7 @@ public void onExceededDatabaseQuota(String url, String databaseIdentifier, * in bytes. * @param quota The quota, in bytes * @param quotaUpdater An instance of {@link WebStorage.QuotaUpdater} which - * must be used to inform the XWalkView of the new quota. + * must be used to inform the XWalkViewInternal of the new quota. */ // Note that the callback must always be executed at some point to ensure // that the sleeping WebCore thread is woken up. diff --git a/runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegate.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegate.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegate.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegate.java index ea6812d054..f91bd0abab 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegate.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegate.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; diff --git a/runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegateAdapter.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegateAdapter.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegateAdapter.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegateAdapter.java index 3d7a12aa16..bc0ff7d233 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegateAdapter.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegateAdapter.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core; +package org.xwalk.core.internal; import android.util.Log; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkCoreExtensionBridge.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkCoreExtensionBridge.java similarity index 91% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkCoreExtensionBridge.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkCoreExtensionBridge.java index 6b956544c0..e0b136b8ff 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkCoreExtensionBridge.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkCoreExtensionBridge.java @@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.content.Context; import android.content.Intent; import org.chromium.base.CalledByNative; -import org.xwalk.core.extensions.XWalkExtensionAndroid; -import org.xwalk.core.extension.XWalkExtension; +import org.xwalk.core.internal.extensions.XWalkExtensionAndroid; +import org.xwalk.core.internal.extension.XWalkExtension; /** * The extension bridge for the implementation based on xwalk core. diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtension.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtension.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtension.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtension.java index d49ea66419..26ce61e324 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtension.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtension.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.content.Context; import android.content.Intent; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridge.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridge.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridge.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridge.java index 73f52e3d3a..2f5526ef02 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridge.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridge.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.content.Intent; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridgeFactory.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridgeFactory.java similarity index 92% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridgeFactory.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridgeFactory.java index e4dae3c729..2d15653303 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionBridgeFactory.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionBridgeFactory.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; /** * A factory used to create the extension bridge. diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionClientImpl.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionClientImpl.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionClientImpl.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionClientImpl.java index 1927e5dda6..6cea295db8 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionClientImpl.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionClientImpl.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.content.Context; import android.content.Intent; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContext.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContext.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContext.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContext.java index 78492acdc4..72d87624f9 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContext.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContext.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.app.Activity; import android.content.Context; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContextWrapper.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContextWrapper.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContextWrapper.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContextWrapper.java index e34288f2fb..eb08b548bd 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionContextWrapper.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionContextWrapper.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.app.Activity; import android.content.Context; diff --git a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionManager.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionManager.java index 1845580613..985ac03c60 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/XWalkExtensionManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/XWalkExtensionManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension; +package org.xwalk.core.internal.extension; import android.app.Activity; import android.content.Context; @@ -23,12 +23,12 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.contacts.Contacts; -import org.xwalk.core.extension.api.device_capabilities.DeviceCapabilities; -import org.xwalk.core.extension.api.launchscreen.LaunchScreenExtension; -import org.xwalk.core.extension.api.messaging.Messaging; -import org.xwalk.core.extension.api.presentation.PresentationExtension; -import org.xwalk.core.extension.api.screenorientation.ScreenOrientationExtension; +import org.xwalk.core.internal.extension.api.contacts.Contacts; +import org.xwalk.core.internal.extension.api.device_capabilities.DeviceCapabilities; +import org.xwalk.core.internal.extension.api.launchscreen.LaunchScreenExtension; +import org.xwalk.core.internal.extension.api.messaging.Messaging; +import org.xwalk.core.internal.extension.api.presentation.PresentationExtension; +import org.xwalk.core.internal.extension.api.screenorientation.ScreenOrientationExtension; /** * This internal class acts a manager to manage extensions. diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerJBMR1.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerJBMR1.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerJBMR1.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerJBMR1.java index 806468d74e..b14dbd43c3 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerJBMR1.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerJBMR1.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api; +package org.xwalk.core.internal.extension.api; import android.content.Context; import android.hardware.display.DisplayManager; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerNull.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerNull.java similarity index 93% rename from runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerNull.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerNull.java index 1d93a7fb4f..81aacfc6b2 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/DisplayManagerNull.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/DisplayManagerNull.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api; +package org.xwalk.core.internal.extension.api; import android.view.Display; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/OWNERS b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/OWNERS similarity index 100% rename from runtime/android/core/src/org/xwalk/core/extension/api/OWNERS rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/OWNERS diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/XWalkDisplayManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/XWalkDisplayManager.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/api/XWalkDisplayManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/XWalkDisplayManager.java index 6f3eec965f..44bd29c77d 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/XWalkDisplayManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/XWalkDisplayManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api; +package org.xwalk.core.internal.extension.api; import android.os.Build; import android.content.Context; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactConstants.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactConstants.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactConstants.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactConstants.java index dbb1a1820a..ec3de1699a 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactConstants.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactConstants.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Event; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactEventListener.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactEventListener.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactEventListener.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactEventListener.java index 78751ab429..453923ce0b 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactEventListener.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactEventListener.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.content.ContentResolver; import android.database.ContentObserver; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactFinder.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactFinder.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactFinder.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactFinder.java index 7301141459..f078d8527a 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactFinder.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactFinder.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.content.ContentResolver; import android.database.Cursor; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactJson.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactJson.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactJson.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactJson.java index e9b466d750..d6b1054ee3 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactJson.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactJson.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.util.Log; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactSaver.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactSaver.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactSaver.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactSaver.java index 074686e29b..ea4d730fb8 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactSaver.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactSaver.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.content.ContentProviderOperation; import android.content.ContentProviderOperation.Builder; @@ -28,7 +28,7 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.contacts.ContactConstants.ContactMap; +import org.xwalk.core.internal.extension.api.contacts.ContactConstants.ContactMap; /** * This class saves contacts according to a given JSONString. diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactUtils.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactUtils.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactUtils.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactUtils.java index 9ad8b27442..099f53898a 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/ContactUtils.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/ContactUtils.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/Contacts.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/Contacts.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/Contacts.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/Contacts.java index d7dcb74a15..d299969ab4 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/Contacts.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/Contacts.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.contacts; +package org.xwalk.core.internal.extension.api.contacts; import android.content.ContentProviderOperation; import android.content.ContentResolver; @@ -21,8 +21,8 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; public class Contacts extends XWalkExtension { public static final String NAME = "xwalk.experimental.contacts"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/contacts/contacts_api.js b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/contacts_api.js similarity index 100% rename from runtime/android/core/src/org/xwalk/core/extension/api/contacts/contacts_api.js rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/contacts_api.js diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilities.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilities.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilities.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilities.java index 653e53b0d3..7c2193efdc 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilities.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilities.java @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import android.util.Log; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; import org.json.JSONException; import org.json.JSONObject; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCPU.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCPU.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCPU.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCPU.java index ed1cc6d071..1dcdd438a3 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCPU.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCPU.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import android.util.Log; @@ -11,7 +11,7 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtensionContext; class DeviceCapabilitiesCPU { private static final String SYSTEM_INFO_STAT_FILE = "/proc/stat"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java similarity index 81% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java index d35dd2d941..ecea792f43 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesCodecs.java @@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtensionContext; class DeviceCapabilitiesCodecs { private static XWalkMediaCodec sMediaCodec; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java index c107080db8..3c36b71425 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesDisplay.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import android.content.Context; import android.graphics.Point; @@ -14,8 +14,8 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.XWalkDisplayManager; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.api.XWalkDisplayManager; +import org.xwalk.core.internal.extension.XWalkExtensionContext; class DeviceCapabilitiesDisplay { private static final String TAG = "DeviceCapabilitiesDisplay"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesMemory.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesMemory.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesMemory.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesMemory.java index 3b5c14efca..3a039b4090 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesMemory.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesMemory.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo; @@ -15,7 +15,7 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtensionContext; class DeviceCapabilitiesMemory { private static final String MEM_INFO_FILE = "/proc/meminfo"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesStorage.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesStorage.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesStorage.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesStorage.java index fc69d88de3..d830becb4d 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/DeviceCapabilitiesStorage.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/DeviceCapabilitiesStorage.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import android.content.BroadcastReceiver; import android.content.Context; @@ -20,7 +20,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtensionContext; class DeviceCapabilitiesStorage { private static final String TAG = "DeviceCapabilitiesStorage"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodec.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodec.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodec.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodec.java index b98bd445c6..7fc7934f01 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodec.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodec.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import java.util.HashSet; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodecNull.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodecNull.java similarity index 85% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodecNull.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodecNull.java index 087eb317d3..5e4cf8c095 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/MediaCodecNull.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/MediaCodecNull.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import org.json.JSONObject; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/XWalkMediaCodec.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/XWalkMediaCodec.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/XWalkMediaCodec.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/XWalkMediaCodec.java index 739c609594..88fb924547 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/XWalkMediaCodec.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/XWalkMediaCodec.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.device_capabilities; +package org.xwalk.core.internal.extension.api.device_capabilities; import java.util.Set; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/device_capabilities_api.js b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/device_capabilities_api.js similarity index 100% rename from runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/device_capabilities_api.js rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/device_capabilities_api.js diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/launchscreen/LaunchScreenExtension.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/launchscreen/LaunchScreenExtension.java similarity index 86% rename from runtime/android/core/src/org/xwalk/core/extension/api/launchscreen/LaunchScreenExtension.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/launchscreen/LaunchScreenExtension.java index 3fcf19fcac..421cc01a02 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/launchscreen/LaunchScreenExtension.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/launchscreen/LaunchScreenExtension.java @@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.launchscreen; +package org.xwalk.core.internal.extension.api.launchscreen; import android.content.Intent; import android.util.Log; -import org.xwalk.core.XWalkLaunchScreenManager; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.XWalkLaunchScreenManager; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; /** * A XWalk extension for LaunchScreen API implementation on Android. diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/Messaging.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/Messaging.java similarity index 93% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/Messaging.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/Messaging.java index b6e17236e6..b9abad0993 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/Messaging.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/Messaging.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; import android.app.Activity; import android.content.ContentValues; @@ -20,10 +20,10 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.messaging.MessagingManager; -import org.xwalk.core.extension.api.messaging.MessagingSmsManager; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.api.messaging.MessagingManager; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsManager; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; interface Command { void runCommand(int instanceID, JSONObject jsonMsg); diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingHelpers.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingHelpers.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingHelpers.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingHelpers.java index f84737c097..471565d0bb 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingHelpers.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingHelpers.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; import android.database.Cursor; import java.text.SimpleDateFormat; @@ -12,8 +12,8 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.messaging.MessagingSmsConstMaps; -import org.xwalk.core.extension.api.messaging.MessagingSmsConsts; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConstMaps; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConsts; public class MessagingHelpers { private static String buildSqlClause(boolean hasAnd, String condition, String column) { diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingManager.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingManager.java index 2a01e1ade4..c96c2674cf 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; import android.app.Activity; import android.app.PendingIntent; @@ -27,10 +27,10 @@ import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.messaging.Messaging; -import org.xwalk.core.extension.api.messaging.MessagingHelpers; -import org.xwalk.core.extension.api.messaging.MessagingSmsConstMaps; -import org.xwalk.core.extension.api.messaging.MessagingSmsConsts; +import org.xwalk.core.internal.extension.api.messaging.Messaging; +import org.xwalk.core.internal.extension.api.messaging.MessagingHelpers; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConstMaps; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConsts; public class MessagingManager { private final static String TAG = "MessagingManager"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConstMaps.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConstMaps.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConstMaps.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConstMaps.java index 69fc6858fc..5adc869684 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConstMaps.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConstMaps.java @@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; import java.util.HashMap; -import org.xwalk.core.extension.api.messaging.MessagingSmsConsts; +import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConsts; public class MessagingSmsConstMaps { final public static HashMap smsTableColumnDict = diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConsts.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConsts.java similarity index 97% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConsts.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConsts.java index ef0f1eff9d..023cb0e911 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsConsts.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsConsts.java @@ -17,7 +17,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; // Contains SMS content provider constants. These values are copied from // com.android.provider.telephony.* diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsManager.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsManager.java similarity index 99% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsManager.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsManager.java index 4d88c84fa1..bc46167023 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/MessagingSmsManager.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/MessagingSmsManager.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.messaging; +package org.xwalk.core.internal.extension.api.messaging; import android.app.Activity; import android.app.PendingIntent; @@ -25,7 +25,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.xwalk.core.extension.api.messaging.Messaging; +import org.xwalk.core.internal.extension.api.messaging.Messaging; public class MessagingSmsManager { private final static String TAG = "MessagingSmsManager"; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/messaging/messaging_api.js b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/messaging_api.js similarity index 100% rename from runtime/android/core/src/org/xwalk/core/extension/api/messaging/messaging_api.js rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/messaging_api.js diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/OWNERS b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/OWNERS similarity index 100% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/OWNERS rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/OWNERS diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationExtension.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationExtension.java similarity index 98% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationExtension.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationExtension.java index 9e21600d2b..2bef43bedd 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationExtension.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationExtension.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.presentation; +package org.xwalk.core.internal.extension.api.presentation; import android.content.Context; import android.os.Build; @@ -21,9 +21,9 @@ import org.chromium.base.ThreadUtils; -import org.xwalk.core.extension.api.XWalkDisplayManager; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.api.XWalkDisplayManager; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; /** * A XWalk extension for Presentation API implementation on Android. diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationView.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationView.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationView.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationView.java index acf9b94f5d..4faee104dc 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationView.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationView.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.presentation; +package org.xwalk.core.internal.extension.api.presentation; import android.os.Build; import android.content.Context; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewJBMR1.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewJBMR1.java similarity index 96% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewJBMR1.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewJBMR1.java index 31ad20b8b8..7c81e5abe2 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewJBMR1.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewJBMR1.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.presentation; +package org.xwalk.core.internal.extension.api.presentation; import android.app.Presentation; import android.os.Build; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewNull.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewNull.java similarity index 92% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewNull.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewNull.java index 9eeae7070f..1b3a6fd7f8 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/PresentationViewNull.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/PresentationViewNull.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.presentation; +package org.xwalk.core.internal.extension.api.presentation; import android.view.Display; import android.view.View; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/XWalkPresentationContent.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/XWalkPresentationContent.java similarity index 82% rename from runtime/android/core/src/org/xwalk/core/extension/api/presentation/XWalkPresentationContent.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/XWalkPresentationContent.java index 4ca8e55a29..dae6ad33f3 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/presentation/XWalkPresentationContent.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/presentation/XWalkPresentationContent.java @@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.presentation; +package org.xwalk.core.internal.extension.api.presentation; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkUIClient; -import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkUIClientInternal; +import org.xwalk.core.internal.XWalkViewInternal; /** * Represents the content to be presented on the secondary display. @@ -20,7 +20,7 @@ public class XWalkPresentationContent { public final int INVALID_PRESENTATION_ID = -1; private int mPresentationId = INVALID_PRESENTATION_ID; - private XWalkView mContentView; + private XWalkViewInternal mContentView; private Context mContext; private Activity mActivity; private PresentationDelegate mDelegate; @@ -34,19 +34,19 @@ public XWalkPresentationContent(Context context, Activity activity, Presentation public void load(final String url) { if (mContentView == null) { - mContentView = new XWalkView(mContext, mActivity); + mContentView = new XWalkViewInternal(mContext, mActivity); final XWalkClient xWalkClient = new XWalkClient(mContentView) { @Override - public void onPageFinished(XWalkView view, String url) { + public void onPageFinished(XWalkViewInternal view, String url) { mPresentationId = mContentView.getContentID(); onContentLoaded(); } }; mContentView.setXWalkClient(xWalkClient); - final XWalkUIClient xWalkUIClient = new XWalkUIClient(mContentView) { + final XWalkUIClientInternal xWalkUIClient = new XWalkUIClientInternal(mContentView) { @Override - public void onJavascriptCloseWindow(XWalkView view) { + public void onJavascriptCloseWindow(XWalkViewInternal view) { // The content was closed already. Web need to invalidate the // presentation id now. mPresentationId = INVALID_PRESENTATION_ID; diff --git a/runtime/android/core/src/org/xwalk/core/extension/api/screenorientation/ScreenOrientationExtension.java b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/screenorientation/ScreenOrientationExtension.java similarity index 95% rename from runtime/android/core/src/org/xwalk/core/extension/api/screenorientation/ScreenOrientationExtension.java rename to runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/screenorientation/ScreenOrientationExtension.java index 34d242b21d..6f6e0c0448 100644 --- a/runtime/android/core/src/org/xwalk/core/extension/api/screenorientation/ScreenOrientationExtension.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/screenorientation/ScreenOrientationExtension.java @@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.extension.api.screenorientation; +package org.xwalk.core.internal.extension.api.screenorientation; import android.app.Activity; import android.content.pm.ActivityInfo; import android.util.Log; import org.json.JSONObject; -import org.xwalk.core.extension.XWalkExtension; -import org.xwalk.core.extension.XWalkExtensionContext; +import org.xwalk.core.internal.extension.XWalkExtension; +import org.xwalk.core.internal.extension.XWalkExtensionContext; /** * XWalk extension for screen orientation api implementation on Android. diff --git a/runtime/android/core/src/org/xwalk/core/package.html b/runtime/android/core_internal/src/org/xwalk/core/internal/package.html similarity index 100% rename from runtime/android/core/src/org/xwalk/core/package.html rename to runtime/android/core_internal/src/org/xwalk/core/internal/package.html diff --git a/runtime/android/core/strings/android_xwalk_strings.grd b/runtime/android/core_internal/strings/android_xwalk_strings.grd similarity index 100% rename from runtime/android/core/strings/android_xwalk_strings.grd rename to runtime/android/core_internal/strings/android_xwalk_strings.grd From 81616211eae8ba4f89873f3db4ad8e8a20771903 Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Fri, 23 May 2014 14:53:51 +0800 Subject: [PATCH 03/12] Revert "[Android][Shared Core] Add create internal script" This reverts commit 649db6b0c94daecc53e133cef4bcc48ea0dfb93a. --- create_internal.py | 69 ---------------------------------------------- 1 file changed, 69 deletions(-) delete mode 100644 create_internal.py diff --git a/create_internal.py b/create_internal.py deleted file mode 100644 index 9ce32d7a01..0000000000 --- a/create_internal.py +++ /dev/null @@ -1,69 +0,0 @@ -import os -import re -import shutil - - -xwalk_path = os.path.dirname(__file__) -core_path = os.path.join(xwalk_path, 'runtime', 'android', 'core') -core_internal_path = os.path.join(xwalk_path, 'runtime', 'android', 'core_internal') -extension_path = os.path.join(xwalk_path, 'extensions', 'android', 'java') - -class_list = [ - 'XWalkJavascriptResultHandler', - 'XWalkNavigationHistory', - 'XWalkPreferences', - 'XWalkUIClient', - 'XWalkJavascriptResult', - 'XWalkNavigationItem', - 'XWalkResourceClient', - 'XWalkView' -] - - -def RenamePackage(src_root, orig): - for d, _, files in os.walk(os.path.join(src_root, 'src')): - for f in files: - if os.path.splitext(f)[1] == '.java': - in_f = open(os.path.join(d, f), 'r') - content = in_f.readlines() - in_f.close() - out_f = open(os.path.join(d, f), 'w') - for line in content: - out_f.write(line.replace(orig, '%s.internal' % orig)) - out_f.close() - orig_dir = os.path.join(src_root, 'src', orig.replace('.', os.path.sep)) - new_dir = os.path.join(src_root, 'src', orig.replace('.', os.path.sep), 'internal') - temp_dir = orig_dir + 'tmp' - if os.path.isdir(new_dir): - shutil.rmtree(new_dir) - if os.path.isdir(temp_dir): - shutil.rmtree(temp_dir) - os.rename(orig_dir, temp_dir) - os.mkdir(orig_dir) - os.rename(temp_dir, new_dir) - - -def RenameClass(src_root, orig): - for d, _, files in os.walk(os.path.join(src_root, 'src')): - for f in files: - if os.path.splitext(f)[1] == '.java': - in_f = open(os.path.join(d, f), 'r') - content = in_f.readlines() - in_f.close() - if os.path.splitext(f)[0] == orig: - os.remove(os.path.join(d, f)) - f = '%sInternal.java' % orig - out_f = open(os.path.join(d, f), 'w') - for line in content: - out_f.write(re.sub(r'\b%s\b' % orig, '%sInternal' % orig, line)) - out_f.close() - - -for clazz in class_list: - RenameClass(core_path, clazz) -RenamePackage(core_path, 'org.xwalk.core') -RenamePackage(extension_path, 'org.xwalk.core') -if os.path.isdir(core_internal_path): - shutil.rmtree(core_internal_path) -os.rename(core_path, core_internal_path) - From e9579d816fe932e5696e1d51fd4bf75590852e02 Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Sun, 4 May 2014 12:31:36 +0800 Subject: [PATCH 04/12] [Android][Shared Core] Split xwalk core internal and xwalk core 1. Previous commit does: a. Move all xwalk core java classes include extension related to xwalk core internal. b. Rename all classes Embedding API exposes as ClassInternal. 2. This commit does: a. Create a thin layer which is now xwalk core, simply wraps core internal and override the functions returns internal objects by creating and returnning wrapped objects in xwalk core. b. Create target core_internal_java and let core_java depends on it. c. Some necessary package name changing in tools and scripts. --- .../extension/XWalkExtensionClient.java | 2 +- .../XWalkExtensionContextClient.java | 2 +- app/tools/android/make_apk.py | 4 +- build/android/generate_app_packaging_tool.py | 20 ++-- .../org/xwalk/core/XWalkJavascriptResult.java | 32 ++++++ .../core/XWalkJavascriptResultHandler.java | 32 ++++++ .../xwalk/core/XWalkNavigationHistory.java | 33 ++++++ .../org/xwalk/core/XWalkNavigationItem.java | 15 +++ .../src/org/xwalk/core/XWalkPreferences.java | 10 ++ .../org/xwalk/core/XWalkResourceClient.java | 84 ++++++++++++++ .../src/org/xwalk/core/XWalkUIClient.java | 107 ++++++++++++++++++ .../core/src/org/xwalk/core/XWalkView.java | 32 ++++++ .../{internal => }/JavascriptInterface.java | 2 +- .../org/xwalk/core/internal/XWalkContent.java | 2 + .../XWalkJavascriptResultHandlerInternal.java | 2 +- .../XWalkNavigationHistoryInternal.java | 4 +- .../internal/XWalkNavigationItemInternal.java | 4 +- .../internal/XWalkPreferencesInternal.java | 2 +- .../xwview/shell/XWalkViewShellActivity.java | 8 +- .../xwalk/runtime/XWalkRuntimeTestHelper.java | 11 +- runtime/browser/android/xwalk_settings.cc | 2 +- .../core/xwview/test/ClearHistoryTest.java | 2 +- .../core/xwview/test/CookieManagerTest.java | 4 +- .../core/xwview/test/ExtensionBroadcast.java | 2 +- .../xwview/test/ExtensionBroadcastTest.java | 4 +- .../xwalk/core/xwview/test/ExtensionEcho.java | 2 +- .../core/xwview/test/ExtensionEchoTest.java | 4 +- .../test/GeolocationPermissionTest.java | 6 +- .../core/xwview/test/HandleActionUriTest.java | 4 +- .../core/xwview/test/OnPageFinishedTest.java | 2 +- .../core/xwview/test/OnUpdateTitleTest.java | 4 +- .../xwalk/core/xwview/test/ReloadTest.java | 2 +- .../test/RendererResponsivenessTest.java | 13 ++- .../xwview/test/SaveRestoreStateTest.java | 2 +- .../xwview/test/SetAppCacheEnabledTest.java | 6 +- .../xwview/test/SetDatabaseEnabledTest.java | 2 +- .../xwview/test/SetDomStorageEnabledTest.java | 6 +- .../xwview/test/SetNetworkAvailableTest.java | 2 +- .../xwalk/core/xwview/test/UserAgentTest.java | 4 +- .../core/xwview/test/WebNotificationTest.java | 6 +- .../core/xwview/test/XWalkViewTestBase.java | 13 ++- xwalk_android.gypi | 54 +++++---- 42 files changed, 460 insertions(+), 94 deletions(-) create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkPreferences.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkUIClient.java create mode 100644 runtime/android/core/src/org/xwalk/core/XWalkView.java rename runtime/android/core_internal/src/org/xwalk/core/{internal => }/JavascriptInterface.java (96%) diff --git a/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionClient.java b/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionClient.java index 5896f96fd9..03fe53e1ef 100644 --- a/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionClient.java +++ b/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionClient.java @@ -25,7 +25,7 @@ */ public class XWalkExtensionClient extends CrossPackageWrapper { - private final static String EXTENSION_CLASS_NAME = "org.xwalk.core.extension.XWalkExtensionClientImpl"; + private final static String EXTENSION_CLASS_NAME = "org.xwalk.core.internal.extension.XWalkExtensionClientImpl"; private Object mInstance; private Method mGetExtensionName; private Method mGetJsApi; diff --git a/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionContextClient.java b/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionContextClient.java index 9796466652..720398cdcb 100644 --- a/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionContextClient.java +++ b/app/android/runtime_client/src/org/xwalk/app/runtime/extension/XWalkExtensionContextClient.java @@ -23,7 +23,7 @@ */ public final class XWalkExtensionContextClient extends CrossPackageWrapper { private final static String EXTENSION_CLASS_NAME = - "org.xwalk.core.extension.XWalkExtensionContextWrapper"; + "org.xwalk.core.internal.extension.XWalkExtensionContextWrapper"; private Object mInstance; private Method mGetContext; private Method mGetActivity; diff --git a/app/tools/android/make_apk.py b/app/tools/android/make_apk.py index 4437248ef2..c11b1d2c78 100755 --- a/app/tools/android/make_apk.py +++ b/app/tools/android/make_apk.py @@ -316,7 +316,7 @@ def Execution(options, name): res_ui_java = os.path.join('gen', 'ui_java') res_content_java = os.path.join('gen', 'content_java') - res_xwalk_java = os.path.join('gen', 'xwalk_core_java') + res_xwalk_java = os.path.join('gen', 'xwalk_core_internal_java') res_dirs = ('-DADDITIONAL_RES_DIRS=' + os.path.join(res_ui_java, 'res_crunched') + ' ' + os.path.join(res_ui_java, 'res_v14_compatibility') + ' ' @@ -331,7 +331,7 @@ def Execution(options, name): + os.path.join('libs_res', 'runtime') + ' ' + os.path.join(res_xwalk_java, 'res_grit')) res_packages = ('-DADDITIONAL_RES_PACKAGES=org.chromium.ui ' - 'org.xwalk.core org.chromium.content') + 'org.xwalk.core.internal org.chromium.content') res_r_text_files = ('-DADDITIONAL_R_TEXT_FILES=' + os.path.join(res_ui_java, 'java_R', 'R.txt') + ' ' + os.path.join(res_xwalk_java, 'java_R', 'R.txt') + ' ' diff --git a/build/android/generate_app_packaging_tool.py b/build/android/generate_app_packaging_tool.py index e501026611..8dace51bba 100755 --- a/build/android/generate_app_packaging_tool.py +++ b/build/android/generate_app_packaging_tool.py @@ -76,7 +76,7 @@ def PrepareFromXwalk(src_dir, target_dir): os.path.join(target_dir, 'libs_res/content')), (os.path.join(source_code_dir, 'ui/android/java/res'), os.path.join(target_dir, 'libs_res/ui')), - (os.path.join(source_code_dir, 'xwalk/runtime/android/core/res'), + (os.path.join(source_code_dir, 'xwalk/runtime/android/core_internal/res'), os.path.join(target_dir, 'libs_res/runtime')), (os.path.join(gen_res_src_dir, 'ui_java/java_R'), @@ -97,14 +97,16 @@ def PrepareFromXwalk(src_dir, target_dir): (os.path.join(gen_res_src_dir, 'content_java/res_v14_compatibility'), os.path.join(gen_res_target_dir, 'content_java/res_v14_compatibility')), - (os.path.join(gen_res_src_dir, 'xwalk_core_java/java_R'), - os.path.join(gen_res_target_dir, 'xwalk_core_java/java_R')), - (os.path.join(gen_res_src_dir, 'xwalk_core_java/res_crunched'), - os.path.join(gen_res_target_dir, 'xwalk_core_java/res_crunched')), - (os.path.join(gen_res_src_dir, 'xwalk_core_java/res_grit'), - os.path.join(gen_res_target_dir, 'xwalk_core_java/res_grit')), - (os.path.join(gen_res_src_dir, 'xwalk_core_java/res_v14_compatibility'), - os.path.join(gen_res_target_dir, 'xwalk_core_java/res_v14_compatibility')), + (os.path.join(gen_res_src_dir, 'xwalk_core_internal_java/java_R'), + os.path.join(gen_res_target_dir, 'xwalk_core_internal_java/java_R')), + (os.path.join(gen_res_src_dir, 'xwalk_core_internal_java/res_crunched'), + os.path.join(gen_res_target_dir, 'xwalk_core_internal_java/res_crunched')), + (os.path.join(gen_res_src_dir, 'xwalk_core_internal_java/res_grit'), + os.path.join(gen_res_target_dir, 'xwalk_core_internal_java/res_grit')), + (os.path.join(gen_res_src_dir, + 'xwalk_core_internal_java/res_v14_compatibility'), + os.path.join(gen_res_target_dir, + 'xwalk_core_internal_java/res_v14_compatibility')), # The app wrapper code. It's the template Java code. (os.path.join(source_code_dir, 'xwalk/app/android/app_template'), diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java new file mode 100644 index 0000000000..30baa09379 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java @@ -0,0 +1,32 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +/** + * This interface is used when XWalkUIClientInternal offers a JavaScript + * modal dialog (alert, beforeunload or confirm) to enable the client to + * handle the dialog in their own way. XWalkUIClientInternal will offer an object + * that implements this interface to the client and when the client has handled + * the dialog, it must either callback with confirm() or cancel() to allow + * processing to continue. + */ +public interface XWalkJavascriptResult { + /** + * Handle a confirm with a result from caller. + * @param result the result string from caller. + */ + public void confirmWithResult(String result); + + /** + * Handle a confirm without a result. + */ + public void confirm(); + + /** + * Handle the result if the caller cancelled the dialog. + */ + public void cancel(); +} + diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java new file mode 100644 index 0000000000..401746a362 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java @@ -0,0 +1,32 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import org.xwalk.core.internal.XWalkJavascriptResultInternal; + +final class XWalkJavascriptResultHandler implements XWalkJavascriptResult{ + + private XWalkJavascriptResultInternal internal; + + XWalkJavascriptResultHandler(XWalkJavascriptResultInternal internal) { + this.internal = internal; + } + + XWalkJavascriptResultInternal getInternal() { + return this.internal; + } + + public void confirm() { + internal.confirm(); + } + + public void confirmWithResult(final String promptResult) { + internal.confirmWithResult(promptResult); + } + + public void cancel() { + internal.cancel(); + } +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java b/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java new file mode 100644 index 0000000000..70e3fa0b80 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java @@ -0,0 +1,33 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import org.xwalk.core.internal.XWalkNavigationHistoryInternal; +import org.xwalk.core.internal.XWalkNavigationItemInternal; + +public class XWalkNavigationHistory extends XWalkNavigationHistoryInternal { + + public XWalkNavigationHistory(XWalkNavigationHistoryInternal internal) { + super(internal); + } + + public XWalkNavigationItem getItemAt(int index) { + XWalkNavigationItemInternal item = super.getItemAt(index); + if (item == null || item instanceof XWalkNavigationItem) { + return (XWalkNavigationItem) item; + } else { + return new XWalkNavigationItem(item); + } + } + + public XWalkNavigationItem getCurrentItem() { + XWalkNavigationItemInternal item = super.getCurrentItem(); + if (item == null || item instanceof XWalkNavigationItem) { + return (XWalkNavigationItem) item; + } else { + return new XWalkNavigationItem(item); + } + } +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java b/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java new file mode 100644 index 0000000000..a44cd4df26 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java @@ -0,0 +1,15 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import org.xwalk.core.internal.XWalkNavigationItemInternal; + +public final class XWalkNavigationItem extends XWalkNavigationItemInternal { + + public XWalkNavigationItem(XWalkNavigationItemInternal internal) { + super(internal); + } + +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java b/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java new file mode 100644 index 0000000000..60f21ff0f3 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java @@ -0,0 +1,10 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import org.xwalk.core.internal.XWalkPreferencesInternal; + +public final class XWalkPreferences extends XWalkPreferencesInternal { +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java b/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java new file mode 100644 index 0000000000..8716fc3921 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java @@ -0,0 +1,84 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import android.webkit.WebResourceResponse; + +import org.xwalk.core.internal.XWalkResourceClientInternal; +import org.xwalk.core.internal.XWalkViewInternal; + +public class XWalkResourceClient extends XWalkResourceClientInternal { + + public XWalkResourceClient(XWalkView view) { + super(view); + } + + @Override + public void onLoadStarted(XWalkViewInternal view, String url) { + if (view instanceof XWalkView) { + onLoadStarted((XWalkView) view, url); + } else { + super.onLoadStarted(view, url); + } + } + + public void onLoadStarted(XWalkView view, String url) { + super.onLoadStarted(view, url); + } + + @Override + public void onLoadFinished(XWalkViewInternal view, String url) { + if (view instanceof XWalkView) { + onLoadFinished((XWalkView) view, url); + } else { + super.onLoadFinished(view, url); + } + } + + public void onLoadFinished(XWalkView view, String url) { + super.onLoadFinished(view, url); + } + + @Override + public void onProgressChanged(XWalkViewInternal view, int progressInPercent) { + if (view instanceof XWalkView) { + onProgressChanged((XWalkView) view, progressInPercent); + } else { + super.onProgressChanged(view, progressInPercent); + } + } + + public void onProgressChanged(XWalkView view, int progressInPercent) { + super.onProgressChanged(view, progressInPercent); + } + + @Override + public WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, String url) { + if (view instanceof XWalkView) { + return shouldInterceptLoadRequest((XWalkView) view, url); + } else { + return super.shouldInterceptLoadRequest(view, url); + } + } + + public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { + return super.shouldInterceptLoadRequest(view, url); + } + + @Override + public void onReceivedLoadError(XWalkViewInternal view, int errorCode, String description, + String failingUrl) { + if (view instanceof XWalkView) { + onReceivedLoadError((XWalkView) view, errorCode, description, failingUrl); + } else { + super.onReceivedLoadError(view, errorCode, description, failingUrl); + } + } + + public void onReceivedLoadError(XWalkView view, int errorCode, String description, + String failingUrl) { + super.onReceivedLoadError(view, errorCode, description, failingUrl); + } +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java b/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java new file mode 100644 index 0000000000..f3827a33aa --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java @@ -0,0 +1,107 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import android.net.Uri; +import android.webkit.ValueCallback; + +import org.xwalk.core.internal.XWalkJavascriptResultInternal; +import org.xwalk.core.internal.XWalkUIClientInternal; +import org.xwalk.core.internal.XWalkViewInternal; + +public class XWalkUIClient extends XWalkUIClientInternal { + + public XWalkUIClient(XWalkView view) { + super(view); + } + + @Override + public boolean onJavascriptModalDialog(XWalkViewInternal view, JavascriptMessageType type, + String url, String message, String defaultValue, XWalkJavascriptResultInternal result) { + if (view instanceof XWalkView) { + return onJavascriptModalDialog( + (XWalkView) view, + type, url, message, defaultValue, + new XWalkJavascriptResultHandler(result)); + } else { + return super.onJavascriptModalDialog(view, type, url, message, defaultValue, result); + } + } + + public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType type, + String url, String message, String defaultValue, XWalkJavascriptResult result) { + XWalkJavascriptResultInternal resultInternal = + ((XWalkJavascriptResultHandler) result).getInternal(); + return super.onJavascriptModalDialog( + view, type, url, message, defaultValue, resultInternal); + } + + @Override + public void onRequestFocus(XWalkViewInternal view) { + if (view instanceof XWalkView) { + onRequestFocus((XWalkView) view); + } else { + super.onRequestFocus(view); + } + } + + public void onRequestFocus(XWalkView view) { + super.onRequestFocus(view); + } + + @Override + public void onJavascriptCloseWindow(XWalkViewInternal view) { + if (view instanceof XWalkView) { + onJavascriptCloseWindow((XWalkView) view); + } else { + super.onJavascriptCloseWindow(view); + } + } + + public void onJavascriptCloseWindow(XWalkView view) { + super.onJavascriptCloseWindow(view); + } + + @Override + public void onFullscreenToggled(XWalkViewInternal view, boolean enterFullscreen) { + if (view instanceof XWalkView) { + onFullscreenToggled((XWalkView) view, enterFullscreen); + } else { + super.onFullscreenToggled(view, enterFullscreen); + } + } + + public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) { + super.onFullscreenToggled(view, enterFullscreen); + } + + @Override + public void openFileChooser(XWalkViewInternal view, ValueCallback uploadFile, + String acceptType, String capture) { + if (view instanceof XWalkView) { + openFileChooser((XWalkView) view, uploadFile, acceptType, capture); + } else { + super.openFileChooser(view, uploadFile, acceptType, capture); + } + } + + public void openFileChooser(XWalkView view, ValueCallback uploadFile, + String acceptType, String capture) { + super.openFileChooser(view, uploadFile, acceptType, capture); + } + + @Override + public void onScaleChanged(XWalkViewInternal view, float oldScale, float newScale) { + if (view instanceof XWalkView) { + onScaleChanged((XWalkView) view, oldScale, newScale); + } else { + super.onScaleChanged(view, oldScale, newScale); + } + } + + public void onScaleChanged(XWalkView view, float oldScale, float newScale) { + super.onScaleChanged(view, oldScale, newScale); + } +} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkView.java b/runtime/android/core/src/org/xwalk/core/XWalkView.java new file mode 100644 index 0000000000..77f7f1b259 --- /dev/null +++ b/runtime/android/core/src/org/xwalk/core/XWalkView.java @@ -0,0 +1,32 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core; + +import android.app.Activity; +import android.content.Context; +import android.util.AttributeSet; + +import org.xwalk.core.internal.XWalkNavigationHistoryInternal; +import org.xwalk.core.internal.XWalkViewInternal; + +public class XWalkView extends XWalkViewInternal { + + public XWalkView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public XWalkView(Context context, Activity activity) { + super(context, activity); + } + + public XWalkNavigationHistory getNavigationHistory() { + XWalkNavigationHistoryInternal history = super.getNavigationHistory(); + if (history == null || history instanceof XWalkNavigationHistory) { + return (XWalkNavigationHistory) history; + } else { + return new XWalkNavigationHistory(history); + } + } +} diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java b/runtime/android/core_internal/src/org/xwalk/core/JavascriptInterface.java similarity index 96% rename from runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java rename to runtime/android/core_internal/src/org/xwalk/core/JavascriptInterface.java index 1c36f37d4c..39f89e5e04 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/JavascriptInterface.java +++ b/runtime/android/core_internal/src/org/xwalk/core/JavascriptInterface.java @@ -3,7 +3,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.xwalk.core.internal; +package org.xwalk.core; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java index 6ed1c475ac..3709449954 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java @@ -36,6 +36,8 @@ import org.chromium.media.MediaPlayerBridge; import org.chromium.ui.base.ActivityWindowAndroid; +import org.xwalk.core.JavascriptInterface; + @JNINamespace("xwalk") /** * This class is the implementation class for XWalkViewInternal by calling internal diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java index 6aea0ad554..cc6bb413e5 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java @@ -6,7 +6,7 @@ import org.chromium.base.ThreadUtils; -class XWalkJavascriptResultHandlerInternal implements XWalkJavascriptResultInternal { +public class XWalkJavascriptResultHandlerInternal implements XWalkJavascriptResultInternal { private XWalkContentsClientBridge mBridge; private final int mId; diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java index 23db336607..23991948a2 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java @@ -12,7 +12,7 @@ * This class represents a navigation history for a XWalkViewInternal instance. * It's not thread-safe and should be only called on UI thread. */ -public final class XWalkNavigationHistoryInternal implements Cloneable, Serializable { +public class XWalkNavigationHistoryInternal implements Cloneable, Serializable { private NavigationHistory mHistory; private XWalkViewInternal mXWalkView; @@ -21,7 +21,7 @@ public final class XWalkNavigationHistoryInternal implements Cloneable, Serializ mHistory = history; } - XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { + public XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { mXWalkView = history.mXWalkView; mHistory = history.mHistory; } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java index 36d08bad2d..b14a8a9b1c 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java @@ -9,14 +9,14 @@ /** * This class represents a navigation item and is managed in XWalkNavigationHistoryInternal. */ -public final class XWalkNavigationItemInternal implements Cloneable { +public class XWalkNavigationItemInternal implements Cloneable { private NavigationEntry mEntry; XWalkNavigationItemInternal(NavigationEntry entry) { mEntry = entry; } - XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { + public XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { mEntry = item.mEntry; } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java index a29cc8b45d..5609c23450 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java @@ -16,7 +16,7 @@ * Afterwards, the preference could be read from all threads and can impact * all XWalkViewInternal instances. */ -public final class XWalkPreferencesInternal { +public class XWalkPreferencesInternal { private static HashMap sPrefMap = new HashMap(); // Here we use WeakReference to make sure the KeyValueChangeListener instance // can be GC-ed to avoid memory leaking issue. diff --git a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java index 06fa264097..4ac4091d46 100644 --- a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java +++ b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java @@ -40,7 +40,8 @@ import org.xwalk.core.XWalkPreferences; import org.xwalk.core.XWalkResourceClient; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkViewInternal; +import org.xwalk.core.internal.XWalkWebChromeClient; public class XWalkViewShellActivity extends FragmentActivity implements ActionBar.TabListener, XWalkViewSectionFragment.OnXWalkViewCreatedListener{ @@ -320,10 +321,11 @@ public void onProgressChanged(XWalkView view, int newProgress) { } }); + // TODO: core shell shouldn't use internal APIs. xwalkView.setXWalkWebChromeClient(new XWalkWebChromeClient(xwalkView) { @Override - public void onReceivedTitle(XWalkView view, String title) { - mSectionsPagerAdapter.setPageTitle(view, title); + public void onReceivedTitle(XWalkViewInternal view, String title) { + mSectionsPagerAdapter.setPageTitle((XWalkView)view, title); } }); } diff --git a/runtime/android/runtime/src/org/xwalk/runtime/XWalkRuntimeTestHelper.java b/runtime/android/runtime/src/org/xwalk/runtime/XWalkRuntimeTestHelper.java index 8ede0af8b2..74ce4c3691 100644 --- a/runtime/android/runtime/src/org/xwalk/runtime/XWalkRuntimeTestHelper.java +++ b/runtime/android/runtime/src/org/xwalk/runtime/XWalkRuntimeTestHelper.java @@ -11,10 +11,11 @@ import java.lang.reflect.Method; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkResourceClient; -import org.xwalk.core.XWalkWebChromeClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkViewInternal; +import org.xwalk.core.internal.XWalkWebChromeClient; class XWalkRuntimeTestHelper { @@ -47,7 +48,7 @@ class TestXWalkClient extends XWalkClient { } @Override - public void onPageStarted(XWalkView view, String url) { + public void onPageStarted(XWalkViewInternal view, String url) { super.onPageStarted(view, url); if (mCallbackForTest != null) { try { @@ -61,7 +62,7 @@ public void onPageStarted(XWalkView view, String url) { } @Override - public void onPageFinished(XWalkView view, String url) { + public void onPageFinished(XWalkViewInternal view, String url) { super.onPageFinished(view, url); if (mCallbackForTest != null) { try { @@ -81,7 +82,7 @@ class TestXWalkWebChromeClient extends XWalkWebChromeClient { } @Override - public void onReceivedTitle(XWalkView view, String title) { + public void onReceivedTitle(XWalkViewInternal view, String title) { super.onReceivedTitle(view, title); if (mCallbackForTest != null) { try { diff --git a/runtime/browser/android/xwalk_settings.cc b/runtime/browser/android/xwalk_settings.cc index 143239cdbb..b274b70156 100644 --- a/runtime/browser/android/xwalk_settings.cc +++ b/runtime/browser/android/xwalk_settings.cc @@ -42,7 +42,7 @@ struct XWalkSettings::FieldIds { // FIXME: we should be using a new GetFieldIDFromClassName() with caching. ScopedJavaLocalRef clazz( - GetClass(env, "org/xwalk/core/XWalkSettings")); + GetClass(env, "org/xwalk/core/internal/XWalkSettings")); allow_scripts_to_close_windows = GetFieldID(env, clazz, "mAllowScriptsToCloseWindows", "Z"); load_images_automatically = diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ClearHistoryTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ClearHistoryTest.java index 271bca7506..d88784f1a2 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ClearHistoryTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ClearHistoryTest.java @@ -10,8 +10,8 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; /** * Test suite for clearHistory(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/CookieManagerTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/CookieManagerTest.java index 33028031f2..b38a260bc3 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/CookieManagerTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/CookieManagerTest.java @@ -23,9 +23,9 @@ import java.util.List; import java.util.Set; -import org.xwalk.core.XWalkCookieManager; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkCookieManager; +import org.xwalk.core.internal.XWalkClient; /** * Tests for the CookieManager. diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcast.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcast.java index e0c194ba6b..67cca254d4 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcast.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcast.java @@ -4,7 +4,7 @@ package org.xwalk.core.xwview.test; -import org.xwalk.core.extensions.XWalkExtensionAndroid; +import org.xwalk.core.internal.extensions.XWalkExtensionAndroid; public class ExtensionBroadcast extends XWalkExtensionAndroid { diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcastTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcastTest.java index 2d3df74d03..770717618a 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcastTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionBroadcastTest.java @@ -10,9 +10,9 @@ import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkWebChromeClient; import org.xwalk.core.xwview.test.ExtensionBroadcast; /** diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEcho.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEcho.java index 012b883fee..8096c11ff2 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEcho.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEcho.java @@ -4,7 +4,7 @@ package org.xwalk.core.xwview.test; -import org.xwalk.core.extensions.XWalkExtensionAndroid; +import org.xwalk.core.internal.extensions.XWalkExtensionAndroid; public class ExtensionEcho extends XWalkExtensionAndroid { diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEchoTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEchoTest.java index d31ce7e571..181a95549f 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEchoTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ExtensionEchoTest.java @@ -10,9 +10,9 @@ import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkWebChromeClient; import org.xwalk.core.xwview.test.ExtensionEcho; /** diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/GeolocationPermissionTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/GeolocationPermissionTest.java index 9055994cfc..708b93f1fb 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/GeolocationPermissionTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/GeolocationPermissionTest.java @@ -11,10 +11,10 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkGeolocationPermissions; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkGeolocationPermissions; +import org.xwalk.core.internal.XWalkWebChromeClient; /** * Test suite for onGeolocationPermissionsShowPrompt() and diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/HandleActionUriTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/HandleActionUriTest.java index 338fef8907..c1c5e252db 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/HandleActionUriTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/HandleActionUriTest.java @@ -13,8 +13,8 @@ import org.chromium.base.test.util.Feature; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkNavigationHandlerImpl; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkNavigationHandlerImpl; /** * Test suite for handling ActionUri. diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnPageFinishedTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnPageFinishedTest.java index 019d867d96..77097ed17e 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnPageFinishedTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnPageFinishedTest.java @@ -12,8 +12,8 @@ import org.chromium.content.browser.test.util.TestCallbackHelperContainer; import org.chromium.net.test.util.TestWebServer; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; import java.util.concurrent.TimeUnit; diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnUpdateTitleTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnUpdateTitleTest.java index 8c19e80b54..bd00acc9f4 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnUpdateTitleTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/OnUpdateTitleTest.java @@ -9,9 +9,9 @@ import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkWebChromeClient; /** * Test suite for onUpdateTitle(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ReloadTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ReloadTest.java index f07f0765ca..0554921768 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/ReloadTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/ReloadTest.java @@ -11,8 +11,8 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.net.test.util.TestWebServer; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; /** * Test suite for reload(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/RendererResponsivenessTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/RendererResponsivenessTest.java index 1ebc5c14df..fb4eae6ee1 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/RendererResponsivenessTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/RendererResponsivenessTest.java @@ -19,8 +19,9 @@ import org.chromium.content.browser.ContentView; import org.chromium.content.browser.ContentViewCore; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkViewInternal; /** * Renderer responsiveness tests: @@ -46,7 +47,7 @@ public void testRendererUnresponsive() throws Throwable { setXWalkClient(new XWalkViewTestBase.TestXWalkClient()); getXWalkView().setXWalkClient(new XWalkClient(getXWalkView()) { @Override - public void onRendererUnresponsive(XWalkView view) { + public void onRendererUnresponsive(XWalkViewInternal view) { unresponsiveHelper.notifyCalled(view); } }); @@ -82,7 +83,7 @@ public void testRendererResponsiveAgain() throws Throwable { * Called once the renderer become responsive again. */ @Override - public void onRendererResponsive(XWalkView view) { + public void onRendererResponsive(XWalkViewInternal view) { responsiveHelper.notifyCalled(view); } }); @@ -107,13 +108,13 @@ public void onRendererResponsive(XWalkView view) { } private final class OnRendererResponsivenessHelper extends CallbackHelper { - private XWalkView mView; + private XWalkViewInternal mView; - public void notifyCalled(XWalkView view) { + public void notifyCalled(XWalkViewInternal view) { mView = view; notifyCalled(); } - public XWalkView getXWalkView() { + public XWalkViewInternal getXWalkView() { assert getCallCount() > 0; return mView; } diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SaveRestoreStateTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SaveRestoreStateTest.java index 3212860e2e..d7cc0c2763 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SaveRestoreStateTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SaveRestoreStateTest.java @@ -17,9 +17,9 @@ import org.chromium.content.browser.NavigationHistory; import org.chromium.net.test.util.TestWebServer; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkNavigationHistory; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; import org.xwalk.core.xwview.test.util.CommonResources; import java.util.concurrent.Callable; diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetAppCacheEnabledTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetAppCacheEnabledTest.java index fa25a468ee..8bb8212640 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetAppCacheEnabledTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetAppCacheEnabledTest.java @@ -20,10 +20,10 @@ import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.net.test.util.TestWebServer; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkSettings; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkSettings; +import org.xwalk.core.internal.XWalkWebChromeClient; import org.xwalk.core.xwview.test.util.CommonResources; /** diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDatabaseEnabledTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDatabaseEnabledTest.java index 838b01de53..d7b29720d1 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDatabaseEnabledTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDatabaseEnabledTest.java @@ -13,7 +13,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.UrlUtils; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkClient; +import org.xwalk.core.internal.XWalkClient; /** * Test suite for setDatabaseEnabled(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDomStorageEnabledTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDomStorageEnabledTest.java index 964f04000b..30fd2fdb06 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDomStorageEnabledTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetDomStorageEnabledTest.java @@ -13,10 +13,10 @@ import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.UrlUtils; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkSettings; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkSettings; +import org.xwalk.core.internal.XWalkWebChromeClient; /** * Test suite for setDomStorageEnabled(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetNetworkAvailableTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetNetworkAvailableTest.java index eb72a91ef4..f42d426d22 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetNetworkAvailableTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/SetNetworkAvailableTest.java @@ -11,8 +11,8 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; /** * Test case for XWalkView.setNetworkAvailable method diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/UserAgentTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/UserAgentTest.java index ae860651ca..c228ca9ba3 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/UserAgentTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/UserAgentTest.java @@ -16,9 +16,9 @@ import org.apache.http.HttpRequest; import org.chromium.base.test.util.Feature; import org.chromium.net.test.util.TestWebServer; -import org.xwalk.core.XWalkClient; -import org.xwalk.core.XWalkSettings; import org.xwalk.core.XWalkView; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkSettings; /** * Test suite for setUserAgentString() and getUserAgentString(). diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/WebNotificationTest.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/WebNotificationTest.java index 6544fd0d79..545b82575b 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/WebNotificationTest.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/WebNotificationTest.java @@ -16,11 +16,11 @@ import android.util.Log; import org.chromium.base.test.util.Feature; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkPreferences; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; -import org.xwalk.core.XWalkNotificationServiceImpl; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkNotificationServiceImpl; /** * Test suite for web notification API. diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java index c42b9e438e..0a61d16b4b 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java @@ -25,12 +25,13 @@ import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; -import org.xwalk.core.XWalkClient; import org.xwalk.core.XWalkNavigationHistory; import org.xwalk.core.XWalkResourceClient; -import org.xwalk.core.XWalkSettings; import org.xwalk.core.XWalkView; -import org.xwalk.core.XWalkWebChromeClient; +import org.xwalk.core.internal.XWalkClient; +import org.xwalk.core.internal.XWalkSettings; +import org.xwalk.core.internal.XWalkViewInternal; +import org.xwalk.core.internal.XWalkWebChromeClient; public class XWalkViewTestBase extends ActivityInstrumentationTestCase2 { @@ -47,12 +48,12 @@ public TestXWalkClientBase(TestHelperBridge client) { } @Override - public void onPageStarted(XWalkView view, String url) { + public void onPageStarted(XWalkViewInternal view, String url) { mInnerContentsClient.onPageStarted(url); } @Override - public void onPageFinished(XWalkView view, String url) { + public void onPageFinished(XWalkViewInternal view, String url) { mInnerContentsClient.onPageFinished(url); } } @@ -71,7 +72,7 @@ public TestXWalkWebChromeClientBase(TestHelperBridge client) { } @Override - public void onReceivedTitle(XWalkView view, String title) { + public void onReceivedTitle(XWalkViewInternal view, String title) { mInnerContentsClient.onTitleChanged(title); } } diff --git a/xwalk_android.gypi b/xwalk_android.gypi index 24136f9267..3dabc4131c 100644 --- a/xwalk_android.gypi +++ b/xwalk_android.gypi @@ -30,7 +30,7 @@ ], }, { - 'target_name': 'xwalk_core_java', + 'target_name': 'xwalk_core_internal_java', 'type': 'none', 'dependencies': [ '../components/components.gyp:navigation_interception_java', @@ -40,14 +40,25 @@ 'xwalk_core_extensions_java', ], 'variables': { - 'java_in_dir': 'runtime/android/core', + 'java_in_dir': 'runtime/android/core_internal', 'has_java_resources': 1, - 'R_package': 'org.xwalk.core', - 'R_package_relpath': 'org/xwalk/core', + 'R_package': 'org.xwalk.core.internal', + 'R_package_relpath': 'org/xwalk/core/internal', 'java_strings_grd': 'android_xwalk_strings.grd', }, 'includes': ['../build/java.gypi'], }, + { + 'target_name': 'xwalk_core_java', + 'type': 'none', + 'dependencies': [ + 'xwalk_core_internal_java', + ], + 'variables': { + 'java_in_dir': 'runtime/android/core', + }, + 'includes': ['../build/java.gypi'], + }, { 'target_name': 'xwalk_runtime_java', 'type': 'none', @@ -120,6 +131,7 @@ '<(PRODUCT_DIR)/lib.java/ui_java.dex.jar', '<(PRODUCT_DIR)/lib.java/web_contents_delegate_android_java.dex.jar', '<(PRODUCT_DIR)/lib.java/xwalk_core_extensions_java.dex.jar', + '<(PRODUCT_DIR)/lib.java/xwalk_core_internal_java.dex.jar', '<(PRODUCT_DIR)/lib.java/xwalk_core_java.dex.jar', '<(PRODUCT_DIR)/lib.java/xwalk_runtime_java.dex.jar', '<(SHARED_INTERMEDIATE_DIR)/xwalk_native_libraries/' @@ -146,17 +158,17 @@ 'jni_gen_package': 'xwalk', }, 'sources': [ - 'runtime/android/core/src/org/xwalk/core/AndroidProtocolHandler.java', - 'runtime/android/core/src/org/xwalk/core/InterceptedRequestData.java', - 'runtime/android/core/src/org/xwalk/core/XWalkHttpAuthHandler.java', - 'runtime/android/core/src/org/xwalk/core/XWalkContentsClientBridge.java', - 'runtime/android/core/src/org/xwalk/core/XWalkContentsIoThreadClient.java', - 'runtime/android/core/src/org/xwalk/core/XWalkContent.java', - 'runtime/android/core/src/org/xwalk/core/XWalkCookieManager.java', - 'runtime/android/core/src/org/xwalk/core/XWalkDevToolsServer.java', - 'runtime/android/core/src/org/xwalk/core/XWalkSettings.java', - 'runtime/android/core/src/org/xwalk/core/XWalkViewDelegate.java', - 'runtime/android/core/src/org/xwalk/core/XWalkWebContentsDelegate.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/AndroidProtocolHandler.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/InterceptedRequestData.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsIoThreadClient.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContent.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkCookieManager.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkDevToolsServer.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkHttpAuthHandler.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkSettings.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewDelegate.java', + 'runtime/android/core_internal/src/org/xwalk/core/internal/XWalkWebContentsDelegate.java', ], 'includes': ['../build/jni_generator.gypi'], }, @@ -169,8 +181,8 @@ 'variables': { 'java_in_dir': 'extensions/android/java', 'has_java_resources': 0, - 'R_package': 'org.xwalk.core.extensions', - 'R_package_relpath': 'org/xwalk/core/extensions', + 'R_package': 'org.xwalk.core.internal.extensions', + 'R_package_relpath': 'org/xwalk/core/internal/extensions', }, 'includes': ['../build/java.gypi'], }, @@ -181,7 +193,7 @@ 'jni_gen_package': 'xwalk', }, 'sources': [ - 'extensions/android/java/src/org/xwalk/core/extensions/XWalkExtensionAndroid.java', + 'extensions/android/java/src/org/xwalk/core/internal/extensions/XWalkExtensionAndroid.java', ], 'includes': ['../build/jni_generator.gypi'], }, @@ -253,9 +265,9 @@ 'files': [ 'experimental/launch_screen/launch_screen_api.js', 'experimental/presentation/presentation_api.js', - 'runtime/android/core/src/org/xwalk/core/extension/api/contacts/contacts_api.js', - 'runtime/android/core/src/org/xwalk/core/extension/api/device_capabilities/device_capabilities_api.js', - 'runtime/android/core/src/org/xwalk/core/extension/api/messaging/messaging_api.js', + 'runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/contacts/contacts_api.js', + 'runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/device_capabilities/device_capabilities_api.js', + 'runtime/android/core_internal/src/org/xwalk/core/internal/extension/api/messaging/messaging_api.js', 'runtime/extension/screen_orientation_api.js', ], }, From 2414420a135379f4f714733dfde2388aeb516148 Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Fri, 23 May 2014 17:14:44 +0800 Subject: [PATCH 05/12] [Android][Shared Core] Initialize org.xwalk.core.internal.R for xwalk core library For core library usage, the internal resources ids are mapped to org.xwalk.core.R at runtime dynamically to ensure the ids using internally is correct. Since now xwalk core uses org.xwalk.core.internal.R instead of org.xwalk.core.R, the ids in org.xwalk.core.internal.R also needs initialization before use at runtime. --- .../org/xwalk/core/internal/R.java | 188 ++++++++++++++++++ .../core/internal/XWalkInternalResources.java | 7 +- xwalk_core_library_android.gypi | 3 +- 3 files changed, 194 insertions(+), 4 deletions(-) create mode 100644 runtime/android/core_internal/resource_map/org/xwalk/core/internal/R.java diff --git a/runtime/android/core_internal/resource_map/org/xwalk/core/internal/R.java b/runtime/android/core_internal/resource_map/org/xwalk/core/internal/R.java new file mode 100644 index 0000000000..9ab28ec75b --- /dev/null +++ b/runtime/android/core_internal/resource_map/org/xwalk/core/internal/R.java @@ -0,0 +1,188 @@ +// Copyright 2014 Intel Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core.internal; + +/** + * Provide XWalk Core internal resources to XWalk Core layer. + * The main purpose is to dynamically set the value of following + * resources ids when building xwalk core as a library project. + * In such case, the ant build system won't generate R.java + * for package org.xwalk.core.internal. However, the code inside + * org.xwalk.core.internal uses org.xwalk.core.internal.R. + */ + +public final class R { + public static final class attr { + public static int select_dialog_multichoice; + public static int select_dialog_singlechoice; + } + public static final class color { + public static int autofill_dark_divider_color; + public static int autofill_divider_color; + public static int color_picker_background_color; + public static int color_picker_border_color; + } + public static final class dimen { + public static int autofill_text_divider_height; + public static int autofill_text_height; + public static int color_button_height; + public static int color_picker_gradient_margin; + public static int config_min_scaling_span; + public static int config_min_scaling_touch_major; + public static int link_preview_overlay_radius; + } + public static final class drawable { + public static int autofill_popup_background; + public static int autofill_popup_background_down; + public static int autofill_popup_background_up; + public static int bubble; + public static int bubble_arrow_up; + public static int color_button_background; + public static int color_picker_advanced_select_handle; + public static int color_picker_border; + public static int ic_menu_search_holo_light; + public static int ic_menu_share_holo_light; + public static int ondemand_overlay; + public static int pageinfo_warning_major; + } + public static final class id { + public static int ampm; + public static int arrow_image; + public static int autofill_label; + public static int autofill_menu_text; + public static int autofill_popup_window; + public static int autofill_sublabel; + public static int color_button_swatch; + public static int color_picker_advanced; + public static int color_picker_simple; + public static int date_picker; + public static int date_time_suggestion; + public static int date_time_suggestion_label; + public static int date_time_suggestion_value; + public static int gradient; + public static int gradient_border; + public static int hour; + public static int icon_view; + public static int main_text; + public static int milli; + public static int minute; + public static int more_colors_button; + public static int more_colors_button_border; + public static int pickers; + public static int position_in_year; + public static int second; + public static int second_colon; + public static int second_dot; + public static int seek_bar; + public static int select_action_menu_copy; + public static int select_action_menu_cut; + public static int select_action_menu_paste; + public static int select_action_menu_select_all; + public static int select_action_menu_share; + public static int select_action_menu_web_search; + public static int selected_color_view; + public static int selected_color_view_border; + public static int sub_text; + public static int text; + public static int text_wrapper; + public static int time_picker; + public static int title; + public static int top_view; + public static int year; + } + public static final class layout { + public static int autofill_text; + public static int color_picker_advanced_component; + public static int color_picker_dialog_content; + public static int color_picker_dialog_title; + public static int date_time_picker_dialog; + public static int date_time_suggestion; + public static int multi_field_time_picker_dialog; + public static int two_field_date_picker; + public static int validation_message_bubble; + } + public static final class menu { + public static int select_action_menu; + } + public static final class mipmap { + public static int app_icon; + } + public static final class string { + public static int accessibility_content_view; + public static int accessibility_date_picker_month; + public static int accessibility_date_picker_week; + public static int accessibility_date_picker_year; + public static int accessibility_datetime_picker_date; + public static int accessibility_datetime_picker_time; + public static int accessibility_time_picker_ampm; + public static int accessibility_time_picker_hour; + public static int accessibility_time_picker_milli; + public static int accessibility_time_picker_minute; + public static int accessibility_time_picker_second; + public static int actionbar_share; + public static int actionbar_web_search; + public static int color_picker_button_black; + public static int color_picker_button_blue; + public static int color_picker_button_cancel; + public static int color_picker_button_cyan; + public static int color_picker_button_green; + public static int color_picker_button_magenta; + public static int color_picker_button_more; + public static int color_picker_button_red; + public static int color_picker_button_set; + public static int color_picker_button_white; + public static int color_picker_button_yellow; + public static int color_picker_dialog_title; + public static int color_picker_hue; + public static int color_picker_saturation; + public static int color_picker_value; + public static int copy_to_clipboard_failure_message; + public static int cpu_arch_mismatch_message; + public static int cpu_arch_mismatch_title; + public static int date_picker_dialog_clear; + public static int date_picker_dialog_other_button_label; + public static int date_picker_dialog_set; + public static int date_picker_dialog_title; + public static int date_time_picker_dialog_title; + public static int download_already_exists_toast; + public static int download_failed_toast; + public static int download_finished_toast; + public static int download_no_permission_toast; + public static int download_start_toast; + public static int goto_store_button_label; + public static int http_auth_log_in; + public static int http_auth_password; + public static int http_auth_title; + public static int http_auth_user_name; + public static int js_alert_title; + public static int js_confirm_title; + public static int js_prompt_title; + public static int low_memory_error; + public static int media_player_error_button; + public static int media_player_error_text_invalid_progressive_playback; + public static int media_player_error_text_unknown; + public static int media_player_error_title; + public static int media_player_loading_video; + public static int month_picker_dialog_title; + public static int opening_file_error; + public static int profiler_error_toast; + public static int profiler_no_storage_toast; + public static int profiler_started_toast; + public static int profiler_stopped_toast; + public static int report_feedback_button_label; + public static int ssl_alert_title; + public static int time_picker_dialog_am; + public static int time_picker_dialog_hour_minute_separator; + public static int time_picker_dialog_minute_second_separator; + public static int time_picker_dialog_pm; + public static int time_picker_dialog_second_subsecond_separator; + public static int time_picker_dialog_title; + public static int week_picker_dialog_title; + } + public static final class style { + public static int AutofillPopupWindow; + public static int SelectPopupDialog; + } +} diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java index 50acc5759e..b171f5308f 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkInternalResources.java @@ -16,11 +16,12 @@ class XWalkInternalResources { private static boolean loaded = false; private final static String INTERNAL_RESOURCE_CLASSES[] = { "org.chromium.content.R", - "org.chromium.ui.R" + "org.chromium.ui.R", + "org.xwalk.core.internal.R" }; - private final static String GENERATED_RESOURCE_CLASS = "org.xwalk.core.internal.R"; + private final static String GENERATED_RESOURCE_CLASS = "org.xwalk.core.R"; - // Doing org.chromium.content.R.. = org.xwalk.core.internal.R.. + // Doing org.chromium.content.R.. = org.xwalk.core.R.. // Use reflection to iterate over the target class is to avoid hardcode. private static void doResetIds(Context context) { ClassLoader classLoader = context.getClassLoader(); diff --git a/xwalk_core_library_android.gypi b/xwalk_core_library_android.gypi index 1c3cda49eb..ae22b34336 100644 --- a/xwalk_core_library_android.gypi +++ b/xwalk_core_library_android.gypi @@ -46,6 +46,7 @@ 'additional_src_dirs': [ '<(DEPTH)/ui/android/java/resource_map', '<(DEPTH)/content/public/android/java/resource_map', + '<(DEPTH)/xwalk/runtime/android/core_internal/resource_map', ], }, 'includes': [ '../build/java_apk.gypi' ], @@ -62,7 +63,7 @@ 'jar_name': '<(_target_name).jar', 'jar_final_path': '<(PRODUCT_DIR)/lib.java/<(jar_name)', 'jar_excluded_classes': [ - '*org/xwalk/*', + '*org/xwalk/core/R*', ], }, 'all_dependent_settings': { From 41f8ca27bad299341feefc144761c387542b7e6a Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Fri, 30 May 2014 10:20:39 +0800 Subject: [PATCH 06/12] [Android][Shared Core] Use const int instead of enum for embedding API enum type is not friendly to be used in reflection. Use int instead. --- .../src/org/xwalk/core/XWalkUIClient.java | 4 ++-- .../internal/XWalkContentsClientBridge.java | 8 ++++---- .../XWalkNavigationHistoryInternal.java | 12 +++++------ .../core/internal/XWalkUIClientInternal.java | 20 +++++++++---------- .../xwview/shell/XWalkViewShellActivity.java | 4 ++-- .../sample/ResourceAndUIClientsActivity.java | 2 +- .../core/sample/XWalkNavigationActivity.java | 4 ++-- .../core/xwview/test/XWalkViewTestBase.java | 4 ++-- 8 files changed, 27 insertions(+), 31 deletions(-) diff --git a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java b/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java index f3827a33aa..b8691e1561 100644 --- a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java +++ b/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java @@ -18,7 +18,7 @@ public XWalkUIClient(XWalkView view) { } @Override - public boolean onJavascriptModalDialog(XWalkViewInternal view, JavascriptMessageType type, + public boolean onJavascriptModalDialog(XWalkViewInternal view, int type, String url, String message, String defaultValue, XWalkJavascriptResultInternal result) { if (view instanceof XWalkView) { return onJavascriptModalDialog( @@ -30,7 +30,7 @@ public boolean onJavascriptModalDialog(XWalkViewInternal view, JavascriptMessage } } - public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType type, + public boolean onJavascriptModalDialog(XWalkView view, int type, String url, String message, String defaultValue, XWalkJavascriptResult result) { XWalkJavascriptResultInternal resultInternal = ((XWalkJavascriptResultHandler) result).getInternal(); diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java index 32211a772f..1fa02006d2 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkContentsClientBridge.java @@ -512,7 +512,7 @@ private void handleJsAlert(String url, String message, int id) { if (isOwnerActivityRunning()) { XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_ALERT, url, message, "", result); + XWalkUIClientInternal.JAVASCRIPT_ALERT, url, message, "", result); } } @@ -521,7 +521,7 @@ private void handleJsConfirm(String url, String message, int id) { if (isOwnerActivityRunning()) { XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_CONFIRM, url, message, "", result); + XWalkUIClientInternal.JAVASCRIPT_CONFIRM, url, message, "", result); } } @@ -530,7 +530,7 @@ private void handleJsPrompt(String url, String message, String defaultValue, int if (isOwnerActivityRunning()) { XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_PROMPT, url, message, defaultValue, + XWalkUIClientInternal.JAVASCRIPT_PROMPT, url, message, defaultValue, result); } } @@ -540,7 +540,7 @@ private void handleJsBeforeUnload(String url, String message, int id) { if (isOwnerActivityRunning()) { XWalkJavascriptResultHandlerInternal result = new XWalkJavascriptResultHandlerInternal(this, id); mXWalkUIClient.onJavascriptModalDialog(mXWalkView, - XWalkUIClientInternal.JavascriptMessageType.JAVASCRIPT_BEFOREUNLOAD, url, message, "", + XWalkUIClientInternal.JAVASCRIPT_BEFOREUNLOAD, url, message, "", result); } } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java index 23991948a2..b4f1fe5929 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java @@ -79,12 +79,10 @@ public boolean canGoForward() { /** * The direction for web page navigation. */ - public enum Direction { - /** The backward direction for web page navigation. */ - BACKWARD, - /** The forward direction for web page navigation. */ - FORWARD - } + /** The backward direction for web page navigation. */ + public final static int BACKWARD = 0; + /** The forward direction for web page navigation. */ + public final static int FORWARD = 1; /** * Navigates to the specified step from the current navigation item. @@ -92,7 +90,7 @@ public enum Direction { * @param direction the direction of navigation. * @param steps go back or foward with a given steps. */ - public void navigate(Direction direction, int steps) { + public void navigate(int direction, int steps) { switch(direction) { case FORWARD: mXWalkView.navigateTo(steps); diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java index 8c5ade1881..ddf3c55bc7 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java @@ -82,16 +82,14 @@ public void onJavascriptCloseWindow(XWalkViewInternal view) { /** * The type of JavaScript modal dialog. */ - public enum JavascriptMessageType { - /** JavaScript alert dialog. */ - JAVASCRIPT_ALERT, - /** JavaScript confirm dialog. */ - JAVASCRIPT_CONFIRM, - /** JavaScript prompt dialog. */ - JAVASCRIPT_PROMPT, - /** JavaScript dialog for a window-before-unload notification. */ - JAVASCRIPT_BEFOREUNLOAD - } + /** JavaScript alert dialog. */ + public final static int JAVASCRIPT_ALERT = 0; + /** JavaScript confirm dialog. */ + public final static int JAVASCRIPT_CONFIRM = 1; + /** JavaScript prompt dialog. */ + public final static int JAVASCRIPT_PROMPT = 2; + /** JavaScript dialog for a window-before-unload notification. */ + public final static int JAVASCRIPT_BEFOREUNLOAD = 3; /** * Tell the client to display a prompt dialog to the user. @@ -102,7 +100,7 @@ public enum JavascriptMessageType { * @param defaultValue the default value string. Only valid for Prompt dialog. * @param result the callback to handle the result from caller. */ - public boolean onJavascriptModalDialog(XWalkViewInternal view, JavascriptMessageType type, String url, + public boolean onJavascriptModalDialog(XWalkViewInternal view, int type, String url, String message, String defaultValue, XWalkJavascriptResultInternal result) { switch(type) { case JAVASCRIPT_ALERT: diff --git a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java index 4ac4091d46..482c582141 100644 --- a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java +++ b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java @@ -270,7 +270,7 @@ public void onClick(View v) { if (mActiveView != null && mActiveView.getNavigationHistory().canGoBack()) { mActiveView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.BACKWARD, 1); + XWalkNavigationHistory.BACKWARD, 1); } } }); @@ -282,7 +282,7 @@ public void onClick(View v) { if (mActiveView != null && mActiveView.getNavigationHistory().canGoForward()) { mActiveView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.FORWARD, 1); + XWalkNavigationHistory.FORWARD, 1); } } }); diff --git a/runtime/android/sample/src/org/xwalk/core/sample/ResourceAndUIClientsActivity.java b/runtime/android/sample/src/org/xwalk/core/sample/ResourceAndUIClientsActivity.java index 52f9a41095..52eb1c90de 100644 --- a/runtime/android/sample/src/org/xwalk/core/sample/ResourceAndUIClientsActivity.java +++ b/runtime/android/sample/src/org/xwalk/core/sample/ResourceAndUIClientsActivity.java @@ -63,7 +63,7 @@ public void onJavascriptCloseWindow(XWalkView view) { Log.d(TAG, "Window closed."); } - public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType type, + public boolean onJavascriptModalDialog(XWalkView view, int type, String url, String message, String defaultValue, XWalkJavascriptResult result) { Log.d(TAG, "Show JS dialog."); diff --git a/runtime/android/sample/src/org/xwalk/core/sample/XWalkNavigationActivity.java b/runtime/android/sample/src/org/xwalk/core/sample/XWalkNavigationActivity.java index ec3b50c4e6..5565e07ffb 100644 --- a/runtime/android/sample/src/org/xwalk/core/sample/XWalkNavigationActivity.java +++ b/runtime/android/sample/src/org/xwalk/core/sample/XWalkNavigationActivity.java @@ -41,7 +41,7 @@ public void onClick(View v) { if (mXWalkView != null && mXWalkView.getNavigationHistory().canGoBack()) { mXWalkView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.BACKWARD, 1); + XWalkNavigationHistory.BACKWARD, 1); } XWalkNavigationItem navigationItem = mXWalkView.getNavigationHistory().getCurrentItem(); showNavigationItemInfo(navigationItem); @@ -55,7 +55,7 @@ public void onClick(View v) { if (mXWalkView != null && mXWalkView.getNavigationHistory().canGoForward()) { mXWalkView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.FORWARD, 1); + XWalkNavigationHistory.FORWARD, 1); } XWalkNavigationItem navigationItem = mXWalkView.getNavigationHistory().getCurrentItem(); showNavigationItemInfo(navigationItem); diff --git a/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java b/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java index 0a61d16b4b..98fbf8dbd2 100644 --- a/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java +++ b/test/android/core/javatests/src/org/xwalk/core/xwview/test/XWalkViewTestBase.java @@ -419,7 +419,7 @@ public void run() { @Override public void run() { mXWalkView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.BACKWARD, 1); + XWalkNavigationHistory.BACKWARD, 1); } }); } @@ -434,7 +434,7 @@ public void run() { @Override public void run() { mXWalkView.getNavigationHistory().navigate( - XWalkNavigationHistory.Direction.FORWARD, 1); + XWalkNavigationHistory.FORWARD, 1); } }); } From e6d0f945030f9e7cf97b00e644140d2c90a66c7d Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Mon, 5 May 2014 09:11:07 +0800 Subject: [PATCH 07/12] [Android] Introduce reflection layer generator Generator is a java project which depends on xwalk core internal to get class definitions. When executing Generator, it will read the class from specified list and generate wrapper/bridge class of it based on annotation XWalkAPI. The bridge class belongs to internal package, provides two functions for each API internal class wants to expose: wrapperCall and superCall. wrapperCall is to call wrapper which might be overriden by embedders. superCall is to call internal which is called by wrapper for default implementation. The wrapper class belongs to core package, provides API to embedders. Wrapper class will call bridge's superCall by default. If no overridden by embedders, the call stack will be: bridge::foo => wrapper::foo => bridge::fooSuper => internal::foo. TODO: 1. Documentation annotation support, currently all documentation annotation is in internal class. Need to automatically generate those annotation in wrapper class. 2. GYP dependency, in gyp world, each java target will add its output to jars_input_paths of dependent target. For reflection layer, it depends on core_internal, but in future after real reflection established, the shared embedders don't want to include core internal in it's APK. --- .../org/xwalk/core/XWalkJavascriptResult.java | 32 - .../core/XWalkJavascriptResultHandler.java | 32 - .../xwalk/core/XWalkNavigationHistory.java | 33 - .../org/xwalk/core/XWalkNavigationItem.java | 15 - .../src/org/xwalk/core/XWalkPreferences.java | 10 - .../org/xwalk/core/XWalkResourceClient.java | 84 --- .../src/org/xwalk/core/XWalkUIClient.java | 107 --- .../core/src/org/xwalk/core/XWalkView.java | 32 - .../core_empty/src/org/xwalk/core/README.md | 9 + .../src/org/xwalk/core/internal/XWalkAPI.java | 17 + .../XWalkJavascriptResultHandlerInternal.java | 11 + .../XWalkJavascriptResultInternal.java | 4 + .../XWalkNavigationHistoryInternal.java | 19 + .../internal/XWalkNavigationItemInternal.java | 10 + .../internal/XWalkPreferencesInternal.java | 4 + .../internal/XWalkResourceClientInternal.java | 23 + .../core/internal/XWalkUIClientInternal.java | 20 +- .../core/internal/XWalkViewInternal.java | 41 + .../xwview/shell/XWalkViewShellActivity.java | 4 +- tools/reflection_generator/generator.py | 61 ++ .../xwalk/reflection/generator/Generator.java | 705 ++++++++++++++++++ xwalk_android.gypi | 68 +- 22 files changed, 988 insertions(+), 353 deletions(-) delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkPreferences.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkUIClient.java delete mode 100644 runtime/android/core/src/org/xwalk/core/XWalkView.java create mode 100644 runtime/android/core_empty/src/org/xwalk/core/README.md create mode 100644 runtime/android/core_internal/src/org/xwalk/core/internal/XWalkAPI.java create mode 100644 tools/reflection_generator/generator.py create mode 100644 tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java deleted file mode 100644 index 30baa09379..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResult.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -/** - * This interface is used when XWalkUIClientInternal offers a JavaScript - * modal dialog (alert, beforeunload or confirm) to enable the client to - * handle the dialog in their own way. XWalkUIClientInternal will offer an object - * that implements this interface to the client and when the client has handled - * the dialog, it must either callback with confirm() or cancel() to allow - * processing to continue. - */ -public interface XWalkJavascriptResult { - /** - * Handle a confirm with a result from caller. - * @param result the result string from caller. - */ - public void confirmWithResult(String result); - - /** - * Handle a confirm without a result. - */ - public void confirm(); - - /** - * Handle the result if the caller cancelled the dialog. - */ - public void cancel(); -} - diff --git a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java b/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java deleted file mode 100644 index 401746a362..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkJavascriptResultHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import org.xwalk.core.internal.XWalkJavascriptResultInternal; - -final class XWalkJavascriptResultHandler implements XWalkJavascriptResult{ - - private XWalkJavascriptResultInternal internal; - - XWalkJavascriptResultHandler(XWalkJavascriptResultInternal internal) { - this.internal = internal; - } - - XWalkJavascriptResultInternal getInternal() { - return this.internal; - } - - public void confirm() { - internal.confirm(); - } - - public void confirmWithResult(final String promptResult) { - internal.confirmWithResult(promptResult); - } - - public void cancel() { - internal.cancel(); - } -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java b/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java deleted file mode 100644 index 70e3fa0b80..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationHistory.java +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import org.xwalk.core.internal.XWalkNavigationHistoryInternal; -import org.xwalk.core.internal.XWalkNavigationItemInternal; - -public class XWalkNavigationHistory extends XWalkNavigationHistoryInternal { - - public XWalkNavigationHistory(XWalkNavigationHistoryInternal internal) { - super(internal); - } - - public XWalkNavigationItem getItemAt(int index) { - XWalkNavigationItemInternal item = super.getItemAt(index); - if (item == null || item instanceof XWalkNavigationItem) { - return (XWalkNavigationItem) item; - } else { - return new XWalkNavigationItem(item); - } - } - - public XWalkNavigationItem getCurrentItem() { - XWalkNavigationItemInternal item = super.getCurrentItem(); - if (item == null || item instanceof XWalkNavigationItem) { - return (XWalkNavigationItem) item; - } else { - return new XWalkNavigationItem(item); - } - } -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java b/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java deleted file mode 100644 index a44cd4df26..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkNavigationItem.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import org.xwalk.core.internal.XWalkNavigationItemInternal; - -public final class XWalkNavigationItem extends XWalkNavigationItemInternal { - - public XWalkNavigationItem(XWalkNavigationItemInternal internal) { - super(internal); - } - -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java b/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java deleted file mode 100644 index 60f21ff0f3..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkPreferences.java +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import org.xwalk.core.internal.XWalkPreferencesInternal; - -public final class XWalkPreferences extends XWalkPreferencesInternal { -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java b/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java deleted file mode 100644 index 8716fc3921..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkResourceClient.java +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import android.webkit.WebResourceResponse; - -import org.xwalk.core.internal.XWalkResourceClientInternal; -import org.xwalk.core.internal.XWalkViewInternal; - -public class XWalkResourceClient extends XWalkResourceClientInternal { - - public XWalkResourceClient(XWalkView view) { - super(view); - } - - @Override - public void onLoadStarted(XWalkViewInternal view, String url) { - if (view instanceof XWalkView) { - onLoadStarted((XWalkView) view, url); - } else { - super.onLoadStarted(view, url); - } - } - - public void onLoadStarted(XWalkView view, String url) { - super.onLoadStarted(view, url); - } - - @Override - public void onLoadFinished(XWalkViewInternal view, String url) { - if (view instanceof XWalkView) { - onLoadFinished((XWalkView) view, url); - } else { - super.onLoadFinished(view, url); - } - } - - public void onLoadFinished(XWalkView view, String url) { - super.onLoadFinished(view, url); - } - - @Override - public void onProgressChanged(XWalkViewInternal view, int progressInPercent) { - if (view instanceof XWalkView) { - onProgressChanged((XWalkView) view, progressInPercent); - } else { - super.onProgressChanged(view, progressInPercent); - } - } - - public void onProgressChanged(XWalkView view, int progressInPercent) { - super.onProgressChanged(view, progressInPercent); - } - - @Override - public WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, String url) { - if (view instanceof XWalkView) { - return shouldInterceptLoadRequest((XWalkView) view, url); - } else { - return super.shouldInterceptLoadRequest(view, url); - } - } - - public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { - return super.shouldInterceptLoadRequest(view, url); - } - - @Override - public void onReceivedLoadError(XWalkViewInternal view, int errorCode, String description, - String failingUrl) { - if (view instanceof XWalkView) { - onReceivedLoadError((XWalkView) view, errorCode, description, failingUrl); - } else { - super.onReceivedLoadError(view, errorCode, description, failingUrl); - } - } - - public void onReceivedLoadError(XWalkView view, int errorCode, String description, - String failingUrl) { - super.onReceivedLoadError(view, errorCode, description, failingUrl); - } -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java b/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java deleted file mode 100644 index b8691e1561..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkUIClient.java +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import android.net.Uri; -import android.webkit.ValueCallback; - -import org.xwalk.core.internal.XWalkJavascriptResultInternal; -import org.xwalk.core.internal.XWalkUIClientInternal; -import org.xwalk.core.internal.XWalkViewInternal; - -public class XWalkUIClient extends XWalkUIClientInternal { - - public XWalkUIClient(XWalkView view) { - super(view); - } - - @Override - public boolean onJavascriptModalDialog(XWalkViewInternal view, int type, - String url, String message, String defaultValue, XWalkJavascriptResultInternal result) { - if (view instanceof XWalkView) { - return onJavascriptModalDialog( - (XWalkView) view, - type, url, message, defaultValue, - new XWalkJavascriptResultHandler(result)); - } else { - return super.onJavascriptModalDialog(view, type, url, message, defaultValue, result); - } - } - - public boolean onJavascriptModalDialog(XWalkView view, int type, - String url, String message, String defaultValue, XWalkJavascriptResult result) { - XWalkJavascriptResultInternal resultInternal = - ((XWalkJavascriptResultHandler) result).getInternal(); - return super.onJavascriptModalDialog( - view, type, url, message, defaultValue, resultInternal); - } - - @Override - public void onRequestFocus(XWalkViewInternal view) { - if (view instanceof XWalkView) { - onRequestFocus((XWalkView) view); - } else { - super.onRequestFocus(view); - } - } - - public void onRequestFocus(XWalkView view) { - super.onRequestFocus(view); - } - - @Override - public void onJavascriptCloseWindow(XWalkViewInternal view) { - if (view instanceof XWalkView) { - onJavascriptCloseWindow((XWalkView) view); - } else { - super.onJavascriptCloseWindow(view); - } - } - - public void onJavascriptCloseWindow(XWalkView view) { - super.onJavascriptCloseWindow(view); - } - - @Override - public void onFullscreenToggled(XWalkViewInternal view, boolean enterFullscreen) { - if (view instanceof XWalkView) { - onFullscreenToggled((XWalkView) view, enterFullscreen); - } else { - super.onFullscreenToggled(view, enterFullscreen); - } - } - - public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) { - super.onFullscreenToggled(view, enterFullscreen); - } - - @Override - public void openFileChooser(XWalkViewInternal view, ValueCallback uploadFile, - String acceptType, String capture) { - if (view instanceof XWalkView) { - openFileChooser((XWalkView) view, uploadFile, acceptType, capture); - } else { - super.openFileChooser(view, uploadFile, acceptType, capture); - } - } - - public void openFileChooser(XWalkView view, ValueCallback uploadFile, - String acceptType, String capture) { - super.openFileChooser(view, uploadFile, acceptType, capture); - } - - @Override - public void onScaleChanged(XWalkViewInternal view, float oldScale, float newScale) { - if (view instanceof XWalkView) { - onScaleChanged((XWalkView) view, oldScale, newScale); - } else { - super.onScaleChanged(view, oldScale, newScale); - } - } - - public void onScaleChanged(XWalkView view, float oldScale, float newScale) { - super.onScaleChanged(view, oldScale, newScale); - } -} diff --git a/runtime/android/core/src/org/xwalk/core/XWalkView.java b/runtime/android/core/src/org/xwalk/core/XWalkView.java deleted file mode 100644 index 77f7f1b259..0000000000 --- a/runtime/android/core/src/org/xwalk/core/XWalkView.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014 Intel Corporation. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.xwalk.core; - -import android.app.Activity; -import android.content.Context; -import android.util.AttributeSet; - -import org.xwalk.core.internal.XWalkNavigationHistoryInternal; -import org.xwalk.core.internal.XWalkViewInternal; - -public class XWalkView extends XWalkViewInternal { - - public XWalkView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public XWalkView(Context context, Activity activity) { - super(context, activity); - } - - public XWalkNavigationHistory getNavigationHistory() { - XWalkNavigationHistoryInternal history = super.getNavigationHistory(); - if (history == null || history instanceof XWalkNavigationHistory) { - return (XWalkNavigationHistory) history; - } else { - return new XWalkNavigationHistory(history); - } - } -} diff --git a/runtime/android/core_empty/src/org/xwalk/core/README.md b/runtime/android/core_empty/src/org/xwalk/core/README.md new file mode 100644 index 0000000000..71377f6463 --- /dev/null +++ b/runtime/android/core_empty/src/org/xwalk/core/README.md @@ -0,0 +1,9 @@ +# Source folder for xwalk core reflection related java targets. +## Why it's empty +The source codes for reflection are generated at build time. +The gyp system still needs a java_in_dir to work. +So there is no java src here. +## Why put me here +To make git keep the folder, the src directory is needed to +build an apk. + diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkAPI.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkAPI.java new file mode 100644 index 0000000000..cf831de22e --- /dev/null +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkAPI.java @@ -0,0 +1,17 @@ +package org.xwalk.core.internal; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface XWalkAPI { + Class impl() default Object.class; + Class instance() default Object.class; + boolean createInternally() default false; + boolean createExternally() default false; + boolean noInstance() default false; + boolean isConst() default false; + Class extendClass() default Object.class; + String[] preWrapperLines() default {}; + String[] postWrapperLines() default {}; +} diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java index cc6bb413e5..6ea91e9b08 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultHandlerInternal.java @@ -6,6 +6,7 @@ import org.chromium.base.ThreadUtils; +@XWalkAPI(impl = XWalkJavascriptResultInternal.class, createInternally = true) public class XWalkJavascriptResultHandlerInternal implements XWalkJavascriptResultInternal { private XWalkContentsClientBridge mBridge; private final int mId; @@ -15,12 +16,21 @@ public class XWalkJavascriptResultHandlerInternal implements XWalkJavascriptResu mId = id; } + // Never use this constructor. + // It is only used in XWalkJavascriptResultHandlerBridge. + XWalkJavascriptResultHandlerInternal() { + mBridge = null; + mId = -1; + } + @Override + @XWalkAPI public void confirm() { confirmWithResult(null); } @Override + @XWalkAPI public void confirmWithResult(final String promptResult) { ThreadUtils.runOnUiThread(new Runnable() { @Override @@ -34,6 +44,7 @@ public void run() { } @Override + @XWalkAPI public void cancel() { ThreadUtils.runOnUiThread(new Runnable() { @Override diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java index 51d5117a51..68a92c0338 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkJavascriptResultInternal.java @@ -12,20 +12,24 @@ * the dialog, it must either callback with confirm() or cancel() to allow * processing to continue. */ +@XWalkAPI(instance = XWalkJavascriptResultHandlerInternal.class) public interface XWalkJavascriptResultInternal { /** * Handle a confirm with a result from caller. * @param result the result string from caller. */ + @XWalkAPI public void confirmWithResult(String result); /** * Handle a confirm without a result. */ + @XWalkAPI public void confirm(); /** * Handle the result if the caller cancelled the dialog. */ + @XWalkAPI public void cancel(); } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java index b4f1fe5929..864ebb6379 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java @@ -12,10 +12,18 @@ * This class represents a navigation history for a XWalkViewInternal instance. * It's not thread-safe and should be only called on UI thread. */ +@XWalkAPI(createInternally = true) public class XWalkNavigationHistoryInternal implements Cloneable, Serializable { private NavigationHistory mHistory; private XWalkViewInternal mXWalkView; + // Never use this constructor. + // It is only used in XWalkNavigationHistoryBridge. + public XWalkNavigationHistoryInternal() { + mXWalkView = null; + mHistory = null; + } + XWalkNavigationHistoryInternal(XWalkViewInternal view, NavigationHistory history) { mXWalkView = view; mHistory = history; @@ -30,6 +38,7 @@ public XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { * Total size of navigation history for the XWalkViewInternal. * @return the size of total navigation items. */ + @XWalkAPI public int size() { return mHistory.getEntryCount(); } @@ -39,6 +48,7 @@ public int size() { * @param index the given index. * @return true if there is an item at the specific index. */ + @XWalkAPI public boolean hasItemAt(int index) { return index >=0 && index <= size() - 1; } @@ -48,6 +58,7 @@ public boolean hasItemAt(int index) { * @param index the given index. * @return the navigation item for the given index. */ + @XWalkAPI public XWalkNavigationItemInternal getItemAt(int index) { return new XWalkNavigationItemInternal(mHistory.getEntryAtIndex(index)); } @@ -56,6 +67,7 @@ public XWalkNavigationItemInternal getItemAt(int index) { * Get the current item which XWalkViewInternal displays. * @return the current navigation item. */ + @XWalkAPI public XWalkNavigationItemInternal getCurrentItem() { return getItemAt(getCurrentIndex()); } @@ -64,6 +76,7 @@ public XWalkNavigationItemInternal getCurrentItem() { * Test whether XWalkViewInternal can go back. * @return true if it can go back. */ + @XWalkAPI public boolean canGoBack() { return mXWalkView.canGoBack(); } @@ -72,6 +85,7 @@ public boolean canGoBack() { * Test whether XWalkViewInternal can go forward. * @return true if it can go forward. */ + @XWalkAPI public boolean canGoForward() { return mXWalkView.canGoForward(); } @@ -80,8 +94,10 @@ public boolean canGoForward() { * The direction for web page navigation. */ /** The backward direction for web page navigation. */ + @XWalkAPI(isConst = true) public final static int BACKWARD = 0; /** The forward direction for web page navigation. */ + @XWalkAPI(isConst = true) public final static int FORWARD = 1; /** @@ -90,6 +106,7 @@ public boolean canGoForward() { * @param direction the direction of navigation. * @param steps go back or foward with a given steps. */ + @XWalkAPI public void navigate(int direction, int steps) { switch(direction) { case FORWARD: @@ -107,6 +124,7 @@ public void navigate(int direction, int steps) { * Get the index for current navigation item. * @return current index in the navigation history. */ + @XWalkAPI public int getCurrentIndex() { return mHistory.getCurrentEntryIndex(); } @@ -114,6 +132,7 @@ public int getCurrentIndex() { /** * Clear all history owned by this XWalkViewInternal. */ + @XWalkAPI public void clear() { mXWalkView.clearHistory(); } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java index b14a8a9b1c..7efa8442cf 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java @@ -9,9 +9,16 @@ /** * This class represents a navigation item and is managed in XWalkNavigationHistoryInternal. */ +@XWalkAPI(createInternally = true) public class XWalkNavigationItemInternal implements Cloneable { private NavigationEntry mEntry; + // Never use this constructor. + // It is only used in XWalkNavigationItemBridge. + public XWalkNavigationItemInternal() { + mEntry = null; + } + XWalkNavigationItemInternal(NavigationEntry entry) { mEntry = entry; } @@ -24,6 +31,7 @@ public XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { * Get the url of current navigation item. * @return the string of the url. */ + @XWalkAPI public String getUrl() { return mEntry.getUrl(); } @@ -32,6 +40,7 @@ public String getUrl() { * Get the original url of current navigation item. * @return the string of the original url. */ + @XWalkAPI public String getOriginalUrl() { return mEntry.getOriginalUrl(); } @@ -40,6 +49,7 @@ public String getOriginalUrl() { * Get the title of current navigation item. * @return the string of the title. */ + @XWalkAPI public String getTitle() { return mEntry.getTitle(); } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java index 5609c23450..9e0418b148 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkPreferencesInternal.java @@ -16,6 +16,7 @@ * Afterwards, the preference could be read from all threads and can impact * all XWalkViewInternal instances. */ +@XWalkAPI(noInstance = true) public class XWalkPreferencesInternal { private static HashMap sPrefMap = new HashMap(); // Here we use WeakReference to make sure the KeyValueChangeListener instance @@ -28,6 +29,7 @@ public class XWalkPreferencesInternal { /** * The key string to enable/disable remote debugging. */ + @XWalkAPI public static final String REMOTE_DEBUGGING = "remote-debugging"; /** @@ -65,6 +67,7 @@ public class XWalkPreferencesInternal { * @param key the string name of the key. * @param enabled true if setting it as enabled. */ + @XWalkAPI public static synchronized void setValue(String key, boolean enabled) throws RuntimeException { checkKey(key); // If the listener list is not empty, we consider the preference is @@ -85,6 +88,7 @@ public static synchronized void setValue(String key, boolean enabled) throws Run * @param key the string name of the key. * @return true if it's enabled. */ + @XWalkAPI public static synchronized boolean getValue(String key) throws RuntimeException { checkKey(key); return sPrefMap.get(key); diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java index c13e5794f5..8d58f83042 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkResourceClientInternal.java @@ -13,44 +13,62 @@ /** * This class notifies the embedder resource events/callbacks. */ +@XWalkAPI(createExternally = true) public class XWalkResourceClientInternal { /** Success */ + @XWalkAPI public static final int ERROR_OK = 0; /** Generic error */ + @XWalkAPI public static final int ERROR_UNKNOWN = -1; /** Server or proxy hostname lookup failed */ + @XWalkAPI public static final int ERROR_HOST_LOOKUP = -2; /** Unsupported authentication scheme (not basic or digest) */ + @XWalkAPI public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; /** User authentication failed on server */ + @XWalkAPI public static final int ERROR_AUTHENTICATION = -4; /** User authentication failed on proxy */ + @XWalkAPI public static final int ERROR_PROXY_AUTHENTICATION = -5; /** Failed to connect to the server */ + @XWalkAPI public static final int ERROR_CONNECT = -6; /** Failed to read or write to the server */ + @XWalkAPI public static final int ERROR_IO = -7; /** Connection timed out */ + @XWalkAPI public static final int ERROR_TIMEOUT = -8; /** Too many redirects */ + @XWalkAPI public static final int ERROR_REDIRECT_LOOP = -9; /** Unsupported URI scheme */ + @XWalkAPI public static final int ERROR_UNSUPPORTED_SCHEME = -10; /** Failed to perform SSL handshake */ + @XWalkAPI public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; /** Malformed URL */ + @XWalkAPI public static final int ERROR_BAD_URL = -12; /** Generic file error */ + @XWalkAPI public static final int ERROR_FILE = -13; /** File not found */ + @XWalkAPI public static final int ERROR_FILE_NOT_FOUND = -14; /** Too many requests during this load */ + @XWalkAPI public static final int ERROR_TOO_MANY_REQUESTS = -15; /** * Constructor. * @param view the owner XWalkViewInternal instance. */ + @XWalkAPI public XWalkResourceClientInternal(XWalkViewInternal view) { // Keep the above parameter for future use. } @@ -61,6 +79,7 @@ public XWalkResourceClientInternal(XWalkViewInternal view) { * @param view the owner XWalkViewInternal instance. * @param url the url for the resource to be loaded. */ + @XWalkAPI public void onLoadStarted(XWalkViewInternal view, String url) { } @@ -70,6 +89,7 @@ public void onLoadStarted(XWalkViewInternal view, String url) { * @param view the owner XWalkViewInternal instance. * @param url the url for the resource done for loading. */ + @XWalkAPI public void onLoadFinished(XWalkViewInternal view, String url) { } @@ -78,6 +98,7 @@ public void onLoadFinished(XWalkViewInternal view, String url) { * @param view the owner XWalkViewInternal instance. * @param progressInPercent the loading process in percent. */ + @XWalkAPI public void onProgressChanged(XWalkViewInternal view, int progressInPercent) { } @@ -95,6 +116,7 @@ public void onProgressChanged(XWalkViewInternal view, int progressInPercent) { * response information or null if the XWalkViewInternal should load the * resource itself. */ + @XWalkAPI public WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, String url) { return null; } @@ -106,6 +128,7 @@ public WebResourceResponse shouldInterceptLoadRequest(XWalkViewInternal view, St * @param description A String describing the error. * @param failingUrl The url that failed to load. */ + @XWalkAPI public void onReceivedLoadError(XWalkViewInternal view, int errorCode, String description, String failingUrl) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(view.getContext()); diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java index ddf3c55bc7..56e750c51a 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkUIClientInternal.java @@ -20,6 +20,7 @@ /** * This class notifies the embedder UI events/callbacks. */ +@XWalkAPI(createExternally = true) public class XWalkUIClientInternal { // Strings for displaying Dialog. @@ -41,6 +42,7 @@ public class XWalkUIClientInternal { * Constructor. * @param view the owner XWalkViewInternal instance. */ + @XWalkAPI public XWalkUIClientInternal(XWalkViewInternal view) { mContext = view.getContext(); mDecorView = view.getActivity().getWindow().getDecorView(); @@ -66,6 +68,7 @@ private void initResources() { * Request display and focus for this XWalkViewInternal. * @param view the owner XWalkViewInternal instance. */ + @XWalkAPI public void onRequestFocus(XWalkViewInternal view) { } @@ -73,6 +76,7 @@ public void onRequestFocus(XWalkViewInternal view) { * Notify the client to close the given XWalkViewInternal. * @param view the owner XWalkViewInternal instance. */ + @XWalkAPI public void onJavascriptCloseWindow(XWalkViewInternal view) { if (view != null && view.getActivity() != null) { view.getActivity().finish(); @@ -83,13 +87,17 @@ public void onJavascriptCloseWindow(XWalkViewInternal view) { * The type of JavaScript modal dialog. */ /** JavaScript alert dialog. */ - public final static int JAVASCRIPT_ALERT = 0; + @XWalkAPI + public static final int JAVASCRIPT_ALERT = 0; /** JavaScript confirm dialog. */ - public final static int JAVASCRIPT_CONFIRM = 1; + @XWalkAPI + public static final int JAVASCRIPT_CONFIRM = 1; /** JavaScript prompt dialog. */ - public final static int JAVASCRIPT_PROMPT = 2; + @XWalkAPI + public static final int JAVASCRIPT_PROMPT = 2; /** JavaScript dialog for a window-before-unload notification. */ - public final static int JAVASCRIPT_BEFOREUNLOAD = 3; + @XWalkAPI + public static final int JAVASCRIPT_BEFOREUNLOAD = 3; /** * Tell the client to display a prompt dialog to the user. @@ -100,6 +108,7 @@ public void onJavascriptCloseWindow(XWalkViewInternal view) { * @param defaultValue the default value string. Only valid for Prompt dialog. * @param result the callback to handle the result from caller. */ + @XWalkAPI public boolean onJavascriptModalDialog(XWalkViewInternal view, int type, String url, String message, String defaultValue, XWalkJavascriptResultInternal result) { switch(type) { @@ -124,6 +133,7 @@ public boolean onJavascriptModalDialog(XWalkViewInternal view, int type, String * @param view the owner XWalkViewInternal instance. * @param enterFullscreen true if it has entered fullscreen mode. */ + @XWalkAPI public void onFullscreenToggled(XWalkViewInternal view, boolean enterFullscreen) { Activity activity = view.getActivity(); if (enterFullscreen) { @@ -172,6 +182,7 @@ public void onFullscreenToggled(XWalkViewInternal view, boolean enterFullscreen) * @param capture value of the 'capture' attribute of the input tag associated * with this file picker */ + @XWalkAPI public void openFileChooser(XWalkViewInternal view, ValueCallback uploadFile, String acceptType, String capture) { uploadFile.onReceiveValue(null); @@ -183,6 +194,7 @@ public void openFileChooser(XWalkViewInternal view, ValueCallback uploadFil * @param oldScale the old scale before scaling. * @param newScale the current scale factor after scaling. */ + @XWalkAPI public void onScaleChanged(XWalkViewInternal view, float oldScale, float newScale) { } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java index f8b27cc147..a94f57d14c 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java @@ -142,6 +142,7 @@ * } * */ +@XWalkAPI(extendClass = FrameLayout.class, createExternally = true) public class XWalkViewInternal extends android.widget.FrameLayout { static final String PLAYSTORE_DETAIL_URI = "market://details?id="; @@ -153,8 +154,10 @@ public class XWalkViewInternal extends android.widget.FrameLayout { private boolean mIsHidden; /** Normal reload mode as default. */ + @XWalkAPI public static final int RELOAD_NORMAL = 0; /** Reload mode with bypassing the cache. */ + @XWalkAPI public static final int RELOAD_IGNORE_CACHE = 1; /** @@ -162,6 +165,11 @@ public class XWalkViewInternal extends android.widget.FrameLayout { * @param context a Context object used to access application assets. * @param attrs an AttributeSet passed to our parent. */ + @XWalkAPI(preWrapperLines = {"super(%1, %2);"}, + postWrapperLines = { + "addView(bridge, new FrameLayout.LayoutParams(", + " FrameLayout.LayoutParams.MATCH_PARENT,", + " FrameLayout.LayoutParams.MATCH_PARENT));"}) public XWalkViewInternal(Context context, AttributeSet attrs) { super(context, attrs); @@ -176,6 +184,11 @@ public XWalkViewInternal(Context context, AttributeSet attrs) { * @param context a Context object used to access application assets * @param activity the activity for this XWalkViewInternal. */ + @XWalkAPI(preWrapperLines = {"super(%1, null);"}, + postWrapperLines = { + "addView(bridge, new FrameLayout.LayoutParams(", + " FrameLayout.LayoutParams.MATCH_PARENT,", + " FrameLayout.LayoutParams.MATCH_PARENT));"}) public XWalkViewInternal(Context context, Activity activity) { super(context, null); checkThreadSafety(); @@ -327,6 +340,7 @@ private void initXWalkContent(Context context, AttributeSet attrs) { * @param url the url for web page/app. * @param content the content for the web page/app. Could be empty. */ + @XWalkAPI public void load(String url, String content) { if (mContent == null) return; checkThreadSafety(); @@ -344,6 +358,7 @@ public void load(String url, String content) { * @param url the url for manifest.json. * @param content the content for manifest.json. */ + @XWalkAPI public void loadAppFromManifest(String url, String content) { if (mContent == null) return; checkThreadSafety(); @@ -354,6 +369,7 @@ public void loadAppFromManifest(String url, String content) { * Reload a web app with a given mode. * @param mode the reload mode. */ + @XWalkAPI public void reload(int mode) { if (mContent == null) return; checkThreadSafety(); @@ -363,6 +379,7 @@ public void reload(int mode) { /** * Stop current loading progress. */ + @XWalkAPI public void stopLoading() { if (mContent == null) return; checkThreadSafety(); @@ -374,6 +391,7 @@ public void stopLoading() { * by caller. * @return the url for current web page/app. */ + @XWalkAPI public String getUrl() { if (mContent == null) return null; checkThreadSafety(); @@ -385,6 +403,7 @@ public String getUrl() { * by caller. * @return the title for current web page/app. */ + @XWalkAPI public String getTitle() { if (mContent == null) return null; checkThreadSafety(); @@ -395,6 +414,7 @@ public String getTitle() { * Get the original url specified by caller. * @return the original url. */ + @XWalkAPI public String getOriginalUrl() { if (mContent == null) return null; checkThreadSafety(); @@ -406,6 +426,7 @@ public String getOriginalUrl() { * this XWalkViewInternal if any backward/forward and navigation operations. * @return the navigation history. */ + @XWalkAPI public XWalkNavigationHistoryInternal getNavigationHistory() { if (mContent == null) return null; checkThreadSafety(); @@ -419,6 +440,7 @@ public XWalkNavigationHistoryInternal getNavigationHistory() { * @param object the supplied Java object, called by JavaScript. * @param name the name injected in JavaScript. */ + @XWalkAPI public void addJavascriptInterface(Object object, String name) { if (mContent == null) return; checkThreadSafety(); @@ -430,6 +452,7 @@ public void addJavascriptInterface(Object object, String name) { * @param script the JavaScript string. * @param callback the callback to handle the evaluated result. */ + @XWalkAPI public void evaluateJavascript(String script, ValueCallback callback) { if (mContent == null) return; checkThreadSafety(); @@ -441,6 +464,7 @@ public void evaluateJavascript(String script, ValueCallback callback) { * will clear the cache for all XWalkViews used. * @param includeDiskFiles indicate whether to clear disk files for cache. */ + @XWalkAPI public void clearCache(boolean includeDiskFiles) { if (mContent == null) return; checkThreadSafety(); @@ -451,6 +475,7 @@ public void clearCache(boolean includeDiskFiles) { * Indicate that a HTML element is occupying the whole screen. * @return true if any HTML element is occupying the whole screen. */ + @XWalkAPI public boolean hasEnteredFullscreen() { if (mContent == null) return false; checkThreadSafety(); @@ -461,6 +486,7 @@ public boolean hasEnteredFullscreen() { * Leave fullscreen mode if it's. Do nothing if it's not * in fullscreen. */ + @XWalkAPI public void leaveFullscreen() { if (mContent == null) return; checkThreadSafety(); @@ -476,6 +502,7 @@ public void leaveFullscreen() { * Note that it will globally impact all XWalkViewInternal instances, not limited to * just this XWalkViewInternal. */ + @XWalkAPI public void pauseTimers() { if (mContent == null) return; checkThreadSafety(); @@ -489,6 +516,7 @@ public void pauseTimers() { * Note that it will globally impact all XWalkViewInternal instances, not limited to * just this XWalkViewInternal. */ + @XWalkAPI public void resumeTimers() { if (mContent == null) return; checkThreadSafety(); @@ -501,6 +529,7 @@ public void resumeTimers() { * JavaScript timers. * Typically it should be called when the activity for this view is paused. */ + @XWalkAPI public void onHide() { if (mContent == null || mIsHidden) return; mExtensionManager.onPause(); @@ -513,6 +542,7 @@ public void onHide() { * this during resuming this activity if they call onHide. * Typically it should be called when the activity for this view is resumed. */ + @XWalkAPI public void onShow() { if (mContent == null || !mIsHidden ) return; mExtensionManager.onResume(); @@ -523,6 +553,7 @@ public void onShow() { /** * Release internal resources occupied by this XWalkViewInternal. */ + @XWalkAPI public void onDestroy() { destroy(); } @@ -536,6 +567,7 @@ public void onDestroy() { * @param resultCode passed from android.app.Activity.onActivityResult(). * @param data passed from android.app.Activity.onActivityResult(). */ + @XWalkAPI public void onActivityResult(int requestCode, int resultCode, Intent data) { if (mContent == null) return; mExtensionManager.onActivityResult(requestCode, resultCode, data); @@ -549,6 +581,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { * android.app.Activity.onNewIntent(). * @param intent passed from android.app.Activity.onNewIntent(). */ + @XWalkAPI public boolean onNewIntent(Intent intent) { if (mContent == null) return false; return mContent.onNewIntent(intent); @@ -559,6 +592,7 @@ public boolean onNewIntent(Intent intent) { * afterwards restoring. * @param outState the saved state for restoring. */ + @XWalkAPI public boolean saveState(Bundle outState) { if (mContent == null) return false; mContent.saveState(outState); @@ -570,6 +604,7 @@ public boolean saveState(Bundle outState) { * @param inState the state saved from saveState(). * @return true if it can restore the state. */ + @XWalkAPI public boolean restoreState(Bundle inState) { if (mContent == null) return false; if (mContent.restoreState(inState) != null) return true; @@ -581,6 +616,7 @@ public boolean restoreState(Bundle inState) { * @return the string of API level. */ // TODO(yongsheng): make it static? + @XWalkAPI public String getAPIVersion() { return "2.0"; } @@ -590,6 +626,7 @@ public String getAPIVersion() { * @return the string of Crosswalk. */ // TODO(yongsheng): make it static? + @XWalkAPI public String getXWalkVersion() { if (mContent == null) return null; return mContent.getXWalkVersion(); @@ -600,6 +637,7 @@ public String getXWalkVersion() { * to UI. * @param client the XWalkUIClientInternal defined by callers. */ + @XWalkAPI public void setUIClient(XWalkUIClientInternal client) { if (mContent == null) return; checkThreadSafety(); @@ -611,6 +649,7 @@ public void setUIClient(XWalkUIClientInternal client) { * to resource loading. * @param client the XWalkResourceClientInternal defined by callers. */ + @XWalkAPI public void setResourceClient(XWalkResourceClientInternal client) { if (mContent == null) return; checkThreadSafety(); @@ -624,6 +663,7 @@ public void setResourceClient(XWalkResourceClientInternal client) { * @param keyCode passed from android.view.View.onKeyUp(). * @param event passed from android.view.View.onKeyUp(). */ + @XWalkAPI @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { @@ -671,6 +711,7 @@ public void setNetworkAvailable(boolean networkUp) { * * @hide */ + @XWalkAPI public String enableRemoteDebugging(int allowedUid) { if (mContent == null) return null; checkThreadSafety(); diff --git a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java index 482c582141..5fb2a73ded 100644 --- a/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java +++ b/runtime/android/core_shell/src/org/xwalk/core/xwview/shell/XWalkViewShellActivity.java @@ -40,8 +40,6 @@ import org.xwalk.core.XWalkPreferences; import org.xwalk.core.XWalkResourceClient; import org.xwalk.core.XWalkView; -import org.xwalk.core.internal.XWalkViewInternal; -import org.xwalk.core.internal.XWalkWebChromeClient; public class XWalkViewShellActivity extends FragmentActivity implements ActionBar.TabListener, XWalkViewSectionFragment.OnXWalkViewCreatedListener{ @@ -322,12 +320,14 @@ public void onProgressChanged(XWalkView view, int newProgress) { }); // TODO: core shell shouldn't use internal APIs. + /* xwalkView.setXWalkWebChromeClient(new XWalkWebChromeClient(xwalkView) { @Override public void onReceivedTitle(XWalkViewInternal view, String title) { mSectionsPagerAdapter.setPageTitle((XWalkView)view, title); } }); + */ } private void setKeyboardVisibilityForUrl(boolean visible) { diff --git a/tools/reflection_generator/generator.py b/tools/reflection_generator/generator.py new file mode 100644 index 0000000000..1434d43d72 --- /dev/null +++ b/tools/reflection_generator/generator.py @@ -0,0 +1,61 @@ +import optparse +import os +import sys +import shutil +import subprocess + + +def Touch(path): + if not os.path.isdir(os.path.dirname(path)): + os.makedirs(os.path.dirname(path)) + with open(path, 'a'): + os.utime(path, None) + + +def GetCommandOutput(command, cwd=None): + proc = subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, bufsize=1, + cwd=cwd) + output = proc.communicate()[0] + result = proc.returncode + if result: + raise Exception('%s: %s' % (subprocess.list2cmdline(command), output)) + return output + + +def DoGenerate(options): + mainClass = 'org.xwalk.reflection.generator.Generator' + jars = [] + for jar in options.classpath.split(' '): + try: + jarPath = eval(jar) + except: + jarPath = jar + jars.append(jarPath) + classpath = ':'.join(jars) + if os.path.isdir(options.output): + shutil.rmtree(options.output) + os.makedirs(options.output) + cmd = ['java', '-classpath', classpath, mainClass, options.source, options.output] + GetCommandOutput(cmd) + + +def main(): + parser = optparse.OptionParser() + info = ('list of jars needed when running generator') + parser.add_option('--classpath', help=info) + info = ('path or internal java files') + parser.add_option('--source', help=info) + info = ('intermediate folder to place generated java files') + parser.add_option('--output', help=info) + info = ('the file to touch on success.') + parser.add_option('--stamp', help=info) + options, _ = parser.parse_args() + + DoGenerate(options) + if options.stamp: + Touch(options.stamp) + +if __name__ == '__main__': + sys.exit(main()) + diff --git a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java new file mode 100644 index 0000000000..a848f5aa12 --- /dev/null +++ b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java @@ -0,0 +1,705 @@ +package org.xwalk.reflection.generator; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Writer; +import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import java.util.List; + +import org.xwalk.core.internal.XWalkAPI; +import org.xwalk.core.internal.XWalkJavascriptResultHandlerInternal; +import org.xwalk.core.internal.XWalkNavigationHistoryInternal; +import org.xwalk.core.internal.XWalkPreferencesInternal; +import org.xwalk.core.internal.XWalkUIClientInternal; +import org.xwalk.core.internal.XWalkJavascriptResultInternal; +import org.xwalk.core.internal.XWalkNavigationItemInternal; +import org.xwalk.core.internal.XWalkResourceClientInternal; +import org.xwalk.core.internal.XWalkViewInternal; + +public class Generator { + private final static String INTERNAL_CLASS_SUFFIX = "Internal"; + private final static String BRIDGE_CLASS_SUFFIX = "Bridge"; + private final static String[] PARAM_NAMES = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}; + private final static Class[] CLASSES_TO_REFLECTIONIZE = { + XWalkJavascriptResultHandlerInternal.class, + XWalkNavigationHistoryInternal.class, + XWalkPreferencesInternal.class, + XWalkUIClientInternal.class, + XWalkJavascriptResultInternal.class, + XWalkNavigationItemInternal.class, + XWalkResourceClientInternal.class, + XWalkViewInternal.class + }; + + enum TargetType { + REFLECTION_LAYER_INTERNAL, + REFLECTION_LAYER_BRIDGE, + REFLECTION_LAYER_WRAPPER + }; + private static Set> usedClassSet = new HashSet>(); + + /** + * @param args + */ + @SuppressWarnings("unchecked") + public static void main(String[] argv) { + if (argv.length < 2) { + throw new RuntimeException("Invalid parameters"); + } + String wrapperPackage = "org.xwalk.core";; + String internalPackagePath = argv[0]; + String intermediatePath = argv[1]; + File output = new File(intermediatePath); + File input = new File(internalPackagePath); + if (!output.isDirectory()) { + throw new RuntimeException("Intermediate folder not exist"); + } + for (int i = 0; i < CLASSES_TO_REFLECTIONIZE.length; i++) { + Class clazz = CLASSES_TO_REFLECTIONIZE[i]; + String internalPackage = clazz.getPackage().getName(); + String className = clazz.getSimpleName(); + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (annotation == null) { + throw new RuntimeException("Class to be reflectionized must has XWalkAPI annotation :" + className); + } + File internalPackageDir = new File(input, internalPackage.replace('.', '/')); + if (!internalPackageDir.isDirectory()) { + throw new RuntimeException("internal package folder not exist"); + } + File wrapperPackageDir = new File(output, "wrapper" + "/src/" + wrapperPackage.replace('.', '/')); + File bridgePackageDir = new File(output, "bridge" + "/src/" + internalPackage.replace('.', '/')); + if (!wrapperPackageDir.isDirectory()) wrapperPackageDir.mkdirs(); + if (!bridgePackageDir.isDirectory()) bridgePackageDir.mkdirs(); + if (!className.endsWith(INTERNAL_CLASS_SUFFIX)) { + throw new RuntimeException("Class to be reflectionized must be named end with Internal :" + className); + } + String baseClassName = className.substring(0, className.length() - INTERNAL_CLASS_SUFFIX.length()); + File wrapperFile = new File(wrapperPackageDir, baseClassName + ".java"); + File internalFile = new File(internalPackageDir, className + ".java"); + BufferedWriter wrapperWriter = null; + BufferedWriter bridgeWriter = null; + BufferedReader internalReader = null; + try { + usedClassSet.clear(); + InputStreamReader isr = new InputStreamReader(new FileInputStream(internalFile)); + internalReader = new BufferedReader(isr); + List imports = getImportsInInternal(internalReader); + wrapperWriter = new BufferedWriter(new FileWriter(wrapperFile)); + if (clazz.isInterface()) { + parseInterface(clazz, annotation, wrapperPackage, imports, wrapperWriter); + } else { + File bridgeFile = new File(bridgePackageDir, baseClassName + "Bridge.java"); + bridgeWriter = new BufferedWriter(new FileWriter(bridgeFile)); + parseClass(clazz, annotation, wrapperPackage, imports, wrapperWriter, bridgeWriter); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (internalReader != null) internalReader.close(); + if (wrapperWriter != null) wrapperWriter.close(); + if (bridgeWriter != null) bridgeWriter.close(); + } catch (IOException e) {} + } + } + System.exit(0); + } + + private static List getImportsInInternal(BufferedReader internalReader) throws IOException { + String line = internalReader.readLine(); + List ret = new ArrayList(); + while(line != null) { + if (line.startsWith("import ")) { + ret.add(line.trim()); + } + line = internalReader.readLine(); + } + return ret; + } + + public static void parseClass(Class clazz, XWalkAPI annotation, String wrapperPackage, + List imports, Writer wrapperWriter, Writer bridgeWriter) throws IOException { + String className = clazz.getSimpleName(); + if (!className.endsWith(INTERNAL_CLASS_SUFFIX)) { + throw new RuntimeException("Class to be reflectionized must end with Internal"); + } + className = className.substring(0, className.length() - INTERNAL_CLASS_SUFFIX.length()); + StringBuilder bridge = new StringBuilder(); + StringBuilder wrapper = new StringBuilder(); + generateHeader(className, annotation, false, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + generateHeader(className, annotation, false, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + Constructor[] constructors = clazz.getDeclaredConstructors(); + boolean hasConstructor = false; + // If the class declares noInstance or createInternally, it doesn't need constructor besides + // the ones with bridge or wrapper. + if (!annotation.noInstance() && !annotation.createInternally()) { + for (Constructor constructor : constructors) { + if (constructor.getAnnotation(XWalkAPI.class) != null) { + appendConstrucor(className, constructor, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + appendConstrucor(className, constructor, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + hasConstructor = true; + } + } + if (!hasConstructor) { + appendConstrucor(className, null, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + appendConstrucor(className, null, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + } + } + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + if (field.getAnnotation(XWalkAPI.class) != null) { + appendConst(field, wrapper); + } + } + Method[] methods = clazz.getDeclaredMethods(); + for (Method method : methods) { + if (method.getAnnotation(XWalkAPI.class) != null) { + appendMethod(method, annotation, false, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + appendMethod(method, annotation, false, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + } + } + generateFooter(className, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + generateFooter(className, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + InsertPackageImport(clazz.getPackage().getName(), wrapperPackage, imports, + bridge, TargetType.REFLECTION_LAYER_BRIDGE); + InsertPackageImport(wrapperPackage, clazz.getPackage().getName(), imports, + wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + wrapperWriter.write(wrapper.toString()); + bridgeWriter.write(bridge.toString()); + } + + public static void parseInterface(Class clazz, XWalkAPI annotation, String wrapperPackage, + List imports, Writer wrapperWriter) throws IOException { + String className = clazz.getSimpleName(); + if (!className.endsWith(INTERNAL_CLASS_SUFFIX)) { + throw new RuntimeException("Class to be reflectionized must end with Internal"); + } + className = className.substring(0, className.length() - INTERNAL_CLASS_SUFFIX.length()); + StringBuilder wrapper = new StringBuilder(); + generateHeader(className, annotation, true, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + Method[] methods = clazz.getDeclaredMethods(); + for (Method method : methods) { + if (method.getAnnotation(XWalkAPI.class) != null) { + appendMethod(method, annotation, true, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + } + } + generateFooter(className, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + InsertPackageImport(wrapperPackage, clazz.getPackage().getName(), imports, + wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + wrapperWriter.write(wrapper.toString()); + } + + private static void InsertPackageImport(String packageName, String reflectionPackage, + List imports, StringBuilder builder, TargetType type) { + for (String importString : imports) { + String[] segs = importString.split(" "); + if (segs.length == 2) { + try { + Class clazz = Class.forName(segs[1].replace(";", "")); + if (usedClassSet.contains(clazz)) { + builder.insert(0, importString + "\n"); + } + } catch (ClassNotFoundException e) { + } + } + } + String suffix = ""; + if (type == TargetType.REFLECTION_LAYER_WRAPPER) { + suffix = BRIDGE_CLASS_SUFFIX; + } + for (int i = 0 ; i < CLASSES_TO_REFLECTIONIZE.length; i++) { + Class clazz = CLASSES_TO_REFLECTIONIZE[i]; + if (!clazz.isInterface()) { + String className = + clazz.getSimpleName().replace(INTERNAL_CLASS_SUFFIX, suffix); + builder.insert(0, "import " + reflectionPackage + "." + className + ";\n"); + } + } + builder.insert(0, "package " + packageName + ";\n"); + } + + private static void appendConstrucor(String className, Constructor constructor, + StringBuilder builder, TargetType type) { + String bridge = className + BRIDGE_CLASS_SUFFIX; + String declare = ""; + String use = ""; + String comma = ""; + String preWrapper = ""; + String postWrapper = ""; + XWalkAPI methodAnnotation = constructor.getAnnotation(XWalkAPI.class); + for (String line : methodAnnotation.preWrapperLines()) { + preWrapper += " " + line + "\n"; + } + for (String line : methodAnnotation.postWrapperLines()) { + postWrapper += " " + line + "\n"; + } + for (int i = 1; i <= PARAM_NAMES.length; i++) { + preWrapper = preWrapper.replace("%" + i, PARAM_NAMES[i-1]); + postWrapper = postWrapper.replace("%" + i, PARAM_NAMES[i-1]); + } + if (constructor != null) { + String[] paramsStrings = + getMethodParamsStrings(constructor.getGenericParameterTypes(), type, false, PARAM_NAMES); + declare = paramsStrings[0]; + use = paramsStrings[1]; + if (!use.isEmpty()) comma = ", "; + } + if (type == TargetType.REFLECTION_LAYER_BRIDGE) { + /* + public clazzBridge(int a, clazz wrapper) { + super(a); + this.wrapper = wrapper; + } + */ + builder.append(String.format( + " public %2$s(%3$s%5$s%1$s wrapper) {\n" + + " super(%4$s);\n" + + " this.wrapper = wrapper;\n" + + " }\n", + className, bridge, declare, use, comma)); + } else if (type == TargetType.REFLECTION_LAYER_WRAPPER) { + /* + XWalkClient(int a) { + bridge = new XWalkClientBridge(a, this); + } + */ + builder.append(String.format( + " public %1$s(%3$s) {\n" + + "%6$s" + + " bridge = new %2$s(%4$s%5$sthis);\n" + + "%7$s" + + " }\n", + className, bridge, declare, use, comma, + preWrapper, postWrapper)); + } + } + + private static void generateHeader( + String className, XWalkAPI annotation, boolean isInterface, + StringBuilder builder, TargetType type) { + String bridge = className + BRIDGE_CLASS_SUFFIX; + String internal = className + INTERNAL_CLASS_SUFFIX; + boolean isStatic = annotation.noInstance(); + if (type == TargetType.REFLECTION_LAYER_BRIDGE) { + if (isStatic) { + /* + public class clazzBridge extends clazzInternal { + */ + builder.append(String.format( + "public class %1$s extends %2$s {\n", + bridge, internal)); + } else { + /* + public class clazzBridge extends clazzInternal { + private clazz wrapper; + clazz getWrapper() { + return wrapper; + } + */ + builder.append(String.format( + "public class %2$s extends %3$s {\n" + + " private %1$s wrapper;\n" + + " public %1$s getWrapper() {\n" + + " return wrapper;\n" + + " }\n", + className, bridge, internal)); + if (annotation.createInternally()) { + /* + private clazzInternal internal = null; + clazzBridge(clazzInternal internal) { + this.internal = internal; + this.wrapper = new clazz(this); + } + */ + builder.append(String.format( + " private %3$s internal = null;\n" + + " %2$s(%3$s internal) {\n" + + " this.internal = internal;\n" + + " this.wrapper = new %1$s(this);\n" + + " }\n", + className, bridge, internal)); + } + } + } else if (type == TargetType.REFLECTION_LAYER_WRAPPER) { + if (isInterface) { + /* + public interface XWalkInterface { + */ + builder.append(String.format("public interface %1$s {\n", className)); + } else { + /* + public class XWalkClient { + private XWalkClientBridge bridge; + public XWalkClient(XWalkClientBridge bridge) { + this.bridge = bridge; + } + public XWalkClientBridge getBridge() { + return bridge; + } + */ + String extAndImpl = ""; + Class ext = annotation.extendClass(); + if (ext != Object.class) { + usedClassSet.add(ext); + extAndImpl = "extends " + getTypeString(null, ext, true) + " "; + } + Class impl = annotation.impl(); + if (impl != Object.class) { + extAndImpl += "implements " + + getTypeString(null, impl, true).replace(INTERNAL_CLASS_SUFFIX, "") + " "; + } + builder.append(String.format( + "public class %1$s %3$s{\n" + + " private %2$s bridge;\n" + + " public %2$s getBridge() {\n" + + " return bridge;\n" + + " }\n", + className, bridge, extAndImpl)); + if (!annotation.createExternally()) { + builder.append(String.format( + " public %1$s(%2$s bridge) {\n" + + " this.bridge = bridge;\n" + + " }\n", + className, bridge, extAndImpl)); + } + } + } + } + + private static void appendMethod( + Method method, XWalkAPI annotation, boolean isInterface, StringBuilder builder, TargetType target) { + String name = method.getName(); + Type retType = method.getGenericReturnType(); + Class retClazz = method.getReturnType(); + String modifierString = "public"; + String retTypeString = getTypeString(retType, retClazz, true); + retTypeString = transferType(retTypeString, retClazz, target); + String returnTerm = retTypeString.equals("void") ? "" : "return "; + String preWrapper = ""; + String postWrapper = ""; + XWalkAPI methodAnnotation = method.getAnnotation(XWalkAPI.class); + for (String line : methodAnnotation.preWrapperLines()) { + preWrapper += " " + line + "\n"; + } + for (String line : methodAnnotation.postWrapperLines()) { + postWrapper += " " + line + "\n"; + } + for (int i = 1; i <= PARAM_NAMES.length; i++) { + preWrapper.replace("%" + i, PARAM_NAMES[i-1]); + postWrapper.replace("%" + i, PARAM_NAMES[i-1]); + } + String[] paramsStrings = getMethodParamsStrings(method.getGenericParameterTypes(), target, false, PARAM_NAMES); + boolean isStatic = (method.getModifiers() & Modifier.STATIC) != 0; + String retValue = ""; + if (isStatic) modifierString += " static"; + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + /* + public void work(int a) { + wrapper.work(a); + } + + public void workSuper(int a) { + super.work(a); + } + */ + /* In case the class has XWalkAPI annotation with createInternally, it will be + public void work(int a) { + wrapper.work(a); + } + public void workSuper(int a) { + if (internal == null) { + super.work(a); + } else { + internal.work(a); + } + } + */ + /* In case the method is static, it will be + public static void work(int a) { + clazzInternal.work(a); + } + */ + String[] paramsStringsWrapper = getMethodParamsStrings(method.getGenericParameterTypes(), target, true, PARAM_NAMES); + if (isStatic) { + String internalClass = method.getDeclaringClass().getSimpleName(); + String v = String.format("%1$s.%2$s(%3$s)", internalClass, name, paramsStringsWrapper[1]); + retValue = transferValueExpress(retType, v, true, true, target); + } else { + String v = String.format("wrapper.%1$s(%2$s)", name, paramsStringsWrapper[1]); + retValue = transferValueExpress(retType, v, true, true, target); + } + // BridgeCall + builder.append(String.format( + " %5$s %2$s %1$s(%4$s) {\n" + + " %3$s%6$s;\n" + + " }\n", + name, retTypeString, returnTerm, + paramsStringsWrapper[0], modifierString, retValue + )); + if (!isStatic) { + // SuperCall + String v = String.format("super.%1$s(%2$s)", name, paramsStrings[1]); + retValue = transferValueExpress(retType, v, false, true, target); + if (annotation.createInternally()) { + String internalV = String.format("internal.%1$s(%2$s)", name, paramsStrings[1]); + String internalRetValue = transferValueExpress(retType, internalV, false, true, target); + builder.append(String.format( + " %5$s %2$s %1$sSuper(%4$s) {\n" + + " if (internal == null) {\n" + + " %3$s%6$s;\n" + + " } else {\n" + + " %3$s%7$s;\n" + + " }\n" + + " }\n", + name, retTypeString, returnTerm, + paramsStrings[0], modifierString, + retValue, internalRetValue + )); + } else { + builder.append(String.format( + " %5$s %2$s %1$sSuper(%4$s) {\n" + + " %3$s%6$s;\n" + + " }\n", + name, retTypeString, returnTerm, + paramsStrings[0], modifierString, retValue + )); + } + } + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + /* + public void work(int a) { + bridge.workSuper(a); + } + */ + if (isInterface) { + builder.append(String.format( + " %4$s %2$s %1$s(%3$s);\n", + name, retTypeString, paramsStrings[0], modifierString + )); + } else { + if (isStatic) { + String internalClass = method.getDeclaringClass().getSimpleName(); + String bridgeClass = internalClass.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + String v = String.format("%1$s.%2$s(%3$s)", bridgeClass, name, paramsStrings[1]); + retValue = transferValueExpress(retType, v, false, true, target); + } else { + String v = String.format("bridge.%1$sSuper(%2$s)", name, paramsStrings[1]); + retValue = transferValueExpress(retType, v, false, true, target); + } + builder.append(String.format( + " %5$s %2$s %1$s(%4$s) {\n" + + "%7$s" + + " %3$s%6$s;\n" + + "%8$s" + + " }\n", + name, retTypeString, returnTerm, paramsStrings[0], modifierString, retValue, + preWrapper, postWrapper + )); + } + } + } + + private static void appendConst(Field field, StringBuilder builder) { + String modifier = "public final static"; + // The assumption is that const always are "public final static" and always are simple types. + try { + String type = field.getType().getSimpleName(); + String value = field.get(null).toString(); + if (field.getType() == String.class) value = "\"" + value + "\""; + builder.append(String.format( + " %1$s %2$s %3$s = %4$s;\n", + modifier, type, field.getName(), value)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private static String[] getMethodParamsStrings( + Type[] gpTypes, TargetType target, boolean forWrapperCallOfBridge, String[] paramNames) { + String declare = ""; + String use = ""; + int i = 0; + for (Type gpType : gpTypes) { + String v = paramNames[i]; + i++; + String value = transferValueExpress(gpType, v, forWrapperCallOfBridge, false, target); + Class clazz = extractClassFromType(gpType); + String typeString = getTypeString(gpType, null, true); + typeString = transferType(typeString, clazz, target); + declare += typeString + " " + v + ", "; + use += value + ", "; + } + if (!declare.isEmpty()) { + // To get rid of the tailing ", " + declare = declare.substring(0, declare.length() - 2); + use = use.substring(0, use.length() - 2); + } + return new String[] {declare, use}; + } + + /* + * Transfer an internal type string into bridge/wrapper type. + */ + private static String transferType(String type, Class clazz, TargetType target) { + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (annotation == null) return type; + + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + if (clazz.isInterface()) return type; + return type.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + return type.replace(INTERNAL_CLASS_SUFFIX, ""); + } + return type; + } + + /* + * Transfer an internal type value into bridge/wrapper for function params/return value. + */ + private static String transferValueExpress( + Type valueType, String v, + boolean bridgeWrapperCall, boolean forReturnValue, TargetType target) { + String type = getTypeString(valueType, null, true); + String value = v; + // In case it's void return type. + if (forReturnValue && type.equals("void")) return value; + + Class clazz = extractClassFromType(valueType); + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (annotation == null) return value; + + /* Handle Internal class */ + + // If annotation declares instance class, cast value to it. + Class instance = annotation.instance(); + String instanceType = type; + if (instance != Object.class) { + instanceType = getTypeString(null, instance, true); + // If annotation has instance, cast value to instance type. + // For wrapper, cast to the wrapper class of instance type. + if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + value = "(" + instanceType.replace(INTERNAL_CLASS_SUFFIX, "") + ")" + value; + } else if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + value = "(" + instanceType + ")" + value; + } + } + String instanceBridgeType = instanceType.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + String instanceWrapperType = instanceType.replace(INTERNAL_CLASS_SUFFIX, ""); + // Get whether this class is only created internally or externally. + boolean createInternally = annotation.createInternally(); + boolean createExternally = annotation.createExternally(); + + if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + if (forReturnValue) { + // The return of bridge's function is always bridge. + // So here transfers bridge value to wrapper, add ".getWrapper()" + value = String.format("(%s).getWrapper()", value); + } else { + // The input of wrapper's function is always wrapper. + // So here transfers wrapper value to bridge value, add ".getBridge()" + value = String.format("(%s).getBridge()", value); + } + // Bridge class has two function for each internal function: wrapperCall and superCall. + // They needs to be treaded differently. + } else if (target == TargetType.REFLECTION_LAYER_BRIDGE && bridgeWrapperCall) { + if (forReturnValue) { + // The return of wrapper's function is always wrapper. + // So here transfers wrapper to bridge. + value = String.format("(%s).getBridge()", value); + } else { + // The input of bridge's function is always internal. + // So here transfers internal to wrapper. + String castToBridge = String.format("(%1$s) %2$s", instanceBridgeType, v); + if (!createExternally) { + // If not create externally, the internal value might not able to be cast to bridge type. + // If not, need to create bridge via internal value. + value = String.format( + "%1$s instanceof %2$s ? (%3$s) : new %2$s(%4$s)", + v, instanceBridgeType, castToBridge, value); + } else { + value = castToBridge; + } + value = String.format("(%s).getWrapper()", value); + } + } else if (target == TargetType.REFLECTION_LAYER_BRIDGE && !bridgeWrapperCall) { + // superCall of bridge function + if (forReturnValue) { + // The return value of superCall is always internal. + // So here needs to transfer internal to bridge. + String castToBridge = String.format("(%1$s) %2$s", instanceBridgeType, v); + if (!createExternally) { + // If not create externally, the internal value might not able to be cast to bridge type. + // If not, need to create bridge via internal value. + value = String.format( + "%1$s instanceof %2$s ? (%3$s) : new %2$s(%4$s)", + v, instanceBridgeType, castToBridge, value); + } else { + value = castToBridge; + } + } else { + // The input of superCall is always internal, so directly return the original value is ok. + value = v; + } + } + return value; + } + + /* + * Get the string of a given type. The main reason to have this is that Class doesn't + * contain GenericTypes. e.g. HashSet is only HashSet in Class. + */ + private static String getTypeString(Type type, Class clazz, boolean isRootCall) { + try { + if (clazz == null) { + clazz = extractClassFromType(type); + } + if (!clazz.isAnnotationPresent(XWalkAPI.class)) usedClassSet.add(clazz); + if (type instanceof ParameterizedType) { + ParameterizedType pType = (ParameterizedType) type; + Type[] argus = pType.getActualTypeArguments(); + String arguList = ""; + for (Type argu : argus) { + arguList += getTypeString(argu, null, false) + ", "; + } + arguList = arguList.substring(0, arguList.length() - 2); + return clazz.getSimpleName() + "<" + arguList + ">"; + } else if (type instanceof GenericArrayType) { + GenericArrayType pType = (GenericArrayType) type; + Type cType = pType.getGenericComponentType(); + return getTypeString(cType, null, false) + "[]"; + } + } catch (ClassCastException e) { + // If this is a recursive call, just throw the exception. + // when the exception thrown to the top level, return the + // clazz's simple name as fallback. + if (!isRootCall) throw e; + } + return clazz.getSimpleName(); + } + + private static Class extractClassFromType(Type t) throws ClassCastException { + if (t instanceof Class) { + return (Class)t; + } + return (Class)((ParameterizedType)t).getRawType(); + } + + private static void generateFooter(String className, StringBuilder builder, TargetType type) { + builder.append("}\n"); + } +} diff --git a/xwalk_android.gypi b/xwalk_android.gypi index 3dabc4131c..08c4d552d2 100644 --- a/xwalk_android.gypi +++ b/xwalk_android.gypi @@ -1,4 +1,8 @@ { + 'variables': { + 'reflection_java_dir': '<(PRODUCT_DIR)/gen/xwalk_core_reflection_layer', + 'empty_src_dir': '<(DEPTH)/xwalk/runtime/android/core_empty', + }, 'targets': [ { 'target_name': 'libxwalkcore', @@ -49,15 +53,75 @@ 'includes': ['../build/java.gypi'], }, { - 'target_name': 'xwalk_core_java', + 'target_name': 'xwalk_core_reflection_layer_generator_java', 'type': 'none', 'dependencies': [ 'xwalk_core_internal_java', ], 'variables': { - 'java_in_dir': 'runtime/android/core', + 'java_in_dir': 'tools/reflection_generator', }, 'includes': ['../build/java.gypi'], + 'all_dependent_settings': { + 'variables': { + 'generator_jar_path': '<(jar_final_path)', + }, + }, + }, + { + 'target_name': 'xwalk_core_reflection_layer_java_gen', + 'type': 'none', + 'dependencies': [ + 'xwalk_core_reflection_layer_generator_java', + ], + 'variables': { + 'timestamp': '<(reflection_java_dir)/gen.timestamp', + 'android_jar': '<(android_sdk)/android.jar', + 'input_jars_paths': [ '<(android_jar)' ], + }, + 'all_dependent_settings': { + 'variables': { + 'reflection_layer_gen_timestamp': '<(timestamp)', + }, + }, + 'actions': [ + { + 'action_name': 'generate_reflection', + 'message': 'Creating reflection layer', + 'inputs': [ + 'tools/reflection_generator/generator.py', + '>(generator_jar_path)', + ], + 'outputs': [ + '<(timestamp)', + ], + 'action': [ + 'python', 'tools/reflection_generator/generator.py', + '--classpath=>(input_jars_paths)', + '--source=runtime/android/core_internal/src', + '--output=<(reflection_java_dir)', + '--stamp=<(timestamp)', + ], + }, + ], + }, + { + #TODO(wang16): split it into internal and core. + 'target_name': 'xwalk_core_java', + 'type': 'none', + 'dependencies': [ + 'xwalk_core_internal_java', + 'xwalk_core_reflection_layer_java_gen', + ], + 'variables': { + 'java_in_dir': '<(empty_src_dir)', + 'additional_input_paths': [ '>(reflection_layer_gen_timestamp)' ], + 'generated_src_dirs': [ + '<(reflection_java_dir)/bridge', + '<(reflection_java_dir)/wrapper', + ], + }, + 'includes': ['../build/java.gypi'] }, { 'target_name': 'xwalk_runtime_java', From c43cc3cb954c1dd1b33da3675db6e4a920acd3bf Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Thu, 8 May 2014 15:49:32 +0800 Subject: [PATCH 08/12] [Android] Remove public modifer of constructor for Navigation classes --- .../xwalk/core/internal/XWalkNavigationHistoryInternal.java | 4 ++-- .../org/xwalk/core/internal/XWalkNavigationItemInternal.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java index 864ebb6379..9f6cf67b8b 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationHistoryInternal.java @@ -19,7 +19,7 @@ public class XWalkNavigationHistoryInternal implements Cloneable, Serializable { // Never use this constructor. // It is only used in XWalkNavigationHistoryBridge. - public XWalkNavigationHistoryInternal() { + XWalkNavigationHistoryInternal() { mXWalkView = null; mHistory = null; } @@ -29,7 +29,7 @@ public XWalkNavigationHistoryInternal() { mHistory = history; } - public XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { + XWalkNavigationHistoryInternal(XWalkNavigationHistoryInternal history) { mXWalkView = history.mXWalkView; mHistory = history.mHistory; } diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java index 7efa8442cf..250a1dc354 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkNavigationItemInternal.java @@ -15,7 +15,7 @@ public class XWalkNavigationItemInternal implements Cloneable { // Never use this constructor. // It is only used in XWalkNavigationItemBridge. - public XWalkNavigationItemInternal() { + XWalkNavigationItemInternal() { mEntry = null; } @@ -23,7 +23,7 @@ public XWalkNavigationItemInternal() { mEntry = entry; } - public XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { + XWalkNavigationItemInternal(XWalkNavigationItemInternal item) { mEntry = item.mEntry; } From ae746da079c52113d7aa8f704b499207b5a20229 Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Mon, 12 May 2014 15:19:13 +0800 Subject: [PATCH 09/12] [Android][Reflection Layer] Use instance type for Class with instance in XWalkAPI If a class declares instance in its XWalkAPI annotation, use that class's bridge type in other classes' bridge call. --- .../src/org/xwalk/reflection/generator/Generator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java index a848f5aa12..a18b0c0319 100644 --- a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java +++ b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java @@ -560,7 +560,10 @@ private static String transferType(String type, Class clazz, TargetType targe if (annotation == null) return type; if (target == TargetType.REFLECTION_LAYER_BRIDGE) { - if (clazz.isInterface()) return type; + Class instance = annotation.instance(); + if (instance != Object.class) { + return transferType(instance.getSimpleName(), instance, target); + } return type.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { return type.replace(INTERNAL_CLASS_SUFFIX, ""); From a7001a8c0b49cfbb85053173fe0ec54d1ad5572a Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Wed, 14 May 2014 14:40:03 +0800 Subject: [PATCH 10/12] Add option to turn on reflection in generator --- tools/reflection_generator/generator.py | 6 +++++- .../src/org/xwalk/reflection/generator/Generator.java | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tools/reflection_generator/generator.py b/tools/reflection_generator/generator.py index 1434d43d72..1e36a6a171 100644 --- a/tools/reflection_generator/generator.py +++ b/tools/reflection_generator/generator.py @@ -36,7 +36,8 @@ def DoGenerate(options): if os.path.isdir(options.output): shutil.rmtree(options.output) os.makedirs(options.output) - cmd = ['java', '-classpath', classpath, mainClass, options.source, options.output] + cmd = ['java', '-classpath', classpath, mainClass, + str(options.reflection).lower(), options.source, options.output] GetCommandOutput(cmd) @@ -50,6 +51,9 @@ def main(): parser.add_option('--output', help=info) info = ('the file to touch on success.') parser.add_option('--stamp', help=info) + info = ('set to true to create real reflection, otherwise ' + 'only bridge and wrapper will be created') + parser.add_option('--reflection', default=False, action='store_true', help=info) options, _ = parser.parse_args() DoGenerate(options) diff --git a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java index a18b0c0319..23b0c1dd2e 100644 --- a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java +++ b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java @@ -52,18 +52,21 @@ enum TargetType { REFLECTION_LAYER_WRAPPER }; private static Set> usedClassSet = new HashSet>(); + private static boolean createReflection; /** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] argv) { - if (argv.length < 2) { + if (argv.length < 3) { throw new RuntimeException("Invalid parameters"); } - String wrapperPackage = "org.xwalk.core";; - String internalPackagePath = argv[0]; - String intermediatePath = argv[1]; + String wrapperPackage = "org.xwalk.core"; + createReflection = Boolean.parseBoolean(argv[0]); + String internalPackagePath = argv[1]; + String intermediatePath = argv[2]; + File output = new File(intermediatePath); File input = new File(internalPackagePath); if (!output.isDirectory()) { From 05b392e65d38ab1c8854647b90024719083eafee Mon Sep 17 00:00:00 2001 From: Shiliu Wang Date: Thu, 15 May 2014 15:38:15 +0800 Subject: [PATCH 11/12] [Android][Reflection] Use real reflection between wrapper and bridge Previously, the invoking between wrapper bridge is still directly funtion call. This commit turns them into real reflection. Including following parts: 1. Method call will use bridge/wrapper object to get Class and then get method to invoke. The methods for all exposed API will be get at instance creation time to avoid getting method object for each call. 2. Static method has no instance to get Class, it has to use class name to get Class. So it will try to load method for each call. 3. Constructor is complicated, for each class which is not interface, will register all their constructors' parameter list to ReflectionHelper in static area. When ReflectionHelper got initialized with specified ClassLoader, will try to load all registered constructor. Each constructor will be assigned a unique string to use. --- .../xwalk/core/internal/ReflectionHelper.java | 183 ++++++++ .../core/internal/XWalkViewInternal.java | 4 +- tools/reflection_generator/generator.py | 22 + .../xwalk/reflection/generator/Generator.java | 411 +++++++++++++++--- xwalk_android.gypi | 1 + 5 files changed, 551 insertions(+), 70 deletions(-) create mode 100644 runtime/android/core_internal/src/org/xwalk/core/internal/ReflectionHelper.java diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/ReflectionHelper.java b/runtime/android/core_internal/src/org/xwalk/core/internal/ReflectionHelper.java new file mode 100644 index 0000000000..70b59a2a2a --- /dev/null +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/ReflectionHelper.java @@ -0,0 +1,183 @@ +// Copyright (c) 2014 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.xwalk.core.internal; + +import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.HashMap; + +public class ReflectionHelper { + static class ConstructorHelper { + private String fullClassName; + private Object[] paramTypes; + + Constructor loadConstructor() { + Class clazz = loadClass(fullClassName); + Class[] params = new Class[paramTypes.length]; + for (int i = 0; i < paramTypes.length; i++) { + Object type = paramTypes[i]; + if (type instanceof Class) { + params[i] = (Class) type; + } else if (type instanceof String) { + params[i] = loadClass((String) type); + } + } + try { + return clazz.getConstructor(params); + } catch (NoSuchMethodException e) { + ReflectionHelper.handleException(e); + return null; + } + } + + ConstructorHelper(String className, Object... paramTypes) { + this.fullClassName = className; + this.paramTypes = paramTypes; + } + } + + private static Map, Method> sBridgeWrapperMap = new HashMap, Method>(); + private static Map> sConstructorMap = new HashMap>(); + private static Map sConstructorHelperMap = + new HashMap(); + private static ClassLoader sBridgeOrWrapperLoader = null; + private static boolean sIsWrapper; + private final static String INTERNAL_PACKAGE = "org.xwalk.core.internal"; + private static boolean sClassLoaderUpdated = true; + + public static void init(boolean crossPackage) { + assert isWrapper(); + if (!crossPackage) { + initClassLoader(ReflectionHelper.class.getClassLoader()); + } + } + + public static void initClassLoader(ClassLoader loader) { + sBridgeOrWrapperLoader = loader; + sBridgeWrapperMap.clear(); + sConstructorMap.clear(); + try { + for (String name : sConstructorHelperMap.keySet()) { + ConstructorHelper helper = sConstructorHelperMap.get(name); + if (helper != null) sConstructorMap.put(name, helper.loadConstructor()); + } + if (sIsWrapper) { + Class helperInBridge = + sBridgeOrWrapperLoader.loadClass(INTERNAL_PACKAGE + "." + "ReflectionHelper"); + Method initInBridge = helperInBridge.getMethod("initClassLoader", ClassLoader.class); + initInBridge.invoke(null, ReflectionHelper.class.getClassLoader()); + } + } catch (Exception e) { + handleException(e); + } + } + + public static void registerConstructor(String name, String clazz, Object... params) { + sConstructorHelperMap.put(name, new ConstructorHelper(clazz, params)); + } + + public static Class loadClass(String clazz) { + if (sBridgeOrWrapperLoader == null) init(false); + try { + return sBridgeOrWrapperLoader.loadClass(clazz); + } catch (ClassNotFoundException e) { + handleException(e); + return null; + } + } + + public static Method loadMethod(Class clazz, String name, Class... paramTypes) { + try { + return clazz.getMethod(name, paramTypes); + } catch (NoSuchMethodException e) { + handleException(e); + return null; + } + } + + public static void handleException(Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + + public static void handleException(String e) { + handleException(new RuntimeException(e)); + } + + public static Object createInstance(String name, Object... parameters) { + Object ret = null; + Constructor creator = sConstructorMap.get(name); + if (creator == null) { + ConstructorHelper helper = sConstructorHelperMap.get(name); + if (helper != null) { + creator = helper.loadConstructor(); + sConstructorMap.put(name, creator); + } + } + if (creator != null) { + try { + ret = creator.newInstance(parameters); + } catch (IllegalArgumentException e) { + handleException(e); + } catch (InstantiationException e) { + handleException(e); + } catch (IllegalAccessException e) { + handleException(e); + } catch (InvocationTargetException e) { + handleException(e); + } + } + return ret; + } + + public static Object invokeMethod(Method m, Object instance, Object... parameters) { + Object ret = null; + if (m != null) { + try { + ret = m.invoke(instance, parameters); + } catch (IllegalArgumentException e) { + handleException(e); + } catch (IllegalAccessException e) { + handleException(e); + } catch (InvocationTargetException e) { + handleException(e); + } catch (NullPointerException e) { + handleException(e); + } + } + return ret; + } + + public static Object getBridgeOrWrapper(Object instance) { + Class clazz = instance.getClass(); + Method method = sBridgeWrapperMap.get(clazz); + if (method == null) { + String methodName = "getBridge"; + if (sIsWrapper) { + methodName = "getWrapper"; + } + try { + method = clazz.getMethod(methodName); + } catch (NoSuchMethodException e) { + handleException(e); + } + if (method != null) sBridgeWrapperMap.put(clazz, method); + } + return invokeMethod(method, instance); + } + + private static boolean isWrapper() { + return !ReflectionHelper.class.getPackage().getName().equals(INTERNAL_PACKAGE); + } + + static { + sIsWrapper = isWrapper(); + } +} diff --git a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java index a94f57d14c..73865cdcb6 100644 --- a/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java +++ b/runtime/android/core_internal/src/org/xwalk/core/internal/XWalkViewInternal.java @@ -167,7 +167,7 @@ public class XWalkViewInternal extends android.widget.FrameLayout { */ @XWalkAPI(preWrapperLines = {"super(%1, %2);"}, postWrapperLines = { - "addView(bridge, new FrameLayout.LayoutParams(", + "addView((FrameLayout)bridge, new FrameLayout.LayoutParams(", " FrameLayout.LayoutParams.MATCH_PARENT,", " FrameLayout.LayoutParams.MATCH_PARENT));"}) public XWalkViewInternal(Context context, AttributeSet attrs) { @@ -186,7 +186,7 @@ public XWalkViewInternal(Context context, AttributeSet attrs) { */ @XWalkAPI(preWrapperLines = {"super(%1, null);"}, postWrapperLines = { - "addView(bridge, new FrameLayout.LayoutParams(", + "addView((FrameLayout)bridge, new FrameLayout.LayoutParams(", " FrameLayout.LayoutParams.MATCH_PARENT,", " FrameLayout.LayoutParams.MATCH_PARENT));"}) public XWalkViewInternal(Context context, Activity activity) { diff --git a/tools/reflection_generator/generator.py b/tools/reflection_generator/generator.py index 1e36a6a171..193da09e20 100644 --- a/tools/reflection_generator/generator.py +++ b/tools/reflection_generator/generator.py @@ -41,6 +41,24 @@ def DoGenerate(options): GetCommandOutput(cmd) +def DoCopyHelperJava(options): + if options.helper_class is None: + return + f = open(options.helper_class, 'r') + output = os.path.join(options.output, 'wrapper', 'src', 'org', 'xwalk', 'core', + os.path.basename(options.helper_class)) + if not os.path.isdir(os.path.dirname(output)): + os.makedirs(os.path.dirname(output)) + fo = open(output, 'w') + for line in f.read().split('\n'): + if line.startswith('package '): + fo.write('package org.xwalk.core;\n') + else: + fo.write(line + '\n') + fo.close() + f.close() + + def main(): parser = optparse.OptionParser() info = ('list of jars needed when running generator') @@ -54,9 +72,13 @@ def main(): info = ('set to true to create real reflection, otherwise ' 'only bridge and wrapper will be created') parser.add_option('--reflection', default=False, action='store_true', help=info) + info = ('the path of the ReflectionHelper java source, ' + 'will copy it to output folder') + parser.add_option('--helper-class', help=info) options, _ = parser.parse_args() DoGenerate(options) + DoCopyHelperJava(options) if options.stamp: Touch(options.stamp) diff --git a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java index 23b0c1dd2e..201c197584 100644 --- a/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java +++ b/tools/reflection_generator/src/org/xwalk/reflection/generator/Generator.java @@ -34,6 +34,7 @@ public class Generator { private final static String INTERNAL_CLASS_SUFFIX = "Internal"; private final static String BRIDGE_CLASS_SUFFIX = "Bridge"; + private final static String WRAPPER_PACKAGE = "org.xwalk.core"; private final static String[] PARAM_NAMES = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}; private final static Class[] CLASSES_TO_REFLECTIONIZE = { XWalkJavascriptResultHandlerInternal.class, @@ -45,6 +46,10 @@ public class Generator { XWalkResourceClientInternal.class, XWalkViewInternal.class }; + private final static Class[] REFLECTION_CLASSES = { + Method.class, + Constructor.class + }; enum TargetType { REFLECTION_LAYER_INTERNAL, @@ -52,6 +57,8 @@ enum TargetType { REFLECTION_LAYER_WRAPPER }; private static Set> usedClassSet = new HashSet>(); + private static Set usedMethodSet = new HashSet(); + private static Set> usedConstructorSet = new HashSet>(); private static boolean createReflection; /** @@ -62,8 +69,9 @@ public static void main(String[] argv) { if (argv.length < 3) { throw new RuntimeException("Invalid parameters"); } - String wrapperPackage = "org.xwalk.core"; - createReflection = Boolean.parseBoolean(argv[0]); + String wrapperPackage = WRAPPER_PACKAGE; + // TODO: remove || true + createReflection = Boolean.parseBoolean(argv[0]) || true; String internalPackagePath = argv[1]; String intermediatePath = argv[2]; @@ -99,16 +107,18 @@ public static void main(String[] argv) { BufferedReader internalReader = null; try { usedClassSet.clear(); + usedMethodSet.clear(); + usedConstructorSet.clear(); InputStreamReader isr = new InputStreamReader(new FileInputStream(internalFile)); internalReader = new BufferedReader(isr); List imports = getImportsInInternal(internalReader); wrapperWriter = new BufferedWriter(new FileWriter(wrapperFile)); if (clazz.isInterface()) { - parseInterface(clazz, annotation, wrapperPackage, imports, wrapperWriter); + parseInterface(clazz, wrapperPackage, imports, wrapperWriter); } else { File bridgeFile = new File(bridgePackageDir, baseClassName + "Bridge.java"); bridgeWriter = new BufferedWriter(new FileWriter(bridgeFile)); - parseClass(clazz, annotation, wrapperPackage, imports, wrapperWriter, bridgeWriter); + parseClass(clazz, wrapperPackage, imports, wrapperWriter, bridgeWriter); } } catch (IOException e) { throw new RuntimeException(e); @@ -135,17 +145,17 @@ private static List getImportsInInternal(BufferedReader internalReader) return ret; } - public static void parseClass(Class clazz, XWalkAPI annotation, String wrapperPackage, + public static void parseClass(Class clazz, String wrapperPackage, List imports, Writer wrapperWriter, Writer bridgeWriter) throws IOException { String className = clazz.getSimpleName(); - if (!className.endsWith(INTERNAL_CLASS_SUFFIX)) { + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (annotation == null || !className.endsWith(INTERNAL_CLASS_SUFFIX)) { throw new RuntimeException("Class to be reflectionized must end with Internal"); } - className = className.substring(0, className.length() - INTERNAL_CLASS_SUFFIX.length()); StringBuilder bridge = new StringBuilder(); StringBuilder wrapper = new StringBuilder(); - generateHeader(className, annotation, false, bridge, TargetType.REFLECTION_LAYER_BRIDGE); - generateHeader(className, annotation, false, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + generateHeader(clazz, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + generateHeader(clazz, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); Constructor[] constructors = clazz.getDeclaredConstructors(); boolean hasConstructor = false; // If the class declares noInstance or createInternally, it doesn't need constructor besides @@ -153,14 +163,15 @@ public static void parseClass(Class clazz, XWalkAPI annotation, String wrappe if (!annotation.noInstance() && !annotation.createInternally()) { for (Constructor constructor : constructors) { if (constructor.getAnnotation(XWalkAPI.class) != null) { - appendConstrucor(className, constructor, bridge, TargetType.REFLECTION_LAYER_BRIDGE); - appendConstrucor(className, constructor, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + usedConstructorSet.add(constructor); + appendConstrucor(clazz, constructor, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + appendConstrucor(clazz, constructor, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); hasConstructor = true; } } if (!hasConstructor) { - appendConstrucor(className, null, bridge, TargetType.REFLECTION_LAYER_BRIDGE); - appendConstrucor(className, null, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + appendConstrucor(clazz, null, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + appendConstrucor(clazz, null, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); } } Field[] fields = clazz.getDeclaredFields(); @@ -172,36 +183,38 @@ public static void parseClass(Class clazz, XWalkAPI annotation, String wrappe Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { if (method.getAnnotation(XWalkAPI.class) != null) { + usedMethodSet.add(method); appendMethod(method, annotation, false, bridge, TargetType.REFLECTION_LAYER_BRIDGE); appendMethod(method, annotation, false, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); } } - generateFooter(className, bridge, TargetType.REFLECTION_LAYER_BRIDGE); - generateFooter(className, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + generateFooter(clazz, bridge, TargetType.REFLECTION_LAYER_BRIDGE); + generateFooter(clazz, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); InsertPackageImport(clazz.getPackage().getName(), wrapperPackage, imports, bridge, TargetType.REFLECTION_LAYER_BRIDGE); InsertPackageImport(wrapperPackage, clazz.getPackage().getName(), imports, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + wrapperWriter.write(wrapper.toString()); bridgeWriter.write(bridge.toString()); } - public static void parseInterface(Class clazz, XWalkAPI annotation, String wrapperPackage, + public static void parseInterface(Class clazz, String wrapperPackage, List imports, Writer wrapperWriter) throws IOException { String className = clazz.getSimpleName(); - if (!className.endsWith(INTERNAL_CLASS_SUFFIX)) { + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (annotation == null || !className.endsWith(INTERNAL_CLASS_SUFFIX)) { throw new RuntimeException("Class to be reflectionized must end with Internal"); } - className = className.substring(0, className.length() - INTERNAL_CLASS_SUFFIX.length()); StringBuilder wrapper = new StringBuilder(); - generateHeader(className, annotation, true, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + generateHeader(clazz, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { if (method.getAnnotation(XWalkAPI.class) != null) { appendMethod(method, annotation, true, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); } } - generateFooter(className, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); + generateFooter(clazz, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); InsertPackageImport(wrapperPackage, clazz.getPackage().getName(), imports, wrapper, TargetType.REFLECTION_LAYER_WRAPPER); wrapperWriter.write(wrapper.toString()); @@ -221,24 +234,38 @@ private static void InsertPackageImport(String packageName, String reflectionPac } } } - String suffix = ""; - if (type == TargetType.REFLECTION_LAYER_WRAPPER) { - suffix = BRIDGE_CLASS_SUFFIX; - } - for (int i = 0 ; i < CLASSES_TO_REFLECTIONIZE.length; i++) { - Class clazz = CLASSES_TO_REFLECTIONIZE[i]; - if (!clazz.isInterface()) { - String className = - clazz.getSimpleName().replace(INTERNAL_CLASS_SUFFIX, suffix); - builder.insert(0, "import " + reflectionPackage + "." + className + ";\n"); + if (!createReflection) { + String suffix = ""; + if (type == TargetType.REFLECTION_LAYER_WRAPPER) { + suffix = BRIDGE_CLASS_SUFFIX; } + for (int i = 0 ; i < CLASSES_TO_REFLECTIONIZE.length; i++) { + Class clazz = CLASSES_TO_REFLECTIONIZE[i]; + if (!clazz.isInterface()) { + String className = + clazz.getSimpleName().replace(INTERNAL_CLASS_SUFFIX, suffix); + builder.insert(0, "import " + reflectionPackage + "." + className + ";\n"); + } + } + } + for (Class clazz : REFLECTION_CLASSES) { + builder.insert(0, "import " + clazz.getPackage().getName() + "." + clazz.getSimpleName() + ";\n"); } builder.insert(0, "package " + packageName + ";\n"); } - private static void appendConstrucor(String className, Constructor constructor, - StringBuilder builder, TargetType type) { - String bridge = className + BRIDGE_CLASS_SUFFIX; + private static void appendConstrucor(Class clazz, Constructor constructor, + StringBuilder builder, TargetType target) { + String internal = clazz.getSimpleName(); + String bridge = internal.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + String wrapper = internal.replace(INTERNAL_CLASS_SUFFIX, ""); + if (createReflection) { + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + wrapper = "Object"; + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + bridge = "Object"; + } + } String declare = ""; String use = ""; String comma = ""; @@ -257,12 +284,12 @@ private static void appendConstrucor(String className, Constructor constructo } if (constructor != null) { String[] paramsStrings = - getMethodParamsStrings(constructor.getGenericParameterTypes(), type, false, PARAM_NAMES); + getMethodParamsStrings(constructor.getGenericParameterTypes(), target, false, PARAM_NAMES); declare = paramsStrings[0]; use = paramsStrings[1]; if (!use.isEmpty()) comma = ", "; } - if (type == TargetType.REFLECTION_LAYER_BRIDGE) { + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { /* public clazzBridge(int a, clazz wrapper) { super(a); @@ -273,39 +300,64 @@ public clazzBridge(int a, clazz wrapper) { " public %2$s(%3$s%5$s%1$s wrapper) {\n" + " super(%4$s);\n" + " this.wrapper = wrapper;\n" + + " try { reflectionInit(); } catch (Exception e) { ReflectionHelper.handleException(e); }\n" + " }\n", - className, bridge, declare, use, comma)); - } else if (type == TargetType.REFLECTION_LAYER_WRAPPER) { - /* + wrapper, bridge, declare, use, comma)); + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + /* No reflection XWalkClient(int a) { bridge = new XWalkClientBridge(a, this); } */ + /* With reflection + XWalkClient(int a) { + bridge = ReflectionHelper.createInstance("XWalkClientBridgeInt", a, this); + } + */ + String bridgeCreation = ""; + if (createReflection) { + bridgeCreation = String.format( + "bridge = ReflectionHelper.createInstance(\"%1$s\", %2$s%3$sthis);", + generateConstructorName(constructor), use, comma); + } else { + bridgeCreation = String.format("bridge = new %1$s(%2$s%3$sthis);", bridge, use, comma); + } builder.append(String.format( " public %1$s(%3$s) {\n" + - "%6$s" + - " bridge = new %2$s(%4$s%5$sthis);\n" + - "%7$s" + + "%4$s" + + " %2$s;\n" + + " try { reflectionInit(); } catch (Exception e) { ReflectionHelper.handleException(e); }\n" + + "%5$s" + " }\n", - className, bridge, declare, use, comma, + wrapper, bridgeCreation, declare, preWrapper, postWrapper)); } } private static void generateHeader( - String className, XWalkAPI annotation, boolean isInterface, - StringBuilder builder, TargetType type) { - String bridge = className + BRIDGE_CLASS_SUFFIX; - String internal = className + INTERNAL_CLASS_SUFFIX; + Class clazz, StringBuilder builder, TargetType target) { + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + boolean isInterface = clazz.isInterface(); + String internal = clazz.getSimpleName(); + String bridge = internal.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + String wrapper = internal.replace(INTERNAL_CLASS_SUFFIX, ""); + if (createReflection) { + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + wrapper = "Object"; + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + bridge = "Object"; + } + } boolean isStatic = annotation.noInstance(); - if (type == TargetType.REFLECTION_LAYER_BRIDGE) { + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { if (isStatic) { /* public class clazzBridge extends clazzInternal { */ builder.append(String.format( - "public class %1$s extends %2$s {\n", - bridge, internal)); + "public class %1$s extends %2$s {\n" + + " private final static String WRAPPER_CLASS = \"%3$s\";\n", + bridge, internal, WRAPPER_PACKAGE + "." + wrapper)); } else { /* public class clazzBridge extends clazzInternal { @@ -316,34 +368,56 @@ clazz getWrapper() { */ builder.append(String.format( "public class %2$s extends %3$s {\n" + + " private final static String WRAPPER_CLASS = \"%4$s\";\n" + " private %1$s wrapper;\n" + " public %1$s getWrapper() {\n" + " return wrapper;\n" + " }\n", - className, bridge, internal)); + wrapper, bridge, internal, WRAPPER_PACKAGE + "." + wrapper)); if (annotation.createInternally()) { - /* + /* No reflection private clazzInternal internal = null; clazzBridge(clazzInternal internal) { this.internal = internal; this.wrapper = new clazz(this); } */ + /* With reflection + private clazzInternal internal = null; + clazzBridge(clazzInternal internal) { + this.internal = internal; + this.wrapper = (clazz)ReflectionHelper.createInstance(bridge, this); + } + */ + String wrapperCreation = ""; + if (createReflection) { + wrapperCreation = String.format( + "this.wrapper = ReflectionHelper.createInstance(\"%1$s\", this);", + generateConstructorName(clazz)); + } else { + wrapperCreation = String.format("this.wrapper = new %1$s(this);", wrapper); + } builder.append(String.format( " private %3$s internal = null;\n" + " %2$s(%3$s internal) {\n" + " this.internal = internal;\n" + - " this.wrapper = new %1$s(this);\n" + + " %1$s\n" + + " try { reflectionInit(); } catch (Exception e) { ReflectionHelper.handleException(e); }\n" + " }\n", - className, bridge, internal)); + wrapperCreation, bridge, internal)); } } - } else if (type == TargetType.REFLECTION_LAYER_WRAPPER) { + } else if (target == TargetType.REFLECTION_LAYER_WRAPPER) { if (isInterface) { /* public interface XWalkInterface { */ - builder.append(String.format("public interface %1$s {\n", className)); + builder.append(String.format("public interface %1$s {\n", wrapper)); + } else if (isStatic) { + /* + public class XWalkPreference { + */ + builder.append(String.format("public class %1$s {\n", wrapper)); } else { /* public class XWalkClient { @@ -368,17 +442,19 @@ public XWalkClientBridge getBridge() { } builder.append(String.format( "public class %1$s %3$s{\n" + + " private final static String BRIDGE_CLASS = \"%4$s\";\n" + " private %2$s bridge;\n" + " public %2$s getBridge() {\n" + " return bridge;\n" + " }\n", - className, bridge, extAndImpl)); + wrapper, bridge, extAndImpl, clazz.getPackage().getName() + "." + clazz.getSimpleName())); if (!annotation.createExternally()) { builder.append(String.format( " public %1$s(%2$s bridge) {\n" + " this.bridge = bridge;\n" + + " try { reflectionInit(); } catch (Exception e) { ReflectionHelper.handleException(e); }\n" + " }\n", - className, bridge, extAndImpl)); + wrapper, bridge, extAndImpl)); } } } @@ -387,6 +463,7 @@ public XWalkClientBridge getBridge() { private static void appendMethod( Method method, XWalkAPI annotation, boolean isInterface, StringBuilder builder, TargetType target) { String name = method.getName(); + String methodName = generateMethodName(method); Type retType = method.getGenericReturnType(); Class retClazz = method.getReturnType(); String modifierString = "public"; @@ -443,7 +520,14 @@ public static void work(int a) { String v = String.format("%1$s.%2$s(%3$s)", internalClass, name, paramsStringsWrapper[1]); retValue = transferValueExpress(retType, v, true, true, target); } else { - String v = String.format("wrapper.%1$s(%2$s)", name, paramsStringsWrapper[1]); + String v = ""; + if (createReflection) { + String params = paramsStringsWrapper[1]; + if (!params.isEmpty()) params = ", " + params; + v = String.format("ReflectionHelper.invokeMethod(%1$s, wrapper%2$s)", methodName, params); + } else { + v = String.format("wrapper.%1$s(%2$s)", name, paramsStringsWrapper[1]); + } retValue = transferValueExpress(retType, v, true, true, target); } // BridgeCall @@ -495,23 +579,43 @@ public void work(int a) { name, retTypeString, paramsStrings[0], modifierString )); } else { + String staticTerm = ""; + String bridgeClass = transferType(null, method.getDeclaringClass(), target); if (isStatic) { - String internalClass = method.getDeclaringClass().getSimpleName(); - String bridgeClass = internalClass.replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); - String v = String.format("%1$s.%2$s(%3$s)", bridgeClass, name, paramsStrings[1]); - retValue = transferValueExpress(retType, v, false, true, target); + if (createReflection) { + String paramTypes = generateParamTypesFromMethod(method, null, target); + staticTerm = String.format( + " Class clazz = ReflectionHelper.loadClass(\"%1$s\");\n" + + " Method method = ReflectionHelper.loadMethod(clazz, \"%2$s\"%3$s);\n", + generateFullClassName(method.getDeclaringClass(), target), + name, paramTypes); + String v = String.format( + "ReflectionHelper.invokeMethod(method, null, %1$s)", paramsStrings[1]); + retValue = transferValueExpress(retType, v, false, true, target); + } else { + String v = String.format("%1$s.%2$s(%3$s)", bridgeClass, name, paramsStrings[1]); + retValue = transferValueExpress(retType, v, false, true, target); + } } else { - String v = String.format("bridge.%1$sSuper(%2$s)", name, paramsStrings[1]); + String v = ""; + if (createReflection) { + String params = paramsStrings[1]; + if (!params.isEmpty()) params = ", " + params; + v = String.format("ReflectionHelper.invokeMethod(%1$s, bridge%2$s)", methodName, params); + } else { + v = String.format("bridge.%1$sSuper(%2$s)", name, paramsStrings[1]); + } retValue = transferValueExpress(retType, v, false, true, target); } builder.append(String.format( " %5$s %2$s %1$s(%4$s) {\n" + "%7$s" + + "%9$s" + " %3$s%6$s;\n" + "%8$s" + " }\n", name, retTypeString, returnTerm, paramsStrings[0], modifierString, retValue, - preWrapper, postWrapper + preWrapper, postWrapper, staticTerm )); } } @@ -559,6 +663,7 @@ private static String[] getMethodParamsStrings( * Transfer an internal type string into bridge/wrapper type. */ private static String transferType(String type, Class clazz, TargetType target) { + if (type == null) type = clazz.getSimpleName(); XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); if (annotation == null) return type; @@ -587,7 +692,16 @@ private static String transferValueExpress( Class clazz = extractClassFromType(valueType); XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); - if (annotation == null) return value; + if (annotation == null) { + if (value.startsWith("ReflectionHelper.invokeMethod")) { + String forceType = type; + if (clazz.isPrimitive()) { + forceType = primitiveToObject(clazz).getSimpleName(); + } + value = "(" + forceType + ")" + value; + } + return value; + } /* Handle Internal class */ @@ -614,7 +728,12 @@ private static String transferValueExpress( if (forReturnValue) { // The return of bridge's function is always bridge. // So here transfers bridge value to wrapper, add ".getWrapper()" - value = String.format("(%s).getWrapper()", value); + if (createReflection) { + value = String.format("(%1$s)ReflectionHelper.getBridgeOrWrapper(%2$s)", + instanceWrapperType, value); + } else { + value = String.format("(%s).getWrapper()", value); + } } else { // The input of wrapper's function is always wrapper. // So here transfers wrapper value to bridge value, add ".getBridge()" @@ -626,7 +745,12 @@ private static String transferValueExpress( if (forReturnValue) { // The return of wrapper's function is always wrapper. // So here transfers wrapper to bridge. - value = String.format("(%s).getBridge()", value); + if (createReflection) { + value = String.format("(%1$s)ReflectionHelper.getBridgeOrWrapper(%2$s)", + instanceBridgeType, value); + } else { + value = String.format("(%s).getBridge()", value); + } } else { // The input of bridge's function is always internal. // So here transfers internal to wrapper. @@ -705,7 +829,158 @@ private static Class extractClassFromType(Type t) throws ClassCastException { return (Class)((ParameterizedType)t).getRawType(); } - private static void generateFooter(String className, StringBuilder builder, TargetType type) { + private static void generateFooter(Class clazz, StringBuilder builder, TargetType target) { + StringBuilder initMethod = new StringBuilder(); + XWalkAPI annotation = clazz.getAnnotation(XWalkAPI.class); + if (!clazz.isInterface() && !annotation.noInstance()) { + initMethod.append( + " private void reflectionInit() throws" + + " NoSuchMethodException, ClassNotFoundException {\n"); + initMethod.append(String.format(" Class clazz = %s.getClass();\n", + target == TargetType.REFLECTION_LAYER_BRIDGE ? "wrapper" : "bridge")); + for (Method method : usedMethodSet) { + String name = generateMethodName(method); + initMethod.insert(0, " private Method " + name + ";\n"); + String paramTypes = generateParamTypesFromMethod(method, null, target); + String methodName = method.getName(); + if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + methodName += "Super"; + } + initMethod.append(String.format( + " %1$s = clazz.getMethod(\"%2$s\"%3$s);\n" + , name, methodName, paramTypes)); + } + initMethod.append(" }\n"); + } + builder.append(initMethod.toString()); + StringBuilder staticArea = new StringBuilder(); + staticArea.append(" static {\n"); + boolean hasStaticContent = false; + if (target == TargetType.REFLECTION_LAYER_WRAPPER) { + for (Constructor constructor : usedConstructorSet) { + String name = generateConstructorName(constructor); + String paramTypes = generateParamTypesFromMethod(null, constructor, target); + paramTypes += ", Object.class"; + String fullClassName = generateFullClassName(clazz, target); + staticArea.append(String.format( + " ReflectionHelper.registerConstructor(\"%1$s\", \"%2$s\"%3$s);\n", + name, fullClassName, paramTypes)); + hasStaticContent = true; + } + } else if (target == TargetType.REFLECTION_LAYER_BRIDGE && annotation.createInternally()) { + staticArea.append(String.format( + " ReflectionHelper.registerConstructor(\"%1$s\", \"%2$s\", Object.class);\n", + generateConstructorName(clazz), + generateFullClassName(clazz, target))); + hasStaticContent = true; + } + staticArea.append(" }\n"); + if (hasStaticContent) builder.append(staticArea.toString()); builder.append("}\n"); } + + private static String generateParamTypesFromMethod( + Method method, Constructor constructor, TargetType target) { + Class[] types; + boolean forConstructor = false; + if (method != null) { + types = method.getParameterTypes(); + } else if (constructor != null) { + types = constructor.getParameterTypes(); + forConstructor = true; + } else { + return ""; + } + String paramTypes = ""; + for (Class param : types) { + XWalkAPI paramAnnotation = param.getAnnotation(XWalkAPI.class); + if (paramAnnotation == null) { + paramTypes += ", " + param.getSimpleName() + ".class"; + } else { + String fullParamClassName = generateFullClassName(param, target); + // For constructor, the clazz object doesn't exist yet. Register to ReflectionHelper + // with full class name. ReflectionHelper will get the class object when do real + // initialization. + if (forConstructor) { + paramTypes += ", \"" + fullParamClassName + "\""; + } else { + paramTypes += + ", clazz.getClassLoader().loadClass(\"" + + fullParamClassName + + "\")"; + } + } + } + return paramTypes; + } + + private static String generateFullClassName(Class clazz, TargetType target) { + if (!clazz.isAnnotationPresent(XWalkAPI.class)) { + return clazz.getPackage().getName() + "." + clazz.getSimpleName(); + } + if (target == TargetType.REFLECTION_LAYER_BRIDGE) { + return WRAPPER_PACKAGE + "." + clazz.getSimpleName().replace(INTERNAL_CLASS_SUFFIX, ""); + } else { + return clazz.getName().replace(INTERNAL_CLASS_SUFFIX, BRIDGE_CLASS_SUFFIX); + } + } + + private static String generateMethodName(Method method) { + String name = method.getName(); + for (Class param : method.getParameterTypes()) { + String paramName = param.getSimpleName(); + name += paramName.substring(0, 1).toUpperCase(); + if (paramName.length() > 1) name += paramName.substring(1).toLowerCase(); + } + name += "Method"; + return name; + } + + private static String generateConstructorName(Constructor constructor) { + String name = constructor.getDeclaringClass().getSimpleName().toLowerCase(); + for (Class param : constructor.getParameterTypes()) { + String paramName = param.getSimpleName(); + name += paramName.substring(0, 1).toUpperCase(); + if (paramName.length() > 1) name += paramName.substring(1); + } + name += "Constructor"; + return name; + } + + private static String generateConstructorName(Class clazz) { + // This is only used by bridge, bridge will create wrapper instance if it's created internally. + // In such case, bridge will need to have the constructor of wrapper. + String name = transferType( + null, clazz, TargetType.REFLECTION_LAYER_BRIDGE).toLowerCase(); + name += "Constructor"; + return name; + } + + private static Class primitiveToObject(Class primitive) { + if (primitive == boolean.class) { + return Boolean.class; + } + if (primitive == byte.class) { + return Byte.class; + } + if (primitive == char.class) { + return Character.class; + } + if (primitive == short.class) { + return Short.class; + } + if (primitive == int.class) { + return Integer.class; + } + if (primitive == long.class) { + return Long.class; + } + if (primitive == float.class) { + return Float.class; + } + if (primitive == double.class) { + return Double.class; + } + return Void.class; + } } diff --git a/xwalk_android.gypi b/xwalk_android.gypi index 08c4d552d2..aef8c4528a 100644 --- a/xwalk_android.gypi +++ b/xwalk_android.gypi @@ -101,6 +101,7 @@ '--source=runtime/android/core_internal/src', '--output=<(reflection_java_dir)', '--stamp=<(timestamp)', + '--helper-class=runtime/android/core_internal/src/org/xwalk/core/internal/ReflectionHelper.java', ], }, ], From 5cd18b2a4eff463499a8af92ca9f477c3358c800 Mon Sep 17 00:00:00 2001 From: Shouqun Liu Date: Fri, 30 May 2014 03:30:20 +0800 Subject: [PATCH 12/12] Add python script for generating brige and wrapper code. For share mode in core, use python script to generate bridge and wrapper code. BUG= --- .../reflection_generator.py | 1289 +++++++++++++++++ 1 file changed, 1289 insertions(+) create mode 100755 tools/reflection_generator/reflection_generator.py diff --git a/tools/reflection_generator/reflection_generator.py b/tools/reflection_generator/reflection_generator.py new file mode 100755 index 0000000000..41a34de8bd --- /dev/null +++ b/tools/reflection_generator/reflection_generator.py @@ -0,0 +1,1289 @@ +#!/usr/bin/env python + +# Copyright (c) 2014 Intel Corporation. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import optparse +import os +import re +import sys + +from collections import OrderedDict +from string import Template + +# Classes list that have to generate bridge and wrap code. +CLASSES_TO_BE_PROCESS = [ + 'XWalkViewInternal', + 'XWalkUIClientInternal', + 'XWalkResourceClientInternal', + 'XWalkPreferencesInternal', + 'XWalkNavigationItemInternal', + 'XWalkNavigationHistoryInternal', + 'XWalkJavascriptResultHandlerInternal', + 'XWalkJavascriptResultInternal', +] + + +def ManagleInternalNameToBridgeName(internal_name): + if internal_name not in CLASSES_TO_BE_PROCESS: + return internal_name + else: + return internal_name.replace('Internal', 'Bridge') + + +def MangleInternalNameToWrapperName(internal_name): + if internal_name not in CLASSES_TO_BE_PROCESS: + return internal_name + else: + return internal_name.replace('Internal', '') + +def ManagleInternalNameToFullBridgeName(internal_name): + if internal_name not in CLASSES_TO_BE_PROCESS: + return internal_name + else: + package_string = 'org.xwalk.core.internal.%s' + return package_string % (internal_name.replace('Internal', 'Bridge')) + + +def ManagleInternalNameToFullWrapperName(internal_name): + if internal_name not in CLASSES_TO_BE_PROCESS: + return internal_name + else: + return "org.xwalk.core.%s" % (internal_name.replace('Internal', '')) + + +class Method: + """Internal representaion of a method.""" + ANNOTATION_PRE_WRAPLINE = 'preWrapperLines' + ANNOTATION_POST_WRAPLINE = 'postWrapLines' + + def __init__(self, is_constructor, is_static, method_name, method_return, + params, annotation): + self._is_constructor = is_constructor + self._is_static = is_static + self._method_name = method_name + self._method_return = method_return + self._params = OrderedDict() # Use OrderedDict to avoid parameter misorder. + self._method_annotations = {} + self.ParseMethodParams(params) + self.ParseMethodAnnotation(annotation) + + @property + def is_constructor(self): + return self._is_constructor + + @property + def is_static(self): + return self._is_static + + @property + def method_name(self): + return self._method_name + + @property + def method_return(self): + return self._method_return + + @property + def params(self): + return self._params + + @property + def method_annotations(self): + return self._method_annotations + + def ParseMethodParams(self, params): + # TODO(shouqun): Currently, generic parameters are not supported. + # The support of generic types should be added if such cases happen. + if not params or params == '': + return + for param in params.split(','): + param = param.strip() + param_list = param.split() + param_type = param_list[0] + param_name = param_list[1] + self._params[param_name] = param_type + + def ParseMethodAnnotation(self, annotation): + pre_wrapline_re = re.compile('preWrapperLines\s*=\s*\{' + '(?P[a-zA-Z0-9%,\s\(\);._"=]*)\}') + for match in re.finditer(pre_wrapline_re, annotation): + pre_wrapline = match.group('pre_wrapline') + self._method_annotations[self.ANNOTATION_PRE_WRAPLINE] = pre_wrapline + + post_wrapline_re = re.compile('postWrapperLines\s*=\s*\{(' + '?P[a-zA-Z0-9%,\s\(\);._"=]*)\}') + for match in re.finditer(post_wrapline_re, annotation): + post_wrapline = match.group('post_wrapline') + self._method_annotations[self.ANNOTATION_POST_WRAPLINE] = post_wrapline + + +class Field: + """Python class represents static field of a java class""" + def __init__(self, field_type, name, value): + self._field_type = field_type + self._field_name = name + self._field_value = value + + @property + def field_type(self): + return self._field_type + + @property + def field_name(self): + return self._field_name + + @property + def field_value(self): + return self._field_value + + +class CodeGenerator(object): + """Basic class of code generator""" + def __init__(self, java_data): + self._java_data = java_data + self._generated_code = '' + self._generated_class_name = '' + + def RunTask(self): + pass + + def GetGeneratedCode(self): + return self._generated_code + + def GetGeneratedClassFileName(self): + return self._generated_class_name + '.java' + + def GenerateImportRules(self): + imports = '' + for imported in self._java_data.imports: + import_string = 'import ' + imported + ";\n" + imports += import_string + # Add the reflection helper import. + imports += '\n' + imports += 'import java.lang.reflect.Constructor;\n' + imports += 'import java.lang.reflect.Method;\n' + return imports + + def FormatStaticInitializerConstructorName(self, method): + constructor = method.method_name + for param_name in method.params: + constructor += method.params[param_name] + constructor += 'Constructor' + return constructor + + +class InterfaceGenerator(CodeGenerator): + """Generator class that generates interfade code in wrapper layer""" + def __init__(self, java_data): + super(InterfaceGenerator, self).__init__(java_data) + + def RunTask(self): + self._generated_code = self.GenerateInterface() + self._generated_class_name = MangleInternalNameToWrapperName( + self._java_data.class_name) + + def GenerateInterface(self): + interface_template = Template(""" +${PACKAGE_SECTION} + +${IMPORT_SECTION} +public interface ${INTERFACE_NAME} { +${METHOD_SECTION} +} +""") + package_section = 'package %s;' % \ + (self._java_data.package_name.replace('.internal', '')) + import_section = self.GenerateImportRules() + method_section = self.GenerateMethods() + interface_name = MangleInternalNameToWrapperName(self._java_data.class_name) + value = {'PACKAGE_SECTION': package_section, + 'IMPORT_SECTION': import_section, + 'INTERFACE_NAME': interface_name, + 'METHOD_SECTION': method_section} + interface_code = interface_template.substitute(value) + return interface_code + + def FormatMethodParams(self, params): + params_string = '' + for param_name in params: + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + param_type = MangleInternalNameToWrapperName(param_type) + params_string += '%s %s,' % (param_type, param_name) + if params_string.endswith(','): + params_string = params_string[0:-1] + return params_string + + def FormatMethodString(self, method): + method_template = Template("""\ + public ${RETURN} ${NAME}(${PARAMS}); +""") + method_return = method.method_return + if method.method_return in CLASSES_TO_BE_PROCESS: + method_return = MangleInternalNameToWrapperName(method_return) + value = {'RETURN': method_return, + 'NAME': method.method_name, + 'PARAMS': self.FormatMethodParams(method.params)} + return method_template.substitute(value) + + def GenerateMethods(self): + methods_string = '' + for method in self._java_data.methods: + methods_string += self.FormatMethodString(method) + return methods_string + + +class BrigdeGenerator(CodeGenerator): + """ Generator class that generates bridge layer code.""" + def __init__(self, java_data): + super(BrigdeGenerator, self).__init__(java_data) + + def RunTask(self): + self._generated_code = self.GenerateBrigdeClass() + self._generated_class_name = ManagleInternalNameToBridgeName( + self._java_data.class_name) + + def GenerateBrigdeClass(self): + bridge_class_template = Template("""\ +${PACKAGE_SECTION} + +${IMPORT_SECTION} +public class ${CLASS_NAME} extends ${PARENT_CLASS} { + private final static String WRAPPER_CLASS = "org.xwalk.core.Object"; + private Object wrapper; + + public Object getWrapper() { + return wrapper; + } +${CREATE_INTERNALLY_CONSTRUCTOR} +${STATIC_METHOD_SECTION} +${METHODS_SECTION} + +${REFLECTION_INIT_SECTION} +${STATIC_INITIALIZER} +} +""") + package_name = '' + if self._java_data.package_name != '': + package_name = 'package ' + self._java_data.package_name + ";" + imports_string = self.GenerateImportRules() + internal_class_name = self._java_data.class_name + bridge_class_name = ManagleInternalNameToBridgeName(internal_class_name) + create_internally_constructor = self.GenerateCreateInternallyConstructor() + static_methods = self.GenerateStaticMethods() + bridge_methods = self.GenerateBridgeMethods() + reflection_init = self.GenerateReflectionInitString() + static_initializer = self.GenerateStaticInitializerString() + value = {'PACKAGE_SECTION': package_name, + 'IMPORT_SECTION': imports_string, + 'CLASS_NAME': bridge_class_name, + 'PARENT_CLASS': internal_class_name, + 'STATIC_METHOD_SECTION': static_methods, + 'METHODS_SECTION': bridge_methods, + 'REFLECTION_INIT_SECTION': reflection_init, + 'CREATE_INTERNALLY_CONSTRUCTOR': create_internally_constructor, + 'STATIC_INITIALIZER': static_initializer} + class_content = bridge_class_template.substitute(value) + return class_content + + def GenerateCreateInternallyConstructor(self): + if not self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_INTERNALLY): + return '' + constructor_template = Template("""\ + private ${INTERNAL_CLASS_NAME} internal = null; + ${BRIDGE_CLASS_NAME}(${INTERNAL_CLASS_NAME} internal) { + this.internal = internal; + this.wrapper = ReflectionHelper.createInstance(\ +"${STATIC_CONSTRUCTOR_NAME}", this); + try { + reflectionInit(); + } catch (Exception e) { + ReflectionHelper.handleException(e); + } + } +""") + internal_class_name = self._java_data.class_name + bridge_class_name = ManagleInternalNameToBridgeName(internal_class_name) + constructor_method = Method(True, False, bridge_class_name, '', '', '') + static_constructor_name = \ + self.FormatStaticInitializerConstructorName(constructor_method) + value = {'INTERNAL_CLASS_NAME': internal_class_name, + 'BRIDGE_CLASS_NAME': bridge_class_name, + 'STATIC_CONSTRUCTOR_NAME': static_constructor_name} + return constructor_template.substitute(value) + + + def FormatStaticMethodString(self, class_name, method): + method_template = Template("""\ + public static ${RETURN} ${NAME}($PARAMS) { + ${RETURN_STATE}${CLASS_NAME}.${NAME}(${CALL_PARAMS}); + } +""") + return_string = method.method_return + name = method.method_name + params = self.FormatMethodParamsString(method.params) + return_state = '' + if return_string != 'void': + return_state = 'return ' + call_params = self.FormatMethodCallParamsString(method.params)[1] + value = {'RETURN': return_string, + 'NAME': name, + 'PARAMS': params, + 'RETURN_STATE': return_state, + 'CLASS_NAME': class_name, + 'CALL_PARAMS': call_params} + return method_template.substitute(value) + + def GenerateStaticMethods(self): + static_methods = '' + for method in self._java_data.methods: + static_methods += self.FormatStaticMethodString( + self._java_data.class_name, method) + return static_methods + + def GenerateBridgeMethods(self): + methods_string = '' + for method in self._java_data.methods: + if method.is_constructor: + methods_string += self.GenerateBridgeConstructorString(method) + elif not method.is_static: + methods_string += self.GenerateBridgeMethodString(method) + method_field_template = Template("""\ + private Method ${METHOD}Method; +""") + for method in self._java_data.methods: + if not method.is_constructor and not method.is_static: + value = {'METHOD': method.method_name} + methods_string += method_field_template.substitute(value) + return methods_string + + def FormatMethodParamsString(self, params): + param_string = '' + for param_name in params: + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + # Mangle class name if the param type is in internal class list. + param_type = ManagleInternalNameToBridgeName(param_type) + param_string += '%s %s' % (param_type, param_name) + param_string += ',' + # Trim the last comma for the method parameter list. + if param_string.endswith(','): + param_string = param_string[0:-1] + return param_string + + def FormatMethodCallParamsString(self, params): + param_string = '' + for param_name in params: + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + # Mangle parameter string if it is in internal class list. + param_type = ManagleInternalNameToBridgeName(param_type) + param_name = '((%s) a).getWrapper()' % (param_type) + param_string += ', ' + param_string += param_name + super_param_string = param_string + # Trim the first comma. + if super_param_string.startswith(','): + super_param_string = super_param_string[1:] + return [param_string, super_param_string] + + def FormatConstructorParamsString(self, params): + param_string = '' + for param_name in params: + param_type = params[param_name] + param_string += '%s %s' % (param_type, param_name) + param_string += ',' + return param_string + + def FormatConstructorCallParamsString(self, params): + param_string = '' + for param_name in params: + param_string += param_name + param_string += ',' + if param_string.endswith(','): + param_string = param_string[0:-1] + return param_string + + def GenerateBridgeConstructorString(self, method): + constructor_template = Template("""\ + public ${NAME}(${PARAMS} Object wrapper) { + super(${CALL_PARAMS}); + this.wrapper = wrapper; + try { + reflectionInit(); + } catch (Exception e) { + ReflectionHelper.handleException(e); + } + } +""") + params = self.FormatConstructorParamsString(method.params) + call_params = self.FormatConstructorCallParamsString(method.params) + value = {'NAME': method.method_name, + 'PARAMS': params, + 'CALL_PARAMS': call_params} + return constructor_template.substitute(value) + + def FormatMethodReturnStatement(self, method): + if method.method_return == 'void': + return '' + else: + return 'return (%s)' % (method.method_return) + + def FormatSuperMethodReturnStatemt(self, method): + if method.method_return == 'void': + return '' + else: + return 'return ' + + def FormatPreCreateInternallyReturn(self): + return 'if (internal == null) {' + + def FormatPostCreateInternallyReturn(self, method, call_params): + return_template = Template("""\ +} else { + internal.${METHOD_NAME}(${SUPER_CALL_PARAMS}); + } +""") + method_name = method.method_name + value = {'METHOD_NAME': method_name, + 'SUPER_CALL_PARAMS': call_params} + return return_template.substitute(value) + + def GenerateBridgeMethodString(self, method): + method_template = Template("""\ + public ${RETURN} ${NAME}(${PARAMS}) { + ${RETURN_STATEMENT}ReflectionHelper.invokeMethod(${NAME}Method, \ +wrapper${CALL_PARAMS}); + } + + public ${RETURN} ${NAME}Super(${PARAMS}) { + ${PRE_CREATE_INTERNALLY_RETURN} + ${SUPER_RETURN_STATEMENT}super.${NAME}(${SUPER_CALL_PARAMS}); + ${POST_CREATE_INTERNALLY_RETURN} + } + +""") + param_string = self.FormatMethodParamsString(method.params) + call_param_strings = self.FormatMethodCallParamsString(method.params) + return_statement = self.FormatMethodReturnStatement(method) + super_return_statement = self.FormatSuperMethodReturnStatemt(method) + pre_create_internally_return = self.FormatPreCreateInternallyReturn() + post_create_internally_return = \ + self.FormatPostCreateInternallyReturn(method, call_param_strings[1]) + values = {'RETURN': method.method_return, + 'NAME': method.method_name, + 'PARAMS': param_string, + 'RETURN_STATEMENT': return_statement, + 'SUPER_RETURN_STATEMENT': super_return_statement, + 'CALL_PARAMS': call_param_strings[0], + 'SUPER_CALL_PARAMS': call_param_strings[1], + 'PRE_CREATE_INTERNALLY_RETURN': pre_create_internally_return, + 'POST_CREATE_INTERNALLY_RETURN': post_create_internally_return} + return method_template.substitute(values) + + def FormatReflectionParamString(self, params): + params_string = '' + for param_name in params: + params_string += ', ' + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + mangle = ManagleInternalNameToFullWrapperName(param_type) + param_type = 'clazz.getClassLoader().loadClass(\"%s\")' % (mangle) + params_string += param_type + else: + params_string += "%s.class" % (params[param_name]) + return params_string + + def GenerateReflectionInitString(self): + ref_methods_string = '' + ref_method_template = Template("""\ + ${METHOD}Method = clazz.getMethod(\"${METHOD}\"${PARAMS}); +""") + for method in self._java_data.methods: + if method.is_constructor or method.is_static: + continue + params_string = self.FormatReflectionParamString(method.params) + value = { 'METHOD': method.method_name, + 'PARAMS': params_string} + ref_methods_string += ref_method_template.substitute(value) + + ref_init_template = Template("""\ + private void reflectionInit() throws NoSuchMethodException, + ClassNotFoundException { + Class clazz = wrapper.getClass(); +${REF_METHODS} + } +""") + value = {'REF_METHODS': ref_methods_string} + ref_init_string = ref_init_template.substitute(value) + return ref_init_string + + def GenerateStaticInitializerString(self): + if not self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_INTERNALLY): + return '' + static_initializer_template = Template("""\ + static { + ReflectionHelper.registerConstructor("${STATIC_CONSTRUCTOR_NAME}", \ +"${FULL_CLASS_NAME}", Object.class); + } +""") + bridge_class_name = \ + ManagleInternalNameToBridgeName(self._java_data.class_name) + constructor_method = Method(True, False, bridge_class_name, '', '', '') + static_constructor_name = \ + self.FormatStaticInitializerConstructorName(constructor_method) + full_class_name = \ + ManagleInternalNameToFullWrapperName(self._java_data.class_name) + value = {'STATIC_CONSTRUCTOR_NAME': static_constructor_name, + 'FULL_CLASS_NAME': full_class_name} + return static_initializer_template.substitute(value) + + +class WrapperGenerator(CodeGenerator): + """ Generator class thar generates wrapper layer code.""" + def __init__(self, java_data): + super(WrapperGenerator, self).__init__(java_data) + + def RunTask(self): + self._generated_code = self.GenerateWrapperClass() + self._generated_class_name = MangleInternalNameToWrapperName( + self._java_data.class_name) + + def GenerateWrapperClass(self): + wrapper_template = Template("""\ +${PACKAGE_SECTION} + +${IMPORT_SECTION} + +public class ${CLASS_NAME} ${CLASS_EXTENDS} ${CLASS_IMPLEMENTS}{ + +${FIELD_SECTION} + + private final static String BRIDGE_CLASS = "${BRIDGE_CLASS_FULL_NAME}"; + private Object bridge; + + public Object getBridge() { + return bridge; + } +${CREATE_INTERNALLY_CONSTRUCORS} +${CONSTRUCTORS_SECTION} +${STATIC_METHOD_SECTION} +${METHODS_SECTION} + +${REFLECTION_SECTION} + +${STATIC_INITIALIZER} +} +""") + package_string = self.GeneratePackageString() + imports = self.GenerateImportRules() + class_name = self.GenerateWrapperClassName() + class_extends = self.GenerateClassExtends() + class_implements = self.GenerateClassImplements() + fields = self.GenerateClassFields() + bridge_full_class_name = self._java_data.package_name + \ + '.' + self._java_data.class_name + create_internally_constructor = self.GenerateCreateInternallyConstructor() + constructors = self.GenerateConstructors() + methods = self.GenerateMethods() + static_methods = self.GenerateStaticMethods() + reflections = self.GenerateReflectionInitString() + static_initializer = self.GenerateStaticInitializerString() + if self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_NO_INSTANCE): + create_internally_constructor = '' + constructors = '' + static_initializer = '' + reflections = '' + value = {'PACKAGE_SECTION': package_string, + 'IMPORT_SECTION': imports, + 'CLASS_NAME': class_name, + 'CLASS_EXTENDS': class_extends, + 'CLASS_IMPLEMENTS': class_implements, + 'FIELD_SECTION': fields, + 'BRIDGE_CLASS_FULL_NAME': bridge_full_class_name, + 'CREATE_INTERNALLY_CONSTRUCORS': create_internally_constructor, + 'CONSTRUCTORS_SECTION': constructors, + 'STATIC_METHOD_SECTION': static_methods, + 'METHODS_SECTION': methods, + 'REFLECTION_SECTION': reflections, + 'STATIC_INITIALIZER': static_initializer} + return wrapper_template.substitute(value) + + def GeneratePackageString(self): + # Remove the 'internal' folder from internal package. + package_name = self._java_data.package_name.replace('.internal', '') + return 'package %s;' % (package_name) + + def GenerateWrapperClassName(self): + internal_class_name = self._java_data.class_name + return internal_class_name.replace('Internal', '') + + def GenerateClassExtends(self): + annotations = self._java_data.class_annotations + if annotations.has_key(InternalJavaFileData.ANNOTATION_EXTEND_CLASS): + to_extend = annotations[InternalJavaFileData.ANNOTATION_EXTEND_CLASS] + return ' extends %s ' % (to_extend.replace('.class', '')) + return '' + + def GenerateClassImplements(self): + annotations = self._java_data.class_annotations + if annotations.has_key(InternalJavaFileData.ANNOTATION_IMPL): + to_implement = annotations[InternalJavaFileData.ANNOTATION_IMPL] + impl_interface = to_implement.replace('.class', '') + if impl_interface in CLASSES_TO_BE_PROCESS: + impl_interface = MangleInternalNameToWrapperName(impl_interface) + return ' implements %s ' % (impl_interface) + return '' + + def GenerateClassFields(self): + fields_string = '' + field_template = Template("""\ + public final static ${TYPE} ${NAME} = ${VALUE}; +""") + for field in self._java_data.fields: + value = {'TYPE': field.field_type, + 'NAME': field.field_name, + 'VALUE': field.field_value} + fields_string += field_template.substitute(value) + return fields_string + + def FormatConstructorParamsString(self, method): + params_string = '' + for param_name in method.params: + param_type = method.params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + param_type = MangleInternalNameToWrapperName(param_type) + params_string += '%s %s' % (param_type, param_name) + params_string += ',' + if params_string.endswith(','): + params_string = params_string[0:-1] + # For internally created class, additional bridge parameter is needed. + if self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_INTERNALLY): + if len(params_string) > 0: + params_string += ',' + params_string += 'Object bridge' + return params_string + + def FormatInstanceParams(self, method): + params_string = '' + for param_name in method.params: + param_type = method.params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + params_string += ',' + params_string += '(%s).getBridge()' % (param_name) + else: + params_string += ',' + param_name + return params_string + + def FormatCreateInstanceString(self, method): + if self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_EXTERNALLY): + create_instance_template = Template("""\ +bridge = ReflectionHelper.createInstance("${STATIC_CONSTRUCTOR_NAME}" \ +${INSTANCE_PARAMS},this) +""") + static_constructor_name = \ + self.FormatStaticInitializerConstructorName(method) + instance_params = self.FormatInstanceParams(method) + value = {'STATIC_CONSTRUCTOR_NAME': static_constructor_name, + 'INSTANCE_PARAMS': instance_params} + return create_instance_template.substitute(value) + return '' + + def UnStringifyWrapLines(self, wraplines): + # Un-stringify the wrap lines, convert it from string to statement. + result_lines = '' + lines = wraplines.split('\n') + for line in lines: + line = line.strip() + if line.endswith(','): + line = line[0:-1] + if not line.startswith('"') and not line.endswith('"'): + # TODO: Should be an Error here. + continue + line = line[1:-1] + result_lines += line + '\n' + return result_lines + + def ExpandStatementArguments(self, lines, method): + # Expand arguments, we assume there are at most 10 arguments. + # For example if the '%1' and '%2' in 'super(%1, %2);' should be + # substitute by the actual parameter. + for arg in range(1, 9): + arg_string = "%%%d" % (arg) + if arg_string in lines and arg <= len(method.params.keys()): + lines = lines.replace(arg_string, method.params.keys()[arg-1]) + return lines + + def FormatPreWrapLinesString(self, method): + annotations = method.method_annotations + if not annotations.has_key(Method.ANNOTATION_PRE_WRAPLINE): + return '' + pre_wrapline = annotations[Method.ANNOTATION_PRE_WRAPLINE] + lines = self.UnStringifyWrapLines(pre_wrapline) + # Expand the code statement by replacing arguments by parameter. + lines = self.ExpandStatementArguments(lines, method) + return lines + + def FormatPostWrapLinesString(self, method): + annotations = method.method_annotations + if not annotations.has_key(Method.ANNOTATION_POST_WRAPLINE): + return '' + post_wrapline = annotations[Method.ANNOTATION_POST_WRAPLINE] + lines = self.UnStringifyWrapLines(post_wrapline) + # Expand the code statement. + lines = self.ExpandStatementArguments(lines, method) + return lines + + def GenerateConstructors(self): + constructor_template = Template("""\ + public ${CLASS_NAME}($CONSTRUCTOR_PARAMS) { + ${PRE_WRAP_LINES} + + ${CREATE_INSTANCE_STATEMENT} + try { + reflectionInit(); + } catch(Exception e) { + ReflectionHelper.handleException(e); + } + + ${POST_WRAP_LINES} + } +""") + constructors_string = '' + for method in self._java_data.methods: + if not method.is_constructor: + continue + constructor = '' + class_name = self.GenerateWrapperClassName() + constructor_params = self.FormatConstructorParamsString(method) + create_instance = self.FormatCreateInstanceString(method) + pre_wrap_line = self.FormatPreWrapLinesString(method) + post_wrap_line = self.FormatPostWrapLinesString(method) + value = {'CLASS_NAME': class_name, + 'CONSTRUCTOR_PARAMS': constructor_params, + 'CREATE_INSTANCE_STATEMENT': create_instance, + 'PRE_WRAP_LINES': pre_wrap_line, + 'POST_WRAP_LINES': post_wrap_line } + constructor = constructor_template.substitute(value) + constructors_string += constructor + return constructors_string + + def GenerateCreateInternallyConstructor(self): + if not self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_INTERNALLY): + return '' + constructor_template = Template("""\ + public ${CLASS_NAME}(Object bridge) { + this.bridge = bridge; + try { + reflectionInit(); + } catch (Exception e) { + ReflectionHelper.handleException(e); + } + } """) + class_name = MangleInternalNameToWrapperName(self._java_data.class_name) + return constructor_template.substitute({'CLASS_NAME': class_name}) + + def FormatMethodParamsString(self, params): + param_string = '' + for param_name in params: + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + # Mangle class name if the param type is in internal class list. + param_type = MangleInternalNameToWrapperName(param_type) + param_string += '%s %s' % (param_type, param_name) + param_string += ',' + # Trim the last comma for the method parameter list. + if param_string.endswith(','): + param_string = param_string[0:-1] + return param_string + + def FormatMethodCallParamsString(self, params): + param_string = '' + for param_name in params: + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + # Mangle parameter string if it is in internal class list. + param_name = '(%s).getBridge()' % (param_name) + param_string += ', ' + param_string += param_name + return param_string + + def FormatRefectionMethodName(self, method): + # FIXME: Update the reflection method name with param types. + return '%sMethod' % (method.method_name) + + def FormatReturnStatement(self, method): + reflection_method = self.FormatRefectionMethodName(method) + call_params = self.FormatMethodCallParamsString(method.params) + return_string = '' + if method.method_return in CLASSES_TO_BE_PROCESS: + return_template = Template("""\ +${RETURN_STRING}ReflectionHelper.getBridgeOrWrapper(\ +ReflectionHelper.invokeMethod(${REFLECTION}, bridge ${CALL_PARAMS}))""") + return_string = MangleInternalNameToWrapperName(method.method_return) + else: + return_template = Template("""\ +${RETURN_STRING}ReflectionHelper.invokeMethod(${REFLECTION},\ + bridge ${CALL_PARAMS})""") + if method.method_return == 'void': + return_string = '' + else: + return_string = 'return (%s)' % (method.method_return) + value = {'RETURN_STRING': return_string, + 'REFLECTION': reflection_method, + 'CALL_PARAMS': call_params} + return return_template.substitute(value) + + def FormatMethodString(self, method): + method_string = '' + method_template = Template("""\ + public ${RETURN} ${METHOD_NAME}(${METHOD_PARAMS}) { + ${RETURN_STATEMENT}; + } + +""") + method_return = method.method_return + if method_return in CLASSES_TO_BE_PROCESS: + method_return = MangleInternalNameToWrapperName(method_return) + method_name = method.method_name + method_params = self.FormatMethodParamsString(method.params) + return_statement = self.FormatReturnStatement(method) + value = {'RETURN': method_return, + 'METHOD_NAME': method_name, + 'METHOD_PARAMS': method_params, + 'RETURN_STATEMENT': return_statement} + method_string = method_template.substitute(value) + return method_string + + def GenerateMethods(self): + methods_string = '' + # Generate method definitions. + for method in self._java_data.methods: + if method.is_constructor or method.is_static: + continue + method_content = self.FormatMethodString(method) + methods_string += method_content + # Generate Method field lists. + method_field_template = Template("""\ + private Method ${METHOD}Method; +""") + for method in self._java_data.methods: + if not method.is_constructor and not method.is_static: + value = {'METHOD': method.method_name} + methods_string += method_field_template.substitute(value) + return methods_string + + def FormatStaticMethodCallParamsType(self, params): + params_string = '' + for param_name in params: + params_string += ',' + params_string += '%s.class' % (params[param_name]) + return params_string + + def FormatStaticMethodCallParams(self, params): + param_string = '' + for param_name in params: + param_string += ',' + param_string += param_name + return param_string + + def FormatStaticMethodTemplate(self, class_name, method): + method_template = Template("""\ + public static ${RETURN} ${NAME}(${PARAMS}) { + Class clazz = ReflectionHelper.loadClass(\"${FULL_CLASS_NAME}\"); + Method method = ReflectionHelper.loadMethod(clazz, \"${NAME}\"\ +${CALL_PARAMS_TYPE}); + ${RETURN_STATE}ReflectionHelper.invokeMethod(method${CALL_PARAMS}); + } +""") + return_string = method.method_return + name = method.method_name + full_class_name = ManagleInternalNameToFullBridgeName(class_name) + call_params_type = self.FormatStaticMethodCallParamsType(method.params) + call_params = self.FormatStaticMethodCallParams(method.params) + params = self.FormatMethodParamsString(method.params) + return_state = '' + if method.method_return != 'void': + return_state = 'return (%s)' % (method.method_return) + value = {'RETURN': return_string, + 'NAME': name, + 'FULL_CLASS_NAME': full_class_name, + 'CALL_PARAMS_TYPE': call_params_type, + 'CALL_PARAMS': call_params, + 'PARAMS': params, + 'RETURN_STATE': return_state} + return method_template.substitute(value) + + def GenerateStaticMethods(self): + methods_string = '' + for method in self._java_data.methods: + if method.is_static: + methods_string += self.FormatStaticMethodTemplate( + self._java_data.class_name, method) + return methods_string + + def FormatReflectionParamString(self, params): + params_string = '' + for param_name in params: + params_string += ', ' + param_type = params[param_name] + if param_type in CLASSES_TO_BE_PROCESS: + mangle = ManagleInternalNameToFullBridgeName(param_type) + param_type = 'clazz.getClassLoader().loadClass(\"%s\")' % (mangle) + params_string += param_type + else: + params_string += "%s.class" % (params[param_name]) + return params_string + + def GenerateReflectionInitString(self): + ref_methods_string = '' + ref_method_template = Template("""\ + ${METHOD}Method = clazz.getMethod(\"${METHOD}Super\"${PARAMS}); +""") + for method in self._java_data.methods: + if method.is_constructor or method.is_static: + continue + params_string = self.FormatReflectionParamString(method.params) + value = { 'METHOD': method.method_name, + 'PARAMS': params_string} + ref_methods_string += ref_method_template.substitute(value) + + ref_init_template = Template("""\ + private void reflectionInit() throws NoSuchMethodException, + ClassNotFoundException { + Class clazz = wrapper.getClass(); +${REF_METHODS} + } +""") + value = {'REF_METHODS': ref_methods_string} + ref_init_string = ref_init_template.substitute(value) + return ref_init_string + + def FormatStaticInitializerParamsList(self, method): + params_string = '' + for param_name in method.params: + params_string += method.params[param_name] + '.class' + params_string += ',' + return params_string + + def FormatStaticInitializer(self, method): + static_initializer_template = Template("""\ + ReflectionHelper.registerConstructor(\"${CONSTRUCTOR_NAME}\", \ +\"${FULL_CLASS_NAME}\", ${PARAM_LIST} Object.class}; +""") + constructor_name = self.FormatStaticInitializerConstructorName(method) + full_class_name = ManagleInternalNameToFullBridgeName( + self._java_data.class_name) + params_list = self.FormatStaticInitializerParamsList(method) + value = {"CONSTRUCTOR_NAME": constructor_name, + "FULL_CLASS_NAME": full_class_name, + "PARAM_LIST": params_list} + return static_initializer_template.substitute(value) + + def GenerateStaticInitializerString(self): + if not self._java_data.class_annotations.has_key( + InternalJavaFileData.ANNOTATION_CREATE_EXTERNALLY): + return '' + static_initializer_template = Template("""\ + static { +${STATIC_INITIALIZER_LIST} + } +""") + static_initializer_list = '' + for method in self._java_data.methods: + if method.is_constructor: + static_initializer_list += self.FormatStaticInitializer(method) + value = {'STATIC_INITIALIZER_LIST': static_initializer_list} + return static_initializer_template.substitute(value) + + +class InternalJavaFileData(object): + """Data class stores the generator information of internal class.""" + ANNOTATION_CREATE_INTERNALLY = 'createInternally' + ANNOTATION_CREATE_EXTERNALLY = 'createExternally' + ANNOTATION_EXTEND_CLASS = 'extendClass' + ANNOTATION_NO_INSTANCE = 'noInstance' + ANNOTATION_INSTANCE = 'instance' + ANNOTATION_IMPL = 'impl' + + def __init__(self): + self._class_name = '' + self._class_type = '' # class or interface + self._class_annotations = {} + self._methods = [] + self._fields = [] + self._imports = [] + self._package_name = '' + + @property + def class_name(self): + return self._class_name + + @property + def class_type(self): + return self._class_type + + @property + def class_annotations(self): + return self._class_annotations + + @property + def methods(self): + return self._methods + + @property + def fields(self): + return self._fields + + @property + def imports(self): + return self._imports + + @property + def package_name(self): + return self._package_name + + def SetClassContent(self, content): + self.ExtractPackageName(content) + self.ExtractImports(content) + self.ExtractClassProperties(content) + self.ExtractMethods(content) + self.ExtractFields(content) + + def ExtractPackageName(self, java_content): + package_re = re.compile('\s*package\s+(?P[a-zA-Z0-9._]+)\s*;') + for match in re.finditer(package_re, java_content): + self._package_name = match.group('package') + + def ShouldIgnoreImport(self, imported): + # Determine whether the import rule should be ignored for generated code. + # TODO: Currently we only use a blacklist to filter the import rule. + if imported.startswith('org.xwalk.core.internal'): + return True + if imported.startswith('org.chromium'): + return True + + def ExtractImports(self, java_content): + imports_re = re.compile('\s*import\s+(?P[a-zA-Z0-9._*]+)\s*;') + for match in re.finditer(imports_re, java_content): + imported = match.group('imported') + if not self.ShouldIgnoreImport(imported): + self._imports.append(imported) + + def ExtractClassProperties(self, java_content): + class_re = re.compile('@XWalkAPI\(?' + '(?P[a-zA-Z0-9.,=\s]*)\)?' + '\s*public\s+(?P(class|interface))\s+' + '(?P[a-zA-Z0-9]*)') + for match in re.finditer(class_re, java_content): + annotation_content = match.group('annotation_content') + self._class_name = match.group('class_name') + self._class_type = match.group('type') + self.ParseClassAnnotations(annotation_content) + + def ParseClassAnnotations(self, annotation): + """Class annotation contains the following optional attributes: + 'extendClass' - The class have to extend + 'createExternally' - boolean + 'craeteInternally' - boolean + 'noInstance' - boolean + 'isConst' - boolean + 'impl' - Class to impl + 'instance - instance'""" + extend_class_re = re.compile('extendClass\s*=\s*' + '(?P[a-zA-Z0-9.]+)') + for match in re.finditer(extend_class_re, annotation): + extend_class = match.group('extend_class') + self._class_annotations['extendClass'] = extend_class + + create_internally_re = re.compile('createInternally\s*=\s*' + '(?P(true|false))') + for match in re.finditer(create_internally_re, annotation): + create_internally = match.group('create_internally') + if create_internally == 'true': + self._class_annotations['createInternally'] = True + elif create_internally == 'false': + self._class_annotations['createInternally'] = False + + create_externally_re = re.compile('createExternally\s*=\s*' + '(?P(true|false))') + for match in re.finditer(create_externally_re, annotation): + create_externally = match.group('create_externally') + if create_externally == 'true': + self._class_annotations['createExternally'] = True + elif create_externally == 'false': + self._class_annotations['createExternally'] = False + + no_instance_re = re.compile('noInstance\s*=\s*' + '(?P(true|false))') + for match in re.finditer(no_instance_re, annotation): + no_instance = match.group('no_instance') + if no_instance == 'true': + self._class_annotations['noInstance'] = True + elif no_instance == 'false': + self._class_annotations['noInstance'] = False + + is_const_re = re.compile('isConst\s*=\s*' + '(?P(true|false))') + for match in re.finditer(is_const_re, annotation): + is_const = match.group('is_const') + if is_const == 'true': + self._class_annotations['isConst'] = True + elif is_const == 'false': + self._class_annotations['isConst'] = False + + impl_re = re.compile('impl\s*=\s*' + '(?P[a-zA-Z0-9.]+)') + for match in re.finditer(impl_re, annotation): + impl = match.group('impl') + self._class_annotations['impl'] = impl + + instance_re = re.compile('instance\s*=\s*' + '(?P[a-zA-Z0-9.]+)') + for match in re.finditer(instance_re, annotation): + instance = match.group('instance') + self._class_annotations['instance'] = instance + + def ExtractMethods(self, java_content): + constructor_re = re.compile('@XWalkAPI\(?' + '(?P[a-zA-Z0-9%,\s\(\)\{\};._"=]*)\)?' + '\s*public\s(?P[a-zA-Z0-9]+)\(' + '(?P[a-zA-Z0-9\s,]*)\)') + for match in re.finditer(constructor_re, java_content): + method_annotation = match.group('method_annotation') + method_name = match.group('method_name') + method_params = match.group('method_params') + method = Method(True, False, method_name, None, + method_params, method_annotation) + self._methods.append(method) + + method_re = re.compile('@XWalkAPI\(?' + '(?P[a-zA-Z0-9%,\s\(\)\{\};._"=]*)\)?' + '\s*public\s+(?P[a-zA-Z0-9]+)\s+' + '(?P[a-zA-Z0-9]+)\(' + '(?P[a-zA-Z0-9\s,\<\>]*)\)') + for match in re.finditer(method_re, java_content): + method_annotation = match.group('method_annotation') + method_name = match.group('method_name') + method_params = match.group('method_params') + method_return = match.group('method_return') + method = Method(False, False, method_name, method_return, method_params, + method_annotation) + self._methods.append(method) + + method_re = re.compile('@XWalkAPI\(?' + '(?P[a-zA-Z0-9%,\s\(\)\{\};._"=]*)\)?' + '\s*public\s+static\s+(synchronized\s+)*' + '(?P[a-zA-Z0-9]+)\s+' + '(?P[a-zA-Z0-9]+)\(' + '(?P[a-zA-Z0-9\s,\<\>]*)\)') + for match in re.finditer(method_re, java_content): + method_annotation = match.group('method_annotation') + method_name = match.group('method_name') + method_params = match.group('method_params') + method_return = match.group('method_return') + method = Method(False, True, method_name, method_return, method_params, + method_annotation) + self._methods.append(method) + + + + def ExtractFields(self, java_content): + field_re = re.compile('@XWalkAPI\s*public\s+static\s+final\s+' + '(?P[a-zA-Z0-9_]+)\s+' + '(?P[a-zA-Z0-9_]+)\s*=\s*' + '(?P[a-zA-Z0-9-_"]+)\s*;') + for match in re.finditer(field_re, java_content): + field_type = match.group('field_type') + field_name = match.group('field_name') + field_value = match.group('field_value') + field_object = Field(field_type, field_name, field_value) + self._fields.append(field_object) + + +def PerformSerialize(output_path, generator): + # Serialize the code. + file_name = os.path.join(output_path, generator.GetGeneratedClassFileName()) + file_handle = open(file_name, 'w') + file_handle.write(generator.GetGeneratedCode()) + file_handle.close() + print '%s has been generated!' % (file_name) + + +def GenerateBindingForJavaFile(file_name, bridge_output, wrap_output): + try: + file_handle = open(file_name, 'r') + file_content = file_handle.read() + file_handle.close() + except Exception: + print 'Error reading input Java file, please check.' + return + + java_data = InternalJavaFileData() + java_data.SetClassContent(file_content) + + if java_data.class_type == 'interface': + interface_generator = InterfaceGenerator(java_data) + interface_generator.RunTask() + PerformSerialize(wrap_output, interface_generator) + else: + # Generate Bridge code. + bridge_generator = BrigdeGenerator(java_data) + bridge_generator.RunTask() + # Serialize. + PerformSerialize(bridge_output, bridge_generator) + # Generate Wrapper code. + wrapper_generator = WrapperGenerator(java_data) + wrapper_generator.RunTask() + PerformSerialize(wrap_output, wrapper_generator) + + +def GenerateBindingForJavaDirectory(input_dir, bridge_output, wrap_output): + for input_file in os.listdir(input_dir): + input_class_name = input_file.replace('.java', '') + if input_class_name in CLASSES_TO_BE_PROCESS: + input_file = os.path.join(input_dir, input_file) + print 'Generate bridge and wrapper code for %s' % (input_file) + GenerateBindingForJavaFile(input_file, bridge_output, wrap_output) + + +def main(argv): + usage = """Usage: %prog [OPTIONS] +This script can generate bridge and wrap source files for given file or +directory. Either \'input_java\' is provided as single source file or +\'input_dir\' is provided as directory containing source files. + """ + option_parser = optparse.OptionParser(usage=usage) + option_parser.add_option('--input_java', + help='Input source file.') + option_parser.add_option('--input_dir', + help= ('Input source file directory which contains' + 'input files')) + option_parser.add_option('--bridge_output', + help=('Output directory where the bridge code' + 'is placed.')) + option_parser.add_option('--wrap_output', + help=('Output directory where the wrap code' + 'is placed.')) + options, _ = option_parser.parse_args(argv) + if not options.input_java and not options.input_dir: + print('Error: Must specify input.') + return 1 + if options.input_java: + GenerateBindingForJavaFile(options.input_java, + options.bridge_output, options.wrap_output) + elif options.input_dir: + GenerateBindingForJavaDirectory(options.input_dir, + options.bridge_output, options.wrap_output) + + +if __name__ == '__main__': + sys.exit(main(sys.argv))