diff --git a/src/api-impl-jni/app/android_app_Activity.c b/src/api-impl-jni/app/android_app_Activity.c index 185626c8..3b08508e 100644 --- a/src/api-impl-jni/app/android_app_Activity.c +++ b/src/api-impl-jni/app/android_app_Activity.c @@ -113,6 +113,8 @@ void activity_close_all(void) g_list_free(activities); } +static jobject activity_not_created = NULL; + void _activity_start(JNIEnv *env, jobject activity_object, bool recreate) { /* -- run the activity's onCreate -- */ @@ -120,6 +122,12 @@ void _activity_start(JNIEnv *env, jobject activity_object, bool recreate) if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); + if ((*env)->IsSameObject(env, activity_object, activity_not_created)) { // finish() was called before the activity was created + _UNREF(activity_not_created); + activity_not_created = NULL; + return; + } + if(recreate) // only allowed for toplevel, so we know for sure where in the stack it belongs activity_backlog = g_list_append(activity_backlog, _REF(activity_object)); else @@ -146,9 +154,12 @@ JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish(JNIEnv *env, jobje } } activity_update_current(env); - activity_close(env, this); - if (removed_activity) + if (removed_activity) { + activity_close(env, removed_activity); _UNREF(removed_activity); + } else { + activity_not_created = _REF(this); + } if (activity_backlog == NULL && window) gtk_window_close(GTK_WINDOW(_PTR(window))); } diff --git a/src/api-impl-jni/graphics/android_graphics_Matrix.c b/src/api-impl-jni/graphics/android_graphics_Matrix.c index 590e9d5c..a19fa885 100644 --- a/src/api-impl-jni/graphics/android_graphics_Matrix.c +++ b/src/api-impl-jni/graphics/android_graphics_Matrix.c @@ -190,6 +190,8 @@ JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1mapPoints(JNIEnv *en dst[dst_idx + i * 2] = res.x; dst[dst_idx + i * 2 + 1] = res.y; } + (*env)->ReleaseFloatArrayElements(env, src_ref, src, 0); + (*env)->ReleaseFloatArrayElements(env, dst_ref, dst, 0); } JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setTranslate(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y) @@ -213,3 +215,12 @@ JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1invert(JNIEnv *e { return graphene_matrix_inverse((graphene_matrix_t *)_PTR(matrix_ptr), (graphene_matrix_t *)_PTR(inverse_ptr)); } + +JNIEXPORT jboolean JNICALL Java_android_graphics_Matrix_native_1preScale__JFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat x, jfloat y) +{ + graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr); + graphene_matrix_t scale; + graphene_matrix_init_scale(&scale, x, y, 1); + graphene_matrix_multiply(&scale, matrix, matrix); + return true; +} diff --git a/src/api-impl/android/animation/Animator.java b/src/api-impl/android/animation/Animator.java index ff03ced1..a4ddf6c5 100644 --- a/src/api-impl/android/animation/Animator.java +++ b/src/api-impl/android/animation/Animator.java @@ -18,5 +18,13 @@ public class Animator { public void addListener(AnimatorListener listener) { this.listener = listener; } - + + public void cancel() {} + + public long getStartDelay() { return 0; } + + public long getDuration() { return 0; } + + public Animator setDuration(long duration) { return this; } + } diff --git a/src/api-impl/android/animation/AnimatorSet.java b/src/api-impl/android/animation/AnimatorSet.java index f4abb6d6..17246967 100644 --- a/src/api-impl/android/animation/AnimatorSet.java +++ b/src/api-impl/android/animation/AnimatorSet.java @@ -1,5 +1,7 @@ package android.animation; +import java.util.Collection; + public class AnimatorSet extends Animator { public class Builder { @@ -17,4 +19,14 @@ public class AnimatorSet extends Animator { public void playSequentially(Animator[] animators) {} + public boolean isStarted() { + return false; + } + + public void playTogether(Collection animators) {} + + public AnimatorSet setDuration(long duration) { return this; } + + public void playTogether(Animator[] animators) {} + } diff --git a/src/api-impl/android/animation/ObjectAnimator.java b/src/api-impl/android/animation/ObjectAnimator.java index 8705d064..d53e69c0 100644 --- a/src/api-impl/android/animation/ObjectAnimator.java +++ b/src/api-impl/android/animation/ObjectAnimator.java @@ -16,6 +16,10 @@ public class ObjectAnimator extends ValueAnimator { return new ObjectAnimator(); } + public static ObjectAnimator ofInt(T target, String propertyName, int... values) { + return new ObjectAnimator(); + } + public ObjectAnimator setDuration(long duration) {return this;} public void setAutoCancel(boolean autoCancel) {} diff --git a/src/api-impl/android/animation/ValueAnimator.java b/src/api-impl/android/animation/ValueAnimator.java index a7c7b684..09cc337f 100644 --- a/src/api-impl/android/animation/ValueAnimator.java +++ b/src/api-impl/android/animation/ValueAnimator.java @@ -12,6 +12,10 @@ public class ValueAnimator extends Animator { return new ValueAnimator(); } + public static ValueAnimator ofInt(int... values) { + return new ValueAnimator(); + } + public ValueAnimator setDuration(long duration) { return this; } @@ -38,6 +42,7 @@ public class ValueAnimator extends Animator { public void setRepeatCount(int value) {} public void setRepeatMode(int value) {} public void cancel() {} + public void setEvaluator(TypeEvaluator evaluator) {} /** * Implementors of this interface can add themselves as update listeners diff --git a/src/api-impl/android/app/Dialog.java b/src/api-impl/android/app/Dialog.java index b529d2ff..2f40b641 100644 --- a/src/api-impl/android/app/Dialog.java +++ b/src/api-impl/android/app/Dialog.java @@ -62,13 +62,18 @@ public class Dialog implements Window.Callback, DialogInterface { public void show() { System.out.println("showing the Dialog " + this); - new Handler(Looper.getMainLooper()).post(new Runnable() { + Runnable action = new Runnable() { @Override public void run() { onCreate(null); nativeShow(nativePtr); } - }); + }; + if(Looper.myLooper() == Looper.getMainLooper()) { + action.run(); + } else { + new Handler(Looper.getMainLooper()).post(action); + } } public boolean isShowing() { @@ -142,4 +147,9 @@ public class Dialog implements Window.Callback, DialogInterface { System.out.println("hiding the Dialog " + this); nativeClose(nativePtr); } + + @Override + public void cancel() { + dismiss(); + } } diff --git a/src/api-impl/android/content/ContentResolver.java b/src/api-impl/android/content/ContentResolver.java index 11eba758..a3718049 100644 --- a/src/api-impl/android/content/ContentResolver.java +++ b/src/api-impl/android/content/ContentResolver.java @@ -7,6 +7,7 @@ import android.database.AbstractCursor; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; +import android.os.CancellationSignal; import android.os.ParcelFileDescriptor; public class ContentResolver { @@ -39,4 +40,8 @@ public class ContentResolver { public boolean isNull(int column) { throw new IndexOutOfBoundsException(); } }; } + + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) { + return query(uri, projection, selection, selectionArgs, sortOrder); + } } diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index a3baf4e8..5f751538 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -26,6 +26,7 @@ import android.media.MediaRouter; import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; +import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Looper; @@ -443,6 +444,10 @@ public class Context extends Object { } } + public void startActivity(Intent intent, Bundle options) { + startActivity(intent); + } + public final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) { return getTheme().obtainStyledAttributes(set, attrs, 0, 0); } diff --git a/src/api-impl/android/content/DialogInterface.java b/src/api-impl/android/content/DialogInterface.java index 5b510dc1..bc42f158 100644 --- a/src/api-impl/android/content/DialogInterface.java +++ b/src/api-impl/android/content/DialogInterface.java @@ -10,6 +10,8 @@ public interface DialogInterface { public void dismiss(); + public void cancel(); + public interface OnDismissListener { void onDismiss(DialogInterface dialog); } diff --git a/src/api-impl/android/content/pm/PackageManager.java b/src/api-impl/android/content/pm/PackageManager.java index 785142af..1e340975 100644 --- a/src/api-impl/android/content/pm/PackageManager.java +++ b/src/api-impl/android/content/pm/PackageManager.java @@ -35,6 +35,7 @@ import android.util.DisplayMetrics; import android.util.Slog; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.reandroid.arsc.chunk.xml.AndroidManifestBlock; @@ -2226,7 +2227,9 @@ public class PackageManager { */ public List queryIntentActivities(Intent intent, int flags) { - return new ArrayList(); + ResolveInfo info = new ResolveInfo(); + info.activityInfo.exported = true; + return Arrays.asList(info); } /** diff --git a/src/api-impl/android/content/pm/ResolveInfo.java b/src/api-impl/android/content/pm/ResolveInfo.java index fee47344..252eac1c 100644 --- a/src/api-impl/android/content/pm/ResolveInfo.java +++ b/src/api-impl/android/content/pm/ResolveInfo.java @@ -2,4 +2,10 @@ package android.content.pm; public class ResolveInfo { public ActivityInfo activityInfo = new ActivityInfo(); + + public static class DisplayNameComparator { + + public DisplayNameComparator(PackageManager pm) {} + + } } diff --git a/src/api-impl/android/graphics/BitmapShader.java b/src/api-impl/android/graphics/BitmapShader.java new file mode 100644 index 00000000..367d1a51 --- /dev/null +++ b/src/api-impl/android/graphics/BitmapShader.java @@ -0,0 +1,8 @@ +package android.graphics; + +public class BitmapShader extends Shader { + + public BitmapShader(Bitmap bitmap, TileMode tileX, TileMode tileY) {} + + public void setLocalMatrix(Matrix matrix) {} +} diff --git a/src/api-impl/android/graphics/Canvas.java b/src/api-impl/android/graphics/Canvas.java index b647f669..d3bd2480 100644 --- a/src/api-impl/android/graphics/Canvas.java +++ b/src/api-impl/android/graphics/Canvas.java @@ -402,6 +402,20 @@ public class Canvas { public void drawCircle(float cx, float cy, float radius, Paint paint) {} + public Rect getClipBounds() { + return new Rect(0, 0, 10, 10); + } + + public boolean clipRect(Rect rect, Region.Op op) { + return false; + } + + public void concat(Matrix matrix) {} + + public boolean clipPath(Path path, Region.Op op) { + return false; + } + private static native long native_canvas_from_bitmap(long pixbuf); private static native void native_save(long skia_canvas, long widget); diff --git a/src/api-impl/android/graphics/LinearGradient.java b/src/api-impl/android/graphics/LinearGradient.java new file mode 100644 index 00000000..42e112cc --- /dev/null +++ b/src/api-impl/android/graphics/LinearGradient.java @@ -0,0 +1,6 @@ +package android.graphics; + +public class LinearGradient extends Shader { + + public LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, TileMode mode) {} +} diff --git a/src/api-impl/android/graphics/Paint.java b/src/api-impl/android/graphics/Paint.java index fed318c8..d2e7cc47 100644 --- a/src/api-impl/android/graphics/Paint.java +++ b/src/api-impl/android/graphics/Paint.java @@ -209,6 +209,12 @@ public class Paint { private Join(int nativeInt) {} } + public enum Align { + CENTER, + LEFT, + RIGHT, + } + public void setStrokeCap(Cap cap) {} public void setStrokeJoin(Join join) {} @@ -217,6 +223,12 @@ public class Paint { return new Typeface(); } + public void setTextAlign(Align align) {} + + public Shader getShader() { + return new Shader(); + } + private native long native_constructor(); private native void native_set_color(long skia_paint, int color); private native int native_get_color(long skia_paint); diff --git a/src/api-impl/android/graphics/RadialGradient.java b/src/api-impl/android/graphics/RadialGradient.java new file mode 100644 index 00000000..d5ff7f47 --- /dev/null +++ b/src/api-impl/android/graphics/RadialGradient.java @@ -0,0 +1,6 @@ +package android.graphics; + +public class RadialGradient extends Shader { + + public RadialGradient(float x, float y, float radius, int[] colors, float[] positions, android.graphics.Shader.TileMode tileMode) {} +} diff --git a/src/api-impl/android/graphics/Shader.java b/src/api-impl/android/graphics/Shader.java index d92f90f9..1b30dbdb 100644 --- a/src/api-impl/android/graphics/Shader.java +++ b/src/api-impl/android/graphics/Shader.java @@ -1,5 +1,11 @@ package android.graphics; public class Shader { - + + public enum TileMode { + CLAMP, + MIRROR, + REPEAT + } + } diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java index 8d4173af..796c496f 100644 --- a/src/api-impl/android/graphics/drawable/Drawable.java +++ b/src/api-impl/android/graphics/drawable/Drawable.java @@ -60,7 +60,10 @@ public class Drawable { } public void setBounds(int left, int top, int right, int bottom) { + boolean changed = left != mBounds.left || top != mBounds.top || right != mBounds.right || bottom != mBounds.bottom; mBounds.set(left, top, right, bottom); + if (changed) + onBoundsChange(mBounds); } public final Rect getBounds() { @@ -206,6 +209,8 @@ public class Drawable { bounds.set(mBounds); } + protected void onBoundsChange(Rect bounds) {} + protected static native long native_paintable_from_path(String path); protected native long native_constructor(); } diff --git a/src/api-impl/android/graphics/drawable/shapes/Shape.java b/src/api-impl/android/graphics/drawable/shapes/Shape.java index e8a607f2..b6922f3d 100644 --- a/src/api-impl/android/graphics/drawable/shapes/Shape.java +++ b/src/api-impl/android/graphics/drawable/shapes/Shape.java @@ -1,4 +1,10 @@ package android.graphics.drawable.shapes; +import android.graphics.RectF; + public class Shape { + + protected RectF rect() { + return new RectF(); + } } diff --git a/src/api-impl/android/net/Uri.java b/src/api-impl/android/net/Uri.java index 501d08ec..427bb113 100644 --- a/src/api-impl/android/net/Uri.java +++ b/src/api-impl/android/net/Uri.java @@ -20,7 +20,7 @@ public class Uri implements Parcelable { public static Uri parse(String s) { Uri ret = new Uri(); try { - ret.uri = URI.create(s); + ret.uri = URI.create(s.trim()); } catch (IllegalArgumentException e) { } return ret; @@ -145,15 +145,22 @@ public class Uri implements Parcelable { } public Builder buildUpon() { - return new Builder(); + Builder builder = new Builder(); + builder.scheme = getScheme(); + builder.authority = getAuthority(); + builder.path = getPath(); + builder.query = uri.getQuery(); + return builder; } public static final class Builder { private String scheme; private String authority; private String path; + private String query; public Builder appendQueryParameter(String key, String value) { + this.query = (this.query != null ? this.query + "&" : "") + key + "=" + value; return this; } @@ -172,6 +179,11 @@ public class Uri implements Parcelable { return this; } + public Builder appendPath(String path) { + this.path = (this.path != null ? this.path : "") + "/" + path; + return this; + } + public Uri build() throws URISyntaxException { if ("content".equals(scheme)) { // hack: content providers not yet supported scheme = "file"; @@ -179,9 +191,17 @@ public class Uri implements Parcelable { path = path.substring(path.indexOf("/")); } Uri ret = new Uri(); - ret.uri = new URI(scheme, authority, path, null, null); + ret.uri = new URI(scheme, authority, path, query, null); return ret; } + + public String toString() { + try { + return build().toString(); + } catch (URISyntaxException e) { + return super.toString(); + } + } } public String getScheme() { @@ -211,4 +231,13 @@ public class Uri implements Parcelable { String[] segments = uri.getPath().split("/"); return segments[segments.length - 1]; } + + public String getQueryParameter(String key) { + for (String pair : uri.getQuery().split("&")) { + if (pair.startsWith(key + "=")) { + return pair.substring(key.length() + 1); + } + } + return null; + } } diff --git a/src/api-impl/android/provider/BaseColumns.java b/src/api-impl/android/provider/BaseColumns.java new file mode 100644 index 00000000..06aecd2d --- /dev/null +++ b/src/api-impl/android/provider/BaseColumns.java @@ -0,0 +1,3 @@ +package android.provider; + +public interface BaseColumns {} diff --git a/src/api-impl/android/text/TextUtils.java b/src/api-impl/android/text/TextUtils.java index 07474f42..96791751 100644 --- a/src/api-impl/android/text/TextUtils.java +++ b/src/api-impl/android/text/TextUtils.java @@ -62,7 +62,7 @@ public class TextUtils { } public static boolean isEmpty(CharSequence str) { - return str == null || str.equals(""); + return str == null || str.length() == 0; } /** diff --git a/src/api-impl/android/text/format/Formatter.java b/src/api-impl/android/text/format/Formatter.java new file mode 100644 index 00000000..909a2612 --- /dev/null +++ b/src/api-impl/android/text/format/Formatter.java @@ -0,0 +1,10 @@ +package android.text.format; + +import android.content.Context; + +public class Formatter { + + public static String formatShortFileSize(Context context, long size) { + return String.valueOf(size); + } +} diff --git a/src/api-impl/android/view/Menu.java b/src/api-impl/android/view/Menu.java index 659f3443..5adbed0a 100644 --- a/src/api-impl/android/view/Menu.java +++ b/src/api-impl/android/view/Menu.java @@ -23,4 +23,12 @@ public interface Menu { public void setGroupCheckable(int group, boolean checkable, boolean exclusive); public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title); + + public void setGroupVisible(int group, boolean visible); + + public void removeItem(int id); + + public int size(); + + public boolean hasVisibleItems(); } diff --git a/src/api-impl/android/view/MenuItem.java b/src/api-impl/android/view/MenuItem.java index 852ce7a7..29cd18c3 100644 --- a/src/api-impl/android/view/MenuItem.java +++ b/src/api-impl/android/view/MenuItem.java @@ -8,6 +8,8 @@ public interface MenuItem { public boolean onMenuItemClick(MenuItem item); } + public interface OnActionExpandListener {} + public MenuItem setIcon(int iconRes); public MenuItem setVisible(boolean visible); @@ -40,4 +42,12 @@ public interface MenuItem { public SubMenu getSubMenu(); + public MenuItem setActionView(int resId); + + public View getActionView(); + + public boolean hasSubMenu(); + + public MenuItem setOnActionExpandListener(OnActionExpandListener listener); + } \ No newline at end of file diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index a8477011..c0a76d3e 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -826,6 +826,20 @@ public class View implements Drawable.Callback { private int minWidth = 0; private int minHeight = 0; + public static final Property TRANSLATION_X = new Property(Float.class, "translationX") { + @Override + public Float get(View object) { + return 0.f; + } + }; + + public static final Property TRANSLATION_Y = new Property(Float.class, "translationY") { + @Override + public Float get(View object) { + return 0.f; + } + }; + public static final Property TRANSLATION_Z = new Property(Float.class, "translationZ") { @Override public Float get(View object) { @@ -833,6 +847,13 @@ public class View implements Drawable.Callback { } }; + public static final Property ALPHA = new Property(Float.class, "alpha") { + @Override + public Float get(View object) { + return 0.f; + } + }; + public View(Context context, AttributeSet attrs) { this(context, attrs, 0); } @@ -953,9 +974,7 @@ public class View implements Drawable.Callback { // --- stubs - public void setContentDescription(CharSequence contentDescription) { - Slog.w(TAG, "setContentDescription called with: >" + contentDescription + "<"); - } + public void setContentDescription(CharSequence contentDescription) {} public void setId(int id) { this.id = id; @@ -998,9 +1017,7 @@ public class View implements Drawable.Callback { } } - public void setSelected(boolean selected) { - Slog.w(TAG, "calling setSelected on " + this + " with value: " + selected); - } + public void setSelected(boolean selected) {} public ViewTreeObserver getViewTreeObserver() { return new ViewTreeObserver(); @@ -1146,7 +1163,9 @@ public class View implements Drawable.Callback { public void setAccessibilityDelegate(AccessibilityDelegate delegate) {} - public static class AccessibilityDelegate {} + public static class AccessibilityDelegate { + public void sendAccessibilityEvent(View view, int eventType) {} + } public Drawable getBackground() { return background; @@ -1419,6 +1438,10 @@ public class View implements Drawable.Callback { protected static final int[] EMPTY_STATE_SET = new int[0]; + protected static final int[] PRESSED_ENABLED_STATE_SET = new int[]{R.attr.state_pressed, R.attr.state_enabled}; + + protected static final int[] SELECTED_STATE_SET = new int[]{R.attr.state_selected}; + /** * Utility to return a default size. Uses the supplied size if the * MeasureSpec imposed no constraints. Will get larger if allowed @@ -1687,4 +1710,8 @@ public class View implements Drawable.Callback { public void setHapticFeedbackEnabled(boolean hapticFeedbackEnabled) {} public StateListAnimator getStateListAnimator() {return null;} + + public void requestFitSystemWindows() {} + + public boolean isPressed() {return false;} } diff --git a/src/api-impl/android/view/ViewStub.java b/src/api-impl/android/view/ViewStub.java index b7c640aa..626ae197 100644 --- a/src/api-impl/android/view/ViewStub.java +++ b/src/api-impl/android/view/ViewStub.java @@ -10,10 +10,12 @@ public class ViewStub extends View { public ViewStub(Context context) { this(context, null, 0); + haveCustomMeasure = false; } public ViewStub(Context context, AttributeSet attributeSet) { this(context, attributeSet, 0); + haveCustomMeasure = false; } public ViewStub(Context context, AttributeSet attributeSet, int defStyle) { diff --git a/src/api-impl/android/widget/FilterQueryProvider.java b/src/api-impl/android/widget/FilterQueryProvider.java new file mode 100644 index 00000000..42366930 --- /dev/null +++ b/src/api-impl/android/widget/FilterQueryProvider.java @@ -0,0 +1,3 @@ +package android.widget; + +public interface FilterQueryProvider {} diff --git a/src/api-impl/android/widget/Filterable.java b/src/api-impl/android/widget/Filterable.java new file mode 100644 index 00000000..bc158533 --- /dev/null +++ b/src/api-impl/android/widget/Filterable.java @@ -0,0 +1,3 @@ +package android.widget; + +public interface Filterable {} diff --git a/src/api-impl/android/widget/HorizontalScrollView.java b/src/api-impl/android/widget/HorizontalScrollView.java index 4ff7d615..49e12e4e 100644 --- a/src/api-impl/android/widget/HorizontalScrollView.java +++ b/src/api-impl/android/widget/HorizontalScrollView.java @@ -15,4 +15,6 @@ public class HorizontalScrollView extends FrameLayout { public void setHorizontalScrollBarEnabled(boolean enabled) {} + public void smoothScrollTo(int x, int y) {} + } diff --git a/src/api-impl/android/widget/ImageView.java b/src/api-impl/android/widget/ImageView.java index 5c1ca0f6..9b9b7c49 100644 --- a/src/api-impl/android/widget/ImageView.java +++ b/src/api-impl/android/widget/ImageView.java @@ -153,4 +153,6 @@ public class ImageView extends View { public void setMaxWidth(int width) {} public void setMaxHeight(int height) {} + + public void setImageState(int[] state, boolean merge) {} } diff --git a/src/api-impl/android/widget/PopupMenu.java b/src/api-impl/android/widget/PopupMenu.java index 53b60163..a7ac697f 100644 --- a/src/api-impl/android/widget/PopupMenu.java +++ b/src/api-impl/android/widget/PopupMenu.java @@ -280,6 +280,30 @@ public class PopupMenu { submenu.item.setVisible(true); return submenu; } + + @Override + public void setGroupVisible(int group, boolean visible) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'setGroupVisible'"); + } + + @Override + public void removeItem(int id) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'removeItem'"); + } + + @Override + public int size() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'size'"); + } + + @Override + public boolean hasVisibleItems() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'hasVisibleItems'"); + } } private class SubMenuImpl extends MenuImpl implements SubMenu { @@ -423,6 +447,30 @@ public class PopupMenu { public SubMenu getSubMenu() { return subMenu; } + + @Override + public MenuItem setActionView(int resId) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'setActionView'"); + } + + @Override + public View getActionView() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getActionView'"); + } + + @Override + public boolean hasSubMenu() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'hasSubMenu'"); + } + + @Override + public MenuItem setOnActionExpandListener(OnActionExpandListener listener) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'setOnActionExpandListener'"); + } } } \ No newline at end of file diff --git a/src/api-impl/android/widget/ProgressBar.java b/src/api-impl/android/widget/ProgressBar.java index eccc4e2c..82e7e779 100644 --- a/src/api-impl/android/widget/ProgressBar.java +++ b/src/api-impl/android/widget/ProgressBar.java @@ -11,6 +11,7 @@ public class ProgressBar extends View { protected int max = 100; protected int progress = 0; + private Drawable indeterminateDrawable; public ProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); @@ -45,13 +46,7 @@ public class ProgressBar extends View { } public Drawable getIndeterminateDrawable() { - return new Drawable() { - @Override - public void draw(Canvas canvas) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'draw'"); - } - }; + return indeterminateDrawable; } public void setMax(int max) { @@ -73,4 +68,8 @@ public class ProgressBar extends View { public int getProgress() { return progress; } + + public void setIndeterminateDrawable(Drawable indeterminateDrawable) { + this.indeterminateDrawable = indeterminateDrawable; + } } diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 4a5b1ad3..60365b9a 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -233,4 +233,10 @@ public class TextView extends View { public void setCompoundDrawablesRelativeWithIntrinsicBounds(int start, int top, int end, int bottom) {} public boolean getLinksClickable() {return true;} + + public boolean isTextSelectable() {return true;} + + public void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) {} + + public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {} } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index 2f21cb00..1f9b192a 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -159,10 +159,12 @@ hax_jar = jar('hax', [ 'android/gesture/GestureStore.java', 'android/graphics/Bitmap.java', 'android/graphics/BitmapFactory.java', + 'android/graphics/BitmapShader.java', 'android/graphics/Canvas.java', 'android/graphics/Color.java', 'android/graphics/ColorFilter.java', 'android/graphics/GskCanvas.java', + 'android/graphics/LinearGradient.java', 'android/graphics/Matrix.java', 'android/graphics/Paint.java', 'android/graphics/Path.java', @@ -171,6 +173,7 @@ hax_jar = jar('hax', [ 'android/graphics/PorterDuff.java', 'android/graphics/PorterDuffColorFilter.java', 'android/graphics/PorterDuffXfermode.java', + 'android/graphics/RadialGradient.java', 'android/graphics/Rect.java', 'android/graphics/RectF.java', 'android/graphics/Region.java', @@ -281,6 +284,7 @@ hax_jar = jar('hax', [ 'android/os/storage/StorageManager.java', 'android/preference/PreferenceManager.java', 'android/print/PrintManager.java', + 'android/provider/BaseColumns.java', 'android/provider/Settings.java', 'android/telecom/TelecomManager.java', 'android/telephony/PhoneStateListener.java', @@ -306,6 +310,7 @@ hax_jar = jar('hax', [ 'android/text/TextPaint.java', 'android/text/TextUtils.java', 'android/text/TextWatcher.java', + 'android/text/format/Formatter.java', 'android/text/method/KeyListener.java', 'android/text/method/LinkMovementMethod.java', 'android/text/method/MovementMethod.java', @@ -422,6 +427,8 @@ hax_jar = jar('hax', [ 'android/widget/EdgeEffect.java', 'android/widget/EditText.java', 'android/widget/Filter.java', + 'android/widget/Filterable.java', + 'android/widget/FilterQueryProvider.java', 'android/widget/FrameLayout.java', 'android/widget/HeaderViewListAdapter.java', 'android/widget/HorizontalScrollView.java',