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 ...@@ -133,6 +133,14 @@ class ShareSheetBottomSheetContent implements BottomSheetContent, OnItemClickLis
return mContentView; 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 @Override
public View getToolbarView() { public View getToolbarView() {
return null; return null;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.share.share_sheet; package org.chromium.chrome.browser.share.share_sheet;
import android.app.Activity; import android.app.Activity;
import android.view.View;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
...@@ -18,7 +19,10 @@ import org.chromium.chrome.browser.preferences.PrefServiceBridge; ...@@ -18,7 +19,10 @@ import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.ShareHelper; import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.tab.Tab; 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.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.components.browser_ui.share.ShareParams;
import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.base.WindowAndroid.ActivityStateObserver; import org.chromium.ui.base.WindowAndroid.ActivityStateObserver;
...@@ -32,7 +36,8 @@ import java.util.Set; ...@@ -32,7 +36,8 @@ import java.util.Set;
* Coordinator for displaying the share sheet. * Coordinator for displaying the share sheet.
*/ */
// TODO(crbug/1022172): Should be package-protected once modularization is complete. // 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 BottomSheetController mBottomSheetController;
private final Supplier<Tab> mTabProvider; private final Supplier<Tab> mTabProvider;
private final ShareSheetPropertyModelBuilder mPropertyModelBuilder; private final ShareSheetPropertyModelBuilder mPropertyModelBuilder;
...@@ -42,6 +47,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -42,6 +47,7 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
private boolean mExcludeFirstParty; private boolean mExcludeFirstParty;
private ShareSheetBottomSheetContent mBottomSheet; private ShareSheetBottomSheetContent mBottomSheet;
private WindowAndroid mWindowAndroid; private WindowAndroid mWindowAndroid;
private final BottomSheetObserver mBottomSheetObserver;
/** /**
* Constructs a new ShareSheetCoordinator. * Constructs a new ShareSheetCoordinator.
...@@ -61,6 +67,20 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -61,6 +67,20 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mPropertyModelBuilder = modelBuilder; mPropertyModelBuilder = modelBuilder;
mPrefServiceBridge = prefServiceBridge; mPrefServiceBridge = prefServiceBridge;
mPrintTabCallback = printTab; 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() { protected void destroy() {
...@@ -160,4 +180,17 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio ...@@ -160,4 +180,17 @@ public class ShareSheetCoordinator implements ActivityStateObserver, ChromeOptio
mBottomSheetController.hideContent(mBottomSheet, true); 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; ...@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.ChromeBrowserTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.Features; 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.components.browser_ui.share.ShareParams;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivity; import org.chromium.ui.test.util.DummyUiActivity;
...@@ -60,6 +61,9 @@ public final class ShareSheetCoordinatorTest { ...@@ -60,6 +61,9 @@ public final class ShareSheetCoordinatorTest {
@Mock @Mock
private ShareParams mParams; private ShareParams mParams;
@Mock
private BottomSheetController mController;
private ShareSheetCoordinator mShareSheetCoordinator; private ShareSheetCoordinator mShareSheetCoordinator;
@Before @Before
...@@ -85,7 +89,7 @@ public final class ShareSheetCoordinatorTest { ...@@ -85,7 +89,7 @@ public final class ShareSheetCoordinatorTest {
.thenReturn(thirdPartyPropertyModels); .thenReturn(thirdPartyPropertyModels);
mShareSheetCoordinator = mShareSheetCoordinator =
new ShareSheetCoordinator(null, null, mPropertyModelBuilder, null, null); new ShareSheetCoordinator(mController, null, mPropertyModelBuilder, null, null);
} }
@Test @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