Setting result earlier than onPause

Setting the result in onPause is too late for delivering it to the
requesting activity. Changing to setting the result any time the
uncommitted state is written. The state will still be committed in
onPause only.

Test: Manually with a test app using startActivityForResult.

Bug: 188477366
Change-Id: I676c99e7d2a64b644cef60ecd14728d4d49180c3
diff --git a/src/com/android/settings/applications/appinfo/AlarmsAndRemindersDetails.java b/src/com/android/settings/applications/appinfo/AlarmsAndRemindersDetails.java
index 25d7332..3765dd9 100644
--- a/src/com/android/settings/applications/appinfo/AlarmsAndRemindersDetails.java
+++ b/src/com/android/settings/applications/appinfo/AlarmsAndRemindersDetails.java
@@ -81,6 +81,9 @@
 
         if (savedInstanceState != null) {
             mUncommittedState = (Boolean) savedInstanceState.get(UNCOMMITTED_STATE_KEY);
+            if (mUncommittedState != null && isAppSpecific()) {
+                setResult(mUncommittedState ? RESULT_OK : RESULT_CANCELED);
+            }
         }
         addPreferencesFromResource(R.xml.alarms_and_reminders);
         mSwitchPref = findPreference(KEY_SWITCH);
@@ -97,9 +100,11 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
-        final boolean checked = (Boolean) newValue;
         if (preference == mSwitchPref) {
-            mUncommittedState = checked;
+            mUncommittedState = (Boolean) newValue;
+            if (isAppSpecific()) {
+                setResult(mUncommittedState ? RESULT_OK : RESULT_CANCELED);
+            }
             refreshUi();
             return true;
         }
@@ -125,6 +130,11 @@
                 newState ? 1 : 0);
     }
 
+    private boolean isAppSpecific() {
+        return Settings.AlarmsAndRemindersAppActivity.class.getName().equals(
+                getIntent().getComponent().getClassName());
+    }
+
     @Override
     public void onPause() {
         super.onPause();
@@ -133,10 +143,6 @@
         }
         if (mPermissionState != null && mUncommittedState != null
                 && mUncommittedState != mPermissionState.isAllowed()) {
-            if (Settings.AlarmsAndRemindersAppActivity.class.getName().equals(
-                    getIntent().getComponent().getClassName())) {
-                setResult(mUncommittedState ? RESULT_OK : RESULT_CANCELED);
-            }
             setCanScheduleAlarms(mUncommittedState);
             logPermissionChange(mUncommittedState, mPackageName);
             mUncommittedState = null;