Merge "Don't back up apps in the 'stopped' state" into klp-dev
diff --git a/api/current.txt b/api/current.txt
index b3e5c6e..f04bf40 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -10372,6 +10372,37 @@
}
+package android.graphics.pdf {
+
+ public class PdfDocument {
+ ctor public PdfDocument();
+ method public void close();
+ method public void finishPage(android.graphics.pdf.PdfDocument.Page);
+ method public java.util.List<android.graphics.pdf.PdfDocument.PageInfo> getPages();
+ method public android.graphics.pdf.PdfDocument.Page startPage(android.graphics.pdf.PdfDocument.PageInfo);
+ method public void writeTo(java.io.OutputStream) throws java.io.IOException;
+ }
+
+ public static final class PdfDocument.Page {
+ method public android.graphics.Canvas getCanvas();
+ method public android.graphics.pdf.PdfDocument.PageInfo getInfo();
+ }
+
+ public static final class PdfDocument.PageInfo {
+ method public android.graphics.Rect getContentRect();
+ method public int getPageHeight();
+ method public int getPageNumber();
+ method public int getPageWidth();
+ }
+
+ public static final class PdfDocument.PageInfo.Builder {
+ ctor public PdfDocument.PageInfo.Builder(int, int, int);
+ method public android.graphics.pdf.PdfDocument.PageInfo create();
+ method public android.graphics.pdf.PdfDocument.PageInfo.Builder setContentRect(android.graphics.Rect);
+ }
+
+}
+
package android.hardware {
public class Camera {
@@ -19250,7 +19281,7 @@
method public abstract void onLayout(android.print.PrintAttributes, android.print.PrintAttributes, android.os.CancellationSignal, android.print.PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle);
method public void onStart();
method public abstract void onWrite(android.print.PageRange[], android.os.ParcelFileDescriptor, android.os.CancellationSignal, android.print.PrintDocumentAdapter.WriteResultCallback);
- field public static final java.lang.String METADATA_KEY_PRINT_PREVIEW = "KEY_METADATA_PRINT_PREVIEW";
+ field public static final java.lang.String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
}
public static abstract class PrintDocumentAdapter.LayoutResultCallback {
@@ -19386,41 +19417,12 @@
package android.print.pdf {
- public final class PdfDocument {
- method public void close();
- method public void finishPage(android.print.pdf.PdfDocument.Page);
- method public java.util.List<android.print.pdf.PdfDocument.PageInfo> getPages();
- method public static android.print.pdf.PdfDocument open();
- method public android.print.pdf.PdfDocument.Page startPage(android.print.pdf.PdfDocument.PageInfo);
- method public void writeTo(java.io.OutputStream);
- }
-
- public static final class PdfDocument.Page {
- method public android.graphics.Canvas getCanvas();
- method public android.print.pdf.PdfDocument.PageInfo getInfo();
- }
-
- public static final class PdfDocument.PageInfo {
- method public android.graphics.Rect getContentSize();
- method public android.graphics.Matrix getInitialTransform();
- method public int getPageNumber();
- method public android.graphics.Rect getPageSize();
- }
-
- public static final class PdfDocument.PageInfo.Builder {
- ctor public PdfDocument.PageInfo.Builder(android.graphics.Rect, int);
- method public android.print.pdf.PdfDocument.PageInfo create();
- method public android.print.pdf.PdfDocument.PageInfo.Builder setContentSize(android.graphics.Rect);
- method public android.print.pdf.PdfDocument.PageInfo.Builder setInitialTransform(android.graphics.Matrix);
- }
-
- public final class PrintedPdfDocument {
- method public void close();
- method public void finishPage(android.print.pdf.PdfDocument.Page);
- method public java.util.List<android.print.pdf.PdfDocument.PageInfo> getPages();
- method public static android.print.pdf.PrintedPdfDocument open(android.content.Context, android.print.PrintAttributes);
- method public android.print.pdf.PdfDocument.Page startPage(int);
- method public void writeTo(java.io.OutputStream);
+ public class PrintedPdfDocument extends android.graphics.pdf.PdfDocument {
+ ctor public PrintedPdfDocument(android.content.Context, android.print.PrintAttributes);
+ method public android.graphics.Rect getPageContentRect();
+ method public int getPageHeight();
+ method public int getPageWidth();
+ method public android.graphics.pdf.PdfDocument.Page startPage(int);
}
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 209514a..3e20f1f 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -855,10 +855,6 @@
}
}
- public void getMemoryInfo(Debug.MemoryInfo outInfo) {
- Debug.getMemoryInfo(outInfo);
- }
-
public void dispatchPackageBroadcast(int cmd, String[] packages) {
queueOrSendMessage(H.DISPATCH_PACKAGE_BROADCAST, packages, cmd);
}
@@ -895,30 +891,23 @@
}
@Override
- public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin,
+ public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin,
boolean dumpInfo, boolean dumpDalvik, String[] args) {
FileOutputStream fout = new FileOutputStream(fd);
PrintWriter pw = new FastPrintWriter(fout);
try {
- return dumpMemInfo(pw, checkin, dumpInfo, dumpDalvik);
+ dumpMemInfo(pw, mem, checkin, dumpInfo, dumpDalvik);
} finally {
pw.flush();
}
}
- private Debug.MemoryInfo dumpMemInfo(PrintWriter pw, boolean checkin, boolean dumpInfo,
- boolean dumpDalvik) {
+ private void dumpMemInfo(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin,
+ boolean dumpInfo, boolean dumpDalvik) {
long nativeMax = Debug.getNativeHeapSize() / 1024;
long nativeAllocated = Debug.getNativeHeapAllocatedSize() / 1024;
long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
- Debug.MemoryInfo memInfo = new Debug.MemoryInfo();
- Debug.getMemoryInfo(memInfo);
-
- if (!dumpInfo) {
- return memInfo;
- }
-
Runtime runtime = Runtime.getRuntime();
long dalvikMax = runtime.totalMemory() / 1024;
@@ -1043,7 +1032,7 @@
}
pw.println();
- return memInfo;
+ return;
}
// otherwise, show human-readable format
@@ -1168,8 +1157,6 @@
pw.println(" Asset Allocations");
pw.print(assetAlloc);
}
-
- return memInfo;
}
@Override
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index a4e80e5..876bf78 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -450,16 +450,6 @@
return true;
}
- case GET_MEMORY_INFO_TRANSACTION:
- {
- data.enforceInterface(IApplicationThread.descriptor);
- Debug.MemoryInfo mi = new Debug.MemoryInfo();
- getMemoryInfo(mi);
- reply.writeNoException();
- mi.writeToParcel(reply, 0);
- return true;
- }
-
case DISPATCH_PACKAGE_BROADCAST_TRANSACTION:
{
data.enforceInterface(IApplicationThread.descriptor);
@@ -530,14 +520,14 @@
{
data.enforceInterface(IApplicationThread.descriptor);
ParcelFileDescriptor fd = data.readFileDescriptor();
+ Debug.MemoryInfo mi = Debug.MemoryInfo.CREATOR.createFromParcel(data);
boolean checkin = data.readInt() != 0;
boolean dumpInfo = data.readInt() != 0;
boolean dumpDalvik = data.readInt() != 0;
String[] args = data.readStringArray();
- Debug.MemoryInfo mi = null;
if (fd != null) {
try {
- mi = dumpMemInfo(fd.getFileDescriptor(), checkin, dumpInfo, dumpDalvik, args);
+ dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args);
} finally {
try {
fd.close();
@@ -547,7 +537,6 @@
}
}
reply.writeNoException();
- mi.writeToParcel(reply, 0);
return true;
}
@@ -1108,17 +1097,6 @@
data.recycle();
}
- public void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException {
- Parcel data = Parcel.obtain();
- Parcel reply = Parcel.obtain();
- data.writeInterfaceToken(IApplicationThread.descriptor);
- mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
- reply.readException();
- outInfo.readFromParcel(reply);
- data.recycle();
- reply.recycle();
- }
-
public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
@@ -1194,23 +1172,21 @@
IBinder.FLAG_ONEWAY);
}
- public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo,
- boolean dumpDalvik, String[] args) throws RemoteException {
+ public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin,
+ boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeFileDescriptor(fd);
+ mem.writeToParcel(data, 0);
data.writeInt(checkin ? 1 : 0);
data.writeInt(dumpInfo ? 1 : 0);
data.writeInt(dumpDalvik ? 1 : 0);
data.writeStringArray(args);
mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0);
reply.readException();
- Debug.MemoryInfo info = new Debug.MemoryInfo();
- info.readFromParcel(reply);
data.recycle();
reply.recycle();
- return info;
}
public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException {
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 058b975..43a5fbd 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -118,7 +118,6 @@
void dumpHeap(boolean managed, String path, ParcelFileDescriptor fd)
throws RemoteException;
void setSchedulingGroup(int group) throws RemoteException;
- void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException;
static final int PACKAGE_REMOVED = 0;
static final int EXTERNAL_STORAGE_UNAVAILABLE = 1;
void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException;
@@ -128,7 +127,7 @@
void setCoreSettings(Bundle coreSettings) throws RemoteException;
void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info) throws RemoteException;
void scheduleTrimMemory(int level) throws RemoteException;
- Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo,
+ void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo,
boolean dumpDalvik, String[] args) throws RemoteException;
void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException;
void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException;
@@ -171,7 +170,7 @@
int SET_SCHEDULING_GROUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28;
int SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29;
int SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30;
- int GET_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+31;
+
int SCHEDULE_SUICIDE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+32;
int DISPATCH_PACKAGE_BROADCAST_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+33;
int SCHEDULE_CRASH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+34;
diff --git a/core/java/android/print/PrintDocumentAdapter.java b/core/java/android/print/PrintDocumentAdapter.java
index 8ac34c1..4113ac7 100644
--- a/core/java/android/print/PrintDocumentAdapter.java
+++ b/core/java/android/print/PrintDocumentAdapter.java
@@ -74,10 +74,10 @@
public abstract class PrintDocumentAdapter {
/**
- * Meta-data key: mapped to a boolean value that is <code>true</code> if
+ * Extra: mapped to a boolean value that is <code>true</code> if
* the current layout is for a print preview, <code>false</code> otherwise.
*/
- public static final String METADATA_KEY_PRINT_PREVIEW = "KEY_METADATA_PRINT_PREVIEW";
+ public static final String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
/**
* Called when printing starts. You can use this callback to allocate
@@ -112,15 +112,15 @@
* @param newAttributes The new print attributes.
* @param cancellationSignal Signal for observing cancel layout requests.
* @param callback Callback to inform the system for the layout result.
- * @param metadata Additional information about how layout the content.
+ * @param extras Additional information about how to layout the content.
*
* @see LayoutResultCallback
* @see CancellationSignal
- * @see #METADATA_KEY_PRINT_PREVIEW
+ * @see #EXTRA_PRINT_PREVIEW
*/
public abstract void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,
CancellationSignal cancellationSignal, LayoutResultCallback callback,
- Bundle metadata);
+ Bundle extras);
/**
* Called when specific pages of the content should be written in the
diff --git a/core/java/android/print/pdf/PrintedPdfDocument.java b/core/java/android/print/pdf/PrintedPdfDocument.java
index 1fd4646..2d8aafa 100644
--- a/core/java/android/print/pdf/PrintedPdfDocument.java
+++ b/core/java/android/print/pdf/PrintedPdfDocument.java
@@ -18,67 +18,81 @@
import android.content.Context;
import android.graphics.Rect;
+import android.graphics.pdf.PdfDocument;
+import android.graphics.pdf.PdfDocument.Page;
+import android.graphics.pdf.PdfDocument.PageInfo;
import android.print.PrintAttributes;
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
-import android.print.pdf.PdfDocument;
-import android.print.pdf.PdfDocument.Page;
-import android.print.pdf.PdfDocument.PageInfo;
-
-import java.io.OutputStream;
-import java.util.List;
/**
- * This class is a helper for printing content to a different media
- * size. This class is responsible for computing a correct page size
- * given some print constraints, i.e. {@link PrintAttributes}. It is
- * an adapter around a {@link PdfDocument}.
+ * This class is a helper for creating a PDF file for given print
+ * attributes. It is useful for implementing printing via the native
+ * Android graphics APIs.
+ * <p>
+ * This class computes the page width, page height, and content rectangle
+ * from the provided print attributes and these precomputed values can be
+ * accessed via {@link #getPageWidth()}, {@link #getPageHeight()}, and
+ * {@link #getPageContentRect()}, respectively. The {@link #startPage(int)}
+ * methods creates pages whose {@link PageInfo} is initialized with the
+ * precomputed values for width, height, and content rectangle.
+ * <p>
+ * A typical use of the APIs looks like this:
+ * </p>
+ * <pre>
+ * // open a new document
+ * PrintedPdfDocument document = new PrintedPdfDocument(context,
+ * printAttributes);
+ *
+ * // start a page
+ * Page page = document.startPage(0);
+ *
+ * // draw something on the page
+ * View content = getContentView();
+ * content.draw(page.getCanvas());
+ *
+ * // finish the page
+ * document.finishPage(page);
+ * . . .
+ * // add more pages
+ * . . .
+ * // write the document content
+ * document.writeTo(getOutputStream());
+ *
+ * //close the document
+ * document.close();
+ * </pre>
*/
-public final class PrintedPdfDocument {
+public class PrintedPdfDocument extends PdfDocument {
private static final int MILS_PER_INCH = 1000;
private static final int POINTS_IN_INCH = 72;
- private final PdfDocument mDocument = PdfDocument.open();
- private final Rect mPageSize = new Rect();
- private final Rect mContentSize = new Rect();
+ private final int mPageWidth;
+ private final int mPageHeight;
+ private final Rect mContentRect;
/**
- * Opens a new document. The document pages are computed based on
- * the passes in {@link PrintAttributes}.
+ * Creates a new document.
* <p>
* <strong>Note:</strong> You must close the document after you are
- * done by calling {@link #close()}
+ * done by calling {@link #close()}.
* </p>
*
* @param context Context instance for accessing resources.
* @param attributes The print attributes.
- * @return The document.
- *
- * @see #close()
*/
- public static PrintedPdfDocument open(Context context, PrintAttributes attributes) {
- return new PrintedPdfDocument(context, attributes);
- }
-
- /**
- * Creates a new instance.
- *
- * @param context Context instance for accessing resources and services.
- * @param attributes The {@link PrintAttributes} to user.
- */
- private PrintedPdfDocument(Context context, PrintAttributes attributes) {
+ public PrintedPdfDocument(Context context, PrintAttributes attributes) {
MediaSize mediaSize = attributes.getMediaSize();
// Compute the size of the target canvas from the attributes.
- final int pageWidth = (int) (((float) mediaSize.getWidthMils() / MILS_PER_INCH)
+ mPageWidth = (int) (((float) mediaSize.getWidthMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
- final int pageHeight = (int) (((float) mediaSize.getHeightMils() / MILS_PER_INCH)
+ mPageHeight = (int) (((float) mediaSize.getHeightMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
- mPageSize.set(0, 0, pageWidth, pageHeight);
// Compute the content size from the attributes.
Margins minMargins = attributes.getMinMargins();
- final int marginLeft = (int) (((float) minMargins.getLeftMils() /MILS_PER_INCH)
+ final int marginLeft = (int) (((float) minMargins.getLeftMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
final int marginTop = (int) (((float) minMargins.getTopMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
@@ -86,14 +100,14 @@
* POINTS_IN_INCH);
final int marginBottom = (int) (((float) minMargins.getBottomMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
- mContentSize.set(mPageSize.left + marginLeft, mPageSize.top + marginTop,
- mPageSize.right - marginRight, mPageSize.bottom - marginBottom);
+ mContentRect = new Rect(marginLeft, marginTop, mPageWidth - marginRight,
+ mPageHeight - marginBottom);
}
/**
- * Starts a page using a page size computed from the print attributes
- * passed in {@link #open(Context, PrintAttributes)} and the given page
- * number to create appropriate {@link PageInfo}.
+ * Starts a new page. The page is created using width, height and content
+ * rectangle computed from the print attributes passed in the constructor
+ * and the given page number to create an appropriate {@link PageInfo}.
* <p>
* After the page is created you can draw arbitrary content on the page's
* canvas which you can get by calling {@link Page#getCanvas() Page.getCanvas()}.
@@ -103,63 +117,48 @@
* </p>
* <p>
* <strong>Note:</strong> Do not call this method after {@link #close()}.
+ * Also do not call this method if the last page returned by this method
+ * is not finished by calling {@link #finishPage(Page)}.
* </p>
*
- * @param pageNumber The page number.
+ * @param pageNumber The page number. Must be a positive value.
* @return A blank page.
*
* @see #finishPage(Page)
*/
public Page startPage(int pageNumber) {
PageInfo pageInfo = new PageInfo
- .Builder(mPageSize, 0)
- .setContentSize(mContentSize)
+ .Builder(mPageWidth, mPageHeight, pageNumber)
+ .setContentRect(mContentRect)
.create();
- Page page = mDocument.startPage(pageInfo);
- return page;
+ return startPage(pageInfo);
}
/**
- * Finishes a started page. You should always finish the last started page.
- * <p>
- * <strong>Note:</strong> Do not call this method after {@link #close()}.
- * </p>
+ * Gets the page width.
*
- * @param page The page.
- *
- * @see #startPage(int)
+ * @return The page width in PostScript points (1/72th of an inch).
*/
- public void finishPage(Page page) {
- mDocument.finishPage(page);
+ public int getPageWidth() {
+ return mPageWidth;
}
/**
- * Writes the document to an output stream.
- * <p>
- * <strong>Note:</strong> Do not call this method after {@link #close()}.
- * </p>
+ * Gets the page height.
*
- * @param out The output stream.
+ * @return The page height in PostScript points (1/72th of an inch).
*/
- public void writeTo(OutputStream out) {
- mDocument.writeTo(out);
+ public int getPageHeight() {
+ return mPageHeight;
}
/**
- * Gets the pages of the document.
+ * Gets the content rectangle. This is the area of the page that
+ * contains printed data and is relative to the page top left.
*
- * @return The pages.
+ * @return The content rectangle.
*/
- public List<PageInfo> getPages() {
- return mDocument.getPages();
- }
-
- /**
- * Closes this document. This method should be called after you
- * are done working with the document. After this call the document
- * is considered closed and none of its methods should be called.
- */
- public void close() {
- mDocument.close();
+ public Rect getPageContentRect() {
+ return mContentRect;
}
}
diff --git a/core/java/android/printservice/package.html b/core/java/android/printservice/package.html
index 7410a49..2fb06bd 100644
--- a/core/java/android/printservice/package.html
+++ b/core/java/android/printservice/package.html
@@ -4,12 +4,12 @@
Provides classes for implementing print services. Print services are plug-in components
that know how to talk to printers via some standard protocols. These services serve as a
bridge between the system and the printers. Hence, the printer and print protocol specific
-implementation is factored out of the system and can by independently developed and updated.
+implementation is factored out of the system and can be independently developed and updated.
</p>
<p>
A print service implementation should extend {@link android.printservice.PrintService}
and implement its abstract methods. Also the print service has to follow the contract for
-managing print {@link android.printservice.PrintJob}s.
+managing {@link android.printservice.PrintJob}s.
<p/>
<p>
The system is responsible for starting and stopping a print service depending on whether
diff --git a/core/java/com/android/internal/app/ProcessStats.java b/core/java/com/android/internal/app/ProcessStats.java
index 1475e2c..a281f7c 100644
--- a/core/java/com/android/internal/app/ProcessStats.java
+++ b/core/java/com/android/internal/app/ProcessStats.java
@@ -166,7 +166,7 @@
static final String CSV_SEP = "\t";
// Current version of the parcel format.
- private static final int PARCEL_VERSION = 12;
+ private static final int PARCEL_VERSION = 13;
// In-memory Parcel magic number, used to detect attempts to unmarshall bad data
private static final int MAGIC = 0x50535453;
@@ -646,6 +646,13 @@
pw.print(prefix); pw.print("Killed for excessive CPU use: ");
pw.print(proc.mNumExcessiveCpu); pw.println(" times");
}
+ if (proc.mNumCachedKill != 0) {
+ pw.print(prefix); pw.print("Killed from cached state: ");
+ pw.print(proc.mNumCachedKill); pw.print(" times from pss ");
+ printSizeValue(pw, proc.mMinCachedKillPss * 1024); pw.print("-");
+ printSizeValue(pw, proc.mAvgCachedKillPss * 1024); pw.print("-");
+ printSizeValue(pw, proc.mMaxCachedKillPss * 1024); pw.println();
+ }
}
static void dumpStateHeadersCsv(PrintWriter pw, String sep, int[] screenStates,
@@ -2033,7 +2040,8 @@
dumpAllProcessPssCheckin(pw, proc);
pw.println();
}
- if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0) {
+ if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0
+ || proc.mNumCachedKill > 0) {
pw.print("pkgkills,");
pw.print(pkgName);
pw.print(",");
@@ -2044,6 +2052,14 @@
pw.print(proc.mNumExcessiveWake);
pw.print(",");
pw.print(proc.mNumExcessiveCpu);
+ pw.print(",");
+ pw.print(proc.mNumCachedKill);
+ pw.print(",");
+ pw.print(proc.mMinCachedKillPss);
+ pw.print(":");
+ pw.print(proc.mAvgCachedKillPss);
+ pw.print(":");
+ pw.print(proc.mMaxCachedKillPss);
pw.println();
}
}
@@ -2090,7 +2106,8 @@
dumpAllProcessPssCheckin(pw, procState);
pw.println();
}
- if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0) {
+ if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0
+ || procState.mNumCachedKill > 0) {
pw.print("kills,");
pw.print(procName);
pw.print(",");
@@ -2099,6 +2116,14 @@
pw.print(procState.mNumExcessiveWake);
pw.print(",");
pw.print(procState.mNumExcessiveCpu);
+ pw.print(",");
+ pw.print(procState.mNumCachedKill);
+ pw.print(",");
+ pw.print(procState.mMinCachedKillPss);
+ pw.print(":");
+ pw.print(procState.mAvgCachedKillPss);
+ pw.print(":");
+ pw.print(procState.mMaxCachedKillPss);
pw.println();
}
}
@@ -2135,6 +2160,11 @@
int mNumExcessiveWake;
int mNumExcessiveCpu;
+ int mNumCachedKill;
+ long mMinCachedKillPss;
+ long mAvgCachedKillPss;
+ long mMaxCachedKillPss;
+
boolean mMultiPackage;
boolean mDead;
@@ -2200,6 +2230,10 @@
}
pnew.mNumExcessiveWake = mNumExcessiveWake;
pnew.mNumExcessiveCpu = mNumExcessiveCpu;
+ pnew.mNumCachedKill = mNumCachedKill;
+ pnew.mMinCachedKillPss = mMinCachedKillPss;
+ pnew.mAvgCachedKillPss = mAvgCachedKillPss;
+ pnew.mMaxCachedKillPss = mMaxCachedKillPss;
pnew.mActive = mActive;
pnew.mNumStartedServices = mNumStartedServices;
return pnew;
@@ -2226,6 +2260,10 @@
}
mNumExcessiveWake += other.mNumExcessiveWake;
mNumExcessiveCpu += other.mNumExcessiveCpu;
+ if (other.mNumCachedKill > 0) {
+ addCachedKill(other.mNumCachedKill, other.mMinCachedKillPss,
+ other.mAvgCachedKillPss, other.mMaxCachedKillPss);
+ }
}
void resetSafely(long now) {
@@ -2238,6 +2276,8 @@
mPssTableSize = 0;
mNumExcessiveWake = 0;
mNumExcessiveCpu = 0;
+ mNumCachedKill = 0;
+ mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0;
}
void makeDead() {
@@ -2268,6 +2308,12 @@
}
out.writeInt(mNumExcessiveWake);
out.writeInt(mNumExcessiveCpu);
+ out.writeInt(mNumCachedKill);
+ if (mNumCachedKill > 0) {
+ out.writeLong(mMinCachedKillPss);
+ out.writeLong(mAvgCachedKillPss);
+ out.writeLong(mMaxCachedKillPss);
+ }
}
boolean readFromParcel(Parcel in, boolean fully) {
@@ -2289,6 +2335,14 @@
mPssTableSize = mPssTable != null ? mPssTable.length : 0;
mNumExcessiveWake = in.readInt();
mNumExcessiveCpu = in.readInt();
+ mNumCachedKill = in.readInt();
+ if (mNumCachedKill > 0) {
+ mMinCachedKillPss = in.readLong();
+ mAvgCachedKillPss = in.readLong();
+ mMaxCachedKillPss = in.readLong();
+ } else {
+ mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0;
+ }
return true;
}
@@ -2502,6 +2556,37 @@
}
}
+ private void addCachedKill(int num, long minPss, long avgPss, long maxPss) {
+ if (mNumCachedKill <= 0) {
+ mNumCachedKill = num;
+ mMinCachedKillPss = minPss;
+ mAvgCachedKillPss = avgPss;
+ mMaxCachedKillPss = maxPss;
+ } else {
+ if (minPss < mMinCachedKillPss) {
+ mMinCachedKillPss = minPss;
+ }
+ if (maxPss > mMaxCachedKillPss) {
+ mMaxCachedKillPss = maxPss;
+ }
+ mAvgCachedKillPss = (long)( ((mAvgCachedKillPss*(double)mNumCachedKill) + avgPss)
+ / (mNumCachedKill+num) );
+ mNumCachedKill += num;
+ }
+ }
+
+ public void reportCachedKill(ArrayMap<String, ProcessState> pkgList, long pss) {
+ ensureNotDead();
+ mCommonProcess.addCachedKill(1, pss, pss, pss);
+ if (!mCommonProcess.mMultiPackage) {
+ return;
+ }
+
+ for (int ip=pkgList.size()-1; ip>=0; ip--) {
+ pullFixedProc(pkgList, ip).addCachedKill(1, pss, pss, pss);
+ }
+ }
+
ProcessState pullFixedProc(String pkgName) {
if (mMultiPackage) {
// The array map is still pointing to a common process state
diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl
index d1f7fa3..dd2e006 100644
--- a/core/java/com/android/internal/policy/IKeyguardService.aidl
+++ b/core/java/com/android/internal/policy/IKeyguardService.aidl
@@ -15,6 +15,8 @@
*/
package com.android.internal.policy;
+import android.view.MotionEvent;
+
import com.android.internal.policy.IKeyguardShowCallback;
import com.android.internal.policy.IKeyguardExitCallback;
@@ -39,4 +41,5 @@
oneway void doKeyguardTimeout(in Bundle options);
oneway void setCurrentUser(int userId);
oneway void showAssistant();
+ oneway void dispatch(in MotionEvent event);
}
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index d5d746a..f78d807 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -118,6 +118,7 @@
android/graphics/Utils.cpp \
android/graphics/Xfermode.cpp \
android/graphics/YuvToJpegEncoder.cpp \
+ android/graphics/pdf/PdfDocument.cpp \
android_media_AudioRecord.cpp \
android_media_AudioSystem.cpp \
android_media_AudioTrack.cpp \
@@ -135,7 +136,6 @@
android_util_FileObserver.cpp \
android/opengl/poly_clip.cpp.arm \
android/opengl/util.cpp.arm \
- android/print/android_print_pdf_PdfDocument.cpp \
android_server_NetworkManagementSocketTagger.cpp \
android_server_Watchdog.cpp \
android_ddm_DdmHandleNativeHeap.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 490d85c..8518101 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -117,6 +117,7 @@
extern int register_android_graphics_Region(JNIEnv* env);
extern int register_android_graphics_SurfaceTexture(JNIEnv* env);
extern int register_android_graphics_Xfermode(JNIEnv* env);
+extern int register_android_graphics_pdf_PdfDocument(JNIEnv* env);
extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
extern int register_android_view_GraphicBuffer(JNIEnv* env);
extern int register_android_view_GLES20DisplayList(JNIEnv* env);
@@ -144,7 +145,6 @@
extern int register_android_os_FileUtils(JNIEnv *env);
extern int register_android_os_UEventObserver(JNIEnv* env);
extern int register_android_os_MemoryFile(JNIEnv* env);
-extern int register_android_print_pdf_PdfDocument(JNIEnv* env);
extern int register_android_net_LocalSocketImpl(JNIEnv* env);
extern int register_android_net_NetworkUtils(JNIEnv* env);
extern int register_android_net_TrafficStats(JNIEnv* env);
@@ -1161,6 +1161,7 @@
REG_JNI(register_android_graphics_Typeface),
REG_JNI(register_android_graphics_Xfermode),
REG_JNI(register_android_graphics_YuvImage),
+ REG_JNI(register_android_graphics_pdf_PdfDocument),
REG_JNI(register_android_database_CursorWindow),
REG_JNI(register_android_database_SQLiteConnection),
@@ -1173,7 +1174,6 @@
REG_JNI(register_android_os_SELinux),
REG_JNI(register_android_os_Trace),
REG_JNI(register_android_os_UEventObserver),
- REG_JNI(register_android_print_pdf_PdfDocument),
REG_JNI(register_android_net_LocalSocketImpl),
REG_JNI(register_android_net_NetworkUtils),
REG_JNI(register_android_net_TrafficStats),
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 9c20de2..0d757f7 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -297,6 +297,9 @@
(SkBitmap::Allocator*)&recyclingAllocator : (SkBitmap::Allocator*)&javaAllocator;
if (decodeMode != SkImageDecoder::kDecodeBounds_Mode) {
if (!willScale) {
+ // If the java allocator is being used to allocate the pixel memory, the decoder
+ // need not write zeroes, since the memory is initialized to 0.
+ decoder->setSkipWritingZeroes(outputAllocator == &javaAllocator);
decoder->setAllocator(outputAllocator);
} else if (javaBitmap != NULL) {
// check for eventual scaled bounds at allocation time, so we don't decode the bitmap
@@ -403,7 +406,12 @@
if (!outputBitmap->allocPixels(outputAllocator, NULL)) {
return nullObjectReturn("allocation failed for scaled bitmap");
}
- outputBitmap->eraseColor(0);
+
+ // If outputBitmap's pixels are newly allocated by Java, there is no need
+ // to erase to 0, since the pixels were initialized to 0.
+ if (outputAllocator != &javaAllocator) {
+ outputBitmap->eraseColor(0);
+ }
SkPaint paint;
paint.setFilterBitmap(true);
diff --git a/core/jni/android/print/android_print_pdf_PdfDocument.cpp b/core/jni/android/graphics/pdf/PdfDocument.cpp
similarity index 73%
rename from core/jni/android/print/android_print_pdf_PdfDocument.cpp
rename to core/jni/android/graphics/pdf/PdfDocument.cpp
index 3daad5c..b57a0fe 100644
--- a/core/jni/android/print/android_print_pdf_PdfDocument.cpp
+++ b/core/jni/android/graphics/pdf/PdfDocument.cpp
@@ -28,6 +28,8 @@
namespace android {
+#define LOGD(x...) do { Log::Instance()->printf(Log::ELogD, x); } while(0)
+
static jint nativeCreateDocument(JNIEnv* env, jobject clazz) {
return reinterpret_cast<jint>(new SkPDFDocument());
}
@@ -36,21 +38,16 @@
delete reinterpret_cast<SkPDFDocument*>(documentPtr);
}
-static jint nativeCreatePage(JNIEnv* env, jobject thiz,
- jobject pageSize, jobject contentSize, jint initialTransformation) {
- SkIRect skPageSizeRect;
- GraphicsJNI::jrect_to_irect(env, pageSize, &skPageSizeRect);
- SkISize skPageSize = SkISize::Make(skPageSizeRect.width(),
- skPageSizeRect.height());
+static jint nativeCreatePage(JNIEnv* env, jobject thiz, jint pageWidth, jint pageHeight,
+ jint contentLeft, jint contentTop, jint contentRight, jint contentBottom) {
- SkIRect skContentRect;
- GraphicsJNI::jrect_to_irect(env, contentSize, &skContentRect);
- SkISize skContentSize = SkISize::Make(skContentRect.width(),
- skContentRect.height());
+ SkMatrix transformation;
+ transformation.setTranslate(contentLeft, contentTop);
- SkMatrix* transformation = reinterpret_cast<SkMatrix*>(initialTransformation);
- SkPDFDevice* skPdfDevice = new SkPDFDevice(skPageSize, skContentSize, *transformation);
+ SkISize skPageSize = SkISize::Make(pageWidth, pageHeight);
+ SkISize skContentSize = SkISize::Make(contentRight - contentLeft, contentBottom - contentTop);
+ SkPDFDevice* skPdfDevice = new SkPDFDevice(skPageSize, skContentSize, transformation);
return reinterpret_cast<jint>(new SkCanvas(skPdfDevice));
}
@@ -72,15 +69,15 @@
static JNINativeMethod gPdfDocument_Methods[] = {
{"nativeCreateDocument", "()I", (void*) nativeCreateDocument},
{"nativeFinalize", "(I)V", (void*) nativeFinalize},
- {"nativeCreatePage", "(Landroid/graphics/Rect;Landroid/graphics/Rect;I)I",
+ {"nativeCreatePage", "(IIIIII)I",
(void*) nativeCreatePage},
{"nativeAppendPage", "(II)V", (void*) nativeAppendPage},
{"nativeWriteTo", "(ILjava/io/OutputStream;[B)V", (void*) nativeWriteTo}
};
-int register_android_print_pdf_PdfDocument(JNIEnv* env) {
+int register_android_graphics_pdf_PdfDocument(JNIEnv* env) {
int result = android::AndroidRuntime::registerNativeMethods(
- env, "android/print/pdf/PdfDocument", gPdfDocument_Methods,
+ env, "android/graphics/pdf/PdfDocument", gPdfDocument_Methods,
NELEM(gPdfDocument_Methods));
return result;
}
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 1c43cc5..3994047 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -310,6 +310,18 @@
// ----------------------------------------------------------------------------
+// This class is used to destroy a RefBase asynchronously
+class AsyncDestructThread : public Thread
+{
+public:
+ AsyncDestructThread(sp<RefBase> refBase) : mRefBase(refBase) { }
+protected:
+ virtual ~AsyncDestructThread() { }
+private:
+ virtual bool threadLoop() { return false; }
+ const sp<RefBase> mRefBase;
+};
+
#define CALLBACK_COND_WAIT_TIMEOUT_MS 1000
static void android_media_AudioRecord_release(JNIEnv *env, jobject thiz) {
sp<AudioRecord> lpRecorder = setAudioRecord(env, thiz, 0);
@@ -342,6 +354,17 @@
env->DeleteGlobalRef(lpCookie->audioRecord_ref);
delete lpCookie;
}
+ // FIXME AudioRecord destruction should not be slow
+ if (lpRecorder != 0) {
+ // must be a raw reference to avoid a race after run()
+ AsyncDestructThread *adt = new AsyncDestructThread(lpRecorder);
+ // guaranteed to not run destructor
+ lpRecorder.clear();
+ // after the run(), adt thread will hold a strong reference to lpRecorder,
+ // and the only strong reference to itself
+ adt->run("AsyncDestruct");
+ // do not delete adt here: adt thread destroys itself, and lpRecorder if needed
+ }
}
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index dc90da7..b720e73 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -878,6 +878,23 @@
sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, surface));
if (surfaceTexture->updateTexImage() == NO_ERROR) {
+ int64_t frameNumber = surfaceTexture->getFrameNumber();
+ // If the GLConsumer queue is in synchronous mode, need to discard all
+ // but latest frame, using the frame number to tell when we no longer
+ // have newer frames to target. Since we can't tell which mode it is in,
+ // do this unconditionally.
+ int dropCounter = 0;
+ while (surfaceTexture->updateTexImage() == NO_ERROR) {
+ int64_t newFrameNumber = surfaceTexture->getFrameNumber();
+ if (newFrameNumber == frameNumber) break;
+ frameNumber = newFrameNumber;
+ dropCounter++;
+ }
+ #if DEBUG_RENDERER
+ if (dropCounter > 0) {
+ RENDERER_LOGD("Dropped %d frames on texture layer update", dropCounter);
+ }
+ #endif
surfaceTexture->getTransformMatrix(transform);
GLenum renderTarget = surfaceTexture->getCurrentTextureTarget();
diff --git a/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_dark.png
index 7f79718..86b43c1 100644
--- a/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_light.png
index 951be79..cdf0078 100644
--- a/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
index 47f7c29..266ac98 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
index 841c964..49b375f 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
index 4fa62d7..b7c125b 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
index 242cee9..bf09b6f 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
index 3ffd433..9fd5b764 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
index 6065eb7..caff83d 100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
index 63ec738..4cddfda 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
index 1d80d5c..e94aabe 100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_dark.png
index 17a1051..961b0f7 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_light.png
index ef8320c..503de5c 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_dark.png
index 74e5235..a756e30 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_light.png
index 8c74e06..0d5bbe8 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_dark.png
index 5b3ca5d..c58a841 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_light.png
index 469e9f6..9e018ef 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_dark.png
index d0a5ca5..afaf691 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_light.png
index 08e7553..26adc72 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_dark.png
index 9aed106..e0cc6c5 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_light.png
index c5e4694..607d1cf 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_dark.png
index 5829969..4791366 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_light.png
index 5efe111..8680012 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_dark.png
index a967836..7dc2567 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_light.png
index 4f10c79..de02ace 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_dark.png
index eb0ef89..9b34307 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_light.png
index d8652d5..fc9af78 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_dark.png
index 2b0e235..c22ac4c 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_light.png
index 06dfad2..b2b0e29 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_dark.png
index 0fe4b14..f45882c 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_light.png
index aaced6e..d06fbeb 100644
--- a/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
index 61f9e6b..ce3954f 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
index 62ac7f9..2e7346a 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
index e10d5d1..1a642f7 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
index 685f8b5..cee608b 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
index d7ef1a6..0eb9e38 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
index fcf4623..f396c47 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
index 9a6fc4d..cbbbfb3 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
index 3875ac3..c4e1d81 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
index 185f9f7..97730d1 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
index 5d695d9..4350f16 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
index 57cfa4d..b7035fd 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
index 1a37993..852ad55 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
index 5694cf7..3d40107 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
index 6406c06..ee79ed6 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
index c50efaf..6cad71e 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
index 1a899c9e..edcb86d 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
index fecb1af..02013fa 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
index 37547d2..6689a89 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
index de15a23..36f9ad1 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
index beda050..10d74ce 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
index 9206f57..94c0ee7 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
index bef235b..9bef909 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
index 63204eb..469ba9b 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
index 7b79f3f..40a61ca 100644
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_longpressed_holo_dark.9.png b/core/res/res/drawable-hdpi/list_longpressed_holo_dark.9.png
index da023d3..f5cc0ed 100644
--- a/core/res/res/drawable-hdpi/list_longpressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_longpressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
index 1a0bf0d..596accb 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
index e852a45..2054530 100644
--- a/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark_am.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark_am.9.png
index f06d898..66f0d88 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light_am.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light_am.9.png
index 0638e58..10af163 100644
--- a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark_am.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark_am.9.png
index 6d2a8a4..aca9435 100644
--- a/core/res/res/drawable-hdpi/spinner_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_pressed_holo_light_am.9.png b/core/res/res/drawable-hdpi/spinner_pressed_holo_light_am.9.png
index bb43a46..eafd44a 100644
--- a/core/res/res/drawable-hdpi/spinner_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-hdpi/spinner_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
index 88717cc..b6009e6 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
index c759ca4..54d813c 100644
--- a/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_selected_pressed_holo.9.png b/core/res/res/drawable-hdpi/tab_selected_pressed_holo.9.png
index fe5850c..956d3c4 100644
--- a/core/res/res/drawable-hdpi/tab_selected_pressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/tab_selected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_unselected_pressed_holo.9.png b/core/res/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
index b59edc8..57e57e1 100644
--- a/core/res/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_dark.png
index 2eaa6e1..47e8b5b 100644
--- a/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_light.png
index 83b3315..1dc83fa 100644
--- a/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
index 2b8541c..af5c463 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
index e51e72a..819c552 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
index c10b235..ebdc717 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
index db9eab0..c73984e 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
index 45252b1..cebaf6d 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
index 1090816..7b12bea 100644
--- a/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
index a740800..eabb9d2 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
index faa95fc..09592355 100644
--- a/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_dark.png
index 217aa83..563f609 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_light.png
index 6853157..60e4717 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_dark.png
index 8b6bd93..fa4db4f 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_light.png
index 7992806..73a9d9e 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_dark.png
index fc74193..790251f 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_light.png
index 0b1e231..aa4690f 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_dark.png
index 1360dd0..c08b5c2 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_light.png
index 7e82935..5f0a748 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_dark.png
index bc82b1a..ba916c1 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_light.png
index ab3a79b..8d0638d 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_dark.png
index 3db345a..9b04c59 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
index 632f822..291fdb3 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_dark.png
index efd016c..5cc6600 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
index 484f115..f17edca 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_dark.png
index a314bef..26f5f11 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
index 4b4a1b9..6346fff 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_dark.png
index d6660cf..14bfde7 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
index 060bb5b..c5005f1 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_dark.png
index 9b169d4..886d86a 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
index 29ebf09..9f9eb1d 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
index f4a1cbc3..690371d 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
index 79ca527..6d026dc 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
index 33d1308..6e368d6 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
index 9672415..71cb582 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
index 94d3784..ebc9914 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
index 9f3ce4e..edc3399 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
index 05563bff..7dc8089 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
index ee166bc..a9abdc0 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
index a703645..360ce61 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
index 42876ce..4884309 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
index becc091..3b5901f 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
index e49dbab4..d61bf39 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
index 61837f84..ff9f8881 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
index 19f139f..0aa36fe 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
index 9fed6b5..fdd1e95 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
index d52dbb7..15c9334 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
index c0c6b49..14183171 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
index 237f7e7..2e81887 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
index c8ffef4..9083aec 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
index 8be8533..b5f0542d 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
index 5e55f6b..626a605 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
index 791eda5..196c650 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
index 646ed1c..0536053 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
index 08ea670..9fc345b8 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_longpressed_holo_dark.9.png b/core/res/res/drawable-mdpi/list_longpressed_holo_dark.9.png
index d120ab1..c6c1c02 100644
--- a/core/res/res/drawable-mdpi/list_longpressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_longpressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
index 5f97f2b..fd0e8d7 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
index b6427cc..061904c 100644
--- a/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark_am.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark_am.9.png
index 561ac55..b21c73c 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light_am.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light_am.9.png
index 05ffe3f..58904e8 100644
--- a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark_am.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark_am.9.png
index 363531a..75fb81e 100644
--- a/core/res/res/drawable-mdpi/spinner_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_pressed_holo_light_am.9.png b/core/res/res/drawable-mdpi/spinner_pressed_holo_light_am.9.png
index d62c04b..fdd88b5 100644
--- a/core/res/res/drawable-mdpi/spinner_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-mdpi/spinner_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
index 92ba340..f9f2fc6 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
index e099458..28a57a2 100644
--- a/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_pressed_holo.9.png b/core/res/res/drawable-mdpi/tab_selected_pressed_holo.9.png
index cdb7b19..c98f046 100644
--- a/core/res/res/drawable-mdpi/tab_selected_pressed_holo.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_unselected_pressed_holo.9.png b/core/res/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
index b27c88d..8753459 100644
--- a/core/res/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
+++ b/core/res/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_dark.png
index ebb439d5..ffb13b1 100644
--- a/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_light.png
index c497bf1..86eb889 100644
--- a/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
index 30b884e..0e1b948 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
index 511f125..8d8aabc 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
index 8a751c3..37f30eb 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
index 4294246..a4ac0c7 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png
index bda54ee..0f5f32f 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png
index 812e1b5..4097ef2 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png
index 6a0ee8d..a3795a0 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png
index 4bedd5c..f8e3bd4f8 100644
--- a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_dark.png
index 7cc4db2..94d6b6e 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_light.png
index e6d5630bf..68b8e53 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_dark.png
index 3556d13..0968ae1 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_light.png
index 42c6dfc..a444bf3 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_dark.png
index 0373da0..95eee6a 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_light.png
index 51b211c..4489c67 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png
index d17506f..67cbc1a 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_dark.png
index c70eeb5..0f46649 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_light.png
index fa1450e..e3c0761 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png
index 93a01a5..aaa1c5b 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_dark.png
index e711d9d..dad564d 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_light.png
index 4bdf427..c891ae3 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png
index dea640a..7eed14c 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_dark.png
index 3a264a4..a8a7bf8 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_light.png
index 33b0516..e898819 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_dark.png
index b349d10..f3a9d3d 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_light.png
index 47e56f1..92dfd1a 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_dark.png
index 4102fd5..0c9d726 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_light.png
index f60477b..3b2055c 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png
index cf93bfb..1db48b3 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_dark.png
index 5780bab..2b9b617 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_light.png
index 7483fbd..386b90a 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png
index 0696e04..a8e5d00 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_dark.png
index 79567ad..530eed2 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_light.png
index 65d472f..33ee629 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png
index 5f3bec2..8ec2103 100644
--- a/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off.png b/core/res/res/drawable-xhdpi/btn_star_big_off.png
index f60eb48..4b2abf1 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png b/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
index 8e0858d..c2f8598 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png b/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png
index f77e08c..1d1a1de 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png b/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
index 3f9695e..c6bb731 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png b/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
index b2e82da..c25f82e 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on.png b/core/res/res/drawable-xhdpi/btn_star_big_on.png
index 7cda089..93606c5 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png b/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
index da50266..c78e42c 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png b/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png
index df07003..6b2a537 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png b/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
index d56f46d..a25d0de 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png b/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
index 5a62f47..4d84628 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
+++ b/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
index f31cf27..13a190d 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
index 9b28db8..e9953d9 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
index bec293c..0f05262 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
index eec89df..90243a0 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
index 757908e..ce667b6 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
index c58bd5c..fe9cdee 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
index c591cae..392c1be 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
index b3e981a..28869df0 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
index 614f428..07c20fd 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
index f80f9b3..aabcec2 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
index 25fd6bb..5ffb71b 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
index fcd06af..22d0cfb 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
index 641f79b..fdee7fa 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
index 9e47d8b..7b6534b 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
index 8f14270..b4e438a 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
index 1d55670..8d19fc9 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
index 032e89f..046df69 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
index ef59ce2..f17d60b 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
index 840967c..474a25a 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png
index d7f7ee4..f66c059 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png
index a1b4e40..ce3d0d9 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png
index ba9f6a0..9d07941 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png
index 4afca86..ab794db 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png
index eb79128..2ea1047 100644
--- a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_longpressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_longpressed_holo_dark.9.png
index 4baaed3..1080244 100644
--- a/core/res/res/drawable-xhdpi/list_longpressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/list_longpressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
index e9e7c18..29037a0 100644
--- a/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
index 5326b45..f4af926 100644
--- a/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark_am.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark_am.9.png
index fe701d8..2dab26f 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light_am.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light_am.9.png
index efec27b..d15cd51 100644
--- a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark_am.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark_am.9.png
index eb44f17..2023a9d 100644
--- a/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_pressed_holo_light_am.9.png b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light_am.9.png
index dfceeed..3b066ae 100644
--- a/core/res/res/drawable-xhdpi/spinner_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
index 64a2e52..dc69b12 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png
index 5110439..2370b63 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_selected_pressed_holo.9.png b/core/res/res/drawable-xhdpi/tab_selected_pressed_holo.9.png
index 1df4a4d..f13a194 100644
--- a/core/res/res/drawable-xhdpi/tab_selected_pressed_holo.9.png
+++ b/core/res/res/drawable-xhdpi/tab_selected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png b/core/res/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png
index 574dbef..358ce26 100644
--- a/core/res/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png
+++ b/core/res/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_dark.png
index 5ba273a..4c95f96 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_light.png
index 32942b9..df468e0 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_dark.png
index 70ee78f..81b0f87 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_light.png
index 5bd562e..385350c 100644
--- a/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_dark.9.png
index a476b99..016a5ee 100644
--- a/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png
index cfa776c..9521603 100644
--- a/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_dark.png
index 181f0a5..39ff3d5 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_light.png
index 536c618..702155f 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_dark.png
index 3bb4ed0..d43a0f9 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_light.png
index 1171dcb..c05643f 100644
--- a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_dark.png
index 03c26f0..899e577 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_light.png
index f601b3b..aaa6826 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_dark.png
index dc5233b..e15fc63 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_light.png
index 2afb586..cc82a54 100644
--- a/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_dark.png
index d7416c0..b756e79 100644
--- a/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_light.png
index 47587d2..89bf5b4 100644
--- a/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_dark.png
index b258503..50e4940 100644
--- a/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_light.png
index 703e502..0b77905 100644
--- a/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xxhdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_dark.9.png
index 966511e..1e675d3 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_light.9.png
index b6cd6a28..2ceb802 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_dark.9.png
index 33eb011..e7a9265 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_light.9.png
index 8d55f44..df58767 100644
--- a/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xxhdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_longpressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/list_longpressed_holo_dark.9.png
index c6079cd..6eb451f 100644
--- a/core/res/res/drawable-xxhdpi/list_longpressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/list_longpressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_pressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
index 2d4f2300..d4952ea 100644
--- a/core/res/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/list_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_pressed_holo_light.9.png b/core/res/res/drawable-xxhdpi/list_pressed_holo_light.9.png
index bd707b0..1352a17 100644
--- a/core/res/res/drawable-xxhdpi/list_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xxhdpi/list_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_dark_am.9.png b/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_dark_am.9.png
index 5cb3d60..e78bfd0 100644
--- a/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_light_am.9.png b/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_light_am.9.png
index 91528b4..66c80a2 100644
--- a/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-xxhdpi/spinner_ab_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_pressed_holo_dark_am.9.png b/core/res/res/drawable-xxhdpi/spinner_pressed_holo_dark_am.9.png
index 37e1cdc..e2212a5 100644
--- a/core/res/res/drawable-xxhdpi/spinner_pressed_holo_dark_am.9.png
+++ b/core/res/res/drawable-xxhdpi/spinner_pressed_holo_dark_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_pressed_holo_light_am.9.png b/core/res/res/drawable-xxhdpi/spinner_pressed_holo_light_am.9.png
index 2990407..881ce7e 100644
--- a/core/res/res/drawable-xxhdpi/spinner_pressed_holo_light_am.9.png
+++ b/core/res/res/drawable-xxhdpi/spinner_pressed_holo_light_am.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_dark.9.png
index 94ab960..98c517f 100644
--- a/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_light.9.png
index b795052..a93ee06 100644
--- a/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xxhdpi/switch_thumb_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png b/core/res/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png
index c2ee05f..ffedd02 100644
--- a/core/res/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png
+++ b/core/res/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png b/core/res/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png
index 7faf667..82c6998 100644
--- a/core/res/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png
+++ b/core/res/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 2c1a3c1..0adda56 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -828,6 +828,13 @@
cell broadcasting sms, and MMS. -->
<bool name="config_sms_capable">true</bool>
+ <!-- Default SMS Application. This will be the default SMS application when
+ the phone first boots. The user can then change the default app to oe
+ of their choosing.
+ This can be overridden for devices where a different default SMS
+ application is desired. -->
+ <string name="default_sms_application" translatable="false">com.android.mms</string>
+
<!-- Enable/disable default bluetooth profiles:
HSP_AG, ObexObjectPush, Audio, NAP -->
<bool name="config_bluetooth_default_profiles">true</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index e82c0e1..a491612 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -755,6 +755,7 @@
<java-symbol type="string" name="sipAddressTypeHome" />
<java-symbol type="string" name="sipAddressTypeOther" />
<java-symbol type="string" name="sipAddressTypeWork" />
+ <java-symbol type="string" name="default_sms_application" />
<java-symbol type="string" name="sms_control_message" />
<java-symbol type="string" name="sms_control_title" />
<java-symbol type="string" name="sms_control_no" />
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 118958d..eb2d6a7 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -36,8 +36,8 @@
sdk.mac_checksum=727a51affa2af733eca1aa307c73c3bd
sdk.win_download=android-sdk_r22.2.1-windows.zip
-sdk.win_bytes=108676651
-sdk.win_checksum=3b3f63ae00cf946d1174fa08b37d8542
+sdk.win_bytes=108797377
+sdk.win_checksum=bea5d28cfb6c073b32643dd3ed0bc1e0
sdk.win_installer=installer_r22.2.1-windows.exe
sdk.win_installer_bytes=88795776
diff --git a/docs/html/tools/revisions/platforms.jd b/docs/html/tools/revisions/platforms.jd
index 7cf3735..02216de 100644
--- a/docs/html/tools/revisions/platforms.jd
+++ b/docs/html/tools/revisions/platforms.jd
@@ -96,14 +96,29 @@
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png"
+class="toggle-content-img" alt="" />Revision 3</a> <em>(September 2013)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+ <p>Maintenance update. This release includes
+ <a href="{@docRoot}google/play-services/index.html">Google Play services</a> version 3.2.65,
+ allowing you to test your application in an emulator using the latest Google Play services.</p>
+
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png"
class="toggle-content-img" alt="" />Revision 2</a> <em>(August 2013)</em>
</p>
<div class="toggle-content-toggleme">
<p>Maintenance update. This release includes
- <a href="{@docRoot}google/play-services/index.html">Google Play Services</a> version 3.2.25,
- allowing you to test your application in an emulator using the latest Google Play Services.</p>
+ <a href="{@docRoot}google/play-services/index.html">Google Play services</a> version 3.2.25,
+ allowing you to test your application in an emulator using the latest Google Play services.</p>
</div>
</div>
@@ -117,7 +132,7 @@
<div class="toggle-content-toggleme">
<p>Initial release. This release includes
- <a href="{@docRoot}google/play-services/index.html">Google Play Services</a> version 3.1.58.</p>
+ <a href="{@docRoot}google/play-services/index.html">Google Play services</a> version 3.1.58.</p>
</div>
</div>
diff --git a/core/java/android/print/pdf/PdfDocument.java b/graphics/java/android/graphics/pdf/PdfDocument.java
similarity index 65%
rename from core/java/android/print/pdf/PdfDocument.java
rename to graphics/java/android/graphics/pdf/PdfDocument.java
index a2883cf..066ae2b 100644
--- a/core/java/android/print/pdf/PdfDocument.java
+++ b/graphics/java/android/graphics/pdf/PdfDocument.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package android.print.pdf;
+package android.graphics.pdf;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.Matrix;
import android.graphics.Rect;
import dalvik.system.CloseGuard;
+import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
@@ -34,14 +34,16 @@
* open a new document and then for every page you want to add you start a page,
* write content to the page, and finish the page. After you are done with all
* pages, you write the document to an output stream and close the document.
- * After a document is closed you should not use it anymore.
+ * After a document is closed you should not use it anymore. Note that pages are
+ * created one by one, i.e. you can have only a single page to which you are
+ * writing at any given time. This class is not thread safe.
* </p>
* <p>
* A typical use of the APIs looks like this:
* </p>
* <pre>
- * // open a new document
- * PdfDocument document = PdfDocument.open();
+ * // create a new document
+ * PdfDocument document = new PdfDocument();
*
* // crate a page description
* PageInfo pageInfo = new PageInfo.Builder(new Rect(0, 0, 100, 100), 1).create();
@@ -65,7 +67,7 @@
* document.close();
* </pre>
*/
-public final class PdfDocument {
+public class PdfDocument {
private final byte[] mChunk = new byte[4096];
@@ -78,24 +80,9 @@
private Page mCurrentPage;
/**
- * Opens a new document.
- * <p>
- * <strong>Note:</strong> You must close the document after you are
- * done by calling {@link #close()}
- * </p>
- *
- * @return The document.
- *
- * @see #close()
- */
- public static PdfDocument open() {
- return new PdfDocument();
- }
-
- /**
* Creates a new instance.
*/
- private PdfDocument() {
+ public PdfDocument() {
mNativeDocument = nativeCreateDocument();
mCloseGuard.open("close");
}
@@ -109,23 +96,24 @@
* no longer access the page or its canvas.
* <p>
* <strong>Note:</strong> Do not call this method after {@link #close()}.
+ * Also do not call this method if the last page returned by this method
+ * is not finished by calling {@link #finishPage(Page)}.
* </p>
*
- * @param pageInfo The page info.
+ * @param pageInfo The page info. Cannot be null.
* @return A blank page.
*
* @see #finishPage(Page)
*/
public Page startPage(PageInfo pageInfo) {
throwIfClosed();
+ throwIfCurrentPageNotFinished();
if (pageInfo == null) {
- throw new IllegalArgumentException("page cannot be null!");
+ throw new IllegalArgumentException("page cannot be null");
}
- if (mCurrentPage != null) {
- throw new IllegalStateException("Previous page not finished!");
- }
- Canvas canvas = new PdfCanvas(nativeCreatePage(pageInfo.mPageSize,
- pageInfo.mContentSize, pageInfo.mInitialTransform.native_instance));
+ Canvas canvas = new PdfCanvas(nativeCreatePage(pageInfo.mPageWidth,
+ pageInfo.mPageHeight, pageInfo.mContentRect.left, pageInfo.mContentRect.top,
+ pageInfo.mContentRect.right, pageInfo.mContentRect.bottom));
mCurrentPage = new Page(canvas, pageInfo);
return mCurrentPage;
}
@@ -134,9 +122,10 @@
* Finishes a started page. You should always finish the last started page.
* <p>
* <strong>Note:</strong> Do not call this method after {@link #close()}.
+ * You should not finish the same page more than once.
* </p>
*
- * @param page The page.
+ * @param page The page. Cannot be null.
*
* @see #startPage(PageInfo)
*/
@@ -148,6 +137,9 @@
if (page != mCurrentPage) {
throw new IllegalStateException("invalid page");
}
+ if (page.isFinished()) {
+ throw new IllegalStateException("page already finished");
+ }
mPages.add(page.getInfo());
mCurrentPage = null;
nativeAppendPage(mNativeDocument, page.mCanvas.mNativeCanvas);
@@ -155,15 +147,21 @@
}
/**
- * Writes the document to an output stream.
+ * Writes the document to an output stream. You can call this method
+ * multiple times.
* <p>
* <strong>Note:</strong> Do not call this method after {@link #close()}.
+ * Also do not call this method if a page returned by {@link #startPage(
+ * PageInfo)} is not finished by calling {@link #finishPage(Page)}.
* </p>
*
- * @param out The output stream.
+ * @param out The output stream. Cannot be null.
+ *
+ * @throws IOException If an error occurs while writing.
*/
- public void writeTo(OutputStream out) {
+ public void writeTo(OutputStream out) throws IOException {
throwIfClosed();
+ throwIfCurrentPageNotFinished();
if (out == null) {
throw new IllegalArgumentException("out cannot be null!");
}
@@ -173,7 +171,7 @@
/**
* Gets the pages of the document.
*
- * @return The pages.
+ * @return The pages or an empty list.
*/
public List<PageInfo> getPages() {
return Collections.unmodifiableList(mPages);
@@ -183,8 +181,14 @@
* Closes this document. This method should be called after you
* are done working with the document. After this call the document
* is considered closed and none of its methods should be called.
+ * <p>
+ * <strong>Note:</strong> Do not call this method if the page
+ * returned by {@link #startPage(PageInfo)} is not finished by
+ * calling {@link #finishPage(Page)}.
+ * </p>
*/
public void close() {
+ throwIfCurrentPageNotFinished();
dispose();
}
@@ -215,6 +219,15 @@
}
}
+ /**
+ * Throws an exception if the last started page is not finished.
+ */
+ private void throwIfCurrentPageNotFinished() {
+ if (mCurrentPage != null) {
+ throw new IllegalStateException("Current page not finished!");
+ }
+ }
+
private native int nativeCreateDocument();
private native void nativeFinalize(int document);
@@ -223,9 +236,8 @@
private native void nativeWriteTo(int document, OutputStream out, byte[] chunk);
- private static native int nativeCreatePage(Rect pageSize,
- Rect contentSize, int nativeMatrix);
-
+ private static native int nativeCreatePage(int pageWidth, int pageHeight, int contentLeft,
+ int contentTop, int contentRight, int contentBottom);
private final class PdfCanvas extends Canvas {
@@ -243,9 +255,9 @@
* This class represents meta-data that describes a PDF {@link Page}.
*/
public static final class PageInfo {
- private Rect mPageSize;
- private Rect mContentSize;
- private Matrix mInitialTransform;
+ private int mPageWidth;
+ private int mPageHeight;
+ private Rect mContentRect;
private int mPageNumber;
/**
@@ -256,32 +268,32 @@
}
/**
- * Gets the page size in PostScript points (1/72th of an inch).
+ * Gets the page width in PostScript points (1/72th of an inch).
*
- * @return The page size.
+ * @return The page width.
*/
- public Rect getPageSize() {
- return mPageSize;
+ public int getPageWidth() {
+ return mPageWidth;
}
/**
- * Get the content size in PostScript points (1/72th of an inch).
+ * Gets the page height in PostScript points (1/72th of an inch).
*
- * @return The content size.
+ * @return The page height.
*/
- public Rect getContentSize() {
- return mContentSize;
+ public int getPageHeight() {
+ return mPageHeight;
}
/**
- * Gets the initial transform which is applied to the page. This may be
- * useful to move the origin to account for a margin, apply scale, or
- * apply a rotation.
+ * Get the content rectangle in PostScript points (1/72th of an inch).
+ * This is the area that contains the page content and is relative to
+ * the page top left.
*
- * @return The initial transform.
+ * @return The content rectangle.
*/
- public Matrix getInitialTransform() {
- return mInitialTransform;
+ public Rect getContentRect() {
+ return mContentRect;
}
/**
@@ -302,47 +314,40 @@
/**
* Creates a new builder with the mandatory page info attributes.
*
- * @param pageSize The page size in PostScript (1/72th of an inch).
+ * @param pageWidth The page width in PostScript (1/72th of an inch).
+ * @param pageHeight The page height in PostScript (1/72th of an inch).
* @param pageNumber The page number.
*/
- public Builder(Rect pageSize, int pageNumber) {
- if (pageSize.width() == 0 || pageSize.height() == 0) {
- throw new IllegalArgumentException("page width and height" +
- " must be greater than zero!");
+ public Builder(int pageWidth, int pageHeight, int pageNumber) {
+ if (pageWidth <= 0) {
+ throw new IllegalArgumentException("page width must be positive");
+ }
+ if (pageHeight <= 0) {
+ throw new IllegalArgumentException("page width must be positive");
}
if (pageNumber < 0) {
- throw new IllegalArgumentException("pageNumber cannot be less than zero!");
+ throw new IllegalArgumentException("pageNumber must be non negative");
}
- mPageInfo.mPageSize = pageSize;
+ mPageInfo.mPageWidth = pageWidth;
+ mPageInfo.mPageHeight = pageHeight;
mPageInfo.mPageNumber = pageNumber;
}
/**
- * Sets the content size in PostScript point (1/72th of an inch).
+ * Sets the content rectangle in PostScript point (1/72th of an inch).
+ * This is the area that contains the page content and is relative to
+ * the page top left.
*
- * @param contentSize The content size.
+ * @param contentRect The content rectangle. Must fit in the page.
*/
- public Builder setContentSize(Rect contentSize) {
- Rect pageSize = mPageInfo.mPageSize;
- if (contentSize != null && (pageSize.left > contentSize.left
- || pageSize.top > contentSize.top
- || pageSize.right < contentSize.right
- || pageSize.bottom < contentSize.bottom)) {
- throw new IllegalArgumentException("contentSize does not fit the pageSize!");
+ public Builder setContentRect(Rect contentRect) {
+ if (contentRect != null && (contentRect.left < 0
+ || contentRect.top < 0
+ || contentRect.right > mPageInfo.mPageWidth
+ || contentRect.bottom > mPageInfo.mPageHeight)) {
+ throw new IllegalArgumentException("contentRect does not fit the page");
}
- mPageInfo.mContentSize = contentSize;
- return this;
- }
-
- /**
- * Sets the initial transform which is applied to the page. This may be
- * useful to move the origin to account for a margin, apply scale, or
- * apply a rotation.
- *
- * @param transform The initial transform.
- */
- public Builder setInitialTransform(Matrix transform) {
- mPageInfo.mInitialTransform = transform;
+ mPageInfo.mContentRect = contentRect;
return this;
}
@@ -352,11 +357,9 @@
* @return The new instance.
*/
public PageInfo create() {
- if (mPageInfo.mContentSize == null) {
- mPageInfo.mContentSize = mPageInfo.mPageSize;
- }
- if (mPageInfo.mInitialTransform == null) {
- mPageInfo.mInitialTransform = new Matrix();
+ if (mPageInfo.mContentRect == null) {
+ mPageInfo.mContentRect = new Rect(0, 0,
+ mPageInfo.mPageWidth, mPageInfo.mPageHeight);
}
return mPageInfo;
}
@@ -367,7 +370,8 @@
* This class represents a PDF document page. It has associated
* a canvas on which you can draw content and is acquired by a
* call to {@link #getCanvas()}. It also has associated a
- * {@link PageInfo} instance that describes its attributes.
+ * {@link PageInfo} instance that describes its attributes. Also
+ * a page has
*/
public static final class Page {
private final PageInfo mPageInfo;
@@ -406,6 +410,10 @@
return mPageInfo;
}
+ boolean isFinished() {
+ return mCanvas == null;
+ }
+
private void finish() {
if (mCanvas != null) {
mCanvas.release();
diff --git a/graphics/java/android/graphics/pdf/package.html b/graphics/java/android/graphics/pdf/package.html
new file mode 100644
index 0000000..51f2460
--- /dev/null
+++ b/graphics/java/android/graphics/pdf/package.html
@@ -0,0 +1,5 @@
+<HTML>
+<BODY>
+Contains classes for manipulation of PDF content.
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 7e99a5f..00e7870 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -353,7 +353,7 @@
memset(dstR += dstStride, 0, borderSize); // trailing border column
}
// write trailing border line
- memset(dstL, 0, rowSize + 2 * borderSize);
+ memset(dstL += dstStride, 0, rowSize + 2 * borderSize);
break;
}
case SkMask::kBW_Format: {
diff --git a/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png
index dff1dfa..c697f44 100644
--- a/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png
+++ b/packages/Keyguard/res/drawable-hdpi/kg_widget_bg_padded.9.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png
index c313df1..562bc7e 100644
--- a/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png
+++ b/packages/Keyguard/res/drawable-mdpi/kg_widget_bg_padded.9.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png
index a84bfa3..b3edfd7 100644
--- a/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png
+++ b/packages/Keyguard/res/drawable-xhdpi/kg_widget_bg_padded.9.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xxhdpi/kg_widget_bg_padded.9.png b/packages/Keyguard/res/drawable-xxhdpi/kg_widget_bg_padded.9.png
new file mode 100644
index 0000000..8d31fee
--- /dev/null
+++ b/packages/Keyguard/res/drawable-xxhdpi/kg_widget_bg_padded.9.png
Binary files differ
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index fbe3a9c..0787286 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -1650,4 +1650,9 @@
mActivityLauncher.launchActivityWithAnimation(
intent, false, opts.toBundle(), null, null);
}
+
+ public void dispatch(MotionEvent event) {
+ mAppWidgetContainer.handleExternalCameraEvent(event);
+ }
+
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
index a70e5bd..77006c5 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
@@ -28,6 +28,7 @@
import android.os.Debug;
import android.os.IBinder;
import android.util.Log;
+import android.view.MotionEvent;
import com.android.internal.policy.IKeyguardService;
import com.android.internal.policy.IKeyguardExitCallback;
@@ -132,6 +133,10 @@
checkPermission();
mKeyguardViewMediator.showAssistant();
}
+ public void dispatch(MotionEvent event) {
+ checkPermission();
+ mKeyguardViewMediator.dispatch(event);
+ }
};
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
index 35bea26..4837458 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
@@ -38,6 +38,7 @@
import android.util.SparseArray;
import android.view.KeyEvent;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewManager;
@@ -425,4 +426,10 @@
mKeyguardView.showAssistant();
}
}
+
+ public void dispatch(MotionEvent event) {
+ if (mKeyguardView != null) {
+ mKeyguardView.dispatch(event);
+ }
+ }
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
index e746f72..478096c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
@@ -49,6 +49,7 @@
import android.util.Log;
import android.util.Slog;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.WindowManager;
import android.view.WindowManagerPolicy;
@@ -120,6 +121,7 @@
private static final int SET_HIDDEN = 12;
private static final int KEYGUARD_TIMEOUT = 13;
private static final int SHOW_ASSISTANT = 14;
+ private static final int DISPATCH_EVENT = 15;
/**
* The default amount of time we stay awake (used for all key input)
@@ -1066,6 +1068,9 @@
case SHOW_ASSISTANT:
handleShowAssistant();
break;
+ case DISPATCH_EVENT:
+ handleDispatchEvent((MotionEvent) msg.obj);
+ break;
}
}
};
@@ -1102,6 +1107,10 @@
sendUserPresentBroadcast();
}
+ protected void handleDispatchEvent(MotionEvent event) {
+ mKeyguardViewManager.dispatch(event);
+ }
+
private void sendUserPresentBroadcast() {
final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser());
mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser);
@@ -1327,4 +1336,9 @@
public static MultiUserAvatarCache getAvatarCache() {
return sMultiUserAvatarCache;
}
+
+ public void dispatch(MotionEvent event) {
+ Message msg = mHandler.obtainMessage(DISPATCH_EVENT, event);
+ mHandler.sendMessage(msg);
+ }
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
index e85f6df..0539e82 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
@@ -23,6 +23,7 @@
SlidingChallengeLayout.OnChallengeScrolledListener,
ChallengeLayout.OnBouncerStateChangedListener {
+ private static final int WARP_FADE_DURATION = 250;
private KeyguardWidgetPager mKeyguardWidgetPager;
private ChallengeLayout mChallengeLayout;
private KeyguardHostView mKeyguardHostView;
@@ -32,6 +33,7 @@
private KeyguardSecurityView mKeyguardSecurityContainer;
private static final int SCREEN_ON_HINT_DURATION = 1000;
private static final int SCREEN_ON_RING_HINT_DELAY = 300;
+ private static final boolean SHOW_INITIAL_PAGE_HINTS = false;
Handler mMainQueue = new Handler(Looper.myLooper());
int mLastScrollState = SlidingChallengeLayout.SCROLL_STATE_IDLE;
@@ -167,6 +169,16 @@
mCurrentPage = newPageIndex;
}
+ public void onPageBeginWarp() {
+ // fadeOutSecurity(WARP_FADE_DURATION);
+ // mKeyguardWidgetPager.showNonWarpViews(WARP_FADE_DURATION, false);
+ }
+
+ public void onPageEndWarp() {
+ // fadeInSecurity(WARP_FADE_DURATION);
+ // mKeyguardWidgetPager.showNonWarpViews(WARP_FADE_DURATION, true);
+ }
+
private int getChallengeTopRelativeToFrame(KeyguardWidgetFrame frame, int top) {
mTmpPoint[0] = 0;
mTmpPoint[1] = top;
@@ -296,7 +308,9 @@
mKeyguardSecurityContainer.showUsabilityHint();
}
} , SCREEN_ON_RING_HINT_DELAY);
- mKeyguardWidgetPager.showInitialPageHints();
+ if (SHOW_INITIAL_PAGE_HINTS) {
+ mKeyguardWidgetPager.showInitialPageHints();
+ }
if (mHideHintsRunnable != null) {
mMainQueue.postDelayed(mHideHintsRunnable, SCREEN_ON_HINT_DURATION);
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
index c566457..8d2f21b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
@@ -186,6 +186,16 @@
}
@Override
+ public void onPageBeginWarp() {
+ mViewStateManager.onPageBeginWarp();
+ }
+
+ @Override
+ public void onPageEndWarp() {
+ mViewStateManager.onPageEndWarp();
+ }
+
+ @Override
public void sendAccessibilityEvent(int eventType) {
if (eventType != AccessibilityEvent.TYPE_VIEW_SCROLLED || isPageMoving()) {
super.sendAccessibilityEvent(eventType);
@@ -923,4 +933,27 @@
return flags;
}
+
+ public void handleExternalCameraEvent(MotionEvent event) {
+ beginCameraEvent();
+ int cameraPage = getPageCount() - 1;
+ boolean endWarp = false;
+ if (isCameraPage(cameraPage)) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ userActivity();
+ startWarp(cameraPage);
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ endWarp = true;
+ break;
+ }
+ dispatchTouchEvent(event);
+ // This has to happen after the event has been handled by the real widget pager
+ if (endWarp) endWarp();
+ }
+ endCameraEvent();
+ }
+
}
diff --git a/packages/Keyguard/src/com/android/keyguard/PagedView.java b/packages/Keyguard/src/com/android/keyguard/PagedView.java
index 881d14d..cbf7946 100644
--- a/packages/Keyguard/src/com/android/keyguard/PagedView.java
+++ b/packages/Keyguard/src/com/android/keyguard/PagedView.java
@@ -62,6 +62,7 @@
public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarchyChangeListener {
private static final String TAG = "WidgetPagedView";
private static final boolean DEBUG = false;
+ private static final boolean DEBUG_WARP = false;
protected static final int INVALID_PAGE = -1;
// the min drag distance for a fling to register, to prevent random page shifts
@@ -130,6 +131,7 @@
protected final static int TOUCH_STATE_REORDERING = 4;
protected final static float ALPHA_QUANTIZE_LEVEL = 0.0001f;
+ protected final static float TOUCH_SLOP_SCALE = 1.0f;
protected int mTouchState = TOUCH_STATE_REST;
protected boolean mForceScreenScrolled = false;
@@ -250,6 +252,10 @@
// Bouncer
private boolean mTopAlignPageWhenShrinkingForBouncer = false;
+ // Page warping
+ private int mPageSwapIndex = -1;
+ private boolean mIsCameraEvent;
+
public interface PageSwitchListener {
void onPageSwitching(View newPage, int newPageIndex);
void onPageSwitched(View newPage, int newPageIndex);
@@ -469,15 +475,26 @@
}
protected void pageBeginMoving() {
+ if (DEBUG_WARP) Log.v(TAG, "pageBeginMoving(" + mIsPageMoving + ")");
if (!mIsPageMoving) {
mIsPageMoving = true;
+ if (mPageSwapIndex != -1) {
+ onPageBeginWarp();
+ swapPages(mPageSwapIndex, getPageCount() - 1);
+ }
onPageBeginMoving();
}
}
protected void pageEndMoving() {
+ if (DEBUG_WARP) Log.v(TAG, "pageEndMoving(" + mIsPageMoving + ")");
if (mIsPageMoving) {
mIsPageMoving = false;
+ if (mPageSwapIndex != -1) {
+ swapPages(mPageSwapIndex, getPageCount() - 1);
+ onPageEndWarp();
+ mPageSwapIndex = -1;
+ }
onPageEndMoving();
}
}
@@ -737,6 +754,11 @@
setHorizontalScrollBarEnabled(true);
mFirstLayout = false;
}
+ // If a page was swapped when we rebuilt the layout, swap it again now.
+ if (mPageSwapIndex != -1) {
+ if (DEBUG_WARP) Log.v(TAG, "onLayout: swapping pages");
+ swapPages(mPageSwapIndex, getPageCount() - 1);
+ }
}
protected void screenScrolled(int screenCenter) {
@@ -1071,7 +1093,9 @@
* whether the user has moved far enough from his original down touch.
*/
if (mActivePointerId != INVALID_POINTER) {
- determineScrollingStart(ev);
+ if (mIsCameraEvent || determineScrollingStart(ev)) {
+ startScrolling(ev);
+ }
break;
}
// if mActivePointerId is INVALID_POINTER, then we must have missed an ACTION_DOWN
@@ -1082,27 +1106,8 @@
}
case MotionEvent.ACTION_DOWN: {
- final float x = ev.getX();
- final float y = ev.getY();
- // Remember location of down touch
- mDownMotionX = x;
- mDownMotionY = y;
- mDownScrollX = getScrollX();
- mLastMotionX = x;
- mLastMotionY = y;
- float[] p = mapPointFromViewToParent(this, x, y);
- mParentDownMotionX = p[0];
- mParentDownMotionY = p[1];
- mLastMotionXRemainder = 0;
- mTotalMotionX = 0;
- mActivePointerId = ev.getPointerId(0);
-
- // Determine if the down event is within the threshold to be an edge swipe
- int leftEdgeBoundary = getViewportOffsetX() + mEdgeSwipeRegionSize;
- int rightEdgeBoundary = getMeasuredWidth() - getViewportOffsetX() - mEdgeSwipeRegionSize;
- if ((mDownMotionX <= leftEdgeBoundary || mDownMotionX >= rightEdgeBoundary)) {
- mDownEventOnEdge = true;
- }
+ // Remember where the motion event started
+ saveDownState(ev);
/*
* If being flinged and user touches the screen, initiate drag;
@@ -1112,25 +1117,29 @@
final int xDist = Math.abs(mScroller.getFinalX() - mScroller.getCurrX());
final boolean finishedScrolling = (mScroller.isFinished() || xDist < mTouchSlop);
if (finishedScrolling) {
- mTouchState = TOUCH_STATE_REST;
+ setTouchState(TOUCH_STATE_REST);
mScroller.abortAnimation();
} else {
- if (isTouchPointInViewportWithBuffer((int) mDownMotionX, (int) mDownMotionY)) {
- mTouchState = TOUCH_STATE_SCROLLING;
+ if (mIsCameraEvent || isTouchPointInViewportWithBuffer(
+ (int) mDownMotionX, (int) mDownMotionY)) {
+ setTouchState(TOUCH_STATE_SCROLLING);
} else {
- mTouchState = TOUCH_STATE_REST;
+ setTouchState(TOUCH_STATE_REST);
}
}
// check if this can be the beginning of a tap on the side of the pages
// to scroll the current page
if (!DISABLE_TOUCH_SIDE_PAGES) {
- if (mTouchState != TOUCH_STATE_PREV_PAGE && mTouchState != TOUCH_STATE_NEXT_PAGE) {
+ if (mTouchState != TOUCH_STATE_PREV_PAGE
+ && mTouchState != TOUCH_STATE_NEXT_PAGE) {
if (getChildCount() > 0) {
+ float x = ev.getX();
+ float y = ev.getY();
if (hitsPreviousPage(x, y)) {
- mTouchState = TOUCH_STATE_PREV_PAGE;
+ setTouchState(TOUCH_STATE_PREV_PAGE);
} else if (hitsNextPage(x, y)) {
- mTouchState = TOUCH_STATE_NEXT_PAGE;
+ setTouchState(TOUCH_STATE_NEXT_PAGE);
}
}
}
@@ -1160,48 +1169,85 @@
return mTouchState != TOUCH_STATE_REST;
}
- protected void determineScrollingStart(MotionEvent ev) {
- determineScrollingStart(ev, 1.0f);
+ private void setTouchState(int touchState) {
+ if (mTouchState != touchState) {
+ onTouchStateChanged(touchState);
+ mTouchState = touchState;
+ }
+ }
+
+ void onTouchStateChanged(int newTouchState) {
+ if (DEBUG) {
+ Log.v(TAG, "onTouchStateChanged(old="+ mTouchState + ", new=" + newTouchState + ")");
+ }
+ }
+
+ /**
+ * Save the state when we get {@link MotionEvent#ACTION_DOWN}
+ * @param ev
+ */
+ private void saveDownState(MotionEvent ev) {
+ // Remember where the motion event started
+ mDownMotionX = mLastMotionX = ev.getX();
+ mDownMotionY = mLastMotionY = ev.getY();
+ mDownScrollX = getScrollX();
+ float[] p = mapPointFromViewToParent(this, mLastMotionX, mLastMotionY);
+ mParentDownMotionX = p[0];
+ mParentDownMotionY = p[1];
+ mLastMotionXRemainder = 0;
+ mTotalMotionX = 0;
+ mActivePointerId = ev.getPointerId(0);
+
+ // Determine if the down event is within the threshold to be an edge swipe
+ int leftEdgeBoundary = getViewportOffsetX() + mEdgeSwipeRegionSize;
+ int rightEdgeBoundary = getMeasuredWidth() - getViewportOffsetX() - mEdgeSwipeRegionSize;
+ if ((mDownMotionX <= leftEdgeBoundary || mDownMotionX >= rightEdgeBoundary)) {
+ mDownEventOnEdge = true;
+ }
}
/*
* Determines if we should change the touch state to start scrolling after the
* user moves their touch point too far.
*/
- protected void determineScrollingStart(MotionEvent ev, float touchSlopScale) {
+ protected boolean determineScrollingStart(MotionEvent ev) {
// Disallow scrolling if we don't have a valid pointer index
final int pointerIndex = ev.findPointerIndex(mActivePointerId);
- if (pointerIndex == -1) return;
+ if (pointerIndex == -1) return false;
// Disallow scrolling if we started the gesture from outside the viewport
final float x = ev.getX(pointerIndex);
final float y = ev.getY(pointerIndex);
- if (!isTouchPointInViewportWithBuffer((int) x, (int) y)) return;
+ if (!isTouchPointInViewportWithBuffer((int) x, (int) y)) return false;
// If we're only allowing edge swipes, we break out early if the down event wasn't
// at the edge.
- if (mOnlyAllowEdgeSwipes && !mDownEventOnEdge) return;
+ if (mOnlyAllowEdgeSwipes && !mDownEventOnEdge) return false;
final int xDiff = (int) Math.abs(x - mLastMotionX);
final int yDiff = (int) Math.abs(y - mLastMotionY);
- final int touchSlop = Math.round(touchSlopScale * mTouchSlop);
+ final int touchSlop = Math.round(TOUCH_SLOP_SCALE * mTouchSlop);
boolean xPaged = xDiff > mPagingTouchSlop;
boolean xMoved = xDiff > touchSlop;
boolean yMoved = yDiff > touchSlop;
- if (xMoved || xPaged || yMoved) {
- if (mUsePagingTouchSlop ? xPaged : xMoved) {
- // Scroll if the user moved far enough along the X axis
- mTouchState = TOUCH_STATE_SCROLLING;
- mTotalMotionX += Math.abs(mLastMotionX - x);
- mLastMotionX = x;
- mLastMotionXRemainder = 0;
- mTouchX = getViewportOffsetX() + getScrollX();
- mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
- pageBeginMoving();
- }
- }
+ return (xMoved || xPaged || yMoved) && (mUsePagingTouchSlop ? xPaged : xMoved);
+ }
+
+ private void startScrolling(MotionEvent ev) {
+ // Ignore if we don't have a valid pointer index
+ final int pointerIndex = ev.findPointerIndex(mActivePointerId);
+ if (pointerIndex == -1) return;
+
+ final float x = ev.getX(pointerIndex);
+ setTouchState(TOUCH_STATE_SCROLLING);
+ mTotalMotionX += Math.abs(mLastMotionX - x);
+ mLastMotionX = x;
+ mLastMotionXRemainder = 0;
+ mTouchX = getViewportOffsetX() + getScrollX();
+ mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
+ pageBeginMoving();
}
protected float getMaxScrollProgress() {
@@ -1322,22 +1368,7 @@
}
// Remember where the motion event started
- mDownMotionX = mLastMotionX = ev.getX();
- mDownMotionY = mLastMotionY = ev.getY();
- mDownScrollX = getScrollX();
- float[] p = mapPointFromViewToParent(this, mLastMotionX, mLastMotionY);
- mParentDownMotionX = p[0];
- mParentDownMotionY = p[1];
- mLastMotionXRemainder = 0;
- mTotalMotionX = 0;
- mActivePointerId = ev.getPointerId(0);
-
- // Determine if the down event is within the threshold to be an edge swipe
- int leftEdgeBoundary = getViewportOffsetX() + mEdgeSwipeRegionSize;
- int rightEdgeBoundary = getMeasuredWidth() - getViewportOffsetX() - mEdgeSwipeRegionSize;
- if ((mDownMotionX <= leftEdgeBoundary || mDownMotionX >= rightEdgeBoundary)) {
- mDownEventOnEdge = true;
- }
+ saveDownState(ev);
if (mTouchState == TOUCH_STATE_SCROLLING) {
pageBeginMoving();
@@ -1479,8 +1510,8 @@
removeCallbacks(mSidePageHoverRunnable);
mSidePageHoverIndex = -1;
}
- } else {
- determineScrollingStart(ev);
+ } else if (mIsCameraEvent || determineScrollingStart(ev)) {
+ startScrolling(ev);
}
break;
@@ -1604,7 +1635,7 @@
private void resetTouchState() {
releaseVelocityTracker();
endReordering();
- mTouchState = TOUCH_STATE_REST;
+ setTouchState(TOUCH_STATE_REST);
mActivePointerId = INVALID_POINTER;
mDownEventOnEdge = false;
}
@@ -1821,8 +1852,17 @@
protected void snapToPage(int whichPage, int delta, int duration) {
snapToPage(whichPage, delta, duration, false);
}
+
protected void snapToPage(int whichPage, int delta, int duration, boolean immediate) {
- mNextPage = whichPage;
+ if (mPageSwapIndex != -1 && whichPage == mPageSwapIndex) {
+ // jump to the last page
+ mNextPage = getPageCount() - 1;
+ if (DEBUG_WARP) Log.v(TAG, "snapToPage(" + whichPage + ") : reset mPageSwapIndex");
+ mPageSwapIndex = -1;
+ } else {
+ mNextPage = whichPage;
+ }
+
notifyPageSwitching(whichPage);
View focusedChild = getFocusedChild();
if (focusedChild != null && whichPage != mCurrentPage &&
@@ -2102,7 +2142,7 @@
}
// Set the touch state to reordering (allows snapping to pages, dragging a child, etc.)
- mTouchState = TOUCH_STATE_REORDERING;
+ setTouchState(TOUCH_STATE_REORDERING);
mIsReordering = true;
// Mark all the non-widget pages as invisible
@@ -2564,4 +2604,46 @@
public boolean onHoverEvent(android.view.MotionEvent event) {
return true;
}
+
+ void beginCameraEvent() {
+ mIsCameraEvent = true;
+ }
+
+ void endCameraEvent() {
+ mIsCameraEvent = false;
+ }
+
+ /**
+ * Swaps the position of the views by setting the left and right edges appropriately.
+ */
+ void swapPages(int indexA, int indexB) {
+ View viewA = getPageAt(indexA);
+ View viewB = getPageAt(indexB);
+ if (viewA != viewB && viewA != null && viewB != null) {
+ int deltaX = viewA.getLeft() - viewB.getLeft();
+ viewA.offsetLeftAndRight(-deltaX);
+ viewB.offsetLeftAndRight(deltaX);
+ }
+ }
+
+ public void startWarp(int pageIndex) {
+ if (DEBUG_WARP) Log.v(TAG, "START WARP");
+ if (pageIndex != mCurrentPage + 1) {
+ mPageSwapIndex = mCurrentPage + 1;
+ }
+ }
+
+ public void endWarp() {
+ if (DEBUG_WARP) Log.v(TAG, "END WARP");
+ // mPageSwapIndex is reset in snapToPage() after the scroll animation completes
+ }
+
+ public void onPageBeginWarp() {
+
+ }
+
+ public void onPageEndWarp() {
+
+ }
+
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 34e87cc..af1c60e 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -358,7 +358,7 @@
PrintSpoolerService.peekInstance().setPrintJobAttributesNoPersistence(
mPrintJobId, mCurrPrintAttributes);
- mMetadata.putBoolean(PrintDocumentAdapter.METADATA_KEY_PRINT_PREVIEW,
+ mMetadata.putBoolean(PrintDocumentAdapter.EXTRA_PRINT_PREVIEW,
!mEditor.isPrintConfirmed());
mControllerState = CONTROLLER_STATE_LAYOUT_STARTED;
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index fa5c769..fb73d39 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -52,7 +52,7 @@
<uses-permission android:name="android.permission.START_ANY_ACTIVITY" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" />
-
+
<!-- WindowManager -->
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
@@ -68,6 +68,9 @@
<!-- Alarm clocks -->
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
+ <!-- Keyguard -->
+ <uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
+
<application
android:persistent="true"
android:allowClearUserData="false"
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_camera.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_camera.png
new file mode 100644
index 0000000..0bb590e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_camera.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_camera.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_camera.png
new file mode 100644
index 0000000..b767098
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_camera.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_camera.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_camera.png
new file mode 100644
index 0000000..ea93f1a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_camera.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_camera.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_camera.png
new file mode 100644
index 0000000..cda7d4b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_camera.png
Binary files differ
diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml
index 5587f4e..11cbbc7 100644
--- a/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/packages/SystemUI/res/layout/navigation_bar.xml
@@ -145,15 +145,30 @@
/>
</LinearLayout>
- <com.android.systemui.statusbar.policy.KeyButtonView
- android:layout_width="80dp"
- android:id="@+id/search_light"
- android:layout_height="match_parent"
- android:layout_gravity="center_horizontal"
- android:src="@drawable/search_light"
- android:scaleType="center"
- android:visibility="gone"
- />
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <com.android.systemui.statusbar.policy.KeyButtonView
+ android:layout_width="80dp"
+ android:id="@+id/search_light"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:src="@drawable/search_light"
+ android:scaleType="center"
+ android:visibility="gone"
+ />
+
+ <com.android.systemui.statusbar.policy.KeyButtonView
+ android:id="@+id/camera_button"
+ android:layout_height="match_parent"
+ android:layout_width="80dp"
+ android:layout_gravity="center_vertical|right"
+ android:src="@drawable/ic_sysbar_camera"
+ android:scaleType="center"
+ android:visibility="gone"
+ />
+ </FrameLayout>
<com.android.systemui.statusbar.policy.DeadZone
android:id="@+id/deadzone"
@@ -299,6 +314,8 @@
android:visibility="gone"
/>
+ <!-- No camera button in landscape mode -->
+
<com.android.systemui.statusbar.policy.DeadZone
android:id="@+id/deadzone"
android:layout_height="match_parent"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java
new file mode 100644
index 0000000..a6e2347
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013 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.systemui.statusbar.phone;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import com.android.internal.policy.IKeyguardExitCallback;
+import com.android.internal.policy.IKeyguardShowCallback;
+import com.android.internal.policy.IKeyguardService;
+
+
+/**
+ * Facilitates event communication between navigation bar and keyguard. Currently used to
+ * control WidgetPager in keyguard to expose the camera widget.
+ *
+ */
+public class KeyguardTouchDelegate {
+ // TODO: propagate changes to these to {@link KeyguardServiceDelegate}
+ static final String KEYGUARD_PACKAGE = "com.android.keyguard";
+ static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService";
+
+ IKeyguardService mService;
+
+ protected static final boolean DEBUG = false;
+ protected static final String TAG = "KeyguardTouchDelegate";
+
+ private final ServiceConnection mKeyguardConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ Log.v(TAG, "Connected to keyguard");
+ mService = IKeyguardService.Stub.asInterface(service);
+
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ Log.v(TAG, "Disconnected from keyguard");
+ mService = null;
+ }
+
+ };
+
+ public KeyguardTouchDelegate(Context context) {
+ Intent intent = new Intent();
+ intent.setClassName(KEYGUARD_PACKAGE, KEYGUARD_CLASS);
+ if (!context.bindServiceAsUser(intent, mKeyguardConnection,
+ Context.BIND_AUTO_CREATE, UserHandle.OWNER)) {
+ if (DEBUG) Log.v(TAG, "*** Keyguard: can't bind to " + KEYGUARD_CLASS);
+ } else {
+ if (DEBUG) Log.v(TAG, "*** Keyguard started");
+ }
+ }
+
+ public boolean isSecure() {
+ boolean secure = false;
+ if (mService != null) {
+ try {
+ secure = mService.isSecure();
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException calling keyguard.isSecure()!", e);
+ }
+ } else {
+ Log.w(TAG, "isSecure(): NO SERVICE!");
+ }
+ return secure;
+ }
+
+ public boolean dispatch(MotionEvent event) {
+ if (mService != null) {
+ try {
+ mService.dispatch(event);
+ } catch (RemoteException e) {
+ // What to do?
+ Log.e(TAG, "RemoteException sending event to keyguard!", e);
+ return false;
+ }
+ return true;
+ } else {
+ Log.w(TAG, "dispatch(event): NO SERVICE!");
+ }
+ return false;
+ }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
index 040b750..04922fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -67,6 +67,7 @@
setKeyButtonViewQuiescentAlpha(mView.getHomeButton(), alpha, animate);
setKeyButtonViewQuiescentAlpha(mView.getRecentsButton(), alpha, animate);
setKeyButtonViewQuiescentAlpha(mView.getMenuButton(), alpha, animate);
+ setKeyButtonViewQuiescentAlpha(mView.getCameraButton(), alpha, animate);
// apply to lights out
applyLightsOut(mode == MODE_LIGHTS_OUT, animate, force);
@@ -140,4 +141,4 @@
return false;
}
};
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 4849674..03f7fab 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -17,14 +17,20 @@
package com.android.systemui.statusbar.phone;
import android.animation.LayoutTransition;
+import android.app.ActivityManagerNative;
import android.app.StatusBarManager;
+import android.app.admin.DevicePolicyManager;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
+import android.os.RemoteException;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Display;
@@ -77,6 +83,17 @@
final static boolean WORKAROUND_INVALID_LAYOUT = true;
final static int MSG_CHECK_INVALID_LAYOUT = 8686;
+ // used to disable the camera icon in navbar when disabled by DPM
+ private boolean mCameraDisabledByDpm;
+ KeyguardTouchDelegate mTouchDelegate;
+
+ private final OnTouchListener mCameraTouchListener = new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return mTouchDelegate.dispatch(event);
+ }
+ };
+
private class H extends Handler {
public void handleMessage(Message m) {
switch (m.what) {
@@ -115,6 +132,26 @@
getIcons(res);
mBarTransitions = new NavigationBarTransitions(this);
+
+ mTouchDelegate = new KeyguardTouchDelegate(mContext);
+
+ mCameraDisabledByDpm = isCameraDisabledByDpm();
+ watchForDevicePolicyChanges();
+ }
+
+ private void watchForDevicePolicyChanges() {
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+ mContext.registerReceiver(new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ post(new Runnable() {
+ @Override
+ public void run() {
+ mCameraDisabledByDpm = isCameraDisabledByDpm();
+ }
+ });
+ }
+ }, filter);
}
public BarTransitions getBarTransitions() {
@@ -173,6 +210,11 @@
return mCurrentView.findViewById(R.id.search_light);
}
+ // shown when keyguard is visible and camera is available
+ public View getCameraButton() {
+ return mCurrentView.findViewById(R.id.camera_button);
+ }
+
private void getIcons(Resources res) {
mBackIcon = res.getDrawable(R.drawable.ic_sysbar_back);
mBackLandIcon = res.getDrawable(R.drawable.ic_sysbar_back_land);
@@ -259,7 +301,31 @@
getHomeButton() .setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
getRecentsButton().setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
- getSearchLight().setVisibility((disableHome && !disableSearch) ? View.VISIBLE : View.GONE);
+ final boolean shouldShowSearch = disableHome && !disableSearch;
+ getSearchLight().setVisibility(shouldShowSearch ? View.VISIBLE : View.GONE);
+ final View cameraButton = getCameraButton();
+ if (cameraButton != null) {
+ cameraButton.setVisibility(
+ shouldShowSearch && !mCameraDisabledByDpm ? View.VISIBLE : View.GONE);
+ }
+ }
+
+ private boolean isCameraDisabledByDpm() {
+ final DevicePolicyManager dpm =
+ (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ if (dpm != null) {
+ try {
+ final int userId = ActivityManagerNative.getDefault().getCurrentUser().id;
+ final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId);
+ final boolean disabledBecauseKeyguardSecure =
+ (disabledFlags & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0
+ && mTouchDelegate.isSecure();
+ return dpm.getCameraDisabled(null) || disabledBecauseKeyguardSecure;
+ } catch (RemoteException e) {
+ Log.e(TAG, "Can't get userId", e);
+ }
+ }
+ return false;
}
public void setSlippery(boolean newSlippery) {
@@ -302,6 +368,14 @@
: findViewById(R.id.rot270);
mCurrentView = mRotatedViews[Surface.ROTATION_0];
+
+ // Add a touch handler for camera icon for all view orientations.
+ for (int i = 0; i < mRotatedViews.length; i++) {
+ View cameraButton = mRotatedViews[i].findViewById(R.id.camera_button);
+ if (cameraButton != null) {
+ cameraButton.setOnTouchListener(mCameraTouchListener);
+ }
+ }
}
public boolean isVertical() {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
index 874076a..56a282b 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
@@ -29,8 +29,10 @@
* local or remote instances of keyguard.
*/
public class KeyguardServiceDelegate {
- private static final String KEYGUARD_PACKAGE = "com.android.keyguard";
- private static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService";
+ // TODO: propagate changes to these to {@link KeyguardTouchDelegate}
+ public static final String KEYGUARD_PACKAGE = "com.android.keyguard";
+ public static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService";
+
private static final String TAG = "KeyguardServiceDelegate";
private static final boolean DEBUG = true;
protected KeyguardServiceWrapper mKeyguardService;
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
index 6b9c7df..b27584d 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
@@ -20,6 +20,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
+import android.view.MotionEvent;
import com.android.internal.policy.IKeyguardShowCallback;
import com.android.internal.policy.IKeyguardExitCallback;
@@ -187,6 +188,10 @@
}
}
+ public void dispatch(MotionEvent event) {
+ // Not used by PhoneWindowManager. See code in {@link NavigationBarView}
+ }
+
@Override
public IBinder asBinder() {
return mService.asBinder();
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 98b5f66..bb6c4e6 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -470,7 +470,8 @@
mTimeTickSender = PendingIntent.getBroadcastAsUser(context, 0,
new Intent(Intent.ACTION_TIME_TICK).addFlags(
- Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0,
+ Intent.FLAG_RECEIVER_REGISTERED_ONLY
+ | Intent.FLAG_RECEIVER_FOREGROUND), 0,
UserHandle.ALL);
Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index f70f4db..b6ccce7 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -1472,7 +1472,7 @@
+ " " + name + " " + request + " from " + packageName + "(" + uid + ")");
LocationProviderInterface provider = mProvidersByName.get(name);
if (provider == null) {
- throw new IllegalArgumentException("provider doesn't exisit: " + provider);
+ throw new IllegalArgumentException("provider doesn't exist: " + provider);
}
UpdateRecord record = new UpdateRecord(name, request, receiver);
diff --git a/services/java/com/android/server/am/ActiveServices.java b/services/java/com/android/server/am/ActiveServices.java
index fea7623..4379c70 100644
--- a/services/java/com/android/server/am/ActiveServices.java
+++ b/services/java/com/android/server/am/ActiveServices.java
@@ -311,7 +311,7 @@
final ServiceMap smap = getServiceMap(r.userId);
boolean addToStarting = false;
if (!callerFg && r.app == null && mAm.mStartedUsers.get(r.userId) != null) {
- ProcessRecord proc = mAm.getProcessRecordLocked(r.processName, r.appInfo.uid);
+ ProcessRecord proc = mAm.getProcessRecordLocked(r.processName, r.appInfo.uid, false);
if (proc == null || proc.curProcState > ActivityManager.PROCESS_STATE_RECEIVER) {
// If this is not coming from a foreground caller, then we may want
// to delay the start if there are already other background services
@@ -562,7 +562,7 @@
if (r.isForeground) {
r.isForeground = false;
if (r.app != null) {
- mAm.updateLruProcessLocked(r.app, false);
+ mAm.updateLruProcessLocked(r.app, false, false);
updateServiceForegroundLocked(r.app, true);
}
}
@@ -1241,9 +1241,9 @@
ProcessRecord app;
if (!isolated) {
- app = mAm.getProcessRecordLocked(procName, r.appInfo.uid);
- if (DEBUG_MU)
- Slog.v(TAG_MU, "bringUpServiceLocked: appInfo.uid=" + r.appInfo.uid + " app=" + app);
+ app = mAm.getProcessRecordLocked(procName, r.appInfo.uid, false);
+ if (DEBUG_MU) Slog.v(TAG_MU, "bringUpServiceLocked: appInfo.uid=" + r.appInfo.uid
+ + " app=" + app);
if (app != null && app.thread != null) {
try {
app.addPackage(r.appInfo.packageName, mAm.mProcessStats);
@@ -1270,7 +1270,7 @@
// to be executed when the app comes up.
if (app == null) {
if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags,
- "service", r.name, false, isolated)) == null) {
+ "service", r.name, false, isolated, false)) == null) {
String msg = "Unable to launch app "
+ r.appInfo.packageName + "/"
+ r.appInfo.uid + " for service "
@@ -1322,7 +1322,7 @@
app.services.add(r);
bumpServiceExecutingLocked(r, execInFg, "create");
- mAm.updateLruProcessLocked(app, true);
+ mAm.updateLruProcessLocked(app, true, false);
boolean created = false;
try {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index f08b5b9..7a480dc 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -499,6 +499,11 @@
final ArrayList<ProcessRecord> mLruProcesses = new ArrayList<ProcessRecord>();
/**
+ * Where in mLruProcesses that the processes hosting activities start.
+ */
+ int mLruProcessActivityStart = 0;
+
+ /**
* List of processes that should gc as soon as things are idle.
*/
final ArrayList<ProcessRecord> mProcessesToGc = new ArrayList<ProcessRecord>();
@@ -1638,7 +1643,7 @@
int pid;
synchronized (ActivityManagerService.this) {
if (i >= mPendingPssProcesses.size()) {
- if (DEBUG_PSS) Slog.i(TAG, "Collected PSS of " + num + " of " + i
+ if (DEBUG_PSS) Slog.d(TAG, "Collected PSS of " + num + " of " + i
+ " processes in " + (SystemClock.uptimeMillis()-start) + "ms");
mPendingPssProcesses.clear();
return;
@@ -1661,10 +1666,16 @@
num++;
proc.lastPssTime = SystemClock.uptimeMillis();
proc.baseProcessTracker.addPss(pss, tmp[0], true);
+ if (DEBUG_PSS) Slog.d(TAG, "PSS of " + proc.toShortString()
+ + ": " + pss + " lastPss=" + proc.lastPss
+ + " state=" + ProcessList.makeProcStateString(procState));
if (proc.initialIdlePss == 0) {
proc.initialIdlePss = pss;
}
proc.lastPss = pss;
+ if (procState >= ActivityManager.PROCESS_STATE_HOME) {
+ proc.lastCachedPss = pss;
+ }
}
}
}
@@ -1704,7 +1715,7 @@
synchronized (mSelf.mPidsSelfLocked) {
mSelf.mPidsSelfLocked.put(app.pid, app);
}
- mSelf.updateLruProcessLocked(app, true);
+ mSelf.updateLruProcessLocked(app, true, false);
}
} catch (PackageManager.NameNotFoundException e) {
throw new RuntimeException(
@@ -2219,52 +2230,76 @@
mHandler.sendMessage(msg);
}
- private final void updateLruProcessInternalLocked(ProcessRecord app, int bestPos) {
- // put it on the LRU to keep track of when it should be exited.
- int lrui = mLruProcesses.indexOf(app);
- if (lrui >= 0) mLruProcesses.remove(lrui);
+ private final int updateLruProcessInternalLocked(ProcessRecord app, long now, int index) {
+ app.lastActivityTime = now;
- int i = mLruProcesses.size()-1;
- int skipTop = 0;
-
- app.lruSeq = mLruSeq;
-
- // compute the new weight for this process.
- app.lastActivityTime = SystemClock.uptimeMillis();
if (app.activities.size() > 0) {
- // If this process has activities, we more strongly want to keep
- // it around.
- app.lruWeight = app.lastActivityTime;
- } else if (app.pubProviders.size() > 0) {
- // If this process contains content providers, we want to keep
- // it a little more strongly.
- app.lruWeight = app.lastActivityTime - ProcessList.CONTENT_APP_IDLE_OFFSET;
- // Also don't let it kick out the first few "real" cached processes.
- skipTop = ProcessList.MIN_CACHED_APPS;
- } else {
- // If this process doesn't have activities, we less strongly
- // want to keep it around, and generally want to avoid getting
- // in front of any very recently used activities.
- app.lruWeight = app.lastActivityTime - ProcessList.EMPTY_APP_IDLE_OFFSET;
- // Also don't let it kick out the first few "real" cached processes.
- skipTop = ProcessList.MIN_CACHED_APPS;
+ // Don't want to touch dependent processes that are hosting activities.
+ return index;
}
- while (i >= 0) {
- ProcessRecord p = mLruProcesses.get(i);
- // If this app shouldn't be in front of the first N background
- // apps, then skip over that many that are currently cached.
- if (skipTop > 0 && p.setAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
- skipTop--;
- }
- if (p.lruWeight <= app.lruWeight || i < bestPos) {
- mLruProcesses.add(i+1, app);
- break;
- }
- i--;
+ int lrui = mLruProcesses.lastIndexOf(app);
+ if (lrui < 0) {
+ throw new IllegalStateException("Adding dependent process " + app
+ + " not on LRU list!");
}
- if (i < 0) {
- mLruProcesses.add(0, app);
+
+ if (lrui >= mLruProcessActivityStart) {
+ // Don't want to touch dependent processes that are hosting activities.
+ return index;
+ }
+
+ mLruProcesses.remove(lrui);
+ if (index > 0) {
+ index--;
+ }
+ mLruProcesses.add(index, app);
+ return index;
+ }
+
+ final void removeLruProcessLocked(ProcessRecord app) {
+ int lrui = mLruProcesses.lastIndexOf(app);
+ if (lrui >= 0) {
+ if (lrui <= mLruProcessActivityStart) {
+ mLruProcessActivityStart--;
+ }
+ mLruProcesses.remove(lrui);
+ }
+ }
+
+ final void updateLruProcessLocked(ProcessRecord app, boolean oomAdj, boolean activityChange) {
+ final boolean hasActivity = app.activities.size() > 0;
+ if (!activityChange && hasActivity) {
+ // The process has activties, so we are only going to allow activity-based
+ // adjustments move it. It should be kept in the front of the list with other
+ // processes that have activities, and we don't want those to change their
+ // order except due to activity operations.
+ return;
+ }
+
+ mLruSeq++;
+ final long now = SystemClock.uptimeMillis();
+ app.lastActivityTime = now;
+
+ int lrui = mLruProcesses.lastIndexOf(app);
+
+ if (lrui >= 0) {
+ if (lrui < mLruProcessActivityStart) {
+ mLruProcessActivityStart--;
+ }
+ mLruProcesses.remove(lrui);
+ }
+
+ int nextIndex;
+ if (!hasActivity) {
+ // Process doesn't have activities, it goes to the top of the non-activity area.
+ mLruProcesses.add(mLruProcessActivityStart, app);
+ nextIndex = mLruProcessActivityStart-1;
+ mLruProcessActivityStart++;
+ } else {
+ // Process does have activities, put it at the very tipsy-top.
+ mLruProcesses.add(app);
+ nextIndex = mLruProcessActivityStart;
}
// If the app is currently using a content provider or service,
@@ -2274,20 +2309,15 @@
if (cr.binding != null && cr.binding.service != null
&& cr.binding.service.app != null
&& cr.binding.service.app.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cr.binding.service.app, i+1);
+ nextIndex = updateLruProcessInternalLocked(cr.binding.service.app, now, nextIndex);
}
}
for (int j=app.conProviders.size()-1; j>=0; j--) {
ContentProviderRecord cpr = app.conProviders.get(j).provider;
if (cpr.proc != null && cpr.proc.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cpr.proc, i+1);
+ nextIndex = updateLruProcessInternalLocked(cpr.proc, now, nextIndex);
}
}
- }
-
- final void updateLruProcessLocked(ProcessRecord app, boolean oomAdj) {
- mLruSeq++;
- updateLruProcessInternalLocked(app, 0);
//Slog.i(TAG, "Putting proc to front: " + app.processName);
if (oomAdj) {
@@ -2295,14 +2325,12 @@
}
}
- final ProcessRecord getProcessRecordLocked(
- String processName, int uid) {
+ final ProcessRecord getProcessRecordLocked(String processName, int uid, boolean keepIfLarge) {
if (uid == Process.SYSTEM_UID) {
// The system gets to run in any process. If there are multiple
// processes with the same uid, just pick the first (this
// should never happen).
- SparseArray<ProcessRecord> procs = mProcessNames.getMap().get(
- processName);
+ SparseArray<ProcessRecord> procs = mProcessNames.getMap().get(processName);
if (procs == null) return null;
final int N = procs.size();
for (int i = 0; i < N; i++) {
@@ -2310,6 +2338,26 @@
}
}
ProcessRecord proc = mProcessNames.get(processName, uid);
+ if (false && proc != null && !keepIfLarge
+ && proc.setProcState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY
+ && proc.lastCachedPss >= 4000) {
+ // Turn this condition on to cause killing to happen regularly, for testing.
+ if (proc.baseProcessTracker != null) {
+ proc.baseProcessTracker.reportCachedKill(proc.pkgList, proc.lastCachedPss);
+ }
+ killUnneededProcessLocked(proc, Long.toString(proc.lastCachedPss)
+ + "k from cached");
+ } else if (proc != null && !keepIfLarge && mLastMemoryLevel > ProcessStats.ADJ_MEM_FACTOR_NORMAL
+ && proc.setProcState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY) {
+ if (DEBUG_PSS) Slog.d(TAG, "May not keep " + proc + ": pss=" + proc.lastCachedPss);
+ if (proc.lastCachedPss >= mProcessList.getCachedRestoreThreshold()) {
+ if (proc.baseProcessTracker != null) {
+ proc.baseProcessTracker.reportCachedKill(proc.pkgList, proc.lastCachedPss);
+ }
+ killUnneededProcessLocked(proc, Long.toString(proc.lastCachedPss)
+ + "k from cached");
+ }
+ }
return proc;
}
@@ -2333,10 +2381,10 @@
final ProcessRecord startProcessLocked(String processName,
ApplicationInfo info, boolean knownToBeDead, int intentFlags,
String hostingType, ComponentName hostingName, boolean allowWhileBooting,
- boolean isolated) {
+ boolean isolated, boolean keepIfLarge) {
ProcessRecord app;
if (!isolated) {
- app = getProcessRecordLocked(processName, info.uid);
+ app = getProcessRecordLocked(processName, info.uid, keepIfLarge);
} else {
// If this is an isolated process, it can't re-use an existing process.
app = null;
@@ -2647,7 +2695,7 @@
aInfo = new ActivityInfo(aInfo);
aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId);
ProcessRecord app = getProcessRecordLocked(aInfo.processName,
- aInfo.applicationInfo.uid);
+ aInfo.applicationInfo.uid, true);
if (app == null || app.instrumentationClass == null) {
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
mStackSupervisor.startHomeActivity(intent, aInfo);
@@ -3364,7 +3412,7 @@
boolean restarting, boolean allowRestart) {
cleanUpApplicationRecordLocked(app, restarting, allowRestart, -1);
if (!restarting) {
- mLruProcesses.remove(app);
+ removeLruProcessLocked(app);
}
if (mProfileProc == app) {
@@ -4212,7 +4260,7 @@
// Only the system server can kill an application
if (callerUid == Process.SYSTEM_UID) {
synchronized (this) {
- ProcessRecord app = getProcessRecordLocked(processName, uid);
+ ProcessRecord app = getProcessRecordLocked(processName, uid, true);
if (app != null && app.thread != null) {
try {
app.thread.scheduleSuicide();
@@ -4517,7 +4565,7 @@
}
killUnneededProcessLocked(app, reason);
handleAppDiedLocked(app, true, allowRestart);
- mLruProcesses.remove(app);
+ removeLruProcessLocked(app);
if (app.persistent && !app.isolated) {
if (!callerWillRestart) {
@@ -4712,7 +4760,7 @@
isRestrictedBackupMode || !normalMode, app.persistent,
new Configuration(mConfiguration), app.compat, getCommonServicesLocked(),
mCoreSettingsObserver.getCoreSettingsLocked());
- updateLruProcessLocked(app, false);
+ updateLruProcessLocked(app, false, false);
app.lastRequestedGc = app.lastLowMemory = SystemClock.uptimeMillis();
} catch (Exception e) {
// todo: Yikes! What should we do? For now we will try to
@@ -7175,7 +7223,7 @@
// make sure to count it as being accessed and thus
// back up on the LRU list. This is good because
// content providers are often expensive to start.
- updateLruProcessLocked(cpr.proc, false);
+ updateLruProcessLocked(cpr.proc, false, false);
}
}
@@ -7325,7 +7373,7 @@
ProcessRecord proc = startProcessLocked(cpi.processName,
cpr.appInfo, false, 0, "content provider",
new ComponentName(cpi.applicationInfo.packageName,
- cpi.name), false, false);
+ cpi.name), false, false, false);
if (proc == null) {
Slog.w(TAG, "Unable to launch app "
+ cpi.applicationInfo.packageName + "/"
@@ -7734,7 +7782,7 @@
final ProcessRecord addAppLocked(ApplicationInfo info, boolean isolated) {
ProcessRecord app;
if (!isolated) {
- app = getProcessRecordLocked(info.processName, info.uid);
+ app = getProcessRecordLocked(info.processName, info.uid, true);
} else {
app = null;
}
@@ -7745,7 +7793,7 @@
if (isolated) {
mIsolatedProcesses.put(app.uid, app);
}
- updateLruProcessLocked(app, true);
+ updateLruProcessLocked(app, true, false);
}
// This package really, really can not be stopped.
@@ -8613,6 +8661,8 @@
} else if (proc.setProcState < ActivityManager.PROCESS_STATE_HOME) {
proc.notCachedSinceIdle = true;
proc.initialIdlePss = 0;
+ proc.nextPssTime = ProcessList.computeNextPssTime(proc.curProcState, true,
+ mSleeping, now);
}
}
@@ -10230,13 +10280,16 @@
}
if (mLruProcesses.size() > 0) {
- boolean printed = dumpProcessOomList(pw, this, mLruProcesses, " ",
- "Proc", "PERS", false, dumpPackage, needSep,
- " Process LRU list (sorted by oom_adj):");
- if (printed) {
- needSep = true;
- printedAnything = true;
+ if (needSep) {
+ pw.println();
}
+ pw.print(" Process LRU list (sorted by oom_adj, "); pw.print(mLruProcesses.size());
+ pw.print(" total, non-activities at ");
+ pw.print(mLruProcesses.size()-mLruProcessActivityStart);
+ pw.println("):");
+ dumpProcessOomList(pw, this, mLruProcesses, " ", "Proc", "PERS", false, dumpPackage);
+ needSep = true;
+ printedAnything = true;
}
if (dumpAll || dumpPackage != null) {
@@ -10607,14 +10660,15 @@
printOomLevel(pw, "CACHED_APP_MAX_ADJ", ProcessList.CACHED_APP_MAX_ADJ);
if (needSep) pw.println();
- needSep = true;
- pw.println(" Process OOM control:");
- dumpProcessOomList(pw, this, mLruProcesses, " ",
- "Proc", "PERS", true, null, false, null);
+ pw.print(" Process OOM control ("); pw.print(mLruProcesses.size());
+ pw.print(" total, non-activities at ");
+ pw.print(mLruProcesses.size()-mLruProcessActivityStart);
+ pw.println("):");
+ dumpProcessOomList(pw, this, mLruProcesses, " ", "Proc", "PERS", true, null);
needSep = true;
}
- needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, null);
+ dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, null);
pw.println();
pw.println(" mHomeProcess: " + mHomeProcess);
@@ -11034,7 +11088,7 @@
private static final boolean dumpProcessOomList(PrintWriter pw,
ActivityManagerService service, List<ProcessRecord> origList,
String prefix, String normalLabel, String persistentLabel,
- boolean inclDetails, String dumpPackage, boolean needSep, String header) {
+ boolean inclDetails, String dumpPackage) {
ArrayList<Pair<ProcessRecord, Integer>> list
= new ArrayList<Pair<ProcessRecord, Integer>>(origList.size());
@@ -11050,13 +11104,6 @@
return false;
}
- if (header != null) {
- if (needSep) {
- pw.println();
- }
- pw.println(header);
- }
-
Comparator<Pair<ProcessRecord, Integer>> comparator
= new Comparator<Pair<ProcessRecord, Integer>>() {
@Override
@@ -11156,6 +11203,12 @@
pw.print(" set="); pw.println(r.setAdj);
pw.print(prefix);
pw.print(" ");
+ pw.print("state: cur="); pw.print(ProcessList.makeProcStateString(r.curProcState));
+ pw.print(" set="); pw.print(ProcessList.makeProcStateString(r.setProcState));
+ pw.print(" lastPss="); pw.print(r.lastPss);
+ pw.print(" lastCachedPss="); pw.println(r.lastCachedPss);
+ pw.print(prefix);
+ pw.print(" ");
pw.print("keeping="); pw.print(r.keeping);
pw.print(" cached="); pw.print(r.cached);
pw.print(" empty="); pw.print(r.empty);
@@ -11505,27 +11558,25 @@
if (!isCheckinRequest && dumpDetails) {
pw.println("\n** MEMINFO in pid " + pid + " [" + r.processName + "] **");
}
+ if (mi == null) {
+ mi = new Debug.MemoryInfo();
+ }
+ if (dumpDetails || (!brief && !oomOnly)) {
+ Debug.getMemoryInfo(pid, mi);
+ } else {
+ mi.dalvikPss = (int)Debug.getPss(pid, tmpLong);
+ mi.dalvikPrivateDirty = (int)tmpLong[0];
+ }
if (dumpDetails) {
try {
pw.flush();
- mi = null;
- mi = thread.dumpMemInfo(fd, isCheckinRequest, true, dumpDalvik, innerArgs);
+ thread.dumpMemInfo(fd, mi, isCheckinRequest, true, dumpDalvik, innerArgs);
} catch (RemoteException e) {
if (!isCheckinRequest) {
pw.println("Got RemoteException!");
pw.flush();
}
}
- } else {
- if (mi == null) {
- mi = new Debug.MemoryInfo();
- }
- if (!brief && !oomOnly) {
- Debug.getMemoryInfo(pid, mi);
- } else {
- mi.dalvikPss = (int)Debug.getPss(pid, tmpLong);
- mi.dalvikPrivateDirty = (int)tmpLong[0];
- }
}
final long myTotalPss = mi.getTotalPss();
@@ -11821,7 +11872,7 @@
private final void cleanUpApplicationRecordLocked(ProcessRecord app,
boolean restarting, boolean allowRestart, int index) {
if (index >= 0) {
- mLruProcesses.remove(index);
+ removeLruProcessLocked(app);
}
mProcessesToGc.remove(app);
@@ -12278,7 +12329,7 @@
: new ComponentName("android", "FullBackupAgent");
// startProcessLocked() returns existing proc's record if it's already running
ProcessRecord proc = startProcessLocked(app.processName, app,
- false, 0, "backup", hostingName, false, false);
+ false, 0, "backup", hostingName, false, false, false);
if (proc == null) {
Slog.e(TAG, "Unable to start backup agent process " + r);
return false;
@@ -14711,17 +14762,21 @@
}
if (app.setProcState < 0 || ProcessList.procStatesDifferForMem(app.curProcState,
app.setProcState)) {
- if (DEBUG_PSS) Slog.d(TAG, "Process state change from " + app.setProcState
- + " to " + app.curProcState + ": " + app);
app.lastStateTime = now;
app.nextPssTime = ProcessList.computeNextPssTime(app.curProcState, true,
mSleeping, now);
+ if (DEBUG_PSS) Slog.d(TAG, "Process state change from "
+ + ProcessList.makeProcStateString(app.setProcState) + " to "
+ + ProcessList.makeProcStateString(app.curProcState) + " next pss in "
+ + (app.nextPssTime-now) + ": " + app);
} else {
if (now > app.nextPssTime || (now > (app.lastPssTime+ProcessList.PSS_MAX_INTERVAL)
&& now > (app.lastStateTime+ProcessList.PSS_MIN_TIME_FROM_STATE_CHANGE))) {
requestPssLocked(app, app.setProcState);
app.nextPssTime = ProcessList.computeNextPssTime(app.curProcState, false,
mSleeping, now);
+ } else if (false && DEBUG_PSS) {
+ Slog.d(TAG, "Not requesting PSS of " + app + ": next=" + (app.nextPssTime-now));
}
}
if (app.setProcState != app.curProcState) {
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index d22a9f2..f5607a2 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -69,7 +69,6 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
-import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -1084,7 +1083,7 @@
// At this point, nothing else needs to be shown
if (DEBUG_VISBILITY) Slog.v(TAG, "Fullscreen: at " + r);
behindFullscreen = true;
- } else if (task.mOnTopOfHome) {
+ } else if (task.mActivities.indexOf(r) == 0 && task.mOnTopOfHome) {
if (DEBUG_VISBILITY) Slog.v(TAG, "Showing home: at " + r);
showHomeBehindStack = true;
behindFullscreen = true;
@@ -1342,7 +1341,7 @@
if (next.app != null && next.app.thread != null) {
// No reason to do full oom adj update here; we'll let that
// happen whenever it needs to later.
- mService.updateLruProcessLocked(next.app, false);
+ mService.updateLruProcessLocked(next.app, false, true);
}
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
return true;
@@ -1470,7 +1469,7 @@
mResumedActivity = next;
next.task.touchActiveTime();
mService.addRecentTaskLocked(next.task);
- mService.updateLruProcessLocked(next.app, true);
+ mService.updateLruProcessLocked(next.app, true, true);
updateLRUListLocked(next);
// Have the window manager re-evaluate the orientation of
@@ -2707,7 +2706,8 @@
ActivityManagerService.CANCEL_HEAVY_NOTIFICATION_MSG);
}
if (r.app.activities.isEmpty()) {
- // No longer have activities, so update oom adj.
+ // No longer have activities, so update LRU list and oom adj.
+ mService.updateLruProcessLocked(r.app, false, false);
mService.updateOomAdjLocked();
}
}
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index 9b1db7f..9549e0a 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -88,7 +88,7 @@
static final boolean DEBUG_ADD_REMOVE = DEBUG || false;
static final boolean DEBUG_APP = DEBUG || false;
static final boolean DEBUG_SAVED_STATE = DEBUG || false;
- static final boolean DEBUG_STATES = DEBUG || false;
+ static final boolean DEBUG_STATES = DEBUG || true;
static final boolean DEBUG_IDLE = DEBUG || false;
public static final int HOME_STACK_ID = 0;
@@ -912,7 +912,7 @@
if (idx < 0) {
app.activities.add(r);
}
- mService.updateLruProcessLocked(app, true);
+ mService.updateLruProcessLocked(app, true, true);
final ActivityStack stack = r.task.stack;
try {
@@ -1052,7 +1052,7 @@
boolean andResume, boolean checkConfig) {
// Is this activity's application already running?
ProcessRecord app = mService.getProcessRecordLocked(r.processName,
- r.info.applicationInfo.uid);
+ r.info.applicationInfo.uid, true);
r.task.stack.setLaunchTime(r);
@@ -1071,7 +1071,7 @@
}
mService.startProcessLocked(r.processName, r.info.applicationInfo, true, 0,
- "activity", r.intent.getComponent(), false, false);
+ "activity", r.intent.getComponent(), false, false, true);
}
final int startActivityLocked(IApplicationThread caller,
@@ -2105,12 +2105,12 @@
mService.mHandler.removeMessages(LAUNCH_TIMEOUT_MSG);
}
}
+ checkReadyForSleepLocked();
}
boolean shutdownLocked(int timeout) {
boolean timedout = false;
goingToSleepLocked();
- checkReadyForSleepLocked();
final long endTime = System.currentTimeMillis() + timeout;
while (true) {
diff --git a/services/java/com/android/server/am/BroadcastQueue.java b/services/java/com/android/server/am/BroadcastQueue.java
index b35ca79..b2e3ce7 100644
--- a/services/java/com/android/server/am/BroadcastQueue.java
+++ b/services/java/com/android/server/am/BroadcastQueue.java
@@ -220,7 +220,7 @@
r.curApp = app;
app.curReceiver = r;
app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_RECEIVER);
- mService.updateLruProcessLocked(app, true);
+ mService.updateLruProcessLocked(app, true, false);
// Tell the application to launch this receiver.
r.intent.setComponent(r.curComponent);
@@ -334,6 +334,7 @@
public boolean finishReceiverLocked(BroadcastRecord r, int resultCode,
String resultData, Bundle resultExtras, boolean resultAbort, boolean waitForServices) {
final int state = r.state;
+ final ActivityInfo receiver = r.curReceiver;
r.state = BroadcastRecord.IDLE;
if (state == BroadcastRecord.IDLE) {
Slog.w(TAG, "finishReceiver [" + mQueueName + "] called but state is IDLE");
@@ -363,15 +364,27 @@
if (waitForServices && r.curComponent != null && r.queue.mDelayBehindServices
&& r.queue.mOrderedBroadcasts.size() > 0
&& r.queue.mOrderedBroadcasts.get(0) == r) {
- // In this case, we are ready to process the next receiver for the current broadcast,
- // but are on a queue that would like to wait for services to finish before moving
- // on. If there are background services currently starting, then we will go into a
- // special state where we hold off on continuing this broadcast until they are done.
- if (mService.mServices.hasBackgroundServices(r.userId)) {
- Slog.i(ActivityManagerService.TAG, "Delay finish: "
- + r.curComponent.flattenToShortString());
- r.state = BroadcastRecord.WAITING_SERVICES;
- return false;
+ ActivityInfo nextReceiver;
+ if (r.nextReceiver < r.receivers.size()) {
+ Object obj = r.receivers.get(r.nextReceiver);
+ nextReceiver = (obj instanceof ActivityInfo) ? (ActivityInfo)obj : null;
+ } else {
+ nextReceiver = null;
+ }
+ // Don't do this if the next receive is in the same process as the current one.
+ if (receiver == null || nextReceiver == null
+ || receiver.applicationInfo.uid != nextReceiver.applicationInfo.uid
+ || !receiver.processName.equals(nextReceiver.processName)) {
+ // In this case, we are ready to process the next receiver for the current broadcast,
+ // but are on a queue that would like to wait for services to finish before moving
+ // on. If there are background services currently starting, then we will go into a
+ // special state where we hold off on continuing this broadcast until they are done.
+ if (mService.mServices.hasBackgroundServices(r.userId)) {
+ Slog.i(ActivityManagerService.TAG, "Delay finish: "
+ + r.curComponent.flattenToShortString());
+ r.state = BroadcastRecord.WAITING_SERVICES;
+ return false;
+ }
}
}
@@ -833,7 +846,7 @@
// Is this receiver's application already running?
ProcessRecord app = mService.getProcessRecordLocked(targetProcess,
- info.activityInfo.applicationInfo.uid);
+ info.activityInfo.applicationInfo.uid, false);
if (app != null && app.thread != null) {
try {
app.addPackage(info.activityInfo.packageName, mService.mProcessStats);
@@ -871,7 +884,7 @@
info.activityInfo.applicationInfo, true,
r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND,
"broadcast", r.curComponent,
- (r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false))
+ (r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false, false))
== null) {
// Ah, this recipient is unavailable. Finish it if necessary,
// and mark the broadcast record as ready for the next.
diff --git a/services/java/com/android/server/am/ProcessList.java b/services/java/com/android/server/am/ProcessList.java
index 54593aa..ef7f523 100644
--- a/services/java/com/android/server/am/ProcessList.java
+++ b/services/java/com/android/server/am/ProcessList.java
@@ -173,6 +173,8 @@
private final long mTotalMemMb;
+ private long mCachedRestoreLevel;
+
private boolean mHaveDisplaySize;
ProcessList() {
@@ -243,6 +245,11 @@
}
}
+ // The maximum size we will restore a process from cached to background, when under
+ // memory duress, is 1/3 the size we have reserved for kernel caches and other overhead
+ // before killing background processes.
+ mCachedRestoreLevel = (getMemLevel(ProcessList.CACHED_APP_MAX_ADJ)/1024) / 3;
+
for (int i=0; i<mOomAdj.length; i++) {
if (i > 0) {
adjString.append(',');
@@ -323,94 +330,6 @@
}
}
- // The minimum amount of time after a state change it is safe ro collect PSS.
- public static final int PSS_MIN_TIME_FROM_STATE_CHANGE = 15*1000;
-
- // The maximum amount of time we want to go between PSS collections.
- public static final int PSS_MAX_INTERVAL = 30*60*1000;
-
- // The minimum amount of time between successive PSS requests for *all* processes.
- public static final int PSS_ALL_INTERVAL = 10*60*1000;
-
- // The minimum amount of time between successive PSS requests for a process.
- private static final int PSS_SHORT_INTERVAL = 2*60*1000;
-
- // The amount of time until PSS when a process first becomes top.
- private static final int PSS_FIRST_TOP_INTERVAL = 15*1000;
-
- // The amount of time until PSS when a process first becomes cached.
- private static final int PSS_FIRST_CACHED_INTERVAL = 5*60*1000;
-
- // The amount of time until PSS when an important process stays in the same state.
- private static final int PSS_SAME_IMPORTANT_INTERVAL = 15*60*1000;
-
- // The amount of time until PSS when a service process stays in the same state.
- private static final int PSS_SAME_SERVICE_INTERVAL = 20*60*1000;
-
- // The amount of time until PSS when a cached process stays in the same state.
- private static final int PSS_SAME_CACHED_INTERVAL = 30*60*1000;
-
- public static final int PROC_MEM_PERSISTENT = 0;
- public static final int PROC_MEM_TOP = 1;
- public static final int PROC_MEM_IMPORTANT = 2;
- public static final int PROC_MEM_SERVICE = 3;
- public static final int PROC_MEM_CACHED = 4;
-
- private static final int[] sProcStateToProcMem = new int[] {
- PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT
- PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
- PROC_MEM_TOP, // ActivityManager.PROCESS_STATE_TOP
- PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
- PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
- PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_BACKUP
- PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
- PROC_MEM_SERVICE, // ActivityManager.PROCESS_STATE_SERVICE
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_RECEIVER
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_HOME
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
- PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
- };
-
- private static final long[] sFirstAwakePssTimes = new long[] {
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
- PSS_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER
- PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME
- PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
- PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
- PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
- PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
- };
-
- private static final long[] sSameAwakePssTimes = new long[] {
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
- PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_TOP
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP
- PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
- PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE
- PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER
- PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME
- PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
- PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
- PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
- PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
- };
-
- public static boolean procStatesDifferForMem(int procState1, int procState2) {
- return sProcStateToProcMem[procState1] != sProcStateToProcMem[procState2];
- }
-
public static String makeProcStateString(int curProcState) {
String procState;
switch (curProcState) {
@@ -475,6 +394,97 @@
sb.append(ramKb);
}
+ // The minimum amount of time after a state change it is safe ro collect PSS.
+ public static final int PSS_MIN_TIME_FROM_STATE_CHANGE = 15*1000;
+
+ // The maximum amount of time we want to go between PSS collections.
+ public static final int PSS_MAX_INTERVAL = 30*60*1000;
+
+ // The minimum amount of time between successive PSS requests for *all* processes.
+ public static final int PSS_ALL_INTERVAL = 10*60*1000;
+
+ // The minimum amount of time between successive PSS requests for a process.
+ private static final int PSS_SHORT_INTERVAL = 2*60*1000;
+
+ // The amount of time until PSS when a process first becomes top.
+ private static final int PSS_FIRST_TOP_INTERVAL = 10*1000;
+
+ // The amount of time until PSS when a process first goes into the background.
+ private static final int PSS_FIRST_BACKGROUND_INTERVAL = 20*1000;
+
+ // The amount of time until PSS when a process first becomes cached.
+ private static final int PSS_FIRST_CACHED_INTERVAL = 30*1000;
+
+ // The amount of time until PSS when an important process stays in the same state.
+ private static final int PSS_SAME_IMPORTANT_INTERVAL = 15*60*1000;
+
+ // The amount of time until PSS when a service process stays in the same state.
+ private static final int PSS_SAME_SERVICE_INTERVAL = 20*60*1000;
+
+ // The amount of time until PSS when a cached process stays in the same state.
+ private static final int PSS_SAME_CACHED_INTERVAL = 30*60*1000;
+
+ public static final int PROC_MEM_PERSISTENT = 0;
+ public static final int PROC_MEM_TOP = 1;
+ public static final int PROC_MEM_IMPORTANT = 2;
+ public static final int PROC_MEM_SERVICE = 3;
+ public static final int PROC_MEM_CACHED = 4;
+
+ private static final int[] sProcStateToProcMem = new int[] {
+ PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT
+ PROC_MEM_PERSISTENT, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
+ PROC_MEM_TOP, // ActivityManager.PROCESS_STATE_TOP
+ PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
+ PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
+ PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_BACKUP
+ PROC_MEM_IMPORTANT, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
+ PROC_MEM_SERVICE, // ActivityManager.PROCESS_STATE_SERVICE
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_RECEIVER
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_HOME
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
+ PROC_MEM_CACHED, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
+ };
+
+ private static final long[] sFirstAwakePssTimes = new long[] {
+ PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT
+ PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
+ PSS_FIRST_TOP_INTERVAL, // ActivityManager.PROCESS_STATE_TOP
+ PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
+ PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
+ PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP
+ PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
+ PSS_FIRST_BACKGROUND_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
+ PSS_FIRST_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
+ };
+
+ private static final long[] sSameAwakePssTimes = new long[] {
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_PERSISTENT_UI
+ PSS_SHORT_INTERVAL, // ActivityManager.PROCESS_STATE_TOP
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_BACKUP
+ PSS_SAME_IMPORTANT_INTERVAL, // ActivityManager.PROCESS_STATE_HEAVY_WEIGHT
+ PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_SERVICE
+ PSS_SAME_SERVICE_INTERVAL, // ActivityManager.PROCESS_STATE_RECEIVER
+ PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_HOME
+ PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_LAST_ACTIVITY
+ PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY
+ PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT
+ PSS_SAME_CACHED_INTERVAL, // ActivityManager.PROCESS_STATE_CACHED_EMPTY
+ };
+
+ public static boolean procStatesDifferForMem(int procState1, int procState2) {
+ return sProcStateToProcMem[procState1] != sProcStateToProcMem[procState2];
+ }
+
public static long computeNextPssTime(int procState, boolean first, boolean sleeping,
long now) {
final long[] table = sleeping
@@ -496,6 +506,14 @@
return mOomMinFree[mOomAdj.length-1] * 1024;
}
+ /**
+ * Return the maximum pss size in kb that we consider a process acceptable to
+ * restore from its cached state for running in the background when RAM is low.
+ */
+ long getCachedRestoreThreshold() {
+ return mCachedRestoreLevel;
+ }
+
private void writeFile(String path, String data) {
FileOutputStream fos = null;
try {
diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java
index 7a456f7..c5491ef 100644
--- a/services/java/com/android/server/am/ProcessRecord.java
+++ b/services/java/com/android/server/am/ProcessRecord.java
@@ -62,12 +62,12 @@
int pid; // The process of this application; 0 if none
boolean starting; // True if the process is being started
long lastActivityTime; // For managing the LRU list
- long lruWeight; // Weight for ordering in LRU list
long lastPssTime; // Last time we retrieved PSS data
long nextPssTime; // Next time we want to request PSS data
long lastStateTime; // Last time setProcState changed
long initialIdlePss; // Initial memory pss of process for idle maintenance.
long lastPss; // Last computed memory pss.
+ long lastCachedPss; // Last computed pss when in cached state.
int maxAdj; // Maximum OOM adjustment for this process
int curRawAdj; // Current OOM unlimited adjustment for this process
int setRawAdj; // Last set OOM unlimited adjustment for this process
@@ -214,15 +214,22 @@
pw.println(starting);
pw.print(prefix); pw.print("lastActivityTime=");
TimeUtils.formatDuration(lastActivityTime, now, pw);
- pw.print(" lruWeight="); pw.println(lruWeight);
+ pw.print(" lastPssTime=");
+ TimeUtils.formatDuration(lastPssTime, now, pw);
+ pw.print(" nextPssTime=");
+ TimeUtils.formatDuration(nextPssTime, now, pw);
+ pw.println();
+ pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq);
+ pw.print(" lruSeq="); pw.print(lruSeq);
+ pw.print(" lastPss="); pw.print(lastPss);
+ pw.print(" lastCachedPss="); pw.println(lastCachedPss);
pw.print(prefix); pw.print("serviceb="); pw.print(serviceb);
pw.print(" keeping="); pw.print(keeping);
pw.print(" cached="); pw.print(cached);
pw.print(" empty="); pw.println(empty);
if (notCachedSinceIdle) {
pw.print(prefix); pw.print("notCachedSinceIdle="); pw.print(notCachedSinceIdle);
- pw.print(" initialIdlePss="); pw.print(initialIdlePss);
- pw.print(" lastPss="); pw.println(lastPss);
+ pw.print(" initialIdlePss="); pw.println(initialIdlePss);
}
pw.print(prefix); pw.print("oom: max="); pw.print(maxAdj);
pw.print(" curRaw="); pw.print(curRawAdj);
@@ -240,13 +247,6 @@
pw.print(" lastStateTime=");
TimeUtils.formatDuration(lastStateTime, now, pw);
pw.println();
- pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq);
- pw.print(" lruSeq="); pw.print(lruSeq);
- pw.print(" lastPssTime=");
- TimeUtils.formatDuration(lastPssTime, now, pw);
- pw.print(" nextPssTime=");
- TimeUtils.formatDuration(nextPssTime, now, pw);
- pw.println();
if (hasShownUi || pendingUiClean || hasAboveClient) {
pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi);
pw.print(" pendingUiClean="); pw.print(pendingUiClean);
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 9a495ac..29a5d5f 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -158,7 +158,7 @@
DisplayManagerService.WindowManagerFuncs, DisplayManager.DisplayListener {
static final String TAG = "WindowManager";
static final boolean DEBUG = false;
- static final boolean DEBUG_ADD_REMOVE = false;
+ static final boolean DEBUG_ADD_REMOVE = true;
static final boolean DEBUG_FOCUS = false;
static final boolean DEBUG_FOCUS_LIGHT = DEBUG_FOCUS || false;
static final boolean DEBUG_ANIM = false;
@@ -4764,7 +4764,6 @@
synchronized(mWindowMap) {
Task task = mTaskIdToTask.get(taskId);
if (task == null) {
- Slog.e(TAG, "moveTaskToTop: taskId=" + taskId + " not found in mTaskIdToTask");
return;
}
final TaskStack stack = task.mStack;
@@ -9711,8 +9710,8 @@
newFocus = computeFocusedWindowLocked();
}
- if (DEBUG_FOCUS_LIGHT || localLOGV) Slog.v(
- TAG, "Changing focus from " + mCurrentFocus + " to " + newFocus);
+ if (true || DEBUG_FOCUS_LIGHT || localLOGV) Slog.v(TAG, "Changing focus from " +
+ mCurrentFocus + " to " + newFocus + " Callers=" + Debug.getCallers(4));
final WindowState oldFocus = mCurrentFocus;
mCurrentFocus = newFocus;
mLosingFocus.remove(newFocus);
diff --git a/tests/Camera2Tests/Android.mk b/tests/Camera2Tests/Android.mk
new file mode 100644
index 0000000..5053e7d
--- /dev/null
+++ b/tests/Camera2Tests/Android.mk
@@ -0,0 +1 @@
+include $(call all-subdir-makefiles)
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index eb47a4a..6278c89 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -75,8 +75,7 @@
*/
public class WifiWatchdogStateMachine extends StateMachine {
- /* STOPSHIP: Keep this configurable for debugging until ship */
- private static boolean DBG = false;
+ private static final boolean DBG = false;
private static final int BASE = Protocol.BASE_WIFI_WATCHDOG;
@@ -697,10 +696,6 @@
switch (msg.what) {
case EVENT_WATCHDOG_SETTINGS_CHANGE:
updateSettings();
- // STOPSHIP: Remove this at ship
- logd("Updated secure settings and turned debug on");
- DBG = true;
-
if (mPoorNetworkDetectionEnabled) {
transitionTo(mOnlineWatchState);
} else {