Merge "sysui: fix navbar button view orientation" into nyc-mr2-dev

This commit is contained in:
TreeHugger Robot
2016-12-05 21:21:58 +00:00
committed by Android (Google) Code Review
5 changed files with 36 additions and 58 deletions

View File

@@ -104,9 +104,6 @@
<dimen name="navigation_key_padding">0dp</dimen>
<dimen name="navigation_key_width_sw600dp_land">162dp</dimen>
<dimen name="navigation_key_padding_sw600dp_land">42dp</dimen>
<!-- The width of the view containing the menu/ime navigation bar icons -->
<dimen name="navigation_extra_key_width">36dp</dimen>

View File

@@ -40,6 +40,7 @@ public class ButtonDispatcher {
private int mImageResource = -1;
private Drawable mImageDrawable;
private View mCurrentView;
private boolean mVertical;
public ButtonDispatcher(int id) {
mId = id;
@@ -49,13 +50,6 @@ public class ButtonDispatcher {
mViews.clear();
}
void addView(View view, boolean landscape) {
addView(view);
if (view instanceof ButtonInterface) {
((ButtonInterface) view).setLandscape(landscape);
}
}
void addView(View view) {
mViews.add(view);
view.setOnClickListener(mClickListener);
@@ -75,6 +69,10 @@ public class ButtonDispatcher {
} else if (mImageDrawable != null) {
((ButtonInterface) view).setImageDrawable(mImageDrawable);
}
if (view instanceof ButtonInterface) {
((ButtonInterface) view).setVertical(mVertical);
}
}
public int getId() {
@@ -186,12 +184,13 @@ public class ButtonDispatcher {
}
}
public void setLandscape(boolean landscape) {
public void setVertical(boolean vertical) {
mVertical = vertical;
final int N = mViews.size();
for (int i = 0; i < N; i++) {
final View view = mViews.get(i);
if (view instanceof ButtonInterface) {
((ButtonInterface) view).setLandscape(landscape);
((ButtonInterface) view).setVertical(vertical);
}
}
}
@@ -206,7 +205,7 @@ public class ButtonDispatcher {
void abortCurrentGesture();
void setLandscape(boolean landscape);
void setVertical(boolean vertical);
void setCarMode(boolean carMode);
}

View File

@@ -17,12 +17,14 @@ package com.android.systemui.statusbar.phone;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.Display;
import android.view.Display.Mode;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Space;
@@ -63,12 +65,13 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
protected FrameLayout mRot0;
protected FrameLayout mRot90;
private boolean isRot0Landscape;
private SparseArray<ButtonDispatcher> mButtonDispatchers;
private String mCurrentLayout;
private View mLastRot0;
private View mLastRot90;
private View mLastPortrait;
private View mLastLandscape;
private boolean mAlternativeOrder;
@@ -76,6 +79,10 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
super(context, attrs);
mDensity = context.getResources().getConfiguration().densityDpi;
createInflaters();
Display display = ((WindowManager)
context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Mode displayMode = display.getMode();
isRot0Landscape = displayMode.getPhysicalWidth() > displayMode.getPhysicalHeight();
}
private void createInflaters() {
@@ -204,17 +211,17 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
String[] center = sets[1].split(BUTTON_SEPARATOR);
String[] end = sets[2].split(BUTTON_SEPARATOR);
// Inflate these in start to end order or accessibility traversal will be messed up.
inflateButtons(start, (ViewGroup) mRot0.findViewById(R.id.ends_group), false);
inflateButtons(start, (ViewGroup) mRot90.findViewById(R.id.ends_group), true);
inflateButtons(start, (ViewGroup) mRot0.findViewById(R.id.ends_group), isRot0Landscape);
inflateButtons(start, (ViewGroup) mRot90.findViewById(R.id.ends_group), !isRot0Landscape);
inflateButtons(center, (ViewGroup) mRot0.findViewById(R.id.center_group), false);
inflateButtons(center, (ViewGroup) mRot90.findViewById(R.id.center_group), true);
inflateButtons(center, (ViewGroup) mRot0.findViewById(R.id.center_group), isRot0Landscape);
inflateButtons(center, (ViewGroup) mRot90.findViewById(R.id.center_group), !isRot0Landscape);
addGravitySpacer((LinearLayout) mRot0.findViewById(R.id.ends_group));
addGravitySpacer((LinearLayout) mRot90.findViewById(R.id.ends_group));
inflateButtons(end, (ViewGroup) mRot0.findViewById(R.id.ends_group), false);
inflateButtons(end, (ViewGroup) mRot90.findViewById(R.id.ends_group), true);
inflateButtons(end, (ViewGroup) mRot0.findViewById(R.id.ends_group), isRot0Landscape);
inflateButtons(end, (ViewGroup) mRot90.findViewById(R.id.ends_group), !isRot0Landscape);
}
private void addGravitySpacer(LinearLayout layout) {
@@ -223,7 +230,7 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
private void inflateButtons(String[] buttons, ViewGroup parent, boolean landscape) {
for (int i = 0; i < buttons.length; i++) {
inflateButton(buttons[i], parent, landscape, i);
inflateButton(buttons[i], parent, landscape);
}
}
@@ -236,27 +243,17 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
}
@Nullable
protected View inflateButton(String buttonSpec, ViewGroup parent, boolean landscape,
int indexInParent) {
protected View inflateButton(String buttonSpec, ViewGroup parent, boolean landscape) {
LayoutInflater inflater = landscape ? mLandscapeInflater : mLayoutInflater;
float size = extractSize(buttonSpec);
String button = extractButton(buttonSpec);
View v = null;
if (HOME.equals(button)) {
v = inflater.inflate(R.layout.home, parent, false);
if (landscape && isSw600Dp()) {
setupLandButton(v);
}
} else if (BACK.equals(button)) {
v = inflater.inflate(R.layout.back, parent, false);
if (landscape && isSw600Dp()) {
setupLandButton(v);
}
} else if (RECENT.equals(button)) {
v = inflater.inflate(R.layout.recent_apps, parent, false);
if (landscape && isSw600Dp()) {
setupLandButton(v);
}
} else if (MENU_IME.equals(button)) {
v = inflater.inflate(R.layout.menu_ime, parent, false);
} else if (NAVSPACE.equals(button)) {
@@ -280,15 +277,15 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
params.width = (int) (params.width * size);
}
parent.addView(v);
addToDispatchers(v, landscape);
View lastView = landscape ? mLastRot90 : mLastRot0;
addToDispatchers(v);
View lastView = landscape ? mLastLandscape : mLastPortrait;
if (lastView != null) {
v.setAccessibilityTraversalAfter(lastView.getId());
}
if (landscape) {
mLastRot90 = v;
mLastLandscape = v;
} else {
mLastRot0 = v;
mLastPortrait = v;
}
return v;
}
@@ -327,37 +324,22 @@ public class NavigationBarInflaterView extends FrameLayout implements TunerServi
return buttonSpec.substring(0, buttonSpec.indexOf(SIZE_MOD_START));
}
private void addToDispatchers(View v, boolean landscape) {
private void addToDispatchers(View v) {
if (mButtonDispatchers != null) {
final int indexOfKey = mButtonDispatchers.indexOfKey(v.getId());
if (indexOfKey >= 0) {
mButtonDispatchers.valueAt(indexOfKey).addView(v, landscape);
mButtonDispatchers.valueAt(indexOfKey).addView(v);
} else if (v instanceof ViewGroup) {
final ViewGroup viewGroup = (ViewGroup)v;
final int N = viewGroup.getChildCount();
for (int i = 0; i < N; i++) {
addToDispatchers(viewGroup.getChildAt(i), landscape);
addToDispatchers(viewGroup.getChildAt(i));
}
}
}
}
private boolean isSw600Dp() {
Configuration configuration = mContext.getResources().getConfiguration();
return (configuration.smallestScreenWidthDp >= 600);
}
/**
* This manually sets the width of sw600dp landscape buttons because despite
* overriding the configuration from the overridden resources aren't loaded currently.
*/
private void setupLandButton(View v) {
Resources res = mContext.getResources();
v.getLayoutParams().width = res.getDimensionPixelOffset(
R.dimen.navigation_key_width_sw600dp_land);
int padding = res.getDimensionPixelOffset(R.dimen.navigation_key_padding_sw600dp_land);
v.setPadding(padding, v.getPaddingTop(), padding, v.getPaddingBottom());
}
private void clearViews() {
if (mButtonDispatchers != null) {

View File

@@ -579,7 +579,7 @@ public class NavigationBarView extends LinearLayout {
updateTaskSwitchHelper();
setNavigationIconHints(mNavigationIconHints, true);
getHomeButton().setLandscape(mVertical);
getHomeButton().setVertical(mVertical);
}
private void updateTaskSwitchHelper() {

View File

@@ -275,7 +275,7 @@ public class KeyButtonView extends ImageView implements ButtonDispatcher.ButtonI
}
@Override
public void setLandscape(boolean landscape) {
public void setVertical(boolean vertical) {
//no op
}