diff --git a/android/res/layout-land/activity_map.xml b/android/res/layout-land/activity_map.xml index 53733eb1a8..25b8a6dd7a 100644 --- a/android/res/layout-land/activity_map.xml +++ b/android/res/layout-land/activity_map.xml @@ -73,4 +73,16 @@ placePage:animationType="left" placePage:docked="true" tools:ignore="UnknownIdInLayout"/> + + + + \ No newline at end of file diff --git a/android/res/layout-w1020dp/activity_map.xml b/android/res/layout-w1020dp/activity_map.xml index 97e3a440b0..65914b8d0a 100644 --- a/android/res/layout-w1020dp/activity_map.xml +++ b/android/res/layout-w1020dp/activity_map.xml @@ -53,6 +53,12 @@ android:visibility="gone" tools:visibility="visible"/> + + + + diff --git a/android/res/layout/activity_map.xml b/android/res/layout/activity_map.xml index a574d5c421..d1554546c4 100644 --- a/android/res/layout/activity_map.xml +++ b/android/res/layout/activity_map.xml @@ -66,4 +66,16 @@ android:layout_height="wrap_content" android:layout_alignParentBottom="true" placePage:animationType="bottom"/> + + + + diff --git a/android/res/layout/search_filter_panel.xml b/android/res/layout/search_filter_panel.xml index 6df2affa37..5f67c2c220 100644 --- a/android/res/layout/search_filter_panel.xml +++ b/android/res/layout/search_filter_panel.xml @@ -7,10 +7,10 @@ android:layout_height="@dimen/height_block_base" android:padding="@dimen/margin_half" android:background="?cardBackground" + android:clipToPadding="false" android:visibility="gone" tools:visibility="visible" - tools:showIn="@layout/fragment_search" - android:clipToPadding="false"> + tools:showIn="@layout/fragment_search"> CREATOR = new Creator() + { + @Override + public HotelsFilter createFromParcel(Parcel in) + { + return readFromParcel(in); + } + + @Override + public HotelsFilter[] newArray(int size) + { + return new HotelsFilter[size]; + } + }; } diff --git a/android/src/com/mapswithme/maps/search/HotelsFilterView.java b/android/src/com/mapswithme/maps/search/HotelsFilterView.java index 9947899e1f..17c1b0d7ba 100644 --- a/android/src/com/mapswithme/maps/search/HotelsFilterView.java +++ b/android/src/com/mapswithme/maps/search/HotelsFilterView.java @@ -60,7 +60,7 @@ public class HotelsFilterView extends FrameLayout protected void onFinishInflate() { mFrame = findViewById(R.id.frame); - mFrame.setTranslationY(mFrame.getHeight()); + mFrame.setTranslationY(mFrame.getResources().getDisplayMetrics().heightPixels); mFade = findViewById(R.id.fade); mRating = (RatingFilterView) findViewById(R.id.rating); mPrice = (PriceFilterView) findViewById(R.id.price); diff --git a/android/src/com/mapswithme/maps/search/SearchActivity.java b/android/src/com/mapswithme/maps/search/SearchActivity.java index 1d23bcc05f..c05d87de4b 100644 --- a/android/src/com/mapswithme/maps/search/SearchActivity.java +++ b/android/src/com/mapswithme/maps/search/SearchActivity.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.StyleRes; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -17,11 +18,14 @@ import com.mapswithme.util.ThemeUtils; public class SearchActivity extends BaseMwmFragmentActivity implements CustomNavigateUpListener { public static final String EXTRA_QUERY = "search_query"; + public static final String EXTRA_HOTELS_FILTER = "hotels_filter"; - public static void start(@NonNull Activity activity, String query) + public static void start(@NonNull Activity activity, @Nullable String query, + @Nullable HotelsFilter filter) { final Intent i = new Intent(activity, SearchActivity.class); i.putExtra(EXTRA_QUERY, query); + i.putExtra(EXTRA_HOTELS_FILTER, filter); activity.startActivity(i); activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } @@ -57,6 +61,19 @@ public class SearchActivity extends BaseMwmFragmentActivity implements CustomNav final FragmentManager manager = getSupportFragmentManager(); if (manager.getBackStackEntryCount() == 0) { + SearchFragment fragment = + (SearchFragment) manager.findFragmentByTag(SearchFragment.class.getName()); + if (fragment != null) + { + HotelsFilter filter = fragment.getHotelsFilter(); + if (filter != null) + { + Intent intent = NavUtils.getParentActivityIntent(this); + intent.putExtra(EXTRA_HOTELS_FILTER, filter); + NavUtils.navigateUpTo(this, intent); + return; + } + } NavUtils.navigateUpFromSameTask(this); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); return; diff --git a/android/src/com/mapswithme/maps/search/SearchFilterPanelController.java b/android/src/com/mapswithme/maps/search/SearchFilterPanelController.java index 23eda3623e..6cb2150a56 100644 --- a/android/src/com/mapswithme/maps/search/SearchFilterPanelController.java +++ b/android/src/com/mapswithme/maps/search/SearchFilterPanelController.java @@ -4,7 +4,9 @@ import android.content.res.Resources; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; import android.support.v4.content.ContextCompat; +import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -17,7 +19,7 @@ public class SearchFilterPanelController @NonNull private final View mFrame; @NonNull - private final View mShowOnMap; + private final TextView mShowOnMap; @NonNull private final View mFilterButton; @NonNull @@ -31,6 +33,8 @@ public class SearchFilterPanelController private HotelsFilter mFilter; private final float mElevation; + @NonNull + private final String mCategory; private View.OnClickListener mClearListener = new View.OnClickListener() { @@ -44,7 +48,7 @@ public class SearchFilterPanelController public interface FilterPanelListener { - void onShowOnMap(); + void onViewClick(); void onFilterClick(); void onFilterClear(); } @@ -54,10 +58,18 @@ public class SearchFilterPanelController public SearchFilterPanelController(@NonNull View frame, @Nullable FilterPanelListener listener) + { + this(frame, listener, R.string.search_show_on_map); + } + + public SearchFilterPanelController(@NonNull View frame, + @Nullable FilterPanelListener listener, + @StringRes int populateButtonText) { mFrame = frame; mFilterPanelListener = listener; - mShowOnMap = mFrame.findViewById(R.id.show_on_map); + mShowOnMap = (TextView) mFrame.findViewById(R.id.show_on_map); + mShowOnMap.setText(populateButtonText); mFilterButton = mFrame.findViewById(R.id.filter_button); mFilterIcon = (ImageView) mFilterButton.findViewById(R.id.filter_icon); mFilterText = (TextView) mFilterButton.findViewById(R.id.filter_text); @@ -65,6 +77,7 @@ public class SearchFilterPanelController Resources res = mFrame.getResources(); mElevation = res.getDimension(R.dimen.margin_quarter); + mCategory = res.getString(R.string.hotel).toLowerCase(); initListeners(); } @@ -85,9 +98,13 @@ public class SearchFilterPanelController UiUtils.showIf(show, mDivider); } - void showFilterButton(boolean show) + public boolean updateFilterButtonVisibility(@Nullable String category) { + boolean show = !TextUtils.isEmpty(category) + && category.trim().toLowerCase().equals(mCategory); UiUtils.showIf(show, mFilterButton); + + return show; } private void initListeners() @@ -98,7 +115,7 @@ public class SearchFilterPanelController public void onClick(View v) { if (mFilterPanelListener != null) - mFilterPanelListener.onShowOnMap(); + mFilterPanelListener.onViewClick(); } }); mFilterButton.setOnClickListener(new View.OnClickListener() diff --git a/android/src/com/mapswithme/maps/search/SearchFragment.java b/android/src/com/mapswithme/maps/search/SearchFragment.java index 101da70ac8..9799cad17c 100644 --- a/android/src/com/mapswithme/maps/search/SearchFragment.java +++ b/android/src/com/mapswithme/maps/search/SearchFragment.java @@ -160,6 +160,7 @@ public class SearchFragment extends BaseMwmFragment private final LastPosition mLastPosition = new LastPosition(); private boolean mSearchRunning; private String mInitialQuery; + private @Nullable HotelsFilter mInitialHotelsFilter; private boolean mFromRoutePlan; private final LocationListener mLocationListener = new LocationListener.Simple() @@ -192,6 +193,15 @@ public class SearchFragment extends BaseMwmFragment return (MapManager.nativeGetDownloadedCount() == 0 && !MapManager.nativeIsDownloading()); } + @Nullable + public HotelsFilter getHotelsFilter() + { + if (mFilterPanel == null) + return null; + + return mFilterPanel.getFilter(); + } + private void showDownloadSuggest() { final FragmentManager fm = getChildFragmentManager(); @@ -294,7 +304,7 @@ public class SearchFragment extends BaseMwmFragment new SearchFilterPanelController.FilterPanelListener() { @Override - public void onShowOnMap() + public void onViewClick() { showAllResultsOnMap(); } @@ -315,7 +325,9 @@ public class SearchFragment extends BaseMwmFragment runSearch(); } }); - mFilterPanel.showFilterButton(false); + if (mInitialHotelsFilter != null) + mFilterPanel.setFilter(mInitialHotelsFilter); + mFilterPanel.updateFilterButtonVisibility(null); if (mSearchAdapter == null) { @@ -337,7 +349,10 @@ public class SearchFragment extends BaseMwmFragment updateResultsPlaceholder(); if (mInitialQuery != null) + { setQuery(mInitialQuery); + updateFilterButton(mInitialQuery); + } mToolbarController.activate(); SearchEngine.INSTANCE.addListener(this); @@ -400,6 +415,7 @@ public class SearchFragment extends BaseMwmFragment return; mInitialQuery = arguments.getString(SearchActivity.EXTRA_QUERY); + mInitialHotelsFilter = arguments.getParcelable(SearchActivity.EXTRA_HOTELS_FILTER); mFromRoutePlan = RoutingController.get().isWaitingPoiPick(); } @@ -467,9 +483,12 @@ public class SearchFragment extends BaseMwmFragment SearchRecents.add(query); mLastQueryTimestamp = System.nanoTime(); - // TODO (@alexzatsepin): set up hotelsFilter correctly. + HotelsFilter hotelsFilter = null; + if (mFilterPanel != null) + hotelsFilter = mFilterPanel.getFilter(); + SearchEngine.searchInteractive( - query, mLastQueryTimestamp, false /* isMapAndTable */, null /* hotelsFilter */); + query, mLastQueryTimestamp, false /* isMapAndTable */, hotelsFilter); SearchEngine.showAllResults(query); Utils.navigateToParent(getActivity()); @@ -507,7 +526,6 @@ public class SearchFragment extends BaseMwmFragment } else { - // TODO (@alexzatsepin): set up hotelsFilter correctly. if (!SearchEngine.search(getQuery(), mLastQueryTimestamp, mLastPosition.valid, mLastPosition.lat, mLastPosition.lon, hotelsFilter)) { @@ -548,14 +566,13 @@ public class SearchFragment extends BaseMwmFragment updateFilterButton(category); } - private void updateFilterButton(String category) + private void updateFilterButton(@Nullable String category) { if (mFilterPanel != null) { - String hotel = getString(R.string.hotel); - boolean show = !TextUtils.isEmpty(category) - && category.trim().toLowerCase().equals(hotel.toLowerCase()); - mFilterPanel.showFilterButton(show); + boolean show = mFilterPanel.updateFilterButtonVisibility(category); + if (!show) + mFilterPanel.setFilter(null); } } diff --git a/android/src/com/mapswithme/util/UiUtils.java b/android/src/com/mapswithme/util/UiUtils.java index 73dcdaeb42..38a0f06e6a 100644 --- a/android/src/com/mapswithme/util/UiUtils.java +++ b/android/src/com/mapswithme/util/UiUtils.java @@ -15,10 +15,12 @@ import android.net.Uri; import android.os.Build; import android.support.annotation.AnyRes; import android.support.annotation.AttrRes; +import android.support.annotation.ColorRes; import android.support.annotation.DimenRes; import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.annotation.StringRes; +import android.support.annotation.StyleRes; import android.support.design.widget.TextInputLayout; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; @@ -431,25 +433,14 @@ public final class UiUtils decorViewGroup.addView(statusBarTintView); } - public static void setupColorStatusBar(@NonNull Activity activity, @AttrRes int statusBarColor) + public static void setupColorStatusBar(@NonNull Activity activity, @ColorRes int statusBarColor) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; - TypedArray a = null; - try - { - a = activity.obtainStyledAttributes(new int[] {statusBarColor}); - int color = a.getColor(0, ContextCompat.getColor(activity, R.color.bg_statusbar)); - Window window = activity.getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(color); - } - finally - { - if (a != null) - a.recycle(); - } + Window window = activity.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(ContextCompat.getColor(activity, statusBarColor)); } public static int getCompassYOffset(@NonNull Context context)