diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2014-08-26 10:54:08 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2014-08-27 10:57:03 -0700 |
commit | 7661614383dc17d69a9b1fd819e4d610896d5205 (patch) | |
tree | 4670029b02e75d62d7fd7743aa57dada399aba12 /src/com | |
parent | 424418bb50ccf5d9270650b70cc51f423da51a65 (diff) | |
download | android_packages_apps_Trebuchet-7661614383dc17d69a9b1fd819e4d610896d5205.tar.gz android_packages_apps_Trebuchet-7661614383dc17d69a9b1fd819e4d610896d5205.tar.bz2 android_packages_apps_Trebuchet-7661614383dc17d69a9b1fd819e4d610896d5205.zip |
Updating Clings UI
issue: 16127412
Change-Id: Ie5885cabbef086e3b08811da72af88d01c4405e7
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/launcher3/BorderCropDrawable.java | 90 | ||||
-rw-r--r-- | src/com/android/launcher3/ClearCircleLayout.java | 118 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherClings.java | 34 |
4 files changed, 104 insertions, 140 deletions
diff --git a/src/com/android/launcher3/BorderCropDrawable.java b/src/com/android/launcher3/BorderCropDrawable.java new file mode 100644 index 000000000..caf497d9b --- /dev/null +++ b/src/com/android/launcher3/BorderCropDrawable.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +public class BorderCropDrawable extends Drawable { + + private final Drawable mChild; + private final Rect mBoundsShift; + private final Rect mPadding; + + BorderCropDrawable(Drawable child, boolean cropLeft, + boolean cropTop, boolean cropRight, boolean cropBottom) { + mChild = child; + + mBoundsShift = new Rect(); + mPadding = new Rect(); + mChild.getPadding(mPadding); + + if (cropLeft) { + mBoundsShift.left = -mPadding.left; + mPadding.left = 0; + } + if (cropTop) { + mBoundsShift.top = -mPadding.top; + mPadding.top = 0; + } + if (cropRight) { + mBoundsShift.right = mPadding.right; + mPadding.right = 0; + } + if (cropBottom) { + mBoundsShift.bottom = mPadding.bottom; + mPadding.bottom = 0; + } + } + + @Override + protected void onBoundsChange(Rect bounds) { + mChild.setBounds( + bounds.left + mBoundsShift.left, + bounds.top + mBoundsShift.top, + bounds.right + mBoundsShift.right, + bounds.bottom + mBoundsShift.bottom); + } + + @Override + public boolean getPadding(Rect padding) { + padding.set(mPadding); + return (padding.left | padding.top | padding.right | padding.bottom) != 0; + } + + @Override + public void draw(Canvas canvas) { + mChild.draw(canvas); + } + + @Override + public int getOpacity() { + return mChild.getOpacity(); + } + + @Override + public void setAlpha(int alpha) { + mChild.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter cf) { + mChild.setColorFilter(cf); + } +} diff --git a/src/com/android/launcher3/ClearCircleLayout.java b/src/com/android/launcher3/ClearCircleLayout.java deleted file mode 100644 index e48c84eef..000000000 --- a/src/com/android/launcher3/ClearCircleLayout.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Point; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.view.View; - -public class ClearCircleLayout extends View { - - private static final String HOLE_LOCATION_PAGE_INDICATOR = "page_indicator"; - private static final String HOLE_LOCATION_CENTER_SCREEN = "center_screen"; - - private static final int BACKGROUND_COLOR = 0x80000000; - private static float MIGRATION_WORKSPACE_INNER_CIRCLE_RADIUS_DPS = 42; - private static float MIGRATION_WORKSPACE_OUTER_CIRCLE_RADIUS_DPS = 46; - - private final String mHoleLocation; - private final Paint mErasePaint; - private final Paint mBorderPaint; - - private Launcher mLauncher; - private Point mHoleCenter; - private DisplayMetrics mMetrics; - - public ClearCircleLayout(Context context, AttributeSet attrs) { - super(context, attrs); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ClearCircleLayout); - mHoleLocation = a.getString(R.styleable.ClearCircleLayout_holeLocation); - a.recycle(); - - mErasePaint = new Paint(); - mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); - mErasePaint.setColor(0xFFFFFF); - mErasePaint.setAlpha(0); - mErasePaint.setAntiAlias(true); - - mBorderPaint = new Paint(); - mBorderPaint.setColor(0xFFFFFFFF); - mBorderPaint.setAntiAlias(true); - } - - void initHole(Launcher launcher) { - mLauncher = launcher; - mMetrics = new DisplayMetrics(); - launcher.getWindowManager().getDefaultDisplay().getMetrics(mMetrics); - - if (mHoleLocation.endsWith(HOLE_LOCATION_PAGE_INDICATOR)) { - LauncherAppState app = LauncherAppState.getInstance(); - DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - - Rect indicator = grid.getWorkspacePageIndicatorBounds(new Rect()); - mHoleCenter = new Point(indicator.centerX(), indicator.centerY()); - } else if (mHoleLocation.endsWith(HOLE_LOCATION_CENTER_SCREEN)) { - mHoleCenter = new Point(mMetrics.widthPixels / 2, mMetrics.heightPixels / 2); - } - } - - @Override - protected void dispatchDraw(Canvas canvas) { - if (mHoleCenter == null) { - canvas.drawColor(BACKGROUND_COLOR); - } else { - drawHole(canvas); - } - - super.dispatchDraw(canvas); - } - - private void drawHole(Canvas canvas) { - // Initialize the draw buffer (to allow punching through) - Bitmap eraseBg = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), - Bitmap.Config.ARGB_8888); - Canvas eraseCanvas = new Canvas(eraseBg); - eraseCanvas.drawColor(BACKGROUND_COLOR); - - Rect insets = mLauncher.getDragLayer().getInsets(); - float x = mHoleCenter.x - insets.left; - float y = mHoleCenter.y - insets.top; - // Draw the outer circle - eraseCanvas.drawCircle(x, y, - DynamicGrid.pxFromDp(MIGRATION_WORKSPACE_OUTER_CIRCLE_RADIUS_DPS, mMetrics), - mBorderPaint); - - // Draw the inner circle - eraseCanvas.drawCircle(x, y, - DynamicGrid.pxFromDp(MIGRATION_WORKSPACE_INNER_CIRCLE_RADIUS_DPS, mMetrics), - mErasePaint); - - canvas.drawBitmap(eraseBg, 0, 0, null); - eraseCanvas.setBitmap(null); - eraseBg.recycle(); - } -} diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e134d1b4d..dff98f2dc 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -506,7 +506,7 @@ public class Launcher extends Activity if (mModel.canMigrateFromOldLauncherDb(this)) { launcherClings.showMigrationCling(); } else { - launcherClings.showLongPressCling(true); + launcherClings.showLongPressCling(false); } } } diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java index 840fb52c3..458d81f61 100644 --- a/src/com/android/launcher3/LauncherClings.java +++ b/src/com/android/launcher3/LauncherClings.java @@ -18,13 +18,12 @@ package com.android.launcher3; import android.accounts.Account; import android.accounts.AccountManager; -import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; -import android.animation.ValueAnimator; import android.app.ActivityManager; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserManager; import android.provider.Settings; @@ -41,8 +40,7 @@ class LauncherClings implements OnClickListener { private static final String MIGRATION_CLING_DISMISSED_KEY = "cling_gel.migration.dismissed"; private static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; - private static final String ANIM_SLIDE_FROM_BOTTOM = "slide_from_bottom"; - private static final String ANIM_SLIDE_FROM_TOP = "slide_from_top"; + private static final String TAG_CROP_TOP_AND_SIDES = "crop_bg_top_and_sides"; private static final boolean DISABLE_CLINGS = false; @@ -124,10 +122,7 @@ class LauncherClings implements OnClickListener { ViewGroup root = (ViewGroup) mLauncher.findViewById(R.id.launcher); View cling = mInflater.inflate(R.layout.longpress_cling, root, false); - final ClearCircleLayout hole = (ClearCircleLayout) cling.findViewById(R.id.cling_longpress_hole); - hole.initHole(mLauncher); - hole.setClickable(true); - hole.setOnLongClickListener(new OnLongClickListener() { + cling.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { @@ -142,6 +137,12 @@ class LauncherClings implements OnClickListener { : R.layout.longpress_cling_content, content); content.findViewById(R.id.cling_dismiss_longpress_info).setOnClickListener(this); + if (TAG_CROP_TOP_AND_SIDES.equals(content.getTag())) { + Drawable bg = new BorderCropDrawable(mLauncher.getResources().getDrawable(R.drawable.cling_bg), + true, true, true, false); + content.setBackground(bg); + } + root.addView(cling); if (showWelcome) { @@ -156,29 +157,20 @@ class LauncherClings implements OnClickListener { public void onGlobalLayout() { content.getViewTreeObserver().removeOnGlobalLayoutListener(this); - hole.setAlpha(0); - ValueAnimator anim1 = LauncherAnimUtils.ofFloat(hole, "alpha", 1); - - ObjectAnimator anim2; - - if (ANIM_SLIDE_FROM_TOP.equals(content.getTag())) { + ObjectAnimator anim; + if (TAG_CROP_TOP_AND_SIDES.equals(content.getTag())) { content.setTranslationY(-content.getMeasuredHeight()); - anim2 = LauncherAnimUtils.ofFloat(content, "translationY", 0); - } else if (ANIM_SLIDE_FROM_BOTTOM.equals(content.getTag())) { - content.setTranslationY(content.getMeasuredHeight()); - anim2 = LauncherAnimUtils.ofFloat(content, "translationY", 0); + anim = LauncherAnimUtils.ofFloat(content, "translationY", 0); } else { content.setScaleX(0); content.setScaleY(0); PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1); PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1); - anim2 = LauncherAnimUtils.ofPropertyValuesHolder(content, scaleX, scaleY); + anim = LauncherAnimUtils.ofPropertyValuesHolder(content, scaleX, scaleY); } - AnimatorSet anim = LauncherAnimUtils.createAnimatorSet(); anim.setDuration(SHOW_CLING_DURATION); anim.setInterpolator(new LogDecelerateInterpolator(100, 0)); - anim.playTogether(anim1, anim2); anim.start(); } }); |