package org.bbs.apklauncher;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipFile;
import org.bbs.felix.util.AndroidUtil;
import org.bbs.felix.util.PackageParser;
import org.bbs.felix.util.PackageParser.PackageInfoX;
import org.bbs.felix.util.PackageParser.PackageInfoX.ActivityInfoX;
import org.bbs.felixonandroid.R;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter;
import android.support.v7.widget.RecyclerView.LayoutManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class ApkLuncherActivity extends Activity {
private static final String TAG = ApkLuncherActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apk_launcher);
RecyclerView recycleView = (RecyclerView) findViewById(R.id.apk_container);
LayoutManager layoutM = new LinearLayoutManager(this);
recycleView.setLayoutManager(layoutM);
InstalledAPks apks = InstalledAPks.getInstance();
Adapter adapter = new ApkAdapter(this, parseLauncher(apks.getAllApks()));
recycleView.setAdapter(adapter);
;
}
private List<PackageInfoX.ActivityInfoX> parseLauncher(List<PackageInfoX> ms) {
List<PackageInfoX.ActivityInfoX> launchers = new ArrayList<PackageParser.PackageInfoX.ActivityInfoX>();
for (PackageInfoX m : ms) {
if (m.activities != null) {
for (ActivityInfo a : m.activities) {
PackageInfoX.ActivityInfoX aX = (ActivityInfoX) a;
if (aX.mIntents != null) {
for (PackageInfoX.IntentInfoX i : aX.mIntents) {
if (i.hasAction(Intent.ACTION_MAIN) && i.hasCategory(Intent.CATEGORY_LAUNCHER)) {
launchers.add(aX);
break;
}
}
}
}
}
}
return launchers;
}
class VH extends RecyclerView.ViewHolder {
public ImageView icon;
public TextView title;
public VH(View itemView) {
super(itemView);
}
}
class ApkAdapter extends RecyclerView.Adapter<VH> {
private List<PackageInfoX.ActivityInfoX> mApks;
public ApkAdapter(ApkLuncherActivity apkLuncherActivity,
List<PackageInfoX.ActivityInfoX> scanApks) {
mApks = scanApks;
}
@Override
public int getItemCount() {
return mApks.size();
}
@Override
public void onBindViewHolder(VH arg0, int arg1) {
PackageInfoX.ActivityInfoX a = mApks.get(arg1);
arg0.title.setText(a.packageName + "/" + a.name);
arg0.itemView.setTag(a);
}
@Override
public VH onCreateViewHolder(ViewGroup arg0, int arg1) {
VH vh = new VH(View.inflate(getApplicationContext(), R.layout.apk_launcher_item, null));
vh.icon = (ImageView) vh.itemView.findViewById(R.id.icon);
vh.title = (TextView) vh.itemView.findViewById(R.id.title);
vh.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PackageInfoX.ActivityInfoX a = (ActivityInfoX) v.getTag();
Log.d(TAG, "onClick. activity: " + a);
File destDir = null;
try {
File dataDir = getDir("plugin", 0);
destDir = new File(dataDir, a.packageName + "/lib");
AndroidUtil.extractZipEntry(new ZipFile(a.mApkPath), "lib/armeabi", destDir);
AndroidUtil.extractZipEntry(new ZipFile(a.mApkPath), "lib/armeabi-v7a", destDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
// Intent launcher = new Intent(ApkLuncherActivity.this, StubActivity.class);
Intent launcher = new Intent(ApkLuncherActivity.this, org.bbs.apklauncher.embed.Stub_ListActivity.class);
putExtra(a, launcher);
launcher.putExtra(StubActivity.EXTRA_LIB_PATH, destDir.getPath());
startActivity(launcher);
}
});
return vh;
}
}
public static void putExtra(PackageInfoX.ActivityInfoX a,
Intent launcher) {
// launcher.putExtra(StubActivity.EXTRA_APK_PATH, a.mApkPath);
// launcher.putExtra(StubActivity.EXTRA_APPLICATION_CLASS_NAME, a.mPackageClassName);
launcher.putExtra(StubActivity.EXTRA_ACTIVITY_CLASS_NAME, a.name);
// launcher.putExtra(StubActivity.EXTRA_ACTIVITY_THEME, a.theme);
}
}