Loading packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +22 −0 Original line number Original line Diff line number Diff line Loading @@ -87,6 +87,7 @@ public class BarChartPreference extends Preference { }; }; private int mMaxBarHeight; private int mMaxBarHeight; private boolean mIsLoading; private BarChartInfo mBarChartInfo; private BarChartInfo mBarChartInfo; public BarChartPreference(Context context) { public BarChartPreference(Context context) { Loading Loading @@ -134,12 +135,33 @@ public class BarChartPreference extends Preference { notifyChanged(); notifyChanged(); } } /** * Set loading state for {@link BarChartPreference}. * * By default, {@link BarChartPreference} doesn't care about it. * * But if user sets loading state to true explicitly, it means {@link BarChartPreference} * needs to take some time to load data. So we won't initialize any view now. * * Once the state is updated to false, we will start to initialize view again. * * @param isLoading whether or not {@link BarChartPreference} is in loading state. */ public void updateLoadingState(boolean isLoading) { mIsLoading = isLoading; notifyChanged(); } @Override @Override public void onBindViewHolder(PreferenceViewHolder holder) { public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); super.onBindViewHolder(holder); holder.setDividerAllowedAbove(true); holder.setDividerAllowedAbove(true); holder.setDividerAllowedBelow(true); holder.setDividerAllowedBelow(true); // If the state is loading, we just show a blank view. if (mIsLoading) { return; } // We must show title of bar chart. // We must show title of bar chart. bindChartTitleView(holder); bindChartTitleView(holder); Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +40 −5 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.view.View; import android.view.View; import android.widget.TextView; import android.widget.TextView; Loading @@ -46,6 +47,7 @@ public class BarChartPreferenceTest { private BarView mBarView2; private BarView mBarView2; private BarView mBarView3; private BarView mBarView3; private BarView mBarView4; private BarView mBarView4; private TextView mTitleView; private TextView mDetailsView; private TextView mDetailsView; private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder; private BarChartPreference mPreference; private BarChartPreference mPreference; Loading @@ -63,6 +65,7 @@ public class BarChartPreferenceTest { mBarView2 = mBarChartView.findViewById(R.id.bar_view2); mBarView2 = mBarChartView.findViewById(R.id.bar_view2); mBarView3 = mBarChartView.findViewById(R.id.bar_view3); mBarView3 = mBarChartView.findViewById(R.id.bar_view3); mBarView4 = mBarChartView.findViewById(R.id.bar_view4); mBarView4 = mBarChartView.findViewById(R.id.bar_view4); mTitleView = mBarChartView.findViewById(R.id.bar_chart_title); mDetailsView = mBarChartView.findViewById(R.id.bar_chart_details); mDetailsView = mBarChartView.findViewById(R.id.bar_chart_details); mBarChartInfo = new BarChartInfo.Builder() mBarChartInfo = new BarChartInfo.Builder() Loading @@ -76,7 +79,6 @@ public class BarChartPreferenceTest { @Test @Test public void initializeBarChart_titleSet_shouldSetTitleInChartView() { public void initializeBarChart_titleSet_shouldSetTitleInChartView() { final TextView titleView = mBarChartView.findViewById(R.id.bar_chart_title); final BarChartInfo barChartInfo = new BarChartInfo.Builder() final BarChartInfo barChartInfo = new BarChartInfo.Builder() .setTitle(R.string.debug_app) .setTitle(R.string.debug_app) .build(); .build(); Loading @@ -84,8 +86,8 @@ public class BarChartPreferenceTest { mPreference.initializeBarChart(barChartInfo); mPreference.initializeBarChart(barChartInfo); mPreference.onBindViewHolder(mHolder); mPreference.onBindViewHolder(mHolder); assertThat(titleView.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mTitleView.getVisibility()).isEqualTo(View.VISIBLE); assertThat(titleView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); assertThat(mTitleView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); } } @Test @Test Loading @@ -99,8 +101,7 @@ public class BarChartPreferenceTest { // We don't add any bar view yet. // We don't add any bar view yet. mPreference.onBindViewHolder(mHolder); mPreference.onBindViewHolder(mHolder); assertThat(mBarChartView.findViewById(R.id.bar_chart_title).getVisibility()) assertThat(mTitleView.getVisibility()).isEqualTo(View.VISIBLE); .isEqualTo(View.VISIBLE); assertThat(mBarChartView.findViewById(R.id.empty_view).getVisibility()) assertThat(mBarChartView.findViewById(R.id.empty_view).getVisibility()) .isEqualTo(View.VISIBLE); .isEqualTo(View.VISIBLE); assertThat(mBarChartView.findViewById(R.id.bar_views_container).getVisibility()) assertThat(mBarChartView.findViewById(R.id.bar_views_container).getVisibility()) Loading Loading @@ -302,4 +303,38 @@ public class BarChartPreferenceTest { assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.hasOnClickListeners()).isTrue(); assertThat(mBarView1.hasOnClickListeners()).isTrue(); } } @Test public void onBindViewHolder_loadingStateIsTrue_shouldNotInitAnyView() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.initializeBarChart(mBarChartInfo); mPreference.setBarViewInfos(barViewsInfo); mPreference.updateLoadingState(true /* isLoading */); mPreference.onBindViewHolder(mHolder); assertThat(TextUtils.isEmpty(mTitleView.getText())).isTrue(); assertThat(TextUtils.isEmpty(mDetailsView.getText())).isTrue(); } @Test public void onBindViewHolder_loadingStateIsFalse_shouldInitAnyView() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.initializeBarChart(mBarChartInfo); mPreference.setBarViewInfos(barViewsInfo); mPreference.updateLoadingState(false /* isLoading */); mPreference.onBindViewHolder(mHolder); assertThat(TextUtils.isEmpty(mTitleView.getText())).isFalse(); assertThat(TextUtils.isEmpty(mDetailsView.getText())).isFalse(); } } } Loading
packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +22 −0 Original line number Original line Diff line number Diff line Loading @@ -87,6 +87,7 @@ public class BarChartPreference extends Preference { }; }; private int mMaxBarHeight; private int mMaxBarHeight; private boolean mIsLoading; private BarChartInfo mBarChartInfo; private BarChartInfo mBarChartInfo; public BarChartPreference(Context context) { public BarChartPreference(Context context) { Loading Loading @@ -134,12 +135,33 @@ public class BarChartPreference extends Preference { notifyChanged(); notifyChanged(); } } /** * Set loading state for {@link BarChartPreference}. * * By default, {@link BarChartPreference} doesn't care about it. * * But if user sets loading state to true explicitly, it means {@link BarChartPreference} * needs to take some time to load data. So we won't initialize any view now. * * Once the state is updated to false, we will start to initialize view again. * * @param isLoading whether or not {@link BarChartPreference} is in loading state. */ public void updateLoadingState(boolean isLoading) { mIsLoading = isLoading; notifyChanged(); } @Override @Override public void onBindViewHolder(PreferenceViewHolder holder) { public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); super.onBindViewHolder(holder); holder.setDividerAllowedAbove(true); holder.setDividerAllowedAbove(true); holder.setDividerAllowedBelow(true); holder.setDividerAllowedBelow(true); // If the state is loading, we just show a blank view. if (mIsLoading) { return; } // We must show title of bar chart. // We must show title of bar chart. bindChartTitleView(holder); bindChartTitleView(holder); Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +40 −5 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.view.View; import android.view.View; import android.widget.TextView; import android.widget.TextView; Loading @@ -46,6 +47,7 @@ public class BarChartPreferenceTest { private BarView mBarView2; private BarView mBarView2; private BarView mBarView3; private BarView mBarView3; private BarView mBarView4; private BarView mBarView4; private TextView mTitleView; private TextView mDetailsView; private TextView mDetailsView; private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder; private BarChartPreference mPreference; private BarChartPreference mPreference; Loading @@ -63,6 +65,7 @@ public class BarChartPreferenceTest { mBarView2 = mBarChartView.findViewById(R.id.bar_view2); mBarView2 = mBarChartView.findViewById(R.id.bar_view2); mBarView3 = mBarChartView.findViewById(R.id.bar_view3); mBarView3 = mBarChartView.findViewById(R.id.bar_view3); mBarView4 = mBarChartView.findViewById(R.id.bar_view4); mBarView4 = mBarChartView.findViewById(R.id.bar_view4); mTitleView = mBarChartView.findViewById(R.id.bar_chart_title); mDetailsView = mBarChartView.findViewById(R.id.bar_chart_details); mDetailsView = mBarChartView.findViewById(R.id.bar_chart_details); mBarChartInfo = new BarChartInfo.Builder() mBarChartInfo = new BarChartInfo.Builder() Loading @@ -76,7 +79,6 @@ public class BarChartPreferenceTest { @Test @Test public void initializeBarChart_titleSet_shouldSetTitleInChartView() { public void initializeBarChart_titleSet_shouldSetTitleInChartView() { final TextView titleView = mBarChartView.findViewById(R.id.bar_chart_title); final BarChartInfo barChartInfo = new BarChartInfo.Builder() final BarChartInfo barChartInfo = new BarChartInfo.Builder() .setTitle(R.string.debug_app) .setTitle(R.string.debug_app) .build(); .build(); Loading @@ -84,8 +86,8 @@ public class BarChartPreferenceTest { mPreference.initializeBarChart(barChartInfo); mPreference.initializeBarChart(barChartInfo); mPreference.onBindViewHolder(mHolder); mPreference.onBindViewHolder(mHolder); assertThat(titleView.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mTitleView.getVisibility()).isEqualTo(View.VISIBLE); assertThat(titleView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); assertThat(mTitleView.getText()).isEqualTo(mContext.getText(R.string.debug_app)); } } @Test @Test Loading @@ -99,8 +101,7 @@ public class BarChartPreferenceTest { // We don't add any bar view yet. // We don't add any bar view yet. mPreference.onBindViewHolder(mHolder); mPreference.onBindViewHolder(mHolder); assertThat(mBarChartView.findViewById(R.id.bar_chart_title).getVisibility()) assertThat(mTitleView.getVisibility()).isEqualTo(View.VISIBLE); .isEqualTo(View.VISIBLE); assertThat(mBarChartView.findViewById(R.id.empty_view).getVisibility()) assertThat(mBarChartView.findViewById(R.id.empty_view).getVisibility()) .isEqualTo(View.VISIBLE); .isEqualTo(View.VISIBLE); assertThat(mBarChartView.findViewById(R.id.bar_views_container).getVisibility()) assertThat(mBarChartView.findViewById(R.id.bar_views_container).getVisibility()) Loading Loading @@ -302,4 +303,38 @@ public class BarChartPreferenceTest { assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.hasOnClickListeners()).isTrue(); assertThat(mBarView1.hasOnClickListeners()).isTrue(); } } @Test public void onBindViewHolder_loadingStateIsTrue_shouldNotInitAnyView() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.initializeBarChart(mBarChartInfo); mPreference.setBarViewInfos(barViewsInfo); mPreference.updateLoadingState(true /* isLoading */); mPreference.onBindViewHolder(mHolder); assertThat(TextUtils.isEmpty(mTitleView.getText())).isTrue(); assertThat(TextUtils.isEmpty(mDetailsView.getText())).isTrue(); } @Test public void onBindViewHolder_loadingStateIsFalse_shouldInitAnyView() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.initializeBarChart(mBarChartInfo); mPreference.setBarViewInfos(barViewsInfo); mPreference.updateLoadingState(false /* isLoading */); mPreference.onBindViewHolder(mHolder); assertThat(TextUtils.isEmpty(mTitleView.getText())).isFalse(); assertThat(TextUtils.isEmpty(mDetailsView.getText())).isFalse(); } } }