summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Aaron Heuckroth <nesciosquid@google.com> 2019-02-14 15:59:45 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-02-14 15:59:45 +0000
commit43c1d4d038b3db42ffdb5f8fd758483d44970d37 (patch)
tree9517e213952e605f462038f2d0486226668ded87
parentf0d0071c2473df8b5c5d11bcdb6e2e83eb9f2bfb (diff)
parent75e249f63748b83e8eb045b1e0c808a5dc4d0126 (diff)
Merge "Add rotation support to grid-based global actions menu."
-rw-r--r--packages/SystemUI/res/layout-land/global_actions_grid.xml80
-rw-r--r--packages/SystemUI/res/layout-land/global_actions_grid_seascape.xml82
-rw-r--r--packages/SystemUI/res/layout/global_actions_grid.xml17
-rw-r--r--packages/SystemUI/res/layout/global_actions_grid_item.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/MultiListLayout.java35
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java60
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java30
9 files changed, 280 insertions, 53 deletions
diff --git a/packages/SystemUI/res/layout-land/global_actions_grid.xml b/packages/SystemUI/res/layout-land/global_actions_grid.xml
new file mode 100644
index 000000000000..911b661d48eb
--- /dev/null
+++ b/packages/SystemUI/res/layout-land/global_actions_grid.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.android.systemui.globalactions.GlobalActionsGridLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@id/global_actions_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:clipToPadding="false"
+ android:theme="@style/qs_theme"
+ android:gravity="top|right"
+ android:clipChildren="false"
+>
+
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:gravity="top|right"
+ android:padding="0dp"
+ android:orientation="vertical"
+ android:layoutDirection="ltr"
+ android:layout_marginRight="@dimen/global_actions_grid_container_bottom_margin"
+ >
+ <!-- Grid of action items -->
+ <com.android.systemui.globalactions.ListGridLayout
+ android:id="@android:id/list"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layoutDirection="ltr"
+ android:layout_marginTop="@dimen/global_actions_grid_side_margin"
+ android:translationZ="@dimen/global_actions_translate"
+ android:paddingLeft="@dimen/global_actions_grid_top_padding"
+ android:paddingRight="@dimen/global_actions_grid_bottom_padding"
+ android:paddingTop="@dimen/global_actions_grid_left_padding"
+ android:paddingBottom="@dimen/global_actions_grid_right_padding"
+ android:background="?android:attr/colorBackgroundFloating"
+ >
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="ltr"
+ android:orientation="horizontal"
+ />
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="ltr"
+ android:orientation="horizontal"
+ />
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="ltr"
+ android:orientation="horizontal"
+ />
+ </com.android.systemui.globalactions.ListGridLayout>
+
+ <!-- For separated items-->
+ <LinearLayout
+ android:id="@+id/separated_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/global_actions_grid_side_margin"
+ android:layout_marginBottom="@dimen/global_actions_grid_side_margin"
+ android:paddingTop="@dimen/global_actions_grid_left_padding"
+ android:paddingLeft="@dimen/global_actions_grid_top_padding"
+ android:paddingBottom="@dimen/global_actions_grid_right_padding"
+ android:paddingRight="@dimen/global_actions_grid_bottom_padding"
+ android:orientation="horizontal"
+ android:layoutDirection="ltr"
+ android:background="?android:attr/colorBackgroundFloating"
+ android:translationZ="@dimen/global_actions_translate"
+ />
+
+ </LinearLayout>
+
+</com.android.systemui.globalactions.GlobalActionsGridLayout>
diff --git a/packages/SystemUI/res/layout-land/global_actions_grid_seascape.xml b/packages/SystemUI/res/layout-land/global_actions_grid_seascape.xml
new file mode 100644
index 000000000000..669be1b40567
--- /dev/null
+++ b/packages/SystemUI/res/layout-land/global_actions_grid_seascape.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.android.systemui.globalactions.GlobalActionsGridLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@id/global_actions_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:clipToPadding="false"
+ android:theme="@style/qs_theme"
+ android:gravity="top|left"
+ android:clipChildren="false"
+>
+
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:gravity="bottom|left"
+ android:padding="0dp"
+ android:orientation="vertical"
+ android:layout_marginLeft="@dimen/global_actions_grid_container_bottom_margin"
+ >
+ <!-- For separated items-->
+ <LinearLayout
+ android:id="@+id/separated_button"
+ android:layout_gravity="top|left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/global_actions_grid_side_margin"
+ android:layout_marginBottom="@dimen/global_actions_grid_side_margin"
+ android:paddingTop="@dimen/global_actions_grid_left_padding"
+ android:paddingLeft="@dimen/global_actions_grid_top_padding"
+ android:paddingBottom="@dimen/global_actions_grid_right_padding"
+ android:paddingRight="@dimen/global_actions_grid_bottom_padding"
+ android:orientation="horizontal"
+ android:layoutDirection="rtl"
+ android:background="?android:attr/colorBackgroundFloating"
+ android:translationZ="@dimen/global_actions_translate"
+ />
+
+ <!-- Grid of action items -->
+ <com.android.systemui.globalactions.ListGridLayout
+ android:id="@android:id/list"
+ android:layout_gravity="bottom|left"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_marginTop="@dimen/global_actions_grid_side_margin"
+ android:translationZ="@dimen/global_actions_translate"
+ android:paddingLeft="@dimen/global_actions_grid_top_padding"
+ android:paddingRight="@dimen/global_actions_grid_bottom_padding"
+ android:paddingTop="@dimen/global_actions_grid_left_padding"
+ android:paddingBottom="@dimen/global_actions_grid_right_padding"
+ android:background="?android:attr/colorBackgroundFloating"
+ >
+ <LinearLayout
+ android:layout_gravity="bottom"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="rtl"
+ android:orientation="horizontal"
+ />
+ <LinearLayout
+ android:layout_gravity="bottom"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="rtl"
+ android:orientation="horizontal"
+ />
+ <LinearLayout
+ android:layout_gravity="bottom"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layoutDirection="rtl"
+ android:orientation="horizontal"
+ />
+ </com.android.systemui.globalactions.ListGridLayout>
+ </LinearLayout>
+
+</com.android.systemui.globalactions.GlobalActionsGridLayout>
diff --git a/packages/SystemUI/res/layout/global_actions_grid.xml b/packages/SystemUI/res/layout/global_actions_grid.xml
index e6f2376ae76b..1b56fa089281 100644
--- a/packages/SystemUI/res/layout/global_actions_grid.xml
+++ b/packages/SystemUI/res/layout/global_actions_grid.xml
@@ -12,10 +12,11 @@
>
<LinearLayout
- android:layout_height="290dp"
- android:layout_width="412dp"
- android:gravity="bottom"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="bottom | right"
android:padding="0dp"
+ android:layoutDirection="ltr"
android:layout_marginBottom="@dimen/global_actions_grid_container_bottom_margin"
>
<!-- For separated items-->
@@ -34,15 +35,11 @@
android:translationZ="@dimen/global_actions_translate"
/>
- <Space android:layout_width="match_parent" android:layout_height="2dp"
- android:layout_weight="1" />
-
<!-- Grid of action items -->
<com.android.systemui.globalactions.ListGridLayout
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:gravity="right"
android:orientation="horizontal"
android:layoutDirection="rtl"
android:layout_marginRight="@dimen/global_actions_grid_side_margin"
@@ -56,25 +53,19 @@
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="bottom|right"
android:visibility="gone"
- android:gravity="bottom"
android:orientation="vertical"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="bottom|right"
android:visibility="gone"
- android:gravity="bottom"
android:orientation="vertical"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="bottom|right"
android:visibility="gone"
- android:gravity="bottom"
android:orientation="vertical"
/>
</com.android.systemui.globalactions.ListGridLayout>
diff --git a/packages/SystemUI/res/layout/global_actions_grid_item.xml b/packages/SystemUI/res/layout/global_actions_grid_item.xml
index 0c11cd977256..a8938390690f 100644
--- a/packages/SystemUI/res/layout/global_actions_grid_item.xml
+++ b/packages/SystemUI/res/layout/global_actions_grid_item.xml
@@ -47,6 +47,7 @@
android:gravity="center"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceSmall"
+ android:singleLine="true"
/>
<TextView
@@ -57,5 +58,6 @@
android:gravity="center"
android:textColor="?android:attr/textColorTertiary"
android:textAppearance="?android:attr/textAppearanceSmall"
+ android:singleLine="true"
/>
</LinearLayout>
diff --git a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
index e28aa9d369cb..2a1d066d356e 100644
--- a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
@@ -23,7 +23,6 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
-import android.content.res.Configuration;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -59,7 +58,6 @@ public class HardwareUiLayout extends MultiListLayout implements Tunable {
private int mEndPoint;
private boolean mEdgeBleed;
private boolean mRoundedDivider;
- private int mRotation = ROTATION_NONE;
private boolean mRotatedBackground;
private boolean mSwapOrientation = true;
@@ -89,7 +87,7 @@ public class HardwareUiLayout extends MultiListLayout implements Tunable {
}
@Override
- public ViewGroup getParentView(boolean separated, int index) {
+ public ViewGroup getParentView(boolean separated, int index, boolean reverse) {
if (separated) {
return getSeparatedView();
} else {
@@ -174,7 +172,6 @@ public class HardwareUiLayout extends MultiListLayout implements Tunable {
mSeparatedView.setBackground(mSeparatedViewBackground);
updateEdgeMargin(mEdgeBleed ? 0 : getEdgePadding());
mOldHeight = mList.getMeasuredHeight();
- updateRotation();
} else {
return;
}
@@ -188,25 +185,13 @@ public class HardwareUiLayout extends MultiListLayout implements Tunable {
post(() -> updatePosition());
}
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- updateRotation();
- }
-
public void setSwapOrientation(boolean swapOrientation) {
mSwapOrientation = swapOrientation;
}
- private void updateRotation() {
- int rotation = RotationUtils.getRotation(getContext());
- if (rotation != mRotation) {
- rotate(mRotation, rotation);
- mRotation = rotation;
- }
- }
-
- private void rotate(int from, int to) {
+ @Override
+ protected void rotate(int from, int to) {
+ super.rotate(from, to);
if (from != ROTATION_NONE && to != ROTATION_NONE) {
// Rather than handling this confusing case, just do 2 rotations.
rotate(from, ROTATION_NONE);
diff --git a/packages/SystemUI/src/com/android/systemui/MultiListLayout.java b/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
index 85265f458370..00ff518ce212 100644
--- a/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/MultiListLayout.java
@@ -17,11 +17,14 @@
package com.android.systemui;
import android.content.Context;
+import android.content.res.Configuration;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
+import com.android.systemui.util.leak.RotationUtils;
+
/**
* Layout class representing the Global Actions menu which appears when the power button is held.
*/
@@ -32,8 +35,12 @@ public abstract class MultiListLayout extends LinearLayout {
protected int mExpectedSeparatedItemCount;
protected int mExpectedListItemCount;
+ protected int mRotation;
+ protected RotationListener mRotationListener;
+
public MultiListLayout(Context context, AttributeSet attrs) {
super(context, attrs);
+ mRotation = RotationUtils.getRotation(context);
}
protected abstract ViewGroup getSeparatedView();
@@ -50,10 +57,12 @@ public abstract class MultiListLayout extends LinearLayout {
* @param separated Whether or not this index refers to a position in the separated or list
* container.
* @param index The index of the item within the container.
+ * @param reverse If the MultiListLayout contains sub-lists within the list container, reverse
+ * the order that they are filled.
* @return The parent ViewGroup which will be used to contain the specified item
* after it has been added to the layout.
*/
- public abstract ViewGroup getParentView(boolean separated, int index);
+ public abstract ViewGroup getParentView(boolean separated, int index, boolean reverse);
/**
* Sets the divided view, which may have a differently-colored background.
@@ -111,6 +120,26 @@ public abstract class MultiListLayout extends LinearLayout {
setFocusable(true);
}
+ @Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ int newRotation = RotationUtils.getRotation(mContext);
+ if (newRotation != mRotation) {
+ rotate(mRotation, newRotation);
+ mRotation = newRotation;
+ }
+ }
+
+ protected void rotate(int from, int to) {
+ if (mRotationListener != null) {
+ mRotationListener.onRotate(from, to);
+ }
+ }
+
+ public void setRotationListener(RotationListener listener) {
+ mRotationListener = listener;
+ }
+
/**
* Retrieve the MultiListLayout associated with the given view.
*/
@@ -121,4 +150,8 @@ public abstract class MultiListLayout extends LinearLayout {
}
return null;
}
+
+ interface RotationListener {
+ void onRotate(int from, int to);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index f5ac0d39d61f..7c9b2864f7f2 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -33,6 +33,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.UserInfo;
+import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
@@ -91,6 +92,7 @@ import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.EmergencyDialerConstants;
+import com.android.systemui.util.leak.RotationUtils;
import com.android.systemui.volume.SystemUIInterpolators.LogAccelerateInterpolator;
import java.util.ArrayList;
@@ -159,6 +161,8 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private final ScreenshotHelper mScreenshotHelper;
private final ScreenRecordHelper mScreenRecordHelper;
+ private int mLastRotation;
+
/**
* @param context everything needs a context :(
*/
@@ -201,6 +205,8 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mScreenshotHelper = new ScreenshotHelper(context);
mScreenRecordHelper = new ScreenRecordHelper(context);
+ mLastRotation = RotationUtils.getRotation(mContext);
+
Dependency.get(ConfigurationController.class).addCallback(this);
}
@@ -426,6 +432,15 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mContext.getTheme().applyStyle(mContext.getThemeResId(), true);
}
+ @Override
+ public void onConfigChanged(Configuration newConfig) {
+ int rotation = RotationUtils.getRotation(mContext);
+ if (rotation != mLastRotation) {
+ mDialog.onRotate();
+ }
+ mLastRotation = rotation;
+ }
+
public void destroy() {
Dependency.get(ConfigurationController.class).removeCallback(this);
}
@@ -1091,7 +1106,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
protected int getActionLayoutId(Context context) {
- if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.GLOBAL_ACTIONS_GRID_ENABLED)) {
+ if (isGridEnabled(context)) {
return com.android.systemui.R.layout.global_actions_grid_item;
}
return com.android.systemui.R.layout.global_actions_item;
@@ -1465,7 +1480,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private final Context mContext;
private final MyAdapter mAdapter;
- private final MultiListLayout mGlobalActionsLayout;
+ private MultiListLayout mGlobalActionsLayout;
private final OnClickListener mClickListener;
private final OnItemLongClickListener mLongClickListener;
private final GradientDrawable mGradientDrawable;
@@ -1505,8 +1520,13 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
window.setBackgroundDrawable(mGradientDrawable);
window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
+ initializeLayout();
- setContentView(getGlobalActionsLayoutId(context));
+ setTitle(R.string.global_actions);
+ }
+
+ private void initializeLayout() {
+ setContentView(getGlobalActionsLayoutId(mContext));
mGlobalActionsLayout = (MultiListLayout)
findViewById(com.android.systemui.R.id.global_actions_view);
mGlobalActionsLayout.setOutsideTouchListener(view -> dismiss());
@@ -1520,11 +1540,20 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
return true;
}
});
- setTitle(R.string.global_actions);
+ }
+
+ public void onRotate() {
+ if (mShowing && isGridEnabled(mContext)) {
+ initializeLayout();
+ updateList();
+ }
}
private int getGlobalActionsLayoutId(Context context) {
- if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.GLOBAL_ACTIONS_GRID_ENABLED)) {
+ if (isGridEnabled(context)) {
+ if (RotationUtils.getRotation(context) == RotationUtils.ROTATION_SEASCAPE) {
+ return com.android.systemui.R.layout.global_actions_grid_seascape;
+ }
return com.android.systemui.R.layout.global_actions_grid;
}
return com.android.systemui.R.layout.global_actions_wrapped;
@@ -1543,10 +1572,20 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
int separatedIndex = separatedActions.indexOf(action);
ViewGroup parent;
if (separatedIndex != -1) {
- parent = mGlobalActionsLayout.getParentView(true, separatedIndex);
+ parent = mGlobalActionsLayout.getParentView(true, separatedIndex, false);
} else {
+ boolean reverse = false;
+
+ // If we're using the grid layout and we're in seascape, reverse the order
+ // of sublists to make sure they render in the correct positions,
+ // since we can't reverse vertical LinearLayouts through the layout xml.
+
+ if (isGridEnabled(mContext) && RotationUtils.getRotation(mContext)
+ == RotationUtils.ROTATION_SEASCAPE) {
+ reverse = true;
+ }
int listIndex = listActions.indexOf(action);
- parent = mGlobalActionsLayout.getParentView(false, listIndex);
+ parent = mGlobalActionsLayout.getParentView(false, listIndex, reverse);
}
View v = mAdapter.getView(i, null, parent);
final int pos = i;
@@ -1665,4 +1704,11 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mKeyguardShowing = keyguardShowing;
}
}
+
+ /**
+ * Determines whether or not the Global Actions Dialog should use the newer grid-style layout.
+ */
+ public static boolean isGridEnabled(Context context) {
+ return FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.GLOBAL_ACTIONS_GRID_ENABLED);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java
index 0e49b5f3cd2a..1d042776efc9 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsGridLayout.java
@@ -83,11 +83,11 @@ public class GlobalActionsGridLayout extends MultiListLayout {
}
@Override
- public ViewGroup getParentView(boolean separated, int index) {
+ public ViewGroup getParentView(boolean separated, int index, boolean reverseOrder) {
if (separated) {
return getSeparatedView();
} else {
- return getListView().getParentView(index);
+ return getListView().getParentView(index, reverseOrder);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java b/packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java
index 37755155751f..d5dcd74c7ea8 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/ListGridLayout.java
@@ -28,16 +28,13 @@ import android.widget.LinearLayout;
*
* * Try to maintain a 'square' grid (equal number of columns and rows) based on the expected item
* count.
+ * * Determine the position and parent of any item by its index and the total item count.
* * Display and hide sub-lists as needed, depending on the expected item count.
- * * Favor bias toward having more rows or columns depending on the orientation of the device
- * (TODO(123344999): Implement this, currently always favors adding more rows.)
- * * Change the orientation (horizontal vs. vertical) of the container and sub-lists to act as rows
- * or columns depending on the orientation of the device.
- * (TODO(123344999): Implement this, currently always columns.)
*
* While we could implement this behavior with a GridLayout, it would take significantly more
* time and effort, and would require more substantial refactoring of the existing code in
- * GlobalActionsDialog, since it would require manipulation of the child items themselves.
+ * GlobalActionsDialog, since it would require manipulation of layout properties on the child items
+ * themselves.
*
*/
@@ -65,14 +62,25 @@ public class ListGridLayout extends LinearLayout {
/**
* Get the parent view associated with the item which should be placed at the given position.
*/
- public ViewGroup getParentView(int index) {
- ViewGroup firstParent = (ViewGroup) getChildAt(0);
+ public ViewGroup getParentView(int index, boolean reverseSublists) {
if (mRows == 0) {
- return firstParent;
+ return null;
}
+ int column = getParentViewIndex(index, reverseSublists);
+ return (ViewGroup) getChildAt(column);
+ }
+
+ private int reverseSublistIndex(int index) {
+ return getChildCount() - (index + 1);
+ }
+
+ private int getParentViewIndex(int index, boolean reverseSublists) {
int column = (int) Math.floor(index / mRows);
- ViewGroup parent = (ViewGroup) getChildAt(column);
- return parent != null ? parent : firstParent;
+ int columnCount = getChildCount();
+ if (reverseSublists) {
+ column = reverseSublistIndex(column);
+ }
+ return column;
}
/**