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

Commit cded5ffd authored by Tony Mantler's avatar Tony Mantler Committed by Android (Google) Code Review
Browse files

Merge "Don't lose dialogs during configuration change"

parents 56696c85 265e7fbc
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib.core;

import android.support.annotation.Nullable;
import android.support.v7.preference.Preference;

/**
 * Interface for {@link AbstractPreferenceController} objects which manage confirmation dialogs
 */
public interface ConfirmationDialogController {
    /**
     * Returns the key for this preference.
     */
    String getPreferenceKey();

    /**
     * Shows the dialog
     * @param preference Preference object relevant to the dialog being shown
     */
    void showConfirmationDialog(@Nullable Preference preference);

    /**
     * Dismiss the dialog managed by this object
     */
    void dismissConfirmationDialog();

    /**
     * @return {@code true} if the dialog is showing
     */
    boolean isConfirmationDialogShowing();
}
+5 −5
Original line number Diff line number Diff line
@@ -29,8 +29,10 @@ import android.support.v7.preference.TwoStatePreference;
import android.text.TextUtils;

import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.ConfirmationDialogController;

public abstract class AbstractEnableAdbPreferenceController extends AbstractPreferenceController {
public abstract class AbstractEnableAdbPreferenceController extends AbstractPreferenceController
        implements ConfirmationDialogController {
    private static final String KEY_ENABLE_ADB = "enable_adb";
    public static final String ACTION_ENABLE_ADB_STATE_CHANGED =
            "com.android.settingslib.development.AbstractEnableAdbController."
@@ -91,7 +93,7 @@ public abstract class AbstractEnableAdbPreferenceController extends AbstractPref
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (TextUtils.equals(KEY_ENABLE_ADB, preference.getKey())) {
            if (!isAdbEnabled()) {
                showConfirmationDialog((SwitchPreference) preference);
                showConfirmationDialog(preference);
            } else {
                writeAdbSetting(false);
            }
@@ -107,10 +109,8 @@ public abstract class AbstractEnableAdbPreferenceController extends AbstractPref
        notifyStateChanged();
    }

    protected void notifyStateChanged() {
    private void notifyStateChanged() {
        LocalBroadcastManager.getInstance(mContext)
                .sendBroadcast(new Intent(ACTION_ENABLE_ADB_STATE_CHANGED));
    }

    public abstract void showConfirmationDialog(SwitchPreference preference);
}
+3 −3
Original line number Diff line number Diff line
@@ -31,13 +31,15 @@ import android.text.TextUtils;

import com.android.settingslib.R;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.ConfirmationDialogController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy;

public abstract class AbstractLogpersistPreferenceController extends AbstractPreferenceController
        implements Preference.OnPreferenceChangeListener, LifecycleObserver, OnCreate, OnDestroy {
        implements Preference.OnPreferenceChangeListener, LifecycleObserver, OnCreate, OnDestroy,
        ConfirmationDialogController {

    private static final String SELECT_LOGPERSIST_KEY = "select_logpersist";
    private static final String SELECT_LOGPERSIST_PROPERTY = "persist.logd.logpersistd";
@@ -254,6 +256,4 @@ public abstract class AbstractLogpersistPreferenceController extends AbstractPre
        }
        updateLogpersistValues();
    }

    public abstract void showConfirmationDialog(ListPreference preference);
}
+9 −1
Original line number Diff line number Diff line
@@ -150,9 +150,17 @@ public class EnableAdbPreferenceControllerTest {
        }

        @Override
        public void showConfirmationDialog(SwitchPreference preference) {
        public void showConfirmationDialog(Preference preference) {
            // Don't show a dialog, just set setting.
            writeAdbSetting(true);
        }

        @Override
        public boolean isConfirmationDialogShowing() {
            return false;
        }

        @Override
        public void dismissConfirmationDialog() {}
    }
}
+8 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify;

import android.os.SystemProperties;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;

import com.android.settingslib.SettingsLibRobolectricTestRunner;
@@ -59,8 +60,14 @@ public class LogpersistPreferenceControllerTest {
        mController = new AbstractLogpersistPreferenceController(RuntimeEnvironment.application,
                mLifecycle) {
            @Override
            public void showConfirmationDialog(ListPreference preference) {
            public void showConfirmationDialog(Preference preference) {}

            @Override
            public void dismissConfirmationDialog() {}

            @Override
            public boolean isConfirmationDialogShowing() {
                return false;
            }
        };