From 0454dcbfd53a4fa03698c6636e2e2d551f29863b Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 18 Jun 2023 11:03:43 +0200 Subject: [PATCH] stub some APIs for Flappy Bird, mostly webview related --- src/api-impl/android/app/Activity.java | 5 ++++ .../android/content/pm/PackageManager.java | 8 +++-- .../android/gesture/GestureOverlayView.java | 27 +++++++++++++++++ .../android/gesture/GestureStore.java | 10 +++++++ src/api-impl/android/os/Trace.java | 2 +- src/api-impl/android/view/MotionEvent.java | 4 ++- src/api-impl/android/view/View.java | 3 ++ src/api-impl/android/view/ViewGroup.java | 25 ++++++++++++++++ src/api-impl/android/view/Window.java | 4 +++ .../android/webkit/DownloadListener.java | 29 +++++++++++++++++++ src/api-impl/android/webkit/WebSettings.java | 12 ++++++++ src/api-impl/android/webkit/WebView.java | 13 ++++++++- .../android/webkit/WebViewClient.java | 4 +++ src/api-impl/android/widget/FrameLayout.java | 2 +- .../android/widget/RelativeLayout.java | 4 +++ src/api-impl/meson.build | 4 +++ 16 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 src/api-impl/android/gesture/GestureOverlayView.java create mode 100644 src/api-impl/android/gesture/GestureStore.java create mode 100644 src/api-impl/android/webkit/DownloadListener.java create mode 100644 src/api-impl/android/webkit/WebViewClient.java diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index 59632d4b..df17b857 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.widget.TextView; import android.view.View; +import android.view.ViewGroup; import android.view.LayoutInflater; import android.view.Window; import android.view.WindowManager; @@ -169,6 +170,10 @@ public class Activity extends Context { });*/ } + public void setContentView(View view, ViewGroup.LayoutParams layoutParams) { + setContentView(view); + } + public void setContentView(View view) { window.setContentView(view); } diff --git a/src/api-impl/android/content/pm/PackageManager.java b/src/api-impl/android/content/pm/PackageManager.java index 9451df05..58ff22e7 100644 --- a/src/api-impl/android/content/pm/PackageManager.java +++ b/src/api-impl/android/content/pm/PackageManager.java @@ -1383,8 +1383,12 @@ public class PackageManager { * @see #GET_UNINSTALLED_PACKAGES */ public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException { - return new PackageInfo(); - } + PackageInfo packageInfo = new PackageInfo(); + if ((flags & GET_SIGNATURES) == GET_SIGNATURES) { + packageInfo.signatures = new Signature[0]; + } + return packageInfo; + } /** * Map from the current package names in use on the device to whatever diff --git a/src/api-impl/android/gesture/GestureOverlayView.java b/src/api-impl/android/gesture/GestureOverlayView.java new file mode 100644 index 00000000..e3186138 --- /dev/null +++ b/src/api-impl/android/gesture/GestureOverlayView.java @@ -0,0 +1,27 @@ +package android.gesture; + +import android.content.Context; +import android.view.ViewGroup; + +public class GestureOverlayView extends ViewGroup { + + public GestureOverlayView(Context context) { + } + + public void setGestureStrokeType(int type) { + } + + public void setEventsInterceptionEnabled(boolean enabled) { + } + + public void setGestureVisible(boolean enabled) { + } + + public void addOnGesturePerformedListener(OnGesturePerformedListener listener) { + } + + public interface OnGesturePerformedListener { + + } + +} diff --git a/src/api-impl/android/gesture/GestureStore.java b/src/api-impl/android/gesture/GestureStore.java new file mode 100644 index 00000000..ce895bc8 --- /dev/null +++ b/src/api-impl/android/gesture/GestureStore.java @@ -0,0 +1,10 @@ +package android.gesture; + +import java.io.InputStream; + +public class GestureStore { + + public void load(InputStream inputStream) { + } + +} diff --git a/src/api-impl/android/os/Trace.java b/src/api-impl/android/os/Trace.java index 436ba23f..5c9a0ce9 100644 --- a/src/api-impl/android/os/Trace.java +++ b/src/api-impl/android/os/Trace.java @@ -119,7 +119,7 @@ public final class Trace { * synchronized, and sEnabledTags is volatile (prevents word tearing). */ private static long cacheEnabledTags() { - long tags = nativeGetEnabledTags(); + long tags = 0; sEnabledTags = tags; return tags; } diff --git a/src/api-impl/android/view/MotionEvent.java b/src/api-impl/android/view/MotionEvent.java index d948ee23..4351037f 100644 --- a/src/api-impl/android/view/MotionEvent.java +++ b/src/api-impl/android/view/MotionEvent.java @@ -1621,7 +1621,9 @@ public final class MotionEvent extends InputEvent { } MotionEvent ev = obtain(); - ev.mNativePtr = nativeCopy(ev.mNativePtr, other.mNativePtr, true /*keepHistory*/); + ev.action = other.action; + ev.coord_x = other.coord_x; + ev.coord_y = other.coord_y; return ev; } diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index f5ccc8c0..287f2d2b 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -872,4 +872,7 @@ public class View extends Object { public Context getContext() { return this.context; } + + public void refreshDrawableState() { + } } diff --git a/src/api-impl/android/view/ViewGroup.java b/src/api-impl/android/view/ViewGroup.java index 16f2ae2c..888eb8e4 100644 --- a/src/api-impl/android/view/ViewGroup.java +++ b/src/api-impl/android/view/ViewGroup.java @@ -66,6 +66,16 @@ public class ViewGroup extends View implements ViewParent, ViewManager { // TODO: actually implement this (might make sense to implement it in the subclasses instead), when applicable } + /** + * Returns the number of children in the group. + * + * @return a positive integer representing the number of children in + * the group + */ + public int getChildCount() { + return children.size(); + } + public static class LayoutParams { public static final int FILL_PARENT = -1; public static final int MATCH_PARENT = -1; @@ -98,4 +108,19 @@ public class ViewGroup extends View implements ViewParent, ViewManager { */ // public LayoutAnimationController.AnimationParameters layoutAnimationParameters; } + + public static class MarginLayoutParams extends ViewGroup.LayoutParams{ + + public MarginLayoutParams() { + super(); + } + + public MarginLayoutParams(int width, int height) { + super(width, height); + } + + public MarginLayoutParams(int width, int height, float weight) { + super(width, height, weight); + } + } } diff --git a/src/api-impl/android/view/Window.java b/src/api-impl/android/view/Window.java index bbb0f51f..69020983 100644 --- a/src/api-impl/android/view/Window.java +++ b/src/api-impl/android/view/Window.java @@ -39,4 +39,8 @@ public class Window { public void takeInputQueue(InputQueue.Callback callback) { take_input_queue(native_window, callback, new InputQueue()); } + + public boolean requestFeature(int featureId) { + return false; + } } diff --git a/src/api-impl/android/webkit/DownloadListener.java b/src/api-impl/android/webkit/DownloadListener.java new file mode 100644 index 00000000..3a174a16 --- /dev/null +++ b/src/api-impl/android/webkit/DownloadListener.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.webkit; +public interface DownloadListener { + /** + * Notify the host application that a file should be downloaded + * @param url The full url to the content that should be downloaded + * @param userAgent the user agent to be used for the download. + * @param contentDisposition Content-disposition http header, if + * present. + * @param mimetype The mimetype of the content reported by the server + * @param contentLength The file size reported by the server + */ + public void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, long contentLength); +} \ No newline at end of file diff --git a/src/api-impl/android/webkit/WebSettings.java b/src/api-impl/android/webkit/WebSettings.java index 112a271b..2efc5b80 100644 --- a/src/api-impl/android/webkit/WebSettings.java +++ b/src/api-impl/android/webkit/WebSettings.java @@ -4,4 +4,16 @@ public class WebSettings { public String getUserAgentString() { return "FUCK YOU"; } + + public void setUserAgentString(String userAgentString) { + } + + public void setSupportMultipleWindows(boolean supportMultipleWindows) { + } + + public void setJavaScriptEnabled(boolean javaScriptEnabled) { + } + + public void setSavePassword(boolean savePassword) { + } } diff --git a/src/api-impl/android/webkit/WebView.java b/src/api-impl/android/webkit/WebView.java index 08357804..09c6f2be 100644 --- a/src/api-impl/android/webkit/WebView.java +++ b/src/api-impl/android/webkit/WebView.java @@ -1,13 +1,24 @@ package android.webkit; import android.content.Context; +import android.view.View; // the only reason we need to implement this is that some app developers are such scumbags that they try to use this for tracking purposes -public class WebView { +public class WebView extends View { public WebView (Context context) { + super(context); } public WebSettings getSettings() { return new WebSettings(); } + + public void setDownloadListener(DownloadListener downloadListener) { + } + + public void setScrollBarStyle(int scrollBarStyle) { + } + + public void setWebViewClient(WebViewClient webViewClient) { + } } diff --git a/src/api-impl/android/webkit/WebViewClient.java b/src/api-impl/android/webkit/WebViewClient.java new file mode 100644 index 00000000..e70340e6 --- /dev/null +++ b/src/api-impl/android/webkit/WebViewClient.java @@ -0,0 +1,4 @@ +package android.webkit; + +public class WebViewClient { +} diff --git a/src/api-impl/android/widget/FrameLayout.java b/src/api-impl/android/widget/FrameLayout.java index c74447ab..cc2a6422 100644 --- a/src/api-impl/android/widget/FrameLayout.java +++ b/src/api-impl/android/widget/FrameLayout.java @@ -31,7 +31,7 @@ public class FrameLayout extends ViewGroup { addView(child, index, null); } - public static class LayoutParams extends ViewGroup.LayoutParams { + public static class LayoutParams extends ViewGroup.MarginLayoutParams { public LayoutParams(int width, int height) { super(width, height); } diff --git a/src/api-impl/android/widget/RelativeLayout.java b/src/api-impl/android/widget/RelativeLayout.java index 771f3355..a6a60cfc 100644 --- a/src/api-impl/android/widget/RelativeLayout.java +++ b/src/api-impl/android/widget/RelativeLayout.java @@ -38,6 +38,10 @@ public class RelativeLayout extends ViewGroup { super(width, height, weight); } + public LayoutParams(ViewGroup.MarginLayoutParams source) { + super(source.width, source.height, source.weight); + } + public void addRule(int verb) {} public void addRule(int verb, int anchor) {} } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index d7e93ce3..55beb1d4 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -76,6 +76,8 @@ hax_jar = jar('hax', [ 'android/database/sqlite/SQLiteOpenHelper.java', 'android/database/sqlite/SQLiteProgram.java', 'android/database/sqlite/SQLiteQuery.java', + 'android/gesture/GestureOverlayView.java', + 'android/gesture/GestureStore.java', 'android/graphics/BitmapFactory.java', 'android/graphics/Bitmap.java', 'android/graphics/Canvas.java', @@ -204,8 +206,10 @@ hax_jar = jar('hax', [ 'android/view/Window.java', 'android/view/WindowManagerImpl.java', 'android/view/WindowManager.java', + 'android/webkit/DownloadListener.java', 'android/webkit/WebSettings.java', 'android/webkit/WebView.java', + 'android/webkit/WebViewClient.java', 'android/widget/EditText.java', 'android/widget/FrameLayout.java', 'android/widget/ImageView.java',