Commit fa76cf61 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

[SharingHub] Relayout on layout change

When the device layout changes invalidate and re-layout the two recycler
views that make up the share sheet.

Bug: 1099496
Change-Id: I45b883b49d490f9d2c1c3d6f0a0f10dac968c1e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2278409
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786098}
parent 500589ce
......@@ -133,6 +133,14 @@ class ShareSheetBottomSheetContent implements BottomSheetContent, OnItemClickLis
return mContentView;
}
protected View getTopRowView() {
return mContentView.findViewById(R.id.share_sheet_chrome_apps);
}
protected View getBottomRowView() {
return mContentView.findViewById(R.id.share_sheet_other_apps);
}
@Override
public View getToolbarView() {
return null;
......
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.share.share_sheet;
import android.app.Activity;
import android.view.View;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.content.res.AppCompatResources;
......@@ -18,7 +19,10 @@ import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.base.WindowAndroid.ActivityStateObserver;
......@@ -32,7 +36,8 @@ import java.util.Set;
* Coordinator for displaying the share sheet.
*/
// TODO(crbug/1022172): Should be package-protected once modularization is complete.
public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptionShareCallback {
public class ShareSheetCoordinator
implements ActivityStateObserver, ChromeOptionShareCallback, View.OnLayoutChangeListener {
private final BottomSheetController mBottomSheetController;
private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
......@@ -42,6 +47,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
private boolean mExcludeFirstParty;
private ShareSheetBottomSheetContent mBottomSheet;
private WindowAndroid mWindowAndroid;
private final BottomSheetObserver mBottomSheetObserver;
/**
* Constructs a new ShareSheetCoordinator.
......@@ -61,6 +67,20 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mPropertyModelBuilder = modelBuilder;
mPrefServiceBridge = prefServiceBridge;
mPrintTabCallback = printTab;
mBottomSheetObserver = new EmptyBottomSheetObserver() {
@Override
public void onSheetContentChanged(BottomSheetContent bottomSheet) {
super.onSheetContentChanged(bottomSheet);
if (bottomSheet == mBottomSheet) {
mBottomSheet.getContentView().addOnLayoutChangeListener(
ShareSheetCoordinator.this::onLayoutChange);
} else {
mBottomSheet.getContentView().removeOnLayoutChangeListener(
ShareSheetCoordinator.this::onLayoutChange);
}
}
};
mBottomSheetController.addObserver(mBottomSheetObserver);
}
protected void destroy() {
......@@ -160,4 +180,17 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mBottomSheetController.hideContent(mBottomSheet, true);
}
}
// View.OnLayoutChangeListener
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
int oldTop, int oldRight, int oldBottom) {
if ((oldRight - oldLeft) == (right - left)) {
return;
}
mBottomSheet.getTopRowView().invalidate();
mBottomSheet.getTopRowView().requestLayout();
mBottomSheet.getBottomRowView().invalidate();
mBottomSheet.getBottomRowView().requestLayout();
}
}
......@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.test.ChromeBrowserTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity;
......@@ -60,6 +61,9 @@ public final class ShareSheetCoordinatorTest {
@Mock
private ShareParams mParams;
@Mock
private BottomSheetController mController;
private ShareSheetCoordinator mShareSheetCoordinator;
@Before
......@@ -85,7 +89,7 @@ public final class ShareSheetCoordinatorTest {
.thenReturn(thirdPartyPropertyModels);
mShareSheetCoordinator =
new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null, null);
new ShareSheetCoordinator(mController, null, mPropertyModelBuilder, null, null);
}
@Test
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment