aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2011-10-05 11:03:59 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-05 11:03:59 -0700
commit4694445979d1d1f447f4c40ce5f283ffc3ad6286 (patch)
tree75b0dc9556ef7f887bfaa387385a6bf8b4ca9843
parent45e679b763c38a4c8f7b4fab7910f28854a42bea (diff)
parent8320dfa49965ebd94140bd74b67236c2293ab82b (diff)
downloadsdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.zip
sdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.tar.gz
sdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.tar.bz2
Merge "Add a preference to turn on/off auto monitoring logcat."
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/LogCatMonitor.java65
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/Messages.java1
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/messages.properties1
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/LogCatPreferencePage.java7
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/PreferenceInitializer.java3
5 files changed, 66 insertions, 11 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/LogCatMonitor.java b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/LogCatMonitor.java
index e0fe6c1..662e8f9 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/LogCatMonitor.java
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/LogCatMonitor.java
@@ -26,6 +26,8 @@ import com.android.ddmuilib.logcat.LogCatReceiverFactory;
import com.android.ide.eclipse.ddms.views.LogCatView;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
@@ -33,9 +35,9 @@ import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
/**
* LogCatMonitor helps in monitoring the logcat output from a set of devices.
@@ -43,19 +45,22 @@ import java.util.Set;
* if any message is deemed important.
*/
public class LogCatMonitor {
+ public static final String AUTO_MONITOR_PREFKEY = "ddms.logcat.automonitor";
+
private IPreferenceStore mPrefStore;
- private Set<String> mMonitoredDevices;
+ private Map<String, DeviceData> mMonitoredDevices;
private IDebuggerConnector[] mConnectors;
public LogCatMonitor(IDebuggerConnector[] debuggerConnectors, IPreferenceStore prefStore) {
mConnectors = debuggerConnectors;
mPrefStore = prefStore;
- mMonitoredDevices = new HashSet<String>();
+ mMonitoredDevices = new HashMap<String, DeviceData>();
AndroidDebugBridge.addDeviceChangeListener(new IDeviceChangeListener() {
public void deviceDisconnected(IDevice device) {
- unmonitorDevice(device);
+ unmonitorDevice(device.getSerialNumber());
+ mMonitoredDevices.remove(device.getSerialNumber());
}
public void deviceConnected(IDevice device) {
@@ -64,26 +69,54 @@ public class LogCatMonitor {
public void deviceChanged(IDevice device, int changeMask) {
}
});
+
+ mPrefStore.addPropertyChangeListener(new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if (AUTO_MONITOR_PREFKEY.equals(event.getProperty())
+ && event.getNewValue().equals(false)) {
+ unmonitorAllDevices();
+ }
+ }
+ });
}
- private synchronized void unmonitorDevice(IDevice device) {
- mMonitoredDevices.remove(device.getSerialNumber());
+ private void unmonitorAllDevices() {
+ for (String device : mMonitoredDevices.keySet()) {
+ unmonitorDevice(device);
+ }
+
+ mMonitoredDevices.clear();
+ }
+
+ private void unmonitorDevice(String deviceSerial) {
+ DeviceData data = mMonitoredDevices.get(deviceSerial);
+ if (data == null) {
+ return;
+ }
+
+ data.receiver.removeMessageReceivedEventListener(data.messageEventListener);
}
public void monitorDevice(final IDevice device) {
- if (mMonitoredDevices.contains(device.getSerialNumber())) {
+ if (!mPrefStore.getBoolean(AUTO_MONITOR_PREFKEY)) {
+ // do not monitor device if auto monitoring is off
+ return;
+ }
+
+ if (mMonitoredDevices.keySet().contains(device.getSerialNumber())) {
// the device is already monitored
return;
}
LogCatReceiver r = LogCatReceiverFactory.INSTANCE.newReceiver(device, mPrefStore);
- r.addMessageReceivedEventListener(new ILogCatMessageEventListener() {
+ ILogCatMessageEventListener l = new ILogCatMessageEventListener() {
public void messageReceived(List<LogCatMessage> receivedMessages) {
checkMessages(receivedMessages, device);
}
- });
+ };
+ r.addMessageReceivedEventListener(l);
- mMonitoredDevices.add(device.getSerialNumber());
+ mMonitoredDevices.put(device.getSerialNumber(), new DeviceData(r, l));
}
private void checkMessages(List<LogCatMessage> receivedMessages, IDevice device) {
@@ -163,4 +196,14 @@ public class LogCatMonitor {
}
});
}
+
+ private static class DeviceData {
+ public final LogCatReceiver receiver;
+ public final ILogCatMessageEventListener messageEventListener;
+
+ public DeviceData(LogCatReceiver r, ILogCatMessageEventListener l) {
+ receiver = r;
+ messageEventListener = l;
+ }
+ }
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/Messages.java b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/Messages.java
index ab000a3..15d30dd 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/Messages.java
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/Messages.java
@@ -82,6 +82,7 @@ public class Messages extends NLS {
public static String LogCatPreferencePage_Go_To_Problem_Error_Line;
public static String LogCatPreferencePage_Switch_Perspective;
public static String LogCatPreferencePage_Switch_To;
+ public static String LogCatPreferencePage_AutoMonitorLogcat;
public static String LogCatView_Clear_Log;
public static String LogCatView_Copy;
public static String LogCatView_Create_Filter;
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/messages.properties b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/messages.properties
index 72f25e6..42722b1 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/messages.properties
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/i18n/messages.properties
@@ -76,6 +76,7 @@ LogCatPreferencePage_Go_To_Problem_Declararion=Go to Problem (method declaration
LogCatPreferencePage_Go_To_Problem_Error_Line=Go to Problem (error line)
LogCatPreferencePage_Switch_Perspective=Switch Perspective
LogCatPreferencePage_Switch_To=Switch to:
+LogCatPreferencePage_AutoMonitorLogcat=Display logcat view when there are messages from an application in the workspace
LogCatView_Clear_Log=Clear Log
LogCatView_Copy=Copy
LogCatView_Create_Filter=Create Filter
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/LogCatPreferencePage.java b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/LogCatPreferencePage.java
index ae4e723..1f81a6d 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/LogCatPreferencePage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/LogCatPreferencePage.java
@@ -30,6 +30,7 @@ import org.eclipse.ui.PlatformUI;
import com.android.ddmuilib.logcat.LogCatMessageList;
import com.android.ddmuilib.logcat.LogCatPanel;
import com.android.ide.eclipse.ddms.DdmsPlugin;
+import com.android.ide.eclipse.ddms.LogCatMonitor;
import com.android.ide.eclipse.ddms.i18n.Messages;
import com.android.ide.eclipse.ddms.views.LogCatView;
@@ -42,6 +43,7 @@ public class LogCatPreferencePage extends FieldEditorPreferencePage implements
private BooleanFieldEditor mSwitchPerspective;
private ComboFieldEditor mWhichPerspective;
private IntegerFieldEditor mMaxMessages;
+ private BooleanFieldEditor mAutoMonitorLogcat;
public LogCatPreferencePage() {
super(GRID);
@@ -92,6 +94,11 @@ public class LogCatPreferencePage extends FieldEditorPreferencePage implements
mWhichPerspective.setEnabled(getPreferenceStore()
.getBoolean(PreferenceInitializer.ATTR_SWITCH_PERSPECTIVE), getFieldEditorParent());
addField(mWhichPerspective);
+
+ mAutoMonitorLogcat = new BooleanFieldEditor(LogCatMonitor.AUTO_MONITOR_PREFKEY,
+ Messages.LogCatPreferencePage_AutoMonitorLogcat,
+ getFieldEditorParent());
+ addField(mAutoMonitorLogcat);
}
public void init(IWorkbench workbench) {
diff --git a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/PreferenceInitializer.java b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/PreferenceInitializer.java
index d84ce2b..2afa58c 100644
--- a/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/PreferenceInitializer.java
+++ b/eclipse/plugins/com.android.ide.eclipse.ddms/src/com/android/ide/eclipse/ddms/preferences/PreferenceInitializer.java
@@ -17,6 +17,7 @@
package com.android.ide.eclipse.ddms.preferences;
import com.android.ide.eclipse.ddms.DdmsPlugin;
+import com.android.ide.eclipse.ddms.LogCatMonitor;
import com.android.ide.eclipse.ddms.views.DeviceView.HProfHandler;
import com.android.ide.eclipse.ddms.views.LogCatView;
import com.android.ddmlib.DdmPreferences;
@@ -117,6 +118,8 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
store.setDefault(ATTR_ADBHOST_VALUE, DdmPreferences.DEFAULT_ADBHOST_VALUE);
store.setDefault(ATTR_SWITCH_PERSPECTIVE, LogCatView.DEFAULT_SWITCH_PERSPECTIVE);
store.setDefault(ATTR_PERSPECTIVE_ID, LogCatView.DEFAULT_PERSPECTIVE_ID);
+
+ store.setDefault(LogCatMonitor.AUTO_MONITOR_PREFKEY, true);
}
/**