diff options
author | Siva Velusamy <vsiva@google.com> | 2011-10-05 11:03:59 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-05 11:03:59 -0700 |
commit | 4694445979d1d1f447f4c40ce5f283ffc3ad6286 (patch) | |
tree | 75b0dc9556ef7f887bfaa387385a6bf8b4ca9843 | |
parent | 45e679b763c38a4c8f7b4fab7910f28854a42bea (diff) | |
parent | 8320dfa49965ebd94140bd74b67236c2293ab82b (diff) | |
download | sdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.zip sdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.tar.gz sdk-4694445979d1d1f447f4c40ce5f283ffc3ad6286.tar.bz2 |
Merge "Add a preference to turn on/off auto monitoring logcat."
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); } /** |