Loading src/com/android/settings/notification/modes/ZenModesRuleSettingsBase.java 0 → 100644 +89 −0 Original line number Diff line number Diff line /* * 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.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.android.settings.R; /** * Base class for Settings pages used to configure individual modes. */ abstract class ZenModesRuleSettingsBase extends ZenModesSettingsBase { static final String TAG = "ZenModesRuleSettings"; static final String MODE_ID = "MODE_ID"; @Nullable protected ZenMode mZenMode; @Override public void onAttach(@NonNull Context context) { super.onAttach(context); // TODO: b/322373473 - Update if modes page ends up using a different method of passing id Bundle bundle = getArguments(); if (bundle != null && bundle.containsKey(MODE_ID)) { String id = bundle.getString(MODE_ID); if (!reloadMode(id)) { Log.d(TAG, "Mode id " + id + " not found"); toastAndFinish(); } } else { Log.d(TAG, "Mode id required to set mode config settings"); toastAndFinish(); } } /** * Refresh stored ZenMode data. * @param id the mode ID * @return whether we successfully got mode data from the backend. */ private boolean reloadMode(String id) { mZenMode = mBackend.getMode(id); return mZenMode != null; } /** * Refresh ZenMode data any time the system's zen mode state changes (either the zen mode value * itself, or the config). */ @Override protected void updateZenModeState() { if (mZenMode == null) { // This shouldn't happen, but guard against it in case toastAndFinish(); return; } String id = mZenMode.getId(); if (!reloadMode(id)) { Log.d(TAG, "Mode id=" + id + " not found"); toastAndFinish(); } } private void toastAndFinish() { Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT) .show(); this.finish(); } } src/com/android/settings/notification/modes/ZenModesSettingsBase.java 0 → 100644 +113 −0 Original line number Diff line number Diff line /* * 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.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.UserManager; import android.provider.Settings.Global; import android.util.Log; import com.android.settings.dashboard.RestrictedDashboardFragment; /** * Base class for all Settings pages controlling Modes behavior. */ abstract class ZenModesSettingsBase extends RestrictedDashboardFragment { protected static final String TAG = "ZenModesSettings"; protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final Handler mHandler = new Handler(); private final SettingsObserver mSettingsObserver = new SettingsObserver(); protected Context mContext; protected ZenModesBackend mBackend; // Individual pages must implement this method based on what they should do when // the device's zen mode state changes. protected abstract void updateZenModeState(); ZenModesSettingsBase() { super(UserManager.DISALLOW_ADJUST_VOLUME); } @Override protected String getLogTag() { return TAG; } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); mContext = context; mBackend = ZenModesBackend.getInstance(context); } @Override public void onStart() { super.onStart(); updateZenModeState(); mSettingsObserver.register(); if (isUiRestricted()) { if (isUiRestrictedByOnlyAdmin()) { getPreferenceScreen().removeAll(); return; } else { finish(); } } } @Override public void onStop() { super.onStop(); mSettingsObserver.unregister(); } private final class SettingsObserver extends ContentObserver { private static final Uri ZEN_MODE_URI = Global.getUriFor(Global.ZEN_MODE); private static final Uri ZEN_MODE_CONFIG_ETAG_URI = Global.getUriFor( Global.ZEN_MODE_CONFIG_ETAG); private SettingsObserver() { super(mHandler); } public void register() { getContentResolver().registerContentObserver(ZEN_MODE_URI, false, this); getContentResolver().registerContentObserver(ZEN_MODE_CONFIG_ETAG_URI, false, this); } public void unregister() { getContentResolver().unregisterContentObserver(this); } @Override public void onChange(boolean selfChange, @Nullable Uri uri) { super.onChange(selfChange, uri); // Shouldn't have any other URIs trigger this method, but check just in case. if (ZEN_MODE_URI.equals(uri) || ZEN_MODE_CONFIG_ETAG_URI.equals(uri)) { updateZenModeState(); } } } } Loading
src/com/android/settings/notification/modes/ZenModesRuleSettingsBase.java 0 → 100644 +89 −0 Original line number Diff line number Diff line /* * 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.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.android.settings.R; /** * Base class for Settings pages used to configure individual modes. */ abstract class ZenModesRuleSettingsBase extends ZenModesSettingsBase { static final String TAG = "ZenModesRuleSettings"; static final String MODE_ID = "MODE_ID"; @Nullable protected ZenMode mZenMode; @Override public void onAttach(@NonNull Context context) { super.onAttach(context); // TODO: b/322373473 - Update if modes page ends up using a different method of passing id Bundle bundle = getArguments(); if (bundle != null && bundle.containsKey(MODE_ID)) { String id = bundle.getString(MODE_ID); if (!reloadMode(id)) { Log.d(TAG, "Mode id " + id + " not found"); toastAndFinish(); } } else { Log.d(TAG, "Mode id required to set mode config settings"); toastAndFinish(); } } /** * Refresh stored ZenMode data. * @param id the mode ID * @return whether we successfully got mode data from the backend. */ private boolean reloadMode(String id) { mZenMode = mBackend.getMode(id); return mZenMode != null; } /** * Refresh ZenMode data any time the system's zen mode state changes (either the zen mode value * itself, or the config). */ @Override protected void updateZenModeState() { if (mZenMode == null) { // This shouldn't happen, but guard against it in case toastAndFinish(); return; } String id = mZenMode.getId(); if (!reloadMode(id)) { Log.d(TAG, "Mode id=" + id + " not found"); toastAndFinish(); } } private void toastAndFinish() { Toast.makeText(mContext, R.string.zen_mode_rule_not_found_text, Toast.LENGTH_SHORT) .show(); this.finish(); } }
src/com/android/settings/notification/modes/ZenModesSettingsBase.java 0 → 100644 +113 −0 Original line number Diff line number Diff line /* * 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.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.UserManager; import android.provider.Settings.Global; import android.util.Log; import com.android.settings.dashboard.RestrictedDashboardFragment; /** * Base class for all Settings pages controlling Modes behavior. */ abstract class ZenModesSettingsBase extends RestrictedDashboardFragment { protected static final String TAG = "ZenModesSettings"; protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final Handler mHandler = new Handler(); private final SettingsObserver mSettingsObserver = new SettingsObserver(); protected Context mContext; protected ZenModesBackend mBackend; // Individual pages must implement this method based on what they should do when // the device's zen mode state changes. protected abstract void updateZenModeState(); ZenModesSettingsBase() { super(UserManager.DISALLOW_ADJUST_VOLUME); } @Override protected String getLogTag() { return TAG; } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); mContext = context; mBackend = ZenModesBackend.getInstance(context); } @Override public void onStart() { super.onStart(); updateZenModeState(); mSettingsObserver.register(); if (isUiRestricted()) { if (isUiRestrictedByOnlyAdmin()) { getPreferenceScreen().removeAll(); return; } else { finish(); } } } @Override public void onStop() { super.onStop(); mSettingsObserver.unregister(); } private final class SettingsObserver extends ContentObserver { private static final Uri ZEN_MODE_URI = Global.getUriFor(Global.ZEN_MODE); private static final Uri ZEN_MODE_CONFIG_ETAG_URI = Global.getUriFor( Global.ZEN_MODE_CONFIG_ETAG); private SettingsObserver() { super(mHandler); } public void register() { getContentResolver().registerContentObserver(ZEN_MODE_URI, false, this); getContentResolver().registerContentObserver(ZEN_MODE_CONFIG_ETAG_URI, false, this); } public void unregister() { getContentResolver().unregisterContentObserver(this); } @Override public void onChange(boolean selfChange, @Nullable Uri uri) { super.onChange(selfChange, uri); // Shouldn't have any other URIs trigger this method, but check just in case. if (ZEN_MODE_URI.equals(uri) || ZEN_MODE_CONFIG_ETAG_URI.equals(uri)) { updateZenModeState(); } } } }