Merge "Fix RTL in Nav Bar" into nyc-dev
This commit is contained in:
@@ -496,8 +496,6 @@ public class NavigationBarView extends LinearLayout {
|
||||
|
||||
getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
|
||||
|
||||
updateRTLOrder();
|
||||
|
||||
try {
|
||||
WindowManagerGlobal.getWindowManagerService().registerDockedStackListener(new Stub() {
|
||||
@Override
|
||||
@@ -590,7 +588,6 @@ public class NavigationBarView extends LinearLayout {
|
||||
protected void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
boolean uiCarModeChanged = updateCarMode(newConfig);
|
||||
updateRTLOrder();
|
||||
updateTaskSwitchHelper();
|
||||
if (uiCarModeChanged) {
|
||||
// uiMode changed either from carmode or to carmode.
|
||||
@@ -618,59 +615,6 @@ public class NavigationBarView extends LinearLayout {
|
||||
return uiCarModeChanged;
|
||||
}
|
||||
|
||||
/**
|
||||
* In landscape, the LinearLayout is not auto mirrored since it is vertical. Therefore we
|
||||
* have to do it manually
|
||||
*/
|
||||
private void updateRTLOrder() {
|
||||
boolean isLayoutRtl = getResources().getConfiguration()
|
||||
.getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||
if (mIsLayoutRtl != isLayoutRtl) {
|
||||
|
||||
// We swap all children of the 90 and 270 degree layouts, since they are vertical
|
||||
View rotation90 = mRotatedViews[Surface.ROTATION_90];
|
||||
swapChildrenOrderIfVertical(rotation90);
|
||||
|
||||
View rotation270 = mRotatedViews[Surface.ROTATION_270];
|
||||
if (rotation90 != rotation270) {
|
||||
swapChildrenOrderIfVertical(rotation270);
|
||||
}
|
||||
mIsLayoutRtl = isLayoutRtl;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Swaps the children order of a LinearLayout if it's orientation is Vertical
|
||||
*
|
||||
* @param group The LinearLayout to swap the children from.
|
||||
*/
|
||||
private void swapChildrenOrderIfVertical(View group) {
|
||||
if (group instanceof LinearLayout) {
|
||||
LinearLayout linearLayout = (LinearLayout) group;
|
||||
if (linearLayout.getOrientation() == VERTICAL) {
|
||||
if ((linearLayout.getGravity() & Gravity.TOP) != 0) {
|
||||
linearLayout.setGravity(Gravity.BOTTOM);
|
||||
} else if ((linearLayout.getGravity() & Gravity.BOTTOM) != 0) {
|
||||
linearLayout.setGravity(Gravity.TOP);
|
||||
}
|
||||
int childCount = linearLayout.getChildCount();
|
||||
ArrayList<View> childList = new ArrayList<>(childCount);
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
childList.add(linearLayout.getChildAt(i));
|
||||
}
|
||||
linearLayout.removeAllViews();
|
||||
for (int i = childCount - 1; i >= 0; i--) {
|
||||
linearLayout.addView(childList.get(i));
|
||||
}
|
||||
}
|
||||
} else if (group instanceof ViewGroup) {
|
||||
ViewGroup viewGroup = (ViewGroup) group;
|
||||
for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
||||
swapChildrenOrderIfVertical(viewGroup.getChildAt(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
|
||||
|
||||
@@ -16,31 +16,79 @@ package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Automatically reverses the order of children as they are added.
|
||||
* Also reverse the width and height values of layout params
|
||||
*/
|
||||
public class ReverseLinearLayout extends LinearLayout {
|
||||
|
||||
private boolean mIsLayoutRtl;
|
||||
|
||||
public ReverseLinearLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mIsLayoutRtl = getResources().getConfiguration()
|
||||
.getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addView(View child) {
|
||||
reversParams(child.getLayoutParams());
|
||||
super.addView(child, 0);
|
||||
if (mIsLayoutRtl) {
|
||||
super.addView(child);
|
||||
} else {
|
||||
super.addView(child, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addView(View child, ViewGroup.LayoutParams params) {
|
||||
reversParams(params);
|
||||
super.addView(child, 0, params);
|
||||
if (mIsLayoutRtl) {
|
||||
super.addView(child, params);
|
||||
} else {
|
||||
super.addView(child, 0, params);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
updateRTLOrder();
|
||||
}
|
||||
|
||||
/**
|
||||
* In landscape, the LinearLayout is not auto mirrored since it is vertical. Therefore we
|
||||
* have to do it manually
|
||||
*/
|
||||
private void updateRTLOrder() {
|
||||
boolean isLayoutRtl = getResources().getConfiguration()
|
||||
.getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||
if (mIsLayoutRtl != isLayoutRtl) {
|
||||
// RTL changed, swap the order of all views.
|
||||
int childCount = getChildCount();
|
||||
ArrayList<View> childList = new ArrayList<>(childCount);
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
childList.add(getChildAt(i));
|
||||
}
|
||||
removeAllViews();
|
||||
for (int i = childCount - 1; i >= 0; i--) {
|
||||
super.addView(childList.get(i));
|
||||
}
|
||||
mIsLayoutRtl = isLayoutRtl;
|
||||
}
|
||||
}
|
||||
|
||||
private void reversParams(ViewGroup.LayoutParams params) {
|
||||
|
||||
Reference in New Issue
Block a user