3094621: add "wipe sd card" option to factory data reset 3094609: collapse unmount/format into one command Implements requested UI changes. Also some final tweaks to Manage Applications. Change-Id: I0219195dd0c74d8c003ef1c3f6e09714859d7f89
This commit is contained in:
@@ -22,9 +22,7 @@ import android.app.ActivityManager;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemClock;
|
||||
import android.os.SystemProperties;
|
||||
@@ -39,7 +37,6 @@ import android.widget.AdapterView;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.AbsListView.RecyclerListener;
|
||||
@@ -71,6 +68,7 @@ public class RunningProcessesView extends FrameLayout
|
||||
RunningState.BaseItem mCurSelected;
|
||||
|
||||
ListView mListView;
|
||||
ServiceListAdapter mAdapter;
|
||||
LinearColorBar mColorBar;
|
||||
TextView mBackgroundProcessText;
|
||||
TextView mForegroundProcessText;
|
||||
@@ -93,6 +91,7 @@ public class RunningProcessesView extends FrameLayout
|
||||
ActivityManager.RunningServiceInfo mService;
|
||||
ViewHolder mHolder;
|
||||
long mFirstRunTime;
|
||||
boolean mSetBackground;
|
||||
|
||||
void updateTime(Context context, StringBuilder builder) {
|
||||
TextView uptimeView = null;
|
||||
@@ -109,14 +108,21 @@ public class RunningProcessesView extends FrameLayout
|
||||
mHolder.size.setText(size);
|
||||
}
|
||||
|
||||
if (mItem instanceof RunningState.MergedItem) {
|
||||
// This item represents both services and proceses,
|
||||
if (mItem.mBackground) {
|
||||
// This is a background process; no uptime.
|
||||
if (!mSetBackground) {
|
||||
mSetBackground = true;
|
||||
mHolder.uptime.setText("");
|
||||
}
|
||||
} else if (mItem instanceof RunningState.MergedItem) {
|
||||
// This item represents both services and processes,
|
||||
// so show the service uptime below.
|
||||
uptimeView = mHolder.uptime;
|
||||
}
|
||||
}
|
||||
|
||||
if (uptimeView != null) {
|
||||
mSetBackground = false;
|
||||
if (mFirstRunTime >= 0) {
|
||||
//Log.i("foo", "Time for " + mItem.mDisplayLabel
|
||||
// + ": " + (SystemClock.uptimeMillis()-mFirstRunTime));
|
||||
@@ -159,16 +165,29 @@ public class RunningProcessesView extends FrameLayout
|
||||
public ActiveItem bind(RunningState state, RunningState.BaseItem item,
|
||||
StringBuilder builder) {
|
||||
synchronized (state.mLock) {
|
||||
PackageManager pm = rootView.getContext().getPackageManager();
|
||||
if (item.mPackageInfo == null && item instanceof RunningState.MergedItem) {
|
||||
// Items for background processes don't normally load
|
||||
// their labels for performance reasons. Do it now.
|
||||
((RunningState.MergedItem)item).mProcess.ensureLabel(pm);
|
||||
item.mPackageInfo = ((RunningState.MergedItem)item).mProcess.mPackageInfo;
|
||||
item.mDisplayLabel = ((RunningState.MergedItem)item).mProcess.mDisplayLabel;
|
||||
}
|
||||
name.setText(item.mDisplayLabel);
|
||||
ActiveItem ai = new ActiveItem();
|
||||
ai.mRootView = rootView;
|
||||
ai.mItem = item;
|
||||
ai.mHolder = this;
|
||||
ai.mFirstRunTime = item.mActiveSince;
|
||||
description.setText(item.mDescription);
|
||||
if (item.mBackground) {
|
||||
description.setText(rootView.getContext().getText(R.string.cached));
|
||||
} else {
|
||||
description.setText(item.mDescription);
|
||||
}
|
||||
item.mCurSizeStr = null;
|
||||
icon.setImageDrawable(item.mPackageInfo.loadIcon(
|
||||
rootView.getContext().getPackageManager()));
|
||||
if (item.mPackageInfo != null) {
|
||||
icon.setImageDrawable(item.mPackageInfo.loadIcon(pm));
|
||||
}
|
||||
icon.setVisibility(View.VISIBLE);
|
||||
ai.updateTime(rootView.getContext(), builder);
|
||||
return ai;
|
||||
@@ -185,6 +204,7 @@ public class RunningProcessesView extends FrameLayout
|
||||
class ServiceListAdapter extends BaseAdapter {
|
||||
final RunningState mState;
|
||||
final LayoutInflater mInflater;
|
||||
boolean mShowBackground;
|
||||
ArrayList<RunningState.MergedItem> mItems;
|
||||
|
||||
ServiceListAdapter(RunningState state) {
|
||||
@@ -194,8 +214,24 @@ public class RunningProcessesView extends FrameLayout
|
||||
refreshItems();
|
||||
}
|
||||
|
||||
void setShowBackground(boolean showBackground) {
|
||||
if (mShowBackground != showBackground) {
|
||||
mShowBackground = showBackground;
|
||||
mState.setWatchingBackgroundItems(showBackground);
|
||||
refreshItems();
|
||||
notifyDataSetChanged();
|
||||
mColorBar.setShowingGreen(mShowBackground);
|
||||
}
|
||||
}
|
||||
|
||||
boolean getShowBackground() {
|
||||
return mShowBackground;
|
||||
}
|
||||
|
||||
void refreshItems() {
|
||||
ArrayList<RunningState.MergedItem> newItems = mState.getCurrentMergedItems();
|
||||
ArrayList<RunningState.MergedItem> newItems =
|
||||
mShowBackground ? mState.getCurrentBackgroundItems()
|
||||
: mState.getCurrentMergedItems();
|
||||
if (mItems != newItems) {
|
||||
mItems = newItems;
|
||||
}
|
||||
@@ -266,67 +302,6 @@ public class RunningProcessesView extends FrameLayout
|
||||
}
|
||||
}
|
||||
|
||||
public static class LinearColorBar extends LinearLayout {
|
||||
private float mRedRatio;
|
||||
private float mYellowRatio;
|
||||
private float mGreenRatio;
|
||||
|
||||
final Rect mRect = new Rect();
|
||||
final Paint mPaint = new Paint();
|
||||
|
||||
public LinearColorBar(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
setWillNotDraw(false);
|
||||
mPaint.setStyle(Paint.Style.FILL);
|
||||
}
|
||||
|
||||
public void setRatios(float red, float yellow, float green) {
|
||||
mRedRatio = red;
|
||||
mYellowRatio = yellow;
|
||||
mGreenRatio = green;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
|
||||
int width = getWidth();
|
||||
mRect.top = 0;
|
||||
mRect.bottom = getHeight();
|
||||
|
||||
int left = 0;
|
||||
|
||||
int right = left + (int)(width*mRedRatio);
|
||||
if (left < right) {
|
||||
mRect.left = left;
|
||||
mRect.right = right;
|
||||
mPaint.setColor(0xffff8080);
|
||||
canvas.drawRect(mRect, mPaint);
|
||||
width -= (right-left);
|
||||
left = right;
|
||||
}
|
||||
|
||||
right = left + (int)(width*mYellowRatio);
|
||||
if (left < right) {
|
||||
mRect.left = left;
|
||||
mRect.right = right;
|
||||
mPaint.setColor(0xffffff00);
|
||||
canvas.drawRect(mRect, mPaint);
|
||||
width -= (right-left);
|
||||
left = right;
|
||||
}
|
||||
|
||||
right = left + width;
|
||||
if (left < right) {
|
||||
mRect.left = left;
|
||||
mRect.right = right;
|
||||
mPaint.setColor(0xff80ff80);
|
||||
canvas.drawRect(mRect, mPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean matchText(byte[] buffer, int index, String text) {
|
||||
int N = text.length();
|
||||
if ((index+N) >= buffer.length) {
|
||||
@@ -434,7 +409,7 @@ public class RunningProcessesView extends FrameLayout
|
||||
+ mLastForegroundProcessMemory + mLastServiceProcessMemory;
|
||||
mColorBar.setRatios(mLastForegroundProcessMemory/totalMem,
|
||||
mLastServiceProcessMemory/totalMem,
|
||||
(availMem+mLastBackgroundProcessMemory)/totalMem);
|
||||
mLastBackgroundProcessMemory/totalMem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,6 +420,7 @@ public class RunningProcessesView extends FrameLayout
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(RunningServiceDetails.KEY_UID, mi.mProcess.mUid);
|
||||
intent.putExtra(RunningServiceDetails.KEY_PROCESS, mi.mProcess.mProcessName);
|
||||
intent.putExtra(RunningServiceDetails.KEY_BACKGROUND, mAdapter.mShowBackground);
|
||||
intent.setClass(getContext(), RunningServiceDetails.class);
|
||||
getContext().startActivity(intent);
|
||||
}
|
||||
@@ -470,10 +446,23 @@ public class RunningProcessesView extends FrameLayout
|
||||
}
|
||||
mListView.setOnItemClickListener(this);
|
||||
mListView.setRecyclerListener(this);
|
||||
mListView.setAdapter(new ServiceListAdapter(mState));
|
||||
mAdapter = new ServiceListAdapter(mState);
|
||||
mListView.setAdapter(mAdapter);
|
||||
mColorBar = (LinearColorBar)findViewById(R.id.color_bar);
|
||||
mBackgroundProcessText = (TextView)findViewById(R.id.backgroundText);
|
||||
mBackgroundProcessText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mAdapter.setShowBackground(true);
|
||||
}
|
||||
});
|
||||
mForegroundProcessText = (TextView)findViewById(R.id.foregroundText);
|
||||
mForegroundProcessText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mAdapter.setShowBackground(false);
|
||||
}
|
||||
});
|
||||
|
||||
// Magic! Implementation detail! Don't count on this!
|
||||
SECONDARY_SERVER_MEM =
|
||||
|
Reference in New Issue
Block a user