/** * Copyright (c) 2016 Couchbase, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ package com.couchbase.lite.util; import android.content.Context; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.ZipInputStream; /** * Created by pasin on 11/22/15. */ public class ICUUtils { public static String getICUDatabasePath(Context context) { if (new File("/system/usr/icu/icudt53l.dat").exists()) return "/system/usr"; else { File destDir = context.getFilesDir(); try { loadICUData(context, destDir); } catch (IOException e) { Log.e(Log.TAG_DATABASE, "Cannot load ICU database file", e); return null; } return destDir.getAbsolutePath(); } } private static void loadICUData(Context context, File destDir) throws IOException { OutputStream out = null; ZipInputStream in = null; File icuDir = new File(destDir, "icu"); File icuDataFile = new File(icuDir, "icudt53l.dat"); try { if (!icuDir.exists()) icuDir.mkdirs(); if (!icuDataFile.exists()) { in = new ZipInputStream(context.getAssets().open("icudt53l.zip")); in.getNextEntry(); out = new FileOutputStream(icuDataFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } } catch (IOException e) { if (icuDataFile.exists()) icuDataFile.delete(); throw e; } finally { if (in != null) in.close(); if (out != null) { out.flush(); out.close(); } } } }