[Android] Add method to extend touch area without changing View appearances
This commit is contained in:
@@ -442,11 +442,13 @@ brave_java_sources = [
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/BraveDbUtil.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/BraveDynamicColors.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/BraveReferrer.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/BraveTouchUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/ConfigurationUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/ImageUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/LiveDataUtil.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/PackageUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/TabUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/TouchDelegateComposite.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/util/Triple.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/vpn/BraveVpnNativeWorker.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/vpn/BraveVpnObserver.java",
|
||||
|
||||
@@ -73,6 +73,7 @@ import org.chromium.chrome.browser.local_database.DisplayAdsTable;
|
||||
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.rate.BraveRateDialogFragment;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.ConfigurationUtils;
|
||||
import org.chromium.chrome.browser.util.TabUtils;
|
||||
import org.chromium.url.mojom.Url;
|
||||
@@ -374,6 +375,7 @@ public class CardBuilderFeedCard {
|
||||
int displayHeight = mActivity.getResources().getDisplayMetrics().heightPixels;
|
||||
TableRow rowTop = new TableRow(mActivity);
|
||||
TextView topText = new TextView(mActivity);
|
||||
BraveTouchUtils.ensureMinTouchTarget(topText);
|
||||
|
||||
TableRow row1 = new TableRow(mActivity);
|
||||
TableRow row2 = new TableRow(mActivity);
|
||||
|
||||
+25
-12
@@ -38,6 +38,7 @@ import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.local_database.DatabaseHelper;
|
||||
import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder;
|
||||
import org.chromium.chrome.browser.notifications.BravePermissionUtils;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.ui.base.DeviceFormFactor;
|
||||
import org.chromium.ui.permissions.PermissionConstants;
|
||||
|
||||
@@ -68,8 +69,11 @@ public class BraveStatsBottomSheetDialogFragment extends BottomSheetDialogFragme
|
||||
private LinearLayout websitesLayout;
|
||||
private LinearLayout trackersLayout;
|
||||
|
||||
private RadioButton monthRadioButton;
|
||||
private RadioButton monthsRadioButton;
|
||||
private RadioButton mWeekRadioButton;
|
||||
private RadioButton mMonthRadioButton;
|
||||
private RadioButton mMonthsRadioButton;
|
||||
private RadioButton mTrackersRadioButton;
|
||||
private RadioButton mWebsitesRadioButton;
|
||||
private View statsNotificationView;
|
||||
|
||||
private int selectedType = WEBSITES;
|
||||
@@ -128,8 +132,11 @@ public class BraveStatsBottomSheetDialogFragment extends BottomSheetDialogFragme
|
||||
}
|
||||
});
|
||||
|
||||
monthRadioButton = view.findViewById(R.id.month_radio);
|
||||
monthsRadioButton = view.findViewById(R.id.months_radio);
|
||||
mWeekRadioButton = view.findViewById(R.id.week_radio);
|
||||
mMonthRadioButton = view.findViewById(R.id.month_radio);
|
||||
mMonthsRadioButton = view.findViewById(R.id.months_radio);
|
||||
mTrackersRadioButton = view.findViewById(R.id.trackers_radio);
|
||||
mWebsitesRadioButton = view.findViewById(R.id.websites_radio);
|
||||
|
||||
LinearLayout layout = view.findViewById(R.id.brave_stats_layout);
|
||||
adsTrackersCountText = layout.findViewById(R.id.ads_trackers_count_text);
|
||||
@@ -143,6 +150,12 @@ public class BraveStatsBottomSheetDialogFragment extends BottomSheetDialogFragme
|
||||
braveStatsSubSectionText = layout.findViewById(R.id.brave_stats_sub_section_text);
|
||||
statsNotificationView = view.findViewById(R.id.brave_stats_notification_permission);
|
||||
|
||||
BraveTouchUtils.ensureMinTouchTarget(mWeekRadioButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mMonthRadioButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mMonthsRadioButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mTrackersRadioButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mWebsitesRadioButton);
|
||||
|
||||
RadioGroup statTypeRadioGroup = layout.findViewById(R.id.stat_type_radio_group);
|
||||
statTypeRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
|
||||
@Override
|
||||
@@ -297,20 +310,20 @@ public class BraveStatsBottomSheetDialogFragment extends BottomSheetDialogFragme
|
||||
|
||||
// Check for month option
|
||||
if (adsTrackersCountToCheckForMonth > 0) {
|
||||
monthRadioButton.setEnabled(true);
|
||||
monthRadioButton.setAlpha(1.0f);
|
||||
mMonthRadioButton.setEnabled(true);
|
||||
mMonthRadioButton.setAlpha(1.0f);
|
||||
} else {
|
||||
monthRadioButton.setEnabled(false);
|
||||
monthRadioButton.setAlpha(0.2f);
|
||||
mMonthRadioButton.setEnabled(false);
|
||||
mMonthRadioButton.setAlpha(0.2f);
|
||||
}
|
||||
|
||||
// Check for 3 month option
|
||||
if (adsTrackersCountToCheckFor3Month > 0) {
|
||||
monthsRadioButton.setEnabled(true);
|
||||
monthsRadioButton.setAlpha(1.0f);
|
||||
mMonthsRadioButton.setEnabled(true);
|
||||
mMonthsRadioButton.setAlpha(1.0f);
|
||||
} else {
|
||||
monthsRadioButton.setEnabled(false);
|
||||
monthsRadioButton.setAlpha(0.2f);
|
||||
mMonthsRadioButton.setEnabled(false);
|
||||
mMonthsRadioButton.setAlpha(0.2f);
|
||||
}
|
||||
showWebsitesTrackers();
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
|
||||
import org.chromium.chrome.browser.set_default_browser.BraveSetDefaultBrowserUtils;
|
||||
import org.chromium.chrome.browser.util.BraveConstants;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.PackageUtils;
|
||||
import org.chromium.ui.base.DeviceFormFactor;
|
||||
|
||||
@@ -185,6 +186,16 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase {
|
||||
bottomLeafParams.topMargin = margin;
|
||||
mVLeafAlignBottom.setLayoutParams(bottomLeafParams);
|
||||
}
|
||||
|
||||
if (mBtnPositive != null) {
|
||||
BraveTouchUtils.ensureMinTouchTarget(mBtnPositive);
|
||||
}
|
||||
if (mCheckboxCrash != null) {
|
||||
BraveTouchUtils.ensureMinTouchTarget(mCheckboxCrash);
|
||||
}
|
||||
if (mCheckboxP3a != null) {
|
||||
BraveTouchUtils.ensureMinTouchTarget(mCheckboxP3a);
|
||||
}
|
||||
}
|
||||
|
||||
private void onClickViews() {
|
||||
|
||||
@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.profiles.Profile;
|
||||
import org.chromium.chrome.browser.settings.BackgroundImagesPreferences;
|
||||
import org.chromium.chrome.browser.util.BraveConstants;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.TabUtils;
|
||||
import org.chromium.components.user_prefs.UserPrefs;
|
||||
|
||||
@@ -605,6 +606,7 @@ public class BraveNtpAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
(TextView) itemView.findViewById(R.id.brave_stats_text_time_count);
|
||||
this.estTimeSavedCountTextTv =
|
||||
(TextView) itemView.findViewById(R.id.brave_stats_text_time_count_text);
|
||||
BraveTouchUtils.ensureMinTouchTarget(this.hideStatsImg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -644,6 +646,7 @@ public class BraveNtpAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
(FloatingActionButton) itemView.findViewById(R.id.super_referral_logo);
|
||||
this.creditTv = (TextView) itemView.findViewById(R.id.credit_text);
|
||||
this.sponsoredLogo = (ImageView) itemView.findViewById(R.id.sponsored_logo);
|
||||
BraveTouchUtils.ensureMinTouchTarget(this.creditTv);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -661,6 +664,8 @@ public class BraveNtpAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
optinLearnMore = (TextView) itemView.findViewById(R.id.optin_learnmore);
|
||||
optinTv = (TextView) itemView.findViewById(R.id.optin_button_text);
|
||||
optinLoadingSpinner = (ProgressBar) itemView.findViewById(R.id.optin_loading_spinner);
|
||||
BraveTouchUtils.ensureMinTouchTarget(optinButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(optinLearnMore);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.qrreader.BarcodeTracker;
|
||||
import org.chromium.chrome.browser.qrreader.BarcodeTrackerFactory;
|
||||
import org.chromium.chrome.browser.qrreader.CameraSource;
|
||||
import org.chromium.chrome.browser.qrreader.CameraSourcePreview;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -80,6 +81,9 @@ public class BraveLocationBarQRDialogFragment
|
||||
|
||||
mCameraSourcePreview = (CameraSourcePreview) view.findViewById(R.id.preview);
|
||||
createCameraSource(true, false);
|
||||
|
||||
BraveTouchUtils.ensureMinTouchTarget(backImageView);
|
||||
|
||||
try {
|
||||
startCameraSource();
|
||||
} catch (SecurityException exc) {
|
||||
|
||||
+3
@@ -27,6 +27,7 @@ import androidx.fragment.app.Fragment;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.BraveRewardsHelper;
|
||||
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
|
||||
public class BraveRewardsOnboardingFragment extends Fragment {
|
||||
private OnViewPagerAction onViewPagerAction;
|
||||
@@ -70,6 +71,8 @@ public class BraveRewardsOnboardingFragment extends Fragment {
|
||||
|
||||
btnSkip = root.findViewById(R.id.btn_skip);
|
||||
btnNext = root.findViewById(R.id.btn_next);
|
||||
|
||||
BraveTouchUtils.ensureMinTouchTarget(btnSkip);
|
||||
}
|
||||
|
||||
private void setActions() {
|
||||
|
||||
@@ -78,6 +78,7 @@ import org.chromium.chrome.browser.rewards.onboarding.RewardsOnboarding;
|
||||
import org.chromium.chrome.browser.rewards.tipping.RewardsTippingBannerActivity;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.chrome.browser.util.BraveConstants;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.ConfigurationUtils;
|
||||
import org.chromium.chrome.browser.util.PackageUtils;
|
||||
import org.chromium.chrome.browser.util.TabUtils;
|
||||
@@ -364,6 +365,7 @@ public class BraveRewardsPanel
|
||||
mPopupWindow.setContentView(mPopupView);
|
||||
|
||||
mWalletBalanceProgress = mPopupView.findViewById(R.id.wallet_progress_bar_group);
|
||||
adjustTouchTargets();
|
||||
}
|
||||
|
||||
// Rewards main layout changes
|
||||
@@ -1026,13 +1028,14 @@ public class BraveRewardsPanel
|
||||
&& !PackageUtils.isFirstInstall(mActivity)) {
|
||||
mPopupView.findViewById(R.id.estimated_earnings_range_group).setVisibility(View.GONE);
|
||||
mPopupView.findViewById(R.id.estimated_not_connected_group).setVisibility(View.VISIBLE);
|
||||
mPopupView.findViewById(R.id.bat_ads_balance_learn_more_text)
|
||||
.setOnClickListener((new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
CustomTabActivity.showInfoPage(mActivity, BRAVE_REWARDS_CHANGES_PAGE);
|
||||
}
|
||||
}));
|
||||
TextView batAdsBalanceLearnMoreText =
|
||||
mPopupView.findViewById(R.id.bat_ads_balance_learn_more_text);
|
||||
batAdsBalanceLearnMoreText.setOnClickListener((new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
CustomTabActivity.showInfoPage(mActivity, BRAVE_REWARDS_CHANGES_PAGE);
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
TextView estimatedRange = mPopupView.findViewById(R.id.estimated_range);
|
||||
String minValue = BraveRewardsHelper.getFormattedAmount(minEarningsThisMonth);
|
||||
@@ -1393,6 +1396,7 @@ public class BraveRewardsPanel
|
||||
CustomTabActivity.showInfoPage(mActivity, BRAVE_REWARDS_PAGE);
|
||||
}
|
||||
}));
|
||||
BraveTouchUtils.ensureMinTouchTarget(learnMoreUnverifiedText);
|
||||
|
||||
if (BraveAdsNativeHelper.nativeIsOptedInToNotificationAds(
|
||||
Profile.getLastUsedRegularProfile())) {
|
||||
@@ -1415,6 +1419,7 @@ public class BraveRewardsPanel
|
||||
mActivity, UNVERIFIED_USER_UNSUPPORTED_REGION_PAGE);
|
||||
}
|
||||
}));
|
||||
BraveTouchUtils.ensureMinTouchTarget(rewardsPanelUnverifiedOnSectionLearnMoreText);
|
||||
if (mBraveRewardsNativeWorker.canConnectAccount()) {
|
||||
String sectionText = "<b>"
|
||||
+ mPopupView.getResources().getString(R.string.ready_to_start_earning_text)
|
||||
@@ -1473,8 +1478,9 @@ public class BraveRewardsPanel
|
||||
.setOnClickListener(braveRewardsOnboardingClickListener);
|
||||
mBraveRewardsOnboardingView.findViewById(R.id.btn_skip)
|
||||
.setOnClickListener(braveRewardsOnboardingClickListener);
|
||||
mBraveRewardsOnboardingView.findViewById(R.id.btn_start_quick_tour)
|
||||
.setOnClickListener(braveRewardsOnboardingClickListener);
|
||||
final View startQuickTourButton =
|
||||
(View) mBraveRewardsOnboardingView.findViewById(R.id.btn_start_quick_tour);
|
||||
startQuickTourButton.setOnClickListener(braveRewardsOnboardingClickListener);
|
||||
|
||||
mBraveRewardsViewPager =
|
||||
mBraveRewardsOnboardingView.findViewById(R.id.brave_rewards_view_pager);
|
||||
@@ -1517,6 +1523,17 @@ public class BraveRewardsPanel
|
||||
TabLayout braveRewardsTabLayout =
|
||||
mBraveRewardsOnboardingView.findViewById(R.id.brave_rewards_tab_layout);
|
||||
braveRewardsTabLayout.setupWithViewPager(mBraveRewardsViewPager, true);
|
||||
|
||||
// Try to get the tab view. Not officially supported so wrap in try..catch
|
||||
try {
|
||||
LinearLayout tabs = (LinearLayout) braveRewardsTabLayout.getChildAt(0);
|
||||
for (int i = 0; i < tabs.getChildCount(); ++i) {
|
||||
BraveTouchUtils.ensureMinTouchTarget(tabs.getChildAt(i));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to enlarge touch target on tab:", e);
|
||||
}
|
||||
|
||||
AppCompatImageView modalCloseButton = mBraveRewardsOnboardingView.findViewById(
|
||||
R.id.brave_rewards_onboarding_layout_modal_close);
|
||||
modalCloseButton.setOnClickListener((new View.OnClickListener() {
|
||||
@@ -1531,6 +1548,9 @@ public class BraveRewardsPanel
|
||||
.setVisibility(View.VISIBLE);
|
||||
mBraveRewardsOnboardingView.findViewById(R.id.onboarding_action_layout)
|
||||
.setVisibility(View.GONE);
|
||||
|
||||
BraveTouchUtils.ensureMinTouchTarget(modalCloseButton);
|
||||
BraveTouchUtils.ensureMinTouchTarget(startQuickTourButton);
|
||||
}
|
||||
|
||||
private void panelShadow(boolean isEnable) {
|
||||
@@ -2206,4 +2226,11 @@ public class BraveRewardsPanel
|
||||
return R.drawable.ic_logo_zebpay_white;
|
||||
}
|
||||
}
|
||||
|
||||
private void adjustTouchTargets() {
|
||||
BraveTouchUtils.ensureMinTouchTarget(mPopupView.findViewById(R.id.estimated_earnings));
|
||||
BraveTouchUtils.ensureMinTouchTarget(
|
||||
mPopupView.findViewById(R.id.bat_ads_balance_learn_more_text));
|
||||
BraveTouchUtils.ensureMinTouchTarget(mPopupView.findViewById(R.id.btn_verify_wallet));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivity;
|
||||
import org.chromium.chrome.browser.notifications.BraveNotificationWarningDialog;
|
||||
import org.chromium.chrome.browser.notifications.BravePermissionUtils;
|
||||
import org.chromium.chrome.browser.rewards.BraveRewardsPanel;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.TabUtils;
|
||||
import org.chromium.ui.permissions.PermissionConstants;
|
||||
import org.chromium.ui.text.NoUnderlineClickableSpan;
|
||||
@@ -54,6 +55,7 @@ public class RewardsOnboarding implements BraveRewardsObserver {
|
||||
private ViewGroup mAllSetLayout;
|
||||
private ViewGroup mErrorLayout;
|
||||
|
||||
private Spinner mCountrySpinner;
|
||||
private TextView mContinueButton;
|
||||
|
||||
private BraveRewardsNativeWorker mBraveRewardsNativeWorker;
|
||||
@@ -96,6 +98,9 @@ public class RewardsOnboarding implements BraveRewardsObserver {
|
||||
View howDoseItWorkMainButton = mMainLayout.findViewById(R.id.how_does_it_work_main);
|
||||
howDoseItWorkMainButton.setOnClickListener(v -> { showRewardsTour(); });
|
||||
|
||||
mCountrySpinner = mPopupView.findViewById(R.id.country_spinner);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mCountrySpinner);
|
||||
|
||||
String termsOfServiceText = String.format(
|
||||
mPopupView.getContext().getString(R.string.brave_rewards_onboarding_tos_text),
|
||||
mPopupView.getContext().getString(R.string.terms_of_service),
|
||||
@@ -186,13 +191,11 @@ public class RewardsOnboarding implements BraveRewardsObserver {
|
||||
}
|
||||
|
||||
String[] countryArray = countryList.toArray(new String[countryList.size()]);
|
||||
Spinner countrySpinner;
|
||||
countrySpinner = mPopupView.findViewById(R.id.country_spinner);
|
||||
|
||||
CountrySelectionSpinnerAdapter countrySelectionSpinnerAdapter =
|
||||
new CountrySelectionSpinnerAdapter(mActivity, countryList);
|
||||
countrySpinner.setAdapter(countrySelectionSpinnerAdapter);
|
||||
countrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
mCountrySpinner.setAdapter(countrySelectionSpinnerAdapter);
|
||||
mCountrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
|
||||
mContinueButton.setEnabled(pos != 0);
|
||||
@@ -210,9 +213,9 @@ public class RewardsOnboarding implements BraveRewardsObserver {
|
||||
mAnchorView.getContext())) {
|
||||
requestNotificationPermission();
|
||||
}
|
||||
if (countrySpinner != null) {
|
||||
if (mCountrySpinner != null) {
|
||||
mBraveRewardsNativeWorker.CreateRewardsWallet(
|
||||
sortedCountryMap.get(countrySpinner.getSelectedItem().toString()));
|
||||
sortedCountryMap.get(mCountrySpinner.getSelectedItem().toString()));
|
||||
shouldShowContinueProgress(true);
|
||||
mContinueButton.setText("");
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder
|
||||
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
|
||||
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.util.BraveConstants;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.components.browser_ui.settings.FragmentSettingsLauncher;
|
||||
import org.chromium.components.browser_ui.settings.SettingsLauncher;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
@@ -106,6 +107,13 @@ public class BraveNewsPreferencesV2 extends BravePreferenceFragment
|
||||
mLayoutChannels = (View) view.findViewById(R.id.layout_channels);
|
||||
mLayoutFollowing = (View) view.findViewById(R.id.layout_following);
|
||||
|
||||
BraveTouchUtils.ensureMinTouchTarget(mBtnTurnOnNews);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mLayoutChannels);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mLayoutFollowing);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mLayoutPopularSources);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mLayoutSuggestions);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mTvSearch);
|
||||
|
||||
setData();
|
||||
onClickViews();
|
||||
}
|
||||
|
||||
+2
@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.toolbar.menu_button.BraveMenuButtonCoordinato
|
||||
import org.chromium.chrome.browser.toolbar.menu_button.MenuButton;
|
||||
import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonState;
|
||||
import org.chromium.chrome.browser.ui.appmenu.AppMenuButtonHelper;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
|
||||
|
||||
/**
|
||||
@@ -98,6 +99,7 @@ public class BrowsingModeBottomToolbarCoordinator {
|
||||
|
||||
mSearchAccelerator = mToolbarRoot.findViewById(R.id.search_accelerator);
|
||||
mSearchAccelerator.setOnClickListener(searchAcceleratorListener);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mSearchAccelerator);
|
||||
|
||||
// TODO(amaralp): Make this adhere to MVC framework.
|
||||
mTabSwitcherButtonView = mToolbarRoot.findViewById(R.id.bottom_tab_switcher_button);
|
||||
|
||||
@@ -126,6 +126,7 @@ import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator;
|
||||
import org.chromium.chrome.browser.toolbar.top.NavigationPopup.HistoryDelegate;
|
||||
import org.chromium.chrome.browser.toolbar.top.ToolbarTablet.OfflineDownloader;
|
||||
import org.chromium.chrome.browser.util.BraveConstants;
|
||||
import org.chromium.chrome.browser.util.BraveTouchUtils;
|
||||
import org.chromium.chrome.browser.util.ConfigurationUtils;
|
||||
import org.chromium.chrome.browser.util.PackageUtils;
|
||||
import org.chromium.chrome.browser.widget.quickactionsearchandbookmark.promo.SearchWidgetPromoPanel;
|
||||
@@ -288,18 +289,21 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
mBraveShieldsButton.setClickable(true);
|
||||
mBraveShieldsButton.setOnClickListener(this);
|
||||
mBraveShieldsButton.setOnLongClickListener(this);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mBraveShieldsButton);
|
||||
}
|
||||
|
||||
if (mBraveRewardsButton != null) {
|
||||
mBraveRewardsButton.setClickable(true);
|
||||
mBraveRewardsButton.setOnClickListener(this);
|
||||
mBraveRewardsButton.setOnLongClickListener(this);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mBraveRewardsButton);
|
||||
}
|
||||
|
||||
if (mBraveWalletButton != null) {
|
||||
mBraveWalletButton.setClickable(true);
|
||||
mBraveWalletButton.setOnClickListener(this);
|
||||
mBraveWalletButton.setOnLongClickListener(this);
|
||||
BraveTouchUtils.ensureMinTouchTarget(mBraveWalletButton);
|
||||
}
|
||||
|
||||
mBraveShieldsHandler = new BraveShieldsHandler(getContext());
|
||||
@@ -1102,6 +1106,7 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
R.id.brave_rewards_onboarding_modal_tos_pp_text);
|
||||
tosAndPpText.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
tosAndPpText.setText(tosTextSS);
|
||||
BraveTouchUtils.ensureMinTouchTarget(tosAndPpText);
|
||||
|
||||
TextView takeQuickTourButton =
|
||||
braveRewardsOnboardingModalView.findViewById(R.id.take_quick_tour_button);
|
||||
@@ -1113,6 +1118,7 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout
|
||||
dialog.dismiss();
|
||||
}
|
||||
}));
|
||||
BraveTouchUtils.ensureMinTouchTarget(takeQuickTourButton);
|
||||
TextView btnBraveRewards =
|
||||
braveRewardsOnboardingModalView.findViewById(R.id.start_using_brave_rewards_text);
|
||||
btnBraveRewards.setOnClickListener((new View.OnClickListener() {
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.util;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.TouchDelegate;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
||||
|
||||
public class BraveTouchUtils {
|
||||
public static final int MIN_TOUCH_TARGET = 48;
|
||||
|
||||
/**
|
||||
* Ensures that the touchable area of [view] equal MIN_TOUCH_TARGET.
|
||||
*/
|
||||
public static void ensureMinTouchTarget(View view) {
|
||||
ensureMinTouchTarget(view, MIN_TOUCH_TARGET);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the touchable area of [view] equal [minTarget] by expanding the touch area
|
||||
* of a view beyond its actual view bounds.
|
||||
*
|
||||
* This function was taken from Trackr Android App (https://github.com/android/trackr)
|
||||
* and adapted to Java. minTarget is in dp instead of px.
|
||||
*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
public static void ensureMinTouchTarget(View view, int minTarget) {
|
||||
View parent = (View) view.getParent();
|
||||
if (parent != null) {
|
||||
parent.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
if (view.isShown()) {
|
||||
final Rect bounds = new Rect();
|
||||
view.getHitRect(bounds);
|
||||
|
||||
DisplayMetrics metrics =
|
||||
view.getContext().getResources().getDisplayMetrics();
|
||||
int height = (int) Math.round(bounds.height() / metrics.density);
|
||||
int width = (int) Math.round(bounds.width() / metrics.density);
|
||||
|
||||
int extraSpaceStart = 0;
|
||||
int extraSpaceEnd = 0;
|
||||
if (height < minTarget) {
|
||||
extraSpaceStart = (int) Math.floor((minTarget - height) / 2f);
|
||||
extraSpaceEnd = minTarget - height - extraSpaceStart;
|
||||
extraSpaceStart = (int) Math.ceil(extraSpaceStart * metrics.density);
|
||||
extraSpaceEnd = (int) Math.ceil(extraSpaceEnd * metrics.density);
|
||||
bounds.top -= extraSpaceStart;
|
||||
bounds.bottom += extraSpaceEnd;
|
||||
}
|
||||
|
||||
if (width < minTarget) {
|
||||
extraSpaceStart = (int) Math.floor((minTarget - width) / 2f);
|
||||
extraSpaceEnd = minTarget - width - extraSpaceStart;
|
||||
extraSpaceStart = (int) Math.ceil(extraSpaceStart * metrics.density);
|
||||
extraSpaceEnd = (int) Math.ceil(extraSpaceEnd * metrics.density);
|
||||
bounds.left -= extraSpaceStart;
|
||||
bounds.right += extraSpaceEnd;
|
||||
}
|
||||
|
||||
ensureTouchDelegateComposite(parent, view);
|
||||
((TouchDelegateComposite) parent.getTouchDelegate())
|
||||
.addDelegate(bounds, view);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static void ensureTouchDelegateComposite(View parent, View view) {
|
||||
TouchDelegate parentTouchDelegate = parent.getTouchDelegate();
|
||||
if (parentTouchDelegate == null) {
|
||||
parent.setTouchDelegate(new TouchDelegateComposite(new Rect(), view));
|
||||
} else if (!(parentTouchDelegate instanceof TouchDelegateComposite)) {
|
||||
TouchDelegateComposite touchDelegateComposite =
|
||||
new TouchDelegateComposite(new Rect(), view);
|
||||
touchDelegateComposite.addDelegate(parentTouchDelegate);
|
||||
parent.setTouchDelegate(touchDelegateComposite);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Name: Trackr Android App
|
||||
URL: https://github.com/android/trackr/
|
||||
License: Apache-2.0
|
||||
License File: /brave/common/licenses/Apache-2.0
|
||||
@@ -0,0 +1,80 @@
|
||||
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.util;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
import android.os.Build;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Pair;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.TouchDelegate;
|
||||
import android.view.View;
|
||||
import android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* A class holding multiple TouchDelegates to ensure touch events are dispatched correctly from
|
||||
* parent to all children.
|
||||
*/
|
||||
public class TouchDelegateComposite extends TouchDelegate {
|
||||
private List<Pair<View, Pair<Rect, TouchDelegate>>> mDelegates = new ArrayList<>(4);
|
||||
|
||||
public TouchDelegateComposite(Rect bounds, View view) {
|
||||
super(bounds, view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a pre-existing TouchDelegate. Cannot get bounds and view from existing delegate.
|
||||
*/
|
||||
public void addDelegate(TouchDelegate delegate) {
|
||||
mDelegates.add(new Pair<>(null, new Pair<>(new Rect(), delegate)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a delegate by bounds and view.
|
||||
*/
|
||||
public void addDelegate(Rect bounds, View view) {
|
||||
boolean dup = false;
|
||||
mDelegates = mDelegates.stream()
|
||||
.filter(e -> e.first == null || e.first.getId() != view.getId())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
mDelegates.add(new Pair<>(view, new Pair<>(bounds, new TouchDelegate(bounds, view))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
boolean handled = false;
|
||||
float x = event.getX();
|
||||
float y = event.getY();
|
||||
for (Pair<View, Pair<Rect, TouchDelegate>> delegate : mDelegates) {
|
||||
event.setLocation(x, y);
|
||||
handled = delegate.second.second.onTouchEvent(event) || handled;
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TouchDelegateInfo getTouchDelegateInfo() {
|
||||
final ArrayMap<Region, View> targetMap = new ArrayMap<>();
|
||||
for (Pair<View, Pair<Rect, TouchDelegate>> delegate : mDelegates) {
|
||||
if (delegate.first == null) continue;
|
||||
Rect bounds = delegate.second.first;
|
||||
if (bounds == null) {
|
||||
bounds = new Rect();
|
||||
}
|
||||
targetMap.put(new Region(bounds), delegate.first);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
return new TouchDelegateInfo(targetMap);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -170,6 +170,8 @@ def AddBraveCredits(root, prune_paths, special_cases, prune_dirs,
|
||||
os.path.join('brave', 'browser', 'brave_vpn', 'win',
|
||||
'brave_vpn_wireguard_service'),
|
||||
os.path.join('brave', 'components', 'filecoin'),
|
||||
os.path.join('brave', 'android', 'java', 'org', 'chromium', 'chrome',
|
||||
'browser', 'util'),
|
||||
]
|
||||
|
||||
# Add all Android libraries since they're not directly contained
|
||||
|
||||
Reference in New Issue
Block a user