You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
multiple additions and fixes for the Java APIs
Stuff needed for WhatsApp support
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Integer, Dialog> dialogs = new HashMap<Integer, Dialog>();
|
||||
|
||||
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);
|
||||
|
||||
@@ -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;}
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
10
src/api-impl/android/app/AppGlobals.java
Normal file
10
src/api-impl/android/app/AppGlobals.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package android.app;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class AppGlobals {
|
||||
|
||||
public static Application getInitialApplication() {
|
||||
return Context.this_application;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
package android.app;
|
||||
|
||||
public abstract class IntentService {
|
||||
public abstract class IntentService extends Service {
|
||||
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ public class PendingIntent {
|
||||
+ new String[] { "activity", "service", "broadcast" }[type] + "]";
|
||||
}
|
||||
|
||||
public void cancel() {}
|
||||
|
||||
public class CanceledException extends Exception {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
package android.appwidget;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class AppWidgetManager {
|
||||
|
||||
public static AppWidgetManager getInstance(Context context) {
|
||||
return new AppWidgetManager();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,6 +405,9 @@ public class Context extends Object {
|
||||
return null;
|
||||
}
|
||||
|
||||
new Handler(Looper.getMainLooper()).post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Class<? extends Service> cls = Class.forName(component.getClassName()).asSubclass(Service.class);
|
||||
if (!runningServices.containsKey(cls)) {
|
||||
@@ -412,10 +415,14 @@ public class Context extends Object {
|
||||
service.onCreate();
|
||||
runningServices.put(cls, service);
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,4 +25,6 @@ public interface DialogInterface {
|
||||
}
|
||||
public interface OnMultiChoiceClickListener {
|
||||
}
|
||||
public interface OnKeyListener {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,4 +40,6 @@ public class IntentFilter {
|
||||
public String getAction(int index) {
|
||||
return actions.get(index);
|
||||
}
|
||||
|
||||
public void setPriority(int priority) {}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 <service>: " + parser.getName() + " at " + mArchiveSourcePath + " " + parser.getPositionDescription());
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user