Updating Recents to make the cards slightly more visible.
Change-Id: I876d39f4aac4007a3fe0c509ccb7db130f27a737
BIN
packages/SystemUI/res/drawable-hdpi/recents_lower_gradient.9.png
Normal file
After Width: | Height: | Size: 219 B |
Before Width: | Height: | Size: 1.0 KiB |
BIN
packages/SystemUI/res/drawable-mdpi/recents_lower_gradient.9.png
Normal file
After Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 985 B |
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.0 KiB |
@ -20,4 +20,4 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal|bottom"
|
android:layout_gravity="center_horizontal|bottom"
|
||||||
android:scaleType="fitXY"
|
android:scaleType="fitXY"
|
||||||
android:src="@drawable/recents_nav_bar_background" />
|
android:src="@drawable/recents_lower_gradient" />
|
@ -106,7 +106,7 @@ public class Constants {
|
|||||||
// The height of the peek space relative to the stack height
|
// The height of the peek space relative to the stack height
|
||||||
public static final float StackPeekHeightPct = 0.1f;
|
public static final float StackPeekHeightPct = 0.1f;
|
||||||
// The min scale of the last card in the peek area
|
// The min scale of the last card in the peek area
|
||||||
public static final float StackPeekMinScale = 0.9f;
|
public static final float StackPeekMinScale = 0.8f;
|
||||||
// The number of cards we see in the peek space
|
// The number of cards we see in the peek space
|
||||||
public static final int StackPeekNumCards = 3;
|
public static final int StackPeekNumCards = 3;
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,8 @@ import com.android.systemui.recents.model.SpaceNode;
|
|||||||
import com.android.systemui.recents.model.TaskStack;
|
import com.android.systemui.recents.model.TaskStack;
|
||||||
import com.android.systemui.recents.views.RecentsView;
|
import com.android.systemui.recents.views.RecentsView;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -79,6 +81,19 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
|||||||
boolean mVisible;
|
boolean mVisible;
|
||||||
boolean mTaskLaunched;
|
boolean mTaskLaunched;
|
||||||
|
|
||||||
|
private static Method sPropertyMethod;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
Class<?> c = Class.forName("android.view.GLES20Canvas");
|
||||||
|
sPropertyMethod = c.getDeclaredMethod("setProperty", String.class, String.class);
|
||||||
|
if (!sPropertyMethod.isAccessible()) sPropertyMethod.setAccessible(true);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Broadcast receiver to handle messages from our RecentsService
|
// Broadcast receiver to handle messages from our RecentsService
|
||||||
BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() {
|
BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
@ -139,21 +154,12 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
|||||||
// Add the default no-recents layout
|
// Add the default no-recents layout
|
||||||
if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) {
|
if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) {
|
||||||
mEmptyView.setVisibility(View.VISIBLE);
|
mEmptyView.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
// Dim the background even more
|
|
||||||
WindowManager.LayoutParams wlp = getWindow().getAttributes();
|
|
||||||
wlp.dimAmount = Constants.Values.Window.DarkBackgroundDim;
|
|
||||||
getWindow().setAttributes(wlp);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
|
|
||||||
} else {
|
} else {
|
||||||
mEmptyView.setVisibility(View.GONE);
|
mEmptyView.setVisibility(View.GONE);
|
||||||
|
|
||||||
// Un-dim the background
|
|
||||||
WindowManager.LayoutParams wlp = getWindow().getAttributes();
|
|
||||||
wlp.dimAmount = 0f;
|
|
||||||
getWindow().setAttributes(wlp);
|
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dim the background
|
||||||
|
mRecentsView.setBackgroundColor(0x80000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Attempts to allocate and bind the search bar app widget */
|
/** Attempts to allocate and bind the search bar app widget */
|
||||||
@ -277,6 +283,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
|||||||
LayoutInflater inflater = LayoutInflater.from(this);
|
LayoutInflater inflater = LayoutInflater.from(this);
|
||||||
mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false);
|
mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false);
|
||||||
mNavBarScrimView = inflater.inflate(R.layout.recents_nav_bar_scrim, mContainerView, false);
|
mNavBarScrimView = inflater.inflate(R.layout.recents_nav_bar_scrim, mContainerView, false);
|
||||||
|
mNavBarScrimView.setLayoutParams(new FrameLayout.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM));
|
||||||
|
|
||||||
mContainerView = new FrameLayout(this);
|
mContainerView = new FrameLayout(this);
|
||||||
mContainerView.addView(mRecentsView);
|
mContainerView.addView(mRecentsView);
|
||||||
@ -296,6 +305,16 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
|||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
onConfigurationChange();
|
onConfigurationChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX: Update the shadows
|
||||||
|
try {
|
||||||
|
sPropertyMethod.invoke(null, "ambientShadowStrength", String.valueOf(35f));
|
||||||
|
sPropertyMethod.invoke(null, "ambientRatio", String.valueOf(0.5f));
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onConfigurationChange() {
|
void onConfigurationChange() {
|
||||||
|
@ -156,10 +156,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
|||||||
float boundedT = Math.max(t, -(numPeekCards + 1));
|
float boundedT = Math.max(t, -(numPeekCards + 1));
|
||||||
|
|
||||||
// Set the scale relative to its position
|
// Set the scale relative to its position
|
||||||
|
int numFrontScaledCards = 3;
|
||||||
float minScale = Constants.Values.TaskStackView.StackPeekMinScale;
|
float minScale = Constants.Values.TaskStackView.StackPeekMinScale;
|
||||||
float scaleRange = 1f - minScale;
|
float scaleRange = 1f - minScale;
|
||||||
float scaleInc = scaleRange / numPeekCards;
|
float scaleInc = scaleRange / (numPeekCards + numFrontScaledCards);
|
||||||
float scale = Math.max(minScale, Math.min(1f, 1f + (boundedT * scaleInc)));
|
float scale = Math.max(minScale, Math.min(1f, minScale +
|
||||||
|
((boundedT + (numPeekCards + 1)) * scaleInc)));
|
||||||
float scaleYOffset = ((1f - scale) * mTaskRect.height()) / 2;
|
float scaleYOffset = ((1f - scale) * mTaskRect.height()) / 2;
|
||||||
transform.scale = scale;
|
transform.scale = scale;
|
||||||
|
|
||||||
@ -171,6 +173,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
|||||||
transform.translationY = (int) (boundedT * overlapHeight - scaleYOffset);
|
transform.translationY = (int) (boundedT * overlapHeight - scaleYOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the z translation
|
||||||
|
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||||
|
int minZ = config.taskViewTranslationZMinPx;
|
||||||
|
int incZ = config.taskViewTranslationZIncrementPx;
|
||||||
|
transform.translationZ = (int) Math.max(minZ, minZ + ((boundedT + numPeekCards) * incZ));
|
||||||
|
|
||||||
// Set the alphas
|
// Set the alphas
|
||||||
transform.dismissAlpha = Math.max(-1f, Math.min(0f, t + 1)) + 1f;
|
transform.dismissAlpha = Math.max(-1f, Math.min(0f, t + 1)) + 1f;
|
||||||
|
|
||||||
|
@ -142,8 +142,6 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
|
|||||||
void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
|
void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
|
||||||
TaskViewTransform toTransform, int duration) {
|
TaskViewTransform toTransform, int duration) {
|
||||||
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||||
int minZ = config.taskViewTranslationZMinPx;
|
|
||||||
int incZ = config.taskViewTranslationZIncrementPx;
|
|
||||||
|
|
||||||
// Update the bar view
|
// Update the bar view
|
||||||
mBarView.updateViewPropertiesToTaskTransform(animateFromTransform, toTransform, duration);
|
mBarView.updateViewPropertiesToTaskTransform(animateFromTransform, toTransform, duration);
|
||||||
@ -153,14 +151,14 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
|
|||||||
if (animateFromTransform != null) {
|
if (animateFromTransform != null) {
|
||||||
setTranslationY(animateFromTransform.translationY);
|
setTranslationY(animateFromTransform.translationY);
|
||||||
if (Constants.DebugFlags.App.EnableShadows) {
|
if (Constants.DebugFlags.App.EnableShadows) {
|
||||||
setTranslationZ(Math.max(minZ, minZ + (animateFromTransform.t * incZ)));
|
setTranslationZ(animateFromTransform.translationZ);
|
||||||
}
|
}
|
||||||
setScaleX(animateFromTransform.scale);
|
setScaleX(animateFromTransform.scale);
|
||||||
setScaleY(animateFromTransform.scale);
|
setScaleY(animateFromTransform.scale);
|
||||||
setAlpha(animateFromTransform.alpha);
|
setAlpha(animateFromTransform.alpha);
|
||||||
}
|
}
|
||||||
if (Constants.DebugFlags.App.EnableShadows) {
|
if (Constants.DebugFlags.App.EnableShadows) {
|
||||||
animate().translationZ(Math.max(minZ, minZ + (toTransform.t * incZ)));
|
animate().translationZ(toTransform.translationZ);
|
||||||
}
|
}
|
||||||
animate().translationY(toTransform.translationY)
|
animate().translationY(toTransform.translationY)
|
||||||
.scaleX(toTransform.scale)
|
.scaleX(toTransform.scale)
|
||||||
@ -179,7 +177,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
|
|||||||
} else {
|
} else {
|
||||||
setTranslationY(toTransform.translationY);
|
setTranslationY(toTransform.translationY);
|
||||||
if (Constants.DebugFlags.App.EnableShadows) {
|
if (Constants.DebugFlags.App.EnableShadows) {
|
||||||
setTranslationZ(Math.max(minZ, minZ + (toTransform.t * incZ)));
|
setTranslationZ(toTransform.translationZ);
|
||||||
}
|
}
|
||||||
setScaleX(toTransform.scale);
|
setScaleX(toTransform.scale);
|
||||||
setScaleY(toTransform.scale);
|
setScaleY(toTransform.scale);
|
||||||
|
@ -22,6 +22,7 @@ import android.graphics.Rect;
|
|||||||
/* The transform state for a task view */
|
/* The transform state for a task view */
|
||||||
public class TaskViewTransform {
|
public class TaskViewTransform {
|
||||||
public int translationY = 0;
|
public int translationY = 0;
|
||||||
|
public int translationZ = 0;
|
||||||
public float scale = 1f;
|
public float scale = 1f;
|
||||||
public float alpha = 1f;
|
public float alpha = 1f;
|
||||||
public float dismissAlpha = 1f;
|
public float dismissAlpha = 1f;
|
||||||
@ -35,6 +36,7 @@ public class TaskViewTransform {
|
|||||||
|
|
||||||
public TaskViewTransform(TaskViewTransform o) {
|
public TaskViewTransform(TaskViewTransform o) {
|
||||||
translationY = o.translationY;
|
translationY = o.translationY;
|
||||||
|
translationZ = o.translationZ;
|
||||||
scale = o.scale;
|
scale = o.scale;
|
||||||
alpha = o.alpha;
|
alpha = o.alpha;
|
||||||
dismissAlpha = o.dismissAlpha;
|
dismissAlpha = o.dismissAlpha;
|
||||||
|