Fix navigation bar order in seascape
This reverts the revert in commitc44368016a, thus reapplying27315acfbb. Also fixes the bug that was the reason this needed to be reverted and fixes a case where the order was not correctly updated (landscape to seascape or vice versa) Fixes: 29612635 Change-Id: Id51cf7edaeeea16cba08bcd5a30313f58fa00d4d
This commit is contained in:
@@ -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,26 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
|
||||
}
|
||||
}
|
||||
|
||||
public void setAlternativeOrder(boolean alternativeOrder) {
|
||||
if (alternativeOrder != mAlternativeOrder) {
|
||||
mAlternativeOrder = alternativeOrder;
|
||||
updateAlternativeOrder();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAlternativeOrder() {
|
||||
updateAlternativeOrder(mRot0.findViewById(R.id.ends_group));
|
||||
updateAlternativeOrder(mRot0.findViewById(R.id.center_group));
|
||||
updateAlternativeOrder(mRot90.findViewById(R.id.ends_group));
|
||||
updateAlternativeOrder(mRot90.findViewById(R.id.center_group));
|
||||
}
|
||||
|
||||
private void updateAlternativeOrder(View v) {
|
||||
if (v instanceof ReverseLinearLayout) {
|
||||
((ReverseLinearLayout) v).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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import android.graphics.Rect;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.inputmethodservice.InputMethodService;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.MediaMetadata;
|
||||
@@ -200,7 +201,7 @@ import static com.android.systemui.statusbar.phone.BarTransitions.MODE_WARNING;
|
||||
|
||||
public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener,
|
||||
HeadsUpManager.OnHeadsUpChangedListener {
|
||||
HeadsUpManager.OnHeadsUpChangedListener, DisplayManager.DisplayListener {
|
||||
static final String TAG = "PhoneStatusBar";
|
||||
public static final boolean DEBUG = BaseStatusBar.DEBUG;
|
||||
public static final boolean SPEW = false;
|
||||
@@ -684,6 +685,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mUnlockMethodCache.addListener(this);
|
||||
startKeyguard();
|
||||
|
||||
mContext.getSystemService(DisplayManager.class).registerDisplayListener(this, null);
|
||||
|
||||
mDozeServiceHost = new DozeServiceHost();
|
||||
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mDozeServiceHost);
|
||||
putComponent(DozeHost.class, mDozeServiceHost);
|
||||
@@ -3502,6 +3505,21 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
|
||||
mNetworkController.onConfigurationChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayAdded(int displayId) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayRemoved(int displayId) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId) {
|
||||
if (displayId == Display.DEFAULT_DISPLAY) {
|
||||
repositionNavigationBar();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void userSwitched(int newUserId) {
|
||||
super.userSwitched(newUserId);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user