package com.majeur.applicationsinfo.utils;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.ConfigurationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.ServiceInfo;
import android.os.Build;
import android.util.TypedValue;
import android.view.WindowManager;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Utils {
public static int getArrayLengthSafely(Object[] array) {
return array == null ? 0 : array.length;
}
public static int dpToPx(Context c, int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, c.getResources().getDisplayMetrics());
}
public static int compareBooleans(boolean b1, boolean b2) {
if (b1 && !b2) {
return +1;
}
if (!b1 && b2) {
return -1;
}
return 0;
}
public static String getFileContent(File file) {
if (file.isDirectory())
return null;
try {
Scanner scanner = new Scanner(file);
String result = "";
while (scanner.hasNext())
result += scanner.next();
return result;
} catch (FileNotFoundException e) {
return null;
}
}
public static boolean isApi20() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH;
}
public static String getLaunchMode(int mode) {
switch (mode) {
case ActivityInfo.LAUNCH_MULTIPLE:
return "Multiple";
case ActivityInfo.LAUNCH_SINGLE_INSTANCE:
return "Single instance";
case ActivityInfo.LAUNCH_SINGLE_TASK:
return "Single task";
case ActivityInfo.LAUNCH_SINGLE_TOP:
return "Single top";
default:
return "null";
}
}
public static String getOrientationString(int orientation) {
switch (orientation) {
case ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED:
return "Unspecified";
case ActivityInfo.SCREEN_ORIENTATION_BEHIND:
return "Behind";
case ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR:
return "Full sensor";
case ActivityInfo.SCREEN_ORIENTATION_FULL_USER:
return "Full user";
case ActivityInfo.SCREEN_ORIENTATION_LOCKED:
return "Locked";
case ActivityInfo.SCREEN_ORIENTATION_NOSENSOR:
return "No sensor";
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
return "Landscape";
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
return "Portrait";
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
return "Reverse portrait";
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
return "Reverse landscape";
case ActivityInfo.SCREEN_ORIENTATION_USER:
return "User";
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
return "Sensor landscape";
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
return "Sensor portrait";
case ActivityInfo.SCREEN_ORIENTATION_SENSOR:
return "Sensor";
case ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE:
return "User landscape";
case ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT:
return "User portrait";
default:
return "null";
}
}
public static String getSoftInputString(int flag) {
StringBuilder builder = new StringBuilder();
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) != 0)
builder.append("Adjust nothing, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) != 0)
builder.append("Adjust pan, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) != 0)
builder.append("Adjust resize, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED) != 0)
builder.append("Adjust unspecified, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) != 0)
builder.append("Always hidden, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) != 0)
builder.append("Always visible, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0)
builder.append("Hidden, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) != 0)
builder.append("Visible, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED) != 0)
builder.append("Unchanged, ");
if ((flag & WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) != 0)
builder.append("Unspecified, ");
checkStringBuilderEnd(builder);
String result = builder.toString();
return result.equals("") ? "null" : result;
}
public static String getServiceFlagsString(int flag) {
StringBuilder builder = new StringBuilder();
if ((flag & ServiceInfo.FLAG_STOP_WITH_TASK) != 0)
builder.append("Stop with task, ");
if ((flag & ServiceInfo.FLAG_SINGLE_USER) != 0)
builder.append("Single user, ");
if ((flag & ServiceInfo.FLAG_ISOLATED_PROCESS) != 0)
builder.append("Isolated process, ");
checkStringBuilderEnd(builder);
String result = builder.toString();
return result.equals("") ? "null" : result;
}
public static String getProtectionLevelString(int level) {
String protLevel = "????";
switch (level & PermissionInfo.PROTECTION_MASK_BASE) {
case PermissionInfo.PROTECTION_DANGEROUS:
protLevel = "dangerous";
break;
case PermissionInfo.PROTECTION_NORMAL:
protLevel = "normal";
break;
case PermissionInfo.PROTECTION_SIGNATURE:
protLevel = "signature";
break;
case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM:
protLevel = "signatureOrSystem";
break;
}
if ((level & PermissionInfo.PROTECTION_FLAG_SYSTEM) != 0) {
protLevel += "|system";
}
if ((level & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
protLevel += "|development";
}
if ((level & PermissionInfo.PROTECTION_FLAG_APPOP) != 0) {
protLevel += "|appop";
}
return protLevel;
}
public static String getFeatureFlagsString(int flags) {
if (flags == FeatureInfo.FLAG_REQUIRED)
return "Required";
return "null";
}
public static String getInputFeaturesString(int flag) {
String string = "";
if ((flag & ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV) != 0)
string += "Five way nav";
if ((flag & ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD) != 0)
string += (string.length() == 0 ? "" : "|") + "Hard keyboard";
return string.length() == 0 ? "null" : string;
}
public static void checkStringBuilderEnd(StringBuilder builder) {
int length = builder.length();
if (length > 2)
builder.delete(builder.length() - 2, builder.length());
}
}