Migrate Radio app to use baselayout. am: 3c5e96a779

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/Radio/+/10739488

Change-Id: I668e9e34c89b66c53b00a06a0030c7ab92eece2d
diff --git a/res/layout/radio_activity.xml b/res/layout/radio_activity.xml
index f54c6ac..bd92a9a 100644
--- a/res/layout/radio_activity.xml
+++ b/res/layout/radio_activity.xml
@@ -26,15 +26,6 @@
         android:orientation="horizontal"
         app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_first_row_height" />
 
-    <com.android.car.ui.toolbar.Toolbar
-        android:id="@+id/toolbar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:title="@string/app_name"
-        app:layout_constraintTop_toTopOf="parent"
-        app:logo="@drawable/logo_fm_radio"
-        app:car_ui_state="home"/>
-
     <androidx.viewpager.widget.ViewPager
         android:id="@+id/viewpager"
         android:layout_width="@dimen/radio_activity_pager_size"
@@ -43,14 +34,14 @@
         android:layout_weight="@integer/radio_activity_view_weight"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/toolbar"
+        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toTopOf="@+id/main_radio_display" />
 
     <TextView
         android:id="@+id/status_message"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/toolbar"
+        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toTopOf="@+id/main_radio_display"
         android:visibility="gone"
         style="@style/RadioStatusMessage" />
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 1c88003..90fdf5d 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -15,7 +15,7 @@
 -->
 <resources>
     <!--Theme for the app. -->
-    <style name="Theme.Radio" parent="android:Theme.DeviceDefault.NoActionBar">
+    <style name="Theme.Radio" parent="Theme.CarUi.WithToolbar">
         <item name="textAppearanceGridItem">@android:style/TextAppearance.DeviceDefault.Medium</item>
         <item name="textAppearanceGridItemSecondary">@android:style/TextAppearance.DeviceDefault.Small</item>
     </style>
diff --git a/src/com/android/car/radio/BrowseFragment.java b/src/com/android/car/radio/BrowseFragment.java
index 4661df3..f81fc1d 100644
--- a/src/com/android/car/radio/BrowseFragment.java
+++ b/src/com/android/car/radio/BrowseFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.car.radio;
 
+import static com.android.car.ui.core.CarUi.requireInsets;
+
 import android.content.Context;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -28,11 +30,13 @@
 
 import com.android.car.broadcastradio.support.Program;
 import com.android.car.radio.storage.RadioStorage;
+import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 
 /**
  * Fragment that shows all browseable radio stations from background scan
  */
-public class BrowseFragment extends Fragment {
+public class BrowseFragment extends Fragment implements InsetsChangedListener {
 
     private RadioController mRadioController;
     private BrowseAdapter mBrowseAdapter;
@@ -76,6 +80,24 @@
         }
     }
 
+    @Override
+    public void onCarUiInsetsChanged(Insets insets) {
+        View view = requireView();
+        View recyclerView = view.findViewById(R.id.browse_list);
+        recyclerView.setPadding(insets.getLeft(),
+                insets.getTop(),
+                insets.getRight(),
+                insets.getBottom());
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        // This is needed to apply the inset changes that happened before this fragment was visible
+        onCarUiInsetsChanged(requireInsets(getActivity()));
+    }
+
     private void handlePresetItemFavoriteChanged(Program program, boolean saveAsFavorite) {
         if (saveAsFavorite) {
             mRadioStorage.addFavorite(program);
diff --git a/src/com/android/car/radio/FavoritesFragment.java b/src/com/android/car/radio/FavoritesFragment.java
index 3154dba..218a318 100644
--- a/src/com/android/car/radio/FavoritesFragment.java
+++ b/src/com/android/car/radio/FavoritesFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.car.radio;
 
+import static com.android.car.ui.core.CarUi.requireInsets;
+
 import android.content.Context;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -28,11 +30,13 @@
 
 import com.android.car.broadcastradio.support.Program;
 import com.android.car.radio.storage.RadioStorage;
+import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 
 /**
  * Fragment that shows a list of all the current favorite radio stations
  */
-public class FavoritesFragment extends Fragment {
+public class FavoritesFragment extends Fragment implements InsetsChangedListener {
 
     private RadioController mRadioController;
     private BrowseAdapter mBrowseAdapter;
@@ -76,6 +80,24 @@
         }
     }
 
+    @Override
+    public void onCarUiInsetsChanged(Insets insets) {
+        View view = requireView();
+        View recyclerView = view.findViewById(R.id.browse_list);
+        recyclerView.setPadding(insets.getLeft(),
+                insets.getTop(),
+                insets.getRight(),
+                insets.getBottom());
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        // This is needed to apply the inset changes that happened before this fragment was visible
+        onCarUiInsetsChanged(requireInsets(getActivity()));
+    }
+
     private void handlePresetItemFavoriteChanged(Program program, boolean saveAsFavorite) {
         if (saveAsFavorite) {
             mRadioStorage.addFavorite(program);
diff --git a/src/com/android/car/radio/ManualTunerFragment.java b/src/com/android/car/radio/ManualTunerFragment.java
index 737edb9..9fe6bcc 100644
--- a/src/com/android/car/radio/ManualTunerFragment.java
+++ b/src/com/android/car/radio/ManualTunerFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.car.radio;
 
+import static com.android.car.ui.core.CarUi.requireInsets;
+
 import android.hardware.radio.RadioManager.ProgramInfo;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -25,11 +27,13 @@
 import androidx.fragment.app.Fragment;
 
 import com.android.car.radio.bands.ProgramType;
+import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 
 /**
  * Fragment that allows tuning to a specific frequency using a keypad
  */
-public class ManualTunerFragment extends Fragment {
+public class ManualTunerFragment extends Fragment implements InsetsChangedListener {
 
     private ManualTunerController mController;
     private RadioController mRadioController;
@@ -57,6 +61,21 @@
         }
     }
 
+    @Override
+    public void onCarUiInsetsChanged(Insets insets) {
+        View view = requireView();
+        view.setPadding(insets.getLeft(), insets.getTop(),
+                insets.getRight(), insets.getBottom());
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        // This is needed to apply the inset changes that happened before this fragment was visible
+        onCarUiInsetsChanged(requireInsets(getActivity()));
+    }
+
     static ManualTunerFragment newInstance(RadioController radioController) {
         ManualTunerFragment fragment = new ManualTunerFragment();
         fragment.mRadioController = radioController;
diff --git a/src/com/android/car/radio/RadioActivity.java b/src/com/android/car/radio/RadioActivity.java
index 434afc1..73582b5 100644
--- a/src/com/android/car/radio/RadioActivity.java
+++ b/src/com/android/car/radio/RadioActivity.java
@@ -18,6 +18,9 @@
 
 import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_BROWSE;
 
+import static com.android.car.ui.core.CarUi.requireToolbar;
+import static com.android.car.ui.toolbar.Toolbar.State.HOME;
+
 import android.car.Car;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
@@ -32,9 +35,11 @@
 import com.android.car.media.common.source.MediaSourceViewModel;
 import com.android.car.radio.bands.ProgramType;
 import com.android.car.radio.util.Log;
+import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.TabLayout;
-import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.toolbar.ToolbarController;
 
 import java.util.Arrays;
 import java.util.List;
@@ -42,7 +47,7 @@
 /**
  * The main activity for the radio app.
  */
-public class RadioActivity extends FragmentActivity {
+public class RadioActivity extends FragmentActivity implements InsetsChangedListener {
     private static final String TAG = "BcRadioApp.activity";
 
     /**
@@ -59,10 +64,17 @@
 
     private RadioController mRadioController;
     private BandController mBandController = new BandController();
-    private Toolbar mToolbar;
+    private ToolbarController mToolbar;
     private RadioPagerAdapter mRadioPagerAdapter;
 
     @Override
+    public void onCarUiInsetsChanged(Insets insets) {
+        // This InsetsChangedListener is just a marker that we will later handle
+        // insets in fragments, since the fragments aren't added immediately.
+        // Otherwise CarUi will apply the insets to the content view incorrectly.
+    }
+
+    @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
@@ -84,7 +96,10 @@
         ViewPager viewPager = findViewById(R.id.viewpager);
         viewPager.setAdapter(mRadioPagerAdapter);
 
-        mToolbar = requireViewById(R.id.toolbar);
+        mToolbar = requireToolbar(this);
+        mToolbar.setState(HOME);
+        mToolbar.setTitle(R.string.app_name);
+        mToolbar.setLogo(R.drawable.logo_fm_radio);
         mToolbar.registerOnTabSelectedListener(t ->
                 viewPager.setCurrentItem(mToolbar.getTabLayout().getTabPosition(t)));