Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a93c40ee authored by Fan Zhang's avatar Fan Zhang
Browse files

Allow small icons in TwoTargetPreference

Bug: 65182905
Test: robotests
Change-Id: I080001325dfc0a5a2a899f3b0331d04fa978309c
parent 1290b89d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
    <dimen name="user_spinner_padding_sides">20dp</dimen>
    <dimen name="user_spinner_item_height">56dp</dimen>

    <dimen name="two_target_pref_small_icon_size">24dp</dimen>
    <!-- Lock icon for preferences locked by admin -->
    <dimen name="restricted_icon_size">16dp</dimen>
    <dimen name="restricted_icon_padding">4dp</dimen>
+20 −5
Original line number Diff line number Diff line
@@ -21,41 +21,56 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class TwoTargetPreference extends Preference {

    private boolean mUseSmallIcon;
    private int mSmallIconSize;

    public TwoTargetPreference(Context context, AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
        init(context);
    }

    public TwoTargetPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
        init(context);
    }

    public TwoTargetPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        init(context);
    }

    public TwoTargetPreference(Context context) {
        super(context);
        init();
        init(context);
    }

    private void init() {
    private void init(Context context) {
        setLayoutResource(R.layout.preference_two_target);
        mSmallIconSize = context.getResources().getDimensionPixelSize(
                R.dimen.two_target_pref_small_icon_size);
        final int secondTargetResId = getSecondTargetResId();
        if (secondTargetResId != 0) {
            setWidgetLayoutResource(secondTargetResId);
        }
    }

    public void setUseSmallIcon(boolean useSmallIcon) {
        mUseSmallIcon = useSmallIcon;
    }

    @Override
    public void onBindViewHolder(PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);
        if (mUseSmallIcon) {
            ImageView icon = holder.itemView.findViewById(android.R.id.icon);
            icon.setLayoutParams(new LinearLayout.LayoutParams(mSmallIconSize, mSmallIconSize));
        }
        final View divider = holder.findViewById(R.id.two_target_divider);
        final View widgetFrame = holder.findViewById(android.R.id.widget_frame);
        final boolean shouldHideSecondTarget = shouldHideSecondTarget();
+46 −19
Original line number Diff line number Diff line
@@ -16,34 +16,31 @@

package com.android.settingslib;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

import android.content.Context;
import android.support.v7.preference.PreferenceViewHolder;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@RunWith(SettingsLibRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class TwoTargetPreferenceTest {

    private PreferenceViewHolder mViewHolder;
    @Mock
    private View mDivider;
    @Mock
    private View mWidgetFrame;
    private View mRootView;
    private TwoTargetPreference mPreference;
    private Context mContext;

@@ -52,11 +49,11 @@ public class TwoTargetPreferenceTest {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mPreference = spy(new TwoTargetPreference(mContext));
        mViewHolder = PreferenceViewHolder.createInstanceForTests(mock(View.class));
        when(mViewHolder.findViewById(R.id.two_target_divider))
                .thenReturn(mDivider);
        when(mViewHolder.findViewById(android.R.id.widget_frame))
                .thenReturn(mWidgetFrame);
        mRootView = View.inflate(mContext, R.layout.preference_two_target, null /* parent */);
        mViewHolder = PreferenceViewHolder.createInstanceForTests(mRootView);

        mDivider = mViewHolder.findViewById(R.id.two_target_divider);
        mWidgetFrame = mViewHolder.findViewById(android.R.id.widget_frame);
    }

    @Test
@@ -65,8 +62,8 @@ public class TwoTargetPreferenceTest {

        mPreference.onBindViewHolder(mViewHolder);

        verify(mDivider).setVisibility(View.GONE);
        verify(mWidgetFrame).setVisibility(View.GONE);
        assertThat(mDivider.getVisibility()).isEqualTo(View.GONE);
        assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.GONE);
    }

    @Test
@@ -75,7 +72,37 @@ public class TwoTargetPreferenceTest {

        mPreference.onBindViewHolder(mViewHolder);

        verify(mDivider).setVisibility(View.VISIBLE);
        verify(mWidgetFrame).setVisibility(View.VISIBLE);
        assertThat(mDivider.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mWidgetFrame.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void bind_smallIcon_shouldUseSmallIcon() {
        mPreference.setUseSmallIcon(true);

        mPreference.onBindViewHolder(mViewHolder);

        final int smallIconSize = mContext.getResources().getDimensionPixelSize(
                R.dimen.two_target_pref_small_icon_size);
        final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mViewHolder
                .findViewById(android.R.id.icon)
                .getLayoutParams();

        assertThat(layoutParams.width).isEqualTo(smallIconSize);
        assertThat(layoutParams.height).isEqualTo(smallIconSize);
    }

    @Test
    public void bind_normalIcon_shouldUseNormalIcon() {
        mPreference.setUseSmallIcon(false);

        mPreference.onBindViewHolder(mViewHolder);

        final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mViewHolder
                .findViewById(android.R.id.icon)
                .getLayoutParams();

        assertThat(layoutParams.width).isEqualTo(ViewGroup.LayoutParams.WRAP_CONTENT);
        assertThat(layoutParams.height).isEqualTo(ViewGroup.LayoutParams.WRAP_CONTENT);
    }
}