From 4effab7bd95be332145710eee34e4586a52329af Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Fri, 19 Sep 2025 12:17:13 +0300 Subject: [PATCH] Resolve FIXME warnings across navigation and consent handling --- .../components/navigation/BaseActivity.java | 3 +- .../java/ui/screens/main/MainActivity.java | 50 ++++++++++------- .../java/utils/ConsentUtilsTest.java | 53 +++++++++---------- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BaseActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BaseActivity.java index de4488d5..8a11e2db 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BaseActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BaseActivity.java @@ -31,8 +31,7 @@ protected void onPostCreate(@Nullable Bundle savedInstanceState) { @SuppressLint("RestrictedApi") @Override public boolean onMenuOpened(int featureId, Menu menu) { - if (menu instanceof MenuBuilder) { - MenuBuilder menuBuilder = (MenuBuilder) menu; // FIXME: Variable 'menuBuilder' can be replaced with pattern variable + if (menu instanceof MenuBuilder menuBuilder) { menuBuilder.setOptionalIconsVisible(true); } return super.onMenuOpened(featureId, menu); diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java index 8e206206..0c89bf27 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java @@ -71,10 +71,17 @@ public class MainActivity extends AppCompatActivity { @Override public void onResume(@NonNull LifecycleOwner owner) { ConsentUtils.applyStoredConsent(MainActivity.this); - if (mBinding != null && mBinding.adView != null) { - mBinding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' - mBinding.adView.setVisibility(View.VISIBLE); - AdUtils.loadBanner(mBinding.adView); + ActivityMainBinding binding = mBinding; + if (binding != null) { + View adView = binding.adView; + if (adView != null) { + View adPlaceholder = binding.adPlaceholder; + if (adPlaceholder != null) { + adPlaceholder.setVisibility(View.GONE); + } + adView.setVisibility(View.VISIBLE); + AdUtils.loadBanner(adView); + } } } }; @@ -201,19 +208,29 @@ private void observeViewModel() { } NavigationBarView navBarView = (NavigationBarView) binding.navView; if (useRail) { - binding.navRail.setVisibility(View.VISIBLE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + View navRail = binding.navRail; + if (navRail != null) { + navRail.setVisibility(View.VISIBLE); + } navBarView.setVisibility(View.GONE); EdgeToEdgeDelegate.apply(this, binding.container); } else { - binding.navRail.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + View navRail = binding.navRail; + if (navRail != null) { + navRail.setVisibility(View.GONE); + } navBarView.setVisibility(View.VISIBLE); EdgeToEdgeDelegate.applyBottomBar(this, binding.container, navBarView); navBarView.setLabelVisibilityMode(uiState.bottomNavVisibility()); - if (binding.adView != null) { - binding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' - binding.adView.setVisibility(View.VISIBLE); - AdUtils.loadBanner(binding.adView); + View adView = binding.adView; + if (adView != null) { + View adPlaceholder = binding.adPlaceholder; + if (adPlaceholder != null) { + adPlaceholder.setVisibility(View.GONE); + } + adView.setVisibility(View.VISIBLE); + AdUtils.loadBanner(adView); } } @@ -304,8 +321,9 @@ private void observeViewModel() { }); mainViewModel.getLoadingState().observe(this, isLoading -> { - if (mBinding != null) { - mBinding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + ActivityMainBinding binding = mBinding; + if (binding != null) { + binding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE); } }); } @@ -316,18 +334,12 @@ private void navigateToPreferredDestination(int preferredDestination) { return; } NavGraph graph = navController.getGraph(); - if (graph != null) {// FIXME: Condition 'graph != null' is always 'true' - graph.setStartDestination(preferredDestination); - } + graph.setStartDestination(preferredDestination); androidx.navigation.NavDestination currentDestination = navController.getCurrentDestination(); if (currentDestination != null && currentDestination.getId() == preferredDestination) { lastPreferredStartDestination = preferredDestination; return; } - if (graph == null) { // FIXME: Condition 'graph == null' is always 'false' - lastPreferredStartDestination = preferredDestination; - return; - } NavOptions options = new NavOptions.Builder() .setPopUpTo(graph.getStartDestinationId(), true) .setLaunchSingleTop(true) diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/utils/ConsentUtilsTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/utils/ConsentUtilsTest.java index ae803c7e..912e3ccf 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/utils/ConsentUtilsTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/utils/ConsentUtilsTest.java @@ -1,6 +1,5 @@ package com.d4rk.androidtutorials.java.utils; -import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -14,10 +13,10 @@ import com.google.firebase.analytics.FirebaseAnalytics; import org.junit.Test; -import org.mockito.ArgumentCaptor; import org.mockito.MockedStatic; import org.mockito.Mockito; +import java.util.EnumMap; import java.util.Map; public class ConsentUtilsTest { @@ -50,19 +49,18 @@ public void applyStoredConsent_readsPreferencesAndUpdatesFirebase() { verify(prefs).getBoolean("consent_ad_user_data", true); verify(prefs).getBoolean("consent_ad_personalization", true); - ArgumentCaptor> captor = - ArgumentCaptor.forClass(Map.class); // FIXME: Unchecked assignment: 'org.mockito.ArgumentCaptor' to 'org.mockito.ArgumentCaptor>' && Unchecked method 'forClass(Class)' invocation - verify(analytics).setConsent(captor.capture()); - Map consentMap = captor.getValue(); - - assertEquals(FirebaseAnalytics.ConsentStatus.DENIED, - consentMap.get(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE)); - assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED, - consentMap.get(FirebaseAnalytics.ConsentType.AD_STORAGE)); - assertEquals(FirebaseAnalytics.ConsentStatus.DENIED, - consentMap.get(FirebaseAnalytics.ConsentType.AD_USER_DATA)); - assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED, - consentMap.get(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION)); + Map expectedConsent = + new EnumMap<>(FirebaseAnalytics.ConsentType.class); + expectedConsent.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, + FirebaseAnalytics.ConsentStatus.DENIED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_STORAGE, + FirebaseAnalytics.ConsentStatus.GRANTED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, + FirebaseAnalytics.ConsentStatus.DENIED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, + FirebaseAnalytics.ConsentStatus.GRANTED); + + verify(analytics).setConsent(expectedConsent); } } @@ -85,19 +83,18 @@ public void updateFirebaseConsent_setsExpectedStatuses() { adUserDataConsent, adPersonalizationConsent); - ArgumentCaptor> captor = - ArgumentCaptor.forClass(Map.class); // FIXME: Unchecked assignment: 'org.mockito.ArgumentCaptor' to 'org.mockito.ArgumentCaptor>' && Unchecked method 'forClass(Class)' invocation - verify(analytics).setConsent(captor.capture()); - Map result = captor.getValue(); - - assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED, - result.get(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE)); - assertEquals(FirebaseAnalytics.ConsentStatus.DENIED, - result.get(FirebaseAnalytics.ConsentType.AD_STORAGE)); - assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED, - result.get(FirebaseAnalytics.ConsentType.AD_USER_DATA)); - assertEquals(FirebaseAnalytics.ConsentStatus.DENIED, - result.get(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION)); + Map expectedConsent = + new EnumMap<>(FirebaseAnalytics.ConsentType.class); + expectedConsent.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, + FirebaseAnalytics.ConsentStatus.GRANTED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_STORAGE, + FirebaseAnalytics.ConsentStatus.DENIED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, + FirebaseAnalytics.ConsentStatus.GRANTED); + expectedConsent.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, + FirebaseAnalytics.ConsentStatus.DENIED); + + verify(analytics).setConsent(expectedConsent); } }