Improve shields button state update logic

Initially, button should be disabled state. If not, it could be clicked
while tab is not displayed.
Also, button should be only enabled when shields is on for current tab
and button state should be updated when visible tab is changed.
This commit is contained in:
Simon Hong
2019-09-05 22:17:52 +09:00
parent 3a830d7828
commit 7cdb47110a
@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettin
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
import org.chromium.chrome.browser.tabmodel.TabSelectionType;
import org.chromium.chrome.browser.toolbar.top.ToolbarLayout;
import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.util.MathUtils;
@@ -63,11 +64,12 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
@Override
protected void onFinishInflate() {
super.onFinishInflate();
super.onFinishInflate();
mShieldsLayout = (FrameLayout) findViewById(R.id.brave_shields_button_layout);
mRewardsLayout = (FrameLayout) findViewById(R.id.brave_rewards_button_layout);
mBraveShieldsButton = (ImageView) findViewById(R.id.brave_shields_button);
if (mBraveShieldsButton != null) {
mBraveShieldsButton.setEnabled(false);
mBraveShieldsButton.setClickable(true);
mBraveShieldsButton.setOnClickListener(this);
mBraveShieldsButton.setOnLongClickListener(this);
@@ -86,9 +88,9 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
}
if (isTopShield) {
if (isOn) {
setBraveShieldsColored();
enableBraveShieldsButton();
} else {
setBraveShieldsBlackAndWhite();
disableBraveShieldsButton();
}
}
if (currentTab.isLoading()) {
@@ -112,6 +114,10 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
mBraveShieldsMenuHandler.updateValues(tabId);
}
};
// Initially disabled. Shields button state will be updated when tab is
// shown and loading state is changed.
// Otherwise, button can be clicked when displayed tab is not ready.
disableBraveShieldsButton();
}
@Override
@@ -123,14 +129,25 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
@Override
public void setTabModelSelector(TabModelSelector selector) {
mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(selector) {
@Override
public void onShown(Tab tab, @TabSelectionType int type) {
try {
// Update shields button state when visible tab is changed.
URL url = new URL(tab.getUrl());
updateBraveShieldsButtonState(tab.getProfile(), url.toString());
} catch (Exception e) {
disableBraveShieldsButton();
}
}
@Override
public void onPageLoadStarted(Tab tab, String url) {
if (mMainActivity.getActivityTab() == tab) {
try {
URL urlCheck = new URL(url);
setBraveShieldsColor(tab.getProfile(), urlCheck.toString());
updateBraveShieldsButtonState(tab.getProfile(), urlCheck.toString());
} catch (Exception e) {
setBraveShieldsBlackAndWhite();
disableBraveShieldsButton();
}
}
mBraveShieldsMenuHandler.clearBraveShieldsCount(tab.getId());
@@ -142,9 +159,9 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
try {
URL urlCheck = new URL(url);
mBraveShieldsMenuHandler.updateHost(urlCheck.toString());
setBraveShieldsColor(tab.getProfile(), urlCheck.toString());
updateBraveShieldsButtonState(tab.getProfile(), urlCheck.toString());
} catch (Exception e) {
setBraveShieldsBlackAndWhite();
disableBraveShieldsButton();
}
}
}
@@ -174,23 +191,25 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
}
try {
URL url = new URL(currentTab.getUrl());
setBraveShieldsColor(currentTab.getProfile(), url.toString());
updateBraveShieldsButtonState(currentTab.getProfile(), url.toString());
mBraveShieldsMenuHandler.show(mBraveShieldsButton, url.toString(),
url.getHost(), currentTab.getId(), currentTab.getProfile());
} catch (Exception e) {
setBraveShieldsBlackAndWhite();
disableBraveShieldsButton();
}
}
}
private void setBraveShieldsBlackAndWhite() {
private void disableBraveShieldsButton() {
if (null != mBraveShieldsButton) {
mBraveShieldsButton.setEnabled(false);
mBraveShieldsButton.setImageResource(R.drawable.btn_brave_off);
}
}
protected void setBraveShieldsColored() {
protected void enableBraveShieldsButton() {
if (null != mBraveShieldsButton) {
mBraveShieldsButton.setEnabled(true);
mBraveShieldsButton.setImageResource(R.drawable.btn_brave);
}
}
@@ -210,8 +229,8 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
return AccessibilityUtil.showAccessibilityToast(context, v, description);
}
public void populateUrlAnimatorSet(boolean hasFocus, int urlFocusToolbarButtonsDuration,
int urlClearFocusTabStackDelayMs, int urlFocusToolbarButtonsTranslationXDP,
public void populateUrlAnimatorSet(boolean hasFocus, int urlFocusToolbarButtonsDuration,
int urlClearFocusTabStackDelayMs, int urlFocusToolbarButtonsTranslationXDP,
List<Animator> animators) {
if (mBraveShieldsButton != null) {
Animator animator;
@@ -266,12 +285,12 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
params.getMarginEnd();
}
private void setBraveShieldsColor(Profile profile, String url) {
private void updateBraveShieldsButtonState(Profile profile, String url) {
if (BraveShieldsContentSettings.getShields(profile, url, BraveShieldsContentSettings.RESOURCE_IDENTIFIER_BRAVE_SHIELDS)) {
// Set Brave Shields button in color if we have a valid URL
setBraveShieldsColored();
enableBraveShieldsButton();
} else {
setBraveShieldsBlackAndWhite();
disableBraveShieldsButton();
}
}
}