diff --git a/src/api-impl-jni/graphics/android_graphics_Matrix.c b/src/api-impl-jni/graphics/android_graphics_Matrix.c index c2e85225..763a6ade 100644 --- a/src/api-impl-jni/graphics/android_graphics_Matrix.c +++ b/src/api-impl-jni/graphics/android_graphics_Matrix.c @@ -253,3 +253,17 @@ JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1equals(JNIEnv *e graphene_matrix_t *matrix2 = (graphene_matrix_t *)_PTR(matrix2_ptr); return graphene_matrix_equal(matrix1, matrix2); } + +JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setValues(JNIEnv *env, jclass class, jlong matrix_ptr, jfloatArray values_ref) +{ + graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr); + jfloat *values = (*env)->GetFloatArrayElements(env, values_ref, NULL); + float values4x4[4][4] = { + {values[android_graphics_Matrix_MSCALE_X], values[android_graphics_Matrix_MSKEW_X], 0, values[android_graphics_Matrix_MTRANS_X]}, + {values[android_graphics_Matrix_MSKEW_Y], values[android_graphics_Matrix_MSCALE_Y], 0, values[android_graphics_Matrix_MTRANS_Y]}, + {0, 0, 1, 0}, + {values[android_graphics_Matrix_MPERSP_0], values[android_graphics_Matrix_MPERSP_1], 0, values[android_graphics_Matrix_MPERSP_2]}, + }; + graphene_matrix_init_from_float(matrix, *values4x4); + (*env)->ReleaseFloatArrayElements(env, values_ref, values, 0); +} diff --git a/src/api-impl-jni/graphics/android_graphics_Path.c b/src/api-impl-jni/graphics/android_graphics_Path.c index 591a3778..9ab549bd 100644 --- a/src/api-impl-jni/graphics/android_graphics_Path.c +++ b/src/api-impl-jni/graphics/android_graphics_Path.c @@ -201,3 +201,10 @@ JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addPath__JJ(JNIEnv *en sk_path_t *src = (sk_path_t *)_PTR(src_ptr); sk_path_add_path(path, src, APPEND_SK_PATH_ADD_MODE); } + +JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addPath__JJFF(JNIEnv *env, jclass class, jlong path_ptr, jlong src_ptr, jfloat dx, jfloat dy) +{ + sk_path_t *path = (sk_path_t *)_PTR(path_ptr); + sk_path_t *src = (sk_path_t *)_PTR(src_ptr); + sk_path_add_path_offset(path, src, dx, dy, APPEND_SK_PATH_ADD_MODE); +} diff --git a/src/api-impl/android/app/Notification.java b/src/api-impl/android/app/Notification.java index 3078ffd5..86f328ef 100644 --- a/src/api-impl/android/app/Notification.java +++ b/src/api-impl/android/app/Notification.java @@ -5,6 +5,7 @@ import java.util.List; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.drawable.Icon; import android.media.AudioAttributes; import android.media.session.MediaSession; import android.net.Uri; @@ -67,6 +68,10 @@ public class Notification implements Parcelable { notification = new Notification(); } + public Builder(Context context, String tag) { + this(context); + } + public Builder setWhen(long when) {return this;} public Builder setSmallIcon(int icon, int level) { @@ -161,6 +166,22 @@ public class Notification implements Parcelable { public Builder setExtras(Bundle extras) {return this;} + public Builder setLargeIcon(Icon icon) {return this;} + + public Builder setRemoteInputHistory(CharSequence[] history) {return this;} + + public Builder setBadgeIconType(int iconType) {return this;} + + public Builder setSettingsText(CharSequence settingsText) {return this;} + + public Builder setShortcutId(String shortcutId) {return this;} + + public Builder setTimeoutAfter(long timeout) {return this;} + + public Builder setGroupAlertBehavior(int groupAlertBehavior) {return this;} + + public Builder setSound(Uri sound) {return this;} + public Notification build() { return notification; } @@ -186,10 +207,16 @@ public class Notification implements Parcelable { action.intent = intent; } + public Builder(Icon icon, CharSequence title, PendingIntent intent) { + this(0, title, intent); + } + public Builder addExtras(Bundle extras) {return this;} public Builder addRemoteInput(RemoteInput remoteInput) {return this;} + public Builder setAllowGeneratedReplies(boolean allowGeneratedReplies) {return this;} + public Action build() { return action; } diff --git a/src/api-impl/android/app/NotificationChannel.java b/src/api-impl/android/app/NotificationChannel.java new file mode 100644 index 00000000..b7be2ed0 --- /dev/null +++ b/src/api-impl/android/app/NotificationChannel.java @@ -0,0 +1,6 @@ +package android.app; + +public class NotificationChannel { + + public NotificationChannel(String id, CharSequence name, int importance) {} +} diff --git a/src/api-impl/android/app/NotificationManager.java b/src/api-impl/android/app/NotificationManager.java index a4d03536..4cc21b8d 100644 --- a/src/api-impl/android/app/NotificationManager.java +++ b/src/api-impl/android/app/NotificationManager.java @@ -98,6 +98,8 @@ public class NotificationManager { } } + public void createNotificationChannel(NotificationChannel channel) {} + protected native long nativeInitBuilder(); protected native void nativeAddAction(long builder, String title, int intentType, String action, String className); protected native void nativeShowNotification(long builder, int id, String title, String text, String iconPath, boolean ongoing, int intentType, String action, String className); diff --git a/src/api-impl/android/app/Service.java b/src/api-impl/android/app/Service.java index 11dd8f4f..89b70efd 100644 --- a/src/api-impl/android/app/Service.java +++ b/src/api-impl/android/app/Service.java @@ -29,6 +29,10 @@ public abstract class Service extends Context { System.out.println("stopForeground(" + remove + ") called"); } + public void stopForeground(int remove) { + System.out.println("stopForeground(" + remove + ") called"); + } + public Application getApplication() { return this_application; } diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index 80837a7a..cada1526 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -231,8 +231,8 @@ public class Context extends Object { } } - public final T getSystemService(Class serviceClass) { - return null; + public final Object getSystemService(Class serviceClass) throws InstantiationException, IllegalAccessException, InvocationTargetException { + return serviceClass.getConstructors()[0].newInstance(); } public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { diff --git a/src/api-impl/android/graphics/Bitmap.java b/src/api-impl/android/graphics/Bitmap.java index bc5f21fc..e376ccb1 100644 --- a/src/api-impl/android/graphics/Bitmap.java +++ b/src/api-impl/android/graphics/Bitmap.java @@ -489,7 +489,11 @@ public final class Bitmap { * This configuration is very flexible and offers the best * quality. It should be used whenever possible. */ - ARGB_8888(5); + ARGB_8888(5), + + RGBA_F16(6), + + HARDWARE(7); final int nativeInt; @@ -602,9 +606,9 @@ public final class Bitmap { */ public Bitmap copy(Config config, boolean isMutable) { checkRecycled("Can't copy a recycled bitmap"); - Bitmap b = nativeCopy(mNativeBitmap, config.nativeInt, isMutable); + Bitmap b = new Bitmap(native_copy(pixbuf)); if (b != null) { - b.setAlphaAndPremultiplied(hasAlpha(), mIsPremultiplied); + // b.setAlphaAndPremultiplied(hasAlpha(), mIsPremultiplied); b.mDensity = mDensity; } return b; @@ -979,6 +983,10 @@ public final class Bitmap { return createBitmap(display, colors, 0, width, width, height, config); } + public static Bitmap createBitmap(DisplayMetrics display, int width, int height, Config config, boolean hasAlpha, ColorSpace colorSpace) { + return createBitmap(display, width, height, config, hasAlpha); + } + /** * Returns an optional array of private data, used by the UI system for * some bitmaps. Not intended to be called by applications. diff --git a/src/api-impl/android/graphics/ColorSpace.java b/src/api-impl/android/graphics/ColorSpace.java new file mode 100644 index 00000000..eabbcf4a --- /dev/null +++ b/src/api-impl/android/graphics/ColorSpace.java @@ -0,0 +1,13 @@ +package android.graphics; + +public class ColorSpace { + + public static enum Named { + SRGB, + } + + public static ColorSpace get(Named named) { + return new ColorSpace(); + } + +} diff --git a/src/api-impl/android/graphics/Outline.java b/src/api-impl/android/graphics/Outline.java index 50075376..1f30fe01 100644 --- a/src/api-impl/android/graphics/Outline.java +++ b/src/api-impl/android/graphics/Outline.java @@ -7,4 +7,6 @@ public class Outline { public void setEmpty() {} public void setRoundRect(int left, int top, int right, int bottom, float r) {} + + public void setRect(int left, int top, int right, int bottom) {} } diff --git a/src/api-impl/android/graphics/Path.java b/src/api-impl/android/graphics/Path.java index 9fd77ee4..0b9d2d4a 100644 --- a/src/api-impl/android/graphics/Path.java +++ b/src/api-impl/android/graphics/Path.java @@ -670,6 +670,10 @@ public class Path { final long ni() { return mNativePath; } + + public boolean isConvex() { + return false; + } private static native long init1(); private static native long init2(long nPath); private static native void native_reset(long nPath); diff --git a/src/api-impl/android/graphics/PathMeasure.java b/src/api-impl/android/graphics/PathMeasure.java index c112f7c4..cbc68275 100644 --- a/src/api-impl/android/graphics/PathMeasure.java +++ b/src/api-impl/android/graphics/PathMeasure.java @@ -3,4 +3,14 @@ package android.graphics; public class PathMeasure { public PathMeasure(Path path, boolean dummy) { } + + public void setPath(Path path, boolean forceClosed) {} + + public float getLength() { + return 100; + } + + public boolean getSegment(float start, float end, Path dst, boolean forceClosed) { + return false; + } } diff --git a/src/api-impl/android/graphics/drawable/Icon.java b/src/api-impl/android/graphics/drawable/Icon.java new file mode 100644 index 00000000..28a22892 --- /dev/null +++ b/src/api-impl/android/graphics/drawable/Icon.java @@ -0,0 +1,8 @@ +package android.graphics.drawable; + +public class Icon { + + public static Icon createWithResource(String packageName, int resourceId) { + return null; + } +} diff --git a/src/api-impl/android/graphics/drawable/RippleDrawable.java b/src/api-impl/android/graphics/drawable/RippleDrawable.java index 1a2b9589..f6061b30 100644 --- a/src/api-impl/android/graphics/drawable/RippleDrawable.java +++ b/src/api-impl/android/graphics/drawable/RippleDrawable.java @@ -10,4 +10,6 @@ public class RippleDrawable extends LayerDrawable { public void setColor(ColorStateList colorStateList) {} + public void setRadius(int radius) {} + } diff --git a/src/api-impl/android/os/BaseBundle.java b/src/api-impl/android/os/BaseBundle.java index 40969453..be6511dd 100644 --- a/src/api-impl/android/os/BaseBundle.java +++ b/src/api-impl/android/os/BaseBundle.java @@ -302,4 +302,25 @@ public class BaseBundle { return null; } } + + /** + * Returns the value associated with the given key, or null if + * no mapping of the desired type exists for the given key or a null + * value is explicitly associated with the key. + * + * @param key a String, or null + * @return an int[] value, or null + */ + public int[] getIntArray(String key) { + Object o = mMap.get(key); + if (o == null) { + return null; + } + try { + return (int[])o; + } catch (ClassCastException e) { + typeWarning(key, o, "int[]", e); + return null; + } + } } diff --git a/src/api-impl/android/os/Bundle.java b/src/api-impl/android/os/Bundle.java index 0ce6ea09..8ea63746 100644 --- a/src/api-impl/android/os/Bundle.java +++ b/src/api-impl/android/os/Bundle.java @@ -1042,27 +1042,6 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { } } - /** - * Returns the value associated with the given key, or null if - * no mapping of the desired type exists for the given key or a null - * value is explicitly associated with the key. - * - * @param key a String, or null - * @return an int[] value, or null - */ - public int[] getIntArray(String key) { - Object o = mMap.get(key); - if (o == null) { - return null; - } - try { - return (int[])o; - } catch (ClassCastException e) { - typeWarning(key, o, "int[]", e); - return null; - } - } - /** * Returns the value associated with the given key, or null if * no mapping of the desired type exists for the given key or a null diff --git a/src/api-impl/android/os/VibrationEffect.java b/src/api-impl/android/os/VibrationEffect.java new file mode 100644 index 00000000..e525a09f --- /dev/null +++ b/src/api-impl/android/os/VibrationEffect.java @@ -0,0 +1,13 @@ +package android.os; + +public class VibrationEffect { + + public static VibrationEffect createOneShot(long milliseconds, int amplitude) { + return new VibrationEffect(); + } + + public static VibrationEffect createWaveform(long[] pattern, int repeat) { + return new VibrationEffect(); + } + +} diff --git a/src/api-impl/android/text/Html.java b/src/api-impl/android/text/Html.java index b6eeeaeb..b1a7de81 100644 --- a/src/api-impl/android/text/Html.java +++ b/src/api-impl/android/text/Html.java @@ -21,6 +21,10 @@ public class Html { // TODO when JTidy is in use: s/
//g } + public static Spanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler) { + return fromHtml(source, 0); + } + public static String escapeHtml(CharSequence source) { StringBuilder out = new StringBuilder(source.length()); for (int i = 0; i < source.length(); i++) { diff --git a/src/api-impl/android/text/StaticLayout.java b/src/api-impl/android/text/StaticLayout.java index 438a2ad8..d99b02ca 100644 --- a/src/api-impl/android/text/StaticLayout.java +++ b/src/api-impl/android/text/StaticLayout.java @@ -11,14 +11,38 @@ public class StaticLayout extends Layout { super(source, paint, outerwidth, align, spacingmult, spacingadd); } - public int getWidth() { - return 200; // arbitrary value for stub method - } + public static class Builder { + private StaticLayout layout; - public int getHeight() { - return 50; // arbitrary value for stub method - } + public static Builder obtain(CharSequence source, int bufstart, int bufend, TextPaint paint, int outerwidth) { + Builder builder = new Builder(); + builder.layout = new StaticLayout(source, bufstart, bufend, paint, outerwidth, null, null, 0, 0, false, null, 0, 0); + return builder; + } - public float getLineLeft(int line) {return 0;} + public Builder setTextDirection(TextDirectionHeuristic textDir) {return this;} + + public Builder setAlignment(Alignment align) {return this;} + + public Builder setMaxLines(int maxLines) {return this;} + + public Builder setEllipsize(TextUtils.TruncateAt ellipsize) {return this;} + + public Builder setEllipsizedWidth(int ellipsizedWidth) {return this;} + + public Builder setLineSpacing(float add, float mult) {return this;} + + public Builder setIncludePad(boolean includepad) {return this;} + + public Builder setBreakStrategy(int strategy) {return this;} + + public Builder setHyphenationFrequency(int hyphenationFrequency) {return this;} + + public Builder setIndents(int[] indents, int[] widths) {return this;} + + public Builder setJustificationMode(int mode) {return this;} + + public StaticLayout build() {return layout;} + } } diff --git a/src/api-impl/android/view/MotionEvent.java b/src/api-impl/android/view/MotionEvent.java index 95ca705b..7876cf80 100644 --- a/src/api-impl/android/view/MotionEvent.java +++ b/src/api-impl/android/view/MotionEvent.java @@ -2727,7 +2727,8 @@ public final class MotionEvent extends InputEvent { * Sets this event's action. */ public final void setAction(int action) { - nativeSetAction(mNativePtr, action); + // nativeSetAction(mNativePtr, action); + this.action = action; } /** diff --git a/src/api-impl/android/view/PointerIcon.java b/src/api-impl/android/view/PointerIcon.java new file mode 100644 index 00000000..32b9c746 --- /dev/null +++ b/src/api-impl/android/view/PointerIcon.java @@ -0,0 +1,10 @@ +package android.view; + +import android.content.Context; + +public class PointerIcon { + + public static PointerIcon getSystemIcon(Context context, int resId) { + return new PointerIcon(); + } +} diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index e6b28c1f..9fc14084 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -1120,6 +1120,7 @@ public class View implements Drawable.Callback { public void setOnKeyListener(OnKeyListener l) {} public void setFocusable(boolean focusable) {} + public void setFocusable(int focusable) {} public void setFocusableInTouchMode(boolean focusableInTouchMode) {} public final boolean requestFocus() { return requestFocus(View.FOCUS_DOWN); @@ -2088,4 +2089,12 @@ public class View implements Drawable.Callback { public boolean requestRectangleOnScreen(Rect rectangle) {return false;} public boolean dispatchKeyEvent(KeyEvent event) {return false;} + + public WindowInsets getRootWindowInsets() {return null;} + + public PointerIcon getPointerIcon() {return null;} + + public void setPointerIcon(PointerIcon pointerIcon) {} + + public IBinder getApplicationWindowToken() {return null;} } diff --git a/src/api-impl/android/view/ViewConfiguration.java b/src/api-impl/android/view/ViewConfiguration.java index dd26f3a1..5ab96e69 100644 --- a/src/api-impl/android/view/ViewConfiguration.java +++ b/src/api-impl/android/view/ViewConfiguration.java @@ -62,4 +62,12 @@ public class ViewConfiguration { public float getScaledVerticalScrollFactor() { return 1; } + + public static int getScrollBarFadeDuration() { + return 100; + } + + public static int getScrollDefaultDelay() { + return 16; + } } diff --git a/src/api-impl/android/view/ViewGroup.java b/src/api-impl/android/view/ViewGroup.java index 6dffc52a..fcccc9a6 100644 --- a/src/api-impl/android/view/ViewGroup.java +++ b/src/api-impl/android/view/ViewGroup.java @@ -403,6 +403,12 @@ public class ViewGroup extends View implements ViewParent, ViewManager { public boolean shouldDelayChildPressedState() { return false; } + public void removeAllViewsInLayout() { + for (int i = getChildCount() - 1; i >= 0; i--) { + removeViewInLayout(getChildAt(i)); + } + } + public static class LayoutParams { public static final int FILL_PARENT = -1; public static final int MATCH_PARENT = -1; diff --git a/src/api-impl/android/view/WindowManager.java b/src/api-impl/android/view/WindowManager.java index 25136c9b..d1b0f808 100644 --- a/src/api-impl/android/view/WindowManager.java +++ b/src/api-impl/android/view/WindowManager.java @@ -1,5 +1,7 @@ package android.view; +import android.os.IBinder; + public interface WindowManager { public android.view.Display getDefaultDisplay(); @@ -15,11 +17,16 @@ public interface WindowManager { public int windowAnimations; public int flags; public float alpha; + public int type; + public IBinder token; + public int format; public LayoutParams(int w, int h, int type, int flags, int format) { super(w, h); } public LayoutParams() {} + + public void setTitle(CharSequence title) {} } } diff --git a/src/api-impl/android/view/WindowManagerImpl.java b/src/api-impl/android/view/WindowManagerImpl.java index 87c51fdf..624c82b8 100644 --- a/src/api-impl/android/view/WindowManagerImpl.java +++ b/src/api-impl/android/view/WindowManagerImpl.java @@ -12,8 +12,7 @@ public class WindowManagerImpl implements WindowManager, ViewManager { @Override public void updateViewLayout(View view, android.view.ViewGroup.LayoutParams params) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'updateViewLayout'"); + System.out.println("WindowManagerImpl.updateViewLayout(" + view + ", " + params + ") called"); } @Override diff --git a/src/api-impl/android/view/autofill/AutofillManager.java b/src/api-impl/android/view/autofill/AutofillManager.java new file mode 100644 index 00000000..620801bf --- /dev/null +++ b/src/api-impl/android/view/autofill/AutofillManager.java @@ -0,0 +1,8 @@ +package android.view.autofill; + +public class AutofillManager { + + public static abstract class AutofillCallback {} + + public void registerCallback(AutofillCallback callback) {} +} diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index 47b2fca9..50d98eca 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -41,6 +41,7 @@ srcs = [ 'android/app/ListActivity.java', 'android/app/NativeActivity.java', 'android/app/Notification.java', + 'android/app/NotificationChannel.java', 'android/app/NotificationManager.java', 'android/app/PendingIntent.java', 'android/app/ProgressDialog.java', @@ -179,6 +180,7 @@ srcs = [ 'android/graphics/ColorFilter.java', 'android/graphics/ColorMatrix.java', 'android/graphics/ColorMatrixColorFilter.java', + 'android/graphics/ColorSpace.java', 'android/graphics/CornerPathEffect.java', 'android/graphics/DashPathEffect.java', 'android/graphics/GskCanvas.java', @@ -210,6 +212,7 @@ srcs = [ 'android/graphics/drawable/DrawableContainer.java', 'android/graphics/drawable/DrawableWrapper.java', 'android/graphics/drawable/GradientDrawable.java', + 'android/graphics/drawable/Icon.java', 'android/graphics/drawable/InsetDrawable.java', 'android/graphics/drawable/LayerDrawable.java', 'android/graphics/drawable/NinePatchDrawable.java', @@ -318,6 +321,7 @@ srcs = [ 'android/os/Trace.java', 'android/os/UserHandle.java', 'android/os/UserManager.java', + 'android/os/VibrationEffect.java', 'android/os/Vibrator.java', 'android/os/storage/StorageManager.java', 'android/preference/PreferenceActivity.java', @@ -447,6 +451,7 @@ srcs = [ 'android/view/MenuInflater.java', 'android/view/MenuItem.java', 'android/view/MotionEvent.java', + 'android/view/PointerIcon.java', 'android/view/ScaleGestureDetector.java', 'android/view/SubMenu.java', 'android/view/Surface.java', @@ -487,6 +492,7 @@ srcs = [ 'android/view/animation/PathInterpolator.java', 'android/view/animation/ScaleAnimation.java', 'android/view/animation/TranslateAnimation.java', + 'android/view/autofill/AutofillManager.java', 'android/view/inputmethod/BaseInputConnection.java', 'android/view/inputmethod/CursorAnchorInfo.java', 'android/view/inputmethod/InputConnection.java',