diff --git a/src/api-impl-jni/graphics/android_graphics_Matrix.c b/src/api-impl-jni/graphics/android_graphics_Matrix.c index 415dc37a..de869570 100644 --- a/src/api-impl-jni/graphics/android_graphics_Matrix.c +++ b/src/api-impl-jni/graphics/android_graphics_Matrix.c @@ -267,3 +267,11 @@ JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setValues(JNIEnv *en graphene_matrix_init_from_float(matrix, *values4x4); (*env)->ReleaseFloatArrayElements(env, values_ref, values, 0); } + +JNIEXPORT void JNICALL Java_android_graphics_Matrix_native_1setRotate__JFFF(JNIEnv *env, jclass class, jlong matrix_ptr, jfloat degrees, jfloat px, jfloat py) +{ + graphene_matrix_t *matrix = (graphene_matrix_t *)_PTR(matrix_ptr); + graphene_matrix_init_translate(matrix, &GRAPHENE_POINT3D_INIT(-px, -py, 0)); + graphene_matrix_rotate_z(matrix, degrees); + graphene_matrix_translate(matrix, &GRAPHENE_POINT3D_INIT(px, py, 0)); +} diff --git a/src/api-impl/android/app/ActivityOptions.java b/src/api-impl/android/app/ActivityOptions.java new file mode 100644 index 00000000..245fca21 --- /dev/null +++ b/src/api-impl/android/app/ActivityOptions.java @@ -0,0 +1,16 @@ +package android.app; + +import android.os.Bundle; +import android.util.Pair; +import android.view.View; + +public class ActivityOptions { + + public static ActivityOptions makeSceneTransitionAnimation(Activity activity, Pair... pairs) { + return new ActivityOptions(); + } + + public Bundle toBundle() { + return null; + } +} diff --git a/src/api-impl/android/app/AppOpsManager.java b/src/api-impl/android/app/AppOpsManager.java index a6775d2c..57a65da2 100644 --- a/src/api-impl/android/app/AppOpsManager.java +++ b/src/api-impl/android/app/AppOpsManager.java @@ -1,4 +1,12 @@ package android.app; public class AppOpsManager { + + public static String permissionToOp(String permission) { + return permission; + } + + public int noteProxyOpNoThrow(String op, String pkg) { + return 0; + } } diff --git a/src/api-impl/android/app/PendingIntent.java b/src/api-impl/android/app/PendingIntent.java index 3710b696..33dd358e 100644 --- a/src/api-impl/android/app/PendingIntent.java +++ b/src/api-impl/android/app/PendingIntent.java @@ -3,8 +3,10 @@ package android.app; import android.content.Context; import android.content.Intent; import android.content.IntentSender; +import android.os.Bundle; +import android.os.Parcelable; -public class PendingIntent { +public class PendingIntent implements Parcelable { private int requestCode; Intent intent; @@ -25,6 +27,17 @@ public class PendingIntent { public void send(Context context, int code, Intent intent) {} + public void send() { + Context context = Context.this_application; + if (type == 0) { // type Activity + context.startActivity(intent); + } else if (type == 1) { // type Service + context.startService(intent); + } else if (type == 2) { // type Broadcast + context.sendBroadcast(intent); + } + } + public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags) { return new PendingIntent(requestCode, intent, 0); } @@ -33,6 +46,10 @@ public class PendingIntent { return new PendingIntent(requestCode, intent, 1); } + public static PendingIntent getActivities(Context context, int requestCode, Intent[] intents, int flags, Bundle options) { + return new PendingIntent(requestCode, intents[0], 0); + } + public String toString() { return "PendingIntent [requestCode=" + requestCode + ", intent=" + intent + ", type=" + new String[] { "activity", "service", "broadcast" }[type] + "]"; diff --git a/src/api-impl/android/app/job/JobInfo.java b/src/api-impl/android/app/job/JobInfo.java index 12e23720..4ea88201 100644 --- a/src/api-impl/android/app/job/JobInfo.java +++ b/src/api-impl/android/app/job/JobInfo.java @@ -1,6 +1,7 @@ package android.app.job; import android.content.ComponentName; +import android.os.PersistableBundle; public class JobInfo { @@ -21,6 +22,26 @@ public class JobInfo { return this; } + public Builder setExtras(PersistableBundle extras) { + return this; + } + + public Builder setRequiresCharging(boolean requiresCharging) { + return this; + } + + public Builder setRequiresDeviceIdle(boolean requiresDeviceIdle) { + return this; + } + + public Builder setBackoffCriteria(long initialBackoffMillis, int backoffPolicy) { + return this; + } + + public Builder setPersisted(boolean persisted) { + return this; + } + public JobInfo build() { return new JobInfo(); } diff --git a/src/api-impl/android/app/job/JobScheduler.java b/src/api-impl/android/app/job/JobScheduler.java index 2c9bba9c..22225937 100644 --- a/src/api-impl/android/app/job/JobScheduler.java +++ b/src/api-impl/android/app/job/JobScheduler.java @@ -17,4 +17,8 @@ public class JobScheduler { public int enqueue(JobInfo job, JobWorkItem work) { return 1; //RESULT_SUCCESS } + + public int schedule(JobInfo job) { + return 1; //RESULT_SUCCESS + } } diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index 54e41de1..97926655 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -245,6 +245,8 @@ public class Context extends Object { } public final Object getSystemService(Class serviceClass) throws InstantiationException, IllegalAccessException, InvocationTargetException { + if (serviceClass == LayoutInflater.class) + return layout_inflater; return serviceClass.getConstructors()[0].newInstance(); } @@ -706,4 +708,13 @@ public class Context extends Object { public Drawable getWallpaper() { return null; } + + public String[] databaseList() { + File databaseDir = new File(getDataDirFile(), "databases"); + if (databaseDir.exists()) { + return databaseDir.list(); + } else { + return new String[0]; + } + } } diff --git a/src/api-impl/android/content/Intent.java b/src/api-impl/android/content/Intent.java index 17fbe922..13546c80 100644 --- a/src/api-impl/android/content/Intent.java +++ b/src/api-impl/android/content/Intent.java @@ -1,8 +1,13 @@ package android.content; +import android.content.pm.PackageManager; +import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; +import android.util.AttributeSet; +import org.xmlpull.v1.XmlPullParser; + import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; @@ -378,4 +383,12 @@ public class Intent implements Parcelable { public int filterHashCode() { return 0; } + + public static Intent parseIntent(Resources res, XmlPullParser parser, AttributeSet attrs) { + return new Intent(); + } + + public ComponentName resolveActivity(PackageManager pm) { + return component; + } } diff --git a/src/api-impl/android/content/pm/PackageInstaller.java b/src/api-impl/android/content/pm/PackageInstaller.java new file mode 100644 index 00000000..47076b53 --- /dev/null +++ b/src/api-impl/android/content/pm/PackageInstaller.java @@ -0,0 +1,11 @@ +package android.content.pm; + +import java.util.Collections; +import java.util.List; + +public class PackageInstaller { + + public List getMySessions() { + return Collections.emptyList(); + } +} diff --git a/src/api-impl/android/content/pm/PackageManager.java b/src/api-impl/android/content/pm/PackageManager.java index 1f9daf61..81f3363b 100644 --- a/src/api-impl/android/content/pm/PackageManager.java +++ b/src/api-impl/android/content/pm/PackageManager.java @@ -1385,7 +1385,11 @@ public class PackageManager { * @see #GET_UNINSTALLED_PACKAGES */ public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException { - return PackageParser.generatePackageInfo(Context.pkg, new int[0], flags, 0, 0, new HashSet<>(), new PackageUserState()); + if (packageName.equals(Context.pkg.packageName)) { + return PackageParser.generatePackageInfo(Context.pkg, new int[0], flags, 0, 0, new HashSet<>(), new PackageUserState()); + } else { + throw new NameNotFoundException(); + } } /** @@ -1820,15 +1824,15 @@ public class PackageManager { * @see #PERMISSION_DENIED */ public int checkPermission(String permName, String pkgName) { + if (permName != null && permName.endsWith(".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION")) + return PERMISSION_GRANTED; + switch (permName) { // TODO: we shouldn't just automatically grant these once we have bubblewrap set up // for now, the app can access anything it wants, so no point telling it otherwise case "android.permission.WRITE_EXTERNAL_STORAGE": case "android.permission.READ_EXTERNAL_STORAGE": case "com.google.android.c2dm.permission.SEND": - case "com.fsck.k9.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION": - case "net.thunderbird.android.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION": - case "de.danoeh.antennapod.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION": return PERMISSION_GRANTED; default: System.out.println("PackageManager.checkPermission: >" + permName + "< not handled\n"); @@ -2094,7 +2098,7 @@ public class PackageManager { * that are available on the system, or null if there are none(!!). */ public FeatureInfo[] getSystemAvailableFeatures() { - return null; + return new FeatureInfo[0]; } /** @@ -3454,4 +3458,8 @@ public class PackageManager { // TODO: This should be shared with Installer's knowledge of user directory return Environment.getDataDirectory().toString() + "/user/" + userId + "/" + packageName; } + + public PackageInstaller getPackageInstaller() { + return new PackageInstaller(); + } } diff --git a/src/api-impl/android/graphics/Bitmap.java b/src/api-impl/android/graphics/Bitmap.java index 11854fb8..560bedbf 100644 --- a/src/api-impl/android/graphics/Bitmap.java +++ b/src/api-impl/android/graphics/Bitmap.java @@ -217,6 +217,10 @@ public final class Bitmap { public void setPremultiplied(boolean premultiplied) {} + public Bitmap extractAlpha() { + return this.copy(config, mutable); + } + @SuppressWarnings("deprecation") @Override protected void finalize() throws Throwable { diff --git a/src/api-impl/android/graphics/Canvas.java b/src/api-impl/android/graphics/Canvas.java index 0d792c72..59b6f414 100644 --- a/src/api-impl/android/graphics/Canvas.java +++ b/src/api-impl/android/graphics/Canvas.java @@ -482,6 +482,10 @@ public class Canvas { return false; } + public boolean clipRect(RectF rect, Region.Op op) { + return false; + } + public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean includeCenter, Paint paint) {} public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) {} diff --git a/src/api-impl/android/graphics/Color.java b/src/api-impl/android/graphics/Color.java index 39d28ef9..c4c853c7 100644 --- a/src/api-impl/android/graphics/Color.java +++ b/src/api-impl/android/graphics/Color.java @@ -158,4 +158,25 @@ public class Color { } hsv[2] = max; } + + public static int HSVToColor(float[] hsv) { + float h = hsv[0]; + float s = hsv[1]; + float v_ = hsv[2]; + int hi = (int)Math.floor(h / 60) % 6; + float f = (h / 60 - (float)Math.floor(h / 60)) * 6; + int p = (int)(v_ * (1 - s) * 255.f + 0.5f); + int q = (int)(v_ * (1 - f * s) * 255.f + 0.5f); + int t = (int)(v_ * (1 - (1 - f) * s) * 255.f + 0.5f); + int v = (int)(v_ * 255.f + 0.5f); + switch (hi) { + case 0: return Color.rgb(v, t, p); + case 1: return Color.rgb(q, v, p); + case 2: return Color.rgb(p, v, t); + case 3: return Color.rgb(p, q, v); + case 4: return Color.rgb(t, p, v); + case 5: return Color.rgb(v, p, q); + } + return 0; + } } diff --git a/src/api-impl/android/graphics/GskCanvas.java b/src/api-impl/android/graphics/GskCanvas.java index b32d7f85..ada39020 100644 --- a/src/api-impl/android/graphics/GskCanvas.java +++ b/src/api-impl/android/graphics/GskCanvas.java @@ -53,7 +53,8 @@ public class GskCanvas extends Canvas { @Override public void drawPath(Path path, Paint paint) { - native_drawPath(snapshot, path.getGskPath(), paint != null ? paint.paint : default_paint.paint); + if (path != null) + native_drawPath(snapshot, path.getGskPath(), paint != null ? paint.paint : default_paint.paint); } @Override diff --git a/src/api-impl/android/graphics/Path.java b/src/api-impl/android/graphics/Path.java index 40735507..1f355bd4 100644 --- a/src/api-impl/android/graphics/Path.java +++ b/src/api-impl/android/graphics/Path.java @@ -191,6 +191,12 @@ public class Path { addPath(src); } + public void offset(float dx, float dy) { + Matrix matrix = new Matrix(); + matrix.setTranslate(dx, dy); + transform(matrix); + } + @SuppressWarnings("deprecation") @Override protected void finalize() throws Throwable { diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java index 50ff767f..0c6dab7b 100644 --- a/src/api-impl/android/graphics/drawable/Drawable.java +++ b/src/api-impl/android/graphics/drawable/Drawable.java @@ -24,6 +24,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.util.AttributeSet; +import android.util.LayoutDirection; import android.util.TypedValue; public class Drawable { @@ -323,6 +324,10 @@ public class Drawable { public void setHotspot(float x, float y) {} + public int getLayoutDirection() { + return LayoutDirection.LTR; + } + 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/graphics/drawable/Icon.java b/src/api-impl/android/graphics/drawable/Icon.java index 28a22892..ba7ff924 100644 --- a/src/api-impl/android/graphics/drawable/Icon.java +++ b/src/api-impl/android/graphics/drawable/Icon.java @@ -1,8 +1,14 @@ package android.graphics.drawable; +import android.graphics.Bitmap; + public class Icon { public static Icon createWithResource(String packageName, int resourceId) { return null; } + + public static Icon createWithBitmap(Bitmap bitmap) { + return null; + } } diff --git a/src/api-impl/android/net/ConnectivityManager.java b/src/api-impl/android/net/ConnectivityManager.java index e7dd7892..6994b29b 100644 --- a/src/api-impl/android/net/ConnectivityManager.java +++ b/src/api-impl/android/net/ConnectivityManager.java @@ -2,6 +2,8 @@ package android.net; import android.os.Handler; +class NetworkCapabilities {} + public class ConnectivityManager { public class NetworkCallback { @@ -19,6 +21,8 @@ public class ConnectivityManager { public native void registerNetworkCallback(NetworkRequest request, NetworkCallback callback); + public void unregisterNetworkCallback(NetworkCallback callback) {} + public native boolean isActiveNetworkMetered(); protected native boolean nativeGetNetworkAvailable(); @@ -33,4 +37,8 @@ public class ConnectivityManager { public void registerDefaultNetworkCallback(NetworkCallback cb, Handler hdl) {} + public NetworkCapabilities getNetworkCapabilities(Network network) { + return null; + } + } diff --git a/src/api-impl/android/net/http/X509TrustManagerExtensions.java b/src/api-impl/android/net/http/X509TrustManagerExtensions.java index 3be59002..fdaf9122 100644 --- a/src/api-impl/android/net/http/X509TrustManagerExtensions.java +++ b/src/api-impl/android/net/http/X509TrustManagerExtensions.java @@ -1,7 +1,7 @@ package android.net.http; import java.security.cert.X509Certificate; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.net.ssl.X509TrustManager; @@ -12,6 +12,6 @@ public class X509TrustManagerExtensions { public List checkServerTrusted (X509Certificate[] chain, String authType, String host) { - return new ArrayList<>(); + return Arrays.asList(chain); } } diff --git a/src/api-impl/android/os/BaseBundle.java b/src/api-impl/android/os/BaseBundle.java index 06b6042c..c9cd835a 100644 --- a/src/api-impl/android/os/BaseBundle.java +++ b/src/api-impl/android/os/BaseBundle.java @@ -12,7 +12,7 @@ public class BaseBundle { // Invariant - exactly one of mMap / mParcelledData will be null // (except inside a call to unparcel) - /* package */ ArrayMap mMap = null; + /* package */ ArrayMap mMap = new ArrayMap<>(); // Log a message if the value was non-null but not of the expected type void typeWarning(String key, Object value, String className, diff --git a/src/api-impl/android/os/Environment.java b/src/api-impl/android/os/Environment.java index aa08613a..1d2db2e4 100644 --- a/src/api-impl/android/os/Environment.java +++ b/src/api-impl/android/os/Environment.java @@ -799,4 +799,8 @@ public class Environment { public static boolean isExternalStorageLegacy() { return true; } + + public static String getExternalStorageState(File path) { + return Environment.MEDIA_MOUNTED; + } } diff --git a/src/api-impl/android/provider/MediaStore.java b/src/api-impl/android/provider/MediaStore.java new file mode 100644 index 00000000..ed145721 --- /dev/null +++ b/src/api-impl/android/provider/MediaStore.java @@ -0,0 +1,14 @@ +package android.provider; + +import android.net.Uri; + +public class MediaStore { + + public static class Images { + + public static class Media { + + public static final Uri EXTERNAL_CONTENT_URI = Uri.parse("content://media/external/images/media"); + } + } +} diff --git a/src/api-impl/android/provider/Settings.java b/src/api-impl/android/provider/Settings.java index 2d58ecf5..51008722 100644 --- a/src/api-impl/android/provider/Settings.java +++ b/src/api-impl/android/provider/Settings.java @@ -18,12 +18,16 @@ public class Settings { } } public static int getInt(ContentResolver content_resolver, String key) { + return getInt(content_resolver, key, -1); + } + + public static int getInt(ContentResolver content_resolver, String key, int def) { switch (key) { case "limit_ad_tracking": return 1; // obviously, duh default: java.lang.System.out.println("!!!! Settings$Secure.getInt: unknown key: >" + key + "<"); - return -1; + return def; } } } diff --git a/src/api-impl/android/text/Layout.java b/src/api-impl/android/text/Layout.java index 1ba11a58..d8aeec5c 100644 --- a/src/api-impl/android/text/Layout.java +++ b/src/api-impl/android/text/Layout.java @@ -80,6 +80,10 @@ public class Layout { return paint.measureText(source, start, end); } + public static float getDesiredWidth(CharSequence source, TextPaint paint) { + return paint.measureText(source, 0, source.length()); + } + public int getLineBaseline(int line) { if (line < 0 || line >= getLineCount()) throw new ArrayIndexOutOfBoundsException(); diff --git a/src/api-impl/android/text/format/DateUtils.java b/src/api-impl/android/text/format/DateUtils.java index 9d096387..8152fc0e 100644 --- a/src/api-impl/android/text/format/DateUtils.java +++ b/src/api-impl/android/text/format/DateUtils.java @@ -44,4 +44,8 @@ public class DateUtils { else return formatDateTime(context, fromMillis, flags) + " - " + formatDateTime(context, toMillis, flags); } + + public static CharSequence getRelativeTimeSpanString(long time, long now, long minResolutionMillis, int flags) { + return new Date(time).toString(); + } } diff --git a/src/api-impl/android/text/style/URLSpan.java b/src/api-impl/android/text/style/URLSpan.java index fc706885..f6a813dd 100644 --- a/src/api-impl/android/text/style/URLSpan.java +++ b/src/api-impl/android/text/style/URLSpan.java @@ -2,5 +2,13 @@ package android.text.style; public class URLSpan { - public URLSpan(String url) {} + private String url; + + public URLSpan(String url) { + this.url = url; + } + + public String getURL() { + return url; + } } diff --git a/src/api-impl/android/util/TypedValue.java b/src/api-impl/android/util/TypedValue.java index 4d23ec8e..b70bb245 100644 --- a/src/api-impl/android/util/TypedValue.java +++ b/src/api-impl/android/util/TypedValue.java @@ -572,4 +572,8 @@ public class TypedValue { sb.append("}"); return sb.toString(); } + + public int getComplexUnit() { + return (data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK; + } }; diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index c44e0103..c844b478 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -10,6 +10,7 @@ import android.graphics.Canvas; import android.graphics.GskCanvas; import android.graphics.Matrix; import android.graphics.Paint; +import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; @@ -889,7 +890,11 @@ 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; + return object.getAlpha(); + } + @Override + public void set(View object, Float value) { + object.setAlpha(value); } }; @@ -1867,7 +1872,7 @@ public class View implements Drawable.Callback { public void setForeground(Drawable foreground) {} - public boolean canScrollVertically(int value) {return true;} + public boolean canScrollVertically(int value) {return false;} public boolean isInTouchMode() {return false;} @@ -2169,4 +2174,14 @@ public class View implements Drawable.Callback { public boolean isDirty() { return false; } public float getX() { return getLeft(); } + + public boolean getGlobalVisibleRect(Rect visibleRect, Point globalOffset) { + boolean result = native_getGlobalVisibleRect(widget, visibleRect); + globalOffset.set(visibleRect.left, visibleRect.top); + return result; + } + + public void restoreHierarchyState(SparseArray container) {} + + public boolean isHovered() { return false; } } diff --git a/src/api-impl/android/view/ViewGroup.java b/src/api-impl/android/view/ViewGroup.java index 8bff127f..47bd3661 100644 --- a/src/api-impl/android/view/ViewGroup.java +++ b/src/api-impl/android/view/ViewGroup.java @@ -623,4 +623,6 @@ public class ViewGroup extends View implements ViewParent, ViewManager { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'onStopNestedScroll'"); } + + public void requestChildFocus(View child, View focused) {} } diff --git a/src/api-impl/android/widget/PopupMenu.java b/src/api-impl/android/widget/PopupMenu.java index aa197e8b..66881b88 100644 --- a/src/api-impl/android/widget/PopupMenu.java +++ b/src/api-impl/android/widget/PopupMenu.java @@ -234,9 +234,8 @@ public class PopupMenu { } @Override - public MenuItem getItem(int id) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getItem'"); + public MenuItem getItem(int index) { + return items.get(index); } @Override @@ -297,8 +296,7 @@ public class PopupMenu { @Override public int size() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'size'"); + return items.size(); } @Override diff --git a/src/api-impl/android/widget/PopupWindow.java b/src/api-impl/android/widget/PopupWindow.java index a511a901..5e0abe64 100644 --- a/src/api-impl/android/widget/PopupWindow.java +++ b/src/api-impl/android/widget/PopupWindow.java @@ -1,6 +1,7 @@ package android.widget; import android.content.Context; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; @@ -118,4 +119,8 @@ public class PopupWindow { } public void setWindowLayoutType(int type) {} + + public void setIsClippedToScreen(boolean isClippedToScreen) {} + + public void setEpicenterBounds(Rect bounds) {} } diff --git a/src/api-impl/android/widget/ProgressBar.java b/src/api-impl/android/widget/ProgressBar.java index 9b7931ee..f0a81a8a 100644 --- a/src/api-impl/android/widget/ProgressBar.java +++ b/src/api-impl/android/widget/ProgressBar.java @@ -13,6 +13,7 @@ public class ProgressBar extends View { protected int progress = 0; private boolean indeterminate = false; private Drawable indeterminateDrawable; + private Drawable progressDrawable = new Drawable(); public ProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); @@ -58,13 +59,7 @@ public class ProgressBar extends View { public Drawable getProgressDrawable() { - return new Drawable() { - @Override - public void draw(Canvas canvas) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'draw'"); - } - }; + return progressDrawable; } public Drawable getIndeterminateDrawable() { @@ -103,7 +98,8 @@ public class ProgressBar extends View { this.indeterminateDrawable = indeterminateDrawable; } - public void setProgressDrawable(Drawable indeterminateDrawable) { + public void setProgressDrawable(Drawable progressDrawable) { + this.progressDrawable = progressDrawable; } public native void native_setIndeterminate(boolean indeterminate); diff --git a/src/api-impl/android/widget/RatingBar.java b/src/api-impl/android/widget/RatingBar.java new file mode 100644 index 00000000..9ed43fd1 --- /dev/null +++ b/src/api-impl/android/widget/RatingBar.java @@ -0,0 +1,16 @@ +package android.widget; + +import android.content.Context; +import android.util.AttributeSet; + +public class RatingBar extends AbsSeekBar { + + public RatingBar(Context context) { + this(context, null); + } + + public RatingBar(Context context, AttributeSet attributeSet) { + super(context, attributeSet); + } + +} diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 7e108f9f..1b4c5728 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -397,4 +397,6 @@ public class TextView extends View { public int getImeOptions() {return 0;} public void setShadowLayer(float radius, float dx, float dy, int color) {} + + public void setBreakStrategy(int strategy) {} } diff --git a/src/api-impl/android/widget/ViewFlipper.java b/src/api-impl/android/widget/ViewFlipper.java new file mode 100644 index 00000000..4b92c238 --- /dev/null +++ b/src/api-impl/android/widget/ViewFlipper.java @@ -0,0 +1,16 @@ +package android.widget; + +import android.content.Context; +import android.util.AttributeSet; + +public class ViewFlipper extends ViewAnimator { + + public ViewFlipper(Context context) { + this(context, null); + } + + public ViewFlipper(Context context, AttributeSet attrs) { + super(context, attrs); + } + +} diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index d48ead46..3abb2f97 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -25,6 +25,7 @@ srcs = [ 'android/annotation/Widget.java', 'android/app/Activity.java', 'android/app/ActivityManager.java', + 'android/app/ActivityOptions.java', 'android/app/ActivityThread.java', 'android/app/AlarmManager.java', 'android/app/AlertDialog.java', @@ -102,6 +103,7 @@ srcs = [ 'android/content/pm/LauncherApps.java', 'android/content/pm/ManifestDigest.java', 'android/content/pm/PackageInfo.java', + 'android/content/pm/PackageInstaller.java', 'android/content/pm/PackageItemInfo.java', 'android/content/pm/PackageManager.java', 'android/content/pm/PackageParser.java', @@ -353,6 +355,7 @@ srcs = [ 'android/provider/BaseColumns.java', 'android/provider/CalendarContract.java', 'android/provider/ContactsContract.java', + 'android/provider/MediaStore.java', 'android/provider/Settings.java', 'android/security/keystore/AndroidKeyStore.java', 'android/service/media/MediaBrowserService.java', @@ -587,6 +590,7 @@ srcs = [ 'android/widget/ProgressBar.java', 'android/widget/RadioButton.java', 'android/widget/RadioGroup.java', + 'android/widget/RatingBar.java', 'android/widget/RelativeLayout.java', 'android/widget/RemoteViews.java', 'android/widget/ScrollView.java', @@ -605,6 +609,7 @@ srcs = [ 'android/widget/ToggleButton.java', 'android/widget/Toolbar.java', 'android/widget/ViewAnimator.java', + 'android/widget/ViewFlipper.java', 'android/widget/ZoomButton.java', 'android/widget/ZoomButtonsController.java', 'com/android/internal/Manifest.java',