package com.liato.bankdroid.utils;
import android.content.Context;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.UUID;
/**
* Provides a unique identification for the installation.
*
* The id is generated the first time the {@link #id(android.content.Context)} is called
* and are then persisted until the application is uninstalled.
*
* @see <a href="http://android-developers.blogspot.se/2011/03/identifying-app-installations.html">Identifying
* App Installations</a>.
*/
public class Installation {
private static final String INSTALLATION = "INSTALLATION";
private static String sID = null;
/**
* Get the unique identification for the installation.
* A new id will be generated the first time the method is called and are then
* persisted until the application is uninstalled.
*
* @return The unique identification for the installed application.
*/
public synchronized static String id(Context context) {
if (sID == null) {
File installation = new File(context.getFilesDir(), INSTALLATION);
try {
if (!installation.exists()) {
writeInstallationFile(installation);
}
sID = readInstallationFile(installation);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return sID;
}
private static String readInstallationFile(File installation) throws IOException {
RandomAccessFile f = new RandomAccessFile(installation, "r");
byte[] bytes = new byte[(int) f.length()];
f.readFully(bytes);
f.close();
return StringUtils.toString(bytes);
}
private static void writeInstallationFile(File installation) throws IOException {
FileOutputStream out = new FileOutputStream(installation);
String id = UUID.randomUUID().toString();
out.write(StringUtils.getBytes(id));
out.close();
}
}