show/hid track controller when search is shown/dismissed

This commit is contained in:
Jimmy Shih
2013-05-01 15:30:01 -07:00
parent 244219bdde
commit b0215058d2
8 changed files with 66 additions and 15 deletions
@@ -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;
}
@@ -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;
}
@@ -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.
*/
@@ -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() {
@@ -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
@@ -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;
@@ -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
}
@@ -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.