summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author chihtinglo <chihtinglo@google.com> 2022-12-12 16:51:36 +0800
committer chihtinglo <chihtinglo@google.com> 2023-01-06 08:33:42 +0800
commit28cc351e46f2bbb067e2733cffa706152b4e13f8 (patch)
tree25a10bf27c86d19b951d9ac9105860813d440690
parent9ba7766687191a69a975bef52c4a7d8f60d16913 (diff)
Re-inflating view in onConfigurationChange
We change the behavior of adapting to theme changes to re-inflate the view and hook the method "onConfigurationChange" for the setting panel to the controller. All resources are configurated in resource files. To achieve theme change for setting panel: 1. We hide/remove the panel from screen if it is visible. 2. We inflate the view again. The contents in "inflateView" are extracted from the origin constructor. 3. We show the panel if it is opened before the theme changes. We only move resource configurations to resource files and the contents of resources remain the same. Bug: 257272333 Test: manual - attach screenshots with the bug Change-Id: I6fe7b800a9fabc25a192749896480446347f99d7
-rw-r--r--packages/SystemUI/res/layout/window_magnification_settings_view.xml30
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java176
3 files changed, 102 insertions, 105 deletions
diff --git a/packages/SystemUI/res/layout/window_magnification_settings_view.xml b/packages/SystemUI/res/layout/window_magnification_settings_view.xml
index 6d8847cce644..a3c055419541 100644
--- a/packages/SystemUI/res/layout/window_magnification_settings_view.xml
+++ b/packages/SystemUI/res/layout/window_magnification_settings_view.xml
@@ -37,6 +37,7 @@
<Button
android:id="@+id/magnifier_edit_button"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/accessibility_magnifier_edit"
@@ -57,21 +58,36 @@
android:layout_height="56dp"
android:scaleType="center"
android:layout_weight="1"
- android:layout_marginStart="12dp"/>
+ android:layout_marginStart="12dp"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
+ android:padding="@dimen/magnification_switch_button_padding"
+ android:src="@drawable/ic_magnification_menu_small"
+ android:tint="@color/accessibility_magnifier_icon_color"
+ android:tintMode="src_atop" />
<ImageButton
android:id="@+id/magnifier_medium_button"
android:layout_width="0dp"
android:layout_height="56dp"
android:scaleType="center"
- android:layout_weight="1"/>
+ android:layout_weight="1"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
+ android:padding="@dimen/magnification_switch_button_padding"
+ android:src="@drawable/ic_magnification_menu_medium"
+ android:tint="@color/accessibility_magnifier_icon_color"
+ android:tintMode="src_atop" />
<ImageButton
android:id="@+id/magnifier_large_button"
android:layout_width="0dp"
android:layout_height="56dp"
android:scaleType="center"
- android:layout_weight="1"/>
+ android:layout_weight="1"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
+ android:padding="@dimen/magnification_switch_button_padding"
+ android:src="@drawable/ic_magnification_menu_large"
+ android:tint="@color/accessibility_magnifier_icon_color"
+ android:tintMode="src_atop" />
<ImageButton
android:id="@+id/magnifier_full_button"
@@ -79,7 +95,12 @@
android:layout_height="56dp"
android:scaleType="center"
android:layout_weight="1"
- android:layout_marginEnd="12dp"/>
+ android:layout_marginEnd="12dp"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
+ android:padding="@dimen/magnification_switch_button_padding"
+ android:src="@drawable/ic_open_in_new_fullscreen"
+ android:tint="@color/accessibility_magnifier_icon_color"
+ android:tintMode="src_atop" />
</LinearLayout>
<LinearLayout
@@ -141,6 +162,7 @@
<Button
android:id="@+id/magnifier_close_button"
+ android:background="@drawable/accessibility_magnification_setting_view_btn_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/accessibility_magnification_close"
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index ec15d1a0c7b6..a3dbaad72396 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -440,6 +440,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
final int configDiff = newConfig.diff(mConfiguration);
mConfiguration.setTo(newConfig);
onConfigurationChanged(configDiff);
+ mWindowMagnificationSettings.onConfigurationChanged(configDiff);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
index 069c0f656d7b..9f857a8fe3d8 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
@@ -27,8 +27,6 @@ import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.graphics.Insets;
import android.graphics.PixelFormat;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.UserHandle;
@@ -105,14 +103,14 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
/** Denotes the Magnification size type. */
public @interface MagnificationSize {
int NONE = 0;
- int SMALL = 1;
+ int SMALL = 1;
int MEDIUM = 2;
int LARGE = 3;
}
@VisibleForTesting
WindowMagnificationSettings(Context context, WindowMagnificationSettingsCallback callback,
- SfVsyncFrameCallbackProvider sfVsyncFrameProvider) {
+ SfVsyncFrameCallbackProvider sfVsyncFrameProvider) {
mContext = context;
mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
mWindowManager = mContext.getSystemService(WindowManager.class);
@@ -123,66 +121,10 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 0,
UserHandle.USER_CURRENT) == 1;
- float scale = Settings.Secure.getFloatForUser(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 0,
- UserHandle.USER_CURRENT);
-
- mSettingView = (LinearLayout) View.inflate(context,
- R.layout.window_magnification_settings_view, null);
-
- mSettingView.setClickable(true);
- mSettingView.setFocusable(true);
- mSettingView.setOnTouchListener(this::onTouch);
-
- mPanelView = mSettingView.findViewById(R.id.magnifier_panel_view);
- mSmallButton = mSettingView.findViewById(R.id.magnifier_small_button);
- mMediumButton = mSettingView.findViewById(R.id.magnifier_medium_button);
- mLargeButton = mSettingView.findViewById(R.id.magnifier_large_button);
- mCloseButton = mSettingView.findViewById(R.id.magnifier_close_button);
- mEditButton = mSettingView.findViewById(R.id.magnifier_edit_button);
- mChangeModeButton = mSettingView.findViewById(R.id.magnifier_full_button);
-
- mZoomSeekbar = mSettingView.findViewById(R.id.magnifier_zoom_seekbar);
- mZoomSeekbar.setOnSeekBarChangeListener(new ZoomSeekbarChangeListener());
- setSeekbarProgress(scale);
- mAllowDiagonalScrollingSwitch =
- (Switch) mSettingView.findViewById(R.id.magnifier_horizontal_lock_switch);
- mAllowDiagonalScrollingSwitch.setChecked(mAllowDiagonalScrolling);
- mAllowDiagonalScrollingSwitch.setOnCheckedChangeListener((view, checked) -> {
- toggleDiagonalScrolling();
- });
+ inflateView();
mParams = createLayoutParams(context);
- applyResourcesValues();
-
- mSmallButton.setAccessibilityDelegate(mButtonDelegate);
- mSmallButton.setOnClickListener(mButtonClickListener);
-
- mMediumButton.setAccessibilityDelegate(mButtonDelegate);
- mMediumButton.setOnClickListener(mButtonClickListener);
-
- mLargeButton.setAccessibilityDelegate(mButtonDelegate);
- mLargeButton.setOnClickListener(mButtonClickListener);
-
- mCloseButton.setAccessibilityDelegate(mButtonDelegate);
- mCloseButton.setOnClickListener(mButtonClickListener);
-
- mChangeModeButton.setAccessibilityDelegate(mButtonDelegate);
- mChangeModeButton.setOnClickListener(mButtonClickListener);
-
- mEditButton.setAccessibilityDelegate(mButtonDelegate);
- mEditButton.setOnClickListener(mButtonClickListener);
-
mWindowInsetChangeRunnable = this::onWindowInsetChanged;
- mSettingView.setOnApplyWindowInsetsListener((v, insets) -> {
- // Adds a pending post check to avoiding redundant calculation because this callback
- // is sent frequently when the switch icon window dragged by the users.
- if (!mSettingView.getHandler().hasCallbacks(mWindowInsetChangeRunnable)) {
- mSettingView.getHandler().post(mWindowInsetChangeRunnable);
- }
- return v.onApplyWindowInsets(insets);
- });
-
mGestureDetector = new MagnificationGestureDetector(context,
context.getMainThreadHandler(), this);
}
@@ -230,43 +172,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
}
}
- private void applyResourcesValues() {
- final int padding = mContext.getResources().getDimensionPixelSize(
- R.dimen.magnification_switch_button_padding);
-
- PorterDuffColorFilter filter = new PorterDuffColorFilter(mContext.getColor(
- R.color.accessibility_magnifier_icon_color), PorterDuff.Mode.SRC_ATOP);
-
- mSmallButton.setImageResource(R.drawable.ic_magnification_menu_small);
- mSmallButton.setColorFilter(filter);
- mSmallButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- mSmallButton.setPadding(padding, padding, padding, padding);
-
- mMediumButton.setImageResource(R.drawable.ic_magnification_menu_medium);
- mMediumButton.setColorFilter(filter);
- mMediumButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- mMediumButton.setPadding(padding, padding, padding, padding);
-
- mLargeButton.setImageResource(R.drawable.ic_magnification_menu_large);
- mLargeButton.setColorFilter(filter);
- mLargeButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- mLargeButton.setPadding(padding, padding, padding, padding);
-
- mChangeModeButton.setImageResource(R.drawable.ic_open_in_new_fullscreen);
- mChangeModeButton.setColorFilter(filter);
- mChangeModeButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- mChangeModeButton.setPadding(padding, padding, padding, padding);
-
- mCloseButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- mEditButton.setBackgroundResource(
- R.drawable.accessibility_magnification_setting_view_btn_bg);
- }
-
private final AccessibilityDelegate mButtonDelegate = new AccessibilityDelegate() {
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
@@ -394,6 +299,10 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
}
public void hideSettingPanel() {
+ hideSettingPanel(true);
+ }
+
+ public void hideSettingPanel(boolean resetPosition) {
if (!mIsVisible) {
return;
}
@@ -401,8 +310,10 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
// Reset button status.
mWindowManager.removeView(mSettingView);
mIsVisible = false;
- mParams.x = 0;
- mParams.y = 0;
+ if (resetPosition) {
+ mParams.x = 0;
+ mParams.y = 0;
+ }
mContext.unregisterReceiver(mScreenOffReceiver);
}
@@ -458,9 +369,72 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
mZoomSeekbar.setProgress(index);
}
+ void inflateView() {
+ mSettingView = (LinearLayout) View.inflate(mContext,
+ R.layout.window_magnification_settings_view, null);
+
+ mSettingView.setClickable(true);
+ mSettingView.setFocusable(true);
+ mSettingView.setOnTouchListener(this::onTouch);
+
+ mPanelView = mSettingView.findViewById(R.id.magnifier_panel_view);
+ mSmallButton = mSettingView.findViewById(R.id.magnifier_small_button);
+ mMediumButton = mSettingView.findViewById(R.id.magnifier_medium_button);
+ mLargeButton = mSettingView.findViewById(R.id.magnifier_large_button);
+ mCloseButton = mSettingView.findViewById(R.id.magnifier_close_button);
+ mEditButton = mSettingView.findViewById(R.id.magnifier_edit_button);
+ mChangeModeButton = mSettingView.findViewById(R.id.magnifier_full_button);
+
+ mZoomSeekbar = mSettingView.findViewById(R.id.magnifier_zoom_seekbar);
+ mZoomSeekbar.setOnSeekBarChangeListener(new ZoomSeekbarChangeListener());
+
+ float scale = Settings.Secure.getFloatForUser(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 0,
+ UserHandle.USER_CURRENT);
+ setSeekbarProgress(scale);
+ mAllowDiagonalScrollingSwitch =
+ (Switch) mSettingView.findViewById(R.id.magnifier_horizontal_lock_switch);
+ mAllowDiagonalScrollingSwitch.setChecked(mAllowDiagonalScrolling);
+ mAllowDiagonalScrollingSwitch.setOnCheckedChangeListener((view, checked) -> {
+ toggleDiagonalScrolling();
+ });
+
+ mSmallButton.setAccessibilityDelegate(mButtonDelegate);
+ mSmallButton.setOnClickListener(mButtonClickListener);
+
+ mMediumButton.setAccessibilityDelegate(mButtonDelegate);
+ mMediumButton.setOnClickListener(mButtonClickListener);
+
+ mLargeButton.setAccessibilityDelegate(mButtonDelegate);
+ mLargeButton.setOnClickListener(mButtonClickListener);
+
+ mCloseButton.setAccessibilityDelegate(mButtonDelegate);
+ mCloseButton.setOnClickListener(mButtonClickListener);
+
+ mChangeModeButton.setAccessibilityDelegate(mButtonDelegate);
+ mChangeModeButton.setOnClickListener(mButtonClickListener);
+
+ mEditButton.setAccessibilityDelegate(mButtonDelegate);
+ mEditButton.setOnClickListener(mButtonClickListener);
+
+ mSettingView.setOnApplyWindowInsetsListener((v, insets) -> {
+ // Adds a pending post check to avoiding redundant calculation because this callback
+ // is sent frequently when the switch icon window dragged by the users.
+ if (!mSettingView.getHandler().hasCallbacks(mWindowInsetChangeRunnable)) {
+ mSettingView.getHandler().post(mWindowInsetChangeRunnable);
+ }
+ return v.onApplyWindowInsets(insets);
+ });
+ }
+
void onConfigurationChanged(int configDiff) {
if ((configDiff & ActivityInfo.CONFIG_UI_MODE) != 0) {
- applyResourcesValues();
+ boolean showSettingPanelAfterThemeChange = mIsVisible;
+ hideSettingPanel(/* resetPosition= */ false);
+ inflateView();
+ if (showSettingPanelAfterThemeChange) {
+ showSettingPanel(/* resetPosition= */ false);
+ }
return;
}
if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) {