From 28d45b49e8599145655f0b261ce9d6107c2ac824 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Mon, 9 Sep 2024 11:17:54 +0000 Subject: [PATCH] Refactor layout of ProcessStatsPreference - only this preference use AppPreference.setProgress() - create layout to handle progressbar in this class Bug: 365506467 Test: atest Flag: EXEMPT bugfix Change-Id: Ie0daf4e4fc1736943afe243566392d57c63fe65a --- res/layout/preference_process_stats.xml | 100 ++++++++++++++++++ .../applications/ProcessStatsPreference.java | 33 ++++++ .../ProcessStatsPreferenceTest.java | 65 ++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 res/layout/preference_process_stats.xml create mode 100644 tests/robotests/src/com/android/settings/applications/ProcessStatsPreferenceTest.java diff --git a/res/layout/preference_process_stats.xml b/res/layout/preference_process_stats.xml new file mode 100644 index 00000000000..8f0f6dd40b4 --- /dev/null +++ b/res/layout/preference_process_stats.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/android/settings/applications/ProcessStatsPreference.java b/src/com/android/settings/applications/ProcessStatsPreference.java index b4df3ee0b17..65ef2b502c0 100644 --- a/src/com/android/settings/applications/ProcessStatsPreference.java +++ b/src/com/android/settings/applications/ProcessStatsPreference.java @@ -21,16 +21,24 @@ import android.content.pm.PackageManager; import android.text.TextUtils; import android.text.format.Formatter; import android.util.Log; +import android.view.View; +import android.widget.ProgressBar; +import androidx.preference.PreferenceViewHolder; + +import com.android.settings.R; import com.android.settingslib.widget.AppPreference; public class ProcessStatsPreference extends AppPreference { static final String TAG = "ProcessStatsPreference"; private ProcStatsPackageEntry mEntry; + private int mProgress; + private boolean mProgressVisible; public ProcessStatsPreference(Context context) { super(context, null); + setLayoutResource(R.layout.preference_process_stats); } public void init(ProcStatsPackageEntry entry, PackageManager pm, double maxMemory, @@ -56,4 +64,29 @@ public class ProcessStatsPreference extends AppPreference { public ProcStatsPackageEntry getEntry() { return mEntry; } + + /** + * Sets the current progress. + * @param amount the current progress + * + * @see ProgressBar#setProgress(int) + */ + public void setProgress(int amount) { + mProgress = amount; + mProgressVisible = true; + notifyChanged(); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + + final ProgressBar progress = (ProgressBar) view.findViewById(android.R.id.progress); + if (mProgressVisible) { + progress.setProgress(mProgress); + progress.setVisibility(View.VISIBLE); + } else { + progress.setVisibility(View.GONE); + } + } } diff --git a/tests/robotests/src/com/android/settings/applications/ProcessStatsPreferenceTest.java b/tests/robotests/src/com/android/settings/applications/ProcessStatsPreferenceTest.java new file mode 100644 index 00000000000..70e7aa40cda --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/ProcessStatsPreferenceTest.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.view.View; + +import androidx.preference.PreferenceViewHolder; + +import com.android.settings.R; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class ProcessStatsPreferenceTest { + + private Context mContext; + private View mRootView; + private ProcessStatsPreference mPref; + private PreferenceViewHolder mHolder; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mRootView = View.inflate(mContext, R.layout.preference_process_stats, null /* parent */); + mHolder = PreferenceViewHolder.createInstanceForTests(mRootView); + mPref = new ProcessStatsPreference(mContext); + } + + @Test + public void setProgress_showProgress() { + mPref.setProgress(1); + mPref.onBindViewHolder(mHolder); + + assertThat(mHolder.findViewById(android.R.id.progress).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void foobar_testName() { + float iconSize = mContext.getResources().getDimension( + com.android.settingslib.widget.theme.R.dimen.secondary_app_icon_size); + assertThat(Float.floatToIntBits(iconSize)).isEqualTo(Float.floatToIntBits(32)); + } +}