From b0215058d202e0ff0c0fcd6042c7f156d90f89f9 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Wed, 1 May 2013 15:30:01 -0700 Subject: [PATCH] show/hid track controller when search is shown/dismissed --- .../apps/mytracks/MarkerListActivity.java | 2 +- .../apps/mytracks/SearchListActivity.java | 2 +- .../apps/mytracks/TrackController.java | 8 ++++++ .../apps/mytracks/TrackListActivity.java | 26 +++++++++++++++---- .../apps/mytracks/util/Api11Adapter.java | 18 ++++++++++++- .../apps/mytracks/util/Api14Adapter.java | 15 +++++++---- .../apps/mytracks/util/Api8Adapter.java | 4 ++- .../apps/mytracks/util/ApiAdapter.java | 6 ++++- 8 files changed, 66 insertions(+), 15 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java index 3e4928492..3a0c89d0a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java @@ -226,7 +226,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele getMenuInflater().inflate(R.menu.marker_list, menu); insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker); searchMenuItem = menu.findItem(R.id.marker_list_search); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem); + ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); updateMenu(); return true; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index 4a14daf53..b9d5cca7a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -280,7 +280,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_list, menu); searchMenuItem = menu.findItem(R.id.search_list_search); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem); + ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); return true; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackController.java b/MyTracks/src/com/google/android/apps/mytracks/TrackController.java index 756692e65..91d89a7ea 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackController.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackController.java @@ -133,6 +133,14 @@ public class TrackController { stopTimer(); } + public void hide() { + containerView.setVisibility(View.GONE); + } + + public void show() { + containerView.setVisibility(View.VISIBLE); + } + /** * Stops the timer. */ diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index d7a692cd4..5b89d1e34 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -57,6 +57,7 @@ import com.google.android.maps.mytracks.BuildConfig; import com.google.android.maps.mytracks.R; import android.app.Dialog; +import android.app.SearchManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -370,10 +371,8 @@ public class TrackListActivity extends AbstractSendToGoogleActivity ApiAdapterFactory.getApiAdapter().enableStrictMode(); } Intent intent = new Intent(this, RemoveTempFilesService.class); - startService(intent); - - setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - + startService(intent); + myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); @@ -383,6 +382,16 @@ public class TrackListActivity extends AbstractSendToGoogleActivity trackController = new TrackController( this, trackRecordingServiceConnection, true, recordListener, stopListener); + setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); + // Show trackController when search dialog is dismissed + SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); + searchManager.setOnDismissListener(new SearchManager.OnDismissListener() { + @Override + public void onDismiss() { + trackController.show(); + } + }); + listView = (ListView) findViewById(R.id.track_list); listView.setEmptyView(findViewById(R.id.track_list_empty_view)); listView.setOnItemClickListener(new OnItemClickListener() { @@ -547,7 +556,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity feedbackMenuItem = menu.findItem(R.id.track_list_feedback); feedbackMenuItem.setVisible(GoogleFeedbackUtils.isAvailable(this)); - ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem); + ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, trackController); updateMenuItems(recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT); return true; } @@ -640,6 +649,13 @@ public class TrackListActivity extends AbstractSendToGoogleActivity } return super.onKeyUp(keyCode, event); } + + @Override + public boolean onSearchRequested() { + // Hide trackController when search dialog is shown + trackController.hide(); + return super.onSearchRequested(); + }; @Override public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java index ca139b388..b97150faa 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.util; import com.google.android.apps.mytracks.ContextualActionModeCallback; +import com.google.android.apps.mytracks.TrackController; import com.google.android.maps.mytracks.R; import android.annotation.TargetApi; @@ -198,11 +199,26 @@ public class Api11Adapter extends Api10Adapter { } @Override - public void configureSearchWidget(Activity activity, final MenuItem menuItem) { + public void configureSearchWidget( + Activity activity, MenuItem menuItem, final TrackController trackController) { SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menuItem.getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName())); searchView.setQueryRefinementEnabled(true); + searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + // Hide and show trackController when search widget has focus/no focus + if (trackController != null) { + if (hasFocus) { + trackController.hide(); + } else { + trackController.show(); + } + } + } + }); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api14Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api14Adapter.java index cd86c0e1d..f2de1b35f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api14Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api14Adapter.java @@ -16,6 +16,8 @@ package com.google.android.apps.mytracks.util; +import com.google.android.apps.mytracks.TrackController; + import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; @@ -38,16 +40,18 @@ public class Api14Adapter extends Api11Adapter { } @Override - public void configureSearchWidget(Activity activity, final MenuItem menuItem) { - super.configureSearchWidget(activity, menuItem); + public void configureSearchWidget( + Activity activity, final MenuItem menuItem, TrackController trackController) { + super.configureSearchWidget(activity, menuItem, trackController); SearchView searchView = (SearchView) menuItem.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override + @Override public boolean onQueryTextSubmit(String query) { menuItem.collapseActionView(); return false; } - @Override + + @Override public boolean onQueryTextChange(String newText) { return false; } @@ -57,7 +61,8 @@ public class Api14Adapter extends Api11Adapter { public boolean onSuggestionSelect(int position) { return false; } - @Override + + @Override public boolean onSuggestionClick(int position) { menuItem.collapseActionView(); return false; diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java index 4fe71f9f9..26220f9d7 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java @@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.util; import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.ContextualActionModeCallback; +import com.google.android.apps.mytracks.TrackController; import com.google.android.apps.mytracks.services.sensors.BluetoothConnectionManager; import com.google.android.apps.mytracks.widgets.TrackWidgetProvider; import com.google.api.client.http.HttpTransport; @@ -111,7 +112,8 @@ public class Api8Adapter implements ApiAdapter { } @Override - public void configureSearchWidget(Activity activity, MenuItem menuItem) { + public void configureSearchWidget( + Activity activity, MenuItem menuItem, TrackController trackController) { // Do nothing } diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java index a8684ac8c..58572e741 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks.util; import com.google.android.apps.mytracks.ContextualActionModeCallback; +import com.google.android.apps.mytracks.TrackController; import com.google.api.client.http.HttpTransport; import android.app.Activity; @@ -134,8 +135,11 @@ public interface ApiAdapter { * * @param activity the activity * @param menuItem the search menu item + * @param trackController the track controller to hide/show when search widget + * is expanded/collapsed. Can be null */ - public void configureSearchWidget(Activity activity, MenuItem menuItem); + public void configureSearchWidget( + Activity activity, MenuItem menuItem, TrackController trackController); /** * Handles the search menu selection. Returns true if handled.