Loading packages/SettingsLib/res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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> Loading packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java +20 −5 Original line number Diff line number Diff line Loading @@ -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(); Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java +46 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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 Loading @@ -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); } } Loading
packages/SettingsLib/res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java +20 −5 Original line number Diff line number Diff line Loading @@ -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(); Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java +46 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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 Loading @@ -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); } }