ProcessStatsPreference.java revision f4db340daeb50572d7e0ab12f4745affae8b567f
1c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn/* 2c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * Copyright (C) 2013 The Android Open Source Project 3c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * 4c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * you may not use this file except in compliance with the License. 6c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * You may obtain a copy of the License at 7c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * 8c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * 10c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * See the License for the specific language governing permissions and 14c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn * limitations under the License. 15c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn */ 16c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 17c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornpackage com.android.settings.applications; 18c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 19c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornimport android.content.Context; 202583fc1e069d0a54df46258d360499492d7e86d2Jason Monkimport android.content.pm.PackageManager; 21c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornimport android.graphics.drawable.ColorDrawable; 22c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornimport android.preference.Preference; 232583fc1e069d0a54df46258d360499492d7e86d2Jason Monkimport android.text.TextUtils; 240ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglioimport android.util.AttributeSet; 252583fc1e069d0a54df46258d360499492d7e86d2Jason Monkimport android.util.Log; 26c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornimport android.view.View; 272583fc1e069d0a54df46258d360499492d7e86d2Jason Monk 28c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornimport com.android.settings.R; 29c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 30c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackbornpublic class ProcessStatsPreference extends Preference { 312583fc1e069d0a54df46258d360499492d7e86d2Jason Monk 32b94079a704ef9ca144ca94885d655b2befabcf45Dianne Hackborn private ProcStatsPackageEntry mEntry; 332583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private final int mAvgColor; 342583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private final int mMaxColor; 352583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private final int mRemainingColor; 362583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private float mAvgRatio; 372583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private float mMaxRatio; 382583fc1e069d0a54df46258d360499492d7e86d2Jason Monk private float mRemainingRatio; 39c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 400ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio public ProcessStatsPreference(Context context) { 410ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio this(context, null); 420ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio } 430ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio 440ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio public ProcessStatsPreference(Context context, AttributeSet attrs) { 450ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio this(context, attrs, 0); 460ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio } 470ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio 480ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio public ProcessStatsPreference(Context context, AttributeSet attrs, int defStyleAttr) { 490ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio this(context, attrs, defStyleAttr, 0); 500ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio } 510ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio 520ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio public ProcessStatsPreference(Context context, AttributeSet attrs, int defStyleAttr, 530ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio int defStyleRes) { 540ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio super(context, attrs, defStyleAttr, defStyleRes); 552583fc1e069d0a54df46258d360499492d7e86d2Jason Monk setLayoutResource(R.layout.app_item_linear_color); 562583fc1e069d0a54df46258d360499492d7e86d2Jason Monk mAvgColor = context.getColor(R.color.memory_avg_use); 572583fc1e069d0a54df46258d360499492d7e86d2Jason Monk mMaxColor = context.getColor(R.color.memory_max_use); 582583fc1e069d0a54df46258d360499492d7e86d2Jason Monk mRemainingColor = context.getColor(R.color.memory_remaining); 590ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio } 600ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio 61f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk public void init(ProcStatsPackageEntry entry, PackageManager pm, double maxMemory, 62f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk double weightToRam, double totalScale) { 630ec4251d12cdce0dfbc9cb3d9f46e33acf20af3fFabrice Di Meglio mEntry = entry; 642583fc1e069d0a54df46258d360499492d7e86d2Jason Monk setTitle(TextUtils.isEmpty(entry.mUiLabel) ? entry.mPackage : entry.mUiLabel); 652583fc1e069d0a54df46258d360499492d7e86d2Jason Monk if (entry.mUiTargetApp != null) { 662583fc1e069d0a54df46258d360499492d7e86d2Jason Monk setIcon(entry.mUiTargetApp.loadIcon(pm)); 672583fc1e069d0a54df46258d360499492d7e86d2Jason Monk } else { 682583fc1e069d0a54df46258d360499492d7e86d2Jason Monk setIcon(new ColorDrawable(0)); 692583fc1e069d0a54df46258d360499492d7e86d2Jason Monk } 702583fc1e069d0a54df46258d360499492d7e86d2Jason Monk boolean statsForeground = entry.mRunWeight > entry.mBgWeight; 711de522323fc2b20b86f59819d819708cafdbd2abJason Monk setSummary(entry.mRunDuration > entry.mBgDuration ? entry.getRunningFrequency(getContext()) 722583fc1e069d0a54df46258d360499492d7e86d2Jason Monk : entry.getBackgroundFrequency(getContext())); 73f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk mAvgRatio = (float) ((statsForeground ? entry.mRunWeight : entry.mBgWeight) 74f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk * weightToRam / maxMemory); 75f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk mMaxRatio = (float) ((statsForeground ? entry.mMaxRunMem : entry.mMaxBgMem) 76f4db340daeb50572d7e0ab12f4745affae8b567fJason Monk * totalScale * 1024 / maxMemory - mAvgRatio); 772583fc1e069d0a54df46258d360499492d7e86d2Jason Monk mRemainingRatio = 1 - mAvgRatio - mMaxRatio; 78c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn } 79c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 80b94079a704ef9ca144ca94885d655b2befabcf45Dianne Hackborn public ProcStatsPackageEntry getEntry() { 8104486738342fa5e11a78df836efe34b85bee125aDianne Hackborn return mEntry; 8204486738342fa5e11a78df836efe34b85bee125aDianne Hackborn } 8304486738342fa5e11a78df836efe34b85bee125aDianne Hackborn 84c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn @Override 85c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn protected void onBindView(View view) { 86c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn super.onBindView(view); 87c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn 882583fc1e069d0a54df46258d360499492d7e86d2Jason Monk LinearColorBar linearColorBar = (LinearColorBar) view.findViewById(R.id.linear_color_bar); 892583fc1e069d0a54df46258d360499492d7e86d2Jason Monk linearColorBar.setColors(mAvgColor, mMaxColor, mRemainingColor); 902583fc1e069d0a54df46258d360499492d7e86d2Jason Monk linearColorBar.setRatios(mAvgRatio, mMaxRatio, mRemainingRatio); 91c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn } 92c6d658e37d7c0ab2d264fff4850ea20823669558Dianne Hackborn} 93