diff --git a/src/api-impl-jni/graphics/android_graphics_Path.c b/src/api-impl-jni/graphics/android_graphics_Path.c index 12d0b906..facecf4a 100644 --- a/src/api-impl-jni/graphics/android_graphics_Path.c +++ b/src/api-impl-jni/graphics/android_graphics_Path.c @@ -166,3 +166,15 @@ JNIEXPORT void JNICALL Java_android_graphics_Path_native_1rMoveTo(JNIEnv *env, j sk_path_t *path = (sk_path_t *)_PTR(path_ptr); sk_path_rmove_to(path, dx, dy); } + +JNIEXPORT void JNICALL Java_android_graphics_Path_native_1addRoundRect__JLandroid_graphics_RectF_2_3FI(JNIEnv *env, jclass class, jlong path_ptr, jobject rect, jfloatArray radii, jint dir) +{ + sk_path_t *path = (sk_path_t *)_PTR(path_ptr); + float left = _GET_FLOAT_FIELD(rect, "left"); + float top = _GET_FLOAT_FIELD(rect, "top"); + float right = _GET_FLOAT_FIELD(rect, "right"); + float bottom = _GET_FLOAT_FIELD(rect, "bottom"); + jfloat *radii_array = (*env)->GetFloatArrayElements(env, radii, 0); + sk_path_add_rounded_rect(path, &(sk_rect_t){left, top, right, bottom}, radii_array[0], radii_array[1], (sk_path_direction_t)dir); + (*env)->ReleaseFloatArrayElements(env, radii, radii_array, 0); +} diff --git a/src/api-impl/android/accounts/AccountManager.java b/src/api-impl/android/accounts/AccountManager.java index bdea7432..5780ca7a 100644 --- a/src/api-impl/android/accounts/AccountManager.java +++ b/src/api-impl/android/accounts/AccountManager.java @@ -1,5 +1,24 @@ package android.accounts; +import android.content.Context; +import android.os.Bundle; + public class AccountManager { + public static AccountManager get(Context context) { + return new AccountManager(); + } + + public Account[] getAccountsByType(String type) { + return new Account[0]; + } + + public Account[] getAccounts() { + return new Account[0]; + } + + public boolean addAccountExplicitly(Account account, String password, Bundle extras) { + System.out.println("addAccountExplicitly(" + account + ", " + password + ", " + extras + ") called"); + return false; + } } diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index 88dd3c13..7f13705b 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -27,7 +27,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class Activity extends ContextThemeWrapper implements Window.Callback { LayoutInflater layout_inflater; @@ -337,8 +339,30 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { setResult(resultCode, null); } + protected Dialog onCreateDialog(int id) { + System.out.println("Activity.onCreateDialog(" + id + ") called"); + return null; + } + + protected void onPrepareDialog(int id, Dialog dialog) { + System.out.println("Activity.onPrepareDialog(" + id + ") called"); + } + + private Map dialogs = new HashMap(); + public final void showDialog(int id) { System.out.println("Activity.showDialog(" + id + ") called"); + Dialog dialog = dialogs.get(id); + if (dialog == null) + dialogs.put(id, dialog = onCreateDialog(id)); + onPrepareDialog(id, dialog); + dialog.show(); + } + + public void removeDialog(int id) { + Dialog dialog = dialogs.remove(id); + if (dialog != null) + dialog.dismiss(); } public void finish() { @@ -501,6 +525,8 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { finish(); } + public void overridePendingTransition(int enterAnim, int exitAnim) {} + private native void nativeFinish(long native_window); public static native void nativeRecreateActivity(Activity activity); public static native void nativeStartActivity(Activity activity); diff --git a/src/api-impl/android/app/ActivityManager.java b/src/api-impl/android/app/ActivityManager.java index 53e89625..d5f9103a 100644 --- a/src/api-impl/android/app/ActivityManager.java +++ b/src/api-impl/android/app/ActivityManager.java @@ -34,4 +34,6 @@ public class ActivityManager { public int getMemoryClass() {return 20;} // suggested heap size in MB public static void getMyMemoryState(RunningAppProcessInfo outInfo) {} + + public boolean clearApplicationUserData() {return false;} } diff --git a/src/api-impl/android/app/AlarmManager.java b/src/api-impl/android/app/AlarmManager.java index f9b58ebb..a6ae14e5 100644 --- a/src/api-impl/android/app/AlarmManager.java +++ b/src/api-impl/android/app/AlarmManager.java @@ -6,4 +6,6 @@ public class AlarmManager { public void setInexactRepeating(int type, long triggerTime, long interval, PendingIntent operation) {} public void setExact(int type, long triggerTime, PendingIntent operation) {} + + public void set(int type, long triggerTime, PendingIntent operation) {} } diff --git a/src/api-impl/android/app/AlertDialog.java b/src/api-impl/android/app/AlertDialog.java index 5a7ff3ae..eeee504e 100644 --- a/src/api-impl/android/app/AlertDialog.java +++ b/src/api-impl/android/app/AlertDialog.java @@ -47,9 +47,13 @@ public class AlertDialog extends Dialog implements DialogInterface { public AlertDialog.Builder setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener) { System.out.println("AlertDialog.Builder setNegativeButton called with text: '" + text + "'"); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, text, listener); return this; } + public AlertDialog.Builder setNegativeButton(int textId, DialogInterface.OnClickListener listener) { + return setNegativeButton(dialog.getContext().getText(textId), listener); + } public AlertDialog.Builder setCancelable(boolean cancelable) { return this; @@ -95,5 +99,10 @@ public class AlertDialog extends Dialog implements DialogInterface { public AlertDialog create() { return dialog; } + + public AlertDialog show() { + dialog.show(); + return dialog; + } } } diff --git a/src/api-impl/android/app/AppGlobals.java b/src/api-impl/android/app/AppGlobals.java new file mode 100644 index 00000000..5408e183 --- /dev/null +++ b/src/api-impl/android/app/AppGlobals.java @@ -0,0 +1,10 @@ +package android.app; + +import android.content.Context; + +public class AppGlobals { + + public static Application getInitialApplication() { + return Context.this_application; + } +} diff --git a/src/api-impl/android/app/IntentService.java b/src/api-impl/android/app/IntentService.java index 7536410b..96427c18 100644 --- a/src/api-impl/android/app/IntentService.java +++ b/src/api-impl/android/app/IntentService.java @@ -1,5 +1,5 @@ package android.app; -public abstract class IntentService { +public abstract class IntentService extends Service { } diff --git a/src/api-impl/android/app/PendingIntent.java b/src/api-impl/android/app/PendingIntent.java index bc2f4755..3710b696 100644 --- a/src/api-impl/android/app/PendingIntent.java +++ b/src/api-impl/android/app/PendingIntent.java @@ -38,6 +38,8 @@ public class PendingIntent { + new String[] { "activity", "service", "broadcast" }[type] + "]"; } + public void cancel() {} + public class CanceledException extends Exception { } } diff --git a/src/api-impl/android/app/Service.java b/src/api-impl/android/app/Service.java index 9d53c485..7f39765e 100644 --- a/src/api-impl/android/app/Service.java +++ b/src/api-impl/android/app/Service.java @@ -16,7 +16,10 @@ public abstract class Service extends Context { public abstract IBinder onBind(Intent intent); - public abstract int onStartCommand(Intent intent, int flags, int startId); + public int onStartCommand(Intent intent, int flags, int startId) { + System.out.println("Service.onStartCommand(" + intent + ", " + flags + ", " + startId + ") called"); + return 0; + } public void startForeground(int id, Notification notification) { System.out.println("startForeground(" + id + ", " + notification + ") called"); diff --git a/src/api-impl/android/appwidget/AppWidgetManager.java b/src/api-impl/android/appwidget/AppWidgetManager.java index 8c013a1e..6542857d 100644 --- a/src/api-impl/android/appwidget/AppWidgetManager.java +++ b/src/api-impl/android/appwidget/AppWidgetManager.java @@ -1,4 +1,10 @@ package android.appwidget; +import android.content.Context; + public class AppWidgetManager { + + public static AppWidgetManager getInstance(Context context) { + return new AppWidgetManager(); + } } diff --git a/src/api-impl/android/content/ContentResolver.java b/src/api-impl/android/content/ContentResolver.java index a3718049..8ec52425 100644 --- a/src/api-impl/android/content/ContentResolver.java +++ b/src/api-impl/android/content/ContentResolver.java @@ -44,4 +44,8 @@ public class ContentResolver { public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) { return query(uri, projection, selection, selectionArgs, sortOrder); } + + public int delete(Uri uri, String selection, String[] selectionArgs) { + return 0; + } } diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index c6948469..50506760 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -405,17 +405,24 @@ public class Context extends Object { return null; } - try { - Class cls = Class.forName(component.getClassName()).asSubclass(Service.class); - if (!runningServices.containsKey(cls)) { - Service service = cls.getConstructor().newInstance(); - service.onCreate(); - runningServices.put(cls, service); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + try { + Class cls = Class.forName(component.getClassName()).asSubclass(Service.class); + if (!runningServices.containsKey(cls)) { + Service service = cls.getConstructor().newInstance(); + service.onCreate(); + runningServices.put(cls, service); + } + + runningServices.get(cls).onStartCommand(intent, 0, 0); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } } - runningServices.get(cls).onStartCommand(intent, 0, 0); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - } + }); + return component; } @@ -603,4 +610,12 @@ public class Context extends Object { public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) { return registerReceiver(receiver, filter); } + + public String[] fileList() { + return new String[0]; + } + + public void revokeUriPermission(Uri uri, int mode) { + System.out.println("revokeUriPermission(" + uri + ", " + mode + ") called"); + } } diff --git a/src/api-impl/android/content/DialogInterface.java b/src/api-impl/android/content/DialogInterface.java index 28ff4934..67b41c08 100644 --- a/src/api-impl/android/content/DialogInterface.java +++ b/src/api-impl/android/content/DialogInterface.java @@ -25,4 +25,6 @@ public interface DialogInterface { } public interface OnMultiChoiceClickListener { } + public interface OnKeyListener { + } } diff --git a/src/api-impl/android/content/Intent.java b/src/api-impl/android/content/Intent.java index 94926800..700631a4 100644 --- a/src/api-impl/android/content/Intent.java +++ b/src/api-impl/android/content/Intent.java @@ -318,4 +318,15 @@ public class Intent { public String getPackage() { return component.getPackageName(); } + + public String getScheme() { + return data == null ? null : data.getScheme(); + } + + public static class ShortcutIconResource { + + public static ShortcutIconResource fromContext(Context context, int id) { + return new ShortcutIconResource(); + } + } } diff --git a/src/api-impl/android/content/IntentFilter.java b/src/api-impl/android/content/IntentFilter.java index b05a161c..118bc244 100644 --- a/src/api-impl/android/content/IntentFilter.java +++ b/src/api-impl/android/content/IntentFilter.java @@ -40,4 +40,6 @@ public class IntentFilter { public String getAction(int index) { return actions.get(index); } + + public void setPriority(int priority) {} } diff --git a/src/api-impl/android/content/pm/PackageManager.java b/src/api-impl/android/content/pm/PackageManager.java index bc2f02a7..3e595143 100644 --- a/src/api-impl/android/content/pm/PackageManager.java +++ b/src/api-impl/android/content/pm/PackageManager.java @@ -2411,13 +2411,14 @@ public class PackageManager { * else null. * @throws Exception */ - public ProviderInfo resolveContentProvider(String authority, int flags) throws Exception { + public ProviderInfo resolveContentProvider(String authority, int flags) { for (PackageParser.Provider p : Context.pkg.providers) { if (p.info.authority.equals(authority)) return p.info; } - throw new Exception("Provider not found: " + authority); + Slog.w(TAG, "Provider not found: " + authority); + return null; } /** diff --git a/src/api-impl/android/content/pm/PackageParser.java b/src/api-impl/android/content/pm/PackageParser.java index 16fa0119..4cb189f7 100644 --- a/src/api-impl/android/content/pm/PackageParser.java +++ b/src/api-impl/android/content/pm/PackageParser.java @@ -3031,6 +3031,7 @@ public class PackageParser { outError)) == null) { return null; } + s.info.metaData = s.metaData; } else { if (!RIGID_PARSER) { Slog.w(TAG, "Unknown element under : " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription()); diff --git a/src/api-impl/android/database/CursorWindow.java b/src/api-impl/android/database/CursorWindow.java index 6f47e13e..340a70e9 100644 --- a/src/api-impl/android/database/CursorWindow.java +++ b/src/api-impl/android/database/CursorWindow.java @@ -337,7 +337,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable { * @return The value of the field as a string. */ public String getString(int row, int column) { - return (String)rows.get(row - startPos)[column]; + return String.valueOf(rows.get(row - startPos)[column]); } /** diff --git a/src/api-impl/android/graphics/Paint.java b/src/api-impl/android/graphics/Paint.java index 9ec1a67c..e1275f7c 100644 --- a/src/api-impl/android/graphics/Paint.java +++ b/src/api-impl/android/graphics/Paint.java @@ -272,6 +272,12 @@ public class Paint { return new FontMetrics(); } + public void setFontMetricsInt(FontMetricsInt fmi) {} + + public FontMetricsInt getFontMetricsInt() { + return new FontMetricsInt(); + } + private native long native_constructor(); private native void native_set_antialias(long skia_paint, boolean aa); private native void native_set_color(long skia_paint, int color); diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java index 3480733a..45edf776 100644 --- a/src/api-impl/android/graphics/drawable/Drawable.java +++ b/src/api-impl/android/graphics/drawable/Drawable.java @@ -76,8 +76,13 @@ public class Drawable { } public void draw(Canvas canvas) { - if (canvas instanceof GskCanvas) + if (canvas instanceof GskCanvas) { + if (mBounds.left != 0 || mBounds.top != 0) + canvas.translate(mBounds.left, mBounds.top); native_draw(paintable, ((GskCanvas)canvas).snapshot, mBounds.width(), mBounds.height()); + if (mBounds.left != 0 || mBounds.top != 0) + canvas.translate(-mBounds.left, -mBounds.top); + } } public boolean setState(int[] stateSet) { @@ -145,8 +150,8 @@ public class Drawable { return this; } - public int getIntrinsicWidth() {return 0;} - public int getIntrinsicHeight() {return 0;} + public int getIntrinsicWidth() {return 24;} + public int getIntrinsicHeight() {return 24;} public void setTintList(ColorStateList tint) {} @@ -263,6 +268,10 @@ public class Drawable { public void jumpToCurrentState() {} + public boolean setLayoutDirection(int layoutDirection) { + return false; + } + protected static native long native_paintable_from_path(String path); protected native long native_constructor(); protected native void native_invalidate(long paintable); diff --git a/src/api-impl/android/os/BaseBundle.java b/src/api-impl/android/os/BaseBundle.java index 72be2dd9..ab69d825 100644 --- a/src/api-impl/android/os/BaseBundle.java +++ b/src/api-impl/android/os/BaseBundle.java @@ -62,6 +62,16 @@ public class BaseBundle { return mMap.containsKey(key); } + /** + * Returns the entry with the given key as an object. + * + * @param key a String key + * @return an Object, or null + */ + public Object get(String key) { + return mMap.get(key); + } + /** * 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 @@ -94,6 +104,17 @@ public class BaseBundle { return (s == null) ? defaultValue : s; } + /** + * Returns the value associated with the given key, or 0L if + * no mapping of the desired type exists for the given key. + * + * @param key a String + * @return a long value + */ + public long getLong(String key) { + return getLong(key, 0L); + } + /** * Returns the value associated with the given key, or defaultValue if * no mapping of the desired type exists for the given key. diff --git a/src/api-impl/android/os/Binder.java b/src/api-impl/android/os/Binder.java index 9438cef1..1fd2bb27 100644 --- a/src/api-impl/android/os/Binder.java +++ b/src/api-impl/android/os/Binder.java @@ -5,4 +5,8 @@ public class Binder extends IBinder { public void attachInterface(IInterface owner, String descriptor) {} public static void flushPendingCommands() {} + + public static long clearCallingIdentity() { return 0; } + + public static void restoreCallingIdentity(long identityToken) {} } diff --git a/src/api-impl/android/os/Bundle.java b/src/api-impl/android/os/Bundle.java index 1c81894f..e297e40d 100644 --- a/src/api-impl/android/os/Bundle.java +++ b/src/api-impl/android/os/Bundle.java @@ -188,16 +188,6 @@ public final class Bundle extends BaseBundle implements Cloneable { mFdsKnown = true; } - /** - * Returns the entry with the given key as an object. - * - * @param key a String key - * @return an Object, or null - */ - public Object get(String key) { - return mMap.get(key); - } - /** * Removes any entry with the given key from the mapping of this Bundle. * @@ -752,17 +742,6 @@ public final class Bundle extends BaseBundle implements Cloneable { } } - /** - * Returns the value associated with the given key, or 0L if - * no mapping of the desired type exists for the given key. - * - * @param key a String - * @return a long value - */ - public long getLong(String key) { - return getLong(key, 0L); - } - /** * Returns the value associated with the given key, or 0.0f if * no mapping of the desired type exists for the given key. diff --git a/src/api-impl/android/os/Parcel.java b/src/api-impl/android/os/Parcel.java index 426eba7c..b3bec4fe 100644 --- a/src/api-impl/android/os/Parcel.java +++ b/src/api-impl/android/os/Parcel.java @@ -35,4 +35,8 @@ public class Parcel { public byte[] marshall() { return new byte[0]; } + + public int dataPosition() { + return 0; + } } diff --git a/src/api-impl/android/provider/ContactsContract.java b/src/api-impl/android/provider/ContactsContract.java index c7c27a4b..67297015 100644 --- a/src/api-impl/android/provider/ContactsContract.java +++ b/src/api-impl/android/provider/ContactsContract.java @@ -7,7 +7,23 @@ public class ContactsContract { public static final class CommonDataKinds { public static class Phone { - public static final Uri CONTENT_URI = null; + public static final Uri CONTENT_URI = Uri.parse("content://com.android.contacts/phones"); } } + + public static final class Profile { + public static final Uri CONTENT_URI = Uri.parse("content://com.android.contacts/profile"); + } + + public static final class Contacts { + public static final Uri CONTENT_URI = Uri.parse("content://com.android.contacts/contacts"); + } + + public static final class RawContacts { + public static final Uri CONTENT_URI = Uri.parse("content://com.android.contacts/raw_contacts"); + } + + public static final class Data { + public static final Uri CONTENT_URI = Uri.parse("content://com.android.contacts/data"); + } } diff --git a/src/api-impl/android/telephony/PhoneNumberUtils.java b/src/api-impl/android/telephony/PhoneNumberUtils.java new file mode 100644 index 00000000..00913f53 --- /dev/null +++ b/src/api-impl/android/telephony/PhoneNumberUtils.java @@ -0,0 +1,12 @@ +package android.telephony; + +public class PhoneNumberUtils { + + public static boolean isNonSeparator(char c) { + return c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != '-'; + } + + public static boolean isGlobalPhoneNumber(String phoneNumber) { + return phoneNumber.startsWith("+") || phoneNumber.startsWith("00"); + } +} diff --git a/src/api-impl/android/telephony/TelephonyManager.java b/src/api-impl/android/telephony/TelephonyManager.java index 985a6ad5..6c4bca0e 100644 --- a/src/api-impl/android/telephony/TelephonyManager.java +++ b/src/api-impl/android/telephony/TelephonyManager.java @@ -37,4 +37,20 @@ public class TelephonyManager { } public void listen(PhoneStateListener listener, int events) {} + + public int getNetworkType() { + return 0; // NETWORK_TYPE_UNKNOWN + } + + public String getLine1Number() { + return null; + } + + public int getSimState() { + return 0; // SIM_STATE_UNKNOWN + } + + public String getSimOperatorName() { + return null; + } } diff --git a/src/api-impl/android/text/Editable.java b/src/api-impl/android/text/Editable.java index 8c55e143..0e23e4e9 100644 --- a/src/api-impl/android/text/Editable.java +++ b/src/api-impl/android/text/Editable.java @@ -4,4 +4,12 @@ public interface Editable extends CharSequence { public class Factory {} + public Editable replace(int start, int end, CharSequence source, int destoff, int destlen); + + public Editable replace(int start, int end, CharSequence text); + + public InputFilter[] getFilters(); + + public void setFilters(InputFilter[] filters); + } diff --git a/src/api-impl/android/text/TextUtils.java b/src/api-impl/android/text/TextUtils.java index 9b27a867..0bf2a50d 100644 --- a/src/api-impl/android/text/TextUtils.java +++ b/src/api-impl/android/text/TextUtils.java @@ -3,6 +3,8 @@ package android.text; import java.util.Locale; import java.util.regex.Pattern; +import com.android.internal.util.ArrayUtils; + public class TextUtils { public static int getLayoutDirectionFromLocale(Locale locale) { return 0 /*LTR*/; // FIXME @@ -236,8 +238,8 @@ public class TextUtils { sTemp = null; } - // if (buf == null || buf.length < len) - // buf = ArrayUtils.newUnpaddedCharArray(len); + if (buf == null || buf.length < len) + buf = ArrayUtils.newUnpaddedCharArray(len); return buf; } diff --git a/src/api-impl/android/text/style/DynamicDrawableSpan.java b/src/api-impl/android/text/style/DynamicDrawableSpan.java new file mode 100644 index 00000000..8ba7046b --- /dev/null +++ b/src/api-impl/android/text/style/DynamicDrawableSpan.java @@ -0,0 +1,4 @@ +package android.text.style; + +public class DynamicDrawableSpan { +} diff --git a/src/api-impl/android/text/style/ImageSpan.java b/src/api-impl/android/text/style/ImageSpan.java new file mode 100644 index 00000000..ecd86b02 --- /dev/null +++ b/src/api-impl/android/text/style/ImageSpan.java @@ -0,0 +1,8 @@ +package android.text.style; + +import android.graphics.drawable.Drawable; + +public class ImageSpan extends DynamicDrawableSpan { + + public ImageSpan(Drawable d) {} +} diff --git a/src/api-impl/android/text/style/TextAppearanceSpan.java b/src/api-impl/android/text/style/TextAppearanceSpan.java new file mode 100644 index 00000000..c0066e45 --- /dev/null +++ b/src/api-impl/android/text/style/TextAppearanceSpan.java @@ -0,0 +1,8 @@ +package android.text.style; + +import android.content.Context; + +public class TextAppearanceSpan { + + public TextAppearanceSpan(Context context, int resId) {} +} diff --git a/src/api-impl/android/text/style/UnderlineSpan.java b/src/api-impl/android/text/style/UnderlineSpan.java new file mode 100644 index 00000000..157ddcb6 --- /dev/null +++ b/src/api-impl/android/text/style/UnderlineSpan.java @@ -0,0 +1,4 @@ +package android.text.style; + +public class UnderlineSpan { +} diff --git a/src/api-impl/android/util/Size.java b/src/api-impl/android/util/Size.java new file mode 100644 index 00000000..b3f07b5e --- /dev/null +++ b/src/api-impl/android/util/Size.java @@ -0,0 +1,4 @@ +package android.util; + +public class Size { +} diff --git a/src/api-impl/android/util/SizeF.java b/src/api-impl/android/util/SizeF.java new file mode 100644 index 00000000..ffef5f97 --- /dev/null +++ b/src/api-impl/android/util/SizeF.java @@ -0,0 +1,4 @@ +package android.util; + +public class SizeF { +} diff --git a/src/api-impl/android/view/LayoutInflater.java b/src/api-impl/android/view/LayoutInflater.java index 3df51988..ec9c2950 100644 --- a/src/api-impl/android/view/LayoutInflater.java +++ b/src/api-impl/android/view/LayoutInflater.java @@ -241,7 +241,12 @@ public class LayoutInflater { } else { final View view = createViewFromTag(parent, name, attrs); final ViewGroup viewGroup = (ViewGroup)parent; - final ViewGroup.LayoutParams params = viewGroup.generateLayoutParams(attrs); + ViewGroup.LayoutParams params = null; + try { + params = viewGroup.generateLayoutParams(attrs); + } catch (RuntimeException e) { + params = viewGroup.generateDefaultLayoutParams(); + } params.resolveLayoutDirection(viewGroup.getLayoutDirection()); rInflate(parser, view, attrs, true); viewGroup.addView(view, params); diff --git a/src/api-impl/android/view/MenuItem.java b/src/api-impl/android/view/MenuItem.java index 29cd18c3..96503c6f 100644 --- a/src/api-impl/android/view/MenuItem.java +++ b/src/api-impl/android/view/MenuItem.java @@ -50,4 +50,6 @@ public interface MenuItem { public MenuItem setOnActionExpandListener(OnActionExpandListener listener); + public MenuItem setIcon(Drawable icon); + } \ 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 2ba6e559..46c7b172 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -1776,4 +1776,16 @@ public class View implements Drawable.Callback { public boolean isInLayout() { return false; // FIXME } + + public void setTextDirection(int textDirection) {} + + public Drawable getForeground() {return null;} + + public void setScrollbarFadingEnabled(boolean fadeEnabled) {} + + public void setScrollBarStyle(int style) {} + + public void setVerticalScrollbarPosition(int position) {} + + public void setNestedScrollingEnabled(boolean enabled) {} } diff --git a/src/api-impl/android/view/ViewConfiguration.java b/src/api-impl/android/view/ViewConfiguration.java index 108ebe19..a981294c 100644 --- a/src/api-impl/android/view/ViewConfiguration.java +++ b/src/api-impl/android/view/ViewConfiguration.java @@ -50,4 +50,8 @@ public class ViewConfiguration { public static float getScrollFriction() { return 0.015f; } + + public int getScaledWindowTouchSlop() { + return 8; + } } diff --git a/src/api-impl/android/view/Window.java b/src/api-impl/android/view/Window.java index 565b3758..f4585dbd 100644 --- a/src/api-impl/android/view/Window.java +++ b/src/api-impl/android/view/Window.java @@ -111,4 +111,8 @@ public class Window { public int getNavigationBarColor() { return 0xFF888888; // gray } + + public void setBackgroundDrawableResource(int resId) {} + + public int getStatusBarColor() { return 0xFFFF0000; } } diff --git a/src/api-impl/android/view/accessibility/AccessibilityManager.java b/src/api-impl/android/view/accessibility/AccessibilityManager.java index f4984bed..4f7d491b 100644 --- a/src/api-impl/android/view/accessibility/AccessibilityManager.java +++ b/src/api-impl/android/view/accessibility/AccessibilityManager.java @@ -5,6 +5,8 @@ import java.util.List; public class AccessibilityManager { + public interface AccessibilityStateChangeListener {} + public boolean isTouchExplorationEnabled() {return false;} public boolean isEnabled() {return false;} @@ -13,4 +15,8 @@ public class AccessibilityManager { return new ArrayList<>(); } + public boolean addAccessibilityStateChangeListener(AccessibilityStateChangeListener listener) { + return false; + } + } diff --git a/src/api-impl/android/view/animation/Animation.java b/src/api-impl/android/view/animation/Animation.java index 1c5fb6d9..75056a3f 100644 --- a/src/api-impl/android/view/animation/Animation.java +++ b/src/api-impl/android/view/animation/Animation.java @@ -22,4 +22,6 @@ public class Animation { public void setAnimationListener(AnimationListener l) { l.onAnimationEnd(this); // FIXME } + + public void setRepeatCount(int count) {} } diff --git a/src/api-impl/android/view/inputmethod/InputMethodManager.java b/src/api-impl/android/view/inputmethod/InputMethodManager.java index 30690810..7ccc9f65 100644 --- a/src/api-impl/android/view/inputmethod/InputMethodManager.java +++ b/src/api-impl/android/view/inputmethod/InputMethodManager.java @@ -9,4 +9,8 @@ public class InputMethodManager { public boolean showSoftInput(View view, int flags) {return false;} + public boolean isFullscreenMode() {return false;} + + public boolean isActive(View view) {return false;} + } diff --git a/src/api-impl/android/webkit/URLUtil.java b/src/api-impl/android/webkit/URLUtil.java new file mode 100644 index 00000000..693b8e35 --- /dev/null +++ b/src/api-impl/android/webkit/URLUtil.java @@ -0,0 +1,8 @@ +package android.webkit; + +public class URLUtil { + + public static String guessFileName(String url, String contentDisposition, String mimeType) { + return url.substring(url.lastIndexOf('/') + 1); + } +} diff --git a/src/api-impl/android/widget/AbsListView.java b/src/api-impl/android/widget/AbsListView.java index 8677e228..21aa8a89 100644 --- a/src/api-impl/android/widget/AbsListView.java +++ b/src/api-impl/android/widget/AbsListView.java @@ -61,6 +61,10 @@ public abstract class AbsListView extends AdapterView { return -1; } + public void setFastScrollEnabled(boolean enabled) {} + + public void setFastScrollAlwaysVisible(boolean alwaysVisible) {} + public interface OnScrollListener {} public interface SelectionBoundsAdjuster {} diff --git a/src/api-impl/android/widget/AdapterView.java b/src/api-impl/android/widget/AdapterView.java index 98deb9a5..87aa7e54 100644 --- a/src/api-impl/android/widget/AdapterView.java +++ b/src/api-impl/android/widget/AdapterView.java @@ -49,4 +49,8 @@ public abstract class AdapterView extends ViewGroup { public Adapter getAdapter() { return adapter; } + + public Object getItemAtPosition(int position) { + return adapter.getItem(position); + } } diff --git a/src/api-impl/android/widget/CompoundButton.java b/src/api-impl/android/widget/CompoundButton.java index 5fe1de80..155bbd9b 100644 --- a/src/api-impl/android/widget/CompoundButton.java +++ b/src/api-impl/android/widget/CompoundButton.java @@ -7,6 +7,7 @@ import android.util.AttributeSet; public abstract class CompoundButton extends Button implements Checkable { Drawable button_drawable = null; + public Drawable mButtonDrawable; // directly accessed by androidx public CompoundButton(Context context) { super(context); diff --git a/src/api-impl/android/widget/ImageView.java b/src/api-impl/android/widget/ImageView.java index f1a1f7dc..d6d1fc79 100644 --- a/src/api-impl/android/widget/ImageView.java +++ b/src/api-impl/android/widget/ImageView.java @@ -165,6 +165,8 @@ public class ImageView extends View { return null; } + public void setImageTintMode(PorterDuff.Mode tintMode) {} + @Override protected native long native_constructor(Context context, AttributeSet attrs); protected native void native_setPixbuf(long widget, long pixbuf); diff --git a/src/api-impl/android/widget/PopupMenu.java b/src/api-impl/android/widget/PopupMenu.java index a7ac697f..26bef5fc 100644 --- a/src/api-impl/android/widget/PopupMenu.java +++ b/src/api-impl/android/widget/PopupMenu.java @@ -340,6 +340,11 @@ public class PopupMenu { return this; } + @Override + public MenuItem setIcon(Drawable icon) { + return this; + } + @Override public MenuItem setVisible(boolean visible) { // GMenu doesn't support invisible items, so we remove them while they're not visible diff --git a/src/api-impl/android/widget/PopupWindow.java b/src/api-impl/android/widget/PopupWindow.java index a0031260..413afd5d 100644 --- a/src/api-impl/android/widget/PopupWindow.java +++ b/src/api-impl/android/widget/PopupWindow.java @@ -11,6 +11,10 @@ public class PopupWindow { popover = native_constructor(); } + public PopupWindow(Context context) { + this(context, null, 0, 0); + } + private View contentView; private long popover; // native pointer to GtkPopover diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 517a4f9b..8583729c 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -280,4 +280,6 @@ public class TextView extends View { public int getMaxWidth() {return 1000;} public void nullLayouts() {} + + public void setLinkTextColor(int color) {} } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index fdc63801..f7a4a623 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -24,6 +24,7 @@ hax_jar = jar('hax', [ 'android/app/ActivityManager.java', 'android/app/AlarmManager.java', 'android/app/AlertDialog.java', + 'android/app/AppGlobals.java', 'android/app/AppOpsManager.java', 'android/app/Application.java', 'android/app/ApplicationErrorReport.java', @@ -310,6 +311,7 @@ hax_jar = jar('hax', [ 'android/provider/Settings.java', 'android/telecom/TelecomManager.java', 'android/telephony/CellLocation.java', + 'android/telephony/PhoneNumberUtils.java', 'android/telephony/PhoneStateListener.java', 'android/telephony/SubscriptionManager.java', 'android/telephony/TelephonyManager.java', @@ -345,9 +347,13 @@ hax_jar = jar('hax', [ 'android/text/method/TransformationMethod.java', 'android/text/style/CharacterStyle.java', 'android/text/style/ClickableSpan.java', + 'android/text/style/DynamicDrawableSpan.java', 'android/text/style/ForegroundColorSpan.java', + 'android/text/style/ImageSpan.java', 'android/text/style/MetricAffectingSpan.java', 'android/text/style/StyleSpan.java', + 'android/text/style/TextAppearanceSpan.java', + 'android/text/style/UnderlineSpan.java', 'android/text/style/UpdateAppearance.java', 'android/text/style/URLSpan.java', 'android/text/util/Linkify.java', @@ -372,6 +378,8 @@ hax_jar = jar('hax', [ 'android/util/PrefixPrinter.java', 'android/util/Printer.java', 'android/util/Property.java', + 'android/util/Size.java', + 'android/util/SizeF.java', 'android/util/Slog.java', 'android/util/SparseArray.java', 'android/util/SparseBooleanArray.java', @@ -437,6 +445,7 @@ hax_jar = jar('hax', [ 'android/view/textservice/TextServicesManager.java', 'android/webkit/DownloadListener.java', 'android/webkit/MimeTypeMap.java', + 'android/webkit/URLUtil.java', 'android/webkit/WebChromeClient.java', 'android/webkit/WebSettings.java', 'android/webkit/WebView.java',