Settings homepage redesign
- Support new suggestion design - Search bar relayout - Move avatar icon to the top right corner Test: robotest Bug: 178068045 Change-Id: I07f1577488d6d1827ee07d55db6759f02d655d5f
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?android:attr/colorAccent">
|
||||
android:tint="?android:attr/textColorSecondary">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M20.49,19l-5.73,-5.73C15.53,12.2 16,10.91 16,9.5C16,5.91 13.09,3 9.5,3S3,5.91 3,9.5C3,13.09 5.91,16 9.5,16c1.41,0 2.7,-0.47 3.77,-1.24L19,20.49L20.49,19zM5,9.5C5,7.01 7.01,5 9.5,5S14,7.01 14,9.5S11.99,14 9.5,14S5,11.99 5,9.5z"/>
|
||||
|
@@ -19,10 +19,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/search_bar_margin"
|
||||
android:layout_marginStart="@dimen/search_bar_margin"
|
||||
android:layout_marginEnd="@dimen/search_bar_margin"
|
||||
android:layout_marginBottom="@dimen/search_bar_margin_bottom">
|
||||
android:layout_margin="@dimen/search_bar_margin">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/search_bar"
|
||||
@@ -34,7 +31,7 @@
|
||||
android:id="@+id/search_action_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/search_bar_height"
|
||||
android:layout_marginStart="-2dp"
|
||||
android:paddingStart="4dp"
|
||||
android:background="@drawable/search_bar_selected_background"
|
||||
android:contentInsetStartWithNavigation="@dimen/search_bar_content_inset"
|
||||
android:navigationIcon="@drawable/ic_homepage_search">
|
||||
@@ -43,16 +40,11 @@
|
||||
style="@style/TextAppearance.SearchBar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="-4dp"
|
||||
android:layout_gravity="start"
|
||||
android:text="@string/search_menu"/>
|
||||
</Toolbar>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/account_avatar"
|
||||
android:layout_width="@dimen/avatar_length"
|
||||
android:layout_height="@dimen/avatar_length"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:contentDescription="@string/search_bar_account_avatar_content_description"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
@@ -65,34 +65,26 @@
|
||||
android:orientation="vertical"
|
||||
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/contextual_suggestion_content"
|
||||
<ImageView
|
||||
android:id="@+id/account_avatar"
|
||||
android:layout_width="@dimen/avatar_length"
|
||||
android:layout_height="@dimen/avatar_length"
|
||||
android:layout_marginTop="@dimen/avatar_margin_top"
|
||||
android:layout_marginEnd="@dimen/avatar_margin_end"
|
||||
android:layout_gravity="end"
|
||||
android:visibility="invisible"
|
||||
android:accessibilityTraversalAfter="@id/homepage_title"
|
||||
android:contentDescription="@string/search_bar_account_avatar_content_description"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/homepage_title"
|
||||
android:text="@string/settings_label"
|
||||
style="@style/HomepageTitleText"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/suggestion_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/suggestion_height"
|
||||
android:paddingHorizontal="@dimen/suggestion_padding_horizontal"
|
||||
android:paddingVertical="@dimen/suggestion_padding_vertical"
|
||||
android:orientation="vertical"
|
||||
android:gravity="bottom"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/suggestion_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings_label"
|
||||
style="@style/ContextualSuggestionText"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/suggestion_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/suggestion_button_margin_top"
|
||||
android:paddingHorizontal="@dimen/suggestion_button_padding_horizontal"
|
||||
android:visibility="gone"
|
||||
style="@style/ActionPrimaryButton"/>
|
||||
|
||||
</LinearLayout>
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<include layout="@layout/search_bar"/>
|
||||
|
||||
|
@@ -21,7 +21,7 @@
|
||||
<color name="homepage_support_background">#3F5FBD</color>
|
||||
<color name="homepage_card_dismissal_background">@*android:color/material_grey_900</color>
|
||||
<color name="contextual_card_background">@*android:color/material_grey_900</color>
|
||||
<color name="search_bar_background">@*android:color/material_grey_800</color>
|
||||
<color name="search_bar_background">@*android:color/material_grey_900</color>
|
||||
<!-- Dialog background color. -->
|
||||
<color name="dialog_background">@*android:color/material_grey_800</color>
|
||||
<color name="notification_importance_selection_bg">@*android:color/material_grey_800</color>
|
||||
|
@@ -131,25 +131,21 @@
|
||||
<dimen name="switchbar_subsettings_margin_start">72dp</dimen>
|
||||
<dimen name="switchbar_subsettings_margin_end">16dp</dimen>
|
||||
|
||||
<!-- Search bar and avatar -->
|
||||
<dimen name="search_bar_margin">24dp</dimen>
|
||||
<dimen name="search_bar_margin_bottom">16dp</dimen>
|
||||
<dimen name="search_bar_height">48dp</dimen>
|
||||
<dimen name="search_bar_text_size">16sp</dimen>
|
||||
<dimen name="search_bar_card_elevation">2dp</dimen>
|
||||
<dimen name="search_bar_content_inset">64dp</dimen>
|
||||
<dimen name="avatar_length">@dimen/search_bar_height</dimen>
|
||||
<!-- Search bar -->
|
||||
<dimen name="search_bar_margin">16dp</dimen>
|
||||
<dimen name="search_bar_height">52dp</dimen>
|
||||
<dimen name="search_bar_text_size">20sp</dimen>
|
||||
<dimen name="search_bar_corner_radius">28dp</dimen>
|
||||
<dimen name="search_bar_content_inset">56dp</dimen>
|
||||
|
||||
<!-- Contextual suggestions -->
|
||||
<dimen name="suggestion_height">232dp</dimen>
|
||||
<dimen name="suggestion_padding_horizontal">24dp</dimen>
|
||||
<dimen name="suggestion_padding_vertical">8dp</dimen>
|
||||
<dimen name="suggestion_button_margin_top">16dp</dimen>
|
||||
<dimen name="suggestion_button_padding_horizontal">24dp</dimen>
|
||||
<!-- Avatar -->
|
||||
<dimen name="avatar_length">48dp</dimen>
|
||||
<dimen name="avatar_margin_top">56dp</dimen>
|
||||
<dimen name="avatar_margin_end">24dp</dimen>
|
||||
|
||||
<!-- Tool bar text -->
|
||||
<dimen name="tool_bar_max_text_size">36sp</dimen>
|
||||
<dimen name="tool_bar_min_text_size">24sp</dimen>
|
||||
<!-- Homepage title -->
|
||||
<dimen name="homepage_title_margin_bottom">8dp</dimen>
|
||||
<dimen name="homepage_title_margin_horizontal">24dp</dimen>
|
||||
|
||||
<!-- Dimensions for Wifi Assistant Card -->
|
||||
<dimen name="wifi_assistant_padding_top_bottom">16dp</dimen>
|
||||
|
@@ -310,6 +310,7 @@
|
||||
<style name="TextAppearance.SearchBar"
|
||||
parent="@*android:style/TextAppearance.DeviceDefault.Widget.Toolbar.Subtitle">
|
||||
<item name="android:textSize">@dimen/search_bar_text_size</item>
|
||||
<item name="android:textColor">?android:attr/textColorTertiary</item>
|
||||
<item name="android:singleLine">true</item>
|
||||
</style>
|
||||
|
||||
@@ -418,7 +419,6 @@
|
||||
</style>
|
||||
|
||||
<style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button.Colored"/>
|
||||
|
||||
<style name="ActionSecondaryButton" parent="android:Widget.DeviceDefault.Button"/>
|
||||
|
||||
<style name="LockPatternContainerStyle">
|
||||
@@ -481,11 +481,8 @@
|
||||
</style>
|
||||
|
||||
<style name="SearchBarStyle">
|
||||
<item name="android:layout_marginEnd">@dimen/search_bar_margin</item>
|
||||
<item name="cardCornerRadius">34dp</item>
|
||||
<item name="enforceMaterialTheme">true</item>
|
||||
<item name="cardElevation">3dp</item>
|
||||
<item name="shapeAppearance">@null</item>
|
||||
<item name="cardCornerRadius">@dimen/search_bar_corner_radius</item>
|
||||
<item name="cardElevation">0dp</item>
|
||||
</style>
|
||||
|
||||
<style name="ConditionCardBorderlessButton"
|
||||
@@ -789,13 +786,11 @@
|
||||
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||
</style>
|
||||
|
||||
<style name="ContextualSuggestionText"
|
||||
parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title">
|
||||
<item name="android:autoSizeTextType">uniform</item>
|
||||
<item name="android:autoSizeMaxTextSize">@dimen/tool_bar_max_text_size</item>
|
||||
<item name="android:autoSizeMinTextSize">@dimen/tool_bar_min_text_size</item>
|
||||
<item name="android:maxLines">3</item>
|
||||
<item name="android:gravity">bottom</item>
|
||||
<style name="HomepageTitleText" parent="ToolbarText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginBottom">@dimen/homepage_title_margin_bottom</item>
|
||||
<item name="android:layout_marginHorizontal">@dimen/homepage_title_margin_horizontal</item>
|
||||
</style>
|
||||
|
||||
<style name="RequestManageCredentialsButtonPanel">
|
||||
@@ -883,16 +878,7 @@
|
||||
<item name="android:textColor">?android:attr/textColorSecondary</item>
|
||||
</style>
|
||||
|
||||
<style name="ToolbarText.Collapsed"
|
||||
parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title">
|
||||
</style>
|
||||
|
||||
<style name="ToolbarText"
|
||||
parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title">
|
||||
<item name="android:textSize">@dimen/tool_bar_max_text_size</item>
|
||||
</style>
|
||||
|
||||
<style name="ToolbarText.MoreThanTwoLines">
|
||||
<item name="android:textSize">@dimen/tool_bar_min_text_size</item>
|
||||
</style>
|
||||
<style name="ToolbarText.Collapsed" parent="CollapsingToolbarTitle.Collapsed"/>
|
||||
<style name="ToolbarText" parent="CollapsingToolbarTitle"/>
|
||||
<style name="ToolbarText.MoreThanTwoLines" parent="CollapsingToolbarTitle.MoreThanTwoLines"/>
|
||||
</resources>
|
||||
|
@@ -17,7 +17,6 @@
|
||||
package com.android.settings.accounts;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -65,14 +64,23 @@ public class AvatarViewMixin implements LifecycleObserver {
|
||||
private final Context mContext;
|
||||
private final ImageView mAvatarView;
|
||||
private final MutableLiveData<Bitmap> mAvatarImage;
|
||||
private final ActivityManager mActivityManager;
|
||||
|
||||
@VisibleForTesting
|
||||
String mAccountName;
|
||||
|
||||
/**
|
||||
* @return true if the avatar icon is supported.
|
||||
*/
|
||||
public static boolean isAvatarSupported(Context context) {
|
||||
if (!context.getResources().getBoolean(R.bool.config_show_avatar_in_homepage)) {
|
||||
Log.d(TAG, "Feature disabled by config. Skipping");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public AvatarViewMixin(SettingsHomepageActivity activity, ImageView avatarView) {
|
||||
mContext = activity.getApplicationContext();
|
||||
mActivityManager = mContext.getSystemService(ActivityManager.class);
|
||||
mAvatarView = avatarView;
|
||||
mAvatarView.setOnClickListener(v -> {
|
||||
Intent intent;
|
||||
@@ -117,14 +125,6 @@ public class AvatarViewMixin implements LifecycleObserver {
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
public void onStart() {
|
||||
if (!mContext.getResources().getBoolean(R.bool.config_show_avatar_in_homepage)) {
|
||||
Log.d(TAG, "Feature disabled by config. Skipping");
|
||||
return;
|
||||
}
|
||||
if (mActivityManager.isLowRamDevice()) {
|
||||
Log.d(TAG, "Feature disabled on low ram device. Skipping");
|
||||
return;
|
||||
}
|
||||
if (hasAccount()) {
|
||||
loadAccount();
|
||||
} else {
|
||||
|
@@ -43,6 +43,25 @@ public class SettingsHomepageActivity extends FragmentActivity {
|
||||
|
||||
private static final String TAG = "SettingsHomepageActivity";
|
||||
|
||||
private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300;
|
||||
|
||||
private View mHomepageView;
|
||||
private View mSuggestionView;
|
||||
|
||||
/**
|
||||
* Shows the homepage and shows/hides the suggestion together. Only allows to be executed once
|
||||
* to avoid the flicker caused by the suggestion suddenly appearing/disappearing.
|
||||
*/
|
||||
public void showHomepageWithSuggestion(boolean showSuggestion) {
|
||||
if (mHomepageView == null) {
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
|
||||
mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
|
||||
mHomepageView.setVisibility(View.VISIBLE);
|
||||
mHomepageView = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -56,15 +75,23 @@ public class SettingsHomepageActivity extends FragmentActivity {
|
||||
FeatureFactory.getFactory(this).getSearchFeatureProvider()
|
||||
.initSearchToolbar(this /* activity */, toolbar, SettingsEnums.SETTINGS_HOMEPAGE);
|
||||
|
||||
final ImageView avatarView = findViewById(R.id.account_avatar);
|
||||
getLifecycle().addObserver(new AvatarViewMixin(this, avatarView));
|
||||
getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
|
||||
|
||||
if (!getSystemService(ActivityManager.class).isLowRamDevice()) {
|
||||
// Only allow contextual features on high ram devices.
|
||||
// Only allow features on high ram devices.
|
||||
final ImageView avatarView = findViewById(R.id.account_avatar);
|
||||
if (AvatarViewMixin.isAvatarSupported(this)) {
|
||||
avatarView.setVisibility(View.VISIBLE);
|
||||
getLifecycle().addObserver(new AvatarViewMixin(this, avatarView));
|
||||
}
|
||||
|
||||
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SILKY_HOME)) {
|
||||
showSuggestionFragment();
|
||||
} else {
|
||||
findViewById(R.id.homepage_title).setVisibility(View.GONE);
|
||||
avatarView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
|
||||
showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content);
|
||||
}
|
||||
@@ -81,9 +108,16 @@ public class SettingsHomepageActivity extends FragmentActivity {
|
||||
return;
|
||||
}
|
||||
|
||||
mSuggestionView = findViewById(R.id.suggestion_content);
|
||||
mHomepageView = findViewById(R.id.settings_homepage_container);
|
||||
// Hide the homepage for preparing the suggestion.
|
||||
mHomepageView.setVisibility(View.GONE);
|
||||
// Schedule a timer to show the homepage and hide the suggestion on timeout.
|
||||
mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false),
|
||||
HOMEPAGE_LOADING_TIMEOUT_MS);
|
||||
try {
|
||||
showFragment(fragment.newInstance(), R.id.contextual_suggestion_content);
|
||||
} catch (IllegalAccessException | InstantiationException e) {
|
||||
showFragment(fragment.getConstructor().newInstance(), R.id.suggestion_content);
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Cannot show fragment", e);
|
||||
}
|
||||
}
|
||||
@@ -110,10 +144,7 @@ public class SettingsHomepageActivity extends FragmentActivity {
|
||||
|
||||
private int getSearchBoxHeight() {
|
||||
final int searchBarHeight = getResources().getDimensionPixelSize(R.dimen.search_bar_height);
|
||||
final int searchBarMarginTop = getResources().getDimensionPixelSize(
|
||||
R.dimen.search_bar_margin);
|
||||
final int searchBarMarginBottom = getResources().getDimensionPixelSize(
|
||||
R.dimen.search_bar_margin_bottom);
|
||||
return searchBarHeight + searchBarMarginTop + searchBarMarginBottom;
|
||||
final int searchBarMargin = getResources().getDimensionPixelSize(R.dimen.search_bar_margin);
|
||||
return searchBarHeight + searchBarMargin * 2;
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -57,7 +56,6 @@ import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowActivityManager;
|
||||
import org.robolectric.shadows.ShadowContentResolver;
|
||||
import org.robolectric.shadows.ShadowPackageManager;
|
||||
|
||||
@@ -97,31 +95,7 @@ public class AvatarViewMixinTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onStart_configDisabled_doNothing() {
|
||||
final AvatarViewMixin mixin = spy(new AvatarViewMixin(mActivity, mImageView));
|
||||
mixin.onStart();
|
||||
|
||||
verify(mixin, never()).hasAccount();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onStart_lowRamDevice_doNothing() {
|
||||
final AvatarViewMixin mixin = spy(new AvatarViewMixin(mActivity, mImageView));
|
||||
|
||||
final ShadowActivityManager activityManager =
|
||||
Shadow.extract(mContext.getSystemService(ActivityManager.class));
|
||||
activityManager.setIsLowRamDevice(true);
|
||||
|
||||
mixin.onStart();
|
||||
|
||||
verify(mixin, never()).hasAccount();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999",
|
||||
shadows = {
|
||||
BatteryFixSliceTest.ShadowBatteryTipLoader.class
|
||||
})
|
||||
@Config(shadows = BatteryFixSliceTest.ShadowBatteryTipLoader.class)
|
||||
public void onStart_useMockAvatarViewMixin_shouldBeExecuted() {
|
||||
final AvatarViewMixin mockAvatar = spy(new AvatarViewMixin(mActivity, mImageView));
|
||||
|
||||
@@ -132,7 +106,6 @@ public class AvatarViewMixinTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999")
|
||||
public void onStart_noAccount_mAccountNameShouldBeNull() {
|
||||
final AvatarViewMixin avatarViewMixin = new AvatarViewMixin(mActivity, mImageView);
|
||||
avatarViewMixin.mAccountName = FAKE_ACCOUNT;
|
||||
|
@@ -25,16 +25,20 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.os.Build;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.core.HideNonSystemOverlayMixin;
|
||||
import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
|
||||
import com.android.settings.homepage.contextualcards.slices.BatteryFixSliceTest;
|
||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -46,15 +50,20 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.android.controller.ActivityController;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowActivityManager;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {ShadowUserManager.class,
|
||||
SettingsHomepageActivityTest.ShadowSuggestionFeatureProviderImpl.class})
|
||||
public class SettingsHomepageActivityTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
FeatureFlagUtils.setEnabled(RuntimeEnvironment.application, FeatureFlags.SILKY_HOME, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -66,6 +75,77 @@ public class SettingsHomepageActivityTest {
|
||||
assertThat(frameLayout.getLayoutTransition()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launch_configDisabled_shouldHideAvatar() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
|
||||
final View avatarView = activity.findViewById(R.id.account_avatar);
|
||||
assertThat(avatarView.getVisibility()).isNotEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999")
|
||||
public void launch_configEnabled_shouldShowAvatar() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
|
||||
final View avatarView = activity.findViewById(R.id.account_avatar);
|
||||
assertThat(avatarView.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999")
|
||||
public void launch_LowRamDevice_shouldHideAvatar() {
|
||||
final ShadowActivityManager activityManager = Shadow.extract(
|
||||
RuntimeEnvironment.application.getSystemService(ActivityManager.class));
|
||||
activityManager.setIsLowRamDevice(true);
|
||||
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
|
||||
final View avatarView = activity.findViewById(R.id.account_avatar);
|
||||
assertThat(avatarView.getVisibility()).isNotEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showHomepageWithSuggestion_showSuggestion() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
final View viewRoot = activity.findViewById(R.id.settings_homepage_container);
|
||||
final View suggestionTile = activity.findViewById(R.id.suggestion_content);
|
||||
|
||||
activity.showHomepageWithSuggestion(true);
|
||||
|
||||
assertThat(viewRoot.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(suggestionTile.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showHomepageWithSuggestion_hideSuggestion() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
final View viewRoot = activity.findViewById(R.id.settings_homepage_container);
|
||||
final View suggestionTile = activity.findViewById(R.id.suggestion_content);
|
||||
|
||||
activity.showHomepageWithSuggestion(false);
|
||||
|
||||
assertThat(viewRoot.getVisibility()).isEqualTo(View.VISIBLE);
|
||||
assertThat(suggestionTile.getVisibility()).isEqualTo(View.GONE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void showHomepageWithSuggestion_callTwice_shouldKeepPreviousVisibility() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
SettingsHomepageActivity.class).create().get();
|
||||
final View suggestionTile = activity.findViewById(R.id.suggestion_content);
|
||||
|
||||
activity.showHomepageWithSuggestion(false);
|
||||
activity.showHomepageWithSuggestion(true);
|
||||
|
||||
assertThat(suggestionTile.getVisibility()).isEqualTo(View.GONE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {
|
||||
BatteryFixSliceTest.ShadowBatteryTipLoader.class
|
||||
@@ -114,4 +194,13 @@ public class SettingsHomepageActivityTest {
|
||||
assertThat(paramCaptor.getValue().privateFlags
|
||||
& SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Implements(SuggestionFeatureProviderImpl.class)
|
||||
public static class ShadowSuggestionFeatureProviderImpl {
|
||||
|
||||
@Implementation
|
||||
public Class<? extends Fragment> getContextualSuggestionFragment() {
|
||||
return Fragment.class;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user