Skip to content

Commit 4effab7

Browse files
Resolve FIXME warnings across navigation and consent handling
1 parent 4411211 commit 4effab7

File tree

3 files changed

+57
-49
lines changed

3 files changed

+57
-49
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BaseActivity.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ protected void onPostCreate(@Nullable Bundle savedInstanceState) {
3131
@SuppressLint("RestrictedApi")
3232
@Override
3333
public boolean onMenuOpened(int featureId, Menu menu) {
34-
if (menu instanceof MenuBuilder) {
35-
MenuBuilder menuBuilder = (MenuBuilder) menu; // FIXME: Variable 'menuBuilder' can be replaced with pattern variable
34+
if (menu instanceof MenuBuilder menuBuilder) {
3635
menuBuilder.setOptionalIconsVisible(true);
3736
}
3837
return super.onMenuOpened(featureId, menu);

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,17 @@ public class MainActivity extends AppCompatActivity {
7171
@Override
7272
public void onResume(@NonNull LifecycleOwner owner) {
7373
ConsentUtils.applyStoredConsent(MainActivity.this);
74-
if (mBinding != null && mBinding.adView != null) {
75-
mBinding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException'
76-
mBinding.adView.setVisibility(View.VISIBLE);
77-
AdUtils.loadBanner(mBinding.adView);
74+
ActivityMainBinding binding = mBinding;
75+
if (binding != null) {
76+
View adView = binding.adView;
77+
if (adView != null) {
78+
View adPlaceholder = binding.adPlaceholder;
79+
if (adPlaceholder != null) {
80+
adPlaceholder.setVisibility(View.GONE);
81+
}
82+
adView.setVisibility(View.VISIBLE);
83+
AdUtils.loadBanner(adView);
84+
}
7885
}
7986
}
8087
};
@@ -201,19 +208,29 @@ private void observeViewModel() {
201208
}
202209
NavigationBarView navBarView = (NavigationBarView) binding.navView;
203210
if (useRail) {
204-
binding.navRail.setVisibility(View.VISIBLE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException'
211+
View navRail = binding.navRail;
212+
if (navRail != null) {
213+
navRail.setVisibility(View.VISIBLE);
214+
}
205215
navBarView.setVisibility(View.GONE);
206216
EdgeToEdgeDelegate.apply(this, binding.container);
207217
} else {
208-
binding.navRail.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException'
218+
View navRail = binding.navRail;
219+
if (navRail != null) {
220+
navRail.setVisibility(View.GONE);
221+
}
209222
navBarView.setVisibility(View.VISIBLE);
210223
EdgeToEdgeDelegate.applyBottomBar(this, binding.container, navBarView);
211224

212225
navBarView.setLabelVisibilityMode(uiState.bottomNavVisibility());
213-
if (binding.adView != null) {
214-
binding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException'
215-
binding.adView.setVisibility(View.VISIBLE);
216-
AdUtils.loadBanner(binding.adView);
226+
View adView = binding.adView;
227+
if (adView != null) {
228+
View adPlaceholder = binding.adPlaceholder;
229+
if (adPlaceholder != null) {
230+
adPlaceholder.setVisibility(View.GONE);
231+
}
232+
adView.setVisibility(View.VISIBLE);
233+
AdUtils.loadBanner(adView);
217234
}
218235
}
219236

@@ -304,8 +321,9 @@ private void observeViewModel() {
304321
});
305322

306323
mainViewModel.getLoadingState().observe(this, isLoading -> {
307-
if (mBinding != null) {
308-
mBinding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException'
324+
ActivityMainBinding binding = mBinding;
325+
if (binding != null) {
326+
binding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE);
309327
}
310328
});
311329
}
@@ -316,18 +334,12 @@ private void navigateToPreferredDestination(int preferredDestination) {
316334
return;
317335
}
318336
NavGraph graph = navController.getGraph();
319-
if (graph != null) {// FIXME: Condition 'graph != null' is always 'true'
320-
graph.setStartDestination(preferredDestination);
321-
}
337+
graph.setStartDestination(preferredDestination);
322338
androidx.navigation.NavDestination currentDestination = navController.getCurrentDestination();
323339
if (currentDestination != null && currentDestination.getId() == preferredDestination) {
324340
lastPreferredStartDestination = preferredDestination;
325341
return;
326342
}
327-
if (graph == null) { // FIXME: Condition 'graph == null' is always 'false'
328-
lastPreferredStartDestination = preferredDestination;
329-
return;
330-
}
331343
NavOptions options = new NavOptions.Builder()
332344
.setPopUpTo(graph.getStartDestinationId(), true)
333345
.setLaunchSingleTop(true)

app/src/test/java/com/d4rk/androidtutorials/java/utils/ConsentUtilsTest.java

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.d4rk.androidtutorials.java.utils;
22

3-
import static org.junit.Assert.assertEquals;
43
import static org.mockito.Mockito.mock;
54
import static org.mockito.Mockito.verify;
65
import static org.mockito.Mockito.when;
@@ -14,10 +13,10 @@
1413
import com.google.firebase.analytics.FirebaseAnalytics;
1514

1615
import org.junit.Test;
17-
import org.mockito.ArgumentCaptor;
1816
import org.mockito.MockedStatic;
1917
import org.mockito.Mockito;
2018

19+
import java.util.EnumMap;
2120
import java.util.Map;
2221

2322
public class ConsentUtilsTest {
@@ -50,19 +49,18 @@ public void applyStoredConsent_readsPreferencesAndUpdatesFirebase() {
5049
verify(prefs).getBoolean("consent_ad_user_data", true);
5150
verify(prefs).getBoolean("consent_ad_personalization", true);
5251

53-
ArgumentCaptor<Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus>> captor =
54-
ArgumentCaptor.forClass(Map.class); // FIXME: Unchecked assignment: 'org.mockito.ArgumentCaptor' to 'org.mockito.ArgumentCaptor<java.util.Map<com.google.firebase.analytics.FirebaseAnalytics.ConsentType,com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus>>' && Unchecked method 'forClass(Class<S>)' invocation
55-
verify(analytics).setConsent(captor.capture());
56-
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap = captor.getValue();
57-
58-
assertEquals(FirebaseAnalytics.ConsentStatus.DENIED,
59-
consentMap.get(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE));
60-
assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED,
61-
consentMap.get(FirebaseAnalytics.ConsentType.AD_STORAGE));
62-
assertEquals(FirebaseAnalytics.ConsentStatus.DENIED,
63-
consentMap.get(FirebaseAnalytics.ConsentType.AD_USER_DATA));
64-
assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED,
65-
consentMap.get(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION));
52+
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> expectedConsent =
53+
new EnumMap<>(FirebaseAnalytics.ConsentType.class);
54+
expectedConsent.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE,
55+
FirebaseAnalytics.ConsentStatus.DENIED);
56+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_STORAGE,
57+
FirebaseAnalytics.ConsentStatus.GRANTED);
58+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_USER_DATA,
59+
FirebaseAnalytics.ConsentStatus.DENIED);
60+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION,
61+
FirebaseAnalytics.ConsentStatus.GRANTED);
62+
63+
verify(analytics).setConsent(expectedConsent);
6664
}
6765
}
6866

@@ -85,19 +83,18 @@ public void updateFirebaseConsent_setsExpectedStatuses() {
8583
adUserDataConsent,
8684
adPersonalizationConsent);
8785

88-
ArgumentCaptor<Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus>> captor =
89-
ArgumentCaptor.forClass(Map.class); // FIXME: Unchecked assignment: 'org.mockito.ArgumentCaptor' to 'org.mockito.ArgumentCaptor<java.util.Map<com.google.firebase.analytics.FirebaseAnalytics.ConsentType,com.google.firebase.analytics.FirebaseAnalytics.ConsentStatus>>' && Unchecked method 'forClass(Class<S>)' invocation
90-
verify(analytics).setConsent(captor.capture());
91-
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> result = captor.getValue();
92-
93-
assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED,
94-
result.get(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE));
95-
assertEquals(FirebaseAnalytics.ConsentStatus.DENIED,
96-
result.get(FirebaseAnalytics.ConsentType.AD_STORAGE));
97-
assertEquals(FirebaseAnalytics.ConsentStatus.GRANTED,
98-
result.get(FirebaseAnalytics.ConsentType.AD_USER_DATA));
99-
assertEquals(FirebaseAnalytics.ConsentStatus.DENIED,
100-
result.get(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION));
86+
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> expectedConsent =
87+
new EnumMap<>(FirebaseAnalytics.ConsentType.class);
88+
expectedConsent.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE,
89+
FirebaseAnalytics.ConsentStatus.GRANTED);
90+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_STORAGE,
91+
FirebaseAnalytics.ConsentStatus.DENIED);
92+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_USER_DATA,
93+
FirebaseAnalytics.ConsentStatus.GRANTED);
94+
expectedConsent.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION,
95+
FirebaseAnalytics.ConsentStatus.DENIED);
96+
97+
verify(analytics).setConsent(expectedConsent);
10198
}
10299
}
103100

0 commit comments

Comments
 (0)