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

Commit 2cb4ddd3 authored by Menghan Li's avatar Menghan Li
Browse files

feat(A11yHaTS): Add entrypoint for force invert

Visibility is controlled by the aconfig flag and
SurveyFeatureProvider#isSurveyAvailable, and these can be changed by
force invert features.

Bug: 380346799
Test: Manual testing on Pixel and non-Pixel devices
Test: atest BaseSupportFragmentTest
Flag: com.android.server.accessibility.enable_low_vision_hats
Change-Id: Ic7ea58141d212aa09b9fa29dc8267b32d20100e9
parent 5ec220f5
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -17,11 +17,14 @@
package com.android.settings.accessibility;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;

import com.android.settings.accessibility.actionbar.FeedbackMenuController;
import com.android.settings.accessibility.actionbar.SurveyMenuController;
import com.android.settings.dashboard.DashboardFragment;

/**
@@ -35,10 +38,19 @@ public abstract class BaseSupportFragment extends DashboardFragment {
    @Override
    public void onCreate(@NonNull Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int feedbackCategory = getFeedbackCategory();
        if (feedbackCategory != SettingsEnums.PAGE_UNKNOWN) {
            FeedbackMenuController.init(this, getFeedbackCategory());
        }

        String surveyKey = getSurveyKey();
        if (!TextUtils.isEmpty(surveyKey)) {
            final Context context = getActivity();
            if (context != null) {
                SurveyMenuController.init(this, context, surveyKey);
            }
        }
    }

    /**
@@ -68,4 +80,8 @@ public abstract class BaseSupportFragment extends DashboardFragment {
    protected int getFeedbackCategory() {
        return getMetricsCategory();
    }

    protected String getSurveyKey() {
        return "";
    }
}
+14 −0
Original line number Diff line number Diff line
@@ -15,11 +15,13 @@
package com.android.settings.display.darkmode;

import android.app.Dialog;
import android.app.UiModeManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.os.PowerManager;

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

@@ -41,6 +43,7 @@ public class DarkModeSettingsFragment extends BaseSupportFragment {
    private static final String TAG = "DarkModeSettingsFrag";
    private static final String DARK_THEME_END_TIME = "dark_theme_end_time";
    private static final String DARK_THEME_START_TIME = "dark_theme_start_time";
    public static final String FORCE_INVERT_SURVEY_KEY = "A11yForceInvertUser";
    private DarkModeObserver mContentObserver;
    private DarkModeCustomPreferenceController mCustomStartController;
    private DarkModeCustomPreferenceController mCustomEndController;
@@ -133,6 +136,17 @@ public class DarkModeSettingsFragment extends BaseSupportFragment {
        return SettingsEnums.DARK_UI_SETTINGS;
    }

    @Override
    @NonNull
    public String getSurveyKey() {
        final UiModeManager uiModeManager = getContext().getSystemService(UiModeManager.class);
        if (uiModeManager != null
                && uiModeManager.getForceInvertState() == UiModeManager.FORCE_INVERT_TYPE_DARK) {
            return FORCE_INVERT_SURVEY_KEY;
        }
        return super.getSurveyKey();
    }

    @Override
    public int getDialogMetricsCategory(int dialogId) {
        switch (dialogId) {
+27 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.rules.ActivityScenarioRule;

import com.android.settings.accessibility.actionbar.FeedbackMenuController;
import com.android.settings.accessibility.actionbar.SurveyMenuController;
import com.android.settingslib.core.lifecycle.Lifecycle;

import org.junit.Before;
@@ -57,6 +58,8 @@ public class BaseSupportFragmentTest {
    public ActivityScenarioRule<EmptyFragmentActivity> mActivityScenario =
            new ActivityScenarioRule<>(EmptyFragmentActivity.class);

    private static final String PLACEHOLDER_SURVEY_KEY = "survey_key";

    private final Context mContext = ApplicationProvider.getApplicationContext();
    private FragmentActivity mActivity;
    private BaseSupportFragment mHost;
@@ -123,4 +126,28 @@ public class BaseSupportFragmentTest {

        verify(mLifecycle).addObserver(any(FeedbackMenuController.class));
    }

    @Test
    public void initSurveyMenuController_surveyKeyNull_shouldNotAttachToLifecycle() {
        when(mHost.getSurveyKey()).thenReturn(/* value= */ null);
        mHost.onCreate(/* savedInstanceState= */ null);

        verify(mLifecycle, never()).addObserver(any(SurveyMenuController.class));
    }

    @Test
    public void initSurveyMenuController_surveyKeyEmpty_shouldNotAttachToLifecycle() {
        when(mHost.getSurveyKey()).thenReturn(/* value= */ "");
        mHost.onCreate(/* savedInstanceState= */ null);

        verify(mLifecycle, never()).addObserver(any(SurveyMenuController.class));
    }

    @Test
    public void initSurveyMenuController_surveyKeyNotEmpty_shouldNotAttachToLifecycle() {
        when(mHost.getSurveyKey()).thenReturn(PLACEHOLDER_SURVEY_KEY);
        mHost.onCreate(/* savedInstanceState= */ null);

        verify(mLifecycle).addObserver(any(SurveyMenuController.class));
    }
}