package net.zhuoweizhang.mcpelauncher;
import net.zhuoweizhang.mcpelauncher.ui.MainMenuOptionsActivity;
import android.content.*;
import android.content.pm.*;
import com.mojang.minecraftpe.MainActivity;
/**
* Handles package install events.
* When an addon is installed or removed, restart the Dalvik VM so the app can load/unload the native library.
* When Minecraft PE is updated, schedule a prepatching so that the new libminecraftpe can be patched.
*/
public class AddonInstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
System.out.println("MCPELauncher: " + intent.toString());
System.out.println("Is lib loaded? " + MainActivity.libLoaded);
String packageName = intent.getData().toString().substring(8);
boolean isMinecraftUpdate = packageName.equals("com.mojang.minecraftpe");
if (!MainActivity.libLoaded && !isMinecraftUpdate) return;
if (MainMenuOptionsActivity.isManagingAddons) return;
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
return;
}
try {
PackageManager pm = context.getPackageManager();
System.out.println("MCPELauncher: " + packageName);
if (isMinecraftUpdate) {
System.out.println("Detected Minecraft PE upgrade");
Utils.getPrefs(1).edit().putBoolean("force_prepatch", true).commit();
} else if (!MainActivity.loadedAddons.contains(packageName)) { //is not currently loaded
ApplicationInfo appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
//appInfo.dump(new LogPrinter(4, "MCPELauncher"), "");
if (appInfo.metaData == null) return;
String nativeLibName = appInfo.metaData.getString("net.zhuoweizhang.mcpelauncher.api.nativelibname");
if (nativeLibName == null) return;
}
} catch (Exception e) {
e.printStackTrace();
return;
}
System.out.println("Scheduling MCPELauncher restart");
if (MainActivity.currentMainActivity != null && MainActivity.currentMainActivity.get() != null) {
try {
MainActivity.currentMainActivity.get().finish();
} catch (Exception e) {
e.printStackTrace(); //whatever, the VM's about to die anyways
}
}
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(200);
} catch (Exception e) {}
System.exit(0);
}
}).start();
}
}