Fix out of bounds exception

It looks like the cached index had become invalid at some
point.  It's unclear why, but the logs suggest that a
bunch of Home services crashed.

Rather than cache the index within the Activity, I have
changed the code to send the index along with the
dialog activity launch.  This way when the dialog returns,
the index will be saved within the callback.

The index should be enough because the permission set
should not change for the app between screens and the
permission set is alphabetized.

BUG: 25334674
Change-Id: I8f9189960aa7fc9b09cc25f594397523550ac626
diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
index 18db94c..aba97fc 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
@@ -55,7 +55,6 @@
     private PermissionsSettingsAdapter mAdapter;
 
     private boolean mHasConfirmedRevoke;
-    private int mPendingPermGroupIndex = -1;
 
     public static AppPermissionsFragmentWear newInstance(String packageName) {
         return setPackageName(new AppPermissionsFragmentWear(), packageName);
@@ -216,11 +215,11 @@
         } else {
             final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
             if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
-                mPendingPermGroupIndex = index;
                 Intent intent = new Intent(getActivity(), WarningConfirmationActivity.class);
                 intent.putExtra(WarningConfirmationActivity.EXTRA_WARNING_MESSAGE,
                         getString(grantedByDefault ?
                                 R.string.system_warning : R.string.old_sdk_deny_warning));
+                intent.putExtra(WarningConfirmationActivity.EXTRA_INDEX, index);
                 startActivityForResult(intent, WARNING_CONFIRMATION_REQUEST);
             } else {
                 group.revokeRuntimePermissions(false);
@@ -234,18 +233,21 @@
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == WARNING_CONFIRMATION_REQUEST) {
             if (resultCode == Activity.RESULT_OK) {
-                SettingsAdapter.Setting<AppPermissionGroup> setting =
-                        mAdapter.get(mPendingPermGroupIndex);
+                int index = data.getIntExtra(WarningConfirmationActivity.EXTRA_INDEX, -1);
+                if (index == -1) {
+                    Log.e(LOG_TAG, "Warning confirmation request came back with no index.");
+                    return;
+                }
+
+                SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index);
                 final AppPermissionGroup group = setting.data;
                 group.revokeRuntimePermissions(false);
                 if (!group.hasGrantedByDefaultPermission()) {
                     mHasConfirmedRevoke = true;
                 }
 
-                updatePermissionGroupSetting(mPendingPermGroupIndex);
+                updatePermissionGroupSetting(index);
             }
-
-            mPendingPermGroupIndex = -1;
         } else {
             super.onActivityResult(requestCode, resultCode, data);
         }
diff --git a/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java b/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java
index e26dabd..0371341 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java
@@ -17,6 +17,7 @@
 package com.android.packageinstaller.permission.ui.wear;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.os.Bundle;
@@ -25,6 +26,8 @@
 
 public final class WarningConfirmationActivity extends Activity {
     public final static String EXTRA_WARNING_MESSAGE = "EXTRA_WARNING_MESSAGE";
+    // Saved index that will be returned in the onActivityResult() callback
+    public final static String EXTRA_INDEX = "EXTRA_INDEX";
 
     private ConfirmationViewHandler mViewHandler;
     private String mMessage;
@@ -43,14 +46,12 @@
 
             @Override
             public void onButton1() {
-                setResult(Activity.RESULT_CANCELED);
-                finish();
+                setResultAndFinish(Activity.RESULT_CANCELED);
             }
 
             @Override
             public void onButton2() {
-                setResult(Activity.RESULT_OK);
-                finish();
+                setResultAndFinish(Activity.RESULT_OK);
             }
 
             @Override
@@ -107,4 +108,11 @@
         setContentView(mViewHandler.createView());
         mViewHandler.invalidate();
     }
+
+    private void setResultAndFinish(int result) {
+        Intent intent = new Intent();
+        intent.putExtra(EXTRA_INDEX, getIntent().getIntExtra(EXTRA_INDEX, -1));
+        setResult(result, intent);
+        finish();
+    }
 }