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

am: 5a078db97e

Change-Id: I6ab488a5da585d68663e06b0d08c8f981246a72d
This commit is contained in:
Adrian Roos
2016-07-01 19:29:07 +00:00
committed by android-build-merger
3 changed files with 50 additions and 21 deletions

View File

@@ -28,7 +28,6 @@ import android.widget.LinearLayout;
import android.widget.Space;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.statusbar.policy.KeyButtonView;
import com.android.systemui.tuner.TunerService;
@@ -71,6 +70,8 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
private View mLastRot0;
private View mLastRot90;
private boolean mAlternativeOrder;
public NavigationBarInflaterView(Context context, AttributeSet attrs) {
super(context, attrs);
mDensity = context.getResources().getConfiguration().densityDpi;
@@ -114,6 +115,7 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
false);
mRot90.setId(R.id.rot90);
addView(mRot90);
updateAlternativeOrder();
if (getParent() instanceof NavigationBarView) {
((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) {
addAll(buttonDispatcher, (ViewGroup) mRot0.findViewById(R.id.ends_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 Configuration mConfiguration;
private NavigationBarInflaterView mNavigationInflaterView;
private class NavTransitionListener implements TransitionListener {
private boolean mBackTransitioning;
private boolean mHomeAppearing;
@@ -472,9 +474,10 @@ public class NavigationBarView extends LinearLayout {
@Override
public void onFinishInflate() {
mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
R.id.navigation_inflater);
updateRotatedViews();
((NavigationBarInflaterView) findViewById(R.id.navigation_inflater)).setButtonDispatchers(
mButtonDisatchers);
mNavigationInflaterView.setButtonDispatchers(mButtonDisatchers);
getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
@@ -530,6 +533,7 @@ public class NavigationBarView extends LinearLayout {
}
mCurrentView = mRotatedViews[rot];
mCurrentView.setVisibility(View.VISIBLE);
mNavigationInflaterView.setAlternativeOrder(rot == Surface.ROTATION_90);
for (int i = 0; i < mButtonDisatchers.size(); i++) {
mButtonDisatchers.valueAt(i).setCurrentView(mCurrentView);
}

View File

@@ -30,7 +30,11 @@ import java.util.ArrayList;
*/
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) {
super(context, attrs);
@@ -39,45 +43,50 @@ public class ReverseLinearLayout extends LinearLayout {
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mIsLayoutRtl = getResources().getConfiguration()
.getLayoutDirection() == LAYOUT_DIRECTION_RTL;
updateOrder();
}
@Override
public void addView(View child) {
reversParams(child.getLayoutParams());
if (mIsLayoutRtl) {
super.addView(child);
} else {
if (mIsLayoutReverse) {
super.addView(child, 0);
} else {
super.addView(child);
}
}
@Override
public void addView(View child, ViewGroup.LayoutParams params) {
reversParams(params);
if (mIsLayoutRtl) {
super.addView(child, params);
} else {
if (mIsLayoutReverse) {
super.addView(child, 0, params);
} else {
super.addView(child, params);
}
}
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
updateRTLOrder();
public void onRtlPropertiesChanged(int layoutDirection) {
super.onRtlPropertiesChanged(layoutDirection);
updateOrder();
}
public void setAlternativeOrder(boolean alternative) {
mIsAlternativeOrder = alternative;
updateOrder();
}
/**
* 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.
private void updateOrder() {
boolean isLayoutRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
boolean isLayoutReverse = isLayoutRtl ^ mIsAlternativeOrder;
if (mIsLayoutReverse != isLayoutReverse) {
// reversity changed, swap the order of all views.
int childCount = getChildCount();
ArrayList<View> childList = new ArrayList<>(childCount);
for (int i = 0; i < childCount; i++) {
@@ -87,7 +96,7 @@ public class ReverseLinearLayout extends LinearLayout {
for (int i = childCount - 1; i >= 0; i--) {
super.addView(childList.get(i));
}
mIsLayoutRtl = isLayoutRtl;
mIsLayoutReverse = isLayoutReverse;
}
}