Skip to content

Commit 7f8a0b6

Browse files
authored
Merge pull request #17028 from wordpress-mobile/fix/show-jp-banner-in-search-results
Show Jetpack banner in search results
2 parents d524d3a + b5314d7 commit 7f8a0b6

File tree

5 files changed

+75
-36
lines changed

5 files changed

+75
-36
lines changed

RELEASE-NOTES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
-----
55
* [*] Login: Fix an issue preventing some users to log-in in with email addresses containing a single quote [https://github.com/wordpress-mobile/WordPress-Android/pull/15526]
66
* [*] Fix a possible crash with themes preloading at the start of Site Creation [https://github.com/wordpress-mobile/WordPress-Android/pull/17022]
7+
* [*] Show Jetpack banner in search results [https://github.com/wordpress-mobile/WordPress-Android/pull/17028]
78

89
20.5
910
-----

WordPress/src/main/java/org/wordpress/android/ui/FilteredRecyclerView.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ public RecyclerView getInternalRecyclerView() {
8787
return mRecyclerView;
8888
}
8989

90+
public RecyclerView getSearchSuggestionsRecyclerView() {
91+
return mSearchSuggestionsRecyclerView;
92+
}
93+
94+
9095
public void setRefreshing(boolean refreshing) {
9196
mSwipeToRefreshHelper.setRefreshing(refreshing);
9297
}

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java

Lines changed: 63 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import android.content.Intent;
6+
import android.content.res.Configuration;
67
import android.graphics.drawable.Drawable;
78
import android.os.Bundle;
89
import android.text.Html;
@@ -122,6 +123,7 @@
122123
import org.wordpress.android.util.AppLog;
123124
import org.wordpress.android.util.AppLog.T;
124125
import org.wordpress.android.util.DisplayUtils;
126+
import org.wordpress.android.util.DisplayUtilsWrapper;
125127
import org.wordpress.android.util.JetpackBrandingUtils;
126128
import org.wordpress.android.util.JetpackBrandingUtils.Screen;
127129
import org.wordpress.android.util.NetworkUtils;
@@ -182,6 +184,7 @@ public class ReaderPostListFragment extends ViewPagerFragment
182184
private View mSubFiltersListButton;
183185
private TextView mSubFilterTitle;
184186
private View mRemoveFilterButton;
187+
private View mJetpackBanner;
185188

186189
private boolean mIsTopLevel = false;
187190
private static final String SUBFILTER_BOTTOM_SHEET_TAG = "SUBFILTER_BOTTOM_SHEET_TAG";
@@ -231,6 +234,7 @@ public class ReaderPostListFragment extends ViewPagerFragment
231234
@Inject QuickStartRepository mQuickStartRepository;
232235
@Inject ReaderTracker mReaderTracker;
233236
@Inject SnackbarSequencer mSnackbarSequencer;
237+
@Inject DisplayUtilsWrapper mDisplayUtilsWrapper;
234238

235239
private enum ActionableEmptyViewButtonType {
236240
DISCOVER,
@@ -500,36 +504,49 @@ public void onCreate(Bundle savedInstanceState) {
500504
}
501505
}
502506

503-
private void toggleJetpackBannerIfEnabled(boolean forceShow) {
504-
if (!isAdded() || !isSearching() || getView() == null) return;
505-
final boolean shouldShow = forceShow && mJetpackBrandingUtils.shouldShowJetpackBranding();
506-
if (shouldShow) {
507-
View jetpackBanner = getView().findViewById(R.id.jetpack_banner);
508-
jetpackBanner.setVisibility(View.VISIBLE);
507+
private void toggleJetpackBannerIfEnabled(final boolean showIfEnabled, boolean animateOnScroll) {
508+
if (!isAdded() || getView() == null || !isSearching()) return;
509509

510-
if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) {
511-
jetpackBanner.setOnClickListener(v -> {
512-
mJetpackBrandingUtils.trackBannerTapped(Screen.READER_SEARCH);
513-
new JetpackPoweredBottomSheetFragment()
514-
.show(getChildFragmentManager(), JetpackPoweredBottomSheetFragment.TAG);
515-
});
510+
if (animateOnScroll) {
511+
RecyclerView scrollView = mRecyclerView.getInternalRecyclerView();
512+
mJetpackBrandingUtils.showJetpackBannerIfScrolledToTop(mJetpackBanner, scrollView);
513+
mJetpackBrandingUtils.setNavigationBarColorForBanner(requireActivity().getWindow());
514+
// Return early since the banner visibility was handled by showJetpackBannerIfScrolledToTop
515+
return;
516+
}
517+
518+
if (mJetpackBrandingUtils.shouldShowJetpackBranding()) {
519+
if (showIfEnabled && !mDisplayUtilsWrapper.isPhoneLandscape()) {
520+
showJetpackBanner();
521+
} else {
522+
hideJetpackBanner();
516523
}
517-
// Add bottom margin to post list and empty view.
518-
int jetpackBannerHeight = getResources().getDimensionPixelSize(R.dimen.jetpack_banner_height);
519-
((MarginLayoutParams) getView().findViewById(R.id.reader_recycler_view).getLayoutParams())
520-
.bottomMargin = jetpackBannerHeight;
521-
((MarginLayoutParams) getView().findViewById(R.id.empty_custom_view).getLayoutParams())
522-
.bottomMargin = jetpackBannerHeight;
523-
} else {
524-
getView().findViewById(R.id.jetpack_banner).setVisibility(View.GONE);
525-
// Remove bottom margin from post list and empty view.
526-
((MarginLayoutParams) getView().findViewById(R.id.reader_recycler_view).getLayoutParams())
527-
.bottomMargin = 0;
528-
((MarginLayoutParams) getView().findViewById(R.id.empty_custom_view).getLayoutParams())
529-
.bottomMargin = 0;
530524
}
531525
}
532526

527+
private void showJetpackBanner() {
528+
mJetpackBanner.setVisibility(View.VISIBLE);
529+
mJetpackBrandingUtils.setNavigationBarColorForBanner(requireActivity().getWindow());
530+
531+
// Add bottom margin to search suggestions list and empty view.
532+
int jetpackBannerHeight = getResources().getDimensionPixelSize(R.dimen.jetpack_banner_height);
533+
((MarginLayoutParams) mRecyclerView.getSearchSuggestionsRecyclerView().getLayoutParams()).bottomMargin
534+
= jetpackBannerHeight;
535+
((MarginLayoutParams) mActionableEmptyView.getLayoutParams()).bottomMargin = jetpackBannerHeight;
536+
}
537+
538+
private void hideJetpackBanner() {
539+
mJetpackBanner.setVisibility(View.GONE);
540+
541+
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
542+
requireActivity().getWindow().setNavigationBarColor(0);
543+
}
544+
545+
// Remove bottom margin from search suggestions list and empty view.
546+
((MarginLayoutParams) mRecyclerView.getSearchSuggestionsRecyclerView().getLayoutParams()).bottomMargin = 0;
547+
((MarginLayoutParams) mActionableEmptyView.getLayoutParams()).bottomMargin = 0;
548+
}
549+
533550
private void setFollowStatusForBlog(FollowStatusChanged readerData) {
534551
if (!hasPostAdapter()) {
535552
return;
@@ -1124,18 +1141,28 @@ public void onShowCustomEmptyView(EmptyViewMessageType emptyViewMsgType) {
11241141
// bar that appears at top after new posts are loaded
11251142
mNewPostsBar = rootView.findViewById(R.id.layout_new_posts);
11261143
mNewPostsBar.setVisibility(View.GONE);
1127-
mNewPostsBar.setOnClickListener(new View.OnClickListener() {
1128-
@Override
1129-
public void onClick(View view) {
1130-
mRecyclerView.scrollRecycleViewToPosition(0);
1131-
refreshPosts();
1132-
}
1144+
mNewPostsBar.setOnClickListener(view -> {
1145+
mRecyclerView.scrollRecycleViewToPosition(0);
1146+
refreshPosts();
11331147
});
11341148

11351149
// progress bar that appears when loading more posts
11361150
mProgress = rootView.findViewById(R.id.progress_footer);
11371151
mProgress.setVisibility(View.GONE);
11381152

1153+
mJetpackBanner = rootView.findViewById(R.id.jetpack_banner);
1154+
if (mJetpackBrandingUtils.shouldShowJetpackBranding()) {
1155+
mJetpackBrandingUtils.initJetpackBannerAnimation(mJetpackBanner, mRecyclerView.getInternalRecyclerView());
1156+
1157+
if (mJetpackBrandingUtils.shouldShowJetpackPoweredBottomSheet()) {
1158+
mJetpackBanner.setOnClickListener(v -> {
1159+
mJetpackBrandingUtils.trackBannerTapped(Screen.READER_SEARCH);
1160+
new JetpackPoweredBottomSheetFragment()
1161+
.show(getChildFragmentManager(), JetpackPoweredBottomSheetFragment.TAG);
1162+
});
1163+
}
1164+
}
1165+
11391166
if (savedInstanceState != null && savedInstanceState.getBoolean(ReaderConstants.KEY_IS_REFRESHING)) {
11401167
mIsUpdating = true;
11411168
mRecyclerView.setRefreshing(true);
@@ -1220,7 +1247,7 @@ private void showSearchMessageOrSuggestions() {
12201247
boolean hasQuery = !isSearchViewEmpty();
12211248
boolean hasPerformedSearch = !TextUtils.isEmpty(mCurrentSearchQuery);
12221249

1223-
toggleJetpackBannerIfEnabled(true);
1250+
toggleJetpackBannerIfEnabled(true, false);
12241251

12251252
// prevents suggestions from being shown after the search view has been collapsed
12261253
if (!isSearching()) {
@@ -1309,7 +1336,7 @@ private void submitSearchQuery(@NonNull String query) {
13091336
updatePostsInCurrentSearch(0);
13101337
updateSitesInCurrentSearch(0);
13111338

1312-
toggleJetpackBannerIfEnabled(false);
1339+
toggleJetpackBannerIfEnabled(false, false);
13131340

13141341
// track that the user performed a search
13151342
if (!trimQuery.equals("")) {
@@ -1857,6 +1884,8 @@ public void onDataLoaded(boolean isEmpty) {
18571884
}
18581885
if (isSearching() && !isSearchTabsShowing()) {
18591886
showSearchTabs();
1887+
} else if (isSearching()) {
1888+
toggleJetpackBannerIfEnabled(true, true);
18601889
}
18611890
}
18621891
mRestorePosition = 0;
@@ -2645,7 +2674,7 @@ public void onFollowTapped(View view, String blogName, final long blogId, final
26452674

26462675
if (blogId > 0) {
26472676
WPSnackbar.make(getSnackbarParent(), Html.fromHtml(getString(R.string.reader_followed_blog_notifications,
2648-
"<b>", blog, "</b>")), Snackbar.LENGTH_LONG)
2677+
"<b>", blog, "</b>")), Snackbar.LENGTH_LONG)
26492678
.setAction(getString(R.string.reader_followed_blog_notifications_action),
26502679
new View.OnClickListener() {
26512680
@Override public void onClick(View view) {

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSearchActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.wordpress.android.WordPress
77
import org.wordpress.android.ui.LocaleAwareActivity
88
import org.wordpress.android.ui.reader.tracker.ReaderTracker
99
import org.wordpress.android.ui.reader.tracker.ReaderTrackerType.MAIN_READER
10+
import org.wordpress.android.util.JetpackBrandingUtils
1011
import javax.inject.Inject
1112

1213
/**
@@ -17,6 +18,7 @@ import javax.inject.Inject
1718
@AndroidEntryPoint
1819
class ReaderSearchActivity : LocaleAwareActivity() {
1920
@Inject lateinit var readerTracker: ReaderTracker
21+
@Inject lateinit var jetpackBrandingUtils: JetpackBrandingUtils
2022

2123
override fun onCreate(savedInstanceState: Bundle?) {
2224
super.onCreate(savedInstanceState)

WordPress/src/main/java/org/wordpress/android/util/DisplayUtilsWrapper.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import javax.inject.Inject
66

77
@Reusable
88
class DisplayUtilsWrapper @Inject constructor(private val contextProvider: ContextProvider) {
9+
private val windowWidth get() = DisplayUtils.getWindowPixelWidth(contextProvider.getContext())
10+
private val windowHeight get() = DisplayUtils.getWindowPixelHeight(contextProvider.getContext())
11+
912
fun getDisplayPixelWidth() = DisplayUtils.getDisplayPixelWidth()
1013

11-
fun isLandscapeBySize() =
12-
getDisplayPixelWidth() > DisplayUtils.getWindowPixelHeight(contextProvider.getContext())
14+
fun isLandscapeBySize() = windowWidth > windowHeight
1315

1416
fun isLandscape() = DisplayUtils.isLandscape(contextProvider.getContext())
1517

0 commit comments

Comments
 (0)