mirror of https://github.com/termux/termux-app
111 lines
4.0 KiB
Java
111 lines
4.0 KiB
Java
package com.termux.shared.packages;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.ApplicationInfo;
|
|
import android.content.pm.PackageInfo;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.termux.shared.logger.Logger;
|
|
|
|
public class PackageUtils {
|
|
|
|
/**
|
|
* Get the {@link Context} for the package name.
|
|
*
|
|
* @param context The {@link Context} to use to get the {@link Context} of the {@code packageName}.
|
|
* @return Returns the {@link Context}. This will {@code null} if an exception is raised.
|
|
*/
|
|
public static Context getContextForPackage(@NonNull final Context context, String packageName) {
|
|
try {
|
|
return context.createPackageContext(packageName, Context.CONTEXT_RESTRICTED);
|
|
} catch (Exception e) {
|
|
Logger.logStackTraceWithMessage("Failed to get \"" + packageName + "\" package context.", e);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the {@link PackageInfo} for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@link PackageInfo}. This will be {@code null} if an exception is raised.
|
|
*/
|
|
public static PackageInfo getPackageInfoForPackage(@NonNull final Context context) {
|
|
try {
|
|
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
|
|
} catch (final Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the app name for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@code android:name} attribute.
|
|
*/
|
|
public static String getAppNameForPackage(@NonNull final Context context) {
|
|
return context.getApplicationInfo().loadLabel(context.getPackageManager()).toString();
|
|
}
|
|
|
|
/**
|
|
* Get the package name for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the package name.
|
|
*/
|
|
public static String getPackageNameForPackage(@NonNull final Context context) {
|
|
return context.getApplicationInfo().packageName;
|
|
}
|
|
|
|
/**
|
|
* Get the {@code targetSdkVersion} for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@code targetSdkVersion}.
|
|
*/
|
|
public static int getTargetSDKForPackage(@NonNull final Context context) {
|
|
return context.getApplicationInfo().targetSdkVersion;
|
|
}
|
|
|
|
/**
|
|
* Get the {@code versionName} for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@code versionName}. This will be {@code null} if an exception is raised.
|
|
*/
|
|
public static Boolean isAppForPackageADebugBuild(@NonNull final Context context) {
|
|
return ( 0 != ( context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
|
|
}
|
|
|
|
/**
|
|
* Get the {@code versionCode} for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@code versionCode}. This will be {@code null} if an exception is raised.
|
|
*/
|
|
public static Integer getVersionCodeForPackage(@NonNull final Context context) {
|
|
try {
|
|
return getPackageInfoForPackage(context).versionCode;
|
|
} catch (final Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the {@code versionName} for the package associated with the {@code context}.
|
|
*
|
|
* @param context The {@link Context} for the package.
|
|
* @return Returns the {@code versionName}. This will be {@code null} if an exception is raised.
|
|
*/
|
|
public static String getVersionNameForPackage(@NonNull final Context context) {
|
|
try {
|
|
return getPackageInfoForPackage(context).versionName;
|
|
} catch (final Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
}
|