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 439e8328..c9b8d5d9 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
@@ -47,7 +47,9 @@
import com.d4rk.androidtutorials.java.utils.ConsentUtils;
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
import com.d4rk.androidtutorials.java.utils.ReviewHelper;
+import com.d4rk.androidtutorials.java.ads.views.NativeAdBannerView;
import com.google.android.material.navigation.NavigationBarView;
+import com.google.android.material.progressindicator.CircularProgressIndicator;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.play.core.appupdate.AppUpdateInfo;
import com.google.android.play.core.appupdate.AppUpdateManager;
@@ -75,18 +77,7 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onResume(@NonNull LifecycleOwner owner) {
ConsentUtils.applyStoredConsent(MainActivity.this);
- 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);
- }
- }
+ updateBottomBannerVisibility(!shouldUseNavigationRail());
}
};
private MainViewModel mainViewModel;
@@ -97,6 +88,7 @@ public void onResume(@NonNull LifecycleOwner owner) {
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener;
private long backPressedTime;
+ private boolean bottomBannerLoading;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -217,24 +209,17 @@ private void observeViewModel() {
navRail.setVisibility(View.VISIBLE);
}
navBarView.setVisibility(View.GONE);
+ updateBottomBannerVisibility(false);
WindowCompat.enableEdgeToEdge(this.getWindow());
} else {
if (navRail != null) {
navRail.setVisibility(View.GONE);
}
navBarView.setVisibility(View.VISIBLE);
+ updateBottomBannerVisibility(true);
EdgeToEdgeDelegate.applyBottomBar(this, binding.container, navBarView);
navBarView.setLabelVisibilityMode(uiState.bottomNavVisibility());
- 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);
- }
}
NavHostFragment navHostFragment = (NavHostFragment)
@@ -326,12 +311,67 @@ private void observeViewModel() {
mainViewModel.getLoadingState().observe(this, isLoading -> {
ActivityMainBinding binding = mBinding;
if (binding != null) {
- assert binding.progressBar != null;
- binding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE);
+ CircularProgressIndicator progressIndicator = binding.progressBar;
+ if (progressIndicator != null) {
+ if (Boolean.TRUE.equals(isLoading)) {
+ progressIndicator.show();
+ } else {
+ progressIndicator.hide();
+ }
+ }
}
});
}
+ private void updateBottomBannerVisibility(boolean showBanner) {
+ ActivityMainBinding binding = mBinding;
+ if (binding == null) {
+ return;
+ }
+ View adContainer = binding.adContainer;
+ if (adContainer != null) {
+ adContainer.setVisibility(showBanner ? View.VISIBLE : View.GONE);
+ }
+ NativeAdBannerView adView = binding.adView;
+ View adPlaceholder = binding.adPlaceholder;
+ if (adView == null) {
+ if (adPlaceholder != null) {
+ adPlaceholder.setVisibility(View.GONE);
+ }
+ return;
+ }
+ if (!showBanner) {
+ if (adPlaceholder != null) {
+ adPlaceholder.setVisibility(View.GONE);
+ }
+ adView.setVisibility(View.GONE);
+ adView.removeAllViews();
+ bottomBannerLoading = false;
+ return;
+ }
+
+ if (adPlaceholder != null) {
+ adPlaceholder.setVisibility(View.VISIBLE);
+ }
+ if (adView.getVisibility() != View.VISIBLE || adView.getChildCount() > 0) {
+ bottomBannerLoading = false;
+ }
+
+ adView.setVisibility(View.VISIBLE);
+ if (adView.getChildCount() > 0) {
+ if (adPlaceholder != null) {
+ adPlaceholder.setVisibility(View.GONE);
+ }
+ bottomBannerLoading = false;
+ return;
+ }
+
+ if (!bottomBannerLoading) {
+ bottomBannerLoading = true;
+ AdUtils.loadBanner(adView);
+ }
+ }
+
private void navigateToPreferredDestination(int preferredDestination) {
if (navController == null) {
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1958e47b..88cedb96 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -41,10 +41,22 @@
app:layout_constraintTop_toBottomOf="@id/app_bar_layout"
app:navGraph="@navigation/mobile_navigation" />
+
+
@@ -53,27 +65,24 @@
android:id="@+id/ad_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="?attr/colorSurfaceContainer" />
+ android:background="?attr/colorSurfaceContainer"
+ android:visibility="gone" />
-
-
-
-
-
-
+ android:layout_marginHorizontal="16dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="12dp"
+ app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewTopRounded">
+ android:orientation="vertical"
+ android:paddingHorizontal="16dp"
+ android:paddingTop="12dp"
+ android:paddingBottom="12dp">
-
+
+ android:layout_marginTop="8dp"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+
+
+
+
-
+ android:minHeight="40dp"
+ android:minWidth="88dp" />
-
-
-
+
+
+