Logging for the feature "Text and reading options" in Android T.
Logging for the status of five features “Font size”, “Display size”, “Bold Text”, “High contrast text”, and “Reset” in the “Display size and text” page. Bug: 222661478 Test: manual test Change-Id: I33060fca860e02ddac7716275e8682e70fbaff1f
This commit is contained in:
@@ -41,7 +41,8 @@
|
|||||||
android:icon="@drawable/ic_adaptive_font_download"
|
android:icon="@drawable/ic_adaptive_font_download"
|
||||||
android:key="text_reading_options"
|
android:key="text_reading_options"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_reading_options_title" />
|
android:title="@string/accessibility_text_reading_options_title"
|
||||||
|
settings:controller="com.android.settings.accessibility.TextReadingFragmentForA11ySettingsController"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.ColorAndMotionFragment"
|
android:fragment="com.android.settings.accessibility.ColorAndMotionFragment"
|
||||||
|
@@ -26,7 +26,8 @@
|
|||||||
android:key="text_reading_options"
|
android:key="text_reading_options"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_reading_options_title"
|
android:title="@string/accessibility_text_reading_options_title"
|
||||||
settings:keywords="text_reading_options" />
|
settings:keywords="text_reading_options"
|
||||||
|
settings:controller="com.android.settings.accessibility.TextReadingFragmentForSuwController"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard"
|
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard"
|
||||||
|
@@ -72,7 +72,8 @@
|
|||||||
android:fragment="com.android.settings.accessibility.TextReadingPreferenceFragment"
|
android:fragment="com.android.settings.accessibility.TextReadingPreferenceFragment"
|
||||||
android:key="text_reading_options"
|
android:key="text_reading_options"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/accessibility_text_reading_options_title" />
|
android:title="@string/accessibility_text_reading_options_title"
|
||||||
|
settings:controller="com.android.settings.accessibility.TextReadingFragmentForDisplaySettingsController"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
@@ -16,6 +16,16 @@
|
|||||||
|
|
||||||
package com.android.settings.accessibility;
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.BOLD_TEXT_KEY;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.DISPLAY_SIZE_KEY;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.ACCESSIBILITY_SETTINGS;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.DISPLAY_SETTINGS;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.SUW_ANYTHING_ELSE;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.SUW_VISION_SETTINGS;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.FONT_SIZE_KEY;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.RESET_KEY;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
|
|
||||||
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||||
@@ -58,4 +68,48 @@ public final class AccessibilityStatsLogUtils {
|
|||||||
.ACCESSIBILITY_PRIVACY_WARNING_STATUS_SERVICE_DISABLED,
|
.ACCESSIBILITY_PRIVACY_WARNING_STATUS_SERVICE_DISABLED,
|
||||||
durationMills);
|
durationMills);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to the key name for logging.
|
||||||
|
*
|
||||||
|
* @param prefKey the preference key
|
||||||
|
* @return the int value which maps to the key name
|
||||||
|
*/
|
||||||
|
static int convertToItemKeyName(String prefKey) {
|
||||||
|
switch (prefKey) {
|
||||||
|
case FONT_SIZE_KEY:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_FONT_SIZE;
|
||||||
|
case DISPLAY_SIZE_KEY:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_DISPLAY_SIZE;
|
||||||
|
case BOLD_TEXT_KEY:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_BOLD_TEXT;
|
||||||
|
case HIGH_TEXT_CONTRAST_KEY:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_HIGH_CONTRAST_TEXT;
|
||||||
|
case RESET_KEY:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_RESET;
|
||||||
|
default:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_UNKNOWN_ITEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts to the entry point for logging.
|
||||||
|
*
|
||||||
|
* @param entryPoint the entry point
|
||||||
|
* @return the int value which maps to the entry point
|
||||||
|
*/
|
||||||
|
static int convertToEntryPoint(int entryPoint) {
|
||||||
|
switch (entryPoint) {
|
||||||
|
case SUW_VISION_SETTINGS:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_SUW_VISION_SETTINGS;
|
||||||
|
case SUW_ANYTHING_ELSE:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_SUW_ANYTHING_ELSE;
|
||||||
|
case DISPLAY_SETTINGS:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_DISPLAY_SETTINGS;
|
||||||
|
case ACCESSIBILITY_SETTINGS:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_ACCESSIBILITY_SETTINGS;
|
||||||
|
default:
|
||||||
|
return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_UNKNOWN_ENTRY;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,9 @@ import android.graphics.fonts.FontStyle;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||||
|
|
||||||
/** PreferenceController for displaying all text in bold. */
|
/** PreferenceController for displaying all text in bold. */
|
||||||
public class FontWeightAdjustmentPreferenceController extends TogglePreferenceController implements
|
public class FontWeightAdjustmentPreferenceController extends TogglePreferenceController implements
|
||||||
@@ -29,6 +31,9 @@ public class FontWeightAdjustmentPreferenceController extends TogglePreferenceCo
|
|||||||
static final int BOLD_TEXT_ADJUSTMENT =
|
static final int BOLD_TEXT_ADJUSTMENT =
|
||||||
FontStyle.FONT_WEIGHT_BOLD - FontStyle.FONT_WEIGHT_NORMAL;
|
FontStyle.FONT_WEIGHT_BOLD - FontStyle.FONT_WEIGHT_NORMAL;
|
||||||
|
|
||||||
|
@EntryPoint
|
||||||
|
private int mEntryPoint;
|
||||||
|
|
||||||
public FontWeightAdjustmentPreferenceController(Context context, String preferenceKey) {
|
public FontWeightAdjustmentPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
}
|
}
|
||||||
@@ -46,6 +51,12 @@ public class FontWeightAdjustmentPreferenceController extends TogglePreferenceCo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
|
SettingsStatsLog.write(
|
||||||
|
SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
|
||||||
|
AccessibilityStatsLogUtils.convertToItemKeyName(getPreferenceKey()),
|
||||||
|
isChecked ? 1 : 0,
|
||||||
|
AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
|
||||||
|
|
||||||
return Settings.Secure.putInt(mContext.getContentResolver(),
|
return Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
|
Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
|
||||||
}
|
}
|
||||||
@@ -59,4 +70,13 @@ public class FontWeightAdjustmentPreferenceController extends TogglePreferenceCo
|
|||||||
public void resetState() {
|
public void resetState() {
|
||||||
setChecked(false);
|
setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point is used for logging.
|
||||||
|
*
|
||||||
|
* @param entryPoint from which settings page
|
||||||
|
*/
|
||||||
|
void setEntryPoint(@EntryPoint int entryPoint) {
|
||||||
|
mEntryPoint = entryPoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,9 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PreferenceController for displaying all text in high contrast style.
|
* PreferenceController for displaying all text in high contrast style.
|
||||||
@@ -32,6 +34,9 @@ public class HighTextContrastPreferenceController extends TogglePreferenceContro
|
|||||||
TextReadingResetController.ResetStateListener {
|
TextReadingResetController.ResetStateListener {
|
||||||
private SwitchPreference mSwitchPreference;
|
private SwitchPreference mSwitchPreference;
|
||||||
|
|
||||||
|
@EntryPoint
|
||||||
|
private int mEntryPoint;
|
||||||
|
|
||||||
public HighTextContrastPreferenceController(Context context, String preferenceKey) {
|
public HighTextContrastPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,12 @@ public class HighTextContrastPreferenceController extends TogglePreferenceContro
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
|
SettingsStatsLog.write(
|
||||||
|
SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
|
||||||
|
AccessibilityStatsLogUtils.convertToItemKeyName(getPreferenceKey()),
|
||||||
|
isChecked ? 1 : 0,
|
||||||
|
AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
|
||||||
|
|
||||||
return Settings.Secure.putInt(mContext.getContentResolver(),
|
return Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, (isChecked ? 1 : 0));
|
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, (isChecked ? 1 : 0));
|
||||||
}
|
}
|
||||||
@@ -69,4 +80,13 @@ public class HighTextContrastPreferenceController extends TogglePreferenceContro
|
|||||||
setChecked(false);
|
setChecked(false);
|
||||||
updateState(mSwitchPreference);
|
updateState(mSwitchPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point is used for logging.
|
||||||
|
*
|
||||||
|
* @param entryPoint from which settings page
|
||||||
|
*/
|
||||||
|
void setEntryPoint(@EntryPoint int entryPoint) {
|
||||||
|
mEntryPoint = entryPoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,9 @@ import android.widget.SeekBar;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||||
import com.android.settings.widget.LabeledSeekBarPreference;
|
import com.android.settings.widget.LabeledSeekBarPreference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,6 +38,9 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
private ProgressInteractionListener mInteractionListener;
|
private ProgressInteractionListener mInteractionListener;
|
||||||
private LabeledSeekBarPreference mSeekBarPreference;
|
private LabeledSeekBarPreference mSeekBarPreference;
|
||||||
|
|
||||||
|
@EntryPoint
|
||||||
|
private int mEntryPoint;
|
||||||
|
|
||||||
private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
|
private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
|
||||||
new SeekBar.OnSeekBarChangeListener() {
|
new SeekBar.OnSeekBarChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -45,6 +50,12 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
if (!mSeekByTouch && mInteractionListener != null) {
|
if (!mSeekByTouch && mInteractionListener != null) {
|
||||||
mInteractionListener.onProgressChanged();
|
mInteractionListener.onProgressChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsStatsLog.write(
|
||||||
|
SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
|
||||||
|
AccessibilityStatsLogUtils.convertToItemKeyName(getPreferenceKey()),
|
||||||
|
progress,
|
||||||
|
AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -96,6 +107,15 @@ class PreviewSizeSeekBarController extends BasePreferenceController implements
|
|||||||
mSeekBarPreference.setProgress(defaultProgress);
|
mSeekBarPreference.setProgress(defaultProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point is used for logging.
|
||||||
|
*
|
||||||
|
* @param entryPoint from which settings page
|
||||||
|
*/
|
||||||
|
void setEntryPoint(@EntryPoint int entryPoint) {
|
||||||
|
mEntryPoint = entryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for callbacks when users interact with the seek bar.
|
* Interface for callbacks when users interact with the seek bar.
|
||||||
*/
|
*/
|
||||||
|
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EXTRA_LAUNCHED_FROM;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base controller for the fragment{@link TextReadingPreferenceFragment}.
|
||||||
|
*/
|
||||||
|
public class TextReadingFragmentBaseController extends BasePreferenceController {
|
||||||
|
@EntryPoint
|
||||||
|
private int mEntryPoint;
|
||||||
|
|
||||||
|
private TextReadingFragmentBaseController(Context context, String preferenceKey) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
TextReadingFragmentBaseController(Context context, String preferenceKey,
|
||||||
|
@EntryPoint int entryPoint) {
|
||||||
|
this(context, preferenceKey);
|
||||||
|
mEntryPoint = entryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||||
|
if (getPreferenceKey().equals(preference.getKey())) {
|
||||||
|
final Bundle extras = preference.getExtras();
|
||||||
|
extras.putInt(EXTRA_LAUNCHED_FROM, mEntryPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.handlePreferenceTreeClick(preference);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.ACCESSIBILITY_SETTINGS;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for the {@link TextReadingPreferenceFragment} from the accessibility settings.
|
||||||
|
*/
|
||||||
|
public class TextReadingFragmentForA11ySettingsController extends
|
||||||
|
TextReadingFragmentBaseController {
|
||||||
|
public TextReadingFragmentForA11ySettingsController(Context context, String preferenceKey) {
|
||||||
|
// Pass the fixed entry point to the parent controller for logging.
|
||||||
|
super(context, preferenceKey, ACCESSIBILITY_SETTINGS);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.DISPLAY_SETTINGS;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for the {@link TextReadingPreferenceFragment} from the display settings.
|
||||||
|
*/
|
||||||
|
public class TextReadingFragmentForDisplaySettingsController extends
|
||||||
|
TextReadingFragmentBaseController {
|
||||||
|
public TextReadingFragmentForDisplaySettingsController(Context context, String preferenceKey) {
|
||||||
|
// Pass the fixed entry point to the parent controller for logging.
|
||||||
|
super(context, preferenceKey, DISPLAY_SETTINGS);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.SUW_VISION_SETTINGS;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for the {@link TextReadingPreferenceFragment} during the SetupWizard.
|
||||||
|
*/
|
||||||
|
public class TextReadingFragmentForSuwController extends TextReadingFragmentBaseController {
|
||||||
|
public TextReadingFragmentForSuwController(Context context, String preferenceKey) {
|
||||||
|
// Pass the fixed entry point to the parent controller for logging.
|
||||||
|
super(context, preferenceKey, SUW_VISION_SETTINGS);
|
||||||
|
}
|
||||||
|
}
|
@@ -22,9 +22,11 @@ import android.app.Dialog;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.IntDef;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -36,8 +38,11 @@ import com.android.settingslib.search.SearchIndexable;
|
|||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,15 +51,40 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||||
public class TextReadingPreferenceFragment extends DashboardFragment {
|
public class TextReadingPreferenceFragment extends DashboardFragment {
|
||||||
|
public static final String EXTRA_LAUNCHED_FROM = "launched_from";
|
||||||
private static final String TAG = "TextReadingPreferenceFragment";
|
private static final String TAG = "TextReadingPreferenceFragment";
|
||||||
private static final String FONT_SIZE_KEY = "font_size";
|
private static final String CATEGORY_FOR_ANYTHING_ELSE =
|
||||||
private static final String DISPLAY_SIZE_KEY = "display_size";
|
"com.android.settings.suggested.category.DISPLAY_SETTINGS";
|
||||||
|
static final String FONT_SIZE_KEY = "font_size";
|
||||||
|
static final String DISPLAY_SIZE_KEY = "display_size";
|
||||||
|
static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
|
||||||
|
static final String HIGH_TEXT_CONTRAST_KEY = "toggle_high_text_contrast_preference";
|
||||||
|
static final String RESET_KEY = "reset";
|
||||||
private static final String PREVIEW_KEY = "preview";
|
private static final String PREVIEW_KEY = "preview";
|
||||||
private static final String RESET_KEY = "reset";
|
|
||||||
private static final String BOLD_TEXT_KEY = "toggle_force_bold_text";
|
|
||||||
private static final String HIGHT_TEXT_CONTRAST_KEY = "toggle_high_text_contrast_preference";
|
|
||||||
private static final String NEED_RESET_SETTINGS = "need_reset_settings";
|
private static final String NEED_RESET_SETTINGS = "need_reset_settings";
|
||||||
private FontWeightAdjustmentPreferenceController mFontWeightAdjustmentController;
|
private FontWeightAdjustmentPreferenceController mFontWeightAdjustmentController;
|
||||||
|
private int mEntryPoint = EntryPoint.UNKNOWN_ENTRY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point which launches the {@link TextReadingPreferenceFragment}.
|
||||||
|
*
|
||||||
|
* <p>This should only be used for logging.
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef({
|
||||||
|
EntryPoint.UNKNOWN_ENTRY,
|
||||||
|
EntryPoint.SUW_VISION_SETTINGS,
|
||||||
|
EntryPoint.SUW_ANYTHING_ELSE,
|
||||||
|
EntryPoint.DISPLAY_SETTINGS,
|
||||||
|
EntryPoint.ACCESSIBILITY_SETTINGS,
|
||||||
|
})
|
||||||
|
@interface EntryPoint {
|
||||||
|
int UNKNOWN_ENTRY = 0;
|
||||||
|
int SUW_VISION_SETTINGS = 1;
|
||||||
|
int SUW_ANYTHING_ELSE = 2;
|
||||||
|
int DISPLAY_SETTINGS = 3;
|
||||||
|
int ACCESSIBILITY_SETTINGS = 4;
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
List<ResetStateListener> mResetStateListeners;
|
List<ResetStateListener> mResetStateListeners;
|
||||||
@@ -91,6 +121,8 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
|
updateEntryPoint();
|
||||||
|
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
final FontSizeData fontSizeData = new FontSizeData(context);
|
final FontSizeData fontSizeData = new FontSizeData(context);
|
||||||
final DisplaySizeData displaySizeData = createDisplaySizeData(context);
|
final DisplaySizeData displaySizeData = createDisplaySizeData(context);
|
||||||
@@ -102,24 +134,29 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
|
|||||||
final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController(
|
final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController(
|
||||||
context, FONT_SIZE_KEY, fontSizeData);
|
context, FONT_SIZE_KEY, fontSizeData);
|
||||||
fontSizeController.setInteractionListener(previewController);
|
fontSizeController.setInteractionListener(previewController);
|
||||||
|
fontSizeController.setEntryPoint(mEntryPoint);
|
||||||
controllers.add(fontSizeController);
|
controllers.add(fontSizeController);
|
||||||
|
|
||||||
final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController(
|
final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController(
|
||||||
context, DISPLAY_SIZE_KEY, displaySizeData);
|
context, DISPLAY_SIZE_KEY, displaySizeData);
|
||||||
displaySizeController.setInteractionListener(previewController);
|
displaySizeController.setInteractionListener(previewController);
|
||||||
|
displaySizeController.setEntryPoint(mEntryPoint);
|
||||||
controllers.add(displaySizeController);
|
controllers.add(displaySizeController);
|
||||||
|
|
||||||
mFontWeightAdjustmentController =
|
mFontWeightAdjustmentController =
|
||||||
new FontWeightAdjustmentPreferenceController(context, BOLD_TEXT_KEY);
|
new FontWeightAdjustmentPreferenceController(context, BOLD_TEXT_KEY);
|
||||||
|
mFontWeightAdjustmentController.setEntryPoint(mEntryPoint);
|
||||||
controllers.add(mFontWeightAdjustmentController);
|
controllers.add(mFontWeightAdjustmentController);
|
||||||
|
|
||||||
final HighTextContrastPreferenceController highTextContrastController =
|
final HighTextContrastPreferenceController highTextContrastController =
|
||||||
new HighTextContrastPreferenceController(context, HIGHT_TEXT_CONTRAST_KEY);
|
new HighTextContrastPreferenceController(context, HIGH_TEXT_CONTRAST_KEY);
|
||||||
|
highTextContrastController.setEntryPoint(mEntryPoint);
|
||||||
controllers.add(highTextContrastController);
|
controllers.add(highTextContrastController);
|
||||||
|
|
||||||
final TextReadingResetController resetController =
|
final TextReadingResetController resetController =
|
||||||
new TextReadingResetController(context, RESET_KEY,
|
new TextReadingResetController(context, RESET_KEY,
|
||||||
v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
|
v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
|
||||||
|
resetController.setEntryPoint(mEntryPoint);
|
||||||
controllers.add(resetController);
|
controllers.add(resetController);
|
||||||
|
|
||||||
return controllers;
|
return controllers;
|
||||||
@@ -162,6 +199,24 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
|
|||||||
return new DisplaySizeData(context);
|
return new DisplaySizeData(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateEntryPoint() {
|
||||||
|
final Bundle bundle = getArguments();
|
||||||
|
if (bundle != null && bundle.containsKey(EXTRA_LAUNCHED_FROM)) {
|
||||||
|
mEntryPoint = bundle.getInt(EXTRA_LAUNCHED_FROM, EntryPoint.UNKNOWN_ENTRY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Intent intent = getIntent();
|
||||||
|
if (intent == null) {
|
||||||
|
mEntryPoint = EntryPoint.UNKNOWN_ENTRY;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Set<String> categories = intent.getCategories();
|
||||||
|
mEntryPoint = categories != null && categories.contains(CATEGORY_FOR_ANYTHING_ELSE)
|
||||||
|
? EntryPoint.SUW_ANYTHING_ELSE : EntryPoint.UNKNOWN_ENTRY;
|
||||||
|
}
|
||||||
|
|
||||||
private void onPositiveButtonClicked(DialogInterface dialog, int which) {
|
private void onPositiveButtonClicked(DialogInterface dialog, int which) {
|
||||||
// To avoid showing the dialog again, probably the onDetach() of SettingsDialogFragment
|
// To avoid showing the dialog again, probably the onDetach() of SettingsDialogFragment
|
||||||
// was interrupted by unexpectedly recreating the activity.
|
// was interrupted by unexpectedly recreating the activity.
|
||||||
|
@@ -23,7 +23,9 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,6 +34,9 @@ import com.android.settingslib.widget.LayoutPreference;
|
|||||||
class TextReadingResetController extends BasePreferenceController {
|
class TextReadingResetController extends BasePreferenceController {
|
||||||
private final View.OnClickListener mOnResetClickListener;
|
private final View.OnClickListener mOnResetClickListener;
|
||||||
|
|
||||||
|
@EntryPoint
|
||||||
|
private int mEntryPoint;
|
||||||
|
|
||||||
TextReadingResetController(Context context, String preferenceKey,
|
TextReadingResetController(Context context, String preferenceKey,
|
||||||
@Nullable View.OnClickListener listener) {
|
@Nullable View.OnClickListener listener) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
@@ -52,10 +57,25 @@ class TextReadingResetController extends BasePreferenceController {
|
|||||||
view.setOnClickListener(v -> {
|
view.setOnClickListener(v -> {
|
||||||
if (mOnResetClickListener != null) {
|
if (mOnResetClickListener != null) {
|
||||||
mOnResetClickListener.onClick(v);
|
mOnResetClickListener.onClick(v);
|
||||||
|
|
||||||
|
SettingsStatsLog.write(
|
||||||
|
SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
|
||||||
|
AccessibilityStatsLogUtils.convertToItemKeyName(getPreferenceKey()),
|
||||||
|
/* reset */ -1,
|
||||||
|
AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry point is used for logging.
|
||||||
|
*
|
||||||
|
* @param entryPoint from which settings page
|
||||||
|
*/
|
||||||
|
void setEntryPoint(@EntryPoint int entryPoint) {
|
||||||
|
mEntryPoint = entryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for resetting to default state.
|
* Interface for resetting to default state.
|
||||||
*/
|
*/
|
||||||
|
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.accessibility;
|
||||||
|
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EXTRA_LAUNCHED_FROM;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.ACCESSIBILITY_SETTINGS;
|
||||||
|
import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.UNKNOWN_ENTRY;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link TextReadingFragmentBaseController}.
|
||||||
|
*/
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
public class TextReadingFragmentBaseControllerTest {
|
||||||
|
private static final String FRAGMENT_PREF_KEY = "FRAGMENT_PREF_KEY";
|
||||||
|
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handlePreferenceClick_getExtraWithA11ySettingsEntryPoint() {
|
||||||
|
final Preference a11ySettingsPreference = new Preference(mContext);
|
||||||
|
a11ySettingsPreference.setKey(FRAGMENT_PREF_KEY);
|
||||||
|
final TextReadingFragmentBaseController mA11ySettingsFragmentController =
|
||||||
|
new TextReadingFragmentBaseController(mContext, FRAGMENT_PREF_KEY,
|
||||||
|
ACCESSIBILITY_SETTINGS);
|
||||||
|
|
||||||
|
mA11ySettingsFragmentController.handlePreferenceTreeClick(a11ySettingsPreference);
|
||||||
|
|
||||||
|
assertThat(a11ySettingsPreference.getExtras().getInt(EXTRA_LAUNCHED_FROM,
|
||||||
|
UNKNOWN_ENTRY)).isEqualTo(ACCESSIBILITY_SETTINGS);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user