diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/DeviceProfile.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/SettingsActivity.java | 47 | ||||
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsTransitionController.java | 18 | ||||
-rw-r--r-- | src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java | 13 | ||||
-rw-r--r-- | src/com/android/launcher3/discovery/AppDiscoveryItemView.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/GradientView.java (renamed from src/com/android/launcher3/graphics/RadialGradientView.java) | 76 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/ScrimView.java | 33 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/ShadowDrawable.java | 15 |
8 files changed, 134 insertions, 76 deletions
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 2d1ebf114..508fc3406 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -113,9 +113,9 @@ public class DeviceProfile { public int hotseatCellHeightPx; public int hotseatIconSizePx; public int hotseatBarHeightPx; - private int hotseatBarTopPaddingPx; - private int hotseatBarBottomPaddingPx; - private int hotseatLandGutterPx; + public int hotseatBarTopPaddingPx; + public int hotseatBarBottomPaddingPx; + public int hotseatLandGutterPx; // All apps public int allAppsNumCols; diff --git a/src/com/android/launcher3/SettingsActivity.java b/src/com/android/launcher3/SettingsActivity.java index 7ae6b261d..0902b2029 100644 --- a/src/com/android/launcher3/SettingsActivity.java +++ b/src/com/android/launcher3/SettingsActivity.java @@ -34,6 +34,11 @@ import com.android.launcher3.graphics.IconShapeOverride; * Settings activity for Launcher. Currently implements the following setting: Allow rotation */ public class SettingsActivity extends Activity { + + private static final String ICON_BADGING_PREFERENCE_KEY = "pref_icon_badging"; + // TODO: use Settings.Secure.NOTIFICATION_BADGING + private static final String NOTIFICATION_BADGING = "notification_badging"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -50,6 +55,7 @@ public class SettingsActivity extends Activity { public static class LauncherSettingsFragment extends PreferenceFragment { private SystemDisplayRotationLockObserver mRotationLockObserver; + private IconBadgingObserver mIconBadgingObserver; @Override public void onCreate(Bundle savedInstanceState) { @@ -57,13 +63,14 @@ public class SettingsActivity extends Activity { getPreferenceManager().setSharedPreferencesName(LauncherFiles.SHARED_PREFERENCES_KEY); addPreferencesFromResource(R.xml.launcher_preferences); + ContentResolver resolver = getActivity().getContentResolver(); + // Setup allow rotation preference Preference rotationPref = findPreference(Utilities.ALLOW_ROTATION_PREFERENCE_KEY); if (getResources().getBoolean(R.bool.allow_rotation)) { // Launcher supports rotation by default. No need to show this setting. getPreferenceScreen().removePreference(rotationPref); } else { - ContentResolver resolver = getActivity().getContentResolver(); mRotationLockObserver = new SystemDisplayRotationLockObserver(rotationPref, resolver); // Register a content observer to listen for system setting changes while @@ -77,9 +84,18 @@ public class SettingsActivity extends Activity { rotationPref.setDefaultValue(Utilities.getAllowRotationDefaultValue(getActivity())); } + Preference iconBadgingPref = findPreference(ICON_BADGING_PREFERENCE_KEY); if (!BuildCompat.isAtLeastO()) { getPreferenceScreen().removePreference( findPreference(SessionCommitReceiver.ADD_ICON_PREFERENCE_KEY)); + getPreferenceScreen().removePreference(iconBadgingPref); + } else { + // Listen to system notification badge settings while this UI is active. + mIconBadgingObserver = new IconBadgingObserver(iconBadgingPref, resolver); + resolver.registerContentObserver( + Settings.Secure.getUriFor(NOTIFICATION_BADGING), + false, mIconBadgingObserver); + mIconBadgingObserver.onChange(true); } Preference iconShapeOverride = findPreference(IconShapeOverride.KEY_PREFERENCE); @@ -98,6 +114,10 @@ public class SettingsActivity extends Activity { getActivity().getContentResolver().unregisterContentObserver(mRotationLockObserver); mRotationLockObserver = null; } + if (mIconBadgingObserver != null) { + getActivity().getContentResolver().unregisterContentObserver(mIconBadgingObserver); + mIconBadgingObserver = null; + } super.onDestroy(); } } @@ -127,4 +147,29 @@ public class SettingsActivity extends Activity { ? R.string.allow_rotation_desc : R.string.allow_rotation_blocked_desc); } } + + /** + * Content observer which listens for system badging setting changes, + * and updates the launcher badging setting subtext accordingly. + */ + private static class IconBadgingObserver extends ContentObserver { + + private final Preference mBadgingPref; + private final ContentResolver mResolver; + + public IconBadgingObserver(Preference badgingPref, ContentResolver resolver) { + super(new Handler()); + mBadgingPref = badgingPref; + mResolver = resolver; + } + + @Override + public void onChange(boolean selfChange) { + boolean enabled = Settings.Secure.getInt(mResolver, NOTIFICATION_BADGING, 1) == 1; + mBadgingPref.setSummary(enabled + ? R.string.icon_badging_desc_on + : R.string.icon_badging_desc_off); + } + } + } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 97aa54ac5..7c6ff5120 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -24,7 +24,7 @@ import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dynamicui.ExtractedColors; -import com.android.launcher3.graphics.RadialGradientView; +import com.android.launcher3.graphics.GradientView; import com.android.launcher3.graphics.ScrimView; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; @@ -47,7 +47,8 @@ public class AllAppsTransitionController implements TouchController, VerticalPul private static final String TAG = "AllAppsTrans"; private static final boolean DBG = false; - private final Interpolator mAccelInterpolator = new AccelerateInterpolator(2f); + private final Interpolator mWorkspaceAccelnterpolator = new AccelerateInterpolator(2f); + private final Interpolator mHotseatAccelInterpolator = new AccelerateInterpolator(.5f); private final Interpolator mDecelInterpolator = new DecelerateInterpolator(3f); private final Interpolator mFastOutSlowInInterpolator = new FastOutSlowInInterpolator(); private final VerticalPullDetector.ScrollInterpolator mScrollInterpolator @@ -95,7 +96,7 @@ public class AllAppsTransitionController implements TouchController, VerticalPul // Used in discovery bounce animation to provide the transition without workspace changing. private boolean mIsTranslateWithoutWorkspace = false; private AnimatorSet mDiscoBounceAnimation; - private RadialGradientView mGradientView; + private GradientView mGradientView; private ScrimView mScrimView; public AllAppsTransitionController(Launcher l) { @@ -275,7 +276,7 @@ public class AllAppsTransitionController implements TouchController, VerticalPul private void updateAllAppsBg(float progress) { // gradient if (mGradientView == null) { - mGradientView = (RadialGradientView) mLauncher.findViewById(R.id.gradient_bg); + mGradientView = (GradientView) mLauncher.findViewById(R.id.gradient_bg); mGradientView.setVisibility(View.VISIBLE); onExtractedColorsChanged(); } @@ -313,7 +314,8 @@ public class AllAppsTransitionController implements TouchController, VerticalPul float workspaceHotseatAlpha = Utilities.boundToRange(progress, 0f, 1f); float alpha = 1 - workspaceHotseatAlpha; - float interpolation = mAccelInterpolator.getInterpolation(workspaceHotseatAlpha); + float workspaceAlpha = mWorkspaceAccelnterpolator.getInterpolation(workspaceHotseatAlpha); + float hotseatAlpha = mHotseatAccelInterpolator.getInterpolation(workspaceHotseatAlpha); int color = (Integer) mEvaluator.evaluate(mDecelInterpolator.getInterpolation(alpha), mHotseatBackgroundColor, mAllAppsBackgroundColor); @@ -331,18 +333,18 @@ public class AllAppsTransitionController implements TouchController, VerticalPul if (!mLauncher.getDeviceProfile().isVerticalBarLayout()) { mWorkspace.setHotseatTranslationAndAlpha(Workspace.Direction.Y, -mShiftRange + shiftCurrent, - interpolation); + hotseatAlpha); } else { mWorkspace.setHotseatTranslationAndAlpha(Workspace.Direction.Y, PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent), - interpolation); + hotseatAlpha); } if (mIsTranslateWithoutWorkspace) { return; } mWorkspace.setWorkspaceYTranslationAndAlpha( - PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent), interpolation); + PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent), workspaceAlpha); if (!mDetector.isDraggingState()) { mContainerVelocity = mDetector.computeVelocity(shiftCurrent - shiftPrevious, diff --git a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java index f785e4cdb..126a02c73 100644 --- a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java +++ b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java @@ -16,6 +16,7 @@ package com.android.launcher3.allapps.search; import android.content.Context; +import android.graphics.Rect; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.Selection; @@ -29,6 +30,7 @@ import android.view.KeyEvent; import android.view.View; import android.widget.FrameLayout; +import com.android.launcher3.DeviceProfile; import com.android.launcher3.ExtendedEditText; import com.android.launcher3.Launcher; import com.android.launcher3.R; @@ -52,6 +54,7 @@ public class AppsSearchContainerLayout extends FrameLayout private final Launcher mLauncher; private final int mMinHeight; + private final int mSearchBoxHeight; private final AllAppsSearchBarController mSearchBarController; private final SpannableStringBuilder mSearchQueryBuilder; private final HeaderElevationController mElevationController; @@ -74,6 +77,8 @@ public class AppsSearchContainerLayout extends FrameLayout mLauncher = Launcher.getLauncher(context); mMinHeight = getResources().getDimensionPixelSize(R.dimen.all_apps_search_bar_height); + mSearchBoxHeight = getResources() + .getDimensionPixelSize(R.dimen.all_apps_search_bar_field_height); mSearchBarController = new AllAppsSearchBarController(); mElevationController = new HeaderElevationController(this); @@ -200,8 +205,12 @@ public class AppsSearchContainerLayout extends FrameLayout @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - if (!mLauncher.getDeviceProfile().isVerticalBarLayout()) { - listener.onScrollRangeChanged(top); + DeviceProfile dp = mLauncher.getDeviceProfile(); + if (!dp.isVerticalBarLayout()) { + Rect insets = mLauncher.getDragLayer().getInsets(); + int hotseatBottom = bottom - dp.hotseatBarBottomPaddingPx - insets.bottom; + int searchTopMargin = insets.top + (mMinHeight - mSearchBoxHeight); + listener.onScrollRangeChanged(hotseatBottom - searchTopMargin); } else { listener.onScrollRangeChanged(bottom); } diff --git a/src/com/android/launcher3/discovery/AppDiscoveryItemView.java b/src/com/android/launcher3/discovery/AppDiscoveryItemView.java index 9bb3b100e..809d7249d 100644 --- a/src/com/android/launcher3/discovery/AppDiscoveryItemView.java +++ b/src/com/android/launcher3/discovery/AppDiscoveryItemView.java @@ -82,7 +82,7 @@ public class AppDiscoveryItemView extends RelativeLayout { mPrice.setText(info.priceFormatted != null ? info.priceFormatted : ""); mReviewCount.setVisibility(SHOW_REVIEW_COUNT ? View.VISIBLE : View.GONE); if (info.rating >= 0) { - mRatingText.setText(new DecimalFormat("#.#").format(info.rating)); + mRatingText.setText(new DecimalFormat("#.0").format(info.rating)); mRatingView.setRating(info.rating); mRatingView.setVisibility(View.VISIBLE); String reviewCountFormatted = NumberFormat.getInstance().format(info.reviewCount); diff --git a/src/com/android/launcher3/graphics/RadialGradientView.java b/src/com/android/launcher3/graphics/GradientView.java index cf6851c00..c5b769366 100644 --- a/src/com/android/launcher3/graphics/RadialGradientView.java +++ b/src/com/android/launcher3/graphics/GradientView.java @@ -27,7 +27,8 @@ import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; -import android.view.animation.DecelerateInterpolator; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.Interpolator; import com.android.launcher3.R; import com.android.launcher3.Utilities; @@ -36,63 +37,50 @@ import com.android.launcher3.Utilities; * Draws a translucent radial gradient background from an initial state with progress 0.0 to a * final state with progress 1.0; */ -public class RadialGradientView extends View { +public class GradientView extends View { - public static final int DEFAULT_COLOR_1 = Color.WHITE; - public static final int DEFAULT_COLOR_2 = Color.BLACK; + private static final int DEFAULT_COLOR = Color.WHITE; + private static final float GRADIENT_ALPHA_MASK_LENGTH_DP = 300; + private static final float FINAL_GRADIENT_ALPHA = 0.75f; + private static final boolean DEBUG = false; private static Bitmap sFinalGradientMask; private static Bitmap sAlphaGradientMask; - // TODO needs to be cleaned up once design finalizes - static class Config { - // dimens - final float gradientCenterX = 0.5f; - final float gradientCenterY = 1.05f; - final float gradientHeadStartFactor = 0.35f; - final float gradientAlphaMaskLengthDp = 700; - // interpolation - final boolean useGradientAlphaDecel = false; - final float decelFactorForGradientAlpha = 2f; - // colors - final float finalGradientAlpha = 0.75f; - int color1 = DEFAULT_COLOR_1; - int color2 = DEFAULT_COLOR_2; - } - + private int mColor1 = DEFAULT_COLOR; + private int mColor2 = DEFAULT_COLOR; + private int mWidth; + private int mHeight; private final RectF mAlphaMaskRect = new RectF(); private final RectF mFinalMaskRect = new RectF(); private final Paint mPaint = new Paint(); - private final Config mConfig = new Config(); - private final DecelerateInterpolator mDecelInterpolator; private float mProgress; - private int mWidth; - private int mHeight; private final int mMaskHeight; private final Context mAppContext; + private final Paint mDebugPaint = DEBUG ? new Paint() : null; + private final Interpolator mAccelerator = new AccelerateInterpolator(); - public RadialGradientView(Context context, AttributeSet attrs) { + public GradientView(Context context, AttributeSet attrs) { super(context, attrs); this.mAppContext = context.getApplicationContext(); - this.mDecelInterpolator = new DecelerateInterpolator(mConfig.decelFactorForGradientAlpha); - this.mMaskHeight = Utilities.pxFromDp(mConfig.gradientAlphaMaskLengthDp, + this.mMaskHeight = Utilities.pxFromDp(GRADIENT_ALPHA_MASK_LENGTH_DP, mAppContext.getResources().getDisplayMetrics()); if (sFinalGradientMask == null) { sFinalGradientMask = Utilities.convertToAlphaMask( - Utilities.createOnePixBitmap(), mConfig.finalGradientAlpha); + Utilities.createOnePixBitmap(), FINAL_GRADIENT_ALPHA); } if (sAlphaGradientMask == null) { Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(context.getResources(), R.drawable.all_apps_alpha_mask); sAlphaGradientMask = Utilities.convertToAlphaMask( - alphaMaskFromResource, mConfig.finalGradientAlpha); + alphaMaskFromResource, FINAL_GRADIENT_ALPHA); } } public void onExtractedColorsChanged(int color1, int color2) { - mConfig.color1 = color1; - mConfig.color2 = color2; + this.mColor1 = color1; + this.mColor2 = color2; if (mWidth + mHeight > 0) { createRadialShader(); } @@ -110,14 +98,15 @@ public class RadialGradientView extends View { // only being called when colors change private void createRadialShader() { - float radius = Math.max(mHeight, mWidth) * mConfig.gradientCenterY; + final float gradientCenterY = 1.05f; + float radius = Math.max(mHeight, mWidth) * gradientCenterY; float posScreenBottom = (radius - mHeight) / radius; // center lives below screen RadialGradient shader = new RadialGradient( - mWidth * mConfig.gradientCenterX, - mHeight * mConfig.gradientCenterY, + mWidth * 0.5f, + mHeight * gradientCenterY, radius, - new int[] {mConfig.color1, mConfig.color1, mConfig.color2}, + new int[] {mColor1, mColor1, mColor2}, new float[] {0f, posScreenBottom, 1f}, Shader.TileMode.CLAMP); mPaint.setShader(shader); @@ -130,17 +119,22 @@ public class RadialGradientView extends View { @Override protected void onDraw(Canvas canvas) { - float head = mConfig.gradientHeadStartFactor; + float head = 0.29f; float linearProgress = head + (mProgress * (1f - head)); - float adjustProgress = mConfig.useGradientAlphaDecel - ? mDecelInterpolator.getInterpolation(linearProgress) - : linearProgress; - float startMaskY = (1f - adjustProgress) * mHeight - mMaskHeight * adjustProgress; - + float startMaskY = (1f - linearProgress) * mHeight - mMaskHeight * linearProgress; + float startAlpha = 100; + float interpolatedAlpha = (255 - startAlpha) * mAccelerator.getInterpolation(mProgress); + mPaint.setAlpha((int) (startAlpha + interpolatedAlpha)); mAlphaMaskRect.set(0, startMaskY, mWidth, startMaskY + mMaskHeight); mFinalMaskRect.set(0, startMaskY + mMaskHeight, mWidth, mHeight); canvas.drawBitmap(sAlphaGradientMask, null, mAlphaMaskRect, mPaint); canvas.drawBitmap(sFinalGradientMask, null, mFinalMaskRect, mPaint); + + if (DEBUG) { + mDebugPaint.setColor(0xFF00FF00); + canvas.drawLine(0, startMaskY, mWidth, startMaskY, mDebugPaint); + canvas.drawLine(0, startMaskY + mMaskHeight, mWidth, startMaskY + mMaskHeight, mDebugPaint); + } } }
\ No newline at end of file diff --git a/src/com/android/launcher3/graphics/ScrimView.java b/src/com/android/launcher3/graphics/ScrimView.java index 521fbedd6..feb3f030f 100644 --- a/src/com/android/launcher3/graphics/ScrimView.java +++ b/src/com/android/launcher3/graphics/ScrimView.java @@ -26,18 +26,22 @@ import android.graphics.RectF; import android.support.v4.graphics.ColorUtils; import android.util.AttributeSet; import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.Interpolator; import com.android.launcher3.R; import com.android.launcher3.Utilities; public class ScrimView extends View { - // Config - private static final int MASK_HEIGHT_DP = 600; - private static final float MASK_START_LENGTH_FACTOR = 0.4f; + private static final boolean DEBUG = false; + + private static final int MASK_HEIGHT_DP = 300; + private static final float MASK_START_LENGTH_FACTOR = 1f; private static final float FINAL_ALPHA = 0.87f; private static final int SCRIM_COLOR = ColorUtils.setAlphaComponent( Color.WHITE, (int) (FINAL_ALPHA * 255)); + private static final boolean APPLY_ALPHA = true; private static Bitmap sFinalScrimMask; private static Bitmap sAlphaScrimMask; @@ -50,6 +54,8 @@ public class ScrimView extends View { private final RectF mFinalMaskRect = new RectF(); private final Paint mPaint = new Paint(); private float mProgress; + private final Interpolator mAccelerator = new AccelerateInterpolator(); + private final Paint mDebugPaint = DEBUG ? new Paint() : null; public ScrimView(Context context, AttributeSet attrs) { super(context, attrs); @@ -73,17 +79,22 @@ public class ScrimView extends View { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); mVisibleHeight = MeasureSpec.getSize(heightMeasureSpec); - int fullHeight = mVisibleHeight * 2 + mMaskHeight; - setMeasuredDimension(width, fullHeight); + setMeasuredDimension(width, mVisibleHeight * 2); setProgress(mProgress); } public void setProgress(float progress) { mProgress = progress; float initialY = mVisibleHeight - mHeadStart; - float fullTranslationY = mMaskHeight + initialY + mVisibleHeight; - float translationY = initialY - progress * fullTranslationY; - setTranslationY(translationY); + float fullTranslationY = mVisibleHeight; + float linTranslationY = initialY - progress * fullTranslationY; + setTranslationY(linTranslationY); + + if (APPLY_ALPHA) { + int alpha = 55 + (int) (200f * mAccelerator.getInterpolation(progress)); + mPaint.setAlpha(alpha); + invalidate(); + } } @Override @@ -92,6 +103,12 @@ public class ScrimView extends View { mFinalMaskRect.set(0, mMaskHeight, getWidth(), getHeight()); canvas.drawBitmap(sAlphaScrimMask, null, mAlphaMaskRect, mPaint); canvas.drawBitmap(sFinalScrimMask, null, mFinalMaskRect, mPaint); + + if (DEBUG) { + mDebugPaint.setColor(0xFF0000FF); + canvas.drawLine(0, mAlphaMaskRect.top, getWidth(), mAlphaMaskRect.top, mDebugPaint); + canvas.drawLine(0, mAlphaMaskRect.bottom, getWidth(), mAlphaMaskRect.bottom, mDebugPaint); + } } } diff --git a/src/com/android/launcher3/graphics/ShadowDrawable.java b/src/com/android/launcher3/graphics/ShadowDrawable.java index 5e76649ca..5f4fc6cc7 100644 --- a/src/com/android/launcher3/graphics/ShadowDrawable.java +++ b/src/com/android/launcher3/graphics/ShadowDrawable.java @@ -46,6 +46,7 @@ public class ShadowDrawable extends Drawable { private final ShadowDrawableState mState; + @SuppressWarnings("unused") public ShadowDrawable() { this(new ShadowDrawableState()); } @@ -98,17 +99,6 @@ public class ShadowDrawable extends Drawable { return mState.mIntrinsicWidth; } - /** - * Sets the color for the generated shadow - */ - public void setShadowColor(int color) { - if (mState.mShadowColor != color) { - mState.mShadowColor = color; - mState.mLastDrawnBitmap = null; - invalidateSelf(); - } - } - private void regenerateBitmapCache() { Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight, Bitmap.Config.ARGB_8888); @@ -154,7 +144,8 @@ public class ShadowDrawable extends Drawable { } mState.mShadowColor = a.getColor( R.styleable.ShadowDrawable_android_shadowColor, Color.BLACK); - mState.mShadowSize = r.getDimensionPixelSize(R.dimen.drawable_shadow_size); + mState.mShadowSize = a.getDimensionPixelSize( + R.styleable.ShadowDrawable_android_elevation, 0); mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize; mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize; |