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

Commit 3683289e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow small icons in TwoTargetPreference"

parents 2449285e a93c40ee
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);
    }
}