New compat mode front end: UI and persistence.

Adds a really crappy UI for toggling compat mode.

Persists compat mode selection across boots.

Turns on compat mode by default for newly installed apps.

Change-Id: Idc83494397bd17c41450bc9e9a05e4386c509399
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 11e9975..4beb5cc 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1398,12 +1398,41 @@
             return true;
         }
 
+        case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
+        {
+            data.enforceInterface(IActivityManager.descriptor);
+            int mode = getFrontActivityScreenCompatMode();
+            reply.writeNoException();
+            reply.writeInt(mode);
+            return true;
+        }
+
+        case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
+        {
+            data.enforceInterface(IActivityManager.descriptor);
+            int mode = data.readInt();
+            setFrontActivityScreenCompatMode(mode);
+            reply.writeNoException();
+            reply.writeInt(mode);
+            return true;
+        }
+
+        case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
+        {
+            data.enforceInterface(IActivityManager.descriptor);
+            String pkg = data.readString();
+            int mode = getPackageScreenCompatMode(pkg);
+            reply.writeNoException();
+            reply.writeInt(mode);
+            return true;
+        }
+
         case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
         {
             data.enforceInterface(IActivityManager.descriptor);
             String pkg = data.readString();
-            boolean enabled = data.readInt() != 0;
-            setPackageScreenCompatMode(pkg, enabled);
+            int mode = data.readInt();
+            setPackageScreenCompatMode(pkg, mode);
             reply.writeNoException();
             return true;
         }
@@ -3152,13 +3181,48 @@
         return result;
     }
 
-    public void setPackageScreenCompatMode(String packageName, boolean compatEnabled)
+    public int getFrontActivityScreenCompatMode() throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        int mode = reply.readInt();
+        reply.recycle();
+        data.recycle();
+        return mode;
+    }
+
+    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeInt(mode);
+        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        reply.recycle();
+        data.recycle();
+    }
+
+    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        int mode = reply.readInt();
+        reply.recycle();
+        data.recycle();
+        return mode;
+    }
+
+    public void setPackageScreenCompatMode(String packageName, int mode)
             throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         data.writeString(packageName);
-        data.writeInt(compatEnabled ? 1 : 0);
+        data.writeInt(mode);
         mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
         reply.readException();
         reply.recycle();