add device info collector
This commit is contained in:
1 parent
4140922530
commit
1c3886e10c
4 files changed
+177
No files matched your search
@@ -11,6 +11,7 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.biometrics.BiometricManager;
|
||||
import android.hardware.biometrics.BiometricPrompt;
|
||||
@@ -47,11 +48,14 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
public class BluememeUtils extends CordovaPlugin {
|
||||
private static final String TAG = "BluememeUtils";
|
||||
private static final String PREFS = "bluememe_utils";
|
||||
private static final String KEY_DEVICE_KEY = "device_key";
|
||||
private static final String KEY_FCM_TOKEN = "fcm_token";
|
||||
private static final String KEY_INITIAL_NOTIFICATION = "initial_notification";
|
||||
private static final String ACTION_SUFFIX = ".BLUEMEME_UTILS_EVENT";
|
||||
@@ -75,6 +79,10 @@ public class BluememeUtils extends CordovaPlugin {
|
||||
|
||||
@Override
|
||||
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
||||
if ("getDeviceInfo".equals(action)) {
|
||||
getDeviceInfo(callbackContext);
|
||||
return true;
|
||||
}
|
||||
if ("saveWifi".equals(action)) {
|
||||
saveWifi(args.optJSONObject(0), callbackContext);
|
||||
return true;
|
||||
@@ -184,6 +192,32 @@ public class BluememeUtils extends CordovaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
private void getDeviceInfo(CallbackContext callbackContext) {
|
||||
Context context = cordova.getActivity().getApplicationContext();
|
||||
try {
|
||||
JSONObject result = new JSONObject();
|
||||
PackageInfo packageInfo = packageInfo(context);
|
||||
|
||||
result.put("deviceKey", getOrCreateDeviceKey(context));
|
||||
result.put("platform", "Android");
|
||||
result.put("appIdentifier", context.getPackageName());
|
||||
result.put("appVersion", packageInfo == null || packageInfo.versionName == null ? "" : packageInfo.versionName);
|
||||
result.put("buildNumber", packageInfo == null ? "" : String.valueOf(packageVersionCode(packageInfo)));
|
||||
result.put("osVersion", Build.VERSION.RELEASE == null ? "" : Build.VERSION.RELEASE);
|
||||
result.put("sdkVersion", Build.VERSION.SDK_INT);
|
||||
result.put("deviceModel", deviceModel());
|
||||
result.put("manufacturer", Build.MANUFACTURER == null ? "" : Build.MANUFACTURER);
|
||||
result.put("brand", Build.BRAND == null ? "" : Build.BRAND);
|
||||
result.put("model", Build.MODEL == null ? "" : Build.MODEL);
|
||||
result.put("locale", currentLocaleTag());
|
||||
result.put("timeZone", TimeZone.getDefault().getID());
|
||||
|
||||
callbackContext.success(result);
|
||||
} catch (Exception ex) {
|
||||
sendError(callbackContext, "DEVICE_INFO_FAILED", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void connectWifi(JSONObject options, CallbackContext callbackContext) {
|
||||
JSONObject normalized = normalizeWifiOptions(options);
|
||||
String validationError = validateWifiOptions(normalized);
|
||||
@@ -1124,6 +1158,60 @@ public class BluememeUtils extends CordovaPlugin {
|
||||
return value == null ? "" : String.valueOf(value);
|
||||
}
|
||||
|
||||
private static PackageInfo packageInfo(Context context) {
|
||||
try {
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
return packageManager.getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(0));
|
||||
}
|
||||
return packageManager.getPackageInfo(context.getPackageName(), 0);
|
||||
} catch (PackageManager.NameNotFoundException ex) {
|
||||
Log.w(TAG, "Unable to read package info.", ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static long packageVersionCode(PackageInfo packageInfo) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
return packageInfo.getLongVersionCode();
|
||||
}
|
||||
return packageInfo.versionCode;
|
||||
}
|
||||
|
||||
private static String getOrCreateDeviceKey(Context context) {
|
||||
SharedPreferences preferences = prefs(context);
|
||||
String existing = preferences.getString(KEY_DEVICE_KEY, "");
|
||||
if (!TextUtils.isEmpty(existing)) {
|
||||
return existing;
|
||||
}
|
||||
String generated = UUID.randomUUID().toString();
|
||||
preferences.edit().putString(KEY_DEVICE_KEY, generated).apply();
|
||||
return generated;
|
||||
}
|
||||
|
||||
private static String deviceModel() {
|
||||
String manufacturer = Build.MANUFACTURER == null ? "" : Build.MANUFACTURER;
|
||||
String model = Build.MODEL == null ? "" : Build.MODEL;
|
||||
if (TextUtils.isEmpty(manufacturer)) {
|
||||
return model;
|
||||
}
|
||||
if (TextUtils.isEmpty(model)) {
|
||||
return manufacturer;
|
||||
}
|
||||
if (model.toLowerCase(Locale.US).startsWith(manufacturer.toLowerCase(Locale.US))) {
|
||||
return model;
|
||||
}
|
||||
return manufacturer + " " + model;
|
||||
}
|
||||
|
||||
private static String currentLocaleTag() {
|
||||
Locale locale = Locale.getDefault();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
return locale.toLanguageTag();
|
||||
}
|
||||
return locale.toString();
|
||||
}
|
||||
|
||||
static String eventAction(Context context) {
|
||||
return context.getPackageName() + ACTION_SUFFIX;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user