/* * Copyright (C) 2012 Steven Luo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jackpal.androidterm; import android.content.Intent; import android.net.Uri; import android.util.Log; /* * New procedure for launching a command in ATE. * Build the path and arguments into a Uri and set that into Intent.data. * intent.data(new Uri.Builder().setScheme("file").setPath(path).setFragment(arguments)) * * The old procedure of using Intent.Extra is still available but is discouraged. */ public final class RunScript extends RemoteInterface { private static final String ACTION_RUN_SCRIPT = "jackpal.androidterm.RUN_SCRIPT"; private static final String EXTRA_WINDOW_HANDLE = "jackpal.androidterm.window_handle"; private static final String EXTRA_INITIAL_COMMAND = "jackpal.androidterm.iInitialCommand"; @Override protected void handleIntent() { TermService service = getTermService(); if (service == null) { finish(); return; } Intent myIntent = getIntent(); String action = myIntent.getAction(); if (action.equals(ACTION_RUN_SCRIPT)) { /* Someone with the appropriate permissions has asked us to run a script */ String handle = myIntent.getStringExtra(EXTRA_WINDOW_HANDLE); String command=null; /* * First look in Intent.data for the path; if not there, revert to * the EXTRA_INITIAL_COMMAND location. */ Uri uri=myIntent.getData(); if(uri!=null) // scheme[path][arguments] { String s=uri.getScheme(); if(s!=null && s.toLowerCase().equals("file")) { command=uri.getPath(); // Allow for the command to be contained within the arguments string. if(command==null) command=""; if(!command.equals("")) command=quoteForBash(command); // Append any arguments. if(null!=(s=uri.getFragment())) command+=" "+s; } } // If Intent.data not used then fall back to old method. if(command==null) command=myIntent.getStringExtra(EXTRA_INITIAL_COMMAND); if (handle != null) { // Target the request at an existing window if open handle = appendToWindow(handle, command); } else { // Open a new window handle = openNewWindow(command); } Intent result = new Intent(); result.putExtra(EXTRA_WINDOW_HANDLE, handle); setResult(RESULT_OK, result); finish(); } else { super.handleIntent(); } } }