Trigger re-inflation when configuration changed

We re-inflate the layout when font or display size are scaled and do
follow fixes:
1. Listen to CONFIG_FONT_SCALE and CONFIG_DENSITY for layout
   re-inflaction.
2. Remove the configurations of image button and Done button paddings,
   and set the size of icons and center the text directly so the
   contents instead of the paddings inside the button will scale up when
   we increase the display size.
3. Reconstruct the layout to guarantee all components will stay in the
   settings panel without being cut.

Bug: 257272333
Test: manual - attach videos with the bug
Change-Id: Id3f120dbdd1afb3863a85f105059beee1ec460da
Merged-In: Id3f120dbdd1afb3863a85f105059beee1ec460da
This commit is contained in:
chihtinglo
2023-01-09 10:26:54 +08:00
committed by Candice Lo
parent 529d82eb01
commit a2c24a988f
8 changed files with 39 additions and 59 deletions

View File

@@ -14,8 +14,8 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:width="32dp"
android:height="32dp"
android:viewportWidth="48"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal">

View File

@@ -14,8 +14,8 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:width="32dp"
android:height="32dp"
android:viewportWidth="48"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal">

View File

@@ -14,8 +14,8 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:width="32dp"
android:height="32dp"
android:viewportWidth="48"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal">

View File

@@ -14,8 +14,8 @@
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:width="24dp"
android:height="24dp"
android:viewportWidth="48"
android:viewportHeight="48"
android:tint="?attr/colorControlNormal">

View File

@@ -35,7 +35,7 @@
android:text="@string/accessibility_magnifier_size"
android:textAppearance="@style/TextAppearance.MagnificationSetting.Title"
android:focusable="true"
android:layout_gravity="center_vertical|left" />
android:layout_gravity="center_vertical" />
<Button
android:id="@+id/magnifier_edit_button"
@@ -45,25 +45,22 @@
android:text="@string/accessibility_magnifier_edit"
android:textAppearance="@style/TextAppearance.MagnificationSetting.EditButton"
android:focusable="true"
android:layout_gravity="right" />
android:layout_gravity="center_vertical" />
</LinearLayout>
<LinearLayout
android:background="@drawable/accessibility_magnification_setting_view_image_btn_layout_bg"
android:layout_width="@dimen/magnification_setting_image_button_background_width"
android:layout_width="match_parent"
android:layout_height="@dimen/magnification_setting_image_button_height"
android:minWidth="@dimen/magnification_setting_image_button_background_width"
android:orientation="horizontal">
<ImageButton
android:id="@+id/magnifier_small_button"
android:layout_width="0dp"
android:layout_height="@dimen/magnification_setting_image_button_height"
android:layout_weight="1"
android:scaleType="fitCenter"
android:scaleType="center"
android:background="@drawable/accessibility_magnification_setting_view_image_btn_bg"
android:paddingLeft="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingRight="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingTop="@dimen/magnification_setting_image_button_padding_vertical"
android:paddingBottom="@dimen/magnification_setting_image_button_padding_vertical"
android:src="@drawable/ic_magnification_menu_small"
android:tint="@color/accessibility_magnification_image_button_tint"
android:tintMode="src_atop" />
@@ -73,12 +70,8 @@
android:layout_width="0dp"
android:layout_height="@dimen/magnification_setting_image_button_height"
android:layout_weight="1"
android:scaleType="fitCenter"
android:scaleType="center"
android:background="@drawable/accessibility_magnification_setting_view_image_btn_bg"
android:paddingLeft="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingRight="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingTop="@dimen/magnification_setting_image_button_padding_vertical"
android:paddingBottom="@dimen/magnification_setting_image_button_padding_vertical"
android:src="@drawable/ic_magnification_menu_medium"
android:tint="@color/accessibility_magnification_image_button_tint"
android:tintMode="src_atop" />
@@ -88,12 +81,8 @@
android:layout_width="0dp"
android:layout_height="@dimen/magnification_setting_image_button_height"
android:layout_weight="1"
android:scaleType="fitCenter"
android:scaleType="center"
android:background="@drawable/accessibility_magnification_setting_view_image_btn_bg"
android:paddingLeft="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingRight="@dimen/magnification_setting_image_button_padding_horizontal"
android:paddingTop="@dimen/magnification_setting_image_button_padding_vertical"
android:paddingBottom="@dimen/magnification_setting_image_button_padding_vertical"
android:src="@drawable/ic_magnification_menu_large"
android:tint="@color/accessibility_magnification_image_button_tint"
android:tintMode="src_atop" />
@@ -103,16 +92,8 @@
android:layout_width="0dp"
android:layout_height="@dimen/magnification_setting_image_button_height"
android:layout_weight="1"
android:scaleType="fitCenter"
android:scaleType="center"
android:background="@drawable/accessibility_magnification_setting_view_image_btn_bg"
android:paddingLeft
="@dimen/magnification_setting_image_button_open_in_full_padding_horizontal"
android:paddingRight
="@dimen/magnification_setting_image_button_open_in_full_padding_horizontal"
android:paddingTop
="@dimen/magnification_setting_image_button_open_in_full_padding_vertical"
android:paddingBottom
="@dimen/magnification_setting_image_button_open_in_full_padding_vertical"
android:src="@drawable/ic_open_in_full"
android:tint="@color/accessibility_magnification_image_button_tint"
android:tintMode="src_atop" />
@@ -130,7 +111,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:text="@string/accessibility_allow_diagonal_scrolling"
android:textAppearance="@style/TextAppearance.MagnificationSetting.Title"
android:layout_gravity="center_vertical" />
@@ -166,16 +146,11 @@
<Button
android:id="@+id/magnifier_done_button"
android:background="@drawable/accessibility_window_magnification_button_done_bg"
android:minHeight="@dimen/magnification_setting_button_done_height"
android:layout_width="@dimen/magnification_setting_button_done_width"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/accessibility_magnification_done"
android:textAppearance="@style/TextAppearance.MagnificationSetting.DoneButton"
android:focusable="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/magnification_setting_view_margin"
android:paddingLeft="@dimen/magnification_setting_button_done_padding_horizontal"
android:paddingRight="@dimen/magnification_setting_button_done_padding_horizontal"
android:paddingTop="@dimen/magnification_setting_button_done_padding_vertical"
android:paddingBottom="@dimen/magnification_setting_button_done_padding_vertical" />
android:layout_marginTop="@dimen/magnification_setting_view_margin"/>
</LinearLayout>

View File

@@ -1358,6 +1358,7 @@
<item name="android:fontFamily">google-sans</item>
<item name="android:textColor">?androidprv:attr/textColorPrimary</item>
<item name="android:textSize">@dimen/magnification_setting_text_size</item>
<item name="android:singleLine">true</item>
</style>
<style name="TextAppearance.MagnificationSetting.EditButton">

View File

@@ -403,15 +403,21 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
mAnimationController.deleteWindowMagnification(animationCallback);
}
void deleteWindowMagnification() {
deleteWindowMagnification(/* closeSettingPanel= */ true);
}
/**
* Deletes the magnification window.
*/
void deleteWindowMagnification() {
void deleteWindowMagnification(boolean closeSettingPanel) {
if (!isWindowVisible()) {
return;
}
closeMagnificationSettings();
if (closeSettingPanel) {
closeMagnificationSettings();
}
if (mMirrorSurface != null) {
mTransaction.remove(mMirrorSurface).apply();
@@ -489,7 +495,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
// Recreate the window again to correct the window appearance due to density or
// window size changed not caused by rotation.
if (isWindowVisible() && reCreateWindow) {
deleteWindowMagnification();
deleteWindowMagnification(/* closeSettingPanel= */ false);
enableWindowMagnificationInternal(Float.NaN, Float.NaN, Float.NaN);
}
}

View File

@@ -230,14 +230,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
}
};
private void applyResourcesValuesWithDensityChanged() {
if (mIsVisible) {
// Reset button to make its window layer always above the mirror window.
hideSettingPanel();
showSettingPanel(false);
}
}
private boolean onTouch(View v, MotionEvent event) {
if (!mIsVisible) {
return false;
@@ -445,7 +437,15 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
void onConfigurationChanged(int configDiff) {
if ((configDiff & ActivityInfo.CONFIG_UI_MODE) != 0
|| (configDiff & ActivityInfo.CONFIG_ASSETS_PATHS) != 0) {
|| (configDiff & ActivityInfo.CONFIG_ASSETS_PATHS) != 0
|| (configDiff & ActivityInfo.CONFIG_FONT_SCALE) != 0
|| (configDiff & ActivityInfo.CONFIG_DENSITY) != 0) {
// We listen to following config changes to trigger layout inflation:
// CONFIG_UI_MODE: theme change
// CONFIG_ASSETS_PATHS: wallpaper change
// CONFIG_FONT_SCALE: font size change
// CONFIG_DENSITY: display size change
boolean showSettingPanelAfterThemeChange = mIsVisible;
hideSettingPanel(/* resetPosition= */ false);
inflateView();
@@ -454,6 +454,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
}
return;
}
if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) {
final Rect previousDraggableBounds = new Rect(mDraggableWindowBounds);
mDraggableWindowBounds.set(getDraggableWindowBounds());
@@ -465,10 +466,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
+ mDraggableWindowBounds.top;
return;
}
if ((configDiff & ActivityInfo.CONFIG_DENSITY) != 0) {
applyResourcesValuesWithDensityChanged();
return;
}
if ((configDiff & ActivityInfo.CONFIG_LOCALE) != 0) {
updateAccessibilityWindowTitle();
return;