From 151c3a79de1abd9033ce6fe2c1f5a8bce49764ea Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 25 May 2024 23:43:20 +0200 Subject: [PATCH] Predictive back: for everything except import/export. Fixes #1708. --- src/main/AndroidManifest.xml | 35 +---------- .../opentracks/TrackListActivity.java | 59 ++++--------------- .../opentracks/TrackStoppedActivity.java | 9 --- .../ui/markers/MarkerListActivity.java | 43 ++++---------- .../opentracks/ui/util/ActivityUtils.java | 18 ------ src/main/res/layout/marker_list.xml | 14 ++++- src/main/res/layout/track_list.xml | 13 +++- src/main/res/menu/marker_list.xml | 7 +-- src/main/res/menu/track_list.xml | 9 +-- 9 files changed, 49 insertions(+), 158 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index ece98263e..8621f600a 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -323,42 +323,13 @@ limitations under the License. + - - - - - - - - - - - - - - + - - - + diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 55ff54bbe..bb53613f6 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -16,7 +16,6 @@ package de.dennisguse.opentracks; -import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; @@ -26,7 +25,6 @@ import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; import android.util.Log; -import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -34,7 +32,6 @@ import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.content.res.AppCompatResources; -import androidx.appcompat.widget.SearchView; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; @@ -129,7 +126,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co }; // Menu items - private MenuItem searchMenuItem; private String searchQuery; @@ -249,6 +245,14 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co @Override protected View getRootView() { viewBinding = TrackListBinding.inflate(getLayoutInflater()); + + viewBinding.trackListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> { + searchQuery = viewBinding.trackListSearchView.getEditText().getText().toString(); + viewBinding.trackListSearchView.hide(); + loadData(); + return true; + }); + return viewBinding.getRoot(); } @@ -256,9 +260,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.track_list, menu); - searchMenuItem = menu.findItem(R.id.track_list_search); - ActivityUtils.configureSearchWidget(this, searchMenuItem); - return super.onCreateOptionsMenu(menu); } @@ -280,13 +281,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co return true; } - if (item.getItemId() == R.id.track_list_search) { - SearchView searchView = (SearchView) searchMenuItem.getActionView(); - searchView.setIconified(false); - searchMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - return true; - } - if (item.getItemId() == R.id.track_list_help) { startActivity(IntentUtils.newIntent(this, HelpActivity.class)); return true; @@ -295,42 +289,9 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co return super.onOptionsItemSelected(item); } - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_SEARCH && searchMenuItem != null) { - return true; - } - return super.onKeyUp(keyCode, event); - } - - @Override - public void onBackPressed() { - SearchView searchView = (SearchView) searchMenuItem.getActionView(); - if (!searchView.isIconified()) { - searchView.setIconified(true); - } - - if (searchQuery != null) { - searchQuery = null; - loadData(); - return; - } - - super.onBackPressed(); - } - - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - - if (Intent.ACTION_SEARCH.equals(intent.getAction())) { - searchQuery = intent.getStringExtra(SearchManager.QUERY); - } else { - searchQuery = null; - } - } - private void loadData() { + viewBinding.trackListToolbar.setText(searchQuery); + viewBinding.trackListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.app_name))); Cursor tracks = new ContentProviderUtils(this).searchTracks(searchQuery); diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index 7dd6d9d73..b1d94e58f 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -110,15 +110,6 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements contentProviderUtils); } - @Override - public void onBackPressed() { - if (isDiscarding) { - return; - } - super.onBackPressed(); - resumeTrackAndFinish(); - } - @Override protected View getRootView() { viewBinding = TrackStoppedBinding.inflate(getLayoutInflater()); diff --git a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java index 72492fce4..01361c357 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java @@ -16,7 +16,6 @@ package de.dennisguse.opentracks.ui.markers; -import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; import android.view.Menu; @@ -25,7 +24,6 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.UiThread; -import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.List; @@ -95,7 +93,6 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker } }; private MenuItem insertMarkerMenuItem; - private MenuItem searchMenuItem; private String searchQuery; @@ -153,6 +150,14 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker @Override protected View getRootView() { viewBinding = MarkerListBinding.inflate(getLayoutInflater()); + + viewBinding.markerListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> { + searchQuery = viewBinding.markerListSearchView.getEditText().getText().toString(); + viewBinding.markerListSearchView.hide(); + loadData(); + return true; + }); + return viewBinding.getRoot(); } @@ -162,9 +167,6 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker); - searchMenuItem = menu.findItem(R.id.marker_list_search); - ActivityUtils.configureSearchWidget(this, searchMenuItem); - return super.onCreateOptionsMenu(menu); } @@ -236,35 +238,10 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker return false; } - @Override - public void onBackPressed() { - SearchView searchView = (SearchView) searchMenuItem.getActionView(); - if (!searchView.isIconified()) { - searchView.setIconified(true); - } - - if (searchQuery != null) { - searchQuery = null; - loadData(); - return; - } - - super.onBackPressed(); - } - - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - - if (Intent.ACTION_SEARCH.equals(intent.getAction())) { - searchQuery = intent.getStringExtra(SearchManager.QUERY); - } else { - searchQuery = null; - } - } - @UiThread private void loadData() { + viewBinding.markerListToolbar.setText(searchQuery); + viewBinding.markerListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.menu_markers))); List markers = contentProviderUtils.searchMarkers(trackId, searchQuery); diff --git a/src/main/java/de/dennisguse/opentracks/ui/util/ActivityUtils.java b/src/main/java/de/dennisguse/opentracks/ui/util/ActivityUtils.java index 5d3d90817..16f74da40 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/util/ActivityUtils.java +++ b/src/main/java/de/dennisguse/opentracks/ui/util/ActivityUtils.java @@ -2,18 +2,13 @@ package de.dennisguse.opentracks.ui.util; import static android.content.Context.VIBRATOR_SERVICE; -import android.app.Activity; -import android.app.SearchManager; import android.content.Context; import android.os.Build; import android.os.VibrationEffect; import android.os.Vibrator; -import android.util.Log; import android.view.Menu; -import android.view.MenuItem; import androidx.annotation.NonNull; -import androidx.appcompat.widget.SearchView; import java.time.Duration; @@ -21,19 +16,6 @@ public class ActivityUtils { private static final String TAG = ActivityUtils.class.getSimpleName(); - public static SearchView configureSearchWidget(Activity activity, final MenuItem menuItem) { - final SearchView searchView = (SearchView) menuItem.getActionView(); - SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE); - if (searchManager != null) { - //NOTE: Use searchManager.getSearchableInfo(new ComponentName(activity, SearchActivity.class)) if another activity should handle the search - searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName())); - } else { - Log.w(TAG, "Could not retrieve SearchManager."); - } - searchView.setSubmitButtonEnabled(true); - return searchView; - } - public static void vibrate(@NonNull Context context, Duration duration) { final Vibrator vibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/src/main/res/layout/marker_list.xml b/src/main/res/layout/marker_list.xml index 2eecbbfaf..e9136771f 100644 --- a/src/main/res/layout/marker_list.xml +++ b/src/main/res/layout/marker_list.xml @@ -22,14 +22,24 @@ limitations under the License. android:layout_width="match_parent" android:layout_height="wrap_content"> - + app:layout_behavior="@string/searchbar_scrolling_view_behavior" + app:menu="@menu/marker_list" /> + + + + - + + + + - \ No newline at end of file diff --git a/src/main/res/menu/track_list.xml b/src/main/res/menu/track_list.xml index 2cdf3a53d..ec5a6399f 100644 --- a/src/main/res/menu/track_list.xml +++ b/src/main/res/menu/track_list.xml @@ -15,12 +15,6 @@ limitations under the License. --> - - + android:title="@string/menu_settings" + app:showAsAction="ifRoom" />