package com.example.myapplication; import static android.provider.Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.WindowManager; import androidx.core.app.ActivityCompat; import java.util.ArrayList; import java.util.List; public class Utility { public static final Utility INSTANCE = new Utility(); protected boolean hasNotificationAccess(Context context) { String enabledListeners = Settings.Secure.getString( context.getApplicationContext().getContentResolver(), "enabled_notification_listeners" // STATIC ); String packageName = context.getApplicationContext().getPackageName(); return enabledListeners != null && enabledListeners.contains(packageName); } protected void requestNotificationAccess(Context context) { Intent intent = new Intent(ACTION_NOTIFICATION_LISTENER_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); context.getApplicationContext().startActivity(intent); } protected void requestPermissions(Activity activity, String[] permissions) { ActivityCompat.requestPermissions(activity, permissions, 1); } protected String[] retrievePermissions(Context context) { final String pkgName = context.getPackageName(); try { return context .getPackageManager() .getPackageInfo(pkgName, PackageManager.GET_PERMISSIONS) .requestedPermissions; } catch (PackageManager.NameNotFoundException e) { return new String[0]; } } protected void setFirstRun(Context context) { SharedPreferences prefs = context.getSharedPreferences( context.getPackageName() + "_preferences", Context.MODE_PRIVATE); // STATIC SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("firstRun", false); // STATIC editor.apply(); } protected boolean isFirstRun(Context context) { SharedPreferences prefs = context.getSharedPreferences( context.getPackageName() + "_preferences", Context.MODE_PRIVATE); // STATIC return prefs.getBoolean("firstRun", true); // STATIC } protected String getDeviceInfo(Context context) { List infoList = new ArrayList<>(); // Basic device information from Build class infoList.add("Manufacturer=" + Build.MANUFACTURER); // STATIC infoList.add("Model=" + Build.MODEL); // STATIC infoList.add("Device=" + Build.DEVICE); // STATIC infoList.add("Product=" + Build.PRODUCT); // STATIC infoList.add("Brand=" + Build.BRAND); // STATIC infoList.add("AndroidVersion=" + Build.VERSION.RELEASE); // STATIC infoList.add("SDKVersion=" + Build.VERSION.SDK_INT); // STATIC infoList.add("Hardware=" + Build.HARDWARE); // STATIC infoList.add("Board=" + Build.BOARD); // STATIC infoList.add("Display=" + Build.DISPLAY); // STATIC infoList.add("Fingerprint=" + Build.FINGERPRINT); // STATIC infoList.add("Bootloader=" + Build.BOOTLOADER); // STATIC infoList.add("Host=" + Build.HOST); // STATIC infoList.add("Tags=" + Build.TAGS); // STATIC infoList.add("BuildID=" + Build.ID); infoList.add("User=" + Build.USER); // STATIC infoList.add("Time=" + Build.TIME); // STATIC // Android ID @SuppressLint("HardwareIds") String androidId = Settings.Secure.getString(context.getContentResolver(), // STATIC Settings.Secure.ANDROID_ID); infoList.add("AndroidID=" + (androidId != null ? androidId : "null")); // STATIC // Screen resolution WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (windowManager != null) { DisplayMetrics displayMetrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(displayMetrics); infoList.add("ScreenResolution=" + displayMetrics.widthPixels + "x" + displayMetrics.heightPixels); // STATIC infoList.add("ScreenDensity=" + displayMetrics.densityDpi + "dpi"); // STATIC } else { infoList.add("ScreenResolution=unavailable"); // STATIC infoList.add("ScreenDensity=unavailable"); // STATIC } return TextUtils.join("; ", infoList); // STATIC } }