Throw at getPackageSizeInfoAsUser() callers.

But only when targeting O; if they're old apps then log and pass
a soft failure message to their callback.

Test: builds, boots
Bug: 35749102
Change-Id: I6c6b5a37c23669e7b1ed3c30207bca610821eb1f
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 64e2d49..97992ca 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -65,6 +65,7 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -2129,10 +2130,15 @@
     @Override
     public void getPackageSizeInfoAsUser(String packageName, int userHandle,
             IPackageStatsObserver observer) {
-        try {
-            mPM.getPackageSizeInfo(packageName, userHandle, observer);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
+        if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
+            throw new UnsupportedOperationException(
+                    "Shame on you for calling a hidden API. Shame!");
+        } else if (observer != null) {
+            Log.d(TAG, "Shame on you for calling a hidden API. Shame!");
+            try {
+                observer.onGetStatsCompleted(null, false);
+            } catch (RemoteException ignored) {
+            }
         }
     }