From 5dfadc9c59ad5ec12d267d12dfaa5a646eb6d862 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 17 Feb 2024 15:15:05 +0100 Subject: [PATCH] Add some more methods needed by NewPipe. Mostly stubs --- .../android_widget_AbsListView.h | 8 -------- src/api-impl/android/app/Activity.java | 6 ++++++ src/api-impl/android/app/Dialog.java | 6 ++++++ .../android/media/session/MediaSession.java | 2 ++ src/api-impl/android/net/Uri.java | 13 +++++++++++++ src/api-impl/android/os/RemoteCallbackList.java | 2 ++ src/api-impl/android/text/Html.java | 15 +++++++++++++++ src/api-impl/android/view/Display.java | 4 ++++ src/api-impl/android/view/View.java | 10 ++++++++++ src/api-impl/android/view/Window.java | 2 ++ .../view/inputmethod/InputMethodManager.java | 3 +++ src/api-impl/android/widget/AbsListView.java | 17 ++++++++++++++--- .../android/widget/HeaderViewListAdapter.java | 5 +++++ src/api-impl/android/widget/ListView.java | 5 +++++ src/api-impl/android/widget/RadioButton.java | 3 +-- src/api-impl/android/widget/TextView.java | 2 ++ src/api-impl/meson.build | 1 + 17 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 src/api-impl/android/widget/HeaderViewListAdapter.java diff --git a/src/api-impl-jni/generated_headers/android_widget_AbsListView.h b/src/api-impl-jni/generated_headers/android_widget_AbsListView.h index 77605b81..6ab8447d 100644 --- a/src/api-impl-jni/generated_headers/android_widget_AbsListView.h +++ b/src/api-impl-jni/generated_headers/android_widget_AbsListView.h @@ -223,14 +223,6 @@ JNIEXPORT void JNICALL Java_android_widget_AbsListView_setAdapter JNIEXPORT void JNICALL Java_android_widget_AbsListView_setItemChecked (JNIEnv *, jobject, jint, jboolean); -/* - * Class: android_widget_AbsListView - * Method: setOnItemSelectedListener - * Signature: (Landroid/widget/AdapterView/OnItemSelectedListener;)V - */ -JNIEXPORT void JNICALL Java_android_widget_AbsListView_setOnItemSelectedListener - (JNIEnv *, jobject, jobject); - /* * Class: android_widget_AbsListView * Method: setOnItemClickListener diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index edd23428..11dc47de 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -398,6 +398,12 @@ public class Activity extends ContextWrapper implements Window.Callback { return null; } + @Override + public boolean onMenuOpened(int featureId, Menu menu) { + System.out.println("onMenuOpened(" + featureId + ", " + menu + ") called"); + return false; + } + private native void nativeFinish(long native_window); public static native void nativeStartActivity(Activity activity); public static native void nativeOpenURI(String uri); diff --git a/src/api-impl/android/app/Dialog.java b/src/api-impl/android/app/Dialog.java index 67a60a9a..f665a55b 100644 --- a/src/api-impl/android/app/Dialog.java +++ b/src/api-impl/android/app/Dialog.java @@ -123,6 +123,12 @@ public class Dialog implements Window.Callback, DialogInterface { throw new UnsupportedOperationException("Unimplemented method 'onPanelClosed'"); } + @Override + public boolean onMenuOpened(int featureId, Menu menu) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'onMenuOpened'"); + } + protected void onCreate (Bundle savedInstanceState) { System.out.println("- onCreate - Dialog!"); } diff --git a/src/api-impl/android/media/session/MediaSession.java b/src/api-impl/android/media/session/MediaSession.java index 201818bb..43fe90fa 100644 --- a/src/api-impl/android/media/session/MediaSession.java +++ b/src/api-impl/android/media/session/MediaSession.java @@ -28,6 +28,8 @@ public class MediaSession { public void setCallback(Callback callback, Handler handler) {} + public void setCallback(Callback callback) {} + public void setMediaButtonReceiver(PendingIntent pendingIntent) {} public void setActive(boolean active) {} diff --git a/src/api-impl/android/net/Uri.java b/src/api-impl/android/net/Uri.java index 39431459..98c06d4d 100644 --- a/src/api-impl/android/net/Uri.java +++ b/src/api-impl/android/net/Uri.java @@ -2,6 +2,8 @@ package android.net; import java.net.URI; import libcore.net.UriCodec; + +import java.io.File; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; @@ -160,4 +162,15 @@ public class Uri { public String toString() { return String.valueOf(uri); } + + public static Uri fromFile(File file) { + Uri ret = new Uri(); + ret.uri = file.toURI(); + return ret; + } + + public String getLastPathSegment() { + String[] segments = uri.getPath().split("/"); + return segments[segments.length - 1]; + } } diff --git a/src/api-impl/android/os/RemoteCallbackList.java b/src/api-impl/android/os/RemoteCallbackList.java index 65bc4c86..68b2bf33 100644 --- a/src/api-impl/android/os/RemoteCallbackList.java +++ b/src/api-impl/android/os/RemoteCallbackList.java @@ -7,4 +7,6 @@ public class RemoteCallbackList { } public void finishBroadcast() {} + + public void kill() {} } diff --git a/src/api-impl/android/text/Html.java b/src/api-impl/android/text/Html.java index e6f3c1f9..ccb4cd17 100644 --- a/src/api-impl/android/text/Html.java +++ b/src/api-impl/android/text/Html.java @@ -4,4 +4,19 @@ public class Html { public static Spanned fromHtml(String source) { return new SpannableString(source.replace("
", "\n")); // TODO when JTidy is in use: s/
//g } + + public static String escapeHtml(CharSequence source) { + StringBuilder out = new StringBuilder(source.length()); + for (int i = 0; i < source.length(); i++) { + char c = source.charAt(i); + if (c == '<' || c == '>' || c == '&' || c == '"' || c == '\'' || c > 0x7F) { + out.append("&#"); + out.append((int) c); + out.append(';'); + } else { + out.append(c); + } + } + return out.toString(); + } } diff --git a/src/api-impl/android/view/Display.java b/src/api-impl/android/view/Display.java index c2613deb..e07a81f5 100644 --- a/src/api-impl/android/view/Display.java +++ b/src/api-impl/android/view/Display.java @@ -59,4 +59,8 @@ public final class Display { public void getSize(Point size) { size.set(getWidth(), getHeight()); } + + public void getRealSize(Point size) { + getSize(size); + } } diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index 79705df7..cdda3633 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -1497,6 +1497,10 @@ public class View extends Object { post(action); } + public void postOnAnimationDelayed(Runnable action, long delayMillis) { + postDelayed(action, delayMillis); + } + public void setHorizontalScrollBarEnabled(boolean enabled) {} public void postInvalidateOnAnimation() { @@ -1613,4 +1617,10 @@ public class View extends Object { public int getMeasuredWidthAndState() { return measuredWidth; } + + public void forceLayout() { + requestLayout(); + } + + public void removeOnAttachStateChangeListener(OnAttachStateChangeListener listener) {} } diff --git a/src/api-impl/android/view/Window.java b/src/api-impl/android/view/Window.java index 867b6ddb..91bf4cea 100644 --- a/src/api-impl/android/view/Window.java +++ b/src/api-impl/android/view/Window.java @@ -18,6 +18,8 @@ public class Window { public boolean onMenuItemSelected(int featureId, MenuItem item); public void onPanelClosed(int featureId, Menu menu); + + public boolean onMenuOpened(int featureId, Menu menu); } // FIXME private diff --git a/src/api-impl/android/view/inputmethod/InputMethodManager.java b/src/api-impl/android/view/inputmethod/InputMethodManager.java index 79b81afc..30690810 100644 --- a/src/api-impl/android/view/inputmethod/InputMethodManager.java +++ b/src/api-impl/android/view/inputmethod/InputMethodManager.java @@ -1,9 +1,12 @@ package android.view.inputmethod; import android.os.IBinder; +import android.view.View; public class InputMethodManager { public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) {return false;} + public boolean showSoftInput(View view, int flags) {return false;} + } diff --git a/src/api-impl/android/widget/AbsListView.java b/src/api-impl/android/widget/AbsListView.java index c925d347..a05974b4 100644 --- a/src/api-impl/android/widget/AbsListView.java +++ b/src/api-impl/android/widget/AbsListView.java @@ -5,6 +5,8 @@ import android.util.AttributeSet; public abstract class AbsListView extends AdapterView { + public boolean mIsChildViewEnabled = false; // this field gets directly accessed by androidx DropDownListView + public AbsListView(Context context) { super(context); } @@ -24,14 +26,23 @@ public abstract class AbsListView extends AdapterView { public native void setItemChecked(int position, boolean value); - @Override - public native void setOnItemSelectedListener(OnItemSelectedListener listener); - @Override public native void setOnItemClickListener(OnItemClickListener listener); public native int getCheckedItemPosition(); + public void setCacheColorHint(int color) {} + + public int getListPaddingTop() {return 0;} + + public int getListPaddingBottom() {return 0;} + + public int pointToPosition(int x, int y) { + return -1; + } + public interface OnScrollListener {} + public interface SelectionBoundsAdjuster {} + } diff --git a/src/api-impl/android/widget/HeaderViewListAdapter.java b/src/api-impl/android/widget/HeaderViewListAdapter.java new file mode 100644 index 00000000..4350e7d8 --- /dev/null +++ b/src/api-impl/android/widget/HeaderViewListAdapter.java @@ -0,0 +1,5 @@ +package android.widget; + +public class HeaderViewListAdapter { + +} diff --git a/src/api-impl/android/widget/ListView.java b/src/api-impl/android/widget/ListView.java index 4f5dcc45..14ff0c31 100644 --- a/src/api-impl/android/widget/ListView.java +++ b/src/api-impl/android/widget/ListView.java @@ -1,6 +1,7 @@ package android.widget; import android.content.Context; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; public class ListView extends AbsListView { @@ -13,4 +14,8 @@ public class ListView extends AbsListView { super(context, attributeSet); } + public int getDividerHeight() {return 0;} + + public Drawable getDivider() {return null;} + } diff --git a/src/api-impl/android/widget/RadioButton.java b/src/api-impl/android/widget/RadioButton.java index e5ce7db1..def37dce 100644 --- a/src/api-impl/android/widget/RadioButton.java +++ b/src/api-impl/android/widget/RadioButton.java @@ -2,9 +2,8 @@ package android.widget; import android.content.Context; import android.util.AttributeSet; -import android.view.View; -public class RadioButton extends View { +public class RadioButton extends CompoundButton { public RadioButton(Context context) { super(context); diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 79526cc4..e25cfa6d 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -207,4 +207,6 @@ public class TextView extends View { public int getCompoundPaddingLeft() {return 0;} public int getCompoundPaddingRight() {return 0;} + + public void setHint(int resId) {} } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index 5249ce1c..be31059c 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -412,6 +412,7 @@ hax_jar = jar('hax', [ 'android/widget/EditText.java', 'android/widget/Filter.java', 'android/widget/FrameLayout.java', + 'android/widget/HeaderViewListAdapter.java', 'android/widget/HorizontalScrollView.java', 'android/widget/ImageButton.java', 'android/widget/ImageView.java',