Merge "TV PiP: prevent unnecessary notification updates" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
269c287976
@@ -186,16 +186,17 @@ public class TvPipActionsProvider implements TvPipAction.SystemActionsHandler {
|
||||
}
|
||||
|
||||
@VisibleForTesting(visibility = PACKAGE)
|
||||
public void onPipExpansionToggled(boolean expanded) {
|
||||
public void updatePipExpansionState(boolean expanded) {
|
||||
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
|
||||
"%s: onPipExpansionToggled, expanded: %b", TAG, expanded);
|
||||
|
||||
mExpandCollapseAction.update(
|
||||
boolean changed = mExpandCollapseAction.update(
|
||||
expanded ? R.string.pip_collapse : R.string.pip_expand,
|
||||
expanded ? R.drawable.pip_ic_collapse : R.drawable.pip_ic_expand);
|
||||
|
||||
notifyActionsChanged(/* added= */ 0, /* updated= */ 1,
|
||||
mActionsList.indexOf(mExpandCollapseAction));
|
||||
if (changed) {
|
||||
notifyActionsChanged(/* added= */ 0, /* updated= */ 1,
|
||||
mActionsList.indexOf(mExpandCollapseAction));
|
||||
}
|
||||
}
|
||||
|
||||
List<TvPipAction> getActionsList() {
|
||||
|
||||
@@ -502,7 +502,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
"%s: onPipTransition_Canceled(), state=%s", TAG, stateToName(mState));
|
||||
mTvPipMenuController.onPipTransitionFinished(
|
||||
PipAnimationController.isInPipDirection(direction));
|
||||
mTvPipActionsProvider.onPipExpansionToggled(mTvPipBoundsState.isTvPipExpanded());
|
||||
mTvPipActionsProvider.updatePipExpansionState(mTvPipBoundsState.isTvPipExpanded());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -515,7 +515,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
"%s: onPipTransition_Finished(), state=%s, direction=%d",
|
||||
TAG, stateToName(mState), direction);
|
||||
mTvPipMenuController.onPipTransitionFinished(enterPipTransition);
|
||||
mTvPipActionsProvider.onPipExpansionToggled(mTvPipBoundsState.isTvPipExpanded());
|
||||
mTvPipActionsProvider.updatePipExpansionState(mTvPipBoundsState.isTvPipExpanded());
|
||||
}
|
||||
|
||||
private void updateExpansionState() {
|
||||
|
||||
@@ -52,9 +52,14 @@ public class TvPipSystemAction extends TvPipAction {
|
||||
broadcastAction);
|
||||
}
|
||||
|
||||
void update(@StringRes int title, @DrawableRes int icon) {
|
||||
/**
|
||||
* @return true if the title and/or icon were changed.
|
||||
*/
|
||||
boolean update(@StringRes int title, @DrawableRes int icon) {
|
||||
boolean changed = title != mTitleResource || icon != mIconResource;
|
||||
mTitleResource = title;
|
||||
mIconResource = icon;
|
||||
return changed;
|
||||
}
|
||||
|
||||
void populateButton(@NonNull TvWindowMenuActionButton button, Handler mainHandler) {
|
||||
|
||||
@@ -158,19 +158,73 @@ public class TvPipActionProviderTest extends ShellTestCase {
|
||||
new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void expandedPip_toggleExpansion() {
|
||||
assumeTelevision();
|
||||
// PiP has expanded PiP enabled, but is in a collapsed state
|
||||
private void check_expandedPip_updateExpansionState(
|
||||
boolean startExpansion, boolean endExpansion, boolean updateExpected) {
|
||||
|
||||
mActionsProvider.updateExpansionEnabled(true);
|
||||
mActionsProvider.onPipExpansionToggled(/* expanded= */ false);
|
||||
mActionsProvider.updatePipExpansionState(startExpansion);
|
||||
|
||||
mActionsProvider.addListener(mMockListener);
|
||||
mActionsProvider.onPipExpansionToggled(/* expanded= */ true);
|
||||
mActionsProvider.updatePipExpansionState(endExpansion);
|
||||
|
||||
assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
|
||||
new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
|
||||
verify(mMockListener).onActionsChanged(0, 1, 3);
|
||||
|
||||
if (updateExpected) {
|
||||
verify(mMockListener).onActionsChanged(0, 1, 3);
|
||||
} else {
|
||||
verify(mMockListener, times(0))
|
||||
.onActionsChanged(anyInt(), anyInt(), anyInt());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void expandedPip_toggleExpansion_collapse() {
|
||||
assumeTelevision();
|
||||
check_expandedPip_updateExpansionState(
|
||||
/* startExpansion= */ true,
|
||||
/* endExpansion= */ false,
|
||||
/* updateExpected= */ true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void expandedPip_toggleExpansion_expand() {
|
||||
assumeTelevision();
|
||||
check_expandedPip_updateExpansionState(
|
||||
/* startExpansion= */ false,
|
||||
/* endExpansion= */ true,
|
||||
/* updateExpected= */ true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void expandedPiP_updateExpansionState_alreadyExpanded() {
|
||||
assumeTelevision();
|
||||
check_expandedPip_updateExpansionState(
|
||||
/* startExpansion= */ true,
|
||||
/* endExpansion= */ true,
|
||||
/* updateExpected= */ false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void expandedPiP_updateExpansionState_alreadyCollapsed() {
|
||||
assumeTelevision();
|
||||
check_expandedPip_updateExpansionState(
|
||||
/* startExpansion= */ false,
|
||||
/* endExpansion= */ false,
|
||||
/* updateExpected= */ false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void regularPiP_updateExpansionState_setCollapsed() {
|
||||
assumeTelevision();
|
||||
mActionsProvider.updateExpansionEnabled(false);
|
||||
mActionsProvider.updatePipExpansionState(/* expanded= */ false);
|
||||
|
||||
mActionsProvider.addListener(mMockListener);
|
||||
mActionsProvider.updatePipExpansionState(/* expanded= */ false);
|
||||
|
||||
verify(mMockListener, times(0))
|
||||
.onActionsChanged(anyInt(), anyInt(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user