summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/DrawableStateProxyView.java6
-rw-r--r--src/com/android/launcher3/DynamicGrid.java2
-rw-r--r--src/com/android/launcher3/Launcher.java18
-rw-r--r--src/com/android/launcher3/SearchDropTargetBar.java15
-rw-r--r--src/com/android/launcher3/WallpaperCropActivity.java7
-rw-r--r--src/com/android/launcher3/WallpaperPickerActivity.java1
-rw-r--r--src/com/android/launcher3/Workspace.java190
7 files changed, 102 insertions, 137 deletions
diff --git a/src/com/android/launcher3/DrawableStateProxyView.java b/src/com/android/launcher3/DrawableStateProxyView.java
index 196e2f2e1..0758de1f7 100644
--- a/src/com/android/launcher3/DrawableStateProxyView.java
+++ b/src/com/android/launcher3/DrawableStateProxyView.java
@@ -58,8 +58,10 @@ public class DrawableStateProxyView extends LinearLayout {
View parent = (View) getParent();
mView = parent.findViewById(mViewId);
}
- mView.setPressed(isPressed());
- mView.setHovered(isHovered());
+ if (mView != null) {
+ mView.setPressed(isPressed());
+ mView.setHovered(isHovered());
+ }
}
@Override
diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java
index 16af64814..0a56117ed 100644
--- a/src/com/android/launcher3/DynamicGrid.java
+++ b/src/com/android/launcher3/DynamicGrid.java
@@ -345,7 +345,7 @@ class DeviceProfile {
searchBarSpace.setLayoutParams(lp);
// Layout the search bar
- View searchBar = searchBarSpace.findViewById(R.id.qsb_search_bar);
+ View searchBar = launcher.getQsbBar();
lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams();
lp.width = LayoutParams.MATCH_PARENT;
lp.height = LayoutParams.MATCH_PARENT;
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index ce4a78c3f..943deda71 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -241,6 +241,7 @@ public class Launcher extends Activity
private AppsCustomizeTabHost mAppsCustomizeTabHost;
private AppsCustomizePagedView mAppsCustomizeContent;
private boolean mAutoAdvanceRunning = false;
+ private View mQsbBar;
private Bundle mSavedState;
// We set the state in both onCreate and then onNewIntent in some cases, which causes both
@@ -412,8 +413,8 @@ public class Launcher extends Activity
checkForLocaleChange();
setContentView(R.layout.launcher);
- grid.layout(this);
setupViews();
+ grid.layout(this);
showFirstRunWorkspaceCling();
registerContentObservers();
@@ -3235,7 +3236,14 @@ public class Launcher extends Activity
}
}
- private boolean updateGlobalSearchIcon() {
+ public View getQsbBar() {
+ if (mQsbBar == null) {
+ mQsbBar = mInflater.inflate(R.layout.qsb_bar, mSearchDropTargetBar);
+ }
+ return mQsbBar;
+ }
+
+ protected boolean updateGlobalSearchIcon() {
final View searchButtonContainer = findViewById(R.id.search_button_container);
final ImageView searchButton = (ImageView) findViewById(R.id.search_button);
final View voiceButtonContainer = findViewById(R.id.voice_button_container);
@@ -3270,14 +3278,14 @@ public class Launcher extends Activity
}
}
- private void updateGlobalSearchIcon(Drawable.ConstantState d) {
+ protected void updateGlobalSearchIcon(Drawable.ConstantState d) {
final View searchButtonContainer = findViewById(R.id.search_button_container);
final View searchButton = (ImageView) findViewById(R.id.search_button);
updateButtonWithDrawable(R.id.search_button, d);
invalidatePressedFocusedStates(searchButtonContainer, searchButton);
}
- private boolean updateVoiceSearchIcon(boolean searchVisible) {
+ protected boolean updateVoiceSearchIcon(boolean searchVisible) {
final View voiceButtonContainer = findViewById(R.id.voice_button_container);
final View voiceButton = findViewById(R.id.voice_button);
@@ -3323,7 +3331,7 @@ public class Launcher extends Activity
}
}
- private void updateVoiceSearchIcon(Drawable.ConstantState d) {
+ protected void updateVoiceSearchIcon(Drawable.ConstantState d) {
final View voiceButtonContainer = findViewById(R.id.voice_button_container);
final View voiceButton = findViewById(R.id.voice_button);
updateButtonWithDrawable(R.id.voice_button, d);
diff --git a/src/com/android/launcher3/SearchDropTargetBar.java b/src/com/android/launcher3/SearchDropTargetBar.java
index 8f1b5d2d2..0a0861f47 100644
--- a/src/com/android/launcher3/SearchDropTargetBar.java
+++ b/src/com/android/launcher3/SearchDropTargetBar.java
@@ -23,6 +23,7 @@ import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.widget.FrameLayout;
@@ -71,6 +72,14 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D
dragController.setFlingToDeleteDropTarget(mDeleteDropTarget);
mInfoDropTarget.setLauncher(launcher);
mDeleteDropTarget.setLauncher(launcher);
+ mQSBSearchBar = launcher.getQsbBar();
+ if (mEnableDropDownDropTargets) {
+ mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0,
+ -mBarHeight);
+ } else {
+ mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "alpha", 1f, 0f);
+ }
+ setupAnimation(mQSBSearchBarAnim, mQSBSearchBar);
}
private void prepareStartAnimation(View v) {
@@ -95,7 +104,6 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D
super.onFinishInflate();
// Get the individual components
- mQSBSearchBar = findViewById(R.id.qsb_search_bar);
mDropTargetBar = findViewById(R.id.drag_target_bar);
mInfoDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.info_target_text);
mDeleteDropTarget = (ButtonDropTarget) mDropTargetBar.findViewById(R.id.delete_target_text);
@@ -114,15 +122,12 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D
mDropTargetBar.setTranslationY(-mBarHeight);
mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "translationY",
-mBarHeight, 0f);
- mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0,
- -mBarHeight);
+
} else {
mDropTargetBar.setAlpha(0f);
mDropTargetBarAnim = LauncherAnimUtils.ofFloat(mDropTargetBar, "alpha", 0f, 1f);
- mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "alpha", 1f, 0f);
}
setupAnimation(mDropTargetBarAnim, mDropTargetBar);
- setupAnimation(mQSBSearchBarAnim, mQSBSearchBar);
}
public void finishAnimations() {
diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java
index 087785ef5..2978c850a 100644
--- a/src/com/android/launcher3/WallpaperCropActivity.java
+++ b/src/com/android/launcher3/WallpaperCropActivity.java
@@ -47,9 +47,6 @@ import java.io.InputStream;
public class WallpaperCropActivity extends Activity {
private static final String LOGTAG = "Launcher3.CropActivity";
- private int mOutputX = 0;
- private int mOutputY = 0;
-
protected static final String WALLPAPER_WIDTH_KEY = "wallpaper.width";
protected static final String WALLPAPER_HEIGHT_KEY = "wallpaper.height";
private static final int DEFAULT_COMPRESS_QUALITY = 90;
@@ -183,14 +180,14 @@ public class WallpaperCropActivity extends Activity {
failure = true;
return false;
}
- if (mOutputX > 0 && mOutputY > 0) {
+ if (mOutWidth > 0 && mOutHeight > 0) {
Matrix m = new Matrix();
RectF cropRect = new RectF(0, 0, crop.getWidth(), crop.getHeight());
if (mRotation > 0) {
m.setRotate(mRotation);
m.mapRect(cropRect);
}
- RectF returnRect = new RectF(0, 0, mOutputX, mOutputY);
+ RectF returnRect = new RectF(0, 0, mOutWidth, mOutHeight);
m.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL);
m.preRotate(mRotation);
Bitmap tmp = Bitmap.createBitmap((int) returnRect.width(),
diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java
index bad84603e..a1c74d2b2 100644
--- a/src/com/android/launcher3/WallpaperPickerActivity.java
+++ b/src/com/android/launcher3/WallpaperPickerActivity.java
@@ -398,6 +398,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
// If we have saved a wallpaper width/height, use that instead
int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, defaultWidth);
int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, defaultHeight);
+ wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight);
}
}.start();
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index d33e65041..311438922 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -45,12 +45,13 @@ import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
+import android.view.Choreographer;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
-import android.widget.ImageView;
+import android.view.animation.Interpolator;
import android.widget.TextView;
import com.android.launcher3.FolderIcon.FolderRingAnimator;
@@ -189,7 +190,6 @@ public class Workspace extends SmoothPagedView
private boolean mWorkspaceFadeInAdjacentScreens;
WallpaperOffsetInterpolator mWallpaperOffset;
- boolean mUpdateWallpaperOffsetImmediately = false;
private Runnable mDelayedResizeRunnable;
private Runnable mDelayedSnapToPageRunnable;
private Point mDisplaySize = new Point();
@@ -952,38 +952,16 @@ public class Workspace extends SmoothPagedView
mLauncher.getSharedPrefs(), mLauncher.getWindowManager(), mWallpaperManager);
}
- private void syncWallpaperOffsetWithScroll() {
- final boolean enableWallpaperEffects = isHardwareAccelerated();
- if (enableWallpaperEffects) {
- // TODO: figure out what to do about parallax, for now disable it
- //mWallpaperOffset.setFinalX(wallpaperOffsetForCurrentScroll());
- }
- }
- public void updateWallpaperOffsetImmediately() {
- mUpdateWallpaperOffsetImmediately = true;
- }
-
- private void updateWallpaperOffsets() {
- boolean updateNow = false;
- boolean keepUpdating = true;
- if (mUpdateWallpaperOffsetImmediately) {
- updateNow = true;
- keepUpdating = false;
- mWallpaperOffset.jumpToFinal();
- mUpdateWallpaperOffsetImmediately = false;
- } else {
- updateNow = keepUpdating = mWallpaperOffset.computeScrollOffset();
- }
- if (updateNow) {
- if (mWindowToken != null) {
- mWallpaperManager.setWallpaperOffsets(mWindowToken,
- mWallpaperOffset.getCurrX(), mWallpaperOffset.getCurrY());
- }
- }
- if (keepUpdating) {
- invalidate();
+ private float wallpaperOffsetForCurrentScroll() {
+ // Set wallpaper offset steps (1 / (number of screens - 1))
+ mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 1.0f);
+ if (mMaxScrollX == 0) {
+ return 0;
}
+
+ // do different behavior if it's alive wallpaper?
+ return getScrollX() / (float) mMaxScrollX;
}
protected void snapToPage(int whichPage, Runnable r) {
@@ -998,114 +976,88 @@ public class Workspace extends SmoothPagedView
snapToPage(getPageIndexForScreenId(screenId), r);
}
- class WallpaperOffsetInterpolator {
- float mFinalHorizontalWallpaperOffset = 0.0f;
- float mFinalVerticalWallpaperOffset = 0.5f;
- float mHorizontalWallpaperOffset = 0.0f;
- float mVerticalWallpaperOffset = 0.5f;
- long mLastWallpaperOffsetUpdateTime;
- boolean mIsMovingFast;
- boolean mOverrideHorizontalCatchupConstant;
- float mHorizontalCatchupConstant = 0.35f;
- float mVerticalCatchupConstant = 0.35f;
+ class WallpaperOffsetInterpolator implements Choreographer.FrameCallback {
+ float mFinalOffset = 0.0f;
+ float mCurrentOffset = 0.0f;
+ //long mLastWallpaperOffsetUpdateTime;
+ boolean mWaitingForCallback;
+ Choreographer mChoreographer;
+ Interpolator mInterpolator;
+ boolean mAnimating;
+ long mAnimationStartTime;
+ float mAnimationStartOffset;
+ final int ANIMATION_DURATION = 250;
+ int mNumScreens;
public WallpaperOffsetInterpolator() {
+ mChoreographer = Choreographer.getInstance();
+ mInterpolator = new DecelerateInterpolator(1.5f);
}
- public void setOverrideHorizontalCatchupConstant(boolean override) {
- mOverrideHorizontalCatchupConstant = override;
- }
-
- public void setHorizontalCatchupConstant(float f) {
- mHorizontalCatchupConstant = f;
- }
-
- public void setVerticalCatchupConstant(float f) {
- mVerticalCatchupConstant = f;
+ @Override
+ public void doFrame(long frameTimeNanos) {
+ mWaitingForCallback = false;
+ if (computeScrollOffset()) {
+ mWallpaperManager.setWallpaperOffsets(mWindowToken,
+ mWallpaperOffset.getCurrX(), 0f);
+ }
}
public boolean computeScrollOffset() {
- if (Float.compare(mHorizontalWallpaperOffset, mFinalHorizontalWallpaperOffset) == 0 &&
- Float.compare(mVerticalWallpaperOffset, mFinalVerticalWallpaperOffset) == 0) {
- mIsMovingFast = false;
- return false;
- }
- boolean isLandscape = mDisplaySize.x > mDisplaySize.y;
-
- long currentTime = System.currentTimeMillis();
- long timeSinceLastUpdate = currentTime - mLastWallpaperOffsetUpdateTime;
- timeSinceLastUpdate = Math.min((long) (1000/30f), timeSinceLastUpdate);
- timeSinceLastUpdate = Math.max(1L, timeSinceLastUpdate);
-
- float xdiff = Math.abs(mFinalHorizontalWallpaperOffset - mHorizontalWallpaperOffset);
- if (!mIsMovingFast && xdiff > 0.07) {
- mIsMovingFast = true;
- }
-
- float fractionToCatchUpIn1MsHorizontal;
- if (mOverrideHorizontalCatchupConstant) {
- fractionToCatchUpIn1MsHorizontal = mHorizontalCatchupConstant;
- } else if (mIsMovingFast) {
- fractionToCatchUpIn1MsHorizontal = isLandscape ? 0.5f : 0.75f;
+ final float oldOffset = mCurrentOffset;
+ if (mAnimating) {
+ long durationSinceAnimation = System.currentTimeMillis() - mAnimationStartTime;
+ float t0 = durationSinceAnimation / (float) ANIMATION_DURATION;
+ float t1 = mInterpolator.getInterpolation(t0);
+ mCurrentOffset = mAnimationStartOffset +
+ (mFinalOffset - mAnimationStartOffset) * t1;
+ mAnimating = durationSinceAnimation < ANIMATION_DURATION;
} else {
- // slow
- fractionToCatchUpIn1MsHorizontal = isLandscape ? 0.27f : 0.5f;
+ mCurrentOffset = mFinalOffset;
}
- float fractionToCatchUpIn1MsVertical = mVerticalCatchupConstant;
-
- fractionToCatchUpIn1MsHorizontal /= 33f;
- fractionToCatchUpIn1MsVertical /= 33f;
-
- final float UPDATE_THRESHOLD = 0.00001f;
- float hOffsetDelta = mFinalHorizontalWallpaperOffset - mHorizontalWallpaperOffset;
- float vOffsetDelta = mFinalVerticalWallpaperOffset - mVerticalWallpaperOffset;
- boolean jumpToFinalValue = Math.abs(hOffsetDelta) < UPDATE_THRESHOLD &&
- Math.abs(vOffsetDelta) < UPDATE_THRESHOLD;
- // Don't have any lag between workspace and wallpaper on non-large devices
- if (!LauncherAppState.getInstance().isScreenLarge() || jumpToFinalValue) {
- mHorizontalWallpaperOffset = mFinalHorizontalWallpaperOffset;
- mVerticalWallpaperOffset = mFinalVerticalWallpaperOffset;
- } else {
- float percentToCatchUpVertical =
- Math.min(1.0f, timeSinceLastUpdate * fractionToCatchUpIn1MsVertical);
- float percentToCatchUpHorizontal =
- Math.min(1.0f, timeSinceLastUpdate * fractionToCatchUpIn1MsHorizontal);
- mHorizontalWallpaperOffset += percentToCatchUpHorizontal * hOffsetDelta;
- mVerticalWallpaperOffset += percentToCatchUpVertical * vOffsetDelta;
+ if (Math.abs(oldOffset - mCurrentOffset) > 0.0000001f) {
+ scheduleCallback();
+ return true;
}
-
- mLastWallpaperOffsetUpdateTime = System.currentTimeMillis();
- return true;
+ return false;
}
public float getCurrX() {
- return mHorizontalWallpaperOffset;
+ return mCurrentOffset;
}
public float getFinalX() {
- return mFinalHorizontalWallpaperOffset;
+ return mFinalOffset;
}
- public float getCurrY() {
- return mVerticalWallpaperOffset;
- }
-
- public float getFinalY() {
- return mFinalVerticalWallpaperOffset;
+ private void animateToFinal() {
+ mAnimating = true;
+ mAnimationStartOffset = mCurrentOffset;
+ mAnimationStartTime = System.currentTimeMillis();
}
public void setFinalX(float x) {
- mFinalHorizontalWallpaperOffset = Math.max(0f, Math.min(x, 1.0f));
+ scheduleCallback();
+ mFinalOffset = Math.max(0f, Math.min(x, 1.0f));
+ if (getChildCount() != mNumScreens) {
+ if (mNumScreens > 0) {
+ // Don't animate if we're going from 0 screens
+ animateToFinal();
+ }
+ mNumScreens = getChildCount();
+ }
}
- public void setFinalY(float y) {
- mFinalVerticalWallpaperOffset = Math.max(0f, Math.min(y, 1.0f));
+ private void scheduleCallback() {
+ if (!mWaitingForCallback) {
+ mChoreographer.postFrameCallback(this);
+ mWaitingForCallback = true;
+ }
}
public void jumpToFinal() {
- mHorizontalWallpaperOffset = mFinalHorizontalWallpaperOffset;
- mVerticalWallpaperOffset = mFinalVerticalWallpaperOffset;
+ mCurrentOffset = mFinalOffset;
}
}
@@ -1115,6 +1067,10 @@ public class Workspace extends SmoothPagedView
syncWallpaperOffsetWithScroll();
}
+ private void syncWallpaperOffsetWithScroll() {
+ mWallpaperOffset.setFinalX(wallpaperOffsetForCurrentScroll());
+ }
+
void showOutlines() {
if (!isSmall() && !mIsSwitchingState) {
if (mChildrenOutlineFadeOutAnimation != null) mChildrenOutlineFadeOutAnimation.cancel();
@@ -1351,15 +1307,14 @@ public class Workspace extends SmoothPagedView
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mFirstLayout && mCurrentPage >= 0 && mCurrentPage < getChildCount()) {
- mUpdateWallpaperOffsetImmediately = true;
+ syncWallpaperOffsetWithScroll();
+ mWallpaperOffset.jumpToFinal();
}
super.onLayout(changed, left, top, right, bottom);
}
@Override
protected void onDraw(Canvas canvas) {
- updateWallpaperOffsets();
-
// Draw the background gradient if necessary
if (mBackground != null && mBackgroundAlpha > 0.0f && mDrawBackground) {
int alpha = (int) (mBackgroundAlpha * 255);
@@ -1911,7 +1866,6 @@ public class Workspace extends SmoothPagedView
@Override
public void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace) {
mIsSwitchingState = false;
- mWallpaperOffset.setOverrideHorizontalCatchupConstant(false);
updateChildrenLayersEnabled(false);
// The code in getChangeStateAnimation to determine initialAlpha and finalAlpha will ensure
// ensure that only the current page is visible during (and subsequently, after) the
@@ -2069,8 +2023,6 @@ public class Workspace extends SmoothPagedView
}
public void beginDragShared(View child, DragSource source) {
- Resources r = getResources();
-
// The drag bitmap follows the touch point around on the screen
final Bitmap b = createDragBitmap(child, new Canvas(), DRAG_BITMAP_PADDING);