diff --git a/android/java/org/chromium/base/BraveReflectionUtil.java b/android/java/org/chromium/base/BraveReflectionUtil.java index 44f94784a71..0e92104e833 100644 --- a/android/java/org/chromium/base/BraveReflectionUtil.java +++ b/android/java/org/chromium/base/BraveReflectionUtil.java @@ -21,7 +21,7 @@ public class BraveReflectionUtil { // checking parameter types. @Nullable public static Object invokeMethod( - Class methodOwner, @Nullable Object obj, String method, Object... typesAndArgs) { + Class methodOwner, @Nullable Object obj, String method, Object... typesAndArgs) { try { Class[] parameterTypes = null; Object[] args = null; diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index 6205323ebd4..c9b7a67ec09 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -866,7 +866,7 @@ public abstract class BraveActivity extends ChromeActivity } private void verifySubscription() { - MutableLiveData _activePurchases = new MutableLiveData(); + MutableLiveData _activePurchases = new MutableLiveData<>(); LiveData activePurchases = _activePurchases; InAppPurchaseWrapper.getInstance() .queryPurchases(_activePurchases, InAppPurchaseWrapper.SubscriptionProduct.VPN); diff --git a/android/java/org/chromium/chrome/browser/billing/InAppPurchaseWrapper.java b/android/java/org/chromium/chrome/browser/billing/InAppPurchaseWrapper.java index 8cdd970510f..31f175089b2 100644 --- a/android/java/org/chromium/chrome/browser/billing/InAppPurchaseWrapper.java +++ b/android/java/org/chromium/chrome/browser/billing/InAppPurchaseWrapper.java @@ -102,17 +102,17 @@ public class InAppPurchaseWrapper { // VPN monthly subscription product details private final MutableLiveData mMutableMonthlyProductDetailsVPN = - new MutableLiveData(); + new MutableLiveData<>(); private final LiveData mMonthlyProductDetailsVPN = mMutableMonthlyProductDetailsVPN; // Leo monthly subscription product details private final MutableLiveData mMutableMonthlyProductDetailsLeo = - new MutableLiveData(); + new MutableLiveData<>(); private final LiveData mMonthlyProductDetailsLeo = mMutableMonthlyProductDetailsLeo; // Origin one-time purchase product details private final MutableLiveData mMutableOriginProductDetails = - new MutableLiveData(); + new MutableLiveData<>(); private final LiveData mOriginProductDetails = mMutableOriginProductDetails; /** @@ -155,12 +155,12 @@ public class InAppPurchaseWrapper { // VPN yearly subscription product details private final MutableLiveData mMutableYearlyProductDetailsVPN = - new MutableLiveData(); + new MutableLiveData<>(); private final LiveData mYearlyProductDetailsVPN = mMutableYearlyProductDetailsVPN; // Leo yearly subscription product details private final MutableLiveData mMutableYearlyProductDetailsLeo = - new MutableLiveData(); + new MutableLiveData<>(); private final LiveData mYearlyProductDetailsLeo = mMutableYearlyProductDetailsLeo; @@ -304,7 +304,7 @@ public class InAppPurchaseWrapper { QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(products).build(); - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -341,7 +341,7 @@ public class InAppPurchaseWrapper { * Play. This is intended for QA/testing use only via Developer Options. */ public void consumeExistingOriginPurchase() { - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -398,7 +398,7 @@ public class InAppPurchaseWrapper { QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(products).build(); - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -445,7 +445,7 @@ public class InAppPurchaseWrapper { type.equals(SubscriptionProduct.ORIGIN) ? BillingClient.ProductType.INAPP : BillingClient.ProductType.SUBS; - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -523,7 +523,7 @@ public class InAppPurchaseWrapper { BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -567,7 +567,7 @@ public class InAppPurchaseWrapper { BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( @@ -601,7 +601,7 @@ public class InAppPurchaseWrapper { boolean isLeoProduct = isLeoProduct(productIds); boolean isOriginProduct = isOriginProduct(productIds); if (!purchase.isAcknowledged()) { - MutableLiveData _billingConnectionState = new MutableLiveData(); + MutableLiveData _billingConnectionState = new MutableLiveData<>(); LiveData billingConnectionState = _billingConnectionState; startBillingServiceConnection(_billingConnectionState); LiveDataUtil.observeOnce( diff --git a/android/java/org/chromium/chrome/browser/brave_leo/BraveLeoUtils.java b/android/java/org/chromium/chrome/browser/brave_leo/BraveLeoUtils.java index 8c0e7c450a7..08e2e153e5a 100644 --- a/android/java/org/chromium/chrome/browser/brave_leo/BraveLeoUtils.java +++ b/android/java/org/chromium/chrome/browser/brave_leo/BraveLeoUtils.java @@ -29,8 +29,8 @@ import org.chromium.content_public.browser.WebContents; public class BraveLeoUtils { private static final String TAG = "BraveLeoUtils"; - public static void verifySubscription(Callback callback) { - MutableLiveData _activePurchases = new MutableLiveData(); + public static void verifySubscription(Callback callback) { + MutableLiveData _activePurchases = new MutableLiveData<>(); LiveData activePurchases = _activePurchases; InAppPurchaseWrapper.getInstance() .queryPurchases(_activePurchases, InAppPurchaseWrapper.SubscriptionProduct.LEO); diff --git a/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java b/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java index 6c2d54aa0f3..6f648bbe71d 100644 --- a/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java +++ b/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java @@ -1128,6 +1128,10 @@ public class CardBuilderFeedCard { } } + // Glide's RequestOptions#transform(Transformation...) is varargs over a generic + // type; passing two transformations triggers an unchecked generic-array-creation warning + // that is intrinsic to the upstream API and unavoidable from the call site. + @SuppressWarnings("unchecked") private void setImage(ImageView imageView, String type, int index) { List feedItemsCard = mNewsItem.getFeedItems(); if (feedItemsCard != null) { diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java index 53c785399ec..57d28f8e613 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/AndroidUtils.java @@ -128,7 +128,7 @@ public class AndroidUtils { } public static SpannableString createClickableSpanString( - Context context, @StringRes int id, Callback listener) { + Context context, @StringRes int id, Callback listener) { ChromeClickableSpan chromeClickableSpan = new ChromeClickableSpan(context.getColor(R.color.brave_link), listener); SpannableString spannableString = new SpannableString(context.getString(id)); diff --git a/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java b/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java index ee93ec3870d..cbf015b9e80 100644 --- a/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java +++ b/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java @@ -282,8 +282,9 @@ public class PopupWindowTooltip implements PopupWindow.OnDismissListener { public boolean isShowing() { return mPopupWindow != null && mPopupWindow.isShowing(); } + + @SuppressWarnings("unchecked") public T findViewById(int id) { - // noinspection unchecked return (T) mContentLayout.findViewById(id); } diff --git a/android/java/org/chromium/chrome/browser/playlist/PlaylistHostActivity.java b/android/java/org/chromium/chrome/browser/playlist/PlaylistHostActivity.java index afd7b3790df..641a0931c31 100644 --- a/android/java/org/chromium/chrome/browser/playlist/PlaylistHostActivity.java +++ b/android/java/org/chromium/chrome/browser/playlist/PlaylistHostActivity.java @@ -339,7 +339,7 @@ public class PlaylistHostActivity extends AsyncInitializationActivity Log.d(TAG, "loadPlaylist is null from service"); return; } - List playlistItems = new ArrayList(); + List playlistItems = new ArrayList<>(); for (PlaylistItem playlistItem : playlist.items) { PlaylistItemModel playlistItemModel = new PlaylistItemModel( @@ -373,9 +373,9 @@ public class PlaylistHostActivity extends AsyncInitializationActivity } mPlaylistService.getAllPlaylists( playlists -> { - List allPlaylists = new ArrayList(); + List allPlaylists = new ArrayList<>(); for (Playlist playlist : playlists) { - List playlistItems = new ArrayList(); + List playlistItems = new ArrayList<>(); for (PlaylistItem playlistItem : playlist.items) { PlaylistItemModel playlistItemModel = new PlaylistItemModel( diff --git a/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java b/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java index e6dcfc192c4..9adf1feb2dd 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java @@ -291,6 +291,9 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment } /** We need to override it to avoid NullPointerException in Chromium's child classes */ + // mRemovedPreferences stores the erased Preference type, but callers request a typed + // subtype via T, so the (T) cast is unverifiable at compile time. + @SuppressWarnings("unchecked") @Nullable @Override public T findPreference(CharSequence key) { diff --git a/android/java/org/chromium/chrome/browser/shields/ContentFilteringFragment.java b/android/java/org/chromium/chrome/browser/shields/ContentFilteringFragment.java index 248fe01aba7..27ec138481d 100644 --- a/android/java/org/chromium/chrome/browser/shields/ContentFilteringFragment.java +++ b/android/java/org/chromium/chrome/browser/shields/ContentFilteringFragment.java @@ -107,7 +107,7 @@ public class ContentFilteringFragment extends BravePreferenceFragment if (mFilterListAndroidHandler != null) { mFilterListAndroidHandler.getSubscriptions( subscriptions -> { - mSubscriptionFilterLists = new ArrayList(Arrays.asList(subscriptions)); + mSubscriptionFilterLists = new ArrayList<>(Arrays.asList(subscriptions)); mAdapter.setSubscriptionFilterLists(mSubscriptionFilterLists); mIsGetSubscriptionsLoaded = true; if (mIsMenuLoaded) { diff --git a/android/java/org/chromium/chrome/browser/tabbed_mode/BraveTabbedRootUiCoordinator.java b/android/java/org/chromium/chrome/browser/tabbed_mode/BraveTabbedRootUiCoordinator.java index f3de0ddc544..3d399233bce 100644 --- a/android/java/org/chromium/chrome/browser/tabbed_mode/BraveTabbedRootUiCoordinator.java +++ b/android/java/org/chromium/chrome/browser/tabbed_mode/BraveTabbedRootUiCoordinator.java @@ -54,6 +54,7 @@ import org.chromium.chrome.browser.ui.BraveAdaptiveToolbarUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker; import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate; import org.chromium.chrome.browser.ui.bottombar.BottomBarHostManager; +import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.chrome.browser.ui.edge_to_edge.TopInsetProvider; @@ -99,7 +100,7 @@ public class BraveTabbedRootUiCoordinator extends TabbedRootUiCoordinator { BrowserControlsManager browserControlsManager, ActivityWindowAndroid windowAndroid, ActivityResultTracker activityResultTracker, - OneshotSupplier chromeAndroidTaskSupplier, + OneshotSupplier chromeAndroidTaskSupplier, ActivityLifecycleDispatcher activityLifecycleDispatcher, MonotonicObservableSupplier layoutManagerSupplier, MenuOrKeyboardActionController menuOrKeyboardActionController, diff --git a/android/java/org/chromium/chrome/browser/toolbar/BraveToolbarManager.java b/android/java/org/chromium/chrome/browser/toolbar/BraveToolbarManager.java index ddb5e49a5d1..1a7767bfe0b 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/BraveToolbarManager.java +++ b/android/java/org/chromium/chrome/browser/toolbar/BraveToolbarManager.java @@ -380,6 +380,9 @@ public class BraveToolbarManager extends ToolbarManager mUndoBarThrottle, mTabBookmarkerSupplier, mShareDelegateSupplier); + // mTabGroupUiOneshotSupplier is a OneshotSupplier of a concrete subtype, so narrowing + // the wildcard to the bound type is safe in practice but not provable to the compiler. + @SuppressWarnings("unchecked") var bottomControlsContentDelegateSupplier = (OneshotSupplier) ((OneshotSupplier) diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index f508c5ce2b0..76a1f9f52dc 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -822,7 +822,7 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout for (PlaylistItem defaultPlaylistItem : defaultPlaylist.items) { pageSources.add(defaultPlaylistItem.pageSource.url); } - List playlistItems = new ArrayList(); + List playlistItems = new ArrayList<>(); for (PlaylistItem playlistItem : items) { // Check for duplicates in default playlist if (!pageSources.contains(playlistItem.pageSource.url)) { diff --git a/android/java/org/chromium/chrome/browser/vpn/activities/BraveVpnParentActivity.java b/android/java/org/chromium/chrome/browser/vpn/activities/BraveVpnParentActivity.java index b91ec237f73..acfd8e05bf6 100644 --- a/android/java/org/chromium/chrome/browser/vpn/activities/BraveVpnParentActivity.java +++ b/android/java/org/chromium/chrome/browser/vpn/activities/BraveVpnParentActivity.java @@ -104,7 +104,7 @@ public abstract class BraveVpnParentActivity extends AsyncInitializationActivity protected void verifySubscription() { mBraveVpnPrefModel = new BraveVpnPrefModel(); - MutableLiveData _activePurchases = new MutableLiveData(); + MutableLiveData _activePurchases = new MutableLiveData<>(); LiveData activePurchases = _activePurchases; InAppPurchaseWrapper.getInstance() .queryPurchases(_activePurchases, InAppPurchaseWrapper.SubscriptionProduct.VPN); diff --git a/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java b/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java index 1a5eece6c82..0ca5f76ba42 100644 --- a/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java +++ b/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java @@ -363,36 +363,43 @@ public class BraveVpnPreferences extends BravePreferenceFragment implements Brav }; private void verifyPurchase(boolean isVerification) { - MutableLiveData _activePurchases = new MutableLiveData(); + MutableLiveData _activePurchases = new MutableLiveData<>(); LiveData activePurchases = _activePurchases; - InAppPurchaseWrapper.getInstance().queryPurchases( - _activePurchases, InAppPurchaseWrapper.SubscriptionProduct.VPN); - LiveDataUtil.observeOnce(activePurchases, activePurchaseModel -> { - mBraveVpnPrefModel = new BraveVpnPrefModel(); - if (activePurchaseModel != null) { - mBraveVpnPrefModel.setPurchaseToken(activePurchaseModel.getPurchaseToken()); - mBraveVpnPrefModel.setProductId(activePurchaseModel.getProductId()); - if (BraveVpnPrefUtils.isResetConfiguration()) { - BraveVpnUtils.dismissProgressDialog(); - BraveVpnUtils.openBraveVpnProfileActivity(getActivity()); - return; - } - if (!isVerification) { - BraveVpnNativeWorker.getInstance().getSubscriberCredential( - BraveVpnUtils.SUBSCRIPTION_PARAM_TEXT, - mBraveVpnPrefModel.getProductId(), BraveVpnUtils.IAP_ANDROID_PARAM_TEXT, - mBraveVpnPrefModel.getPurchaseToken(), getActivity().getPackageName()); - } else { - BraveVpnNativeWorker.getInstance().verifyPurchaseToken( - mBraveVpnPrefModel.getPurchaseToken(), - mBraveVpnPrefModel.getProductId(), - BraveVpnUtils.SUBSCRIPTION_PARAM_TEXT, getActivity().getPackageName()); - } - } else { - BraveVpnApiResponseUtils.queryPurchaseFailed(getActivity()); - BraveVpnUtils.openBraveVpnPlansActivity(getActivity()); - } - }); + InAppPurchaseWrapper.getInstance() + .queryPurchases(_activePurchases, InAppPurchaseWrapper.SubscriptionProduct.VPN); + LiveDataUtil.observeOnce( + activePurchases, + activePurchaseModel -> { + mBraveVpnPrefModel = new BraveVpnPrefModel(); + if (activePurchaseModel != null) { + mBraveVpnPrefModel.setPurchaseToken(activePurchaseModel.getPurchaseToken()); + mBraveVpnPrefModel.setProductId(activePurchaseModel.getProductId()); + if (BraveVpnPrefUtils.isResetConfiguration()) { + BraveVpnUtils.dismissProgressDialog(); + BraveVpnUtils.openBraveVpnProfileActivity(getActivity()); + return; + } + if (!isVerification) { + BraveVpnNativeWorker.getInstance() + .getSubscriberCredential( + BraveVpnUtils.SUBSCRIPTION_PARAM_TEXT, + mBraveVpnPrefModel.getProductId(), + BraveVpnUtils.IAP_ANDROID_PARAM_TEXT, + mBraveVpnPrefModel.getPurchaseToken(), + getActivity().getPackageName()); + } else { + BraveVpnNativeWorker.getInstance() + .verifyPurchaseToken( + mBraveVpnPrefModel.getPurchaseToken(), + mBraveVpnPrefModel.getProductId(), + BraveVpnUtils.SUBSCRIPTION_PARAM_TEXT, + getActivity().getPackageName()); + } + } else { + BraveVpnApiResponseUtils.queryPurchaseFailed(getActivity()); + BraveVpnUtils.openBraveVpnPlansActivity(getActivity()); + } + }); } @Override diff --git a/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnApiResponseUtils.java b/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnApiResponseUtils.java index c22d88711e3..6faaec01127 100644 --- a/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnApiResponseUtils.java +++ b/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnApiResponseUtils.java @@ -39,7 +39,7 @@ public class BraveVpnApiResponseUtils { public static void handleOnGetSubscriberCredential(Activity activity, boolean isSuccess) { if (isSuccess) { if (!BraveVpnNativeWorker.getInstance().isPurchasedUser()) { - MutableLiveData _activePurchases = new MutableLiveData(); + MutableLiveData _activePurchases = new MutableLiveData<>(); LiveData activePurchases = _activePurchases; InAppPurchaseWrapper.getInstance() .queryPurchases( diff --git a/android/java/org/chromium/chrome/browser/widget/quickactionsearchandbookmark/QuickActionSearchAndBookmarkWidgetProvider.java b/android/java/org/chromium/chrome/browser/widget/quickactionsearchandbookmark/QuickActionSearchAndBookmarkWidgetProvider.java index b9ec9d7b0d4..17d3ec2fd58 100644 --- a/android/java/org/chromium/chrome/browser/widget/quickactionsearchandbookmark/QuickActionSearchAndBookmarkWidgetProvider.java +++ b/android/java/org/chromium/chrome/browser/widget/quickactionsearchandbookmark/QuickActionSearchAndBookmarkWidgetProvider.java @@ -402,7 +402,7 @@ public class QuickActionSearchAndBookmarkWidgetProvider extends AppWidgetProvide BravePreferenceKeys .BRAVE_QUICK_ACTION_SEARCH_AND_BOOKMARK_WIDGET_TILES, null); - List widgetTileList = new ArrayList(); + List widgetTileList = new ArrayList<>(); // Check if there's any saved data if (widgetTilesJson == null || widgetTilesJson.isEmpty()) { diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 716b09c24fd..991de7cb07e 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -3182,13 +3182,14 @@ public class BytecodeTest { return constructorsMatchImpl(class1, class2, parameterTypes); } - private boolean constructorsMatchImpl(Class class1, Class class2, Class... parameterTypes) { + private boolean constructorsMatchImpl( + Class class1, Class class2, Class... parameterTypes) { if (class1 == null || class2 == null) { return false; } try { - Constructor ctor1 = class1.getDeclaredConstructor(parameterTypes); - Constructor ctor2 = class2.getDeclaredConstructor(parameterTypes); + Constructor ctor1 = class1.getDeclaredConstructor(parameterTypes); + Constructor ctor2 = class2.getDeclaredConstructor(parameterTypes); if (ctor1 != null && ctor2 != null) { return true; } diff --git a/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BravePasswordManagerHelper.java b/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BravePasswordManagerHelper.java index 06446e745fc..f30aebf8f09 100644 --- a/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BravePasswordManagerHelper.java +++ b/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BravePasswordManagerHelper.java @@ -8,6 +8,8 @@ package org.chromium.chrome.browser.password_manager; import android.content.Context; import android.os.Bundle; +import androidx.fragment.app.Fragment; + import org.chromium.base.Log; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; @@ -47,9 +49,10 @@ public class BravePasswordManagerHelper extends PasswordManagerHelper { // enum. To avoid use patching, just use reflection, luckily we have // settingsNavigation.createSettingsIntent which can accept Class argument. try { - Class passwordSettingsClass = + Class passwordSettingsClass = Class.forName( - "org.chromium.chrome.browser.password_manager.settings.PasswordSettings"); // presubmit: ignore-long-line + "org.chromium.chrome.browser.password_manager.settings.PasswordSettings") // presubmit: ignore-long-line + .asSubclass(Fragment.class); context.startActivity( SettingsNavigationFactory.createSettingsNavigation() .createSettingsIntent(context, passwordSettingsClass, fragmentArgs)); @@ -63,7 +66,7 @@ public class BravePasswordManagerHelper extends PasswordManagerHelper { sProfileMap = new ProfileKeyedMap<>( ProfileKeyedMap.ProfileSelection.REDIRECTED_TO_ORIGINAL, - ProfileKeyedMap.NO_REQUIRED_CLEANUP_ACTION); + ProfileKeyedMap.noRequiredCleanupAction()); } return sProfileMap.getForProfile(profile, BravePasswordManagerHelper::new); } diff --git a/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenu.java b/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenu.java index 56a4ef8d97b..93a9b7207b6 100644 --- a/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenu.java +++ b/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenu.java @@ -27,7 +27,7 @@ public class BraveAppMenu extends BraveAppMenuDummySuper { BraveAppMenu( AppMenuVisibilityDelegate visibilityDelegate, Resources res, - HierarchicalMenuController hierarchicalMenuController, + HierarchicalMenuController hierarchicalMenuController, boolean disableVerticalScrollbar) { super(visibilityDelegate, res, hierarchicalMenuController, disableVerticalScrollbar); diff --git a/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenuDummySuper.java b/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenuDummySuper.java index f9cc8ce8a33..b3c29477bb2 100644 --- a/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenuDummySuper.java +++ b/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/BraveAppMenuDummySuper.java @@ -19,7 +19,7 @@ class BraveAppMenuDummySuper extends AppMenu { BraveAppMenuDummySuper( AppMenuVisibilityDelegate visibilityDelegate, Resources res, - HierarchicalMenuController hierarchicalMenuController, + HierarchicalMenuController hierarchicalMenuController, boolean disableVerticalScrollbar) { super(visibilityDelegate, res, hierarchicalMenuController, disableVerticalScrollbar); assert false : "This class usage should be removed in the bytecode!"; diff --git a/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java b/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java index 3998dced0b7..88f814bb7d1 100644 --- a/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java +++ b/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator.java @@ -23,6 +23,10 @@ import java.util.List; public class BraveAutocompleteCoordinator { public ViewProvider createViewProvider() { + // The reflected AutocompleteCoordinator#createViewProvider returns + // ViewProvider, but invokeMethod returns Object so the cast + // is unverifiable at compile time due to generic erasure. + @SuppressWarnings("unchecked") ViewProvider provider = (ViewProvider) BraveReflectionUtil.invokeMethod( diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java index b74ef53f50d..6f1676d0a6d 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassVisitor.java @@ -152,7 +152,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void deleteMethod(String className, String methodName) { - ArrayList methods = mDeleteMethods.get(className); + ArrayList methods = mDeleteMethods.get(className); if (methods == null) { methods = new ArrayList(); mDeleteMethods.put(className, methods); @@ -176,7 +176,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void makePublicMethod(String className, String methodName) { - ArrayList methods = mMakePublicMethods.get(className); + ArrayList methods = mMakePublicMethods.get(className); if (methods == null) { methods = new ArrayList(); mMakePublicMethods.put(className, methods); @@ -199,7 +199,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void makePrivateMethod(String className, String methodName) { - ArrayList methods = mMakePrivateMethods.get(className); + ArrayList methods = mMakePrivateMethods.get(className); if (methods == null) { methods = new ArrayList(); mMakePrivateMethods.put(className, methods); @@ -232,7 +232,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void changeMethodOwner(String currentOwner, String methodName, String newOwner) { - Map methods = mChangeOwnerMethods.get(currentOwner); + Map methods = mChangeOwnerMethods.get(currentOwner); if (methods == null) { methods = new HashMap(); mChangeOwnerMethods.put(currentOwner, methods); @@ -253,7 +253,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void deleteField(String className, String fieldName) { - ArrayList fields = mDeleteFields.get(className); + ArrayList fields = mDeleteFields.get(className); if (fields == null) { fields = new ArrayList(); mDeleteFields.put(className, fields); @@ -272,7 +272,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void deleteInnerClass(String outerName, String innerName) { - ArrayList innerNames = mDeleteInnerClasses.get(outerName); + ArrayList innerNames = mDeleteInnerClasses.get(outerName); if (innerNames == null) { innerNames = new ArrayList(); mDeleteInnerClasses.put(outerName, innerNames); @@ -299,7 +299,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void makePublicInnerClass(String outerName, String innerName) { - ArrayList innerNames = mMakePublicInnerClasses.get(outerName); + ArrayList innerNames = mMakePublicInnerClasses.get(outerName); if (innerNames == null) { innerNames = new ArrayList(); mMakePublicInnerClasses.put(outerName, innerNames); @@ -324,7 +324,7 @@ class BraveClassVisitor extends ClassVisitor { } protected void makeProtectedField(String className, String fieldName) { - ArrayList fields = mMakeProtectedFields.get(className); + ArrayList fields = mMakeProtectedFields.get(className); if (fields == null) { fields = new ArrayList(); mMakeProtectedFields.put(className, fields); diff --git a/components/browser_ui/media/android/java/src/org/chromium/components/browser_ui/media/BraveMediaSessionHelper.java b/components/browser_ui/media/android/java/src/org/chromium/components/browser_ui/media/BraveMediaSessionHelper.java index b2914f363d8..72769cdcb43 100644 --- a/components/browser_ui/media/android/java/src/org/chromium/components/browser_ui/media/BraveMediaSessionHelper.java +++ b/components/browser_ui/media/android/java/src/org/chromium/components/browser_ui/media/BraveMediaSessionHelper.java @@ -104,6 +104,10 @@ public class BraveMediaSessionHelper implements MediaImageCallback { HashSet actionSet = new HashSet(); actionSet.add(0); notificationInfoBuilder.setMediaSessionActions(actionSet); + // The reflected field MediaSessionHelper#mMediaSessionActions is declared as + // Set, but getField returns Object so the cast is unverifiable at compile + // time due to generic erasure. + @SuppressWarnings("unchecked") Set mediaSessionActions = (Set) BraveReflectionUtil.getField( diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsPreferencesBase.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsPreferencesBase.java index 090cbd665bf..eaa30b69d91 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsPreferencesBase.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BraveSiteSettingsPreferencesBase.java @@ -47,14 +47,16 @@ public class BraveSiteSettingsPreferencesBase extends BaseSiteSettingsFragment { super.onResume(); } - /** - * We need to override it to avoid NullPointerException in Chromium's child classes - */ + /** We need to override it to avoid NullPointerException in Chromium's child classes */ + // The cast mirrors the upstream PreferenceFragmentCompat#findPreference contract: callers + // request a specific Preference subtype via the type parameter, but mRemovedPreferences + // stores the erased Preference type, so the (T) cast is unverifiable at compile time. + @SuppressWarnings("unchecked") @Override - public Preference findPreference(CharSequence key) { - Preference result = super.findPreference(key); + public T findPreference(CharSequence key) { + T result = super.findPreference(key); if (result == null) { - result = mRemovedPreferences.get((String) key); + result = (T) mRemovedPreferences.get((String) key); } return result; }