Change TaskIconMenu to lay out vertically

Still lays out horizontally when in phone
landscape.
TODO(b/186583656), need to center view.
Also have all layout be dynamic instead of having
some cases be in XML and some in code.

Bug: 181704764
Test: Task menu visible with all options in
portrait/landscape tablet
portrait phone
fake/real landscape phone

Change-Id: I3632eeb174f3e4baf2c9d69d51c1815c3c512e59
This commit is contained in:
Vinit Nayak
2021-04-27 17:32:25 -07:00
parent a7fc3ee4c7
commit 4cc0dbb552
11 changed files with 62 additions and 71 deletions
+11
View File
@@ -65,6 +65,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
import androidx.core.graphics.ColorUtils;
import androidx.core.os.BuildCompat;
@@ -752,6 +753,16 @@ public final class Utilities {
ColorUtils.blendARGB(0, color, tintAmount));
}
/**
* Sets start margin on the provided {@param view} to be {@param margin}.
* Assumes {@param view} is a child of {@link LinearLayout}
*/
public static void setStartMarginForView(View view, int margin) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) view.getLayoutParams();
lp.setMarginStart(margin);
view.setLayoutParams(lp);
}
private static class FixedSizeEmptyDrawable extends ColorDrawable {
private final int mSize;
@@ -254,16 +254,21 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
}
@Override
public int getTaskMenuLayoutOrientation(boolean canRecentsActivityRotate,
public void setTaskMenuLayoutOrientation(DeviceProfile deviceProfile,
LinearLayout taskMenuLayout) {
return LinearLayout.HORIZONTAL;
taskMenuLayout.setOrientation(LinearLayout.HORIZONTAL);
}
@Override
public void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp) {
public void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp,
LinearLayout viewGroup, DeviceProfile deviceProfile) {
// Phone fake landscape
viewGroup.setOrientation(LinearLayout.VERTICAL);
lp.width = 0;
lp.height = WRAP_CONTENT;
lp.weight = 1;
Utilities.setStartMarginForView(viewGroup.findViewById(R.id.text), 0);
Utilities.setStartMarginForView(viewGroup.findViewById(R.id.icon), 0);
}
/* ---------- The following are only used by TaskViewTouchHandler. ---------- */
@@ -101,8 +101,9 @@ public interface PagedOrientationHandler {
float getTaskMenuX(float x, View thumbnailView, int overScroll);
float getTaskMenuY(float y, View thumbnailView, int overScroll);
int getTaskMenuWidth(View view);
int getTaskMenuLayoutOrientation(boolean canRecentsActivityRotate, LinearLayout taskMenuLayout);
void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp);
void setTaskMenuLayoutOrientation(DeviceProfile deviceProfile, LinearLayout taskMenuLayout);
void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp,
LinearLayout viewGroup, DeviceProfile deviceProfile);
int getDistanceToBottomOfRect(DeviceProfile dp, Rect rect);
List<SplitPositionOption> getSplitPositionOptions(DeviceProfile dp);
FloatProperty getSplitSelectTaskOffset(FloatProperty primary, FloatProperty secondary,
@@ -253,14 +253,34 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
}
@Override
public int getTaskMenuLayoutOrientation(boolean canRecentsActivityRotate,
public void setTaskMenuLayoutOrientation(DeviceProfile deviceProfile,
LinearLayout taskMenuLayout) {
return canRecentsActivityRotate ? taskMenuLayout.getOrientation() : LinearLayout.VERTICAL;
if (deviceProfile.isLandscape && !deviceProfile.isTablet) {
// Phone landscape
taskMenuLayout.setOrientation(LinearLayout.HORIZONTAL);
} else {
// Phone Portrait, LargeScreen Landscape/Portrait
taskMenuLayout.setOrientation(LinearLayout.VERTICAL);
}
}
@Override
public void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp) {
// no-op, defaults are fine
public void setLayoutParamsForTaskMenuOptionItem(LinearLayout.LayoutParams lp,
LinearLayout viewGroup, DeviceProfile deviceProfile) {
if (deviceProfile.isLandscape && !deviceProfile.isTablet) {
// Phone landscape
viewGroup.setOrientation(LinearLayout.VERTICAL);
lp.width = 0;
lp.weight = 1;
Utilities.setStartMarginForView(viewGroup.findViewById(R.id.text), 0);
Utilities.setStartMarginForView(viewGroup.findViewById(R.id.icon), 0);
} else {
// Phone Portrait, LargeScreen Landscape/Portrait
viewGroup.setOrientation(LinearLayout.HORIZONTAL);
lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;
}
lp.height = LinearLayout.LayoutParams.WRAP_CONTENT;
}
/* ---------- The following are only used by TaskViewTouchHandler. ---------- */