mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-02-16 02:20:55 +00:00
74 lines
2.2 KiB
Java
74 lines
2.2 KiB
Java
package com.limelight.computers;
|
|
|
|
import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.OutputStreamWriter;
|
|
import java.util.Locale;
|
|
import java.util.Random;
|
|
|
|
import com.limelight.LimeLog;
|
|
|
|
import android.content.Context;
|
|
|
|
public class IdentityManager {
|
|
private static final String UNIQUE_ID_FILE_NAME = "uniqueid";
|
|
private static final int UID_SIZE_IN_BYTES = 8;
|
|
|
|
private String uniqueId;
|
|
|
|
public IdentityManager(Context c) {
|
|
uniqueId = loadUniqueId(c);
|
|
if (uniqueId == null) {
|
|
uniqueId = generateNewUniqueId(c);
|
|
}
|
|
|
|
LimeLog.info("UID is now: "+uniqueId);
|
|
}
|
|
|
|
public String getUniqueId() {
|
|
return uniqueId;
|
|
}
|
|
|
|
private static String loadUniqueId(Context c) {
|
|
// 2 Hex digits per byte
|
|
char[] uid = new char[UID_SIZE_IN_BYTES * 2];
|
|
LimeLog.info("Reading UID from disk");
|
|
try (final InputStreamReader reader =
|
|
new InputStreamReader(c.openFileInput(UNIQUE_ID_FILE_NAME))
|
|
) {
|
|
if (reader.read(uid) != UID_SIZE_IN_BYTES * 2) {
|
|
LimeLog.severe("UID file data is truncated");
|
|
return null;
|
|
}
|
|
return new String(uid);
|
|
} catch (FileNotFoundException e) {
|
|
LimeLog.info("No UID file found");
|
|
return null;
|
|
} catch (IOException e) {
|
|
LimeLog.severe("Error while reading UID file");
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static String generateNewUniqueId(Context c) {
|
|
// Generate a new UID hex string
|
|
LimeLog.info("Generating new UID");
|
|
String uidStr = String.format((Locale)null, "%016x", new Random().nextLong());
|
|
|
|
try (final OutputStreamWriter writer =
|
|
new OutputStreamWriter(c.openFileOutput(UNIQUE_ID_FILE_NAME, 0))
|
|
) {
|
|
writer.write(uidStr);
|
|
LimeLog.info("UID written to disk");
|
|
} catch (IOException e) {
|
|
LimeLog.severe("Error while writing UID file");
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// We can return a UID even if I/O fails
|
|
return uidStr;
|
|
}
|
|
}
|