Work on issue #16135174: Apps page "smoke" gradient footer must be removed

New header in running services.  Not yet done.

Change-Id: Ibe2f4145796c7863ec80e0ea2d8d87dc910bac7e
This commit is contained in:
Dianne Hackborn
2014-07-23 13:38:41 -07:00
parent b125caa7ed
commit fe9590bb19
7 changed files with 248 additions and 145 deletions

View File

@@ -39,50 +39,6 @@
android:text="@string/no_applications" android:text="@string/no_applications"
android:textAppearance="?android:attr/textAppearanceLarge" /> android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout> </FrameLayout>
<!-- Force layout direction to LTR for now as we want the text to be at the same position in
any Locale included the RTL ones. Will need to fix LinearColorBar RTL support later.
Please also note the left/right gravities that would also need to be changed for proper
RTL support -->
<view class="com.android.settings.applications.LinearColorBar"
android:id="@+id/storage_color_bar"
android:layout_marginStart="@dimen/settings_side_margin"
android:layout_marginEnd="@dimen/settings_side_margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-5dp"
android:orientation="horizontal"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingTop="30dp"
android:paddingBottom="1dp"
android:layoutDirection="ltr">
<TextView android:id="@+id/usedStorageText"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="#000"
android:singleLine="true" />
<TextView android:id="@+id/storageChartLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginTop="-20dp"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="?android:attr/textColorPrimary"
android:singleLine="true"
android:text="@string/internal_storage" />
<TextView android:id="@+id/freeStorageText"
android:layout_gravity="center_vertical|end"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="#000"
android:singleLine="true" />
</view>
</LinearLayout> </LinearLayout>
<LinearLayout android:id="@+id/loading_container" <LinearLayout android:id="@+id/loading_container"

View File

@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2014, 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.
*/
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAlignment="viewStart"
android:text="@string/running_processes_header_title" />
<view class="com.android.settings.applications.LinearColorBar"
android:id="@+id/color_bar"
android:layout_width="match_parent"
android:layout_height="18sp"
android:layout_marginTop="8dp"
android:orientation="horizontal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:baselineAligned="true">
<ImageView
android:layout_width="16sp"
android:layout_height="16sp"
android:scaleType="centerInside"
android:baselineAlignBottom="true"
android:src="@color/running_processes_system_ram"
android:contentDescription="@null" />
<TextView
android:id="@+id/systemSizePrefix"
android:text="@string/running_processes_header_system_prefix"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="16dp"
android:maxLines="1" />
<ImageView
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:baselineAlignBottom="true"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/systemSize"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:baselineAligned="true">
<ImageView
android:layout_width="16sp"
android:layout_height="16sp"
android:baselineAlignBottom="true"
android:scaleType="centerInside"
android:src="@color/running_processes_apps_ram"
android:contentDescription="@null" />
<TextView
android:id="@+id/appsSizePrefix"
android:text="@string/running_processes_header_apps_prefix"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="16dp"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:baselineAlignBottom="true"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/appsSize"
android:paddingTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:baselineAligned="true">
<ImageView
android:layout_width="16sp"
android:layout_height="16sp"
android:baselineAlignBottom="true"
android:scaleType="centerInside"
android:src="@color/running_processes_free_ram"
android:contentDescription="@null" />
<TextView
android:id="@+id/freeSizePrefix"
android:text="@string/running_processes_header_free_prefix"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="16dp"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:baselineAlignBottom="true"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/freeSize"
android:paddingTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<TextView
android:id="@+id/listHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAlignment="viewStart"
android:text="@string/running_processes_header_footer" />
</LinearLayout>

View File

@@ -37,52 +37,4 @@
android:text="@string/no_running_services" android:text="@string/no_running_services"
android:textAppearance="?android:attr/textAppearanceLarge" /> android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout> </FrameLayout>
<!-- Force layout direction to LTR for now as we want the text to be at the same position in
any Locale included the RTL ones. Will need to fix LinearColorBar RTL support later.
Please also note the left/right gravities that would also need to be changed for proper
RTL support -->
<view class="com.android.settings.applications.LinearColorBar"
android:id="@+id/color_bar"
android:layout_marginStart="@dimen/settings_side_margin"
android:layout_marginEnd="@dimen/settings_side_margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-5dp"
android:orientation="horizontal"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingTop="30dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:paddingBottom="1dp"
android:layoutDirection="ltr">
<TextView android:id="@+id/foregroundText"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="true"
android:gravity="left|bottom"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="#000"
android:singleLine="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginTop="-20dp"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="?android:attr/textColorPrimary"
android:singleLine="true"
android:text="@string/memory" />
<TextView android:id="@+id/backgroundText"
android:layout_gravity="center_vertical|end"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="true"
android:gravity="right|bottom"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:textColor="#000"
android:singleLine="true" />
</view>
</LinearLayout> </LinearLayout>

View File

@@ -56,6 +56,10 @@
<color name="unlock_pattern_view_success_color">@color/theme_accent</color> <color name="unlock_pattern_view_success_color">@color/theme_accent</color>
<color name="unlock_pattern_view_error_color">#fff4511e</color> <color name="unlock_pattern_view_error_color">#fff4511e</color>
<color name="running_processes_system_ram">#ff384248</color>
<color name="running_processes_apps_ram">#ff009587</color>
<color name="running_processes_free_ram">#ffced7db</color>
<!-- Palette colors referenced by top-level themes. --> <!-- Palette colors referenced by top-level themes. -->
<color name="theme_primary">#ff263238</color> <color name="theme_primary">#ff263238</color>
<color name="theme_primary_dark">#ff21272b</color> <color name="theme_primary_dark">#ff21272b</color>

View File

@@ -3096,6 +3096,28 @@
<!-- Descriptive text of a running process: plural process, plural service. --> <!-- Descriptive text of a running process: plural process, plural service. -->
<string name="running_processes_item_description_p_p"><xliff:g id="numprocess">%1$d</xliff:g> <string name="running_processes_item_description_p_p"><xliff:g id="numprocess">%1$d</xliff:g>
processes and <xliff:g id="numservices">%2$d</xliff:g> services</string> processes and <xliff:g id="numservices">%2$d</xliff:g> services</string>
<!-- [CHAR LIMIT=NONE] Top title of the header of the running processes/services list. -->
<string name="running_processes_header_title">Device memory</string>
<!-- [CHAR LIMIT=NONE] Bottom test of the header leading in to the running
processes/services list. -->
<string name="running_processes_header_footer">App RAM usage</string>
<!-- [CHAR LIMIT=20] Running processes/services header: prefix for line showing RAM
used by system. -->
<string name="running_processes_header_system_prefix">System</string>
<!-- [CHAR LIMIT=20] Running processes/services header: prefix for line showing RAM
used by apps. -->
<string name="running_processes_header_apps_prefix">Apps</string>
<!-- [CHAR LIMIT=20] Running processes/services header: prefix for line showing RAM
that is free. -->
<string name="running_processes_header_free_prefix">Free</string>
<!-- [CHAR LIMIT=20] Running processes/services header: prefix for line showing total RAM
used by everything. -->
<string name="running_processes_header_used_prefix">Used</string>
<!-- [CHAR LIMIT=20] Running processes/services header: prefix for line showing portion
of free RAM that is used by cached apps. -->
<string name="running_processes_header_cached_prefix">Cached</string>
<!-- [CHAR_LIMIT=20] Running processes/services header: formatter for RAM use amount. -->
<string name="running_processes_header_ram"><xliff:g id="ram">%1$s</xliff:g> of RAM</string>
<!-- Details about an application's running services. --> <!-- Details about an application's running services. -->
<string name="runningservicedetails_settings_title">Running app</string> <string name="runningservicedetails_settings_title">Running app</string>

View File

@@ -199,10 +199,10 @@ public class ManageApplications extends Fragment implements
// Custom view used to display running processes // Custom view used to display running processes
private RunningProcessesView mRunningProcessesView; private RunningProcessesView mRunningProcessesView;
private LinearColorBar mColorBar; //private LinearColorBar mColorBar;
private TextView mStorageChartLabel; //private TextView mStorageChartLabel;
private TextView mUsedStorageText; //private TextView mUsedStorageText;
private TextView mFreeStorageText; //private TextView mFreeStorageText;
private long mFreeStorage = 0, mAppStorage = 0, mTotalStorage = 0; private long mFreeStorage = 0, mAppStorage = 0, mTotalStorage = 0;
private long mLastUsedStorage, mLastAppStorage, mLastFreeStorage; private long mLastUsedStorage, mLastAppStorage, mLastFreeStorage;
@@ -263,17 +263,17 @@ public class ManageApplications extends Fragment implements
mApplications = new ApplicationsAdapter(mApplicationsState, this, mFilter); mApplications = new ApplicationsAdapter(mApplicationsState, this, mFilter);
mListView.setAdapter(mApplications); mListView.setAdapter(mApplications);
mListView.setRecyclerListener(mApplications); mListView.setRecyclerListener(mApplications);
mColorBar = (LinearColorBar)mListContainer.findViewById(R.id.storage_color_bar); //mColorBar = (LinearColorBar)mListContainer.findViewById(R.id.storage_color_bar);
mStorageChartLabel = (TextView)mListContainer.findViewById(R.id.storageChartLabel); //mStorageChartLabel = (TextView)mListContainer.findViewById(R.id.storageChartLabel);
mUsedStorageText = (TextView)mListContainer.findViewById(R.id.usedStorageText); //mUsedStorageText = (TextView)mListContainer.findViewById(R.id.usedStorageText);
mFreeStorageText = (TextView)mListContainer.findViewById(R.id.freeStorageText); //mFreeStorageText = (TextView)mListContainer.findViewById(R.id.freeStorageText);
Utils.prepareCustomPreferencesList(contentParent, contentChild, mListView, false); Utils.prepareCustomPreferencesList(contentParent, contentChild, mListView, false);
if (mFilter == FILTER_APPS_SDCARD) { if (mFilter == FILTER_APPS_SDCARD) {
mStorageChartLabel.setText(mOwner.getActivity().getText( //mStorageChartLabel.setText(mOwner.getActivity().getText(
R.string.sd_card_storage)); // R.string.sd_card_storage));
} else { } else {
mStorageChartLabel.setText(mOwner.getActivity().getText( //mStorageChartLabel.setText(mOwner.getActivity().getText(
R.string.internal_storage)); // R.string.internal_storage));
} }
applyCurrentStorage(); applyCurrentStorage();
} }
@@ -389,6 +389,7 @@ public class ManageApplications extends Fragment implements
if (mRootView == null) { if (mRootView == null) {
return; return;
} }
/*
if (mTotalStorage > 0) { if (mTotalStorage > 0) {
BidiFormatter bidiFormatter = BidiFormatter.getInstance(); BidiFormatter bidiFormatter = BidiFormatter.getInstance();
mColorBar.setRatios((mTotalStorage-mFreeStorage-mAppStorage)/(float)mTotalStorage, mColorBar.setRatios((mTotalStorage-mFreeStorage-mAppStorage)/(float)mTotalStorage,
@@ -419,6 +420,7 @@ public class ManageApplications extends Fragment implements
mFreeStorageText.setText(""); mFreeStorageText.setText("");
} }
} }
*/
} }
@Override @Override

View File

@@ -16,6 +16,7 @@
package com.android.settings.applications; package com.android.settings.applications;
import android.content.res.Resources;
import android.text.BidiFormatter; import android.text.BidiFormatter;
import com.android.internal.util.MemInfoReader; import com.android.internal.util.MemInfoReader;
import com.android.settings.R; import com.android.settings.R;
@@ -71,9 +72,11 @@ public class RunningProcessesView extends FrameLayout
RunningState.BaseItem mCurSelected; RunningState.BaseItem mCurSelected;
ListView mListView; ListView mListView;
View mHeader;
ServiceListAdapter mAdapter; ServiceListAdapter mAdapter;
LinearColorBar mColorBar; LinearColorBar mColorBar;
TextView mBackgroundProcessText; TextView mBackgroundProcessText;
TextView mAppsProcessText;
TextView mForegroundProcessText; TextView mForegroundProcessText;
int mLastNumBackgroundProcesses = -1; int mLastNumBackgroundProcesses = -1;
@@ -316,7 +319,7 @@ public class RunningProcessesView extends FrameLayout
void refreshUi(boolean dataChanged) { void refreshUi(boolean dataChanged) {
if (dataChanged) { if (dataChanged) {
ServiceListAdapter adapter = (ServiceListAdapter)(mListView.getAdapter()); ServiceListAdapter adapter = mAdapter;
adapter.refreshItems(); adapter.refreshItems();
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
@@ -338,38 +341,35 @@ public class RunningProcessesView extends FrameLayout
synchronized (mState.mLock) { synchronized (mState.mLock) {
if (mLastNumBackgroundProcesses != mState.mNumBackgroundProcesses if (mLastNumBackgroundProcesses != mState.mNumBackgroundProcesses
|| mLastBackgroundProcessMemory != mState.mBackgroundProcessMemory || mLastBackgroundProcessMemory != mState.mBackgroundProcessMemory
|| mLastNumForegroundProcesses != mState.mNumForegroundProcesses
|| mLastForegroundProcessMemory != mState.mForegroundProcessMemory
|| mLastNumServiceProcesses != mState.mNumServiceProcesses
|| mLastServiceProcessMemory != mState.mServiceProcessMemory
|| mLastAvailMemory != availMem) { || mLastAvailMemory != availMem) {
mLastNumBackgroundProcesses = mState.mNumBackgroundProcesses; mLastNumBackgroundProcesses = mState.mNumBackgroundProcesses;
mLastBackgroundProcessMemory = mState.mBackgroundProcessMemory; mLastBackgroundProcessMemory = mState.mBackgroundProcessMemory;
mLastForegroundProcessMemory = mState.mForegroundProcessMemory;
mLastServiceProcessMemory = mState.mServiceProcessMemory;
mLastAvailMemory = availMem; mLastAvailMemory = availMem;
long freeMem = mLastAvailMemory + mLastBackgroundProcessMemory; long freeMem = mLastAvailMemory + mLastBackgroundProcessMemory;
BidiFormatter bidiFormatter = BidiFormatter.getInstance(); BidiFormatter bidiFormatter = BidiFormatter.getInstance();
String sizeStr = bidiFormatter.unicodeWrap( String sizeStr = bidiFormatter.unicodeWrap(
Formatter.formatShortFileSize(getContext(), freeMem)); Formatter.formatShortFileSize(getContext(), freeMem));
mBackgroundProcessText.setText(getResources().getString( mBackgroundProcessText.setText(getResources().getString(
R.string.service_background_processes, sizeStr)); R.string.running_processes_header_ram, sizeStr));
sizeStr = bidiFormatter.unicodeWrap( sizeStr = bidiFormatter.unicodeWrap(
Formatter.formatShortFileSize(getContext(), Formatter.formatShortFileSize(getContext(),
mMemInfoReader.getTotalSize() - freeMem)); mLastForegroundProcessMemory + mLastServiceProcessMemory));
mAppsProcessText.setText(getResources().getString(
R.string.running_processes_header_ram, sizeStr));
sizeStr = bidiFormatter.unicodeWrap(
Formatter.formatShortFileSize(getContext(),
mMemInfoReader.getTotalSize() - freeMem
- mLastForegroundProcessMemory - mLastServiceProcessMemory));
mForegroundProcessText.setText(getResources().getString( mForegroundProcessText.setText(getResources().getString(
R.string.service_foreground_processes, sizeStr)); R.string.running_processes_header_ram, sizeStr));
} }
if (mLastNumForegroundProcesses != mState.mNumForegroundProcesses
|| mLastForegroundProcessMemory != mState.mForegroundProcessMemory
|| mLastNumServiceProcesses != mState.mNumServiceProcesses
|| mLastServiceProcessMemory != mState.mServiceProcessMemory) {
mLastNumForegroundProcesses = mState.mNumForegroundProcesses;
mLastForegroundProcessMemory = mState.mForegroundProcessMemory;
mLastNumServiceProcesses = mState.mNumServiceProcesses;
mLastServiceProcessMemory = mState.mServiceProcessMemory;
/*
String sizeStr = Formatter.formatShortFileSize(getContext(),
mLastForegroundProcessMemory + mLastServiceProcessMemory);
mForegroundProcessText.setText(getResources().getString(
R.string.service_foreground_processes, sizeStr));
*/
}
float totalMem = mMemInfoReader.getTotalSize(); float totalMem = mMemInfoReader.getTotalSize();
float totalShownMem = availMem + mLastBackgroundProcessMemory float totalShownMem = availMem + mLastBackgroundProcessMemory
+ mLastServiceProcessMemory; + mLastServiceProcessMemory;
@@ -428,27 +428,16 @@ public class RunningProcessesView extends FrameLayout
mListView.setRecyclerListener(this); mListView.setRecyclerListener(this);
mAdapter = new ServiceListAdapter(mState); mAdapter = new ServiceListAdapter(mState);
mListView.setAdapter(mAdapter); mListView.setAdapter(mAdapter);
mColorBar = (LinearColorBar)findViewById(R.id.color_bar); mHeader = inflater.inflate(R.layout.running_processes_header, null);
mBackgroundProcessText = (TextView)findViewById(R.id.backgroundText); mListView.addHeaderView(mHeader);
mBackgroundProcessText.setOnClickListener(new View.OnClickListener() { mColorBar = (LinearColorBar)mHeader.findViewById(R.id.color_bar);
@Override Resources res = getResources();
public void onClick(View v) { mColorBar.setColors(res.getColor(R.color.running_processes_system_ram),
mAdapter.setShowBackground(true); res.getColor(R.color.running_processes_apps_ram),
if (mOwner != null) { res.getColor(R.color.running_processes_free_ram));
mOwner.getActivity().invalidateOptionsMenu(); mBackgroundProcessText = (TextView)mHeader.findViewById(R.id.freeSize);
} mAppsProcessText = (TextView)mHeader.findViewById(R.id.appsSize);
} mForegroundProcessText = (TextView)mHeader.findViewById(R.id.systemSize);
});
mForegroundProcessText = (TextView)findViewById(R.id.foregroundText);
mForegroundProcessText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.setShowBackground(false);
if (mOwner != null) {
mOwner.getActivity().invalidateOptionsMenu();
}
}
});
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
mAm.getMemoryInfo(memInfo); mAm.getMemoryInfo(memInfo);