API stubs and fixes for composeUI

This commit is contained in:
Julian Winkler
2024-11-27 14:59:37 +01:00
committed by Mis012
parent 447784b6d6
commit e9cf5e7002
35 changed files with 559 additions and 24 deletions

View File

@@ -85,6 +85,9 @@ JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1restore(JNIEnv *e
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLine(JNIEnv *env, jclass this_class, jlong snapshot_ptr, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jlong paint_ptr) JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLine(JNIEnv *env, jclass this_class, jlong snapshot_ptr, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jlong paint_ptr)
{ {
if (isnan(x0) || isnan(y0) || isnan(x1) || isnan(y1)) {
return;
}
GdkSnapshot *snapshot = GTK_SNAPSHOT(_PTR(snapshot_ptr)); GdkSnapshot *snapshot = GTK_SNAPSHOT(_PTR(snapshot_ptr));
sk_paint_t *paint = (sk_paint_t *)_PTR(paint_ptr); sk_paint_t *paint = (sk_paint_t *)_PTR(paint_ptr);
GdkRGBA gdk_color; GdkRGBA gdk_color;

View File

@@ -119,6 +119,7 @@ void set_up_handle_cache(JNIEnv *env)
if((*env)->ExceptionCheck(env)) if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
handle_cache.view.onDraw = _METHOD(handle_cache.view.class, "onDraw", "(Landroid/graphics/Canvas;)V"); handle_cache.view.onDraw = _METHOD(handle_cache.view.class, "onDraw", "(Landroid/graphics/Canvas;)V");
handle_cache.view.dispatchDraw = _METHOD(handle_cache.view.class, "dispatchDraw", "(Landroid/graphics/Canvas;)V");
handle_cache.view.draw = _METHOD(handle_cache.view.class, "draw", "(Landroid/graphics/Canvas;)V"); handle_cache.view.draw = _METHOD(handle_cache.view.class, "draw", "(Landroid/graphics/Canvas;)V");
handle_cache.view.onMeasure = _METHOD(handle_cache.view.class, "onMeasure", "(II)V"); handle_cache.view.onMeasure = _METHOD(handle_cache.view.class, "onMeasure", "(II)V");
handle_cache.view.onLayout = _METHOD(handle_cache.view.class, "onLayout", "(ZIIII)V"); handle_cache.view.onLayout = _METHOD(handle_cache.view.class, "onLayout", "(ZIIII)V");
@@ -133,6 +134,7 @@ void set_up_handle_cache(JNIEnv *env)
handle_cache.view.getScrollY = _METHOD(handle_cache.view.class, "getScrollY", "()I"); handle_cache.view.getScrollY = _METHOD(handle_cache.view.class, "getScrollY", "()I");
handle_cache.view.performClick = _METHOD(handle_cache.view.class, "performClick", "()Z"); handle_cache.view.performClick = _METHOD(handle_cache.view.class, "performClick", "()Z");
handle_cache.view.onTouchEvent = _METHOD(handle_cache.view.class, "onTouchEvent", "(Landroid/view/MotionEvent;)Z"); handle_cache.view.onTouchEvent = _METHOD(handle_cache.view.class, "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.dispatchTouchEvent = _METHOD(handle_cache.view.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.onInterceptTouchEvent = _METHOD(handle_cache.view.class, "onInterceptTouchEvent", "(Landroid/view/MotionEvent;)Z"); handle_cache.view.onInterceptTouchEvent = _METHOD(handle_cache.view.class, "onInterceptTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.layoutInternal = _METHOD(handle_cache.view.class, "layoutInternal", "(II)V"); handle_cache.view.layoutInternal = _METHOD(handle_cache.view.class, "layoutInternal", "(II)V");
handle_cache.view.measure = _METHOD(handle_cache.view.class, "measure", "(II)V"); handle_cache.view.measure = _METHOD(handle_cache.view.class, "measure", "(II)V");

View File

@@ -65,6 +65,7 @@ struct handle_cache {
jclass class; jclass class;
jmethodID setLayoutParams; jmethodID setLayoutParams;
jmethodID onDraw; jmethodID onDraw;
jmethodID dispatchDraw;
jmethodID draw; jmethodID draw;
jmethodID onMeasure; jmethodID onMeasure;
jmethodID onLayout; jmethodID onLayout;
@@ -79,6 +80,7 @@ struct handle_cache {
jmethodID getScrollY; jmethodID getScrollY;
jmethodID performClick; jmethodID performClick;
jmethodID onTouchEvent; jmethodID onTouchEvent;
jmethodID dispatchTouchEvent;
jmethodID onInterceptTouchEvent; jmethodID onInterceptTouchEvent;
jmethodID layoutInternal; jmethodID layoutInternal;
jmethodID measure; jmethodID measure;

View File

@@ -279,8 +279,9 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
wrapper->jvm = jvm; wrapper->jvm = jvm;
wrapper->jobj = _WEAK_REF(jobj); wrapper->jobj = _WEAK_REF(jobj);
jmethodID on_draw_method = _METHOD(_CLASS(jobj), "onDraw", "(Landroid/graphics/Canvas;)V"); jmethodID on_draw_method = _METHOD(_CLASS(jobj), "onDraw", "(Landroid/graphics/Canvas;)V");
jmethodID dispatch_draw_method = _METHOD(_CLASS(jobj), "dispatchDraw", "(Landroid/graphics/Canvas;)V");
jmethodID draw_method = _METHOD(_CLASS(jobj), "draw", "(Landroid/graphics/Canvas;)V"); jmethodID draw_method = _METHOD(_CLASS(jobj), "draw", "(Landroid/graphics/Canvas;)V");
if (on_draw_method != handle_cache.view.onDraw || draw_method != handle_cache.view.draw) { if (on_draw_method != handle_cache.view.onDraw || draw_method != handle_cache.view.draw || dispatch_draw_method != handle_cache.view.dispatchDraw) {
wrapper->draw_method = draw_method; wrapper->draw_method = draw_method;
jclass canvas_class = (*env)->FindClass(env, "android/graphics/GskCanvas"); jclass canvas_class = (*env)->FindClass(env, "android/graphics/GskCanvas");
jmethodID canvas_constructor = _METHOD(canvas_class, "<init>", "(J)V"); jmethodID canvas_constructor = _METHOD(canvas_class, "<init>", "(J)V");
@@ -289,7 +290,8 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
} }
jmethodID ontouchevent_method = _METHOD(_CLASS(jobj), "onTouchEvent", "(Landroid/view/MotionEvent;)Z"); jmethodID ontouchevent_method = _METHOD(_CLASS(jobj), "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
if (ontouchevent_method != handle_cache.view.onTouchEvent) { jmethodID dispatchtouchevent_method = _METHOD(_CLASS(jobj), "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
if (ontouchevent_method != handle_cache.view.onTouchEvent || dispatchtouchevent_method != handle_cache.view.dispatchTouchEvent) {
_setOnTouchListener(env, jobj, GTK_WIDGET(wrapper)); _setOnTouchListener(env, jobj, GTK_WIDGET(wrapper));
} }

View File

@@ -478,6 +478,8 @@ public class Context extends Object {
public void registerComponentCallbacks(ComponentCallbacks callbacks) {} public void registerComponentCallbacks(ComponentCallbacks callbacks) {}
public void unregisterComponentCallbacks(ComponentCallbacks callbacks) {}
public boolean bindService(final Intent intent, final ServiceConnection serviceConnection, int dummy3) { public boolean bindService(final Intent intent, final ServiceConnection serviceConnection, int dummy3) {
if (intent.getComponent() == null) { if (intent.getComponent() == null) {
Slog.w(TAG, "Context.bindService: intent.getComponent() is null"); Slog.w(TAG, "Context.bindService: intent.getComponent() is null");

View File

@@ -16,6 +16,12 @@
package android.content.pm; package android.content.pm;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import android.annotation.SdkConstant; import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SdkConstant.SdkConstantType;
import android.content.ComponentName; import android.content.ComponentName;
@@ -23,6 +29,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.IntentSender; import android.content.IntentSender;
import android.content.pm.PackageParser.Service;
import android.content.pm.PackageParser.ServiceIntentInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.XmlResourceParser; import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@@ -32,11 +40,6 @@ import android.os.UserHandle;
import android.util.AndroidException; import android.util.AndroidException;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Slog; import android.util.Slog;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
class IPackageInstallObserver {} class IPackageInstallObserver {}
class VerificationParams {} class VerificationParams {}
@@ -2321,7 +2324,17 @@ public class PackageManager {
*/ */
public List<ResolveInfo> queryIntentServices(Intent intent, public List<ResolveInfo> queryIntentServices(Intent intent,
int flags) { int flags) {
return new ArrayList<ResolveInfo>(); List<ResolveInfo> list = new ArrayList<ResolveInfo>(1);
for (Service s: Context.pkg.services) {
for (ServiceIntentInfo intentinfo: s.intents) {
if (s.getComponentName().equals(intent.getComponent()) || intentinfo.matchAction(intent.getAction())) {
ResolveInfo ri = new ResolveInfo();
ri.serviceInfo = s.info;
list.add(ri);
}
}
}
return list;
} }
/** /**

View File

@@ -3031,7 +3031,20 @@ public class PackageParser {
continue; continue;
} }
if (parser.getName().equals("meta-data")) { if (parser.getName().equals("intent-filter")) {
ServiceIntentInfo intent = new ServiceIntentInfo(s);
if (!parseIntent(res, parser, attrs, true /*allowGlobs*/, true /*allowAutoVerify*/,
intent, outError)) {
return null;
}
if (intent.countActions() == 0) {
Slog.w(TAG, "No actions in intent filter at "
+ mArchiveSourcePath + " "
+ parser.getPositionDescription());
} else {
s.intents.add(intent);
}
} else if (parser.getName().equals("meta-data")) {
if ((s.metaData = parseMetaData(res, parser, attrs, s.metaData, if ((s.metaData = parseMetaData(res, parser, attrs, s.metaData,
outError)) == null) { outError)) == null) {
return null; return null;

View File

@@ -2,6 +2,7 @@ package android.content.pm;
public class ResolveInfo { public class ResolveInfo {
public ActivityInfo activityInfo = new ActivityInfo(); public ActivityInfo activityInfo = new ActivityInfo();
public ServiceInfo serviceInfo = new ServiceInfo();
public static class DisplayNameComparator { public static class DisplayNameComparator {

View File

@@ -470,6 +470,27 @@ public class Canvas {
return false; return false;
} }
public boolean clipRect(float left, float top, float right, float bottom) {
return false;
}
public boolean isHardwareAccelerated() {
return false;
}
public boolean clipRect(float left, float top, float right, float bottom, Region.Op op) {
return false;
}
public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean includeCenter, Paint paint) {}
public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) {}
public boolean getClipBounds(Rect outRect) {
outRect.set(0, 0, 100, 100);
return false;
}
private static native long native_canvas_from_bitmap(long pixbuf); private static native long native_canvas_from_bitmap(long pixbuf);
private static native void native_save(long skia_canvas, long widget); private static native void native_save(long skia_canvas, long widget);

View File

@@ -0,0 +1,10 @@
package android.graphics;
public class Outline {
public void setAlpha(float alpha) {}
public void setEmpty() {}
public void setRoundRect(int left, int top, int right, int bottom, float r) {}
}

View File

@@ -284,6 +284,12 @@ public class Paint {
public void set(Paint paint) {} public void set(Paint paint) {}
public boolean isFilterBitmap() { return false; }
public Cap getStrokeCap() { return Cap.BUTT; }
public Join getStrokeJoin() { return Join.MITER; }
private native long native_constructor(); private native long native_constructor();
private native void native_set_antialias(long skia_paint, boolean aa); private native void native_set_antialias(long skia_paint, boolean aa);
private native void native_set_color(long skia_paint, int color); private native void native_set_color(long skia_paint, int color);

View File

@@ -59,4 +59,8 @@ public class Typeface {
public int getStyle() { public int getStyle() {
return 0; return 0;
} }
public static Typeface defaultFromStyle(int style) {
return create((String)null, style);
}
} }

View File

@@ -299,6 +299,8 @@ public class Drawable {
return false; return false;
} }
public void setHotspot(float x, float y) {}
protected static native long native_paintable_from_path(String path); protected static native long native_paintable_from_path(String path);
protected native long native_constructor(); protected native long native_constructor();
protected native void native_invalidate(long paintable); protected native void native_invalidate(long paintable);

View File

@@ -8,4 +8,6 @@ public class RippleDrawable extends LayerDrawable {
super(drawable == null ? new Drawable[] {} : new Drawable[] {drawable}); super(drawable == null ? new Drawable[] {} : new Drawable[] {drawable});
} }
public void setColor(ColorStateList colorStateList) {}
} }

View File

@@ -16,6 +16,14 @@ public class AudioAttributes {
return this; return this;
} }
public Builder setFlags(int flags) {
return this;
}
public Builder setLegacyStreamType(int legacy_stream_type) {
return this;
}
public AudioAttributes build() { public AudioAttributes build() {
return new AudioAttributes(); return new AudioAttributes();
} }

View File

@@ -10,4 +10,8 @@ public class MediaController {
public MediaMetadata getMetadata() { public MediaMetadata getMetadata() {
return new MediaMetadata(); return new MediaMetadata();
} }
public CharSequence getQueueTitle() {
return null;
}
} }

View File

@@ -4,6 +4,7 @@ import java.util.List;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.media.AudioAttributes;
import android.media.MediaDescription; import android.media.MediaDescription;
import android.media.MediaMetadata; import android.media.MediaMetadata;
import android.os.Handler; import android.os.Handler;
@@ -54,7 +55,7 @@ public class MediaSession {
if (item.id == state.activeQueueItemId) { if (item.id == state.activeQueueItemId) {
title = item.description.title.toString(); title = item.description.title.toString();
subTitle = item.description.subtitle.toString(); subTitle = item.description.subtitle.toString();
artUrl = item.description.iconUri.toString(); artUrl = item.description.iconUri == null ? null : item.description.iconUri.toString();
break; break;
} }
} }
@@ -69,6 +70,8 @@ public class MediaSession {
public void release() {} public void release() {}
public void setPlaybackToLocal(AudioAttributes audioAttributes) {}
protected native void nativeSetState(int state, long actions, long position, long updateTime, String title, String subTitle, String artUrl); protected native void nativeSetState(int state, long actions, long position, long updateTime, String title, String subTitle, String artUrl);
protected native void nativeSetCallback(Callback callback); protected native void nativeSetCallback(Callback callback);
} }

View File

@@ -1,6 +1,6 @@
package android.os; package android.os;
public class Binder extends IBinder { public class Binder implements IBinder {
public void attachInterface(IInterface owner, String descriptor) {} public void attachInterface(IInterface owner, String descriptor) {}
@@ -9,4 +9,10 @@ public class Binder extends IBinder {
public static long clearCallingIdentity() { return 0; } public static long clearCallingIdentity() { return 0; }
public static void restoreCallingIdentity(long identityToken) {} public static void restoreCallingIdentity(long identityToken) {}
@Override
public IInterface queryLocalInterface(String descriptor) { return null; }
@Override
public boolean transact(int code, Parcel data, Parcel reply, int flags) { return false; }
} }

View File

@@ -1,6 +1,10 @@
package android.os; package android.os;
public class IBinder { public interface IBinder {
public interface DeathRecipient {} public interface DeathRecipient {}
public IInterface queryLocalInterface(String descriptor);
public boolean transact(int code, Parcel data, Parcel reply, int flags);
} }

View File

@@ -43,4 +43,16 @@ public class Parcel {
public void writeParcelable(Parcelable p, int flags) { public void writeParcelable(Parcelable p, int flags) {
System.out.println("Parcel.writeParcelable(" + p + ", " + flags + ")"); System.out.println("Parcel.writeParcelable(" + p + ", " + flags + ")");
} }
public void writeInterfaceToken(String s) {
System.out.println("Parcel.writeInterfaceToken(" + s + ")");
}
public void writeStrongInterface(IInterface i) {
System.out.println("Parcel.writeStrongInterface(" + i + ")");
}
public int dataSize() {
return 0;
}
} }

Some files were not shown because too many files have changed in this diff Show More