package com.cherish.settings.fragments; import com.android.internal.logging.nano.MetricsProto; import android.app.Activity; import android.content.Context; import android.content.ContentResolver; import android.content.res.Resources; import android.os.Bundle; import android.os.SystemProperties; import android.os.UserHandle; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceCategory; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.SwitchPreference; import android.provider.Settings; import com.android.settings.R; import java.util.Arrays; import java.util.HashSet; import com.cherish.settings.preferences.SystemSettingMasterSwitchPreference; import com.android.settings.SettingsPreferenceFragment; public class RecentsSettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener { private static final String PREF_STOCK_RECENTS_CATEGORY = "stock_recents_category"; private static final String PREF_ALTERNATIVE_RECENTS_CATEGORY = "alternative_recents_category"; private static final String PREF_SWIPE_UP_ENABLED = "swipe_up_enabled_warning"; private PreferenceCategory mStockRecentsCategory; private PreferenceCategory mAlternativeRecentsCategory; private Context mContext; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.cherish_settings_recents); ContentResolver resolver = getActivity().getContentResolver(); mStockRecentsCategory = (PreferenceCategory) findPreference(PREF_STOCK_RECENTS_CATEGORY); mAlternativeRecentsCategory = (PreferenceCategory) findPreference(PREF_ALTERNATIVE_RECENTS_CATEGORY); // Alternative recents en-/disabling Preference.OnPreferenceChangeListener alternativeRecentsChangeListener = new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { updateDependencies(preference, (Boolean) newValue); return true; } }; for (int i = 0; i < mAlternativeRecentsCategory.getPreferenceCount(); i++) { Preference preference = mAlternativeRecentsCategory.getPreference(i); if (preference instanceof SystemSettingMasterSwitchPreference) { preference.setOnPreferenceChangeListener(alternativeRecentsChangeListener); } } updateDependencies(); // Warning for alternative recents when gesture navigation is enabled, // which directly controls quickstep (launcher) recents. final int navigationMode = getActivity().getResources() .getInteger(com.android.internal.R.integer.config_navBarInteractionMode); // config_navBarInteractionMode: // 0: 3 button mode (supports slim recents) // 1: 2 button mode (currently does not support alternative recents) // 2: gesture only (currently does not support alternative recents) if (navigationMode != 0) { for (int i = 0; i < mAlternativeRecentsCategory.getPreferenceCount(); i++) { Preference preference = mAlternativeRecentsCategory.getPreference(i); if (PREF_SWIPE_UP_ENABLED.equals(preference.getKey())) { // We want to have that one enabled continue; } preference.setEnabled(false); } } else { mAlternativeRecentsCategory.removePreference(findPreference(PREF_SWIPE_UP_ENABLED)); } } private void updateDependencies() { updateDependencies(null, null); } private void updateDependencies(Preference updatedPreference, Boolean newValue) { // Disable stock recents category if alternative enabled boolean alternativeRecentsEnabled = newValue != null && newValue; if (!alternativeRecentsEnabled) { for (int i = 0; i < mAlternativeRecentsCategory.getPreferenceCount(); i++) { Preference preference = mAlternativeRecentsCategory.getPreference(i); if (preference == updatedPreference) { // Already used newValue continue; } if (preference instanceof SystemSettingMasterSwitchPreference && ((SystemSettingMasterSwitchPreference) preference).isChecked()) { alternativeRecentsEnabled = true; break; } } } if (mStockRecentsCategory != null) { mStockRecentsCategory.setEnabled(!alternativeRecentsEnabled); } } @Override public boolean onPreferenceChange(Preference preference, Object objValue) { return false; } @Override public int getMetricsCategory() { return MetricsProto.MetricsEvent.CHERISH_SETTINGS; } }