aboutsummaryrefslogtreecommitdiffstats
path: root/ddms/libs
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2011-12-13 09:33:51 -0800
committerSiva Velusamy <vsiva@google.com>2011-12-13 09:33:51 -0800
commitdaa5a5c9200708b09983bf3852b94bb8ebab1e27 (patch)
tree5d4aaa7d5543e4d8ac592285e315e00f55d4fc88 /ddms/libs
parentfc339fe1ed3c54e2622d8d22f070774048824cab (diff)
downloadsdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.zip
sdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.tar.gz
sdk-daa5a5c9200708b09983bf3852b94bb8ebab1e27.tar.bz2
logcat: when copying items, index into filtered list.
The previous commit introduced a bug: The SWT table model is a list of logcat messages before any filters are applied. But the user sees the filtered messages. So when user selects items in the table, the selection index will not match the index in the input model. This patch applies all current filters to the input model and then indexes this filtered list to get the same items that the user has selected in the view. Change-Id: If955bd5c22e1c587bcf5fe32092f513d53c0d8ef
Diffstat (limited to 'ddms/libs')
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java49
1 files changed, 42 insertions, 7 deletions
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
index 22052f9..608086d 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogCatPanel.java
@@ -674,12 +674,12 @@ public final class LogCatPanel extends SelectionDependentPanel
if (!(input instanceof LogCatMessageList)) {
return Collections.emptyList();
}
- Object []items = ((LogCatMessageList) input).toArray();
+ List<LogCatMessage> filteredItems = applyCurrentFilters((LogCatMessageList) input);
List<LogCatMessage> selectedMessages = new ArrayList<LogCatMessage>(indices.length);
for (int i : indices) {
- if (i < items.length) {
- LogCatMessage m = (LogCatMessage) items[i];
+ if (i < filteredItems.size()) {
+ LogCatMessage m = filteredItems.get(i);
selectedMessages.add(m);
}
}
@@ -687,6 +687,36 @@ public final class LogCatPanel extends SelectionDependentPanel
return selectedMessages;
}
+ private List<LogCatMessage> applyCurrentFilters(LogCatMessageList msgList) {
+ Object[] items = msgList.toArray();
+ List<LogCatMessage> filteredItems = new ArrayList<LogCatMessage>(items.length);
+ List<LogCatViewerFilter> filters = getFiltersToApply();
+
+ for (Object item : items) {
+ if (!(item instanceof LogCatMessage)) {
+ continue;
+ }
+
+ LogCatMessage msg = (LogCatMessage) item;
+ if (!isMessageFiltered(msg, filters)) {
+ filteredItems.add(msg);
+ }
+ }
+
+ return filteredItems;
+ }
+
+ private boolean isMessageFiltered(LogCatMessage msg, List<LogCatViewerFilter> filters) {
+ for (LogCatViewerFilter f : filters) {
+ if (!f.select(null, null, msg)) {
+ // message does not make it through this filter
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private void createLogcatViewTable(Composite parent) {
// The SWT.VIRTUAL bit causes the table to be rendered faster. However it makes all rows
// to be of the same height, thereby clipping any rows with multiple lines of text.
@@ -912,10 +942,7 @@ public final class LogCatPanel extends SelectionDependentPanel
}
private void updateAppliedFilters() {
- /* list of filters to apply = saved filter + live filters */
- List<LogCatViewerFilter> filters = new ArrayList<LogCatViewerFilter>();
- filters.add(getSelectedSavedFilter());
- filters.addAll(getCurrentLiveFilters());
+ List<LogCatViewerFilter> filters = getFiltersToApply();
mViewer.setFilters(filters.toArray(new LogCatViewerFilter[filters.size()]));
/* whenever filters are changed, the number of displayed logs changes
@@ -923,6 +950,14 @@ public final class LogCatPanel extends SelectionDependentPanel
scrollToLatestLog();
}
+ private List<LogCatViewerFilter> getFiltersToApply() {
+ /* list of filters to apply = saved filter + live filters */
+ List<LogCatViewerFilter> filters = new ArrayList<LogCatViewerFilter>();
+ filters.add(getSelectedSavedFilter());
+ filters.addAll(getCurrentLiveFilters());
+ return filters;
+ }
+
private List<LogCatViewerFilter> getCurrentLiveFilters() {
List<LogCatViewerFilter> liveFilters = new ArrayList<LogCatViewerFilter>();