/*
* Copyright 2014 Bevbot LLC <info@bevbot.com>
*
* This file is part of the Kegtab package from the Kegbot project. For
* more information on Kegtab or Kegbot, see <http://kegbot.org/>.
*
* Kegtab is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation, version 2.
*
* Kegtab is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with Kegtab. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kegbot.app.util;
import android.content.Context;
import android.provider.Settings.Secure;
import com.google.common.base.Strings;
import com.hoho.android.usbserial.util.HexDump;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Random;
/**
* Utility methods for getting device-unique information.
*/
public class DeviceId {
/**
* Generates and returns a unique device id.
*
* @param context
* @return
*/
public static String getDeviceId(Context context) {
final MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException();
}
final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
if (!Strings.isNullOrEmpty(androidId)) {
md.update(androidId.getBytes());
} else {
final Random random = new Random();
byte randBytes[] = new byte[16];
random.nextBytes(randBytes);
md.update(randBytes);
}
final byte[] digest = md.digest();
final byte[] shortDigest = Arrays.copyOfRange(digest, 0, 8);
final String id = HexDump.toHexString(shortDigest);
return id;
}
}