@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String scriptName = getIntent().getStringExtra(Constants.EXTRA_SCRIPT_PATH); String interpreter = FeaturedInterpreters.getInterpreterNameForScript(scriptName); if (interpreter == null) { Log.e("Cannot find interpreter for script " + scriptName); finish(); } final Intent activityIntent = new Intent(); Intent resolveIntent = new Intent(InterpreterConstants.ACTION_DISCOVER_INTERPRETERS); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setType(InterpreterConstants.MIME + Script.getFileExtension(this)); List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(resolveIntent, 0); if (resolveInfos != null && resolveInfos.size() == 1) { ActivityInfo info = resolveInfos.get(0).activityInfo; activityIntent.setComponent(new ComponentName(info.packageName, info.name)); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } else { final URL url = FeaturedInterpreters.getUrlForName(interpreter); activityIntent.setAction(Intent.ACTION_VIEW); activityIntent.setData(Uri.parse(url.toString())); } AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(String.format("%s is not installed.", interpreter)); dialog.setMessage( String.format("Do you want to download and install APK for %s ?", interpreter)); DialogInterface.OnClickListener buttonListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { startActivity(activityIntent); } dialog.dismiss(); finish(); } }; dialog.setNegativeButton("No", buttonListener); dialog.setPositiveButton("Yes", buttonListener); dialog.show(); }
@Override public void onStart(Intent intent, final int startId) { super.onStart(intent, startId); String path = intent.getStringExtra("scriptPath"); Log.d("Script Path: " + path); mScript = new Script(path); Log.d("FileName: " + mScript.getFileName()); Log.d("FileExtension: " + mScript.getFileExtension()); handleNetwork(); Interpreter interpreter = mInterpreterConfiguration.getInterpreterForScript(mScript.getFileName()); if (interpreter == null || !interpreter.isInstalled()) { mLatch.countDown(); if (FeaturedInterpreters.isSupported(mScript.getFileName())) { Log.d("Is Supported"); Intent i = new Intent(this, DialogActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra(Constants.EXTRA_SCRIPT_PATH, mScript.getFileName()); startActivity(i); } else { Log.e(this, "Cannot find an interpreter for script " + mScript.getFileName()); } stopSelf(startId); return; } File script = new File(path); Log.d("Launch with proxy "); mProxy = new AndroidProxy(this, null, true); mProxy.startLocal(); mLatch.countDown(); ScriptLauncher.launchScript( script, mInterpreterConfiguration, mProxy, new Runnable() { @Override public void run() { mProxy.shutdown(); stopSelf(startId); } }); }