OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.content.browser; | 5 package org.chromium.base; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.content.SharedPreferences; | 8 import android.content.SharedPreferences; |
9 import android.content.pm.PackageInfo; | 9 import android.content.pm.PackageInfo; |
10 import android.content.pm.PackageManager; | 10 import android.content.pm.PackageManager; |
11 import android.content.res.AssetManager; | 11 import android.content.res.AssetManager; |
12 import android.os.AsyncTask; | 12 import android.os.AsyncTask; |
13 import android.preference.PreferenceManager; | 13 import android.preference.PreferenceManager; |
14 import android.util.Log; | 14 import android.util.Log; |
15 | 15 |
16 import org.chromium.base.PathUtils; | |
17 import org.chromium.ui.base.LocalizationUtils; | |
18 | |
19 import java.io.File; | 16 import java.io.File; |
20 import java.io.FileOutputStream; | 17 import java.io.FileOutputStream; |
21 import java.io.FilenameFilter; | 18 import java.io.FilenameFilter; |
22 import java.io.IOException; | 19 import java.io.IOException; |
23 import java.io.InputStream; | 20 import java.io.InputStream; |
24 import java.io.OutputStream; | 21 import java.io.OutputStream; |
22 import java.util.ArrayList; | |
25 import java.util.HashSet; | 23 import java.util.HashSet; |
24 import java.util.List; | |
26 import java.util.concurrent.CancellationException; | 25 import java.util.concurrent.CancellationException; |
27 import java.util.concurrent.ExecutionException; | 26 import java.util.concurrent.ExecutionException; |
28 import java.util.regex.Pattern; | 27 import java.util.regex.Pattern; |
29 | 28 |
30 /** | 29 /** |
31 * Handles extracting the necessary resources bundled in an APK and moving them to a location on | 30 * Handles extracting the necessary resources bundled in an APK and moving them to a location on |
32 * the file system accessible from the native code. | 31 * the file system accessible from the native code. |
33 */ | 32 */ |
34 public class ResourceExtractor { | 33 public class ResourceExtractor { |
35 | 34 |
(...skipping 24 matching lines...) Expand all Loading... | |
60 } | 59 } |
61 | 60 |
62 String timestampFile = checkPakTimestamp(outputDir); | 61 String timestampFile = checkPakTimestamp(outputDir); |
63 if (timestampFile != null) { | 62 if (timestampFile != null) { |
64 deleteFiles(); | 63 deleteFiles(); |
65 } | 64 } |
66 | 65 |
67 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferen ces(mContext); | 66 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferen ces(mContext); |
68 HashSet<String> filenames = (HashSet<String>) prefs.getStringSet( | 67 HashSet<String> filenames = (HashSet<String>) prefs.getStringSet( |
69 PAK_FILENAMES, new HashSet<String>()); | 68 PAK_FILENAMES, new HashSet<String>()); |
70 String currentLocale = LocalizationUtils.getDefaultLocale(); | 69 String currentLocale = LocaleUtils.getDefaultLocale(); |
71 String currentLanguage = currentLocale.split("-", 2)[0]; | 70 String currentLanguage = currentLocale.split("-", 2)[0]; |
72 | 71 |
73 if (prefs.getString(LAST_LANGUAGE, "").equals(currentLanguage) | 72 if (prefs.getString(LAST_LANGUAGE, "").equals(currentLanguage) |
74 && filenames.size() >= sMandatoryPaks.length) { | 73 && filenames.size() >= sMandatoryPaks.length) { |
75 boolean filesPresent = true; | 74 boolean filesPresent = true; |
76 for (String file : filenames) { | 75 for (String file : filenames) { |
77 if (!new File(outputDir, file).exists()) { | 76 if (!new File(outputDir, file).exists()) { |
78 filesPresent = false; | 77 filesPresent = false; |
79 break; | 78 break; |
80 } | 79 } |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 } | 255 } |
257 | 256 |
258 /** | 257 /** |
259 * By default the ResourceExtractor will attempt to extract a pak resource f or the users | 258 * By default the ResourceExtractor will attempt to extract a pak resource f or the users |
260 * currently specified locale. This behavior can be changed with this functi on and is | 259 * currently specified locale. This behavior can be changed with this functi on and is |
261 * only needed by tests. | 260 * only needed by tests. |
262 * @param extract False if we should not attempt to extract a pak file for | 261 * @param extract False if we should not attempt to extract a pak file for |
263 * the users currently selected locale and try to extract only the | 262 * the users currently selected locale and try to extract only the |
264 * pak files specified in sMandatoryPaks. | 263 * pak files specified in sMandatoryPaks. |
265 */ | 264 */ |
265 @VisibleForTesting | |
266 public static void setExtractImplicitLocaleForTesting(boolean extract) { | 266 public static void setExtractImplicitLocaleForTesting(boolean extract) { |
267 assert (sInstance == null || sInstance.mExtractTask == null) | 267 assert (sInstance == null || sInstance.mExtractTask == null) |
268 : "Must be called before startExtractingResources is called"; | 268 : "Must be called before startExtractingResources is called"; |
269 sExtractImplicitLocalePak = extract; | 269 sExtractImplicitLocalePak = extract; |
270 } | 270 } |
271 | 271 |
272 /** | |
273 * Collect all the 'pak' resources, packaged as assets, for extraction durin g | |
274 * running the tests. | |
275 */ | |
276 @VisibleForTesting | |
277 public void collectAllPackagedPakAssets() { | |
Ted C
2014/09/09 17:51:00
I think calling this as:
setExtractAllPaksForTest
vivekg
2014/09/09 18:01:31
Sure, how about just having extractAllPaksForTesti
Ted C
2014/09/09 18:36:19
It is not actually extracting anything though, so
vivekg
2014/09/09 18:46:32
Your initial proposal of having the name as 'setEx
| |
278 List<String> pakFileAssets = new ArrayList<String>(); | |
279 AssetManager manager = mContext.getResources().getAssets(); | |
280 try { | |
281 String[] files = manager.list(""); | |
282 for (String file : files) { | |
283 if (file.endsWith(".pak")) | |
284 pakFileAssets.add(file); | |
Ted C
2014/09/09 17:51:00
braces are always required in java. You can put s
vivekg
2014/09/09 18:01:31
Sure, will change. Thank you.
| |
285 } | |
286 } catch (IOException e) { | |
287 Log.w(LOGTAG, "Exception while accessing assets: " + e.getMessage()) ; | |
Ted C
2014/09/09 17:51:00
Use this version instead that takes the exception
vivekg
2014/09/09 18:01:31
Sure.
| |
288 } | |
289 setMandatoryPaksToExtract(pakFileAssets.toArray(new String[pakFileAssets .size()])); | |
290 } | |
291 | |
272 private ResourceExtractor(Context context) { | 292 private ResourceExtractor(Context context) { |
273 mContext = context.getApplicationContext(); | 293 mContext = context.getApplicationContext(); |
274 } | 294 } |
275 | 295 |
276 public void waitForCompletion() { | 296 public void waitForCompletion() { |
277 if (shouldSkipPakExtraction()) { | 297 if (shouldSkipPakExtraction()) { |
278 return; | 298 return; |
279 } | 299 } |
280 | 300 |
281 assert mExtractTask != null; | 301 assert mExtractTask != null; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
344 /** | 364 /** |
345 * Pak extraction not necessarily required by the embedder; we allow them to skip | 365 * Pak extraction not necessarily required by the embedder; we allow them to skip |
346 * this process if they call setMandatoryPaksToExtract with a single empty S tring. | 366 * this process if they call setMandatoryPaksToExtract with a single empty S tring. |
347 */ | 367 */ |
348 private static boolean shouldSkipPakExtraction() { | 368 private static boolean shouldSkipPakExtraction() { |
349 // Must call setMandatoryPaksToExtract before beginning resource extract ion. | 369 // Must call setMandatoryPaksToExtract before beginning resource extract ion. |
350 assert sMandatoryPaks != null; | 370 assert sMandatoryPaks != null; |
351 return sMandatoryPaks.length == 1 && "".equals(sMandatoryPaks[0]); | 371 return sMandatoryPaks.length == 1 && "".equals(sMandatoryPaks[0]); |
352 } | 372 } |
353 } | 373 } |
OLD | NEW |