Merge "Fix no show quick settings tutorial after device rotates"

This commit is contained in:
Menghan Li
2022-08-22 11:42:05 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 14 deletions

View File

@@ -28,12 +28,13 @@ import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
/** PrimarySwitchPreferenceController that shows quick settings tooltip on first use. */ /** PrimarySwitchPreferenceController that shows quick settings tooltip on first use. */
public abstract class AccessibilityQuickSettingsPrimarySwitchPreferenceController public abstract class AccessibilityQuickSettingsPrimarySwitchPreferenceController
extends TogglePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnCreate, OnSaveInstanceState { implements LifecycleObserver, OnCreate, OnDestroy, OnSaveInstanceState {
private static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow"; private static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow";
private final Handler mHandler; private final Handler mHandler;
private PrimarySwitchPreference mPreference; private PrimarySwitchPreference mPreference;
@@ -62,10 +63,16 @@ public abstract class AccessibilityQuickSettingsPrimarySwitchPreferenceControlle
} }
} }
@Override
public void onDestroy() {
mHandler.removeCallbacksAndMessages(null);
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
if (mTooltipWindow != null) { final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, mTooltipWindow.isShowing()); if (mNeedsQSTooltipReshow || isTooltipWindowShowing) {
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
} }
} }

View File

@@ -20,6 +20,7 @@ import static com.android.settings.accessibility.AccessibilityDialogUtils.Dialog
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_GENERAL_CATEGORY; import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_GENERAL_CATEGORY;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_TYPE; import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_TYPE;
import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ComponentName; import android.content.ComponentName;
@@ -150,7 +151,12 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
// Reshow tooltip when activity recreate, such as rotate device. // Reshow tooltip when activity recreate, such as rotate device.
if (mNeedsQSTooltipReshow) { if (mNeedsQSTooltipReshow) {
getView().post(this::showQuickSettingsTooltipIfNeeded); view.post(() -> {
final Activity activity = getActivity();
if (activity != null && !activity.isFinishing()) {
showQuickSettingsTooltipIfNeeded();
}
});
} }
} }
@@ -180,8 +186,9 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
if (value != NOT_SET) { if (value != NOT_SET) {
outState.putInt(KEY_SAVED_USER_SHORTCUT_TYPE, value); outState.putInt(KEY_SAVED_USER_SHORTCUT_TYPE, value);
} }
if (mTooltipWindow != null) { final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, mTooltipWindow.isShowing()); if (mNeedsQSTooltipReshow || isTooltipWindowShowing) {
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
outState.putInt(KEY_SAVED_QS_TOOLTIP_TYPE, mNeedsQSTooltipType); outState.putInt(KEY_SAVED_QS_TOOLTIP_TYPE, mNeedsQSTooltipType);
} }
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);

View File

@@ -18,6 +18,7 @@ package com.android.settings.accessibility;
import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums; import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ComponentName; import android.content.ComponentName;
@@ -232,13 +233,18 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity settingsActivity = (SettingsActivity) getActivity();
final SettingsMainSwitchBar switchBar = activity.getSwitchBar(); final SettingsMainSwitchBar switchBar = settingsActivity.getSwitchBar();
switchBar.hide(); switchBar.hide();
// Reshow tooltip when activity recreate, such as rotate device. // Reshow tooltip when activity recreate, such as rotate device.
if (mNeedsQSTooltipReshow) { if (mNeedsQSTooltipReshow) {
getView().post(this::showQuickSettingsTooltipIfNeeded); view.post(() -> {
final Activity activity = getActivity();
if (activity != null && !activity.isFinishing()) {
showQuickSettingsTooltipIfNeeded();
}
});
} }
writeDefaultShortcutTargetServiceToSettingsIfNeeded(getPrefContext()); writeDefaultShortcutTargetServiceToSettingsIfNeeded(getPrefContext());
@@ -275,8 +281,9 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
if (value != NOT_SET) { if (value != NOT_SET) {
outState.putInt(KEY_SAVED_USER_SHORTCUT_TYPE, value); outState.putInt(KEY_SAVED_USER_SHORTCUT_TYPE, value);
} }
if (mTooltipWindow != null) { final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, mTooltipWindow.isShowing()); if (mNeedsQSTooltipReshow || isTooltipWindowShowing) {
outState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
outState.putInt(KEY_SAVED_QS_TOOLTIP_TYPE, mNeedsQSTooltipType); outState.putInt(KEY_SAVED_QS_TOOLTIP_TYPE, mNeedsQSTooltipType);
} }
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);

View File

@@ -153,12 +153,10 @@ public class AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest {
@Test @Test
@Config(shadows = ShadowFragment.class) @Config(shadows = ShadowFragment.class)
public void restoreValueFromSavedInstanceState_showTooltipView() { public void restoreValueFromSavedInstanceState_showTooltipView() {
mController.displayPreference(mScreen);
mController.setChecked(true);
final Bundle savedInstanceState = new Bundle(); final Bundle savedInstanceState = new Bundle();
savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true); savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
mController.onCreate(savedInstanceState);
mFragment.onCreate(savedInstanceState);
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
assertThat(getLatestPopupWindow().isShowing()).isTrue(); assertThat(getLatestPopupWindow().isShowing()).isTrue();