From 6896d5058e62bbf4b4c5c5af3d0c2863906aa651 Mon Sep 17 00:00:00 2001 From: angien Date: Tue, 5 Jan 2021 12:39:30 -0800 Subject: [PATCH] Initial commit --- .gitignore | 15 ++ .travis.yml | 10 + CONTRIBUTORS | 1 + LICENSE | 21 ++ README.md | 58 +++++ build.gradle | 26 ++ gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 +++++++++++++ gradlew.bat | 84 +++++++ images/redux.png | Bin 0 -> 104265 bytes redux/.gitignore | 1 + redux/build.gradle | 13 + redux/consumer-rules.pro | 0 redux/proguard-rules.pro | 21 ++ .../src/main/java/com/workday/redux/Action.kt | 3 + .../main/java/com/workday/redux/Dispatch.kt | 3 + .../main/java/com/workday/redux/Middleware.kt | 8 + .../main/java/com/workday/redux/Reducer.kt | 3 + .../com/workday/redux/SingleThreadedStore.kt | 52 ++++ .../src/main/java/com/workday/redux/State.kt | 3 + .../src/main/java/com/workday/redux/Store.kt | 5 + .../java/com/workday/redux/Subscription.kt | 5 + .../src/test/java/com/workday/redux/Mocks.kt | 47 ++++ .../workday/redux/SingleThreadedStoreTest.kt | 232 ++++++++++++++++++ sample/.gitignore | 1 + sample/build.gradle | 38 +++ sample/proguard-rules.pro | 21 ++ sample/src/main/AndroidManifest.xml | 21 ++ .../com/workday/kotlinredux/CounterAction.kt | 8 + .../workday/kotlinredux/LoggingMiddleware.kt | 18 ++ .../com/workday/kotlinredux/MainActivity.kt | 46 ++++ .../com/workday/kotlinredux/MainReducer.kt | 16 ++ .../java/com/workday/kotlinredux/MainState.kt | 7 + .../drawable-v24/ic_launcher_foreground.xml | 30 +++ .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++ sample/src/main/res/layout/activity_main.xml | 40 +++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3593 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5339 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2636 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3388 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4926 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7909 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11873 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10652 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16570 bytes sample/src/main/res/values/colors.xml | 6 + sample/src/main/res/values/strings.xml | 3 + sample/src/main/res/values/styles.xml | 10 + settings.gradle | 3 + 54 files changed, 1258 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 CONTRIBUTORS create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 images/redux.png create mode 100644 redux/.gitignore create mode 100644 redux/build.gradle create mode 100644 redux/consumer-rules.pro create mode 100644 redux/proguard-rules.pro create mode 100644 redux/src/main/java/com/workday/redux/Action.kt create mode 100644 redux/src/main/java/com/workday/redux/Dispatch.kt create mode 100644 redux/src/main/java/com/workday/redux/Middleware.kt create mode 100644 redux/src/main/java/com/workday/redux/Reducer.kt create mode 100644 redux/src/main/java/com/workday/redux/SingleThreadedStore.kt create mode 100644 redux/src/main/java/com/workday/redux/State.kt create mode 100644 redux/src/main/java/com/workday/redux/Store.kt create mode 100644 redux/src/main/java/com/workday/redux/Subscription.kt create mode 100644 redux/src/test/java/com/workday/redux/Mocks.kt create mode 100644 redux/src/test/java/com/workday/redux/SingleThreadedStoreTest.kt create mode 100644 sample/.gitignore create mode 100644 sample/build.gradle create mode 100644 sample/proguard-rules.pro create mode 100644 sample/src/main/AndroidManifest.xml create mode 100644 sample/src/main/java/com/workday/kotlinredux/CounterAction.kt create mode 100644 sample/src/main/java/com/workday/kotlinredux/LoggingMiddleware.kt create mode 100644 sample/src/main/java/com/workday/kotlinredux/MainActivity.kt create mode 100644 sample/src/main/java/com/workday/kotlinredux/MainReducer.kt create mode 100644 sample/src/main/java/com/workday/kotlinredux/MainState.kt create mode 100644 sample/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 sample/src/main/res/drawable/ic_launcher_background.xml create mode 100644 sample/src/main/res/layout/activity_main.xml create mode 100644 sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 sample/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 sample/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 sample/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 sample/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 sample/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 sample/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 sample/src/main/res/values/colors.xml create mode 100644 sample/src/main/res/values/strings.xml create mode 100644 sample/src/main/res/values/styles.xml create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a07a74c --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/ +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..70d4348 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: android +dist: trusty +android: + components: + - tools + - platform-tools + - build-tools-26.0.2 + - android-26 + - add-on + - extra \ No newline at end of file diff --git a/CONTRIBUTORS b/CONTRIBUTORS new file mode 100644 index 0000000..ec2411c --- /dev/null +++ b/CONTRIBUTORS @@ -0,0 +1 @@ +Angie Nguyen \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e951ed5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Workday + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0feabe8 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# kotlin-redux + +This library is a simplified implementation of Redux written in Kotlin for Android. + +Redux is an architecture that was originally created in JavaScript: https://redux.js.org/. It follows a strict, unidirectional flow of data, and makes state predictable. It achieves this by ensuring the state is the single source of truth and immutable, and that changes to the state are done through pure functions. + +![Diagram of Redux](images/redux.png) + +## Installation + +Add the following lines to your build.gradle file, replacing $kotlin_redux_version with latest version from Maven Central. + +``` +repositories { + mavenCentral() +} + +dependencies { + compile "com.workday:kotlin-redux:$kotlin_redux_version" + compile "com.workday:kotlin-redux:$kotlin_redux_version" +} +``` + +## How To + +To create a store: + +``` +val store = SingleThreadedStore( + state = MainState(...), + reducer = MainReducer(), + middleware = listOf(ExampleMiddleware(), AnotherMiddleware()) +) +``` + +To subscribe to the store: + +``` +val storeUnsubscriber = store.subscribe { currentState, dispatch -> + ... +} +``` + +Ensure that you also unsubscribe from the store by calling: + +``` +storeUnsubscriber.invoke() +``` + +Avoid dispatching multiple times in a row as per Redux best practices. To dispatch actions: + +``` +dispatch(ExampleAction) +``` + +## Sample + +See the sample app in the [sample](/sample) module for additional reference. The sample app is a simple counter, which shows a count and allows the user to increment and decrement the count. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..dc389d2 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + ext.kotlin_version = "1.4.10" + repositories { + google() + jcenter() + } + dependencies { + classpath "com.android.tools.build:gradle:4.0.2" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..4d15d01 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718 GIT binary patch literal 54329 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

<5G2M1WZP5 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 F{|7XC?P&l2 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..5abb905 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Dec 02 17:44:50 PST 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/images/redux.png b/images/redux.png new file mode 100644 index 0000000000000000000000000000000000000000..cc14b6a9eaca9ed6dd7da1ee5f26c028b4053e09 GIT binary patch literal 104265 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 literal 0 HcmV?d00001 diff --git a/redux/.gitignore b/redux/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/redux/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/redux/build.gradle b/redux/build.gradle new file mode 100644 index 0000000..f4fa15b --- /dev/null +++ b/redux/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'java-library' + +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 + +apply plugin: "kotlin" + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + + testImplementation 'junit:junit:4.13' + testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0' +} \ No newline at end of file diff --git a/redux/consumer-rules.pro b/redux/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/redux/proguard-rules.pro b/redux/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/redux/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/redux/src/main/java/com/workday/redux/Action.kt b/redux/src/main/java/com/workday/redux/Action.kt new file mode 100644 index 0000000..8495b76 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Action.kt @@ -0,0 +1,3 @@ +package com.workday.redux + +interface Action diff --git a/redux/src/main/java/com/workday/redux/Dispatch.kt b/redux/src/main/java/com/workday/redux/Dispatch.kt new file mode 100644 index 0000000..a1cfec6 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Dispatch.kt @@ -0,0 +1,3 @@ +package com.workday.redux + +typealias Dispatch = (newAction: Action) -> Unit diff --git a/redux/src/main/java/com/workday/redux/Middleware.kt b/redux/src/main/java/com/workday/redux/Middleware.kt new file mode 100644 index 0000000..d0e6919 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Middleware.kt @@ -0,0 +1,8 @@ +package com.workday.redux + +typealias Next = (state: State, action: Action, dispatch: Dispatch) -> Action + +interface Middleware { + fun invoke(state: State, action: Action, dispatch: Dispatch, next: Next): Action + fun dispose() {} +} diff --git a/redux/src/main/java/com/workday/redux/Reducer.kt b/redux/src/main/java/com/workday/redux/Reducer.kt new file mode 100644 index 0000000..eac5688 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Reducer.kt @@ -0,0 +1,3 @@ +package com.workday.redux + +typealias Reducer = (currentState: State, newAction: Action) -> State diff --git a/redux/src/main/java/com/workday/redux/SingleThreadedStore.kt b/redux/src/main/java/com/workday/redux/SingleThreadedStore.kt new file mode 100644 index 0000000..10a1cdb --- /dev/null +++ b/redux/src/main/java/com/workday/redux/SingleThreadedStore.kt @@ -0,0 +1,52 @@ +package com.workday.redux + +open class SingleThreadedStore( + private var state: S, + private val reducer: Reducer, + private val middleware: List> = emptyList() +) : Store { + + internal val subscriptions = mutableListOf>() + + override fun subscribe(subscription: Subscription): Unsubscribe { + subscriptions.add(subscription) + subscription(state, ::dispatch) + return { + subscriptions.remove(subscription) + if (subscriptions.isEmpty()) { + middleware.forEach { it.dispose() } + } + } + } + + private fun dispatch(action: A) { + val newAction: A = applyMiddleware(state, action) + val newState: S = applyReducer(state, newAction) + + if (state != newState) { + state = newState + subscriptions.forEach { it(state, ::dispatch) } + } + } + + private fun applyMiddleware(state: S, action: A): A { + return next(0)(state, action, ::dispatch) + } + + private fun next(index: Int): Next { + if (index == middleware.size) { + return { _, action, _ -> action } + } + + return { state, action, dispatch -> + middleware[index].invoke(state, + action, + dispatch, + next(index + 1)) + } + } + + private fun applyReducer(currentState: S, action: A): S { + return reducer(currentState, action) + } +} diff --git a/redux/src/main/java/com/workday/redux/State.kt b/redux/src/main/java/com/workday/redux/State.kt new file mode 100644 index 0000000..cb39b6e --- /dev/null +++ b/redux/src/main/java/com/workday/redux/State.kt @@ -0,0 +1,3 @@ +package com.workday.redux + +interface State diff --git a/redux/src/main/java/com/workday/redux/Store.kt b/redux/src/main/java/com/workday/redux/Store.kt new file mode 100644 index 0000000..6831887 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Store.kt @@ -0,0 +1,5 @@ +package com.workday.redux + +interface Store { + fun subscribe(subscription: Subscription): Unsubscribe +} diff --git a/redux/src/main/java/com/workday/redux/Subscription.kt b/redux/src/main/java/com/workday/redux/Subscription.kt new file mode 100644 index 0000000..56efc67 --- /dev/null +++ b/redux/src/main/java/com/workday/redux/Subscription.kt @@ -0,0 +1,5 @@ +package com.workday.redux + +typealias Subscription = (currentState: State, dispatch: Dispatch) -> Unit + +typealias Unsubscribe = () -> Unit diff --git a/redux/src/test/java/com/workday/redux/Mocks.kt b/redux/src/test/java/com/workday/redux/Mocks.kt new file mode 100644 index 0000000..43c03ba --- /dev/null +++ b/redux/src/test/java/com/workday/redux/Mocks.kt @@ -0,0 +1,47 @@ +package com.workday.redux + +sealed class MockAction : Action { + object Update1Action : MockAction() + object Update2Action : MockAction() + object NoUpdateAction : MockAction() + object MiddlewareCalledAction : MockAction() +} + +data class MockState( + val updated1: Boolean = false, + val updated2: Boolean = false, + val middlewareCalled: Boolean = false +) : State + +class MockReducer : Reducer { + override fun invoke(state: MockState, action: MockAction): MockState { + return when (action) { + is MockAction.Update1Action -> state.copy(updated1 = true) + is MockAction.Update2Action -> state.copy(updated2 = true) + is MockAction.NoUpdateAction -> state + is MockAction.MiddlewareCalledAction -> state.copy(middlewareCalled = true) + } + } +} + +class MockDispatchingMiddleware(private val disposable: Disposable) : Middleware { + override fun invoke( + state: MockState, + action: MockAction, + dispatch: Dispatch, + next: Next + ): MockAction { + if (action != MockAction.MiddlewareCalledAction) + dispatch(MockAction.MiddlewareCalledAction) + + return action + } + + override fun dispose() { + disposable.dispose() + } +} + +interface Disposable { + fun dispose() +} diff --git a/redux/src/test/java/com/workday/redux/SingleThreadedStoreTest.kt b/redux/src/test/java/com/workday/redux/SingleThreadedStoreTest.kt new file mode 100644 index 0000000..85e9539 --- /dev/null +++ b/redux/src/test/java/com/workday/redux/SingleThreadedStoreTest.kt @@ -0,0 +1,232 @@ +package com.workday.redux + +import com.nhaarman.mockitokotlin2.mock +import com.nhaarman.mockitokotlin2.never +import com.nhaarman.mockitokotlin2.times +import com.nhaarman.mockitokotlin2.verify +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test + +class SingleThreadedStoreTest { + + private val initialState = MockState() + private val reducer = MockReducer() + private val disposable = mock() + private val dispatchingMiddleware = MockDispatchingMiddleware(disposable) + + private lateinit var store: SingleThreadedStore + + @Before fun setUp() { + store = SingleThreadedStore(state = initialState, + reducer = reducer, + middleware = listOf(dispatchingMiddleware)) + } + + @Test fun `WHEN store initialized THEN no subscriptions`() { + assertEquals(0, store.subscriptions.size) + } + + @Test fun `GIVEN store initialized WHEN store subscribed to THEN returns unsubscribe lambda`() { + val unsubscribe = store.subscribe { _, _ -> + // do nothing + } + + assertNotNull(unsubscribe) + } + + @Test fun `GIVEN store initialized WHEN store subscribed to THEN correct number of subscriptions`() { + assertEquals(0, store.subscriptions.size) + + store.subscribe { _, _ -> + // do nothing + } + + assertEquals(1, store.subscriptions.size) + } + + @Test fun `GIVEN store initialized WHEN store subscribed to multiple times THEN correct number of subscriptions`() { + assertEquals(0, store.subscriptions.size) + + repeat(3) { + store.subscribe { _, _ -> + // do nothing + } + } + + assertEquals(3, store.subscriptions.size) + } + + @Test fun `GIVEN store subscribed to WHEN unsubscribe THEN correct number of subscriptions`() { + val unsubscribe = store.subscribe { _, _ -> + // do nothing + } + + unsubscribe.invoke() + + assertEquals(0, store.subscriptions.size) + } + + @Test fun `GIVEN two subscribers WHEN one unsubscribes THEN does not call dispose on middleware`() { + val middleware1 = mock>() + val middleware2 = mock>() + val simpleStore = SingleThreadedStore(state = initialState, + reducer = mock(), + middleware = listOf(middleware1, middleware2)) + val unsubscribe1 = simpleStore.subscribe { _, _ -> + // do nothing + } + simpleStore.subscribe { _, _ -> + // do nothing + } + + unsubscribe1.invoke() + + verify(middleware1, times(0)).dispose() + verify(middleware2, times(0)).dispose() + } + + @Test fun `GIVEN two subscribers WHEN last subscriber unsubscribes THEN calls dispose on all middleware`() { + val middleware1 = mock>() + val middleware2 = mock>() + val simpleStore = SingleThreadedStore(state = initialState, + reducer = mock(), + middleware = listOf(middleware1, middleware2)) + val unsubscribe1 = simpleStore.subscribe { _, _ -> + // do nothing + } + val unsubscribe2 = simpleStore.subscribe { _, _ -> + // do nothing + } + + unsubscribe1.invoke() + unsubscribe2.invoke() + + verify(middleware1).dispose() + verify(middleware2).dispose() + } + + @Test fun `GIVEN store subscribed to WHEN dispatch update action THEN updates state`() { + lateinit var dispatcher: Dispatch + lateinit var newState: MockState + store.subscribe { state, dispatch -> + newState = state + dispatcher = dispatch + } + assertFalse(newState.updated1) + + dispatcher.invoke(MockAction.Update1Action) + + assertTrue(newState.updated1) + } + + @Test fun `GIVEN store subscribed to WHEN dispatch no update action THEN does not update state`() { + lateinit var dispatcher: Dispatch + lateinit var newState: MockState + store.subscribe { state, dispatch -> + newState = state + dispatcher = dispatch + } + + dispatcher.invoke(MockAction.NoUpdateAction) + + assertFalse(newState.updated1) + assertFalse(newState.updated2) + } + + @Test fun `GIVEN store subscribed to and unsubscribed to WHEN dispatch update action THEN state is not updated for this subscription`() { + lateinit var dispatcher: Dispatch + lateinit var newState: MockState + val unsubscribe = store.subscribe { state, dispatch -> + newState = state + dispatcher = dispatch + } + unsubscribe.invoke() + + dispatcher.invoke(MockAction.Update1Action) + + assertFalse(newState.updated1) + } + + @Test fun `GIVEN store subscribed to in multiple places WHEN dispatch multiple update actions THEN updates state correctly`() { + lateinit var dispatcher1: Dispatch + lateinit var dispatcher2: Dispatch + lateinit var newState: MockState + store.subscribe { _, dispatch -> + dispatcher1 = dispatch + } + store.subscribe { state, dispatch -> + newState = state + dispatcher2 = dispatch + } + assertFalse(newState.updated1) + assertFalse(newState.updated2) + + dispatcher1.invoke(MockAction.Update1Action) + dispatcher2.invoke(MockAction.Update2Action) + + assertTrue(newState.updated1) + assertTrue(newState.updated2) + } + + @Test fun `GIVEN one subscription subscribed and one subscription unsubscribed WHEN dispatch update action from subscribed THEN state updates subscribed subscription`() { + lateinit var dispatcher: Dispatch + lateinit var newState1: MockState + lateinit var newState2: MockState + store.subscribe { state, dispatch -> + newState1 = state + dispatcher = dispatch + } + val unsubscribe = store.subscribe { state, _ -> + newState2 = state + } + unsubscribe.invoke() + assertFalse(newState1.updated1) + assertFalse(newState2.updated1) + + dispatcher.invoke(MockAction.Update1Action) + + assertTrue(newState1.updated1) + assertFalse(newState2.updated1) + } + + @Test fun `GIVEN one subscription subscribed and one subscription unsubscribed WHEN dispatch update action from unsubscribed THEN state updates subscribed subscription`() { + lateinit var dispatcher: Dispatch + lateinit var newState1: MockState + lateinit var newState2: MockState + store.subscribe { state, _ -> + newState1 = state + } + val unsubscribe = store.subscribe { state, dispatch -> + newState2 = state + dispatcher = dispatch + } + unsubscribe.invoke() + assertFalse(newState1.updated1) + assertFalse(newState2.updated1) + + dispatcher.invoke(MockAction.Update1Action) + + assertTrue(newState1.updated1) + assertFalse(newState2.updated1) + } + + @Test fun `GIVEN store with dispatching middleware WHEN dispatch update action THEN middleware dispatches to update state`() { + lateinit var dispatcher: Dispatch + lateinit var newState: MockState + store.subscribe { state, dispatch -> + newState = state + dispatcher = dispatch + } + assertFalse(newState.updated1) + assertFalse(newState.middlewareCalled) + + dispatcher.invoke(MockAction.Update1Action) + + assertTrue(newState.updated1) + assertTrue(newState.middlewareCalled) + } +} diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle new file mode 100644 index 0000000..c18b523 --- /dev/null +++ b/sample/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.2" + + defaultConfig { + applicationId "com.workday.kotlinredux" + minSdkVersion 16 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + implementation project(':redux') +} \ No newline at end of file diff --git a/sample/proguard-rules.pro b/sample/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/sample/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e582304 --- /dev/null +++ b/sample/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/java/com/workday/kotlinredux/CounterAction.kt b/sample/src/main/java/com/workday/kotlinredux/CounterAction.kt new file mode 100644 index 0000000..26edea3 --- /dev/null +++ b/sample/src/main/java/com/workday/kotlinredux/CounterAction.kt @@ -0,0 +1,8 @@ +package com.workday.kotlinredux + +import com.workday.redux.Action + +sealed class CounterAction : Action { + object IncrementAction : CounterAction() + object DecrementAction : CounterAction() +} diff --git a/sample/src/main/java/com/workday/kotlinredux/LoggingMiddleware.kt b/sample/src/main/java/com/workday/kotlinredux/LoggingMiddleware.kt new file mode 100644 index 0000000..a64a169 --- /dev/null +++ b/sample/src/main/java/com/workday/kotlinredux/LoggingMiddleware.kt @@ -0,0 +1,18 @@ +package com.workday.kotlinredux + +import android.util.Log +import com.workday.redux.Dispatch +import com.workday.redux.Middleware +import com.workday.redux.Next + +class LoggingMiddleware : Middleware { + override fun invoke( + state: MainState, + action: CounterAction, + dispatch: Dispatch, + next: Next + ): CounterAction { + Log.d("Redux Sample App Log", "Action: $action") + return next(state, action, dispatch) + } +} diff --git a/sample/src/main/java/com/workday/kotlinredux/MainActivity.kt b/sample/src/main/java/com/workday/kotlinredux/MainActivity.kt new file mode 100644 index 0000000..f2fc612 --- /dev/null +++ b/sample/src/main/java/com/workday/kotlinredux/MainActivity.kt @@ -0,0 +1,46 @@ +package com.workday.kotlinredux + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.workday.redux.SingleThreadedStore +import com.workday.redux.Unsubscribe +import kotlinx.android.synthetic.main.activity_main.* + +class MainActivity : AppCompatActivity() { + + private lateinit var storeUnsubscriber: Unsubscribe + private lateinit var store: SingleThreadedStore + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + store = SingleThreadedStore( + state = MainState(count = 0), + reducer = MainReducer(), + middleware = listOf(LoggingMiddleware()) + ) + } + + override fun onResume() { + super.onResume() + + storeUnsubscriber = store.subscribe { currentState, dispatch -> + counter.text = "Count: ${currentState.count}" + + incrementButton.setOnClickListener { + dispatch(CounterAction.IncrementAction) + } + + decrementButton.setOnClickListener { + dispatch(CounterAction.DecrementAction) + } + } + } + + override fun onPause() { + storeUnsubscriber.invoke() + + super.onPause() + } +} \ No newline at end of file diff --git a/sample/src/main/java/com/workday/kotlinredux/MainReducer.kt b/sample/src/main/java/com/workday/kotlinredux/MainReducer.kt new file mode 100644 index 0000000..88184c9 --- /dev/null +++ b/sample/src/main/java/com/workday/kotlinredux/MainReducer.kt @@ -0,0 +1,16 @@ +package com.workday.kotlinredux + +import com.workday.redux.Reducer + +class MainReducer : Reducer { + override fun invoke(currentState: MainState, newAction: CounterAction): MainState { + return currentState.copy(count = countReducer(currentState, newAction)) + } + + private fun countReducer(currentState: MainState, newAction: CounterAction): Int { + return when (newAction) { + is CounterAction.IncrementAction -> currentState.count + 1 + is CounterAction.DecrementAction -> currentState.count - 1 + } + } +} diff --git a/sample/src/main/java/com/workday/kotlinredux/MainState.kt b/sample/src/main/java/com/workday/kotlinredux/MainState.kt new file mode 100644 index 0000000..2b21d75 --- /dev/null +++ b/sample/src/main/java/com/workday/kotlinredux/MainState.kt @@ -0,0 +1,7 @@ +package com.workday.kotlinredux + +import com.workday.redux.State + +data class MainState( + val count: Int +): State diff --git a/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml b/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/drawable/ic_launcher_background.xml b/sample/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/sample/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..f127e91 --- /dev/null +++ b/sample/src/main/res/layout/activity_main.xml @@ -0,0 +1,40 @@ + + + +