Merge "Extend settings panel under navigation bar" into tm-qpr-dev am: 17701cd976
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20929206 Change-Id: I60aab9b333efc5d38f0cbc6f3635948bf734091f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
committed by
Automerger Merge Worker
commit
afb4dd1ece
@@ -20,6 +20,7 @@
|
|||||||
android:id="@+id/panel_container"
|
android:id="@+id/panel_container"
|
||||||
android:layout_width="@dimen/settings_panel_width"
|
android:layout_width="@dimen/settings_panel_width"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:background="@drawable/settings_panel_rounded_top_corner_background" >
|
android:background="@drawable/settings_panel_rounded_top_corner_background" >
|
||||||
|
|
||||||
|
@@ -229,6 +229,7 @@
|
|||||||
<!-- Note that Dialog themes do not set list dividers -->
|
<!-- Note that Dialog themes do not set list dividers -->
|
||||||
<style name="Theme.Panel" parent="@*android:style/Theme.DeviceDefault.Settings.Dialog">
|
<style name="Theme.Panel" parent="@*android:style/Theme.DeviceDefault.Settings.Dialog">
|
||||||
<item name="android:windowBackground">@null</item>
|
<item name="android:windowBackground">@null</item>
|
||||||
|
<item name="android:windowTranslucentNavigation">true</item>
|
||||||
<item name="android:dividerHorizontal">@*android:drawable/list_divider_material</item>
|
<item name="android:dividerHorizontal">@*android:drawable/list_divider_material</item>
|
||||||
<item name="android:windowNoTitle">true</item>
|
<item name="android:windowNoTitle">true</item>
|
||||||
<item name="android:listDivider">@*android:drawable/list_divider_material</item>
|
<item name="android:listDivider">@*android:drawable/list_divider_material</item>
|
||||||
|
@@ -29,12 +29,15 @@ import android.view.WindowManager;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsControllerCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -144,9 +147,33 @@ public class SettingsPanelActivity extends FragmentActivity {
|
|||||||
window.setGravity(Gravity.BOTTOM);
|
window.setGravity(Gravity.BOTTOM);
|
||||||
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT,
|
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT,
|
||||||
WindowManager.LayoutParams.WRAP_CONTENT);
|
WindowManager.LayoutParams.WRAP_CONTENT);
|
||||||
|
setupNavigationBar();
|
||||||
mPanelFragment = new PanelFragment();
|
mPanelFragment = new PanelFragment();
|
||||||
mPanelFragment.setArguments(new Bundle(mBundle));
|
mPanelFragment.setArguments(new Bundle(mBundle));
|
||||||
fragmentManager.beginTransaction().add(R.id.main_content, mPanelFragment).commit();
|
fragmentManager.beginTransaction().add(R.id.main_content, mPanelFragment).commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust bottom edge and color.
|
||||||
|
*/
|
||||||
|
private void setupNavigationBar() {
|
||||||
|
// Extend the panel all the way to the bottom of the screen, as opposed to sitting on top of
|
||||||
|
// the navigation bar.
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(getWindow().getDecorView(),
|
||||||
|
(v, windowInsets) -> {
|
||||||
|
v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), 0);
|
||||||
|
return windowInsets; // propagate down to panel layout root element
|
||||||
|
});
|
||||||
|
|
||||||
|
// When using 3-button navigation in light mode, the system picks white navigation buttons
|
||||||
|
// which are not sufficiently contrasted from the panel background.
|
||||||
|
WindowInsetsControllerCompat windowInsetsController =
|
||||||
|
ViewCompat.getWindowInsetsController(getWindow().getDecorView());
|
||||||
|
|
||||||
|
if (windowInsetsController != null) {
|
||||||
|
boolean forceNavigationButtonsDark = !Utils.isNightMode(this);
|
||||||
|
windowInsetsController.setAppearanceLightNavigationBars(forceNavigationButtonsDark);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,11 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.panel;
|
package com.android.settings.panel;
|
||||||
|
|
||||||
|
import static android.content.res.Configuration.UI_MODE_NIGHT_NO;
|
||||||
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
@@ -30,15 +32,20 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsControllerCompat;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -61,6 +68,9 @@ public class SettingsPanelActivityTest {
|
|||||||
private PanelFragment mPanelFragment;
|
private PanelFragment mPanelFragment;
|
||||||
@Mock
|
@Mock
|
||||||
private FragmentManager mFragmentManager;
|
private FragmentManager mFragmentManager;
|
||||||
|
@Mock
|
||||||
|
private FragmentTransaction mTransaction;
|
||||||
|
private int mOriginalUiMode;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -76,6 +86,15 @@ public class SettingsPanelActivityTest {
|
|||||||
mSettingsPanelActivity.mPanelFragment = mPanelFragment;
|
mSettingsPanelActivity.mPanelFragment = mPanelFragment;
|
||||||
when(mFragmentManager.findFragmentById(R.id.main_content)).thenReturn(mPanelFragment);
|
when(mFragmentManager.findFragmentById(R.id.main_content)).thenReturn(mPanelFragment);
|
||||||
when(mSettingsPanelActivity.getSupportFragmentManager()).thenReturn(mFragmentManager);
|
when(mSettingsPanelActivity.getSupportFragmentManager()).thenReturn(mFragmentManager);
|
||||||
|
mOriginalUiMode = mSettingsPanelActivity.getResources().getConfiguration().uiMode;
|
||||||
|
when(mFragmentManager.beginTransaction()).thenReturn(mTransaction);
|
||||||
|
when(mTransaction.add(anyInt(), any())).thenReturn(mTransaction);
|
||||||
|
when(mTransaction.commit()).thenReturn(0); // don't care about return value
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
mSettingsPanelActivity.getResources().getConfiguration().uiMode = mOriginalUiMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -179,4 +198,24 @@ public class SettingsPanelActivityTest {
|
|||||||
|
|
||||||
verify(mPanelFragment, never()).updatePanelWithAnimation();
|
verify(mPanelFragment, never()).updatePanelWithAnimation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onCreated_isWindowBottomPaddingZero() {
|
||||||
|
int paddingBottom = mSettingsPanelActivity.getWindow().getDecorView().getPaddingBottom();
|
||||||
|
assertThat(paddingBottom).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void notInNightMode_lightNavigationBarAppearance() {
|
||||||
|
Configuration config = mSettingsPanelActivity.getResources().getConfiguration();
|
||||||
|
config.uiMode = UI_MODE_NIGHT_NO;
|
||||||
|
mSettingsPanelActivity.onConfigurationChanged(config); // forces creation
|
||||||
|
|
||||||
|
mSettingsPanelActivity.onNewIntent(mSettingsPanelActivity.getIntent());
|
||||||
|
verify(mFragmentManager).beginTransaction();
|
||||||
|
|
||||||
|
View decorView = mSettingsPanelActivity.getWindow().getDecorView();
|
||||||
|
WindowInsetsControllerCompat controller = ViewCompat.getWindowInsetsController(decorView);
|
||||||
|
assertThat(controller.isAppearanceLightNavigationBars()).isTrue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user