diff --git a/src/api-impl/android/content/ContentProvider.java b/src/api-impl/android/content/ContentProvider.java index 1f9e8cb1..8c0aa88b 100644 --- a/src/api-impl/android/content/ContentProvider.java +++ b/src/api-impl/android/content/ContentProvider.java @@ -6,6 +6,7 @@ import java.util.Map; import android.content.pm.PackageParser; import android.content.pm.ProviderInfo; +import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.net.Uri; import android.os.ParcelFileDescriptor; @@ -55,6 +56,8 @@ public abstract class ContentProvider { public abstract ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException; + public abstract AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException; + public void attachInfo(Context context, ProviderInfo provider) {} } diff --git a/src/api-impl/android/content/ContentResolver.java b/src/api-impl/android/content/ContentResolver.java index 4732a580..4ff0260b 100644 --- a/src/api-impl/android/content/ContentResolver.java +++ b/src/api-impl/android/content/ContentResolver.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileNotFoundException; import android.accounts.Account; +import android.content.res.AssetFileDescriptor; import android.database.ContentObserver; import android.database.Cursor; import android.database.MatrixCursor; @@ -39,6 +40,18 @@ public class ContentResolver { } } + public AssetFileDescriptor openAssetFileDescriptor(Uri uri, String mode) throws FileNotFoundException { + if ("file".equals(uri.getScheme())) { + return new AssetFileDescriptor(ParcelFileDescriptor.open(new File(uri.getPath()), ParcelFileDescriptor.parseMode(mode)), 0, AssetFileDescriptor.UNKNOWN_LENGTH); + } else { + ContentProvider provider = ContentProvider.providers.get(uri.getAuthority()); + if (provider != null) + return provider.openAssetFile(uri, mode); + else + return null; + } + } + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { ContentProvider provider = ContentProvider.providers.get(uri.getAuthority()); if (provider != null) { diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index c0888154..1908007e 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -54,6 +54,7 @@ import android.view.Display; import android.view.LayoutInflater; import android.view.WindowManagerImpl; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.CaptioningManager; import android.view.inputmethod.InputMethodManager; import java.io.File; import java.io.FileInputStream; @@ -257,6 +258,8 @@ public class Context extends Object { return new AppOpsManager(); case "user": return new UserManager(); + case "captioning": + return new CaptioningManager(); default: Slog.e(TAG, "!!!!!!! getSystemService: case >" + name + "< is not implemented yet"); return null; diff --git a/src/api-impl/android/content/Intent.java b/src/api-impl/android/content/Intent.java index e713acde..f1771885 100644 --- a/src/api-impl/android/content/Intent.java +++ b/src/api-impl/android/content/Intent.java @@ -424,4 +424,8 @@ public class Intent implements Parcelable { && Objects.equals(this.data, other.data) && Objects.equals(this.type, other.type); } + + public long[] getLongArrayExtra(String name) { + return extras.getLongArray(name); + } } diff --git a/src/api-impl/android/graphics/PathMeasure.java b/src/api-impl/android/graphics/PathMeasure.java index 265d2160..97c7fe29 100644 --- a/src/api-impl/android/graphics/PathMeasure.java +++ b/src/api-impl/android/graphics/PathMeasure.java @@ -20,4 +20,8 @@ public class PathMeasure { public boolean getPosTan(float distance, float[] pos, float[] tan) { return false; } + + public boolean nextContour() { + return false; + } } diff --git a/src/api-impl/android/hardware/display/DisplayManager.java b/src/api-impl/android/hardware/display/DisplayManager.java index 66ab9037..26e63999 100644 --- a/src/api-impl/android/hardware/display/DisplayManager.java +++ b/src/api-impl/android/hardware/display/DisplayManager.java @@ -13,6 +13,8 @@ public final class DisplayManager { public void registerDisplayListener(DisplayListener listener, Handler handler) { } + public void unregisterDisplayListener(DisplayListener listener) {} + public Display[] getDisplays() { return new Display[0]; } diff --git a/src/api-impl/android/media/MediaCodec.java b/src/api-impl/android/media/MediaCodec.java index f48564fb..be9d00d6 100644 --- a/src/api-impl/android/media/MediaCodec.java +++ b/src/api-impl/android/media/MediaCodec.java @@ -78,10 +78,18 @@ public class MediaCodec { return inputBuffers; } + public ByteBuffer getInputBuffer(int index) { + return inputBuffers[index]; + } + public ByteBuffer[] getOutputBuffers() { return outputBuffers; } + public ByteBuffer getOutputBuffer(int index) { + return outputBuffers[index]; + } + public int dequeueOutputBuffer(BufferInfo info, long timeoutUs) { if (!outputFormatSet) { outputFormatSet = true; @@ -107,6 +115,11 @@ public class MediaCodec { freeOutputBuffers.add(index); } + public void releaseOutputBuffer(int index, long presentationTimeUs) { + native_releaseOutputBuffer(native_codec, outputBuffers[index], true); + freeOutputBuffers.add(index); + } + public MediaFormat getOutputFormat() { return mediaFormat; } @@ -155,6 +168,8 @@ public class MediaCodec { System.out.println("MediaCodec.setVideoScalingMode(" + mode + "): codecName=" + codecName); } + public void stop() {} + public void release() { System.out.println("MediaCodec.release(): codecName=" + codecName); if (native_codec != 0) { diff --git a/src/api-impl/android/media/MediaCodecInfo.java b/src/api-impl/android/media/MediaCodecInfo.java index 1c603793..d9891491 100644 --- a/src/api-impl/android/media/MediaCodecInfo.java +++ b/src/api-impl/android/media/MediaCodecInfo.java @@ -23,10 +23,23 @@ public class MediaCodecInfo { } public CodecCapabilities getCapabilitiesForType(String type) { - return null; + return new CodecCapabilities(); } - public static class CodecCapabilities {} + public static class CodecCapabilities { + + public CodecProfileLevel[] profileLevels; + + public boolean isFeatureSupported(String feature) { + System.out.println("CodecCapabilities.isFeatureSupported("+feature+")"); + return false; + } + + public boolean isFeatureRequired(String feature) { + System.out.println("CodecCapabilities.isFeatureRequired("+feature+")"); + return false; + } + } public static class CodecProfileLevel {} } diff --git a/src/api-impl/android/media/MediaCodecList.java b/src/api-impl/android/media/MediaCodecList.java index 80ad0dc6..f940920a 100644 --- a/src/api-impl/android/media/MediaCodecList.java +++ b/src/api-impl/android/media/MediaCodecList.java @@ -2,6 +2,8 @@ package android.media; public class MediaCodecList { + public MediaCodecList(int kind) {} + public static int getCodecCount() { return 6; } @@ -25,4 +27,11 @@ public class MediaCodecList { } } + public MediaCodecInfo[] getCodecInfos() { + MediaCodecInfo[] infos = new MediaCodecInfo[getCodecCount()]; + for (int i=0; i