diff --git a/src/api-impl/android/graphics/Typeface.java b/src/api-impl/android/graphics/Typeface.java
index 342ed8a3..153648ba 100644
--- a/src/api-impl/android/graphics/Typeface.java
+++ b/src/api-impl/android/graphics/Typeface.java
@@ -34,6 +34,7 @@ public class Typeface {
public static final int BOLD_ITALIC = 3;
public long skia_typeface = 0;
+ public long native_instance = 0; // directly accessed by androidx
public static Typeface createFromAsset(AssetManager mgr, String path) {
return DEFAULT;
diff --git a/src/api-impl/android/graphics/drawable/ColorDrawable.java b/src/api-impl/android/graphics/drawable/ColorDrawable.java
index 3c725f96..67989c39 100644
--- a/src/api-impl/android/graphics/drawable/ColorDrawable.java
+++ b/src/api-impl/android/graphics/drawable/ColorDrawable.java
@@ -22,4 +22,9 @@ public class ColorDrawable extends Drawable {
public void draw(Canvas canvas) {
canvas.drawRect(getBounds(), paint);
}
+
+ public void setColor(int color) {
+ this.color = color;
+ paint.setColor(color);
+ }
}
diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java
index 45edf776..c20c6154 100644
--- a/src/api-impl/android/graphics/drawable/Drawable.java
+++ b/src/api-impl/android/graphics/drawable/Drawable.java
@@ -62,6 +62,8 @@ public class Drawable {
public abstract Drawable newDrawable(Resources res);
public abstract Drawable newDrawable();
+
+ public abstract int getChangingConfigurations();
}
public void setBounds(int left, int top, int right, int bottom) {
diff --git a/src/api-impl/android/graphics/drawable/TransitionDrawable.java b/src/api-impl/android/graphics/drawable/TransitionDrawable.java
new file mode 100644
index 00000000..c59a2ef6
--- /dev/null
+++ b/src/api-impl/android/graphics/drawable/TransitionDrawable.java
@@ -0,0 +1,10 @@
+package android.graphics.drawable;
+
+public class TransitionDrawable extends Drawable {
+
+ public TransitionDrawable(Drawable[] layers) {}
+
+ public void setCrossFadeEnabled(boolean enabled) {}
+
+ public void startTransition(int duration) {}
+}
diff --git a/src/api-impl/android/os/Parcel.java b/src/api-impl/android/os/Parcel.java
index b3bec4fe..16333cca 100644
--- a/src/api-impl/android/os/Parcel.java
+++ b/src/api-impl/android/os/Parcel.java
@@ -39,4 +39,8 @@ public class Parcel {
public int dataPosition() {
return 0;
}
+
+ public void writeParcelable(Parcelable p, int flags) {
+ System.out.println("Parcel.writeParcelable(" + p + ", " + flags + ")");
+ }
}
diff --git a/src/api-impl/android/text/Html.java b/src/api-impl/android/text/Html.java
index 28e23647..1414f06f 100644
--- a/src/api-impl/android/text/Html.java
+++ b/src/api-impl/android/text/Html.java
@@ -1,6 +1,13 @@
package android.text;
+import android.graphics.drawable.Drawable;
+
public class Html {
+
+ public static interface ImageGetter {
+ public Drawable getDrawable(String source);
+ }
+
public static Spanned fromHtml(String source) {
return new SpannableString(source.replace("
", "\n")
.replace("
", "\n")
diff --git a/src/api-impl/android/text/TextUtils.java b/src/api-impl/android/text/TextUtils.java
index 0bf2a50d..b06ddebe 100644
--- a/src/api-impl/android/text/TextUtils.java
+++ b/src/api-impl/android/text/TextUtils.java
@@ -330,4 +330,12 @@ public class TextUtils {
private static Object sLock = new Object();
private static char[] sTemp = null;
+
+ public static int getTrimmedLength(CharSequence s) {
+ return s.toString().trim().length();
+ }
+
+ public static String htmlEncode(String s) {
+ return s;
+ }
}
diff --git a/src/api-impl/android/text/format/DateUtils.java b/src/api-impl/android/text/format/DateUtils.java
new file mode 100644
index 00000000..fbaff963
--- /dev/null
+++ b/src/api-impl/android/text/format/DateUtils.java
@@ -0,0 +1,12 @@
+package android.text.format;
+
+import java.util.Date;
+
+import android.content.Context;
+
+public class DateUtils {
+
+ public static CharSequence getRelativeTimeSpanString(Context context, long millis, boolean withPreposition) {
+ return new Date(millis).toString();
+ }
+}
diff --git a/src/api-impl/android/text/format/Formatter.java b/src/api-impl/android/text/format/Formatter.java
index 909a2612..59d3f619 100644
--- a/src/api-impl/android/text/format/Formatter.java
+++ b/src/api-impl/android/text/format/Formatter.java
@@ -5,6 +5,18 @@ import android.content.Context;
public class Formatter {
public static String formatShortFileSize(Context context, long size) {
- return String.valueOf(size);
+ return formatFileSize(context, size);
+ }
+
+ public static String formatFileSize(Context context, long size) {
+ if (size > 1024 * 1024 * 1024) {
+ return String.format("%.1f GiB", size / 1024.0 / 1024.0 / 1024.0);
+ } else if (size > 1024 * 1024) {
+ return String.format("%.1f MiB", size / 1024.0 / 1024.0);
+ } else if (size > 1024) {
+ return String.format("%.1f KiB", size / 1024.0);
+ } else {
+ return String.format("%d B", size);
+ }
}
}
diff --git a/src/api-impl/android/text/style/ImageSpan.java b/src/api-impl/android/text/style/ImageSpan.java
index ecd86b02..cfe7a785 100644
--- a/src/api-impl/android/text/style/ImageSpan.java
+++ b/src/api-impl/android/text/style/ImageSpan.java
@@ -4,5 +4,17 @@ import android.graphics.drawable.Drawable;
public class ImageSpan extends DynamicDrawableSpan {
- public ImageSpan(Drawable d) {}
+ private Drawable drawable;
+
+ public ImageSpan(Drawable d) {
+ drawable = d;
+ }
+
+ public ImageSpan(Drawable d, String source) {
+ drawable = d;
+ }
+
+ public Drawable getDrawable() {
+ return drawable;
+ }
}
diff --git a/src/api-impl/android/view/LayoutInflater.java b/src/api-impl/android/view/LayoutInflater.java
index ec9c2950..4e988c34 100644
--- a/src/api-impl/android/view/LayoutInflater.java
+++ b/src/api-impl/android/view/LayoutInflater.java
@@ -83,7 +83,11 @@ public class LayoutInflater {
try { // FIXME ugly
return createView(name, "android.view.", attrs);
} catch (java.lang.ClassNotFoundException e) {
- return createView(name, "android.widget.", attrs);
+ try {
+ return createView(name, "android.widget.", attrs);
+ } catch (java.lang.ClassNotFoundException e1) {
+ return createView(name, "android.webkit.", attrs);
+ }
}
}
diff --git a/src/api-impl/android/view/MenuItem.java b/src/api-impl/android/view/MenuItem.java
index 96503c6f..940fc31b 100644
--- a/src/api-impl/android/view/MenuItem.java
+++ b/src/api-impl/android/view/MenuItem.java
@@ -52,4 +52,8 @@ public interface MenuItem {
public MenuItem setIcon(Drawable icon);
+ public boolean isChecked();
+
+ public MenuItem setShowAsActionFlags(int action);
+
}
\ No newline at end of file
diff --git a/src/api-impl/android/view/TouchDelegate.java b/src/api-impl/android/view/TouchDelegate.java
new file mode 100644
index 00000000..9d6cedf9
--- /dev/null
+++ b/src/api-impl/android/view/TouchDelegate.java
@@ -0,0 +1,9 @@
+package android.view;
+
+import android.graphics.Rect;
+
+public class TouchDelegate {
+
+ public TouchDelegate(Rect bounds, View delegate) {
+ }
+}
diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java
index 999d6510..07d8f002 100644
--- a/src/api-impl/android/view/View.java
+++ b/src/api-impl/android/view/View.java
@@ -1821,4 +1821,6 @@ public class View implements Drawable.Callback {
public void setVerticalScrollbarPosition(int position) {}
public void setNestedScrollingEnabled(boolean enabled) {}
+
+ public void setTouchDelegate(TouchDelegate touchDelegate) {}
}
diff --git a/src/api-impl/android/webkit/WebSettings.java b/src/api-impl/android/webkit/WebSettings.java
index 3d1f41ad..f30055ca 100644
--- a/src/api-impl/android/webkit/WebSettings.java
+++ b/src/api-impl/android/webkit/WebSettings.java
@@ -1,6 +1,11 @@
package android.webkit;
public class WebSettings {
+
+ public static enum LayoutAlgorithm {
+ NORMAL,
+ }
+
public String getUserAgentString() {
return "GDPR VIOLATION";
}
@@ -16,4 +21,20 @@ public class WebSettings {
public void setGeolocationEnabled(boolean enabled) {}
public void setCacheMode(int dummy) {}
+
+ public void setLayoutAlgorithm(LayoutAlgorithm layoutAlgorithm) {}
+
+ public void setAllowFileAccess(boolean allowFileAccess) {}
+
+ public void setBuiltInZoomControls(boolean builtInZoomControls) {}
+
+ public void setDisplayZoomControls(boolean displayZoomControls) {}
+
+ public void setLoadsImagesAutomatically(boolean loadsImagesAutomatically) {}
+
+ public void setSupportZoom(boolean supportZoom) {}
+
+ public void setUseWideViewPort(boolean useWideViewPort) {}
+
+ public void setTextZoom(int textZoom) {}
}
diff --git a/src/api-impl/android/webkit/WebView.java b/src/api-impl/android/webkit/WebView.java
index 47295554..6308ea98 100644
--- a/src/api-impl/android/webkit/WebView.java
+++ b/src/api-impl/android/webkit/WebView.java
@@ -1,6 +1,7 @@
package android.webkit;
import android.content.Context;
+import android.util.AttributeSet;
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
@@ -9,6 +10,10 @@ public class WebView extends View {
super(context);
}
+ public WebView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
public WebSettings getSettings() {
return new WebSettings();
}
@@ -32,4 +37,8 @@ public class WebView extends View {
public void loadUrl(String url) {}
public void stopLoading() {}
+
+ public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) {
+ System.out.println("loadDataWithBaseURL(" + baseUrl + ", " + data + ", " + mimeType + ", " + encoding + ", " + historyUrl + ") called");
+ }
}
diff --git a/src/api-impl/android/widget/AutoCompleteTextView.java b/src/api-impl/android/widget/AutoCompleteTextView.java
index 2aae90e5..37549f55 100644
--- a/src/api-impl/android/widget/AutoCompleteTextView.java
+++ b/src/api-impl/android/widget/AutoCompleteTextView.java
@@ -1,6 +1,7 @@
package android.widget;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
public class AutoCompleteTextView extends EditText {
@@ -16,4 +17,26 @@ public class AutoCompleteTextView extends EditText {
super(context, attributeSet);
}
+ public void setDropDownBackgroundDrawable(Drawable drawable) {}
+
+ public int getThreshold() {
+ return 0;
+ }
+
+ public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {}
+
+ public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {}
+
+ public int getDropDownAnchor() {
+ return 0;
+ }
+
+ public void setAdapter(ListAdapter adapter) {}
+
+ public void setThreshold(int threshold) {}
+
+ public int getImeOptions() {
+ return 0;
+ }
+
}
\ No newline at end of file
diff --git a/src/api-impl/android/widget/MultiAutoCompleteTextView.java b/src/api-impl/android/widget/MultiAutoCompleteTextView.java
new file mode 100644
index 00000000..375e7906
--- /dev/null
+++ b/src/api-impl/android/widget/MultiAutoCompleteTextView.java
@@ -0,0 +1,14 @@
+package android.widget;
+
+import android.content.Context;
+
+public class MultiAutoCompleteTextView extends AutoCompleteTextView {
+
+ public static interface Tokenizer {}
+
+ public MultiAutoCompleteTextView(Context context) {
+ super(context);
+ }
+
+ public void setTokenizer(Tokenizer tokenizer) {}
+}
\ No newline at end of file
diff --git a/src/api-impl/android/widget/PopupMenu.java b/src/api-impl/android/widget/PopupMenu.java
index 26bef5fc..c842a2fd 100644
--- a/src/api-impl/android/widget/PopupMenu.java
+++ b/src/api-impl/android/widget/PopupMenu.java
@@ -444,8 +444,7 @@ public class PopupMenu {
@Override
public Drawable getIcon() {
- // TODO Auto-generated method stub
- throw new UnsupportedOperationException("Unimplemented method 'getIcon'");
+ return new Drawable();
}
@Override
@@ -476,6 +475,18 @@ public class PopupMenu {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'setOnActionExpandListener'");
}
+
+ @Override
+ public boolean isChecked() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'isChecked'");
+ }
+
+ @Override
+ public MenuItem setShowAsActionFlags(int action) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'setShowAsActionFlags'");
+ }
}
}
\ No newline at end of file
diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java
index 45182175..0b336b10 100644
--- a/src/api-impl/android/widget/TextView.java
+++ b/src/api-impl/android/widget/TextView.java
@@ -19,6 +19,7 @@ import android.text.method.TransformationMethod;
import android.text.style.URLSpan;
import android.util.AttributeSet;
import android.util.TypedValue;
+import android.view.ActionMode;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
@@ -292,4 +293,8 @@ public class TextView extends View {
public void nullLayouts() {}
public void setLinkTextColor(int color) {}
+
+ public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {}
+
+ public int getExtendedPaddingTop() {return 0;}
}
diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build
index befb9622..78fd76fb 100644
--- a/src/api-impl/meson.build
+++ b/src/api-impl/meson.build
@@ -207,6 +207,7 @@ hax_jar = jar('hax', [
'android/graphics/drawable/ScaleDrawable.java',
'android/graphics/drawable/ShapeDrawable.java',
'android/graphics/drawable/StateListDrawable.java',
+ 'android/graphics/drawable/TransitionDrawable.java',
'android/graphics/drawable/VectorDrawable.java',
'android/graphics/drawable/shapes/OvalShape.java',
'android/graphics/drawable/shapes/RoundRectShape.java',
@@ -339,6 +340,7 @@ hax_jar = jar('hax', [
'android/text/TextUtils.java',
'android/text/TextWatcher.java',
'android/text/format/DateFormat.java',
+ 'android/text/format/DateUtils.java',
'android/text/format/Formatter.java',
'android/text/method/BaseMovementMethod.java',
'android/text/method/KeyListener.java',
@@ -427,6 +429,7 @@ hax_jar = jar('hax', [
'android/view/SurfaceHolder.java',
'android/view/SurfaceView.java',
'android/view/TextureView.java',
+ 'android/view/TouchDelegate.java',
'android/view/VelocityTracker.java',
'android/view/View.java',
'android/view/ViewConfiguration.java',
@@ -495,6 +498,7 @@ hax_jar = jar('hax', [
'android/widget/ListAdapter.java',
'android/widget/ListView.java',
'android/widget/MediaController.java',
+ 'android/widget/MultiAutoCompleteTextView.java',
'android/widget/OverScroller.java',
'android/widget/PopupMenu.java',
'android/widget/PopupWindow.java',