diff options
Diffstat (limited to 'src/com/android/settings/applications/ProcessStatsBase.java')
-rw-r--r-- | src/com/android/settings/applications/ProcessStatsBase.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/com/android/settings/applications/ProcessStatsBase.java b/src/com/android/settings/applications/ProcessStatsBase.java new file mode 100644 index 0000000..c2f96d2 --- /dev/null +++ b/src/com/android/settings/applications/ProcessStatsBase.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2015 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 android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Spinner; + +import com.android.internal.app.ProcessStats; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +public abstract class ProcessStatsBase extends SettingsPreferenceFragment + implements OnItemSelectedListener { + private static final String DURATION = "duration"; + + protected static final String ARG_TRANSFER_STATS = "transfer_stats"; + protected static final String ARG_DURATION_INDEX = "duration_index"; + + protected static final int NUM_DURATIONS = 4; + + // The actual duration value to use for each duration option. Note these + // are lower than the actual duration, since our durations are computed in + // batches of 3 hours so we want to allow the time we use to be slightly + // smaller than the actual time selected instead of bumping up to 3 hours + // beyond it. + private static final long DURATION_QUANTUM = ProcessStats.COMMIT_PERIOD; + protected static long[] sDurations = new long[] { + 3 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 6 * 60 *60 * 1000 - DURATION_QUANTUM / 2, + 12 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 24 * 60 * 60 * 1000 - DURATION_QUANTUM / 2 + }; + protected static int[] sDurationLabels = new int[] { + R.string.menu_duration_3h, R.string.menu_duration_6h, + R.string.menu_duration_12h, R.string.menu_duration_1d + }; + + private ViewGroup mSpinnerHeader; + private Spinner mFilterSpinner; + private ArrayAdapter<String> mFilterAdapter; + + protected ProcStatsData mStatsManager; + protected int mDurationIndex; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + Bundle args = getArguments(); + mStatsManager = new ProcStatsData(getActivity(), icicle != null + || (args != null && args.getBoolean(ARG_TRANSFER_STATS, false))); + + mDurationIndex = icicle != null + ? icicle.getInt(ARG_DURATION_INDEX) + : args != null ? args.getInt(ARG_DURATION_INDEX) : 0; + mStatsManager.setDuration(icicle != null + ? icicle.getLong(DURATION, sDurations[0]) : sDurations[0]); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putLong(DURATION, mStatsManager.getDuration()); + outState.putInt(ARG_DURATION_INDEX, mDurationIndex); + } + + @Override + public void onResume() { + super.onResume(); + mStatsManager.refreshStats(false); + refreshUi(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (getActivity().isChangingConfigurations()) { + mStatsManager.xferStats(); + } + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mSpinnerHeader = (ViewGroup) setPinnedHeaderView(R.layout.apps_filter_spinner); + mFilterSpinner = (Spinner) mSpinnerHeader.findViewById(R.id.filter_spinner); + mFilterAdapter = new ArrayAdapter<String>(getActivity(), R.layout.filter_spinner_item); + mFilterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + for (int i = 0; i < NUM_DURATIONS; i++) { + mFilterAdapter.add(getString(sDurationLabels[i])); + } + mFilterSpinner.setAdapter(mFilterAdapter); + mFilterSpinner.setSelection(mDurationIndex); + mFilterSpinner.setOnItemSelectedListener(this); + } + + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { + mDurationIndex = position; + mStatsManager.setDuration(sDurations[position]); + refreshUi(); + } + + @Override + public void onNothingSelected(AdapterView<?> parent) { + // Select something. + mFilterSpinner.setSelection(0); + } + + public abstract void refreshUi(); +} |