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