1cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard/* 2cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Copyright (C) 2011 The Android Open Source Project 3cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * 48aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 58aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * you may not use this file except in compliance with the License. 68aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * You may obtain a copy of the License at 7cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * 88aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * 10cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Unless required by applicable law or agreed to in writing, software 118aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 128aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * See the License for the specific language governing permissions and 148aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * limitations under the License. 15cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard */ 16cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 17cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalardpackage com.android.inputmethod.latin; 18cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 195b91b551e5ffaf2c2e691dfbd434f21c82293986Jean Chalardimport com.android.inputmethod.latin.common.FileUtils; 202fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 21cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalardimport java.io.File; 22cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 23cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard/** 24cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * Immutable class to hold the address of an asset. 25cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * As opposed to a normal file, an asset is usually represented as a contiguous byte array in 26cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * the package file. Open it correctly thus requires the name of the package it is in, but 27cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard * also the offset in the file and the length of this data. This class encapsulates these three. 28cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard */ 291562fc91f015616f900b82bb44e6f1493be92c5aJean Chalardpublic final class AssetFileAddress { 30cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public final String mFilename; 31cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public final long mOffset; 32cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public final long mLength; 33cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 34cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public AssetFileAddress(final String filename, final long offset, final long length) { 35cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard mFilename = filename; 36cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard mOffset = offset; 37cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard mLength = length; 38cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard } 39cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 40d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard public static AssetFileAddress makeFromFile(final File file) { 41d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard if (!file.isFile()) return null; 42d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard return new AssetFileAddress(file.getAbsolutePath(), 0L, file.length()); 43d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard } 44d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard 45cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public static AssetFileAddress makeFromFileName(final String filename) { 46cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard if (null == filename) return null; 47d515f134f726c432c0bab5600e7b31ed989fb1b5Jean Chalard return makeFromFile(new File(filename)); 48cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard } 49cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard 50cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard public static AssetFileAddress makeFromFileNameAndOffset(final String filename, 51cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard final long offset, final long length) { 52cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard if (null == filename) return null; 53ab72a97d7ce44230a0c824797d1675a5ca354a56Tadashi G. Takaoka final File f = new File(filename); 54ab72a97d7ce44230a0c824797d1675a5ca354a56Tadashi G. Takaoka if (!f.isFile()) return null; 55cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard return new AssetFileAddress(filename, offset, length); 56cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard } 572fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 582fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public boolean pointsToPhysicalFile() { 592fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa return 0 == mOffset; 602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public void deleteUnderlyingFile() { 632fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa FileUtils.deleteRecursively(new File(mFilename)); 642fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa } 6591a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu 6691a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu @Override 6791a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu public String toString() { 6891a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu return String.format("%s (offset=%d, length=%d)", mFilename, mOffset, mLength); 6991a81a2790ae968ca4bca0451cf5a4ed8fc71d71Adrian Velicu } 70cba93f50c3d46ada773ec49435689dc3e2094385Jean Chalard} 71