diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java index 68199b6f90..b8dcc3e480 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogActivity.java @@ -12,6 +12,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebView; +import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; @@ -27,7 +28,9 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.debuglogsviewer.DebugLogsViewer; import org.thoughtcrime.securesms.BaseActivity; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.components.ConversationSearchBottomBar; import org.thoughtcrime.securesms.components.ProgressCard; +import org.thoughtcrime.securesms.components.SearchView; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.LongClickCopySpan; import org.thoughtcrime.securesms.util.LongClickMovementMethod; @@ -48,6 +51,7 @@ public class SubmitDebugLogActivity extends BaseActivity { private View warningBanner; private View editBanner; private CircularProgressMaterialButton submitButton; + private ConversationSearchBottomBar searchNav; private View scrollToBottomButton; private View scrollToTopButton; private ProgressCard progressCard; @@ -57,6 +61,11 @@ public class SubmitDebugLogActivity extends BaseActivity { private MenuItem searchMenuItem; private MenuItem saveMenuItem; + private ImageButton caseSensitiveButton; + private TextView searchPosition; + private ImageButton searchUpButton; + private ImageButton searchDownButton; + private boolean isWebViewLoaded; private boolean hasPresentedLines; @@ -91,33 +100,71 @@ public class SubmitDebugLogActivity extends BaseActivity { this.searchMenuItem = menu.findItem(R.id.menu_search); this.saveMenuItem = menu.findItem(R.id.menu_save); - // TODO [lisa][debug-log-search] -// SearchView searchView = (SearchView) searchMenuItem.getActionView(); -// SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() { -// @Override -// public boolean onQueryTextSubmit(String query) { -// return true; -// } -// -// @Override -// public boolean onQueryTextChange(String query) { -// return true; -// } -// }; -// -// searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { -// @Override -// public boolean onMenuItemActionExpand(MenuItem item) { -// searchView.setOnQueryTextListener(queryListener); -// return true; -// } -// -// @Override -// public boolean onMenuItemActionCollapse(MenuItem item) { -// searchView.setOnQueryTextListener(null); -// return true; -// } -// }); + this.searchNav = findViewById(R.id.debug_log_search_nav); + this.caseSensitiveButton = findViewById(R.id.case_sensitive_button); + this.searchPosition = findViewById(R.id.debug_log_search_position); + this.searchUpButton = findViewById(R.id.debug_log_search_up); + this.searchDownButton = findViewById(R.id.debug_log_search_down); + + searchUpButton.setOnClickListener(v -> { + DebugLogsViewer.onSearchUp(logWebView); + DebugLogsViewer.getSearchPosition(logWebView, position -> searchPosition.setText(position)); + }); + + searchDownButton.setOnClickListener(v -> { + DebugLogsViewer.onSearchDown(logWebView); + DebugLogsViewer.getSearchPosition(logWebView, position -> searchPosition.setText(position)); + }); + + boolean[] isCaseSensitive = {false}; + + caseSensitiveButton.setOnClickListener(v -> { + DebugLogsViewer.onToggleCaseSensitive(logWebView); + DebugLogsViewer.getSearchPosition(logWebView, position -> searchPosition.setText(position)); + isCaseSensitive[0] = !isCaseSensitive[0]; + + int backgroundColor = isCaseSensitive[0] ? R.drawable.circle_tint_darker : R.drawable.circle_touch_highlight_background; + caseSensitiveButton.setBackground(getResources().getDrawable(backgroundColor)); + }); + + SearchView searchView = (SearchView) searchMenuItem.getActionView(); + SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + return true; + } + + @Override + public boolean onQueryTextChange(String query) { + DebugLogsViewer.onSearch(logWebView, query); + DebugLogsViewer.getSearchPosition(logWebView, position -> searchPosition.setText(position)); + return true; + } + }; + + searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + searchNav.setVisibility(View.VISIBLE); + submitButton.setVisibility(View.GONE); + searchView.setOnQueryTextListener(queryListener); + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + searchNav.setVisibility(View.GONE); + submitButton.setVisibility(View.VISIBLE); + DebugLogsViewer.onSearchClose(logWebView); + DebugLogsViewer.getSearchPosition(logWebView, position -> searchPosition.setText(position)); + searchView.setOnQueryTextListener(null); + return true; + } + }); + + if (viewModel.getMode().getValue() != null) { + presentMode(viewModel.getMode().getValue()); + } return true; } @@ -217,16 +264,21 @@ public class SubmitDebugLogActivity extends BaseActivity { } private void presentMode(@NonNull SubmitDebugLogViewModel.Mode mode) { + if (editMenuItem == null || doneMenuItem == null || searchMenuItem == null || saveMenuItem == null) { + return; + } + switch (mode) { case NORMAL: editBanner.setVisibility(View.GONE); + searchNav.setVisibility(View.GONE); // TODO [lisa][debug-log-editing] // setEditing(false); saveMenuItem.setVisible(true); // TODO [greyson][log] Not yet implemented // editMenuItem.setVisible(true); // doneMenuItem.setVisible(false); -// searchMenuItem.setVisible(true); + searchMenuItem.setVisible(true); break; case SUBMITTING: editBanner.setVisibility(View.GONE); diff --git a/app/src/main/res/drawable/symbol_filter_24.xml b/app/src/main/res/drawable/symbol_filter_24.xml new file mode 100644 index 0000000000..3338d1ee47 --- /dev/null +++ b/app/src/main/res/drawable/symbol_filter_24.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/symbol_match_case_24.xml b/app/src/main/res/drawable/symbol_match_case_24.xml new file mode 100644 index 0000000000..35ee1f07d6 --- /dev/null +++ b/app/src/main/res/drawable/symbol_match_case_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/submit_debug_log_activity.xml b/app/src/main/res/layout/submit_debug_log_activity.xml index ca12467610..2e692fb3e0 100644 --- a/app/src/main/res/layout/submit_debug_log_activity.xml +++ b/app/src/main/res/layout/submit_debug_log_activity.xml @@ -1,7 +1,6 @@ + app:layout_constraintBottom_toTopOf="@id/debug_log_footer_barrier"/> + app:layout_constraintBottom_toTopOf="@id/debug_log_footer_barrier"/> + + + + + + + + + + + + + + diff --git a/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.html b/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.html index 0acedfce3d..f1351f6889 100644 --- a/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.html +++ b/debuglogs-viewer/lib/src/main/assets/debuglogs-viewer.html @@ -9,6 +9,7 @@