Use LOCAL_SDK_VERSION current instead of system_current in externalservice tests.

The API is no longer marked as @hide/@SystemAPI as of
Ifd708f90b47a1571cd54c5ec9fc217f0567d5ff4. This also pulls in some
cleanup from abandoned CL ag/853962.

Bug: 22084679
Bug: 21643067
Change-Id: I30a91c7bc8c4dea0ac4037e5f68d5eedb0c88c20
diff --git a/tests/tests/externalservice/Android.mk b/tests/tests/externalservice/Android.mk
index 3adfc34..c438dd6 100644
--- a/tests/tests/externalservice/Android.mk
+++ b/tests/tests/externalservice/Android.mk
@@ -36,7 +36,7 @@
 
 LOCAL_PACKAGE_NAME := CtsExternalServiceTestCases
 
-LOCAL_SDK_VERSION := system_current
+LOCAL_SDK_VERSION := current
 
 include $(BUILD_CTS_PACKAGE)
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/externalservice/service/Android.mk b/tests/tests/externalservice/service/Android.mk
index 68e9d1a..9541b0e 100644
--- a/tests/tests/externalservice/service/Android.mk
+++ b/tests/tests/externalservice/service/Android.mk
@@ -30,6 +30,6 @@
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts
 
-LOCAL_SDK_VERSION := system_current
+LOCAL_SDK_VERSION := current
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/tests/tests/externalservice/src/android/externalservice/cts/ExternalServiceTest.java b/tests/tests/externalservice/src/android/externalservice/cts/ExternalServiceTest.java
index b80b2ff..37c8613 100644
--- a/tests/tests/externalservice/src/android/externalservice/cts/ExternalServiceTest.java
+++ b/tests/tests/externalservice/src/android/externalservice/cts/ExternalServiceTest.java
@@ -31,7 +31,6 @@
 import android.os.RemoteException;
 import android.test.AndroidTestCase;
 import android.util.Log;
-import android.util.MutableInt;
 
 import android.externalservice.common.ServiceMessages;
 
@@ -140,15 +139,13 @@
 
         // Check the identity of the service.
         Messenger remote = new Messenger(mConnection.service);
-        MutableInt uid = new MutableInt(0);
-        MutableInt pid = new MutableInt(0);
-        StringBuilder pkg = new StringBuilder();
-        assertTrue(identifyService(remote, uid, pid, pkg));
+        ServiceIdentity id = identifyService(remote);
+        assertNotNull(id);
 
-        assertFalse(uid.value == 0 || pid.value == 0);
-        assertNotEquals(Process.myUid(), uid.value);
-        assertNotEquals(Process.myPid(), pid.value);
-        assertEquals(getContext().getPackageName(), pkg.toString());
+        assertFalse(id.uid == 0 || id.pid == 0);
+        assertNotEquals(Process.myUid(), id.uid);
+        assertNotEquals(Process.myPid(), id.pid);
+        assertEquals(getContext().getPackageName(), id.packageName);
     }
 
     /** Tests that the APK providing the externalService can bind the service itself, and that
@@ -165,11 +162,9 @@
 
         // Get the identity of the creator.
         Messenger remoteCreator = new Messenger(creatorConnection.service);
-        MutableInt creatorUid = new MutableInt(0);
-        MutableInt creatorPid = new MutableInt(0);
-        StringBuilder creatorPkg = new StringBuilder();
-        assertTrue(identifyService(remoteCreator, creatorUid, creatorPid, creatorPkg));
-        assertFalse(creatorUid.value == 0 || creatorPid.value == 0);
+        ServiceIdentity creatorId = identifyService(remoteCreator);
+        assertNotNull(creatorId);
+        assertFalse(creatorId.uid == 0 || creatorId.pid == 0);
 
         // Have the creator actually start its service.
         final Message creatorMsg =
@@ -201,12 +196,9 @@
         // Get the connection to the creator's service.
         assertNotNull(creatorMsg.obj);
         Messenger remoteCreatorService = (Messenger) creatorMsg.obj;
-        MutableInt creatorServiceUid = new MutableInt(0);
-        MutableInt creatorServicePid = new MutableInt(0);
-        StringBuilder creatorServicePkg = new StringBuilder();
-        assertTrue(identifyService(remoteCreatorService, creatorServiceUid, creatorServicePid,
-                creatorServicePkg));
-        assertFalse(creatorServiceUid.value == 0 || creatorPid.value == 0);
+        ServiceIdentity creatorServiceId = identifyService(remoteCreatorService);
+        assertNotNull(creatorServiceId);
+        assertFalse(creatorServiceId.uid == 0 || creatorId.pid == 0);
 
         // Create an external service from this (the test) process.
         intent = new Intent();
@@ -216,37 +208,34 @@
         assertTrue(getContext().bindService(intent, mConnection,
                     Context.BIND_AUTO_CREATE | Context.BIND_EXTERNAL_SERVICE));
         assertTrue(mCondition.block(CONDITION_TIMEOUT));
-        MutableInt serviceUid = new MutableInt(0);
-        MutableInt servicePid = new MutableInt(0);
-        StringBuilder servicePkg = new StringBuilder();
-        assertTrue(identifyService(new Messenger(mConnection.service), serviceUid, servicePid,
-                servicePkg));
-        assertFalse(serviceUid.value == 0 || servicePid.value == 0);
+        ServiceIdentity serviceId = identifyService(new Messenger(mConnection.service));
+        assertNotNull(serviceId);
+        assertFalse(serviceId.uid == 0 || serviceId.pid == 0);
 
         // Make sure that all the processes are unique.
         int myUid = Process.myUid();
         int myPid = Process.myPid();
         String myPkg = getContext().getPackageName();
 
-        assertNotEquals(myUid, creatorUid.value);
-        assertNotEquals(myUid, creatorServiceUid.value);
-        assertNotEquals(myUid, serviceUid.value);
-        assertNotEquals(myPid, creatorPid.value);
-        assertNotEquals(myPid, creatorServicePid.value);
-        assertNotEquals(myPid, servicePid.value);
+        assertNotEquals(myUid, creatorId.uid);
+        assertNotEquals(myUid, creatorServiceId.uid);
+        assertNotEquals(myUid, serviceId.uid);
+        assertNotEquals(myPid, creatorId.pid);
+        assertNotEquals(myPid, creatorServiceId.pid);
+        assertNotEquals(myPid, serviceId.pid);
 
-        assertNotEquals(creatorUid.value, creatorServiceUid.value);
-        assertNotEquals(creatorUid.value, serviceUid.value);
-        assertNotEquals(creatorPid.value, creatorServicePid.value);
-        assertNotEquals(creatorPid.value, servicePid.value);
+        assertNotEquals(creatorId.uid, creatorServiceId.uid);
+        assertNotEquals(creatorId.uid, serviceId.uid);
+        assertNotEquals(creatorId.pid, creatorServiceId.pid);
+        assertNotEquals(creatorId.pid, serviceId.pid);
 
-        assertNotEquals(creatorServiceUid.value, serviceUid.value);
-        assertNotEquals(creatorServicePid.value, servicePid.value);
+        assertNotEquals(creatorServiceId.uid, serviceId.uid);
+        assertNotEquals(creatorServiceId.pid, serviceId.pid);
 
-        assertNotEquals(myPkg, creatorPkg.toString());
-        assertNotEquals(myPkg, creatorServicePkg.toString());
-        assertEquals(creatorPkg.toString(), creatorServicePkg.toString());
-        assertEquals(myPkg, servicePkg.toString());
+        assertNotEquals(myPkg, creatorId.packageName);
+        assertNotEquals(myPkg, creatorServiceId.packageName);
+        assertEquals(creatorId.packageName, creatorServiceId.packageName);
+        assertEquals(myPkg, serviceId.packageName);
 
         getContext().unbindService(creatorConnection);
     }
@@ -264,11 +253,9 @@
 
         assertTrue(mCondition.block(CONDITION_TIMEOUT));
 
-        MutableInt uidOne = new MutableInt(0);
-        MutableInt pidOne = new MutableInt(0);
-        StringBuilder pkgOne = new StringBuilder();
-        assertTrue(identifyService(new Messenger(initialConn.service), uidOne, pidOne, pkgOne));
-        assertFalse(uidOne.value == 0 || pidOne.value == 0);
+        ServiceIdentity idOne = identifyService(new Messenger(initialConn.service));
+        assertNotNull(idOne);
+        assertFalse(idOne.uid == 0 || idOne.pid == 0);
 
         // Bind the service with a different priority.
         mCondition.close();
@@ -279,38 +266,41 @@
 
         assertTrue(mCondition.block(CONDITION_TIMEOUT));
 
-        MutableInt uidTwo = new MutableInt(0);
-        MutableInt pidTwo = new MutableInt(0);
-        StringBuilder pkgTwo = new StringBuilder();
-        Messenger prioMessenger = new Messenger(prioConn.service);
-        assertTrue(identifyService(prioMessenger, uidTwo, pidTwo, pkgTwo));
-        assertFalse(uidTwo.value == 0 || pidTwo.value == 0);
+        ServiceIdentity idTwo = identifyService(new Messenger(prioConn.service));
+        assertNotNull(idTwo);
+        assertFalse(idTwo.uid == 0 || idTwo.pid == 0);
 
-        assertEquals(uidOne.value, uidTwo.value);
-        assertEquals(pidOne.value, pidTwo.value);
-        assertEquals(pkgOne.toString(), pkgTwo.toString());
-        assertNotEquals(Process.myUid(), uidOne.value);
-        assertNotEquals(Process.myPid(), pidOne.value);
-        assertEquals(getContext().getPackageName(), pkgOne.toString());
+        assertEquals(idOne.uid, idTwo.uid);
+        assertEquals(idOne.pid, idTwo.pid);
+        assertEquals(idOne.packageName, idTwo.packageName);
+        assertNotEquals(Process.myUid(), idOne.uid);
+        assertNotEquals(Process.myPid(), idOne.pid);
+        assertEquals(getContext().getPackageName(), idOne.packageName);
 
         getContext().unbindService(prioConn);
         getContext().unbindService(initialConn);
     }
 
-    /** Given a Messenger, this will message the service to retrieve its UID, PID, and package name,
-     * storing the results in the mutable parameters. */
-    private boolean identifyService(Messenger service, final MutableInt uid, final MutableInt pid,
-            final StringBuilder packageName) {
+    /** Contains information about the security principal of a Service. */
+    private static class ServiceIdentity {
+        int uid;
+        int pid;
+        String packageName;
+    }
+
+    /** Given a Messenger, this will message the service to retrieve its UID, PID, and package name.
+     * On success, returns a ServiceIdentity. On failure, returns null. */
+    private ServiceIdentity identifyService(Messenger service) {
+        final ServiceIdentity id = new ServiceIdentity();
         Handler handler = new Handler(Looper.getMainLooper()) {
             @Override
             public void handleMessage(Message msg) {
                 Log.d(TAG, "Received message: " + msg);
                 switch (msg.what) {
                     case ServiceMessages.MSG_IDENTIFY_RESPONSE:
-                        uid.value = msg.arg1;
-                        pid.value = msg.arg2;
-                        packageName.append(
-                                msg.getData().getString(ServiceMessages.IDENTIFY_PACKAGE));
+                        id.uid = msg.arg1;
+                        id.pid = msg.arg2;
+                        id.packageName = msg.getData().getString(ServiceMessages.IDENTIFY_PACKAGE);
                         mCondition.open();
                         break;
                 }
@@ -326,10 +316,12 @@
             service.send(msg);
         } catch (RemoteException e) {
             fail("Unexpected remote exception: " + e);
-            return false;
+            return null;
         }
 
-        return mCondition.block(CONDITION_TIMEOUT);
+        if (!mCondition.block(CONDITION_TIMEOUT))
+            return null;
+        return id;
     }
 
     private class Connection implements ServiceConnection {