package org.bbs.apklauncher;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.bbs.felix.util.PackageParser;
import org.bbs.felix.util.PackageParser.PackageInfoX;
import org.bbs.felix.util.PackageParser.PackageInfoX.ActivityInfoX;
import org.bbs.felix.util.PackageParser.PackageInfoX.ApplicationInfoX;
import android.content.Context;
import android.content.pm.ActivityInfo;
public class InstalledAPks {
private static InstalledAPks sInstance;
private ArrayList<PackageInfoX> mInfos;
private InstalledAPks() {
}
public void init(Context context, File apkDir){
mInfos = new ArrayList<PackageParser.PackageInfoX>();
if (null == apkDir) {
return ;
}
String[] files = apkDir.list();
for (String f : files) {
File file = new File(apkDir.getAbsolutePath() + "/" + f);
if (file.exists() && file.getAbsolutePath().endsWith("apk")){
PackageInfoX info = PackageParser.parseAPk(context, file.getAbsolutePath());
mInfos.add(info);
}
}
}
public ApplicationInfoX getApplication(String applicationName) {
ApplicationInfoX a = null;
boolean has = false;
for (PackageInfoX m : mInfos) {
if (applicationName.equals(m.applicationInfo.name)) {
has = true;
a = (ApplicationInfoX) m.applicationInfo;
break;
}
}
return a;
}
public boolean hasApplication(String applicationName) {
boolean has = false;
for (PackageInfoX m : mInfos) {
if (applicationName.equals(m.applicationInfo.packageName)) {
has = true;
break;
}
}
return has;
}
public ActivityInfoX getActivity(String activityName) {
ActivityInfoX aInfo = null;
boolean has = false;
for (PackageInfoX m : mInfos) {
if (m.activities != null) {
for (ActivityInfo a : m.activities) {
ActivityInfoX aX = (ActivityInfoX) a;
if (activityName.equals(a.name)) {
has = true;
aInfo = aX;
break;
}
}
}
}
return aInfo;
}
public boolean hasActivity(String activityName) {
boolean has = false;
for (PackageInfoX m : mInfos) {
if (m.activities != null) {
for (ActivityInfo a : m.activities) {
if (activityName.equals(a.name)) {
has = true;
break;
}
}
}
}
return has;
}
public List<PackageInfoX> getAllApks(){
return mInfos;
}
public ActivityInfoX getActivityInfo(String activityClassName) {
ActivityInfoX info = null;
for (PackageInfoX m : mInfos) {
if (m.activities != null && m.activities.length > 0) {
final int count = m.activities.length;
for (int i = 0 ; i < count; i++){
ActivityInfoX a = (ActivityInfoX) m.activities[i];
if (activityClassName.equals(a.name)) {
return a;
}
}}
}
return info;
}
public static InstalledAPks getInstance() {
if (null == sInstance) {
sInstance = new InstalledAPks();
}
return sInstance;
}
}