Merge "Fix navigation bar order in seascape" into nyc-mr1-dev

This commit is contained in:
Adrian Roos
2016-07-01 19:17:13 +00:00
committed by Android (Google) Code Review
3 changed files with 50 additions and 21 deletions

View File

@@ -28,7 +28,6 @@ import android.widget.LinearLayout;
import android.widget.Space; import android.widget.Space;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.statusbar.policy.KeyButtonView; import com.android.systemui.statusbar.policy.KeyButtonView;
import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService;
@@ -71,6 +70,8 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
private View mLastRot0; private View mLastRot0;
private View mLastRot90; private View mLastRot90;
private boolean mAlternativeOrder;
public NavigationBarInflaterView(Context context, AttributeSet attrs) { public NavigationBarInflaterView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
mDensity = context.getResources().getConfiguration().densityDpi; mDensity = context.getResources().getConfiguration().densityDpi;
@@ -114,6 +115,7 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
false); false);
mRot90.setId(R.id.rot90); mRot90.setId(R.id.rot90);
addView(mRot90); addView(mRot90);
updateAlternativeOrder();
if (getParent() instanceof NavigationBarView) { if (getParent() instanceof NavigationBarView) {
((NavigationBarView) getParent()).updateRotatedViews(); ((NavigationBarView) getParent()).updateRotatedViews();
} }
@@ -152,6 +154,20 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
} }
} }
public void setAlternativeOrder(boolean alternativeOrder) {
if (alternativeOrder != mAlternativeOrder) {
mAlternativeOrder = alternativeOrder;
updateAlternativeOrder();
}
}
private void updateAlternativeOrder() {
((ReverseLinearLayout) mRot90.findViewById(R.id.ends_group)).setAlternativeOrder(
mAlternativeOrder);
((ReverseLinearLayout) mRot90.findViewById(R.id.center_group)).setAlternativeOrder(
mAlternativeOrder);
}
private void initiallyFill(ButtonDispatcher buttonDispatcher) { private void initiallyFill(ButtonDispatcher buttonDispatcher) {
addAll(buttonDispatcher, (ViewGroup) mRot0.findViewById(R.id.ends_group)); addAll(buttonDispatcher, (ViewGroup) mRot0.findViewById(R.id.ends_group));
addAll(buttonDispatcher, (ViewGroup) mRot0.findViewById(R.id.center_group)); addAll(buttonDispatcher, (ViewGroup) mRot0.findViewById(R.id.center_group));

View File

@@ -99,6 +99,8 @@ public class NavigationBarView extends LinearLayout {
private final SparseArray<ButtonDispatcher> mButtonDisatchers = new SparseArray<>(); private final SparseArray<ButtonDispatcher> mButtonDisatchers = new SparseArray<>();
private Configuration mConfiguration; private Configuration mConfiguration;
private NavigationBarInflaterView mNavigationInflaterView;
private class NavTransitionListener implements TransitionListener { private class NavTransitionListener implements TransitionListener {
private boolean mBackTransitioning; private boolean mBackTransitioning;
private boolean mHomeAppearing; private boolean mHomeAppearing;
@@ -472,9 +474,10 @@ public class NavigationBarView extends LinearLayout {
@Override @Override
public void onFinishInflate() { public void onFinishInflate() {
mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
R.id.navigation_inflater);
updateRotatedViews(); updateRotatedViews();
((NavigationBarInflaterView) findViewById(R.id.navigation_inflater)).setButtonDispatchers( mNavigationInflaterView.setButtonDispatchers(mButtonDisatchers);
mButtonDisatchers);
getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener); getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
@@ -530,6 +533,7 @@ public class NavigationBarView extends LinearLayout {
} }
mCurrentView = mRotatedViews[rot]; mCurrentView = mRotatedViews[rot];
mCurrentView.setVisibility(View.VISIBLE); mCurrentView.setVisibility(View.VISIBLE);
mNavigationInflaterView.setAlternativeOrder(rot == Surface.ROTATION_90);
for (int i = 0; i < mButtonDisatchers.size(); i++) { for (int i = 0; i < mButtonDisatchers.size(); i++) {
mButtonDisatchers.valueAt(i).setCurrentView(mCurrentView); mButtonDisatchers.valueAt(i).setCurrentView(mCurrentView);
} }

View File

@@ -30,7 +30,11 @@ import java.util.ArrayList;
*/ */
public class ReverseLinearLayout extends LinearLayout { public class ReverseLinearLayout extends LinearLayout {
private boolean mIsLayoutRtl; /** If true, the layout is reversed vs. a regular linear layout */
private boolean mIsLayoutReverse;
/** If true, the layout is opposite to it's natural reversity from the layout direction */
private boolean mIsAlternativeOrder;
public ReverseLinearLayout(Context context, @Nullable AttributeSet attrs) { public ReverseLinearLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@@ -39,45 +43,50 @@ public class ReverseLinearLayout extends LinearLayout {
@Override @Override
protected void onFinishInflate() { protected void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
mIsLayoutRtl = getResources().getConfiguration() updateOrder();
.getLayoutDirection() == LAYOUT_DIRECTION_RTL;
} }
@Override @Override
public void addView(View child) { public void addView(View child) {
reversParams(child.getLayoutParams()); reversParams(child.getLayoutParams());
if (mIsLayoutRtl) { if (mIsLayoutReverse) {
super.addView(child);
} else {
super.addView(child, 0); super.addView(child, 0);
} else {
super.addView(child);
} }
} }
@Override @Override
public void addView(View child, ViewGroup.LayoutParams params) { public void addView(View child, ViewGroup.LayoutParams params) {
reversParams(params); reversParams(params);
if (mIsLayoutRtl) { if (mIsLayoutReverse) {
super.addView(child, params);
} else {
super.addView(child, 0, params); super.addView(child, 0, params);
} else {
super.addView(child, params);
} }
} }
@Override @Override
protected void onConfigurationChanged(Configuration newConfig) { public void onRtlPropertiesChanged(int layoutDirection) {
super.onConfigurationChanged(newConfig); super.onRtlPropertiesChanged(layoutDirection);
updateRTLOrder(); updateOrder();
}
public void setAlternativeOrder(boolean alternative) {
mIsAlternativeOrder = alternative;
updateOrder();
} }
/** /**
* In landscape, the LinearLayout is not auto mirrored since it is vertical. Therefore we * In landscape, the LinearLayout is not auto mirrored since it is vertical. Therefore we
* have to do it manually * have to do it manually
*/ */
private void updateRTLOrder() { private void updateOrder() {
boolean isLayoutRtl = getResources().getConfiguration() boolean isLayoutRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
.getLayoutDirection() == LAYOUT_DIRECTION_RTL; boolean isLayoutReverse = isLayoutRtl ^ mIsAlternativeOrder;
if (mIsLayoutRtl != isLayoutRtl) {
// RTL changed, swap the order of all views. if (mIsLayoutReverse != isLayoutReverse) {
// reversity changed, swap the order of all views.
int childCount = getChildCount(); int childCount = getChildCount();
ArrayList<View> childList = new ArrayList<>(childCount); ArrayList<View> childList = new ArrayList<>(childCount);
for (int i = 0; i < childCount; i++) { for (int i = 0; i < childCount; i++) {
@@ -87,7 +96,7 @@ public class ReverseLinearLayout extends LinearLayout {
for (int i = childCount - 1; i >= 0; i--) { for (int i = childCount - 1; i >= 0; i--) {
super.addView(childList.get(i)); super.addView(childList.get(i));
} }
mIsLayoutRtl = isLayoutRtl; mIsLayoutReverse = isLayoutReverse;
} }
} }