Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 257b3ec5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Commit changes only when activity is closed" into sc-dev

parents 5c29b05a ce533436
Loading
Loading
Loading
Loading
+35 −10
Original line number Diff line number Diff line
@@ -43,12 +43,14 @@ public class AlarmsAndRemindersDetails extends AppInfoWithHeader
        implements OnPreferenceChangeListener {

    private static final String KEY_SWITCH = "alarms_and_reminders_switch";
    private static final String UNCOMMITTED_STATE_KEY = "uncommitted_state";

    private AppStateAlarmsAndRemindersBridge mAppBridge;
    private AppOpsManager mAppOpsManager;
    private RestrictedSwitchPreference mSwitchPref;
    private AppStateAlarmsAndRemindersBridge.AlarmsAndRemindersState mPermissionState;
    private ActivityManager mActivityManager;
    private volatile Boolean mUncommittedState;

    /**
     * Returns the string that states whether the app has access to
@@ -77,24 +79,28 @@ public class AlarmsAndRemindersDetails extends AppInfoWithHeader
        mAppOpsManager = context.getSystemService(AppOpsManager.class);
        mActivityManager = context.getSystemService(ActivityManager.class);

        if (savedInstanceState != null) {
            mUncommittedState = (Boolean) savedInstanceState.get(UNCOMMITTED_STATE_KEY);
        }
        addPreferencesFromResource(R.xml.alarms_and_reminders);
        mSwitchPref = findPreference(KEY_SWITCH);
        mSwitchPref.setOnPreferenceChangeListener(this);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (mUncommittedState != null) {
            outState.putObject(UNCOMMITTED_STATE_KEY, mUncommittedState);
        }
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final boolean checked = (Boolean) newValue;
        if (preference == mSwitchPref) {
            if (mPermissionState != null && checked != mPermissionState.isAllowed()) {
                if (Settings.AlarmsAndRemindersAppActivity.class.getName().equals(
                        getIntent().getComponent().getClassName())) {
                    setResult(checked ? RESULT_OK : RESULT_CANCELED);
                }
                setCanScheduleAlarms(checked);
                logPermissionChange(checked, mPackageName);
            mUncommittedState = checked;
            refreshUi();
            }
            return true;
        }
        return false;
@@ -119,6 +125,24 @@ public class AlarmsAndRemindersDetails extends AppInfoWithHeader
                newState ? 1 : 0);
    }

    @Override
    public void onPause() {
        super.onPause();
        if (getActivity().isChangingConfigurations()) {
            return;
        }
        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;
        }
    }

    @Override
    protected boolean refreshUi() {
        if (mPackageInfo == null || mPackageInfo.applicationInfo == null) {
@@ -127,7 +151,8 @@ public class AlarmsAndRemindersDetails extends AppInfoWithHeader
        mPermissionState = mAppBridge.createPermissionState(mPackageName,
                mPackageInfo.applicationInfo.uid);
        mSwitchPref.setEnabled(mPermissionState.shouldBeVisible());
        mSwitchPref.setChecked(mPermissionState.isAllowed());
        mSwitchPref.setChecked(
                mUncommittedState != null ? mUncommittedState : mPermissionState.isAllowed());
        return true;
    }