|
|
@ -23,6 +23,8 @@ import android.accounts.Account; |
|
|
|
import android.accounts.AccountManager; |
|
|
|
import android.content.Context; |
|
|
|
import android.content.Intent; |
|
|
|
import android.content.pm.PackageInfo; |
|
|
|
import android.content.pm.PackageManager; |
|
|
|
import android.content.res.TypedArray; |
|
|
|
import android.net.Uri; |
|
|
|
import android.preference.PreferenceManager; |
|
|
@ -328,6 +330,30 @@ public class Helper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static String getFingerprint(Context context) { |
|
|
|
try { |
|
|
|
PackageManager pm = context.getPackageManager(); |
|
|
|
String pkg = context.getPackageName(); |
|
|
|
PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_SIGNATURES); |
|
|
|
byte[] cert = info.signatures[0].toByteArray(); |
|
|
|
MessageDigest digest = MessageDigest.getInstance("SHA1"); |
|
|
|
byte[] bytes = digest.digest(cert); |
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
for (byte b : bytes) |
|
|
|
sb.append(Integer.toString(b & 0xff, 16).toUpperCase()); |
|
|
|
return sb.toString(); |
|
|
|
} catch (Throwable ex) { |
|
|
|
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static boolean hasValidFingerprint(Context context) { |
|
|
|
String signed = getFingerprint(context); |
|
|
|
String expected = context.getString(R.string.fingerprint); |
|
|
|
return (signed != null && signed.equals(expected)); |
|
|
|
} |
|
|
|
|
|
|
|
static boolean isPro(Context context) { |
|
|
|
if (false && BuildConfig.DEBUG) |
|
|
|
return true; |
|
|
|