From 0803848c6d0c342bb4ad65f5f2779703da03994a Mon Sep 17 00:00:00 2001 From: Mis012 Date: Sat, 30 Nov 2024 18:49:11 +0100 Subject: [PATCH] api-impl: misc stubs/additions --- src/api-impl-jni/app/android_app_Activity.c | 1 - .../generated_headers/android_app_Activity.h | 4 ++ src/api-impl/android/app/Activity.java | 58 ++++++++++--------- src/api-impl/android/app/ActivityThread.java | 8 ++- src/api-impl/android/app/FragmentManager.java | 2 +- .../android/app/FragmentTransaction.java | 2 +- src/api-impl/android/app/ProgressDialog.java | 12 ++++ .../android/content/ContentResolver.java | 17 ++++++ src/api-impl/android/content/Context.java | 4 ++ src/api-impl/android/content/Intent.java | 3 + src/api-impl/android/os/Debug.java | 9 ++- .../android/telephony/TelephonyManager.java | 8 +++ src/api-impl/android/util/FloatProperty.java | 40 +++++++++++++ src/api-impl/android/view/View.java | 39 ++++++++++++- .../android/view/ViewTreeObserver.java | 11 +++- src/api-impl/android/widget/GridView.java | 18 ++++++ src/api-impl/android/widget/TextView.java | 6 +- src/api-impl/meson.build | 3 + 18 files changed, 206 insertions(+), 39 deletions(-) create mode 100644 src/api-impl/android/util/FloatProperty.java diff --git a/src/api-impl-jni/app/android_app_Activity.c b/src/api-impl-jni/app/android_app_Activity.c index 771e869c..358e6171 100644 --- a/src/api-impl-jni/app/android_app_Activity.c +++ b/src/api-impl-jni/app/android_app_Activity.c @@ -159,7 +159,6 @@ void activity_start(JNIEnv *env, jobject activity_object) activity_backlog = g_list_prepend(activity_backlog, _REF(activity_object)); activity_update_current(env); - } JNIEXPORT void JNICALL Java_android_app_Activity_nativeFinish(JNIEnv *env, jobject this, jlong window) diff --git a/src/api-impl-jni/generated_headers/android_app_Activity.h b/src/api-impl-jni/generated_headers/android_app_Activity.h index 79d37af7..9cdec726 100644 --- a/src/api-impl-jni/generated_headers/android_app_Activity.h +++ b/src/api-impl-jni/generated_headers/android_app_Activity.h @@ -9,6 +9,10 @@ extern "C" { #endif #undef android_app_Activity_MODE_PRIVATE #define android_app_Activity_MODE_PRIVATE 0L +#undef android_app_Activity_RESULT_CANCELED +#define android_app_Activity_RESULT_CANCELED 0L +#undef android_app_Activity_RESULT_OK +#define android_app_Activity_RESULT_OK -1L /* * Class: android_app_Activity * Method: nativeFinish diff --git a/src/api-impl/android/app/Activity.java b/src/api-impl/android/app/Activity.java index 4e96b262..cf99dbad 100644 --- a/src/api-impl/android/app/Activity.java +++ b/src/api-impl/android/app/Activity.java @@ -14,6 +14,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.util.Slog; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.Menu; @@ -34,6 +35,11 @@ import java.util.List; import java.util.Map; public class Activity extends ContextThemeWrapper implements Window.Callback { + private final static String TAG = "Activity"; + + public static final int RESULT_CANCELED = 0; + public static final int RESULT_OK = -1; + LayoutInflater layout_inflater; Window window = new Window(this, this); int requested_orientation = -1 /*ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED*/; // dummy @@ -57,6 +63,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { if (className == null) { for (PackageParser.Activity activity: pkg.activities) { for (PackageParser.IntentInfo intent: activity.intents) { + Slog.i(TAG, intent.toString()); if ((uri == null && intent.hasCategory("android.intent.category.LAUNCHER")) || (uri != null && intent.hasDataScheme(uri.getScheme()))) { className = activity.className; @@ -149,7 +156,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { public final void setVolumeControlStream(int streamType) {} protected void onCreate(Bundle savedInstanceState) { - System.out.println("- onCreate - yay!"); + Slog.i(TAG, "- onCreate - yay!"); new ViewGroup(this).setId(R.id.content); for (Fragment fragment : fragments) { @@ -160,12 +167,12 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected void onPostCreate(Bundle savedInstanceState) { - System.out.println("- onPostCreate - yay!"); + Slog.i(TAG, "- onPostCreate - yay!"); return; } protected void onStart() { - System.out.println("- onStart - yay!"); + Slog.i(TAG, "- onStart - yay!"); if (window.contentView != null) window.setContentView(window.contentView); window.setTitle(title); @@ -184,13 +191,13 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected void onRestart() { - System.out.println("- onRestart - yay!"); + Slog.i(TAG, "- onRestart - yay!"); return; } protected void onResume() { - System.out.println("- onResume - yay!"); + Slog.i(TAG, "- onResume - yay!"); for (Fragment fragment : fragments) { fragment.onResume(); @@ -201,12 +208,12 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected void onPostResume() { - System.out.println("- onPostResume - yay!"); + Slog.i(TAG, "- onPostResume - yay!"); return; } protected void onPause() { - System.out.println("- onPause - yay!"); + Slog.i(TAG, "- onPause - yay!"); for (Fragment fragment : fragments) { fragment.onPause(); @@ -217,7 +224,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected void onStop() { - System.out.println("- onStop - yay!"); + Slog.i(TAG, "- onStop - yay!"); for (Fragment fragment : fragments) { fragment.onStop(); @@ -227,7 +234,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected void onDestroy() { - System.out.println("- onDestroy - yay!"); + Slog.i(TAG, "- onDestroy - yay!"); for (Fragment fragment : fragments) { fragment.onDestroy(); @@ -238,7 +245,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } public void onWindowFocusChanged(boolean hasFocus) { - System.out.println("- onWindowFocusChanged - yay! (hasFocus: " + hasFocus + ")"); + Slog.i(TAG, "- onWindowFocusChanged - yay! (hasFocus: " + hasFocus + ")"); return; } @@ -255,12 +262,12 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { /* --- */ public void setContentView(int layoutResID) throws Exception { - System.out.println("- setContentView - yay!"); + Slog.i(TAG, "- setContentView - yay!"); root_view = layout_inflater.inflate(layoutResID, null, false); System.out.println("~~~~~~~~~~~"); - System.out.println(root_view); + System.out.println(root_view.toString()); System.out.printf("%x\n", root_view.id); System.out.println("~~~~~~~~~~~"); @@ -277,17 +284,17 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } public T findViewById(int id) { - System.out.printf("- findViewById - asked for view with id: %x\n", id); + System.out.printf(TAG, "- findViewById - asked for view with id: %x\n", id); View view = null; if (window.contentView != null) view = window.contentView.findViewById(id); - System.out.println("- findViewById - found this: " + view); + Slog.i(TAG, "- findViewById - found this: " + view); return (T)view; } public void invalidateOptionsMenu() { - System.out.println("invalidateOptionsMenu() called, should we do something?"); + Slog.i(TAG, "invalidateOptionsMenu() called, should we do something?"); } public Window getWindow() { @@ -317,7 +324,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } public void startActivityForResult(Intent intent, int requestCode, Bundle options) { - System.out.println("startActivityForResult(" + intent + ", " + requestCode + ") called"); + Slog.i(TAG, "startActivityForResult(" + intent + ", " + requestCode + "," + options + ") called"); if (intent.getComponent() != null) { try { Class cls = Class.forName(intent.getComponent().getClassName()).asSubclass(Activity.class); @@ -338,9 +345,8 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } } else if (FILE_CHOOSER_ACTIONS.contains(intent.getAction())) { nativeFileChooser(FILE_CHOOSER_ACTIONS.indexOf(intent.getAction()), intent.getType(), intent.getStringExtra("android.intent.extra.TITLE"), requestCode); - } - else { - System.out.println("startActivityForResult: intent was not handled. Calling onActivityResult(RESULT_CANCELED)."); + } else { + Slog.i(TAG, "startActivityForResult: intent was not handled. Calling onActivityResult(RESULT_CANCELED)."); onActivityResult(requestCode, 0 /*RESULT_CANCELED*/, new Intent()); } } @@ -359,18 +365,18 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { } protected Dialog onCreateDialog(int id) { - System.out.println("Activity.onCreateDialog(" + id + ") called"); + Slog.i(TAG, "Activity.onCreateDialog(" + id + ") called"); return null; } protected void onPrepareDialog(int id, Dialog dialog) { - System.out.println("Activity.onPrepareDialog(" + id + ") called"); + Slog.i(TAG, "Activity.onPrepareDialog(" + id + ") called"); } private Map dialogs = new HashMap(); public final void showDialog(int id) { - System.out.println("Activity.showDialog(" + id + ") called"); + Slog.i(TAG, "Activity.showDialog(" + id + ") called"); Dialog dialog = dialogs.get(id); if (dialog == null) dialogs.put(id, dialog = onCreateDialog(id)); @@ -416,7 +422,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { @Override public void onContentChanged() { - System.out.println("- onContentChanged - yay!"); + Slog.i(TAG, "- onContentChanged - yay!"); } public boolean onCreateOptionsMenu(Menu menu) { @@ -502,7 +508,7 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { @Override public boolean onMenuOpened(int featureId, Menu menu) { - System.out.println("onMenuOpened(" + featureId + ", " + menu + ") called"); + Slog.i(TAG, "onMenuOpened(" + featureId + ", " + menu + ") called"); return false; } @@ -513,11 +519,11 @@ public class Activity extends ContextThemeWrapper implements Window.Callback { Constructor constructor = cls.getConstructor(); Activity activity = constructor.newInstance(); activity.getWindow().native_window = getWindow().native_window; - System.out.println("activity.getWindow().native_window >"+activity.getWindow().native_window+"<"); + Slog.i(TAG, "activity.getWindow().native_window >"+activity.getWindow().native_window+"<"); nativeFinish(0); nativeStartActivity(activity); } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - System.out.println("exception in Activity.recreate, this is kinda sus"); + Slog.i(TAG, "exception in Activity.recreate, this is kinda sus"); e.printStackTrace(); } } diff --git a/src/api-impl/android/app/ActivityThread.java b/src/api-impl/android/app/ActivityThread.java index f7bdd48d..eee256f4 100644 --- a/src/api-impl/android/app/ActivityThread.java +++ b/src/api-impl/android/app/ActivityThread.java @@ -1,8 +1,10 @@ package android.app; import android.app.Application; -import android.content.pm.ConfigurationInfo; import android.content.Context; +import android.content.pm.ConfigurationInfo; +import android.content.res.Configuration; + import java.util.List; public class ActivityThread { @@ -18,4 +20,8 @@ public class ActivityThread { public Application getApplication() { return Context.this_application; } + + public Configuration getConfiguration() { + return Context.this_application.getResources().getConfiguration(); + } } diff --git a/src/api-impl/android/app/FragmentManager.java b/src/api-impl/android/app/FragmentManager.java index b12abbf6..0a14d3cb 100644 --- a/src/api-impl/android/app/FragmentManager.java +++ b/src/api-impl/android/app/FragmentManager.java @@ -7,7 +7,7 @@ public class FragmentManager { public FragmentManager(Activity activity) { this.activity = activity; } - + public Fragment findFragmentByTag(String tag) { return null; } diff --git a/src/api-impl/android/app/FragmentTransaction.java b/src/api-impl/android/app/FragmentTransaction.java index d6287c3b..91d2a621 100644 --- a/src/api-impl/android/app/FragmentTransaction.java +++ b/src/api-impl/android/app/FragmentTransaction.java @@ -7,7 +7,7 @@ public class FragmentTransaction { public FragmentTransaction(Activity activity) { this.activity = activity; } - + public FragmentTransaction add(Fragment fragment, String string) { fragment.activity = activity; activity.fragments.add(fragment); diff --git a/src/api-impl/android/app/ProgressDialog.java b/src/api-impl/android/app/ProgressDialog.java index 8a5c7291..a63ad300 100644 --- a/src/api-impl/android/app/ProgressDialog.java +++ b/src/api-impl/android/app/ProgressDialog.java @@ -14,6 +14,18 @@ public class ProgressDialog extends AlertDialog { public void setIndeterminate(boolean indeterminate) {} + public static ProgressDialog show(Context context, CharSequence title, CharSequence message) { + return show(context, title, message, false); + } + + public static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate) { + return show(context, title, message, indeterminate, false, null); + } + + public static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable) { + return show(context, title, message, indeterminate, cancelable, null); + } + public static ProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, OnCancelListener cancelListener) { return new ProgressDialog(context); } diff --git a/src/api-impl/android/content/ContentResolver.java b/src/api-impl/android/content/ContentResolver.java index 16605cfb..bdcdc4d6 100644 --- a/src/api-impl/android/content/ContentResolver.java +++ b/src/api-impl/android/content/ContentResolver.java @@ -3,13 +3,17 @@ package android.content; import java.io.File; import java.io.FileNotFoundException; +import android.accounts.Account; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; +import android.os.Bundle; import android.os.CancellationSignal; import android.os.ParcelFileDescriptor; public class ContentResolver { + public static final String SYNC_EXTRAS_IGNORE_SETTINGS = "ignore_settings"; + public final void registerContentObserver(Uri uri, boolean notifyForDescendants, ContentObserver observer) { } public final void unregisterContentObserver(ContentObserver observer) { @@ -77,4 +81,17 @@ public class ContentResolver { else return 0; } + + public static void requestSync(Account account, String authority, Bundle extras) { + } + + public static void cancelSync(Account account, String authority) { + } + + public static void setMasterSyncAutomatically(boolean sync) { + } + + public static boolean isSyncActive(Account account, String authority) { + return false; + } } diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index deab4330..3a58e3de 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -358,6 +358,10 @@ public class Context extends Object { return getCacheDir(); } + public File[] getExternalCacheDirs() { + return new File[] {getCacheDir()}; + } + public File getNoBackupFilesDir() { if (nobackup_dir == null) { nobackup_dir = new File(getDataDirFile(), "no_backup/" + getPackageName()); diff --git a/src/api-impl/android/content/Intent.java b/src/api-impl/android/content/Intent.java index 70363a34..ff3477c4 100644 --- a/src/api-impl/android/content/Intent.java +++ b/src/api-impl/android/content/Intent.java @@ -7,6 +7,9 @@ import java.io.Serializable; import java.util.ArrayList; public class Intent implements Parcelable { + public static final String ACTION_MAIN = "android.intent.action.MAIN"; + public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000; + private ComponentName component; private Bundle extras = new Bundle(); private String action; diff --git a/src/api-impl/android/os/Debug.java b/src/api-impl/android/os/Debug.java index d0fecb4b..0fc6066b 100644 --- a/src/api-impl/android/os/Debug.java +++ b/src/api-impl/android/os/Debug.java @@ -2,11 +2,10 @@ package android.os; public final class Debug { public static class MemoryInfo { } - /** - * Wait until a debugger attaches. As soon as the debugger attaches, - * this returns, so you will need to place a breakpoint after the - * waitForDebugger() call if you want to start tracing immediately. - */ + + public static void waitForDebugger() { + } + public static class InstructionCount { public InstructionCount() { } diff --git a/src/api-impl/android/telephony/TelephonyManager.java b/src/api-impl/android/telephony/TelephonyManager.java index 744d811a..1489a519 100644 --- a/src/api-impl/android/telephony/TelephonyManager.java +++ b/src/api-impl/android/telephony/TelephonyManager.java @@ -4,6 +4,10 @@ import java.util.ArrayList; import java.util.List; public class TelephonyManager { + public static TelephonyManager getDefault() { + return new TelephonyManager(); + } + // FIXME: can we return null instead of ""? public String getNetworkOperator() { return ""; @@ -17,6 +21,10 @@ public class TelephonyManager { return ""; } + public String getSubscriberId() { + return ""; + } + public int getPhoneType() { return 0; // PHONE_TYPE_NONE } diff --git a/src/api-impl/android/util/FloatProperty.java b/src/api-impl/android/util/FloatProperty.java new file mode 100644 index 00000000..7406d6ab --- /dev/null +++ b/src/api-impl/android/util/FloatProperty.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.util; + +/** + * An implementation of {@link android.util.Property} to be used specifically with fields of type + * float. This type-specific subclass enables performance benefit by allowing + * calls to a {@link #setValue(Object, float) setValue()} function that takes the primitive + * float type and avoids autoboxing and other overhead associated with the + * Float class. + * + * @param The class on which the Property is declared. + */ +public abstract class FloatProperty extends Property { + public FloatProperty(String name) { + super(Float.class, name); + } + /** + * A type-specific variant of {@link #set(Object, Float)} that is faster when dealing + * with fields of type float. + */ + public abstract void setValue(T object, float value); + @Override + final public void set(T object, Float value) { + setValue(object, value); + } +} diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index 7afa122a..93362f4f 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -21,6 +21,7 @@ import android.os.Parcelable; import android.os.SystemClock; import android.os.Vibrator; import android.util.AttributeSet; +import android.util.FloatProperty; import android.util.LayoutDirection; import android.util.Property; import android.util.Slog; @@ -580,6 +581,28 @@ public class View implements Drawable.Callback { public static final int TEXT_DIRECTION_RTL = 4; // 0x4 + public static final Property SCALE_X = new FloatProperty("scaleX") { + @Override + public void setValue(View object, float value) { + object.setScaleX(value); + } + @Override + public Float get(View object) { + return object.getScaleX(); + } + }; + + public static final Property SCALE_Y = new FloatProperty("scaleY") { + @Override + public void setValue(View object, float value) { + object.setScaleY(value); + } + @Override + public Float get(View object) { + return object.getScaleY(); + } + }; + // --- end of constants from android source // --- interfaces from android source @@ -613,8 +636,7 @@ public class View implements Drawable.Callback { } public static interface OnKeyListener { - // TODO - // boolean onKey(View v, int keyCode, KeyEvent event); + boolean onKey(View v, int keyCode, KeyEvent event); } public interface OnLongClickListener { @@ -1580,6 +1602,16 @@ public class View implements Drawable.Callback { native_queueAllocate(widget); } + public void setX(float x) { + setTranslationX(x - left); + } + + + public void setY(float y) { + setTranslationY(y - top); + } + + public void setAlpha(float alpha) { native_setVisibility(widget, visibility, alpha); this.alpha = alpha; @@ -1721,6 +1753,9 @@ public class View implements Drawable.Callback { public void setHorizontalScrollBarEnabled(boolean enabled) {} + public void setVerticalScrollBarEnabled(boolean enabled) {} + + public void postInvalidateOnAnimation() { postInvalidate(); } diff --git a/src/api-impl/android/view/ViewTreeObserver.java b/src/api-impl/android/view/ViewTreeObserver.java index 830890e2..a81b5b34 100644 --- a/src/api-impl/android/view/ViewTreeObserver.java +++ b/src/api-impl/android/view/ViewTreeObserver.java @@ -18,6 +18,8 @@ package android.view; import android.graphics.Rect; import android.graphics.Region; +import android.os.Handler; +import android.os.Looper; import java.util.ArrayList; import java.util.concurrent.CopyOnWriteArrayList; @@ -494,9 +496,16 @@ public final class ViewTreeObserver { } mOnGlobalLayoutListeners.add(listener); + // hack: many Applications wait for the global layout before doing anything // so we dispatch the event immediately - listener.onGlobalLayout(); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + listener.onGlobalLayout(); + } + }); + } /** diff --git a/src/api-impl/android/widget/GridView.java b/src/api-impl/android/widget/GridView.java index eae1bbe3..3f4bbff6 100644 --- a/src/api-impl/android/widget/GridView.java +++ b/src/api-impl/android/widget/GridView.java @@ -1,7 +1,10 @@ package android.widget; +import java.util.ArrayList; import android.content.Context; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.view.View; public class GridView extends AbsListView { public GridView(Context context) { @@ -11,4 +14,19 @@ public class GridView extends AbsListView { public GridView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } + + public GridView(Context context, AttributeSet attributeSet, int defStyleAttr) { + super(context, attributeSet, defStyleAttr); + } + + @Override + public View getSelectedView() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getSelectedView'"); + } + + @Override + public void setSelection(int position) { + setSelection(position, false); + } } diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 40d809ee..095b38a9 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -220,7 +220,7 @@ public class TextView extends View { public void setAllCaps(boolean allCaps) { String[] classesToRemove = {"ATL-text-uppercase"}; native_removeClasses(widget, classesToRemove); - + if(allCaps){ native_addClass(widget, "ATL-text-uppercase"); } @@ -351,4 +351,8 @@ public class TextView extends View { public int getPaintFlags() {return 0;} public void setPaintFlags(int flags) {} + + public int getLineHeight() { + return 10; // FIXME + } } diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index e7a0477a..923d861e 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -400,6 +400,7 @@ hax_jar = jar('hax', [ 'android/util/DecompiledXmlResourceParser.java', 'android/util/DisplayMetrics.java', 'android/util/FloatMath.java', + 'android/util/FloatProperty.java', 'android/util/JsonReader.java', 'android/util/JsonScope.java', 'android/util/JsonToken.java', @@ -516,6 +517,7 @@ hax_jar = jar('hax', [ 'android/widget/FilterQueryProvider.java', 'android/widget/FrameLayout.java', 'android/widget/Gallery.java', + 'android/widget/GridView.java', 'android/widget/HeaderViewListAdapter.java', 'android/widget/HorizontalScrollView.java', 'android/widget/ImageButton.java', @@ -588,5 +590,6 @@ hax_jar = jar('hax', [ '-bootclasspath', bootclasspath, '-source', '1.8', '-target', '1.8', '-encoding', 'UTF-8', + '-Xlint:-deprecation', # we implement deprecated APIs '-h', join_paths(dir_base, 'src/api-impl-jni/generated_headers') ])