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

Commit e657ae66 authored by dakinola's avatar dakinola Committed by Daniel Akinola
Browse files

Add Shade display position dev option

Adding new developer option which update the policy for shade location when connected to an external display

Bug: 379278693
Test: manual testing
Flag: com.android.systemui.shade_window_goes_around
Change-Id: I1d9886f76983972dc12073326a89d928af7be475
parent 7bd52367
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -569,6 +569,13 @@
            android:entries="@array/overlay_display_devices_entries"
            android:entryValues="@array/overlay_display_devices_values" />

        <ListPreference
            android:entries="@array/shade_display_awareness_entries"
            android:entryValues="@array/shade_display_awareness_values"
            android:key="shade_display_awareness"
            android:summary="@string/summary_placeholder"
            android:title="@string/shade_display_awareness_title" />

        <com.android.settings.display.DensityPreference
            android:key="density"
            android:title="@string/developer_smallest_width" />
+1 −0
Original line number Diff line number Diff line
@@ -837,6 +837,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
        controllers.add(new ForceEnableNotesRolePreferenceController(context));
        controllers.add(new GrammaticalGenderPreferenceController(context));
        controllers.add(new SensitiveContentProtectionPreferenceController(context));
        controllers.add(new ShadeDisplayAwarenessPreferenceController(context));

        return controllers;
    }
+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.development;

import android.content.Context;
import android.provider.Settings;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.preference.ListPreference;
import androidx.preference.Preference;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.R;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;

public class ShadeDisplayAwarenessPreferenceController extends DeveloperOptionsPreferenceController
        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin,
        RebootConfirmationDialogHost {

    private static final int SHADE_DISPLAY_AWARENESS_DEFAULT = 0;
    private static final String SHADE_DISPLAY_AWARENESS_KEY = "shade_display_awareness";

    private final String[] mListValues;
    private final String[] mListSummaries;

    public ShadeDisplayAwarenessPreferenceController(Context context) {
        super(context);

        mListValues = mContext.getResources().getStringArray(
                R.array.shade_display_awareness_values);
        mListSummaries = mContext.getResources().getStringArray(
                R.array.shade_display_awareness_summaries);
    }

    @Override
    public String getPreferenceKey() {
        return SHADE_DISPLAY_AWARENESS_KEY;
    }

    @Override
    public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
        Settings.Global.putString(mContext.getContentResolver(),
                Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS, newValue.toString());
        updateShadeDisplayAwareness((ListPreference) mPreference);
        return true;
    }

    @Override
    public void updateState(Preference preference) {
        updateShadeDisplayAwareness((ListPreference) mPreference);
    }

    private void updateShadeDisplayAwareness(ListPreference preference) {
        String currentValue = Settings.Global.getString(mContext.getContentResolver(),
                Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS);
        int index = SHADE_DISPLAY_AWARENESS_DEFAULT; // Defaults to value is device-display (0)
        for (int i = 0; i < mListValues.length; i++) {
            if (TextUtils.equals(currentValue, mListValues[i])) {
                index = i;
                break;
            }
        }
        preference.setValue(mListValues[index]);
        preference.setSummary(mListSummaries[index]);
    }

    @Override
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        Settings.Global.putString(mContext.getContentResolver(),
                Settings.Global.DEVELOPMENT_SHADE_DISPLAY_AWARENESS,
                mListValues[SHADE_DISPLAY_AWARENESS_DEFAULT]);
    }
}