Merge "Fix navigation bar order in seascape" into nyc-mr1-dev
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user