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