diff --git a/wpadebug/AndroidManifest.xml b/wpadebug/AndroidManifest.xml
index 535e3d2be..f351b0829 100644
--- a/wpadebug/AndroidManifest.xml
+++ b/wpadebug/AndroidManifest.xml
@@ -28,5 +28,9 @@
+
+
diff --git a/wpadebug/README b/wpadebug/README
index 73ebdf32f..ada07babe 100644
--- a/wpadebug/README
+++ b/wpadebug/README
@@ -44,6 +44,11 @@ adb root
adb remount
adb shell chmod 6755 /system/bin/mksh-su
+Optionally, a text file with a set of command can be installed to allow
+arbitrary shell commands to be executed. This text file need to be in
+/data/local/wpadebug.cmds and use title@command format per line. For
+example:
+version@cat /proc/version
Uninstallation
diff --git a/wpadebug/res/layout/main.xml b/wpadebug/res/layout/main.xml
index 3e9059f6b..b3337e470 100644
--- a/wpadebug/res/layout/main.xml
+++ b/wpadebug/res/layout/main.xml
@@ -122,11 +122,6 @@
android:onClick="runWpaCliCmd"
/>
-
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+package w1.fi.wpadebug;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+import java.io.FileReader;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.InputStream;
+import java.io.IOException;
+
+import android.app.ListActivity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.ArrayAdapter;
+import android.widget.Toast;
+import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
+
+class CmdList
+{
+ String title;
+ String command;
+
+ public CmdList(String _title, String _command)
+ {
+ title = _title;
+ command = _command;
+ }
+
+ @Override
+ public String toString()
+ {
+ return title;
+ }
+}
+
+public class CommandListActivity extends ListActivity
+{
+ private static final String TAG = "wpadebug";
+ private static final String cmdfile = "/data/local/wpadebug.cmds";
+
+ private void read_commands(ArrayList list, Scanner in)
+ {
+ in.useDelimiter("@");
+ while (in.hasNext()) {
+ String title = in.next();
+ String cmd = in.nextLine().substring(1);
+ list.add(new CmdList(title, cmd));
+ }
+ in.close();
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ ArrayList list = new ArrayList();
+
+ FileReader in;
+ try {
+ in = new FileReader(cmdfile);
+ read_commands(list, new Scanner(in));
+ } catch (IOException e) {
+ Toast.makeText(this, "Could not read " + cmdfile,
+ Toast.LENGTH_SHORT).show();
+ }
+
+ InputStream inres = getResources().openRawResource(R.raw.shell_commands);
+ read_commands(list, new Scanner(inres));
+
+ ArrayAdapter listAdapter;
+ listAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
+
+ setListAdapter(listAdapter);
+ }
+
+ @Override
+ protected void onListItemClick(ListView l, View v, int position, long id)
+ {
+ CmdList item = (CmdList) getListAdapter().getItem(position);
+ Toast.makeText(this, "Running: " + item.command,
+ Toast.LENGTH_SHORT).show();
+ String message = run(item.command);
+ if (message == null)
+ return;
+ Intent intent = new Intent(this, DisplayMessageActivity.class);
+ intent.putExtra(MainActivity.EXTRA_MESSAGE, message);
+ startActivity(intent);
+ }
+
+ private String run(String cmd)
+ {
+ try {
+ Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/mksh-su", "-c", cmd});
+ BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+ StringBuffer output = new StringBuffer();
+ int read;
+ char[] buffer = new char[1024];
+ while ((read = reader.read(buffer)) > 0)
+ output.append(buffer, 0, read);
+ reader.close();
+ proc.waitFor();
+ return output.toString();
+ } catch (IOException e) {
+ Toast.makeText(this, "Could not run command",
+ Toast.LENGTH_LONG).show();
+ return null;
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/wpadebug/src/w1/fi/wpadebug/MainActivity.java b/wpadebug/src/w1/fi/wpadebug/MainActivity.java
index 1407932c8..f13544009 100644
--- a/wpadebug/src/w1/fi/wpadebug/MainActivity.java
+++ b/wpadebug/src/w1/fi/wpadebug/MainActivity.java
@@ -41,13 +41,9 @@ public class MainActivity extends Activity
setContentView(R.layout.main);
}
- public void runId(View view)
+ public void runCommands(View view)
{
- Intent intent = new Intent(this, DisplayMessageActivity.class);
- String message = run("/system/bin/id");
- if (message == null)
- return;
- intent.putExtra(EXTRA_MESSAGE, message);
+ Intent intent = new Intent(this, CommandListActivity.class);
startActivity(intent);
}