Merge changes from topic "fix-weird-animation" into main
* changes: Fix jiggle when opening custom manual modes Allow turning off currently active modes
This commit is contained in:
committed by
Android (Google) Code Review
commit
e19b8743c8
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.notification.modes;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.provider.Settings;
|
||||
@@ -36,8 +38,8 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl
|
||||
private static final String TAG = "ZenModeButtonPrefController";
|
||||
|
||||
private Button mZenButton;
|
||||
private Fragment mParent;
|
||||
private ManualDurationHelper mDurationHelper;
|
||||
private final Fragment mParent;
|
||||
private final ManualDurationHelper mDurationHelper;
|
||||
|
||||
ZenModeButtonPreferenceController(Context context, String key, Fragment parent,
|
||||
ZenModesBackend backend) {
|
||||
@@ -48,7 +50,8 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(ZenMode zenMode) {
|
||||
return zenMode.getRule().isManualInvocationAllowed() && zenMode.getRule().isEnabled();
|
||||
return zenMode.isEnabled()
|
||||
&& (zenMode.isActive() || zenMode.getRule().isManualInvocationAllowed());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,6 +60,7 @@ class ZenModeButtonPreferenceController extends AbstractZenModePreferenceControl
|
||||
mZenButton = ((LayoutPreference) preference).findViewById(R.id.activate_mode);
|
||||
}
|
||||
mZenButton.setOnClickListener(v -> {
|
||||
checkNotNull(mBackend, "Backend not available!");
|
||||
if (zenMode.isActive()) {
|
||||
mBackend.deactivateMode(zenMode);
|
||||
} else {
|
||||
|
||||
@@ -65,8 +65,13 @@ public class ZenModeFragment extends ZenModeFragmentBase {
|
||||
new ZenModePreferenceCategoryController(context, "modes_additional_actions"));
|
||||
prefControllers.add(new ZenModeDisplayLinkPreferenceController(
|
||||
context, "mode_display_settings", mBackend, mHelperBackend));
|
||||
prefControllers.add(new ZenModeSetTriggerLinkPreferenceController(context,
|
||||
"zen_automatic_trigger_category", this, mBackend));
|
||||
prefControllers.add(new ZenModeTriggerCategoryPreferenceController(context,
|
||||
"zen_automatic_trigger_category"));
|
||||
prefControllers.add(new ZenModeTriggerUpdatePreferenceController(context,
|
||||
"zen_automatic_trigger_settings", mBackend));
|
||||
prefControllers.add(
|
||||
new ZenModeTriggerAddPreferenceController(context, "zen_add_automatic_trigger",
|
||||
this, mBackend));
|
||||
prefControllers.add(new InterruptionFilterPreferenceController(
|
||||
context, "allow_filtering", mBackend));
|
||||
prefControllers.add(new ManualDurationPreferenceController(
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2024 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.settings.notification.modes;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
import com.android.settingslib.notification.modes.ZenModesBackend;
|
||||
|
||||
class ZenModeTriggerAddPreferenceController extends AbstractZenModePreferenceController {
|
||||
|
||||
private final DashboardFragment mFragment;
|
||||
|
||||
ZenModeTriggerAddPreferenceController(@NonNull Context context,
|
||||
@NonNull String key, DashboardFragment fragment, ZenModesBackend backend) {
|
||||
super(context, key, backend);
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NonNull ZenMode zenMode) {
|
||||
return zenMode.isCustomManual();
|
||||
}
|
||||
|
||||
@Override
|
||||
void updateState(Preference preference, @NonNull ZenMode zenMode) {
|
||||
if (!isAvailable(zenMode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
preference.setOnPreferenceClickListener(unused -> {
|
||||
ZenModeScheduleChooserDialog.show(mFragment, mOnScheduleOptionListener);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
final ZenModeScheduleChooserDialog.OnScheduleOptionListener mOnScheduleOptionListener =
|
||||
conditionId -> saveMode(mode -> {
|
||||
mode.setCustomModeConditionId(mContext, conditionId);
|
||||
return mode;
|
||||
// TODO: b/342156843 - Maybe jump to the corresponding schedule editing screen?
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2024 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.settings.notification.modes;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
|
||||
/**
|
||||
* Preference controller for the "Turn on automatically" category
|
||||
*/
|
||||
class ZenModeTriggerCategoryPreferenceController extends AbstractZenModePreferenceController {
|
||||
|
||||
ZenModeTriggerCategoryPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NonNull ZenMode zenMode) {
|
||||
return !zenMode.isManualDnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference, @NonNull ZenMode zenMode) {
|
||||
// Nothing to update here (except visibility via isAvailable()).
|
||||
}
|
||||
}
|
||||
@@ -22,8 +22,6 @@ import static android.app.AutomaticZenRule.TYPE_SCHEDULE_CALENDAR;
|
||||
import static android.app.AutomaticZenRule.TYPE_SCHEDULE_TIME;
|
||||
import static android.service.notification.ZenModeConfig.tryParseScheduleConditionId;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
@@ -39,46 +37,36 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.PrimarySwitchPreference;
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
import com.android.settingslib.notification.modes.ZenModesBackend;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
/**
|
||||
* Preference controller for the link to an individual mode's configuration page.
|
||||
*/
|
||||
class ZenModeSetTriggerLinkPreferenceController extends AbstractZenModePreferenceController {
|
||||
private static final String TAG = "ZenModeSetTriggerLink";
|
||||
class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreferenceController {
|
||||
|
||||
@VisibleForTesting
|
||||
static final String AUTOMATIC_TRIGGER_KEY = "zen_automatic_trigger_settings";
|
||||
static final String ADD_TRIGGER_KEY = "zen_add_automatic_trigger";
|
||||
private static final String TAG = "ZenModeTriggerUpdate";
|
||||
|
||||
private final DashboardFragment mFragment;
|
||||
private final PackageManager mPackageManager;
|
||||
private final ConfigurationActivityHelper mConfigurationActivityHelper;
|
||||
private final ZenServiceListing mServiceListing;
|
||||
|
||||
ZenModeSetTriggerLinkPreferenceController(Context context, String key,
|
||||
DashboardFragment fragment, ZenModesBackend backend) {
|
||||
this(context, key, fragment, backend, context.getPackageManager(),
|
||||
ZenModeTriggerUpdatePreferenceController(Context context, String key,
|
||||
ZenModesBackend backend) {
|
||||
this(context, key, backend, context.getPackageManager(),
|
||||
new ConfigurationActivityHelper(context.getPackageManager()),
|
||||
new ZenServiceListing(context));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ZenModeSetTriggerLinkPreferenceController(Context context, String key,
|
||||
DashboardFragment fragment, ZenModesBackend backend, PackageManager packageManager,
|
||||
ZenModeTriggerUpdatePreferenceController(Context context, String key,
|
||||
ZenModesBackend backend, PackageManager packageManager,
|
||||
ConfigurationActivityHelper configurationActivityHelper,
|
||||
ZenServiceListing serviceListing) {
|
||||
super(context, key, backend);
|
||||
mFragment = fragment;
|
||||
mPackageManager = packageManager;
|
||||
mConfigurationActivityHelper = configurationActivityHelper;
|
||||
mServiceListing = serviceListing;
|
||||
@@ -86,7 +74,7 @@ class ZenModeSetTriggerLinkPreferenceController extends AbstractZenModePreferenc
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NonNull ZenMode zenMode) {
|
||||
return !zenMode.isManualDnd();
|
||||
return !zenMode.isCustomManual() && !zenMode.isManualDnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,39 +85,18 @@ class ZenModeSetTriggerLinkPreferenceController extends AbstractZenModePreferenc
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference, @NonNull ZenMode zenMode) {
|
||||
// This controller is expected to govern a preference category so that it controls the
|
||||
// availability of the entire preference category if the mode doesn't have a way to
|
||||
// automatically trigger (such as manual DND).
|
||||
if (zenMode.isManualDnd()) {
|
||||
void updateState(Preference preference, @NonNull ZenMode zenMode) {
|
||||
if (!isAvailable(zenMode)) {
|
||||
return;
|
||||
}
|
||||
PrimarySwitchPreference triggerPref = checkNotNull(
|
||||
((PreferenceCategory) preference).findPreference(AUTOMATIC_TRIGGER_KEY));
|
||||
Preference addTriggerPref = checkNotNull(
|
||||
((PreferenceCategory) preference).findPreference(ADD_TRIGGER_KEY));
|
||||
|
||||
boolean isAddTrigger = zenMode.isSystemOwned() && zenMode.getType() != TYPE_SCHEDULE_TIME
|
||||
&& zenMode.getType() != TYPE_SCHEDULE_CALENDAR;
|
||||
|
||||
if (isAddTrigger) {
|
||||
triggerPref.setVisible(false);
|
||||
addTriggerPref.setVisible(true);
|
||||
addTriggerPref.setOnPreferenceClickListener(unused -> {
|
||||
ZenModeScheduleChooserDialog.show(mFragment, mOnScheduleOptionListener);
|
||||
return true;
|
||||
});
|
||||
PrimarySwitchPreference triggerPref = (PrimarySwitchPreference) preference;
|
||||
triggerPref.setChecked(zenMode.getRule().isEnabled());
|
||||
triggerPref.setOnPreferenceChangeListener(mSwitchChangeListener);
|
||||
if (zenMode.isSystemOwned()) {
|
||||
setUpForSystemOwnedTrigger(triggerPref, zenMode);
|
||||
} else {
|
||||
addTriggerPref.setVisible(false);
|
||||
triggerPref.setVisible(true);
|
||||
triggerPref.setChecked(zenMode.getRule().isEnabled());
|
||||
triggerPref.setOnPreferenceChangeListener(mSwitchChangeListener);
|
||||
|
||||
if (zenMode.isSystemOwned()) {
|
||||
setUpForSystemOwnedTrigger(triggerPref, zenMode);
|
||||
} else {
|
||||
setUpForAppTrigger(triggerPref, zenMode);
|
||||
}
|
||||
setUpForAppTrigger(triggerPref, zenMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,14 +190,6 @@ class ZenModeSetTriggerLinkPreferenceController extends AbstractZenModePreferenc
|
||||
preference.setIntent(configurationIntent);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
final ZenModeScheduleChooserDialog.OnScheduleOptionListener mOnScheduleOptionListener =
|
||||
conditionId -> saveMode(mode -> {
|
||||
mode.setCustomModeConditionId(mContext, conditionId);
|
||||
return mode;
|
||||
// TODO: b/342156843 - Maybe jump to the corresponding schedule editing screen?
|
||||
});
|
||||
|
||||
private final Preference.OnPreferenceChangeListener mSwitchChangeListener = (p, newValue) -> {
|
||||
confirmChangeEnabled(p, (boolean) newValue);
|
||||
return true;
|
||||
Reference in New Issue
Block a user