add up/down buttons to search

This commit is contained in:
B. Petersen
2020-04-04 16:28:14 +02:00
parent 39bc508a31
commit 62ee8530f2
5 changed files with 74 additions and 5 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

+12
View File
@@ -7,6 +7,18 @@
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|never" />
<item android:title="@string/back"
android:id="@+id/menu_search_up"
android:icon="@drawable/ic_search_up"
android:visible="false"
app:showAsAction="always"/>
<item android:title="@string/next"
android:id="@+id/menu_search_down"
android:icon="@drawable/ic_search_down"
android:visible="false"
app:showAsAction="always"/>
<item android:title="@string/menu_scroll_to_top"
android:id="@+id/log_scroll_up" />
@@ -9,6 +9,8 @@ import androidx.core.app.ActivityOptionsCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
@@ -156,4 +158,16 @@ public abstract class BaseActionBarActivity extends AppCompatActivity {
isWaitingForResult = true;
}
}
public void makeSearchMenuVisible(final Menu menu, final MenuItem exception, boolean visible) {
for (int i = 0; i < menu.size(); ++i) {
MenuItem item = menu.getItem(i);
int id = item.getItemId();
if (id==R.id.menu_search_up || id==R.id.menu_search_down) {
item.setVisible(!visible);
} else if (item != exception) {
item.setVisible(visible);
}
}
}
}
@@ -5,11 +5,13 @@ import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.widget.SearchView;
@@ -24,6 +26,8 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity
implements SearchView.OnQueryTextListener,
WebView.FindListener
{
private static final String TAG = LocalHelpActivity.class.getSimpleName();
private WebView webView;
private final DynamicTheme dynamicTheme = new DynamicTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
@@ -106,10 +110,36 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity
inflater.inflate(R.menu.local_help, menu);
MenuItem searchItem = menu.findItem(R.id.menu_search_localhelp);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getString(R.string.search));
try {
MenuItem searchItem = menu.findItem(R.id.menu_search_localhelp);
searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(final MenuItem item) {
LocalHelpActivity.this.lastQuery = "";
LocalHelpActivity.this.makeSearchMenuVisible(menu, searchItem, false);
return true;
}
@Override
public boolean onMenuItemActionCollapse(final MenuItem item) {
LocalHelpActivity.this.makeSearchMenuVisible(menu, searchItem, true);
return true;
}
});
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getString(R.string.search));
searchView.setIconifiedByDefault(true);
// hide the [X] beside the search field - this is too much noise, search can be aborted eg. by "back"
ImageView closeBtn = searchView.findViewById(R.id.search_close_btn);
if (closeBtn!=null) {
closeBtn.setEnabled(false);
closeBtn.setImageDrawable(null);
}
} catch (Exception e) {
Log.e(TAG, "cannot set up help-search: ", e);
}
super.onPrepareOptionsMenu(menu);
return true;
@@ -120,7 +150,6 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity
@Override
public boolean onQueryTextSubmit(String query) {
webView.findNext(true);
return true; // action handled by listener
}
@@ -156,6 +185,20 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity
case android.R.id.home:
finish();
return true;
case R.id.menu_search_up:
if (lastQuery.isEmpty()) {
webView.scrollTo(0, 0);
} else {
webView.findNext(false);
}
return true;
case R.id.menu_search_down:
if (lastQuery.isEmpty()) {
webView.scrollTo(0, 1000000000);
} else {
webView.findNext(true);
}
return true;
case R.id.log_scroll_up:
webView.scrollTo(0, 0);
return true;