From 5d498a74d816f7fc5d4828e98dd72c2432f2124c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 26 Sep 2019 12:17:37 +0100 Subject: [PATCH] Update master (#36) * Add screenshot tests * Setup of CircleCI * Add CircleCI badge * Refactoring/convert main source and tests to Kotlin (#32) * Reuse super state instead of instantiate a new one during the saving instance * Update tests and screenshots * Update dependencies and properties to publish into Bintray * Apply badge color mask only for default color (#35) * Reuse super state instead of instantiate a new one during the saving instance * Apply badge color mask only if there is no badge color defined * Remove lint warnings * Update screenshots for tests * Bump to version 1.2.2 --- .circleci/config.yml | 164 +++++++++ README.md | 1 + build.gradle | 28 +- configuration/properties.gradle | 39 +++ counterfab/build.gradle | 25 +- .../com/andremion/counterfab/CounterFab.java | 321 ------------------ .../com/andremion/counterfab/CounterFab.kt | 271 +++++++++++++++ sample/build.gradle | 43 ++- ...shouldKeepStateAfterOrientationChanged.png | Bin 0 -> 37978 bytes ....MainActivityTest_shouldRenderProperly.png | Bin 0 -> 38595 bytes ...dRenderProperlyAfterOrientationChanged.png | Bin 0 -> 37593 bytes ...ivityTest_shouldRenderSizeMiniProperly.png | Bin 0 -> 37117 bytes ..._shouldRenderSizeMiniWithCountProperly.png | Bin 0 -> 37376 bytes sample/src/androidTest/AndroidManifest.xml | 8 + .../counterfab/sample/MainActivityTest.kt | 60 ++++ .../sample/helpers/ScreenshotTestRunner.kt | 17 + .../sample/helpers/SetFabSizeAction.kt | 25 ++ sample/src/main/AndroidManifest.xml | 5 +- 18 files changed, 646 insertions(+), 361 deletions(-) create mode 100644 .circleci/config.yml create mode 100644 configuration/properties.gradle delete mode 100644 counterfab/src/main/java/com/andremion/counterfab/CounterFab.java create mode 100644 counterfab/src/main/java/com/andremion/counterfab/CounterFab.kt create mode 100644 sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldKeepStateAfterOrientationChanged.png create mode 100644 sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderProperly.png create mode 100644 sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderProperlyAfterOrientationChanged.png create mode 100644 sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderSizeMiniProperly.png create mode 100644 sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderSizeMiniWithCountProperly.png create mode 100644 sample/src/androidTest/AndroidManifest.xml create mode 100644 sample/src/androidTest/java/com/andremion/counterfab/sample/MainActivityTest.kt create mode 100644 sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/ScreenshotTestRunner.kt create mode 100644 sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/SetFabSizeAction.kt diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..0126f4c --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,164 @@ +version: 2 + +references: + + ## Cache + + cache_key: &cache_key + key: cache-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "counterfab/build.gradle" }}-{{ checksum "sample/build.gradle" }} + restore_cache: &restore_cache + restore_cache: + <<: *cache_key + save_cache: &save_cache + save_cache: + <<: *cache_key + paths: + - ~/.gradle + - ~/.m2 + + ## Workspace + + workspace: &workspace + ~/workspace + attach_debug_workspace: &attach_debug_workspace + attach_workspace: + at: *workspace + persist_debug_workspace: &persist_debug_workspace + persist_to_workspace: + root: *workspace + paths: + - sample/build/outputs/androidTest-results + - sample/build/outputs/apk + - sample/build/outputs/code-coverage + attach_firebase_workspace: &attach_firebase_workspace + attach_workspace: + at: *workspace + persist_firebase_workspace: &persist_firebase_workspace + persist_to_workspace: + root: *workspace + paths: + - firebase + + ## Docker image configurations + + android_config: &android_config + working_directory: *workspace + docker: + - image: circleci/android:api-28-alpha + environment: + TERM: dumb + _JAVA_OPTIONS: "-Xmx2048m -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap" + GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m"' + gcloud_config: &gcloud_config + working_directory: *workspace + docker: + - image: google/cloud-sdk:latest + environment: + TERM: dumb + + # Google Cloud Service + + export_gcloud_key: &export_gcloud_key + run: + name: Export Google Cloud Service key environment variable + command: echo 'export GCLOUD_SERVICE_KEY="$GCLOUD_SERVICE_KEY"' >> $BASH_ENV + decode_gcloud_key: &decode_gcloud_key + run: + name: Decode Google Cloud credentials + command: echo $GCLOUD_SERVICE_KEY | base64 -di > ${HOME}/client-secret.json + +jobs: + + ## Build debug APK and instrumented test APK + + build_debug: + <<: *android_config + steps: + - checkout + - *restore_cache + - run: + name: Download dependencies + command: ./gradlew androidDependencies + - *save_cache + - run: + name: Gradle build (debug) + command: ./gradlew assembleDebug assembleAndroidTest + - *persist_debug_workspace + - store_artifacts: + path: sample/build/outputs/apk/ + destination: apk + + ## Run instrumented tests + + test_instrumented: + <<: *gcloud_config + steps: + - *attach_debug_workspace + - *export_gcloud_key + - *decode_gcloud_key + - run: + name: Set Google Cloud target project + command: gcloud config set project counterfab-b6643 + - run: + name: Authenticate with Google Cloud + command: gcloud auth activate-service-account --key-file ${HOME}/client-secret.json + - run: + name: Run instrumented test on Firebase Test Lab + command: >- + gcloud firebase test android run --no-auto-google-login + --type instrumentation + --app sample/build/outputs/apk/debug/sample-debug.apk + --test sample/build/outputs/apk/androidTest/debug/sample-debug-androidTest.apk + --device model=walleye,version=28,locale=en_US,orientation=portrait + --environment-variables coverage=true,coverageFile=/sdcard/coverage.ec + --directories-to-pull=/sdcard + --timeout 20m + - run: + name: Create directory to store test results + command: mkdir firebase + - run: + name: Download instrumented test results from Firebase Test Lab + command: gsutil -m cp -r -U "`gsutil ls gs://test-lab-734qaq4mq93km-wb8y9z8s6fud2 | tail -1`*" /root/workspace/firebase/ + - *persist_firebase_workspace + - store_artifacts: + path: firebase/ + destination: instrumentation + - store_test_results: + path: firebase/ + + ## Submit screenshot tests + + report_screenshot_tests: + <<: *android_config + steps: + - checkout + - *restore_cache + - run: + name: Download dependencies + command: ./gradlew androidDependencies + - *attach_debug_workspace + - *attach_firebase_workspace + - run: + name: Move Firebase screenshot resources + command: >- + mkdir -p sample/screenshots && + cp -r firebase/walleye-28-en_US-portrait/artifacts/sdcard/screenshots/com.andremion.counterfab.sample.test/* + sample/screenshots/ + - run: + name: Generate Screenshot test report + command: ./gradlew executeScreenshotTests + - store_artifacts: + path: sample/build/reports/shot/verification/ + destination: reports + +workflows: + version: 2 + workflow: + jobs: + - build_debug + - test_instrumented: + requires: + - build_debug + - report_screenshot_tests: + requires: + - test_instrumented \ No newline at end of file diff --git a/README.md b/README.md index ff2a799..4730a8d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [![License Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=true)](http://www.apache.org/licenses/LICENSE-2.0) ![minSdkVersion 16](https://img.shields.io/badge/minSdkVersion-16-red.svg?style=true) ![compileSdkVersion 24](https://img.shields.io/badge/compileSdkVersion-24-yellow.svg?style=true) +[![CircleCI](https://circleci.com/gh/andremion/CounterFab.svg?style=svg)](https://circleci.com/gh/andremion/CounterFab) [![Download](https://api.bintray.com/packages/andremion/github/CounterFab/images/download.svg)](https://bintray.com/andremion/github/CounterFab/_latestVersion) [![Android Arsenal CounterFab](https://img.shields.io/badge/Android%20Arsenal-CounterFab-green.svg?style=true)](https://android-arsenal.com/details/1/5052) diff --git a/build.gradle b/build.gradle index 10355b4..07e4368 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,14 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { repositories { - jcenter() google() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' - classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' + apply from: 'configuration/properties.gradle' + classpath 'com.android.tools.build:gradle:3.3.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${compiling.kotlinVersion}" + classpath 'com.karumi:shot:2.2.0' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } } @@ -17,22 +18,13 @@ plugins { allprojects { repositories { - jcenter() google() + jcenter() } project.ext { - compileSdkVersion = 28 - minSdkVersion = 16 - targetSdkVersion = 28 - - versionCode = 7 - versionName = "1.2.1" - - materialVersion = '1.0.0' - - junitVersion = '4.12' - espressoCoreVersion = '3.1.1' + versionCode = 9 + versionName = '1.2.2' name = 'CounterFab' description = 'A FloatingActionButton subclass that shows a counter badge on right top corner' @@ -40,7 +32,7 @@ allprojects { licenseName = 'The Apache Software License, Version 2.0' licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - allLicenses = ["Apache-2.0"] + allLicenses = ['Apache-2.0'] bintrayRepo = 'github' group = 'com.github.andremion' diff --git a/configuration/properties.gradle b/configuration/properties.gradle new file mode 100644 index 0000000..cc5ce17 --- /dev/null +++ b/configuration/properties.gradle @@ -0,0 +1,39 @@ +project.ext { + + compiling = [ + javaVersion : JavaVersion.VERSION_1_8, + kotlinVersion: '1.3.21' + ] + + android = [ + compileSdkVersion: 28, + minSdkVersion : 16, + targetSdkVersion : 28 + ] + + application = [ + id: 'com.andremion.counterfab.sample' + ] + + aux = [ + appCompatVersion: '1.0.2', + ktxCoreVersion : '1.0.1' + ] + + ui = [ + materialVersion: '1.0.0' + ] + + testing = [ + junitVersion : '4.12', + espressoCoreVersion : '3.1.1', + rulesVersion : '1.1.1', + screenshotTestingVersion: '0.8.0' + ] + + building = [ + runningOnCI : System.getenv('CI') == 'true', + // allows for -DpreDex=false to be set + preDexEnabled: System.getProperty('preDex', 'true') == 'true' + ] +} \ No newline at end of file diff --git a/counterfab/build.gradle b/counterfab/build.gradle index c871c76..fc47f17 100644 --- a/counterfab/build.gradle +++ b/counterfab/build.gradle @@ -1,15 +1,19 @@ apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' +def deps = rootProject.extensions.ext + android { - compileSdkVersion project.ext.compileSdkVersion + compileSdkVersion deps.android.compileSdkVersion defaultConfig { - minSdkVersion project.ext.minSdkVersion - targetSdkVersion project.ext.targetSdkVersion - versionCode project.ext.versionCode - versionName project.ext.versionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + minSdkVersion deps.android.minSdkVersion + targetSdkVersion deps.android.targetSdkVersion + versionCode deps.versionCode + versionName deps.versionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { @@ -21,11 +25,14 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation "com.google.android.material:material:$materialVersion" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$compiling.kotlinVersion" + implementation "com.google.android.material:material:$ui.materialVersion" + implementation "androidx.appcompat:appcompat:$aux.appCompatVersion" + implementation "androidx.core:core-ktx:$aux.ktxCoreVersion" - testImplementation "junit:junit:$junitVersion" + testImplementation "junit:junit:$testing.junitVersion" - androidTestImplementation "androidx.test.espresso:espresso-core:$espressoCoreVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$testing.espressoCoreVersion" } //apply from: 'https://raw.githubusercontent.com/andremion/JCenter/master/deploy.gradle' diff --git a/counterfab/src/main/java/com/andremion/counterfab/CounterFab.java b/counterfab/src/main/java/com/andremion/counterfab/CounterFab.java deleted file mode 100644 index d5b5c43..0000000 --- a/counterfab/src/main/java/com/andremion/counterfab/CounterFab.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2017. André Mion - * - * 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.andremion.counterfab; - -import android.animation.ObjectAnimator; -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Paint.Style; -import android.graphics.Rect; -import android.graphics.Typeface; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.util.Property; -import android.view.animation.Interpolator; -import android.view.animation.OvershootInterpolator; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.stateful.ExtendableSavedState; - -import androidx.annotation.IntRange; -import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; - -import static com.google.android.material.R.attr; - -/** - * A {@link FloatingActionButton} subclass that shows a counter badge on right top corner. - */ -public class CounterFab extends FloatingActionButton { - - private static final String STATE_KEY = CounterFab.class.getName() + ".STATE"; - private static final String COUNT_STATE = "COUNT"; - - private final Property ANIMATION_PROPERTY = - new Property(Float.class, "animation") { - - @Override - public void set(CounterFab object, Float value) { - mAnimationFactor = value; - postInvalidateOnAnimation(); - } - - @Override - public Float get(CounterFab object) { - return 0f; - } - }; - - private static final int NORMAL_MAX_COUNT = 99; - private static final String NORMAL_MAX_COUNT_TEXT = "99+"; - - private static final int MINI_MAX_COUNT = 9; - private static final String MINI_MAX_COUNT_TEXT = "9+"; - - private static final int TEXT_SIZE_DP = 11; - private static final int TEXT_PADDING_DP = 2; - private static final int MASK_COLOR = Color.parseColor("#33000000"); // Translucent black as mask color - private static final Interpolator ANIMATION_INTERPOLATOR = new OvershootInterpolator(); - - private final Rect mContentBounds; - private final Paint mTextPaint; - private final float mTextSize; - private final Paint mCirclePaint; - private final Rect mCircleBounds; - private final Paint mMaskPaint; - private final int mAnimationDuration; - private float mAnimationFactor; - - private int mCount; - private String mText; - private final float mTextHeight; - private ObjectAnimator mAnimator; - - private int badgePosition = RIGHT_TOP_POSITION; - private static final int RIGHT_TOP_POSITION = 0; - private static final int LEFT_BOTTOM_POSITION = 1; - private static final int LEFT_TOP_POSITION = 2; - private static final int RIGHT_BOTTOM_POSITION = 3; - - public CounterFab(Context context) { - this(context, null); - } - - public CounterFab(Context context, AttributeSet attrs) { - this(context, attrs, attr.floatingActionButtonStyle); - } - - public CounterFab(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - float density = getResources().getDisplayMetrics().density; - mTextSize = TEXT_SIZE_DP * density; - float textPadding = TEXT_PADDING_DP * density; - - mAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime); - mAnimationFactor = 1; - - mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mTextPaint.setStyle(Style.FILL_AND_STROKE); - mTextPaint.setTextSize(mTextSize); - mTextPaint.setTextAlign(Paint.Align.CENTER); - mTextPaint.setTypeface(Typeface.SANS_SERIF); - - mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mCirclePaint.setStyle(Paint.Style.FILL); - - int defaultBadgeColor = getDefaultBadgeColor(); - - setupFromStyledAttributes(context, attrs, defaultBadgeColor); - - mMaskPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mMaskPaint.setStyle(Paint.Style.FILL); - mMaskPaint.setColor(MASK_COLOR); - - Rect textBounds = new Rect(); - mTextPaint.getTextBounds(NORMAL_MAX_COUNT_TEXT, 0, NORMAL_MAX_COUNT_TEXT.length(), textBounds); - mTextHeight = textBounds.height(); - - float textWidth = mTextPaint.measureText(NORMAL_MAX_COUNT_TEXT); - float circleRadius = Math.max(textWidth, mTextHeight) / 2f + textPadding; - int circleEnd = (int) (circleRadius * 2); - if (isSizeMini()) { - int circleStart = (int) (circleRadius / 2); - mCircleBounds = new Rect(circleStart, circleStart, circleEnd, circleEnd); - } else { - int circleStart = 0; - mCircleBounds = new Rect(circleStart, circleStart, (int) (circleRadius * 2), (int) (circleRadius * 2)); - } - mContentBounds = new Rect(); - - onCountChanged(); - } - - private int getDefaultBadgeColor() { - int defaultBadgeColor = mCirclePaint.getColor(); - ColorStateList colorStateList = getBackgroundTintList(); - if (colorStateList != null) { - defaultBadgeColor = colorStateList.getDefaultColor(); - } else { - Drawable background = getBackground(); - if (background instanceof ColorDrawable) { - ColorDrawable colorDrawable = (ColorDrawable) background; - defaultBadgeColor = colorDrawable.getColor(); - } - } - return defaultBadgeColor; - } - - private void setupFromStyledAttributes(Context context, @Nullable AttributeSet attrs, int defaultBadgeColor) { - TypedArray styledAttributes = context.getTheme() - .obtainStyledAttributes(attrs, R.styleable.CounterFab, 0, 0); - mTextPaint.setColor(styledAttributes.getColor(R.styleable.CounterFab_badgeTextColor, Color.WHITE)); - mCirclePaint.setColor(styledAttributes.getColor(R.styleable.CounterFab_badgeBackgroundColor, defaultBadgeColor)); - badgePosition = styledAttributes.getInt(R.styleable.CounterFab_badgePosition, RIGHT_TOP_POSITION); - styledAttributes.recycle(); - } - - private boolean isSizeMini() { - return getSize() == SIZE_MINI; - } - - /** - * @return The current count value - */ - public int getCount() { - return mCount; - } - - /** - * Set the count to show on badge - * - * @param count The count value starting from 0 - */ - public void setCount(@IntRange(from = 0) int count) { - if (count == mCount) return; - mCount = count > 0 ? count : 0; - onCountChanged(); - if (ViewCompat.isLaidOut(this)) { - startAnimation(); - } - } - - /** - * Increase the current count value by 1 - */ - public void increase() { - setCount(mCount + 1); - } - - /** - * Decrease the current count value by 1 - */ - public void decrease() { - setCount(mCount > 0 ? mCount - 1 : 0); - } - - private void onCountChanged() { - if (isSizeMini()) { - if (mCount > MINI_MAX_COUNT) { - mText = String.valueOf(MINI_MAX_COUNT_TEXT); - } else { - mText = String.valueOf(mCount); - } - } else { - if (mCount > NORMAL_MAX_COUNT) { - mText = String.valueOf(NORMAL_MAX_COUNT_TEXT); - } else { - mText = String.valueOf(mCount); - } - } - } - - private void startAnimation() { - float start = 0f; - float end = 1f; - if (mCount == 0) { - start = 1f; - end = 0f; - } - if (isAnimating()) { - mAnimator.cancel(); - } - mAnimator = ObjectAnimator.ofObject(this, ANIMATION_PROPERTY, null, start, end); - mAnimator.setInterpolator(ANIMATION_INTERPOLATOR); - mAnimator.setDuration(mAnimationDuration); - mAnimator.start(); - } - - private boolean isAnimating() { - return mAnimator != null && mAnimator.isRunning(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - if (mCount > 0 || isAnimating()) { - if (getContentRect(mContentBounds)) { - int newLeft; - int newTop; - switch (badgePosition) { - case LEFT_BOTTOM_POSITION: - newLeft = mContentBounds.left; - newTop = mContentBounds.bottom - mCircleBounds.height(); - break; - case LEFT_TOP_POSITION: - newLeft = mContentBounds.left; - newTop = mContentBounds.top; - break; - case RIGHT_BOTTOM_POSITION: - newLeft = mContentBounds.left + mContentBounds.width() - mCircleBounds.width(); - newTop = mContentBounds.bottom - mCircleBounds.height(); - break; - case RIGHT_TOP_POSITION: - default: - newLeft = mContentBounds.left + mContentBounds.width() - mCircleBounds.width(); - newTop = mContentBounds.top; - } - mCircleBounds.offsetTo(newLeft, newTop); - } - float cx = mCircleBounds.centerX(); - float cy = mCircleBounds.centerY(); - float radius = mCircleBounds.width() / 2f * mAnimationFactor; - // Solid circle - canvas.drawCircle(cx, cy, radius, mCirclePaint); - // Mask circle - canvas.drawCircle(cx, cy, radius, mMaskPaint); - // Count text - mTextPaint.setTextSize(mTextSize * mAnimationFactor); - canvas.drawText(mText, cx, cy + mTextHeight / 2f, mTextPaint); - } - } - - @Override - public Parcelable onSaveInstanceState() { - Parcelable superState = super.onSaveInstanceState(); - ExtendableSavedState state = new ExtendableSavedState(superState); - - Bundle bundle = new Bundle(); - bundle.putInt(COUNT_STATE, mCount); - state.extendableStates.put(STATE_KEY, bundle); - - return state; - } - - @Override - public void onRestoreInstanceState(Parcelable state) { - if (!(state instanceof ExtendableSavedState)) { - super.onRestoreInstanceState(state); - return; - } - - ExtendableSavedState extendableState = (ExtendableSavedState) state; - super.onRestoreInstanceState(extendableState.getSuperState()); - - Bundle bundle = extendableState.extendableStates.get(STATE_KEY); - setCount(bundle.getInt(COUNT_STATE)); - requestLayout(); - } - -} diff --git a/counterfab/src/main/java/com/andremion/counterfab/CounterFab.kt b/counterfab/src/main/java/com/andremion/counterfab/CounterFab.kt new file mode 100644 index 0000000..e6e33e1 --- /dev/null +++ b/counterfab/src/main/java/com/andremion/counterfab/CounterFab.kt @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2017. André Mion + * + * 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.andremion.counterfab + +import android.animation.ObjectAnimator +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Paint.Style +import android.graphics.Rect +import android.graphics.Typeface +import android.graphics.drawable.ColorDrawable +import android.os.Parcelable +import android.util.AttributeSet +import android.util.Property +import android.view.animation.OvershootInterpolator +import androidx.annotation.IntRange +import androidx.core.graphics.ColorUtils +import androidx.core.os.bundleOf +import androidx.core.view.ViewCompat +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.stateful.ExtendableSavedState +import kotlin.math.max + +private val STATE_KEY = CounterFab::class.java.name + ".STATE" +private const val COUNT_STATE = "COUNT" + +private const val NORMAL_MAX_COUNT = 99 +private const val NORMAL_MAX_COUNT_TEXT = "99+" + +private const val MINI_MAX_COUNT = 9 +private const val MINI_MAX_COUNT_TEXT = "9+" + +private const val TEXT_SIZE_DP = 11 +private const val TEXT_PADDING_DP = 2 +private val MASK_COLOR = Color.parseColor("#33000000") // Translucent black as mask color +private val ANIMATION_INTERPOLATOR = OvershootInterpolator() +private const val RIGHT_TOP_POSITION = 0 +private const val LEFT_BOTTOM_POSITION = 1 +private const val LEFT_TOP_POSITION = 2 +private const val RIGHT_BOTTOM_POSITION = 3 + +/** + * A [FloatingActionButton] subclass that shows a counter badge on right top corner. + */ +class CounterFab @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = R.attr.floatingActionButtonStyle +) : FloatingActionButton(context, attrs, defStyleAttr) { + + private val animationProperty = object : Property(Float::class.java, "animation") { + + override fun set(counterFab: CounterFab, value: Float) { + animationFactor = value + postInvalidateOnAnimation() + } + + override fun get(counterFab: CounterFab): Float { + return 0f + } + } + + private val textSize = TEXT_SIZE_DP * resources.displayMetrics.density + private val textPadding = TEXT_PADDING_DP * resources.displayMetrics.density + + private val circlePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Style.FILL + } + private val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + style = Style.FILL_AND_STROKE + textSize = this@CounterFab.textSize + textAlign = Paint.Align.CENTER + typeface = Typeface.SANS_SERIF + } + private val textBounds: Rect = run { + val maxCountText = NORMAL_MAX_COUNT_TEXT + val textBounds = Rect() + textPaint.getTextBounds(maxCountText, 0, maxCountText.length, textBounds) + textBounds + } + private val circleBounds = Rect() + private val contentBounds = Rect() + + private val animationDuration = resources.getInteger(android.R.integer.config_shortAnimTime) + private var animationFactor = 1f + private var animator = ObjectAnimator() + private val isAnimating: Boolean + get() = animator.isRunning + private val isSizeMini: Boolean + get() = size == SIZE_MINI + private val badgePosition: Int + private var countText: String = "" + + /** + * The count value to show on badge starting from 0 + */ + var count: Int = 0 + set(@IntRange(from = 0) value) { + if (value == field) return + field = if (value > 0) value else 0 + + updateCountText() + if (ViewCompat.isLaidOut(this)) { + startAnimation() + } + } + + init { + val styledAttributes = context.theme.obtainStyledAttributes( + attrs, R.styleable.CounterFab, 0, 0 + ) + textPaint.color = styledAttributes.getColor(R.styleable.CounterFab_badgeTextColor, Color.WHITE) + circlePaint.color = styledAttributes.getColor(R.styleable.CounterFab_badgeBackgroundColor, getDefaultBadgeColor()) + badgePosition = styledAttributes.getInt(R.styleable.CounterFab_badgePosition, RIGHT_TOP_POSITION) + styledAttributes.recycle() + + updateCountText() + } + + private fun updateCountText() { + countText = if (isSizeMini) when { + count > MINI_MAX_COUNT -> MINI_MAX_COUNT_TEXT + else -> count.toString() + } + else when { + count > NORMAL_MAX_COUNT -> NORMAL_MAX_COUNT_TEXT + else -> count.toString() + } + } + + private fun getDefaultBadgeColor(): Int = run { + val colorStateList = backgroundTintList + if (colorStateList != null) { + colorStateList.defaultColor + } else { + val background = background + if (background is ColorDrawable) { + background.color + } else { + circlePaint.color + } + } + }.applyColorMask() + + private fun Int.applyColorMask() = ColorUtils.compositeColors(MASK_COLOR, this) + + /** + * Increase the current count value by 1 + */ + fun increase() { + count += 1 + } + + /** + * Decrease the current count value by 1 + */ + fun decrease() { + count = if (count > 0) count - 1 else 0 + } + + private fun startAnimation() { + var start = 0f + var end = 1f + if (count == 0) { + start = 1f + end = 0f + } + + if (isAnimating) animator.cancel() + + animator = ObjectAnimator.ofObject( + this, animationProperty, null, start, end + ).apply { + interpolator = ANIMATION_INTERPOLATOR + duration = animationDuration.toLong() + start() + } + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + calculateCircleBounds() + } + + private fun calculateCircleBounds() { + val circleRadius = max(textBounds.width(), textBounds.height()) / 2f + textPadding + val circleEnd = (circleRadius * 2).toInt() + if (isSizeMini) { + val circleStart = (circleRadius / 2).toInt() + circleBounds.set(circleStart, circleStart, circleEnd, circleEnd) + } else { + val circleStart = 0 + circleBounds.set(circleStart, circleStart, (circleRadius * 2).toInt(), (circleRadius * 2).toInt()) + } + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + if (count > 0 || isAnimating) { + if (getContentRect(contentBounds)) { + val newLeft: Int + val newTop: Int + when (badgePosition) { + LEFT_BOTTOM_POSITION -> { + newLeft = contentBounds.left + newTop = contentBounds.bottom - circleBounds.height() + } + LEFT_TOP_POSITION -> { + newLeft = contentBounds.left + newTop = contentBounds.top + } + RIGHT_BOTTOM_POSITION -> { + newLeft = contentBounds.left + contentBounds.width() - circleBounds.width() + newTop = contentBounds.bottom - circleBounds.height() + } + RIGHT_TOP_POSITION -> { + newLeft = contentBounds.left + contentBounds.width() - circleBounds.width() + newTop = contentBounds.top + } + else -> { + newLeft = contentBounds.left + contentBounds.width() - circleBounds.width() + newTop = contentBounds.top + } + } + circleBounds.offsetTo(newLeft, newTop) + } + val cx = circleBounds.centerX().toFloat() + val cy = circleBounds.centerY().toFloat() + val radius = circleBounds.width() / 2f * animationFactor + // Solid circle + canvas.drawCircle(cx, cy, radius, circlePaint) + // Count text + textPaint.textSize = textSize * animationFactor + canvas.drawText(countText, cx, cy + textBounds.height() / 2f, textPaint) + } + } + + override fun onSaveInstanceState(): Parcelable? { + val superState = super.onSaveInstanceState() + if (superState is ExtendableSavedState) { + superState.extendableStates.put(STATE_KEY, bundleOf(COUNT_STATE to count)) + } + return superState + } + + override fun onRestoreInstanceState(state: Parcelable?) { + super.onRestoreInstanceState(state) + if (state !is ExtendableSavedState) return + + val bundle = state.extendableStates.get(STATE_KEY) + count = bundle?.getInt(COUNT_STATE) ?: 0 + + requestLayout() + } +} \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index fdb8dee..6557d6c 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,14 +1,23 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'shot' + +def deps = rootProject.extensions.ext android { - compileSdkVersion project.ext.compileSdkVersion + compileSdkVersion deps.android.compileSdkVersion defaultConfig { - applicationId "com.andremion.counterfab.sample" - minSdkVersion project.ext.minSdkVersion - targetSdkVersion project.ext.targetSdkVersion - versionCode project.ext.versionCode - versionName project.ext.versionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + applicationId deps.application.id + minSdkVersion deps.android.minSdkVersion + targetSdkVersion deps.android.targetSdkVersion + versionCode deps.versionCode + versionName deps.versionName + testInstrumentationRunner "${deps.application.id}.helpers.ScreenshotTestRunner" + } + dexOptions { + // Skip pre-dexing when running on CI or when disabled via -DpreDex=false. + preDexLibraries !deps.building.runningOnCI && deps.building.preDexEnabled } buildTypes { release { @@ -18,12 +27,24 @@ android { } } +shot { + appId = deps.application.id + runInstrumentation = false +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':counterfab') - implementation "com.google.android.material:material:$materialVersion" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$compiling.kotlinVersion" + implementation "com.google.android.material:material:$ui.materialVersion" + implementation "androidx.appcompat:appcompat:$aux.appCompatVersion" - testImplementation "junit:junit:$junitVersion" + testImplementation "junit:junit:$testing.junitVersion" - androidTestImplementation "androidx.test.espresso:espresso-core:$espressoCoreVersion" -} + androidTestImplementation "androidx.test.espresso:espresso-core:$testing.espressoCoreVersion" + androidTestImplementation "androidx.test:rules:$testing.rulesVersion" + androidTestImplementation dependencies.create("com.facebook.testing.screenshot:core:$testing.screenshotTestingVersion") { + exclude group: 'com.crittercism.dexmaker', module: 'dexmaker' + exclude group: 'com.crittercism.dexmaker', module: 'dexmaker-dx' + } +} \ No newline at end of file diff --git a/sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldKeepStateAfterOrientationChanged.png b/sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldKeepStateAfterOrientationChanged.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4714f931c47f45dd2b8841c7dabf1dbe971063 GIT binary patch literal 37978 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 literal 0 HcmV?d00001 diff --git a/sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderProperly.png b/sample/screenshots/com.andremion.counterfab.sample.MainActivityTest_shouldRenderProperly.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c7f149a7c031c242c1e512aa06c51eed1bb4eb GIT binary patch literal 38595 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

t{k>6 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 ffW-e7NDS=_w176J;@8L7N9U@pu} + + + + + \ No newline at end of file diff --git a/sample/src/androidTest/java/com/andremion/counterfab/sample/MainActivityTest.kt b/sample/src/androidTest/java/com/andremion/counterfab/sample/MainActivityTest.kt new file mode 100644 index 0000000..25426a4 --- /dev/null +++ b/sample/src/androidTest/java/com/andremion/counterfab/sample/MainActivityTest.kt @@ -0,0 +1,60 @@ +package com.andremion.counterfab.sample + +import android.content.pm.ActivityInfo +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.ActivityTestRule +import com.andremion.counterfab.sample.helpers.setFabSize +import com.facebook.testing.screenshot.Screenshot +import com.google.android.material.floatingactionbutton.FloatingActionButton +import org.junit.Rule +import org.junit.Test + +class MainActivityTest { + + @get:Rule + val testRule = ActivityTestRule(MainActivity::class.java) + + @Test + fun shouldRenderProperly() { + + Screenshot.snapActivity(testRule.activity).record() + } + + @Test + fun shouldRenderProperlyAfterOrientationChanged() { + + testRule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + InstrumentationRegistry.getInstrumentation().waitForIdleSync() + + Screenshot.snapActivity(testRule.activity).record() + } + + @Test + fun shouldKeepStateAfterOrientationChanged() { + onView(withId(R.id.fab)).perform(click(), click()) + + testRule.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + InstrumentationRegistry.getInstrumentation().waitForIdleSync() + + Screenshot.snapActivity(testRule.activity).record() + } + + @Test + fun shouldRenderSizeMiniProperly() { + onView(withId(R.id.fab)).perform(setFabSize(FloatingActionButton.SIZE_MINI)) + + Screenshot.snapActivity(testRule.activity).record() + } + + @Test + fun shouldRenderSizeMiniWithCountProperly() { + onView(withId(R.id.fab)).perform( + setFabSize(FloatingActionButton.SIZE_MINI), click(), click() + ) + + Screenshot.snapActivity(testRule.activity).record() + } +} \ No newline at end of file diff --git a/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/ScreenshotTestRunner.kt b/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/ScreenshotTestRunner.kt new file mode 100644 index 0000000..f0d1953 --- /dev/null +++ b/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/ScreenshotTestRunner.kt @@ -0,0 +1,17 @@ +package com.andremion.counterfab.sample.helpers + +import android.os.Bundle +import androidx.test.runner.AndroidJUnitRunner +import com.facebook.testing.screenshot.ScreenshotRunner + +class ScreenshotTestRunner : AndroidJUnitRunner() { + override fun onCreate(arguments: Bundle) { + ScreenshotRunner.onCreate(this, arguments) + super.onCreate(arguments) + } + + override fun finish(resultCode: Int, results: Bundle) { + ScreenshotRunner.onDestroy() + super.finish(resultCode, results) + } +} \ No newline at end of file diff --git a/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/SetFabSizeAction.kt b/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/SetFabSizeAction.kt new file mode 100644 index 0000000..7c86e0c --- /dev/null +++ b/sample/src/androidTest/java/com/andremion/counterfab/sample/helpers/SetFabSizeAction.kt @@ -0,0 +1,25 @@ +package com.andremion.counterfab.sample.helpers + +import android.view.View +import androidx.test.espresso.UiController +import androidx.test.espresso.ViewAction +import androidx.test.espresso.matcher.ViewMatchers +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.floatingactionbutton.FloatingActionButton.Size +import org.hamcrest.Matcher + +fun setFabSize(@Size fabSize: Int) = SetFabSizeAction(fabSize) + +class SetFabSizeAction(@Size private val fabSize: Int) : ViewAction { + + override fun getConstraints(): Matcher { + return ViewMatchers.isAssignableFrom(FloatingActionButton::class.java) + } + + override fun perform(uiController: UiController, view: View) { + val floatingActionButton = view as FloatingActionButton + floatingActionButton.size = fabSize + } + + override fun getDescription() = "set fab size to" +} \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 53afacb..27e94fe 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ - +