15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)package org.chromium.android_webview;
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.content.Context;
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.content.res.AssetFileDescriptor;
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.content.res.AssetManager;
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.util.Log;
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.base.CalledByNative;
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.base.JNINamespace;
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.io.IOException;
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/**
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * A utility class to retrieve references to uncompressed assets insides the apk. A reference is
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * defined as tuple (file descriptor, offset, size) enabling direct mapping without deflation.
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)@JNINamespace("android_webview")
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)public class AwAssets {
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    private static final String LOGTAG = "AwAssets";
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    @CalledByNative
26    public static long[] openAsset(Context context, String fileName) {
27        AssetFileDescriptor afd = null;
28        try {
29            AssetManager manager = context.getAssets();
30            afd = manager.openFd(fileName);
31            return new long[] { afd.getParcelFileDescriptor().detachFd(),
32                                afd.getStartOffset(),
33                                afd.getLength() };
34        } catch (IOException e) {
35            Log.e(LOGTAG, "Error while loading asset " + fileName + ": " + e);
36            return new long[] {-1, -1, -1};
37        } finally {
38            try {
39                if (afd != null) {
40                    afd.close();
41                }
42            } catch (IOException e2) {
43                Log.e(LOGTAG, "Unable to close AssetFileDescriptor", e2);
44            }
45        }
46    }
47}
48