package com.tns; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import com.tns.Logger; import com.tns.ExtractPolicy; import com.tns.FileExtractor; public class DefaultExtractPolicy implements ExtractPolicy { private final Logger logger; private final static String ASSETS_THUMB_FILENAME = "assetsThumb"; public DefaultExtractPolicy(Logger logger) { this.logger = logger; } public boolean shouldExtract(Context context) { String assetsThumbFilePath = context.getFilesDir().getPath() + File.separatorChar + ASSETS_THUMB_FILENAME; String oldAssetsThumb = getCachedAssetsThumb(assetsThumbFilePath); if (oldAssetsThumb == null) { return true; } else { String currentThumb = getAssetsThumb(context); if (currentThumb != null && !currentThumb.equals(oldAssetsThumb)) { return true; } } return false; } public void setAssetsThumb(Context context) { String assetsThumb = generateAssetsThumb(context); if (assetsThumb != null) { String assetsThumbFilePath = context.getFilesDir().getPath() + File.separatorChar + ASSETS_THUMB_FILENAME; saveNewAssetsThumb(assetsThumb, assetsThumbFilePath); } } public boolean forceOverwrite() { return true; } public FileExtractor extractor() { return null; } public String getAssetsThumb(Context context) { return generateAssetsThumb(context); } private String generateAssetsThumb(Context context) { try { PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int code = packageInfo.versionCode; long updateTime = packageInfo.lastUpdateTime; return String.valueOf(updateTime) + "-" + String.valueOf(code); } catch (PackageManager.NameNotFoundException e) { logger.write("Error while getting current assets thumb"); e.printStackTrace(); } return null; } private String getCachedAssetsThumb(String assetsThumbFilePath) { try { File cachedThumbFile = new File(assetsThumbFilePath); if (cachedThumbFile.exists()) { FileInputStream in = new FileInputStream(cachedThumbFile); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String cachedThumb = reader.readLine(); reader.close(); in.close(); return cachedThumb; } } catch (FileNotFoundException e) { logger.write("Error while getting current assets thumb"); e.printStackTrace(); } catch (IOException e) { logger.write("Error while getting current asstes thumb"); e.printStackTrace(); } return null; } private void saveNewAssetsThumb(String newThumb, String assetsThumbFile) { File cachedThumbFile = new File(assetsThumbFile); try { FileOutputStream out = new FileOutputStream(cachedThumbFile, false); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); try { writer.write(newThumb); writer.newLine(); writer.flush(); } finally { writer.close(); out.close(); } } catch (FileNotFoundException e) { logger.write("Error while writting current assets thumb"); e.printStackTrace(); } catch (IOException e) { logger.write("Error while writting current assets thumb"); e.printStackTrace(); } } }