Fix padding problem between search bar and homepage cards

Get the statusbar height dynamically to fix this problem in notch mode.

Change-Id: I4ca0427fc2556f1fb5f868118c5207fdfa035c59
Fixes: 123215804
Test: robotest
This commit is contained in:
Sunny Shao
2019-01-28 17:46:35 +08:00
parent e56df8877a
commit 4ddecb00ef
3 changed files with 40 additions and 3 deletions

View File

@@ -28,12 +28,11 @@
app:layout_behavior="com.android.settings.widget.FloatingAppBarScrollingViewBehavior"> app:layout_behavior="com.android.settings.widget.FloatingAppBarScrollingViewBehavior">
<LinearLayout <LinearLayout
android:id="@+id/homepage_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:descendantFocusability="blocksDescendants" android:descendantFocusability="blocksDescendants">
android:paddingTop="104dp">
<!-- height of status bar(24dp) + height of action bar(48dp) + top/bottom margins(16dp) -->
<FrameLayout <FrameLayout
android:id="@+id/contextual_cards_content" android:id="@+id/contextual_cards_content"

View File

@@ -23,6 +23,7 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toolbar; import android.widget.Toolbar;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
@@ -50,6 +51,7 @@ public class SettingsHomepageActivity extends SettingsBaseActivity {
updateWindowProperties(); updateWindowProperties();
setContentView(R.layout.settings_homepage_container); setContentView(R.layout.settings_homepage_container);
setHomepageContainerPaddingTop();
final Toolbar toolbar = findViewById(R.id.search_action_bar); final Toolbar toolbar = findViewById(R.id.search_action_bar);
FeatureFactory.getFactory(this).getSearchFeatureProvider() FeatureFactory.getFactory(this).getSearchFeatureProvider()
@@ -86,4 +88,19 @@ public class SettingsHomepageActivity extends SettingsBaseActivity {
getWindow().setStatusBarColor(getResources().getColor(R.color.homepage_status_bar_color)); getWindow().setStatusBarColor(getResources().getColor(R.color.homepage_status_bar_color));
} }
@VisibleForTesting
void setHomepageContainerPaddingTop() {
final View view = this.findViewById(R.id.homepage_container);
final int statusBarHeight = getResources().getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
final int searchBarHeight = getResources().getDimensionPixelSize(R.dimen.search_bar_height);
final int searchBarMargin = getResources().getDimensionPixelSize(R.dimen.search_bar_margin);
// The top padding is the height of status bar + height of action bar(48dp) + top/bottom
// margins(16dp)
final int paddingTop = statusBarHeight + searchBarHeight + searchBarMargin * 2;
view.setPadding(0 /* left */, paddingTop, 0 /* right */, 0 /* bottom */);
}
} }

View File

@@ -19,7 +19,9 @@ package com.android.settings.homepage;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.util.FeatureFlagUtils; import android.util.FeatureFlagUtils;
import android.view.View;
import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.core.FeatureFlags; import com.android.settings.core.FeatureFlags;
@@ -44,4 +46,23 @@ public class SettingsHomepageActivityTest {
assertThat(shadowActivity.getNextStartedActivity().getComponent().getClassName()) assertThat(shadowActivity.getNextStartedActivity().getComponent().getClassName())
.isEqualTo(SettingsActivity.class.getName()); .isEqualTo(SettingsActivity.class.getName());
} }
@Test
public void setHomepageContainerPaddingTop_shouldBeSetPaddingTop() {
final SettingsHomepageActivity activity = Robolectric.buildActivity(
SettingsHomepageActivity.class).create().get();
final int statusBarHeight = activity.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
final int searchBarHeight = activity.getResources().getDimensionPixelSize(
R.dimen.search_bar_height);
final int searchBarMargin = activity.getResources().getDimensionPixelSize(
R.dimen.search_bar_margin);
final View view = activity.findViewById(R.id.homepage_container);
activity.setHomepageContainerPaddingTop();
final int actualPaddingTop = view.getPaddingTop();
assertThat(actualPaddingTop).isEqualTo(
statusBarHeight + searchBarHeight + searchBarMargin * 2);
}
} }