Loading packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +13 −58 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ import androidx.preference.PreferenceViewHolder; import java.util.Arrays; /** * This BarChartPreference shows four bar views in this preference at most. * This BarChartPreference shows up to four bar views in this preference at most. * * <p>The following code sample shows a typical use, with an XML layout and code to initialize the * contents of the BarChartPreference: Loading Loading @@ -74,71 +74,28 @@ public class BarChartPreference extends Preference { }; private int mMaxBarHeight; private @StringRes int mTitleId; private @StringRes int mDetailsId; @StringRes private int mTitleId; @StringRes private int mDetailsId; private BarViewInfo[] mBarViewsInfo; private View.OnClickListener mDetailsOnClickListener; /** * Constructs a new BarChartPreference with the given context's theme. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. */ public BarChartPreference(Context context) { super(context); init(); } /** * Constructs a new BarChartPreference with the given context's theme and the supplied * attribute set. * It sets a layout with settings bar chart style * * @param context the Context the view is running in * @param attrs the attributes of the XML tag that is inflating the view. */ public BarChartPreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } /** * Constructs a new BarChartPreference with the given context's theme, the supplied * attribute set, and default style attribute. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyleAttr An attribute in the current theme that contains a * reference to a style resource that supplies default * values for the view. Can be 0 to not look for * defaults. */ public BarChartPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * Constructs a new BarChartPreference with the given context's theme, the supplied * attribute set, and default styles. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyleAttr An attribute in the current theme that contains a * reference to a style resource that supplies default * values for the view. Can be 0 to not look for * defaults. * @param defStyleRes A resource identifier of a style resource that * supplies default values for the view, used only if * defStyleAttr is 0 or can not be found in the theme. * Can be 0 to not look for defaults. */ public BarChartPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); Loading Loading @@ -172,8 +129,6 @@ public class BarChartPreference extends Preference { /** * Set all bar view information which you'd like to show in preference. * * <p>This method helps you do a sort by {@linkBarViewInfo#mBarNumber} in descending order. * * @param barViewsInfo the barViewsInfo contain at least one {@link BarViewInfo}. */ public void setAllBarViewsInfo(@NonNull BarViewInfo[] barViewsInfo) { Loading @@ -181,7 +136,7 @@ public class BarChartPreference extends Preference { // Do a sort in descending order, the first element would have max {@link // BarViewInfo#mBarNumber} Arrays.sort(mBarViewsInfo); caculateAllBarViewsHeight(); calculateAllBarViewHeights(); notifyChanged(); } Loading Loading @@ -224,19 +179,19 @@ public class BarChartPreference extends Preference { continue; } barView.setVisibility(View.VISIBLE); barView.updateBarViewUI(mBarViewsInfo[index]); barView.updateView(mBarViewsInfo[index]); } } private void caculateAllBarViewsHeight() { private void calculateAllBarViewHeights() { // Since we sorted this array in advance, the first element must have the max {@link // BarViewInfo#mBarNumber}. final int maxBarViewNumber = mBarViewsInfo[0].getBarNumber(); // If the max number of bar view is zero, then we don't caculate the unit for bar height. final int unit = maxBarViewNumber == 0 ? 0 : mMaxBarHeight / maxBarViewNumber; // BarViewInfo#mHeight}. final int maxBarHeight = mBarViewsInfo[0].getHeight(); // If the max number of bar view is zero, then we don't calculate the unit for bar height. final int unit = maxBarHeight == 0 ? 0 : mMaxBarHeight / maxBarHeight; for (BarViewInfo barView : mBarViewsInfo) { barView.setBarHeight(barView.getBarNumber() * unit); barView.setNormalizedHeight(barView.getHeight() * unit); } } } packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java +10 −24 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; /** * A extension view for bar chart. * {@link View} for a single vertical bar with icon and summary. */ public class BarView extends LinearLayout { Loading @@ -41,24 +41,11 @@ public class BarView extends LinearLayout { private TextView mBarTitle; private TextView mBarSummary; /** * Constructs a new BarView with the given context's theme. * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. */ public BarView(Context context) { super(context); init(); } /** * Constructs a new BarView with the given context's theme and the supplied * attribute set. * * @param context the Context the view is running in * @param attrs the attributes of the XML tag that is inflating the view. */ public BarView(Context context, AttributeSet attrs) { super(context, attrs); init(); Loading @@ -77,17 +64,16 @@ public class BarView extends LinearLayout { } /** * This helps update the bar view UI with a {@link BarViewInfo}. * * @param barViewInfo A {@link BarViewInfo} saves bar view status. * Updates the view with a {@link BarViewInfo}. */ public void updateBarViewUI(BarViewInfo barViewInfo) { void updateView(BarViewInfo barViewInfo) { setOnClickListener(barViewInfo.getClickListener()); //Set height of bar view mBarView.getLayoutParams().height = barViewInfo.getBarHeight(); mBarView.getLayoutParams().height = barViewInfo.getNormalizedHeight(); mIcon.setImageDrawable(barViewInfo.getIcon()); // For now, we use the bar number as title. mBarTitle.setText(Integer.toString(barViewInfo.getBarNumber())); mBarSummary.setText(barViewInfo.getSummaryRes()); mBarTitle.setText(Integer.toString(barViewInfo.getHeight())); mBarSummary.setText(barViewInfo.getSummary()); } @VisibleForTesting Loading @@ -106,9 +92,9 @@ public class BarView extends LinearLayout { setGravity(Gravity.CENTER); mBarView = findViewById(R.id.bar_view); mIcon = (ImageView) findViewById(R.id.icon_view); mBarTitle = (TextView) findViewById(R.id.bar_title); mBarSummary = (TextView) findViewById(R.id.bar_summary); mIcon = findViewById(R.id.icon_view); mBarTitle = findViewById(R.id.bar_title); mBarSummary = findViewById(R.id.bar_summary); } private void setOnClickListner(View.OnClickListener listener) { Loading packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java +36 −81 Original line number Diff line number Diff line Loading @@ -31,116 +31,71 @@ import java.util.Comparator; public class BarViewInfo implements Comparable<BarViewInfo> { private final Drawable mIcon; private View.OnClickListener mListener; private @StringRes int mSummaryRes; private View.OnClickListener mClickListener; @StringRes private int mSummary; // A number indicates this bar's height. The larger number shows a higher bar view. private int mBarNumber; private int mHeight; // A real height of bar view. private int mBarHeight; private int mNormalizedHeight; /** * Construct a BarViewInfo instance. * * @param icon the icon of bar view. * @param barNumber the number of bar view. The larger number show a more height of bar view. * @param summaryRes the resource identifier of the string resource to be displayed * @return BarViewInfo object. * @param icon The icon of bar view. * @param barHeight The height of bar view. Larger number shows a higher bar view. * @param summary The string resource id for summary. */ public BarViewInfo(Drawable icon, @IntRange(from = 0) int barNumber, @StringRes int summaryRes) { public BarViewInfo(Drawable icon, @IntRange(from = 0) int barHeight, @StringRes int summary) { mIcon = icon; mBarNumber = barNumber; mSummaryRes = summaryRes; mHeight = barHeight; mSummary = summary; } /** * Set number for bar view. * * @param barNumber the number of bar view. The larger number shows a higher bar view. * Set a click listener for bar view. */ public void setBarNumber(@IntRange(from = 0) int barNumber) { mBarNumber = barNumber; public void setClickListener(@Nullable View.OnClickListener listener) { mClickListener = listener; } /** * Set summary resource for bar view * * @param resId the resource identifier of the string resource to be displayed */ public void setSummary(@StringRes int resId) { mSummaryRes = resId; @Override public int compareTo(BarViewInfo other) { // Descending order return Comparator.comparingInt((BarViewInfo barViewInfo) -> barViewInfo.mHeight) .compare(other, this); } /** * Set a click listner for bar view. * * @param listener the click listner is attached on bar view. */ public void setClickListener(@Nullable View.OnClickListener listener) { mListener = listener; void setHeight(@IntRange(from = 0) int height) { mHeight = height; } /** * Get the icon of bar view. * * @return Drawable the icon of bar view. */ public Drawable getIcon() { return mIcon; void setSummary(@StringRes int resId) { mSummary = resId; } /** * Get the OnClickListener of bar view. * * @return View.OnClickListener the click listner of bar view. */ public View.OnClickListener getListener() { return mListener; Drawable getIcon() { return mIcon; } /** * Get the real height of bar view. * * @return the real height of bar view. */ public int getBarHeight() { return mBarHeight; int getHeight() { return mHeight; } /** * Get summary resource of bar view. * * @return summary resource of bar view. */ public int getSummaryRes() { return mSummaryRes; View.OnClickListener getClickListener() { return mClickListener; } /** * Get the number of app uses this permisssion. * * @return the number of app uses this permission. */ public int getBarNumber() { return mBarNumber; @StringRes int getSummary() { return mSummary; } @Override public int compareTo(BarViewInfo other) { // Descending order return Comparator.comparingInt((BarViewInfo barViewInfo) -> barViewInfo.mBarNumber) .compare(other, this); void setNormalizedHeight(@IntRange(from = 0) int barHeight) { mNormalizedHeight = barHeight; } /** * Set a real height for bar view. * * <p>This method should not be called by outside. It usually should be called by * {@link BarChartPreference#caculateAllBarViewsHeight} * * @param barHeight the real bar height for bar view. */ void setBarHeight(@IntRange(from = 0) int barHeight) { mBarHeight = barHeight; int getNormalizedHeight() { return mNormalizedHeight; } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -208,4 +208,18 @@ public class BarChartPreferenceTest { assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.getSummary()).isEqualTo(mContext.getText(R.string.debug_app)); } @Test public void setAllBarViewsInfo_setClickListenerForBarView_barViewAttachClickListener() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.setAllBarViewsInfo(barViewsInfo); mPreference.onBindViewHolder(mHolder); assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.hasOnClickListeners()).isTrue(); } } Loading
packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartPreference.java +13 −58 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ import androidx.preference.PreferenceViewHolder; import java.util.Arrays; /** * This BarChartPreference shows four bar views in this preference at most. * This BarChartPreference shows up to four bar views in this preference at most. * * <p>The following code sample shows a typical use, with an XML layout and code to initialize the * contents of the BarChartPreference: Loading Loading @@ -74,71 +74,28 @@ public class BarChartPreference extends Preference { }; private int mMaxBarHeight; private @StringRes int mTitleId; private @StringRes int mDetailsId; @StringRes private int mTitleId; @StringRes private int mDetailsId; private BarViewInfo[] mBarViewsInfo; private View.OnClickListener mDetailsOnClickListener; /** * Constructs a new BarChartPreference with the given context's theme. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. */ public BarChartPreference(Context context) { super(context); init(); } /** * Constructs a new BarChartPreference with the given context's theme and the supplied * attribute set. * It sets a layout with settings bar chart style * * @param context the Context the view is running in * @param attrs the attributes of the XML tag that is inflating the view. */ public BarChartPreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } /** * Constructs a new BarChartPreference with the given context's theme, the supplied * attribute set, and default style attribute. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyleAttr An attribute in the current theme that contains a * reference to a style resource that supplies default * values for the view. Can be 0 to not look for * defaults. */ public BarChartPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * Constructs a new BarChartPreference with the given context's theme, the supplied * attribute set, and default styles. * It sets a layout with settings bar chart style * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyleAttr An attribute in the current theme that contains a * reference to a style resource that supplies default * values for the view. Can be 0 to not look for * defaults. * @param defStyleRes A resource identifier of a style resource that * supplies default values for the view, used only if * defStyleAttr is 0 or can not be found in the theme. * Can be 0 to not look for defaults. */ public BarChartPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); Loading Loading @@ -172,8 +129,6 @@ public class BarChartPreference extends Preference { /** * Set all bar view information which you'd like to show in preference. * * <p>This method helps you do a sort by {@linkBarViewInfo#mBarNumber} in descending order. * * @param barViewsInfo the barViewsInfo contain at least one {@link BarViewInfo}. */ public void setAllBarViewsInfo(@NonNull BarViewInfo[] barViewsInfo) { Loading @@ -181,7 +136,7 @@ public class BarChartPreference extends Preference { // Do a sort in descending order, the first element would have max {@link // BarViewInfo#mBarNumber} Arrays.sort(mBarViewsInfo); caculateAllBarViewsHeight(); calculateAllBarViewHeights(); notifyChanged(); } Loading Loading @@ -224,19 +179,19 @@ public class BarChartPreference extends Preference { continue; } barView.setVisibility(View.VISIBLE); barView.updateBarViewUI(mBarViewsInfo[index]); barView.updateView(mBarViewsInfo[index]); } } private void caculateAllBarViewsHeight() { private void calculateAllBarViewHeights() { // Since we sorted this array in advance, the first element must have the max {@link // BarViewInfo#mBarNumber}. final int maxBarViewNumber = mBarViewsInfo[0].getBarNumber(); // If the max number of bar view is zero, then we don't caculate the unit for bar height. final int unit = maxBarViewNumber == 0 ? 0 : mMaxBarHeight / maxBarViewNumber; // BarViewInfo#mHeight}. final int maxBarHeight = mBarViewsInfo[0].getHeight(); // If the max number of bar view is zero, then we don't calculate the unit for bar height. final int unit = maxBarHeight == 0 ? 0 : mMaxBarHeight / maxBarHeight; for (BarViewInfo barView : mBarViewsInfo) { barView.setBarHeight(barView.getBarNumber() * unit); barView.setNormalizedHeight(barView.getHeight() * unit); } } }
packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarView.java +10 −24 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.VisibleForTesting; /** * A extension view for bar chart. * {@link View} for a single vertical bar with icon and summary. */ public class BarView extends LinearLayout { Loading @@ -41,24 +41,11 @@ public class BarView extends LinearLayout { private TextView mBarTitle; private TextView mBarSummary; /** * Constructs a new BarView with the given context's theme. * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. */ public BarView(Context context) { super(context); init(); } /** * Constructs a new BarView with the given context's theme and the supplied * attribute set. * * @param context the Context the view is running in * @param attrs the attributes of the XML tag that is inflating the view. */ public BarView(Context context, AttributeSet attrs) { super(context, attrs); init(); Loading @@ -77,17 +64,16 @@ public class BarView extends LinearLayout { } /** * This helps update the bar view UI with a {@link BarViewInfo}. * * @param barViewInfo A {@link BarViewInfo} saves bar view status. * Updates the view with a {@link BarViewInfo}. */ public void updateBarViewUI(BarViewInfo barViewInfo) { void updateView(BarViewInfo barViewInfo) { setOnClickListener(barViewInfo.getClickListener()); //Set height of bar view mBarView.getLayoutParams().height = barViewInfo.getBarHeight(); mBarView.getLayoutParams().height = barViewInfo.getNormalizedHeight(); mIcon.setImageDrawable(barViewInfo.getIcon()); // For now, we use the bar number as title. mBarTitle.setText(Integer.toString(barViewInfo.getBarNumber())); mBarSummary.setText(barViewInfo.getSummaryRes()); mBarTitle.setText(Integer.toString(barViewInfo.getHeight())); mBarSummary.setText(barViewInfo.getSummary()); } @VisibleForTesting Loading @@ -106,9 +92,9 @@ public class BarView extends LinearLayout { setGravity(Gravity.CENTER); mBarView = findViewById(R.id.bar_view); mIcon = (ImageView) findViewById(R.id.icon_view); mBarTitle = (TextView) findViewById(R.id.bar_title); mBarSummary = (TextView) findViewById(R.id.bar_summary); mIcon = findViewById(R.id.icon_view); mBarTitle = findViewById(R.id.bar_title); mBarSummary = findViewById(R.id.bar_summary); } private void setOnClickListner(View.OnClickListener listener) { Loading
packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarViewInfo.java +36 −81 Original line number Diff line number Diff line Loading @@ -31,116 +31,71 @@ import java.util.Comparator; public class BarViewInfo implements Comparable<BarViewInfo> { private final Drawable mIcon; private View.OnClickListener mListener; private @StringRes int mSummaryRes; private View.OnClickListener mClickListener; @StringRes private int mSummary; // A number indicates this bar's height. The larger number shows a higher bar view. private int mBarNumber; private int mHeight; // A real height of bar view. private int mBarHeight; private int mNormalizedHeight; /** * Construct a BarViewInfo instance. * * @param icon the icon of bar view. * @param barNumber the number of bar view. The larger number show a more height of bar view. * @param summaryRes the resource identifier of the string resource to be displayed * @return BarViewInfo object. * @param icon The icon of bar view. * @param barHeight The height of bar view. Larger number shows a higher bar view. * @param summary The string resource id for summary. */ public BarViewInfo(Drawable icon, @IntRange(from = 0) int barNumber, @StringRes int summaryRes) { public BarViewInfo(Drawable icon, @IntRange(from = 0) int barHeight, @StringRes int summary) { mIcon = icon; mBarNumber = barNumber; mSummaryRes = summaryRes; mHeight = barHeight; mSummary = summary; } /** * Set number for bar view. * * @param barNumber the number of bar view. The larger number shows a higher bar view. * Set a click listener for bar view. */ public void setBarNumber(@IntRange(from = 0) int barNumber) { mBarNumber = barNumber; public void setClickListener(@Nullable View.OnClickListener listener) { mClickListener = listener; } /** * Set summary resource for bar view * * @param resId the resource identifier of the string resource to be displayed */ public void setSummary(@StringRes int resId) { mSummaryRes = resId; @Override public int compareTo(BarViewInfo other) { // Descending order return Comparator.comparingInt((BarViewInfo barViewInfo) -> barViewInfo.mHeight) .compare(other, this); } /** * Set a click listner for bar view. * * @param listener the click listner is attached on bar view. */ public void setClickListener(@Nullable View.OnClickListener listener) { mListener = listener; void setHeight(@IntRange(from = 0) int height) { mHeight = height; } /** * Get the icon of bar view. * * @return Drawable the icon of bar view. */ public Drawable getIcon() { return mIcon; void setSummary(@StringRes int resId) { mSummary = resId; } /** * Get the OnClickListener of bar view. * * @return View.OnClickListener the click listner of bar view. */ public View.OnClickListener getListener() { return mListener; Drawable getIcon() { return mIcon; } /** * Get the real height of bar view. * * @return the real height of bar view. */ public int getBarHeight() { return mBarHeight; int getHeight() { return mHeight; } /** * Get summary resource of bar view. * * @return summary resource of bar view. */ public int getSummaryRes() { return mSummaryRes; View.OnClickListener getClickListener() { return mClickListener; } /** * Get the number of app uses this permisssion. * * @return the number of app uses this permission. */ public int getBarNumber() { return mBarNumber; @StringRes int getSummary() { return mSummary; } @Override public int compareTo(BarViewInfo other) { // Descending order return Comparator.comparingInt((BarViewInfo barViewInfo) -> barViewInfo.mBarNumber) .compare(other, this); void setNormalizedHeight(@IntRange(from = 0) int barHeight) { mNormalizedHeight = barHeight; } /** * Set a real height for bar view. * * <p>This method should not be called by outside. It usually should be called by * {@link BarChartPreference#caculateAllBarViewsHeight} * * @param barHeight the real bar height for bar view. */ void setBarHeight(@IntRange(from = 0) int barHeight) { mBarHeight = barHeight; int getNormalizedHeight() { return mNormalizedHeight; } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/BarChartPreferenceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -208,4 +208,18 @@ public class BarChartPreferenceTest { assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.getSummary()).isEqualTo(mContext.getText(R.string.debug_app)); } @Test public void setAllBarViewsInfo_setClickListenerForBarView_barViewAttachClickListener() { final BarViewInfo viewInfo = new BarViewInfo(mIcon, 30 /* barNumber */, R.string.debug_app); viewInfo.setClickListener(v -> { }); final BarViewInfo[] barViewsInfo = new BarViewInfo[]{viewInfo}; mPreference.setAllBarViewsInfo(barViewsInfo); mPreference.onBindViewHolder(mHolder); assertThat(mBarView1.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mBarView1.hasOnClickListeners()).isTrue(); } }