package cn.edu.buaa.act.sdp.malwaredetector.entity;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.RemoteException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import cn.edu.buaa.act.sdp.malwaredetector.util.DateUtil;
/**
* Created by yaodh on 2014/11/11.
*/
public class PackageInfoWithSize {
String packageName;
String installDate;
String appName;
Drawable icon;
String version;
long totalSize;
public PackageInfoWithSize(Context context, PackageInfo packageInfo) {
PackageManager packageManager = context.getPackageManager();
appName = packageInfo.applicationInfo.loadLabel(packageManager).toString();
packageName = packageInfo.packageName;
version = packageInfo.versionName;
icon = packageInfo.applicationInfo.loadIcon(packageManager);
installDate = DateUtil.getDateFromLong(packageInfo.firstInstallTime, "yyyy-MM-dd");
totalSize = getPackageSize(context, packageInfo.packageName);
}
public String getPackageName() {
return packageName;
}
public String getInstallDate() {
return installDate;
}
public String getAppName() {
return appName;
}
public Drawable getIcon() {
return icon;
}
public String getVersion() {
return version;
}
public long getTotalSize() {
return totalSize;
}
public long getPackageSize(Context context, String packageName) {
try {
Method method = PackageManager.class.getMethod("getPackageSizeInfo",
new Class[]{String.class, IPackageStatsObserver.class});
method.invoke(context.getPackageManager(), new Object[]{
packageName,
new IPackageStatsObserver.Stub() {
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
totalSize = pStats.cacheSize + pStats.codeSize + pStats.dataSize
+ pStats.externalCacheSize + pStats.externalDataSize + pStats.externalCodeSize
+ pStats.externalMediaSize + pStats.externalObbSize;
}
}
});
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return totalSize;
}
}