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)));