package mobi.acpm.inspeckage.receivers; import android.app.Activity; import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.webkit.WebView; import java.lang.reflect.Field; import de.robv.android.xposed.XposedBridge; import mobi.acpm.inspeckage.Module; import mobi.acpm.inspeckage.util.Util; /** * Created by acpm on 17/01/16. */ public class InspeckageReceiver extends BroadcastReceiver { private Activity activity = null; public InspeckageReceiver(Object obj) { if (obj instanceof Activity) { this.activity = (Activity) obj; } else if (obj instanceof Fragment) { activity = ((Fragment) obj).getActivity(); }else{ XposedBridge.log(Module.ERROR + " >>>> Receiver"); } } @Override public void onReceive(Context context, Intent intent) { if (activity != null) { String pkg = intent.getExtras().getString("package"); if (pkg.equals(activity.getPackageName())) { //PackageDetail pd = new PackageDetail(activity.getApplicationContext(),pkg); //pd.extractInfoToFile(); String action = intent.getExtras().getString("action"); if (action.equals("finish")) { activity.finish(); } else if (action.equals("query")) { try { Uri uri = Uri.parse(intent.getExtras().getString("uri")); activity.managedQuery(uri, null, null, null, null); } catch (Exception e) { XposedBridge.log("InspeckageReceiver - query - " + e.getMessage()); } } else if (action.equals("startAct")) { String act = intent.getExtras().getString("activity"); String flags = intent.getExtras().getString("flags"); String intent_action = intent.getExtras().getString("intent_action"); String uri = intent.getExtras().getString("data_uri"); String category = intent.getExtras().getString("category"); String mimetype = intent.getExtras().getString("mimetype"); String extras = intent.getExtras().getString("extra"); Intent i = new Intent(); //ACTIVITY i.setClassName(activity.getApplicationContext(), act); //ACTION if (!intent_action.trim().equals("")) { i.setAction(intent_action); } //FLAGS if(!flags.trim().equals("")) { Field[] fields = Intent.class.getFields(); for (Field f : fields) { try { Object value = f.get(i); if (flags.trim().contains(f.getName())) { i.addFlags((int) value); } } catch (IllegalAccessException e) { e.printStackTrace(); } } }else{ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } //DATA_URI if(!uri.trim().equals("")){ Uri u = Uri.parse(uri); i.setData(u); } if(!category.trim().equals("")){ i.addCategory(category); } if(!mimetype.trim().equals("")){ i.normalizeMimeType(mimetype); } if(!extras.trim().equals("")){ String[] extra = new String[]{extras}; if(extras.contains(";")){ extra = extras.split(";"); } for(String e : extra){ String[] values = e.split(","); if(values.length==3){ if(values[0].trim().toLowerCase().equals("string")){ i.putExtra(values[1],values[2]); } if(values[0].trim().toLowerCase().equals("boolean")){ i.putExtra(values[1],Boolean.valueOf(values[2])); } if(values[0].trim().toLowerCase().equals("int")){ i.putExtra(values[1], Integer.valueOf(values[2])); } if(values[0].trim().toLowerCase().equals("float")){ i.putExtra(values[1],Float.valueOf(values[2])); } if(values[0].trim().toLowerCase().equals("double")){ i.putExtra(values[1],Double.valueOf(values[2])); } } } } activity.startActivity(i); } else if (action.equals("fileTree")) { String tree = Util.FileTree(activity.getApplicationInfo().dataDir, ""); Intent i = new Intent("mobi.acpm.inspeckage.INSPECKAGE_WEB"); i.putExtra("action", "fileTree"); float m = (float) tree.length() / 3; String sub1 = tree.substring(0, (int) m); String sub2 = tree.substring((int) m, tree.length()); //talvez tenha que dividir pq a arvore pode ficar muito grande para ser enviada via intent i.putExtra("tree", tree); activity.sendBroadcast(i, null); Util.sb = new StringBuilder(); } else if (action.equals("checkApp")) { Intent i = new Intent("mobi.acpm.inspeckage.INSPECKAGE_WEB"); i.putExtra("action", "checkApp"); i.putExtra("isRunning", true); int pid = android.os.Process.myPid(); i.putExtra("PID",pid); activity.sendBroadcast(i, null); } else if (action.equals("webviewSetDebug")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } } else if (action.equals("clipboard")) { String value = intent.getExtras().getString("value"); android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText("simple text", value); clipboard.setPrimaryClip(clip); } } } } }