diff --git a/android/core/src/processing/core/PApplet.java b/android/core/src/processing/core/PApplet.java index bebefac73..196867221 100644 --- a/android/core/src/processing/core/PApplet.java +++ b/android/core/src/processing/core/PApplet.java @@ -40,9 +40,11 @@ import java.util.zip.*; import android.app.Activity; import android.opengl.GLSurfaceView; import android.util.DisplayMetrics; +import android.util.Log; import android.view.SurfaceView; import android.view.WindowManager; import android.os.Bundle; +import android.os.Process; import android.view.*; @@ -1895,12 +1897,12 @@ public class PApplet extends Activity implements PConstants, Runnable { * (This avoids the situation of trying to put single or double quotes * around different bits). */ - static public Process open(String argv[]) { + static public java.lang.Process open(String argv[]) { return exec(argv); } - static public Process exec(String[] argv) { + static public java.lang.Process exec(String[] argv) { try { return Runtime.getRuntime().exec(argv); } catch (Exception e) { @@ -7339,4 +7341,19 @@ public class PApplet extends Activity implements PConstants, Runnable { g.blend(src, sx, sy, sw, sh, dx, dy, dw, dh, mode); } + private void tellPDE(final String message) + { + Log.i(getComponentName().getPackageName(), "PROCESSING " + message); + } + @Override + protected void onStart() { + tellPDE("onStart"); + super.onStart(); + } + + @Override + protected void onStop() { + tellPDE("onStop"); + super.onStop(); + } } diff --git a/android/tool/src/processing/app/tools/android/AndroidDevice.java b/android/tool/src/processing/app/tools/android/AndroidDevice.java index 74e79aa56..d70632eab 100644 --- a/android/tool/src/processing/app/tools/android/AndroidDevice.java +++ b/android/tool/src/processing/app/tools/android/AndroidDevice.java @@ -1,14 +1,10 @@ package processing.app.tools.android; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import processing.app.debug.RunnerListener; import processing.app.tools.android.LogEntry.Severity; @@ -16,10 +12,8 @@ import processing.app.tools.android.LogEntry.Severity; public class AndroidDevice implements AndroidDeviceProperties { private final AndroidEnvironment env; private final String id; - private final AndroidProcesses processes; - private final Map> outputListeners = new HashMap>(); - - private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private final Map> outputListeners = new ConcurrentHashMap>(); + private final Map pidToProcessName = new ConcurrentHashMap(); // mutable state private Process logcat; @@ -27,7 +21,6 @@ public class AndroidDevice implements AndroidDeviceProperties { public AndroidDevice(final AndroidEnvironment env, final String id) { this.env = env; this.id = id; - this.processes = new AndroidProcesses(this); } public void bringLauncherToFront() { @@ -106,7 +99,6 @@ public class AndroidDevice implements AndroidDeviceProperties { final String msg = entry.message; final Severity sev = entry.severity; if (src.equals("ActivityManager") && msg.startsWith("Start proc")) { - handleStartProcEntry(entry); } else { if ((src.equals("AndroidRuntime") && sev == Severity.Error) || src.equals("System.out") || src.equals("System.err")) { @@ -128,7 +120,6 @@ public class AndroidDevice implements AndroidDeviceProperties { } public void initialize() throws IOException, InterruptedException { - processes.refresh(); new ProcessHelper(generateAdbCommand("logcat", "-c")).execute(); logcat = Runtime.getRuntime().exec(generateAdbCommand("logcat")); new StreamPump(logcat.getInputStream()).addTarget(new LogLineProcessor()) @@ -137,10 +128,6 @@ public class AndroidDevice implements AndroidDeviceProperties { } public void shutdown() { - for (final PropertyChangeListener pcl : Arrays.asList(pcs - .getPropertyChangeListeners())) { - pcs.removePropertyChangeListener(pcl); - } outputListeners.clear(); if (logcat != null) { logcat.destroy(); @@ -156,10 +143,6 @@ public class AndroidDevice implements AndroidDeviceProperties { return env; } - public List ps() { - return processes.getProcesses(); - } - public void addOutputListener(final String processName, final ProcessOutputListener listener) { if (!outputListeners.containsKey(processName)) { @@ -181,38 +164,19 @@ public class AndroidDevice implements AndroidDeviceProperties { .compile("^Start proc (\\S+) for \\S+ [^:]+: pid=(\\d+).+$"); protected List getListeners(final String pid) { - final AndroidProcess process = processes.byPid(pid); - if (process == null) { + final String processName = pidToProcessName.get(pid); + if (processName == null) { return null; } - return outputListeners.get(process.name); - } - - private void handleStartProcEntry(final LogEntry entry) { - final Matcher m = START_PROC.matcher(entry.message); - if (m.matches()) { - startProc(m.group(1), m.group(2)); - } else { - System.err.println("I don't recognize this start proc message:\n" - + entry.message); - } + return outputListeners.get(processName); } private void startProc(final String name, final String pid) { - final AndroidProcess proc = new AndroidProcess(pid, name); - processes.refresh(); - firePropertyChange(APP_STARTED, null, proc); + pidToProcessName.put(Integer.valueOf(pid), name); } private void endProc(final String pid) { - final AndroidProcess proc = processes.byPid(pid); - if (proc == null) { - System.err.println("Process " + pid - + " ended, but I hadn't known about it."); - } else { - processes.refresh(); - firePropertyChange(APP_ENDED, proc, null); - } + pidToProcessName.remove(Integer.valueOf(pid)); } String[] generateAdbCommand(final String... cmd) { @@ -229,17 +193,4 @@ public class AndroidDevice implements AndroidDeviceProperties { return "[AndroidDevice " + getId() + "]"; } - public void addPropertyChangeListener(final PropertyChangeListener listener) { - pcs.addPropertyChangeListener(listener); - } - - private void firePropertyChange(final String propertyName, - final Object oldValue, final Object newValue) { - pcs.firePropertyChange(propertyName, oldValue, newValue); - } - - public void removePropertyChangeListener(final PropertyChangeListener listener) { - pcs.removePropertyChangeListener(listener); - } - } diff --git a/android/tool/src/processing/app/tools/android/AndroidProcesses.java b/android/tool/src/processing/app/tools/android/AndroidProcesses.java deleted file mode 100644 index 00d9d485c..000000000 --- a/android/tool/src/processing/app/tools/android/AndroidProcesses.java +++ /dev/null @@ -1,59 +0,0 @@ -package processing.app.tools.android; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class AndroidProcesses { - private final List processes = new ArrayList(); - private final AndroidDevice device; - - public AndroidProcesses(final AndroidDevice device) { - this.device = device; - } - - void refresh() { - processes.clear(); - try { - for (final String line : new ProcessHelper(this.device - .generateAdbCommand("shell", "ps")).execute()) { - final String[] fields = line.split("\\s+"); - if (fields.length != 9 || fields[0].equals("USER")) { - continue; - } - final String pid = fields[1]; - final String name = fields[8]; - processes.add(new AndroidProcess(pid, name)); - } - } catch (final Exception e) { - System.err.println("Unable to refresh processes on " + device + ":"); - e.printStackTrace(System.err); - } - } - - List getProcesses() { - return Collections.unmodifiableList(processes); - } - - public AndroidProcess byPid(final String pid) { - for (final AndroidProcess p : processes) { - if (p.pid.equals(pid)) { - return p; - } - } - return null; - } - - public AndroidProcess byName(final String name) { - for (final AndroidProcess p : processes) { - if (p.name.equals(name)) { - return p; - } - } - return null; - } - - public void add(final AndroidProcess androidProcess) { - processes.add(androidProcess); - } -}