From 1827af85c67dc9d009222fe69cc037d8f47099db Mon Sep 17 00:00:00 2001 From: zhangyuanzhen Date: Wed, 11 Mar 2020 20:33:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=A1=E7=89=87=E4=BA=A4=E4=BA=92=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 12 +- build.gradle | 2 + config.gradle | 3 +- gradle.properties | 2 + libraries/card-library/.gitignore | 1 + libraries/card-library/build.gradle | 36 + libraries/card-library/gradle.properties | 3 + libraries/card-library/proguard-rules.pro | 17 + .../card-library/src/main/AndroidManifest.xml | 1 + .../discretescrollview/DSVOrientation.java | 219 +++++ .../discretescrollview/Direction.java | 38 + .../DiscreteScrollLayoutManager.java | 786 ++++++++++++++++++ .../DiscreteScrollView.java | 293 +++++++ .../InfiniteScrollAdapter.java | 178 ++++ .../discretescrollview/RecyclerViewProxy.java | 107 +++ .../DiscreteScrollItemTransformer.java | 11 + .../discretescrollview/transform/Pivot.java | 116 +++ .../transform/ScaleTransformer.java | 84 ++ .../util/ScrollListenerAdapter.java | 44 + .../card-library/src/main/res/values/attr.xml | 9 + .../src/main/res/values/strings.xml | 4 + modules/mogo-module-apps/build.gradle | 4 +- .../module/apps/AppNavigatorFragment.java | 58 +- .../apps/adapter/AppIndicatorAdapter.java | 2 + .../apps/utils/CardScaleTransformer.java | 91 ++ .../res/drawable-ldpi/module_apps_ic_apps.png | Bin 5430 -> 0 bytes .../drawable-xhdpi/module_apps_ic_apps.png | Bin 16180 -> 5113 bytes .../module_apps_ic_chat_icon.png | Bin 0 -> 12896 bytes .../module_apps_ic_chat_unchecked.png | Bin 0 -> 6710 bytes .../module_apps_ic_interest.png | Bin 0 -> 9180 bytes .../module_apps_ic_interest_unchecked.png | Bin 0 -> 3765 bytes .../module_apps_ic_media_center.png | Bin 13291 -> 12456 bytes .../module_apps_ic_media_center_checked.png | Bin 0 -> 6782 bytes .../drawable-xhdpi/module_apps_ic_news.png | Bin 0 -> 8773 bytes .../module_apps_ic_news_unchecked.png | Bin 0 -> 5060 bytes .../module_apps_ic_online_car.png | Bin 0 -> 13448 bytes .../module_apps_ic_online_car_unchecked.png | Bin 0 -> 4996 bytes .../drawable-xhdpi/module_apps_ic_tanlu.png | Bin 0 -> 8277 bytes .../module_apps_ic_tanlu_unchecked.png | Bin 0 -> 4722 bytes .../module_apps_fragment_apps_navigator.xml | 33 +- .../layout/module_apps_item_app_indicator.xml | 16 +- .../src/main/res/values-xhdpi/dimens.xml | 6 +- .../src/main/res/values/dimens.xml | 1 + .../com/mogo/module/main/MainActivity.java | 10 +- .../drawable-xhdpi/module_apps_bg_card.png | Bin 0 -> 61505 bytes .../res/layout/module_main_activity_main.xml | 22 +- settings.gradle | 1 + 47 files changed, 2155 insertions(+), 55 deletions(-) create mode 100644 libraries/card-library/.gitignore create mode 100644 libraries/card-library/build.gradle create mode 100644 libraries/card-library/gradle.properties create mode 100644 libraries/card-library/proguard-rules.pro create mode 100644 libraries/card-library/src/main/AndroidManifest.xml create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/Direction.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java create mode 100644 libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java create mode 100644 libraries/card-library/src/main/res/values/attr.xml create mode 100644 libraries/card-library/src/main/res/values/strings.xml create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java delete mode 100755 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_apps.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_chat_icon.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_chat_unchecked.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_interest.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_interest_unchecked.png mode change 100644 => 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_media_center.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_media_center_checked.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news_unchecked.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_online_car.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_online_car_unchecked.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_tanlu.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_tanlu_unchecked.png create mode 100755 modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png diff --git a/app/build.gradle b/app/build.gradle index 1c0e75aa78..ad5fcc5f39 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,12 +20,12 @@ android { } multiDexEnabled true - externalNativeBuild { - ndk { - // 设置支持的SO库架构 - abiFilters 'armeabi-v7a' - } - } +// externalNativeBuild { +// ndk { +// // 设置支持的SO库架构 +// abiFilters 'armeabi-v7a' +// } +// } } signingConfigs { release { diff --git a/build.gradle b/build.gradle index fe76aac9ed..0b6d343d97 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,8 @@ buildscript { classpath 'com.android.tools.build:gradle:3.5.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.alibaba:arouter-register:1.0.2" + classpath 'com.novoda:bintray-release:0.8.0' + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/config.gradle b/config.gradle index 5cdac9cd7e..996479e8ca 100644 --- a/config.gradle +++ b/config.gradle @@ -89,7 +89,8 @@ ext { modulecommon : "com.mogo.module:module-common:${MOGO_MODULE_COMMON_VERSION}", modulemain : "com.mogo.module:module-main:${MOGO_MODULE_MAIN_VERSION}", modulemap : "com.mogo.module:module-map:${MOGO_MODULE_MAP_VERSION}", - moduleservice : "com.mogo.module:module-service:${MOGO_MODULE_SERVICE_VERSION}", + moduleservice : "com.mogo.module:module-service:${CARD_LIBRARY_VERSION}", + uicard : "com.mogo.ui:card-libaray:${MOGO_MODULE_SERVICE_VERSION}", mogoservice : "com.mogo.service:mogo-service:${MOGO_SERVICE_VERSION}", mogoserviceapi : "com.mogo.service:mogo-service-api:${MOGO_SERVICE_API_VERSION}", moduleapps : "com.mogo.module:module-apps:${MOGO_MODULE_APPS_VERSION}", diff --git a/gradle.properties b/gradle.properties index d4e995741d..e0824405ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,3 +66,5 @@ MOGO_MODULE_AD_CARD_VERSION=1.0.0-SNAPSHOT # 新鲜水 MOGO_MODULE_FRESH_NEWS_VERSION=1.0.0-SNAPSHOT +# 卡片效果 +CARD_LIBRARY_VERSION=1.0.0-SNAPSHOT \ No newline at end of file diff --git a/libraries/card-library/.gitignore b/libraries/card-library/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/libraries/card-library/.gitignore @@ -0,0 +1 @@ +/build diff --git a/libraries/card-library/build.gradle b/libraries/card-library/build.gradle new file mode 100644 index 0000000000..de2e3eddb9 --- /dev/null +++ b/libraries/card-library/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.library' +apply plugin: 'com.novoda.bintray-release' + +android { + compileSdkVersion rootProject.ext.android.compileSdkVersion + + defaultConfig { + targetSdkVersion rootProject.ext.android.targetSdkVersion + minSdkVersion rootProject.ext.android.minSdkVersion + versionCode Integer.valueOf(VERSION_CODE) + versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } +} + +dependencies { + implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.androidxrecyclerview + testImplementation 'org.robolectric:robolectric:3.0' + testImplementation 'junit:junit:4.12' + testImplementation 'org.mockito:mockito-core:2.13.0' + testImplementation 'org.hamcrest:hamcrest-library:1.3' + androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' +} +apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() + +//publish { +// artifactId = 'discrete-scrollview' +// userOrg = rootProject.userOrg +// groupId = rootProject.groupId +// uploadName = rootProject.uploadName +// publishVersion = rootProject.publishVersion +// description = rootProject.description +// licences = rootProject.licences +//} \ No newline at end of file diff --git a/libraries/card-library/gradle.properties b/libraries/card-library/gradle.properties new file mode 100644 index 0000000000..1d49d2e63f --- /dev/null +++ b/libraries/card-library/gradle.properties @@ -0,0 +1,3 @@ +GROUP=com.mogo.ui +POM_ARTIFACT_ID=card-libaray +VERSION_CODE=1 \ No newline at end of file diff --git a/libraries/card-library/proguard-rules.pro b/libraries/card-library/proguard-rules.pro new file mode 100644 index 0000000000..2309852b8f --- /dev/null +++ b/libraries/card-library/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\yarolegovich\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# 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 *; +#} diff --git a/libraries/card-library/src/main/AndroidManifest.xml b/libraries/card-library/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..f4432f4932 --- /dev/null +++ b/libraries/card-library/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java new file mode 100644 index 0000000000..d00779e027 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DSVOrientation.java @@ -0,0 +1,219 @@ +package com.yarolegovich.discretescrollview; + +import android.graphics.Point; +import android.view.View; + +/** + * Created by yarolegovich on 16.03.2017. + */ +public enum DSVOrientation { + + HORIZONTAL { + @Override + Helper createHelper() { + return new HorizontalHelper(); + } + }, + VERTICAL { + @Override + Helper createHelper() { + return new VerticalHelper(); + } + }; + + //Package private + abstract Helper createHelper(); + + interface Helper { + + int getViewEnd(int recyclerWidth, int recyclerHeight); + + int getDistanceToChangeCurrent(int childWidth, int childHeight); + + void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint); + + void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter); + + int getFlingVelocity(int velocityX, int velocityY); + + int getPendingDx(int pendingScroll); + + int getPendingDy(int pendingScroll); + + void offsetChildren(int amount, RecyclerViewProxy lm); + + float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY); + + boolean isViewVisible(Point center, int halfWidth, int halfHeight, int endBound, int extraSpace); + + boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm); + + boolean canScrollVertically(); + + boolean canScrollHorizontally(); + } + + protected static class HorizontalHelper implements Helper { + + @Override + public int getViewEnd(int recyclerWidth, int recyclerHeight) { + return recyclerWidth; + } + + @Override + public int getDistanceToChangeCurrent(int childWidth, int childHeight) { + return childWidth; + } + + @Override + public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) { + int newX = recyclerCenter.x - scrolled; + outPoint.set(newX, recyclerCenter.y); + } + + @Override + public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) { + int newX = outCenter.x + direction.applyTo(shiftAmount); + outCenter.set(newX, outCenter.y); + } + + @Override + public boolean isViewVisible( + Point viewCenter, int halfWidth, int halfHeight, int endBound, + int extraSpace) { + int viewLeft = viewCenter.x - halfWidth; + int viewRight = viewCenter.x + halfWidth; + return viewLeft < (endBound + extraSpace) && viewRight > -extraSpace; + } + + @Override + public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) { + View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild(); + int leftBound = -lm.getExtraLayoutSpace(); + int rightBound = lm.getWidth() + lm.getExtraLayoutSpace(); + boolean isNewVisibleFromLeft = lm.getDecoratedLeft(firstChild) > leftBound + && lm.getPosition(firstChild) > 0; + boolean isNewVisibleFromRight = lm.getDecoratedRight(lastChild) < rightBound + && lm.getPosition(lastChild) < lm.getItemCount() - 1; + return isNewVisibleFromLeft || isNewVisibleFromRight; + } + + @Override + public void offsetChildren(int amount, RecyclerViewProxy helper) { + helper.offsetChildrenHorizontal(amount); + } + + @Override + public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) { + return viewCenterX - center.x; + } + + @Override + public int getFlingVelocity(int velocityX, int velocityY) { + return velocityX; + } + + @Override + public boolean canScrollHorizontally() { + return true; + } + + @Override + public boolean canScrollVertically() { + return false; + } + + @Override + public int getPendingDx(int pendingScroll) { + return pendingScroll; + } + + @Override + public int getPendingDy(int pendingScroll) { + return 0; + } + } + + + protected static class VerticalHelper implements Helper { + + @Override + public int getViewEnd(int recyclerWidth, int recyclerHeight) { + return recyclerHeight; + } + + @Override + public int getDistanceToChangeCurrent(int childWidth, int childHeight) { + return childHeight; + } + + @Override + public void setCurrentViewCenter(Point recyclerCenter, int scrolled, Point outPoint) { + int newY = recyclerCenter.y - scrolled; + outPoint.set(recyclerCenter.x, newY); + } + + @Override + public void shiftViewCenter(Direction direction, int shiftAmount, Point outCenter) { + int newY = outCenter.y + direction.applyTo(shiftAmount); + outCenter.set(outCenter.x, newY); + } + + @Override + public void offsetChildren(int amount, RecyclerViewProxy helper) { + helper.offsetChildrenVertical(amount); + } + + @Override + public float getDistanceFromCenter(Point center, int viewCenterX, int viewCenterY) { + return viewCenterY - center.y; + } + + @Override + public boolean isViewVisible( + Point viewCenter, int halfWidth, int halfHeight, int endBound, + int extraSpace) { + int viewTop = viewCenter.y - halfHeight; + int viewBottom = viewCenter.y + halfHeight; + return viewTop < (endBound + extraSpace) && viewBottom > -extraSpace; + } + + @Override + public boolean hasNewBecomeVisible(DiscreteScrollLayoutManager lm) { + View firstChild = lm.getFirstChild(), lastChild = lm.getLastChild(); + int topBound = -lm.getExtraLayoutSpace(); + int bottomBound = lm.getHeight() + lm.getExtraLayoutSpace(); + boolean isNewVisibleFromTop = lm.getDecoratedTop(firstChild) > topBound + && lm.getPosition(firstChild) > 0; + boolean isNewVisibleFromBottom = lm.getDecoratedBottom(lastChild) < bottomBound + && lm.getPosition(lastChild) < lm.getItemCount() - 1; + return isNewVisibleFromTop || isNewVisibleFromBottom; + } + + @Override + public int getFlingVelocity(int velocityX, int velocityY) { + return velocityY; + } + + @Override + public boolean canScrollHorizontally() { + return false; + } + + @Override + public boolean canScrollVertically() { + return true; + } + + @Override + public int getPendingDx(int pendingScroll) { + return 0; + } + + @Override + public int getPendingDy(int pendingScroll) { + return pendingScroll; + } + } + +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/Direction.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/Direction.java new file mode 100644 index 0000000000..e4d1c386ce --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/Direction.java @@ -0,0 +1,38 @@ +package com.yarolegovich.discretescrollview; + +/** + * Created by yarolegovich on 16.03.2017. + */ +enum Direction { + + START { + @Override + public int applyTo(int delta) { + return delta * -1; + } + + @Override + public boolean sameAs(int direction) { + return direction < 0; + } + }, + END { + @Override + public int applyTo(int delta) { + return delta; + } + + @Override + public boolean sameAs(int direction) { + return direction > 0; + } + }; + + public abstract int applyTo(int delta); + + public abstract boolean sameAs(int direction); + + public static Direction fromDelta(int delta) { + return delta > 0 ? END : START; + } +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java new file mode 100644 index 0000000000..3cc41b2db5 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollLayoutManager.java @@ -0,0 +1,786 @@ +package com.yarolegovich.discretescrollview; + +import android.content.Context; +import android.graphics.Point; +import android.graphics.PointF; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.accessibility.AccessibilityEventCompat; +import androidx.core.view.accessibility.AccessibilityRecordCompat; +import androidx.recyclerview.widget.LinearSmoothScroller; +import androidx.recyclerview.widget.RecyclerView; +import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; + +import java.util.Locale; + +/** + * Created by yarolegovich on 17.02.2017. + */ +class DiscreteScrollLayoutManager extends RecyclerView.LayoutManager { + + static final int NO_POSITION = -1; + + private static final String EXTRA_POSITION = "extra_position"; + private static final int DEFAULT_TIME_FOR_ITEM_SETTLE = 300; + private static final int DEFAULT_FLING_THRESHOLD = 2100; //Decrease to increase sensitivity. + private static final int DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT = 1; + + protected static final float SCROLL_TO_SNAP_TO_ANOTHER_ITEM = 0.6f; + + //This field will take value of all visible view's center points during the fill phase + protected Point viewCenterIterator; + protected Point recyclerCenter; + protected Point currentViewCenter; + protected int childHalfWidth, childHalfHeight; + protected int extraLayoutSpace; + + //Max possible distance a view can travel during one scroll phase + protected int scrollToChangeCurrent; + protected int currentScrollState; + + protected int scrolled; + protected int pendingScroll; + protected int currentPosition; + protected int pendingPosition; + + protected SparseArray detachedCache; + + private DSVOrientation.Helper orientationHelper; + + protected boolean isFirstOrEmptyLayout; + + private Context context; + + private int timeForItemSettle; + private int offscreenItems; + private int transformClampItemCount; + + private boolean dataSetChangeShiftedPosition; + + private int flingThreshold; + private boolean shouldSlideOnFling; + + private int viewWidth, viewHeight; + + @NonNull + private final ScrollStateListener scrollStateListener; + private DiscreteScrollItemTransformer itemTransformer; + + private RecyclerViewProxy recyclerViewProxy; + + public DiscreteScrollLayoutManager( + @NonNull Context c, + @NonNull ScrollStateListener scrollStateListener, + @NonNull DSVOrientation orientation) { + this.context = c; + this.timeForItemSettle = DEFAULT_TIME_FOR_ITEM_SETTLE; + this.pendingPosition = NO_POSITION; + this.currentPosition = NO_POSITION; + this.flingThreshold = DEFAULT_FLING_THRESHOLD; + this.shouldSlideOnFling = false; + this.recyclerCenter = new Point(); + this.currentViewCenter = new Point(); + this.viewCenterIterator = new Point(); + this.detachedCache = new SparseArray<>(); + this.scrollStateListener = scrollStateListener; + this.orientationHelper = orientation.createHelper(); + this.recyclerViewProxy = new RecyclerViewProxy(this); + this.transformClampItemCount = DEFAULT_TRANSFORM_CLAMP_ITEM_COUNT; + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + if (state.getItemCount() == 0) { + recyclerViewProxy.removeAndRecycleAllViews(recycler); + currentPosition = pendingPosition = NO_POSITION; + scrolled = pendingScroll = 0; + return; + } + + ensureValidPosition(state); + + updateRecyclerDimensions(state); + + //onLayoutChildren may be called multiple times and this check is required so that the flag + //won't be cleared until onLayoutCompleted + if (!isFirstOrEmptyLayout) { + isFirstOrEmptyLayout = recyclerViewProxy.getChildCount() == 0; + if (isFirstOrEmptyLayout) { + initChildDimensions(recycler); + } + } + + recyclerViewProxy.detachAndScrapAttachedViews(recycler); + + fill(recycler); + + applyItemTransformToChildren(); + } + + private void ensureValidPosition(RecyclerView.State state) { + if (currentPosition == NO_POSITION || currentPosition >= state.getItemCount()) { + //currentPosition might have been assigned in onRestoreInstanceState() + //which can lead to a crash (position out of bounds) when data set + //is not persisted across rotations + currentPosition = 0; + } + } + + @Override + public void onLayoutCompleted(RecyclerView.State state) { + if (isFirstOrEmptyLayout) { + scrollStateListener.onCurrentViewFirstLayout(); + isFirstOrEmptyLayout = false; + } else if (dataSetChangeShiftedPosition) { + scrollStateListener.onDataSetChangeChangedPosition(); + dataSetChangeShiftedPosition = false; + } + } + + protected void initChildDimensions(RecyclerView.Recycler recycler) { + View viewToMeasure = recyclerViewProxy.getMeasuredChildForAdapterPosition(0, recycler); + + int childViewWidth = recyclerViewProxy.getMeasuredWidthWithMargin(viewToMeasure); + int childViewHeight = recyclerViewProxy.getMeasuredHeightWithMargin(viewToMeasure); + + childHalfWidth = childViewWidth / 2; + childHalfHeight = childViewHeight / 2; + + scrollToChangeCurrent = orientationHelper.getDistanceToChangeCurrent( + childViewWidth, + childViewHeight); + + extraLayoutSpace = scrollToChangeCurrent * offscreenItems; + + recyclerViewProxy.detachAndScrapView(viewToMeasure, recycler); + } + + protected void updateRecyclerDimensions(RecyclerView.State state) { + boolean dimensionsChanged = !state.isMeasuring() + && (recyclerViewProxy.getWidth() != viewWidth + || recyclerViewProxy.getHeight() != viewHeight); + if (dimensionsChanged) { + viewWidth = recyclerViewProxy.getWidth(); + viewHeight = recyclerViewProxy.getHeight(); + recyclerViewProxy.removeAllViews(); + } + recyclerCenter.set( + recyclerViewProxy.getWidth() / 523*330, + recyclerViewProxy.getHeight() / 2); + } + + protected void fill(RecyclerView.Recycler recycler) { + cacheAndDetachAttachedViews(); + + orientationHelper.setCurrentViewCenter(recyclerCenter, scrolled, currentViewCenter); + + final int endBound = orientationHelper.getViewEnd( + recyclerViewProxy.getWidth(), + recyclerViewProxy.getHeight()); + + //Layout current + if (isViewVisible(currentViewCenter, endBound)) { + layoutView(recycler, currentPosition, currentViewCenter); + } + + //Layout items before the current item + layoutViews(recycler, Direction.START, endBound); + + //Layout items after the current item + layoutViews(recycler, Direction.END, endBound); + + recycleDetachedViewsAndClearCache(recycler); + } + + private void layoutViews(RecyclerView.Recycler recycler, Direction direction, int endBound) { + final int positionStep = direction.applyTo(1); + + //Predictive layout is required when we are doing smooth fast scroll towards pendingPosition + boolean noPredictiveLayoutRequired = pendingPosition == NO_POSITION + || !direction.sameAs(pendingPosition - currentPosition); + + viewCenterIterator.set(currentViewCenter.x, currentViewCenter.y); + for (int pos = currentPosition + positionStep; isInBounds(pos); pos += positionStep) { + if (pos == pendingPosition) { + noPredictiveLayoutRequired = true; + } + orientationHelper.shiftViewCenter(direction, scrollToChangeCurrent, viewCenterIterator); + if (isViewVisible(viewCenterIterator, endBound)) { + layoutView(recycler, pos, viewCenterIterator); + } else if (noPredictiveLayoutRequired) { + break; + } + } + } + + protected void layoutView(RecyclerView.Recycler recycler, int position, Point viewCenter) { + if (position < 0) return; + View v = detachedCache.get(position); + if (v == null) { + v = recyclerViewProxy.getMeasuredChildForAdapterPosition(position, recycler); + recyclerViewProxy.layoutDecoratedWithMargins(v, + viewCenter.x - childHalfWidth, viewCenter.y - childHalfHeight, + viewCenter.x + childHalfWidth, viewCenter.y + childHalfHeight); + } else { + recyclerViewProxy.attachView(v); + detachedCache.remove(position); + } + } + + protected void cacheAndDetachAttachedViews() { + detachedCache.clear(); + for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) { + View child = recyclerViewProxy.getChildAt(i); + detachedCache.put(recyclerViewProxy.getPosition(child), child); + } + + for (int i = 0; i < detachedCache.size(); i++) { + recyclerViewProxy.detachView(detachedCache.valueAt(i)); + } + } + + protected void recycleDetachedViewsAndClearCache(RecyclerView.Recycler recycler) { + for (int i = 0; i < detachedCache.size(); i++) { + View viewToRemove = detachedCache.valueAt(i); + recyclerViewProxy.recycleView(viewToRemove, recycler); + } + detachedCache.clear(); + } + + @Override + public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) { + int newPosition = currentPosition; + if (currentPosition == NO_POSITION) { + newPosition = 0; + } else if (currentPosition >= positionStart) { + newPosition = Math.min(currentPosition + itemCount, recyclerViewProxy.getItemCount() - 1); + } + onNewPosition(newPosition); + } + + @Override + public void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount) { + int newPosition = currentPosition; + if (recyclerViewProxy.getItemCount() == 0) { + newPosition = NO_POSITION; + } else if (currentPosition >= positionStart) { + if (currentPosition < positionStart + itemCount) { + //If currentPosition is in the removed items, then the new item became current + currentPosition = NO_POSITION; + } + newPosition = Math.max(0, currentPosition - itemCount); + } + onNewPosition(newPosition); + } + + @Override + public void onItemsChanged(RecyclerView recyclerView) { + //notifyDataSetChanged() was called. We need to ensure that currentPosition is not out of bounds + currentPosition = Math.min(Math.max(0, currentPosition), recyclerViewProxy.getItemCount() - 1); + dataSetChangeShiftedPosition = true; + } + + private void onNewPosition(int position) { + if (currentPosition != position) { + currentPosition = position; + dataSetChangeShiftedPosition = true; + } + } + + @Override + public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) { + return scrollBy(dx, recycler); + } + + @Override + public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { + return scrollBy(dy, recycler); + } + + protected int scrollBy(int amount, RecyclerView.Recycler recycler) { + if (recyclerViewProxy.getChildCount() == 0) { + return 0; + } + + Direction direction = Direction.fromDelta(amount); + int leftToScroll = calculateAllowedScrollIn(direction); + if (leftToScroll <= 0) { + return 0; + } + + int delta = direction.applyTo(Math.min(leftToScroll, Math.abs(amount))); + scrolled += delta; + if (pendingScroll != 0) { + pendingScroll -= delta; + } + + orientationHelper.offsetChildren(-delta, recyclerViewProxy); + + if (orientationHelper.hasNewBecomeVisible(this)) { + fill(recycler); + } + + notifyScroll(); + + applyItemTransformToChildren(); + + return delta; + } + + protected void applyItemTransformToChildren() { + if (itemTransformer != null) { + int clampAfterDistance = scrollToChangeCurrent * transformClampItemCount; + for (int i = 0; i < recyclerViewProxy.getChildCount(); i++) { + View child = recyclerViewProxy.getChildAt(i); + float position = getCenterRelativePositionOf(child, clampAfterDistance); + itemTransformer.transformItem(child, position); + } + } + } + + @Override + public void scrollToPosition(int position) { + if (currentPosition == position) { + return; + } + + currentPosition = position; + recyclerViewProxy.requestLayout(); + } + + @Override + public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { + if (currentPosition == position || pendingPosition != NO_POSITION) { + return; + } + checkTargetPosition(state, position); + if (currentPosition == NO_POSITION) { + //Layout not happened yet + currentPosition = position; + } else { + startSmoothPendingScroll(position); + } + } + + @Override + public boolean canScrollHorizontally() { + return orientationHelper.canScrollHorizontally(); + } + + @Override + public boolean canScrollVertically() { + return orientationHelper.canScrollVertically(); + } + + @Override + public void onScrollStateChanged(int state) { + if (currentScrollState == RecyclerView.SCROLL_STATE_IDLE && currentScrollState != state) { + scrollStateListener.onScrollStart(); + } + + if (state == RecyclerView.SCROLL_STATE_IDLE) { + //Scroll is not finished until current view is centered + boolean isScrollEnded = onScrollEnd(); + if (isScrollEnded) { + scrollStateListener.onScrollEnd(); + } else { + //Scroll continues and we don't want to set currentScrollState to STATE_IDLE, + //because this will then trigger .scrollStateListener.onScrollStart() + return; + } + } else if (state == RecyclerView.SCROLL_STATE_DRAGGING) { + onDragStart(); + } + currentScrollState = state; + } + + /** + * @return true if scroll is ended and we don't need to settle items + */ + private boolean onScrollEnd() { + if (pendingPosition != NO_POSITION) { + currentPosition = pendingPosition; + pendingPosition = NO_POSITION; + scrolled = 0; + } + + Direction scrollDirection = Direction.fromDelta(scrolled); + if (Math.abs(scrolled) == scrollToChangeCurrent) { + currentPosition += scrollDirection.applyTo(1); + scrolled = 0; + } + + if (isAnotherItemCloserThanCurrent()) { + pendingScroll = getHowMuchIsLeftToScroll(scrolled); + } else { + pendingScroll = -scrolled; + } + + if (pendingScroll == 0) { + return true; + } else { + startSmoothPendingScroll(); + return false; + } + } + + private void onDragStart() { + //Here we need to: + //1. Stop any pending scroll + //2. Set currentPosition to position of the item that is closest to the center + boolean isScrollingThroughMultiplePositions = Math.abs(scrolled) > scrollToChangeCurrent; + if (isScrollingThroughMultiplePositions) { + int scrolledPositions = scrolled / scrollToChangeCurrent; + currentPosition += scrolledPositions; + scrolled -= scrolledPositions * scrollToChangeCurrent; + } + if (isAnotherItemCloserThanCurrent()) { + Direction direction = Direction.fromDelta(scrolled); + currentPosition += direction.applyTo(1); + scrolled = -getHowMuchIsLeftToScroll(scrolled); + } + pendingPosition = NO_POSITION; + pendingScroll = 0; + } + + public void onFling(int velocityX, int velocityY) { + int velocity = orientationHelper.getFlingVelocity(velocityX, velocityY); + int throttleValue = shouldSlideOnFling ? Math.abs(velocity / flingThreshold) : 1; + int newPosition = currentPosition + Direction.fromDelta(velocity).applyTo(throttleValue); + newPosition = checkNewOnFlingPositionIsInBounds(newPosition); + boolean isInScrollDirection = velocity * scrolled >= 0; + boolean canFling = isInScrollDirection && isInBounds(newPosition); + if (canFling) { + startSmoothPendingScroll(newPosition); + } else { + returnToCurrentPosition(); + } + } + + public void returnToCurrentPosition() { + pendingScroll = -scrolled; + if (pendingScroll != 0) { + startSmoothPendingScroll(); + } + } + + protected int calculateAllowedScrollIn(Direction direction) { + if (pendingScroll != 0) { + return Math.abs(pendingScroll); + } + int allowedScroll; + boolean isBoundReached; + boolean isScrollDirectionAsBefore = direction.applyTo(scrolled) > 0; + if (direction == Direction.START && currentPosition == 0) { + //We can scroll to the left when currentPosition == 0 only if we scrolled to the right before + isBoundReached = scrolled == 0; + allowedScroll = isBoundReached ? 0 : Math.abs(scrolled); + } else if (direction == Direction.END && currentPosition == recyclerViewProxy.getItemCount() - 1) { + //We can scroll to the right when currentPosition == last only if we scrolled to the left before + isBoundReached = scrolled == 0; + allowedScroll = isBoundReached ? 0 : Math.abs(scrolled); + } else { + isBoundReached = false; + allowedScroll = isScrollDirectionAsBefore ? + scrollToChangeCurrent - Math.abs(scrolled) : + scrollToChangeCurrent + Math.abs(scrolled); + } + scrollStateListener.onIsBoundReachedFlagChange(isBoundReached); + return allowedScroll; + } + + private void startSmoothPendingScroll() { + LinearSmoothScroller scroller = new DiscreteLinearSmoothScroller(context); + scroller.setTargetPosition(currentPosition); + recyclerViewProxy.startSmoothScroll(scroller); + } + + private void startSmoothPendingScroll(int position) { + if (currentPosition == position) return; + pendingScroll = -scrolled; + Direction direction = Direction.fromDelta(position - currentPosition); + int distanceToScroll = Math.abs(position - currentPosition) * scrollToChangeCurrent; + pendingScroll += direction.applyTo(distanceToScroll); + pendingPosition = position; + startSmoothPendingScroll(); + } + + @Override + public boolean isAutoMeasureEnabled() { + return true; + } + + @Override + public int computeVerticalScrollRange(RecyclerView.State state) { + return computeScrollRange(state); + } + + @Override + public int computeVerticalScrollOffset(RecyclerView.State state) { + return computeScrollOffset(state); + } + + @Override + public int computeVerticalScrollExtent(RecyclerView.State state) { + return computeScrollExtent(state); + } + + @Override + public int computeHorizontalScrollRange(RecyclerView.State state) { + return computeScrollRange(state); + } + + @Override + public int computeHorizontalScrollOffset(RecyclerView.State state) { + return computeScrollOffset(state); + } + + @Override + public int computeHorizontalScrollExtent(RecyclerView.State state) { + return computeScrollExtent(state); + } + + private int computeScrollOffset(RecyclerView.State state) { + int scrollbarSize = computeScrollExtent(state); + int offset = (int) ((scrolled / (float) scrollToChangeCurrent) * scrollbarSize); + return (currentPosition * scrollbarSize) + offset; + } + + private int computeScrollExtent(RecyclerView.State state) { + if (getItemCount() == 0) { + return 0; + } else { + return (int) (computeScrollRange(state) / (float) getItemCount()); + } + } + + private int computeScrollRange(RecyclerView.State state) { + if (getItemCount() == 0) { + return 0; + } else { + return scrollToChangeCurrent * (getItemCount() - 1); + } + } + + @Override + public void onAdapterChanged(RecyclerView.Adapter oldAdapter, RecyclerView.Adapter newAdapter) { + pendingPosition = NO_POSITION; + scrolled = pendingScroll = 0; + if (newAdapter instanceof InitialPositionProvider) { + currentPosition = ((InitialPositionProvider) newAdapter).getInitialPosition(); + } else { + currentPosition = 0; + } + recyclerViewProxy.removeAllViews(); + } + + @Override + public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + if (pendingPosition != NO_POSITION) { + currentPosition = pendingPosition; + } + bundle.putInt(EXTRA_POSITION, currentPosition); + return bundle; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + Bundle bundle = (Bundle) state; + currentPosition = bundle.getInt(EXTRA_POSITION); + } + + @Override + public RecyclerView.LayoutParams generateDefaultLayoutParams() { + return new RecyclerView.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + + public int getNextPosition() { + if (scrolled == 0) { + return currentPosition; + } else if (pendingPosition != NO_POSITION) { + return pendingPosition; + } else { + return currentPosition + Direction.fromDelta(scrolled).applyTo(1); + } + } + + public void setItemTransformer(DiscreteScrollItemTransformer itemTransformer) { + this.itemTransformer = itemTransformer; + } + + public void setTimeForItemSettle(int timeForItemSettle) { + this.timeForItemSettle = timeForItemSettle; + } + + public void setOffscreenItems(int offscreenItems) { + this.offscreenItems = offscreenItems; + extraLayoutSpace = scrollToChangeCurrent * offscreenItems; + recyclerViewProxy.requestLayout(); + } + + public void setTransformClampItemCount(int transformClampItemCount) { + this.transformClampItemCount = transformClampItemCount; + applyItemTransformToChildren(); + } + + public void setOrientation(DSVOrientation orientation) { + orientationHelper = orientation.createHelper(); + recyclerViewProxy.removeAllViews(); + recyclerViewProxy.requestLayout(); + } + + public void setShouldSlideOnFling(boolean result) { + shouldSlideOnFling = result; + } + + public void setSlideOnFlingThreshold(int threshold) { + flingThreshold = threshold; + } + + public int getCurrentPosition() { + return currentPosition; + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + if (recyclerViewProxy.getChildCount() > 0) { + final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); + record.setFromIndex(getPosition(getFirstChild())); + record.setToIndex(getPosition(getLastChild())); + } + } + + private float getCenterRelativePositionOf(View v, int maxDistance) { + float distanceFromCenter = orientationHelper.getDistanceFromCenter(recyclerCenter, + getDecoratedLeft(v) + childHalfWidth, + getDecoratedTop(v) + childHalfHeight); + return Math.min(Math.max(-1f, distanceFromCenter / maxDistance), 1f); + } + + private int checkNewOnFlingPositionIsInBounds(int position) { + final int itemCount = recyclerViewProxy.getItemCount(); + //The check is required in case slide through multiple items is turned on + if (currentPosition != 0 && position < 0) { + //If currentPosition == 0 && position < 0 we forbid scroll to the left, + //but if currentPosition != 0 we can slide to the first item + return 0; + } else if (currentPosition != itemCount - 1 && position >= itemCount) { + return itemCount - 1; + } + return position; + } + + private int getHowMuchIsLeftToScroll(int dx) { + return Direction.fromDelta(dx).applyTo(scrollToChangeCurrent - Math.abs(scrolled)); + } + + private boolean isAnotherItemCloserThanCurrent() { + return Math.abs(scrolled) >= scrollToChangeCurrent * SCROLL_TO_SNAP_TO_ANOTHER_ITEM; + } + + public View getFirstChild() { + return recyclerViewProxy.getChildAt(0); + } + + public View getLastChild() { + return recyclerViewProxy.getChildAt(recyclerViewProxy.getChildCount() - 1); + } + + public int getExtraLayoutSpace() { + return extraLayoutSpace; + } + + private void notifyScroll() { + float amountToScroll = pendingPosition != NO_POSITION ? + Math.abs(scrolled + pendingScroll) : + scrollToChangeCurrent; + float position = -Math.min(Math.max(-1f, scrolled / amountToScroll), 1f); + scrollStateListener.onScroll(position); + } + + private boolean isInBounds(int itemPosition) { + return itemPosition >= 0 && itemPosition < recyclerViewProxy.getItemCount(); + } + + private boolean isViewVisible(Point viewCenter, int endBound) { + return orientationHelper.isViewVisible( + viewCenter, childHalfWidth, childHalfHeight, + endBound, extraLayoutSpace); + } + + private void checkTargetPosition(RecyclerView.State state, int targetPosition) { + if (targetPosition < 0 || targetPosition >= state.getItemCount()) { + throw new IllegalArgumentException(String.format(Locale.US, + "target position out of bounds: position=%d, itemCount=%d", + targetPosition, state.getItemCount())); + } + } + + protected void setRecyclerViewProxy(RecyclerViewProxy recyclerViewProxy) { + this.recyclerViewProxy = recyclerViewProxy; + } + + protected void setOrientationHelper(DSVOrientation.Helper orientationHelper) { + this.orientationHelper = orientationHelper; + } + + private class DiscreteLinearSmoothScroller extends LinearSmoothScroller { + + public DiscreteLinearSmoothScroller(Context context) { + super(context); + } + + @Override + public int calculateDxToMakeVisible(View view, int snapPreference) { + return orientationHelper.getPendingDx(-pendingScroll); + } + + @Override + public int calculateDyToMakeVisible(View view, int snapPreference) { + return orientationHelper.getPendingDy(-pendingScroll); + } + + @Override + protected int calculateTimeForScrolling(int dx) { + float dist = Math.min(Math.abs(dx), scrollToChangeCurrent); + return (int) (Math.max(0.01f, dist / scrollToChangeCurrent) * timeForItemSettle); + } + + @Nullable + @Override + public PointF computeScrollVectorForPosition(int targetPosition) { + return new PointF( + orientationHelper.getPendingDx(pendingScroll), + orientationHelper.getPendingDy(pendingScroll)); + } + } + + public interface ScrollStateListener { + void onIsBoundReachedFlagChange(boolean isBoundReached); + + void onScrollStart(); + + void onScrollEnd(); + + void onScroll(float currentViewPosition); + + void onCurrentViewFirstLayout(); + + void onDataSetChangeChangedPosition(); + } + + public interface InitialPositionProvider { + int getInitialPosition(); + } +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java new file mode 100644 index 0000000000..27973063b8 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/DiscreteScrollView.java @@ -0,0 +1,293 @@ +package com.yarolegovich.discretescrollview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; +import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; +import com.yarolegovich.discretescrollview.util.ScrollListenerAdapter; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by yarolegovich on 18.02.2017. + */ +@SuppressWarnings("unchecked") +public class DiscreteScrollView extends RecyclerView { + + public static final int NO_POSITION = DiscreteScrollLayoutManager.NO_POSITION; + + private static final int DEFAULT_ORIENTATION = DSVOrientation.HORIZONTAL.ordinal(); + + private DiscreteScrollLayoutManager layoutManager; + + private List scrollStateChangeListeners; + private List onItemChangedListeners; + + private boolean isOverScrollEnabled; + + public DiscreteScrollView(Context context) { + super(context); + init(null); + } + + public DiscreteScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public DiscreteScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + private void init(AttributeSet attrs) { + scrollStateChangeListeners = new ArrayList<>(); + onItemChangedListeners = new ArrayList<>(); + + int orientation = DEFAULT_ORIENTATION; + if (attrs != null) { + TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.DiscreteScrollView); + orientation = ta.getInt(R.styleable.DiscreteScrollView_dsv_orientation, DEFAULT_ORIENTATION); + ta.recycle(); + } + + isOverScrollEnabled = getOverScrollMode() != OVER_SCROLL_NEVER; + + layoutManager = new DiscreteScrollLayoutManager( + getContext(), new ScrollStateListener(), + DSVOrientation.values()[orientation]); + setLayoutManager(layoutManager); + } + + @Override + public void setLayoutManager(LayoutManager layout) { + if (layout instanceof DiscreteScrollLayoutManager) { + super.setLayoutManager(layout); + } else { + throw new IllegalArgumentException(getContext().getString(R.string.dsv_ex_msg_dont_set_lm)); + } + } + + + @Override + public boolean fling(int velocityX, int velocityY) { + boolean isFling = super.fling(velocityX, velocityY); + if (isFling) { + layoutManager.onFling(velocityX, velocityY); + } else { + layoutManager.returnToCurrentPosition(); + } + return isFling; + } + + @Nullable + public ViewHolder getViewHolder(int position) { + View view = layoutManager.findViewByPosition(position); + return view != null ? getChildViewHolder(view) : null; + } + + /** + * @return adapter position of the current item or -1 if nothing is selected + */ + public int getCurrentItem() { + return layoutManager.getCurrentPosition(); + } + + public void setItemTransformer(DiscreteScrollItemTransformer transformer) { + layoutManager.setItemTransformer(transformer); + } + + public void setItemTransitionTimeMillis(@IntRange(from = 10) int millis) { + layoutManager.setTimeForItemSettle(millis); + } + + public void setSlideOnFling(boolean result){ + layoutManager.setShouldSlideOnFling(result); + } + + public void setSlideOnFlingThreshold(int threshold){ + layoutManager.setSlideOnFlingThreshold(threshold); + } + + public void setOrientation(DSVOrientation orientation) { + layoutManager.setOrientation(orientation); + } + + public void setOffscreenItems(int items) { + layoutManager.setOffscreenItems(items); + } + + public void setClampTransformProgressAfter(@IntRange(from = 1) int itemCount) { + if (itemCount <= 1) { + throw new IllegalArgumentException("must be >= 1"); + } + layoutManager.setTransformClampItemCount(itemCount); + } + + public void setOverScrollEnabled(boolean overScrollEnabled) { + isOverScrollEnabled = overScrollEnabled; + setOverScrollMode(OVER_SCROLL_NEVER); + } + + public void addScrollStateChangeListener(@NonNull ScrollStateChangeListener scrollStateChangeListener) { + scrollStateChangeListeners.add(scrollStateChangeListener); + } + + public void addScrollListener(@NonNull ScrollListener scrollListener) { + addScrollStateChangeListener(new ScrollListenerAdapter(scrollListener)); + } + + public void addOnItemChangedListener(@NonNull OnItemChangedListener onItemChangedListener) { + onItemChangedListeners.add(onItemChangedListener); + } + + public void removeScrollStateChangeListener(@NonNull ScrollStateChangeListener scrollStateChangeListener) { + scrollStateChangeListeners.remove(scrollStateChangeListener); + } + + public void removeScrollListener(@NonNull ScrollListener scrollListener) { + removeScrollStateChangeListener(new ScrollListenerAdapter<>(scrollListener)); + } + + public void removeItemChangedListener(@NonNull OnItemChangedListener onItemChangedListener) { + onItemChangedListeners.remove(onItemChangedListener); + } + + private void notifyScrollStart(ViewHolder holder, int current) { + for (ScrollStateChangeListener listener : scrollStateChangeListeners) { + listener.onScrollStart(holder, current); + } + } + + private void notifyScrollEnd(ViewHolder holder, int current) { + for (ScrollStateChangeListener listener : scrollStateChangeListeners) { + listener.onScrollEnd(holder, current); + } + } + + private void notifyScroll(float position, + int currentIndex, int newIndex, + ViewHolder currentHolder, ViewHolder newHolder) { + for (ScrollStateChangeListener listener : scrollStateChangeListeners) { + listener.onScroll(position, currentIndex, newIndex, + currentHolder, + newHolder); + } + } + + private void notifyCurrentItemChanged(ViewHolder holder, int current) { + for (OnItemChangedListener listener : onItemChangedListeners) { + listener.onCurrentItemChanged(holder, current); + } + } + + private void notifyCurrentItemChanged() { + if (onItemChangedListeners.isEmpty()) { + return; + } + int current = layoutManager.getCurrentPosition(); + ViewHolder currentHolder = getViewHolder(current); + notifyCurrentItemChanged(currentHolder, current); + } + + private class ScrollStateListener implements DiscreteScrollLayoutManager.ScrollStateListener { + + @Override + public void onIsBoundReachedFlagChange(boolean isBoundReached) { + if (isOverScrollEnabled) { + setOverScrollMode(isBoundReached ? OVER_SCROLL_ALWAYS : OVER_SCROLL_NEVER); + } + } + + @Override + public void onScrollStart() { + if (scrollStateChangeListeners.isEmpty()) { + return; + } + int current = layoutManager.getCurrentPosition(); + ViewHolder holder = getViewHolder(current); + if (holder != null) { + notifyScrollStart(holder, current); + } + } + + @Override + public void onScrollEnd() { + if (onItemChangedListeners.isEmpty() && scrollStateChangeListeners.isEmpty()) { + return; + } + int current = layoutManager.getCurrentPosition(); + ViewHolder holder = getViewHolder(current); + if (holder != null) { + notifyScrollEnd(holder, current); + notifyCurrentItemChanged(holder, current); + } + } + + @Override + public void onScroll(float currentViewPosition) { + if (scrollStateChangeListeners.isEmpty()) { + return; + } + int currentIndex = getCurrentItem(); + int newIndex = layoutManager.getNextPosition(); + if (currentIndex != newIndex) { + notifyScroll(currentViewPosition, + currentIndex, newIndex, + getViewHolder(currentIndex), + getViewHolder(newIndex)); + } + } + + @Override + public void onCurrentViewFirstLayout() { + post(new Runnable() { + @Override + public void run() { + notifyCurrentItemChanged(); + } + }); + } + + @Override + public void onDataSetChangeChangedPosition() { + notifyCurrentItemChanged(); + } + } + + public interface ScrollStateChangeListener { + + void onScrollStart(@NonNull T currentItemHolder, int adapterPosition); + + void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition); + + void onScroll(float scrollPosition, + int currentPosition, + int newPosition, + @Nullable T currentHolder, + @Nullable T newCurrent); + } + + public interface ScrollListener { + + void onScroll(float scrollPosition, + int currentPosition, int newPosition, + @Nullable T currentHolder, + @Nullable T newCurrent); + } + + public interface OnItemChangedListener { + /* + * This method will be also triggered when view appears on the screen for the first time. + * If data set is empty, viewHolder will be null and adapterPosition will be NO_POSITION + */ + void onCurrentItemChanged(@Nullable T viewHolder, int adapterPosition); + } +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java new file mode 100644 index 0000000000..49cdb7ef45 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/InfiniteScrollAdapter.java @@ -0,0 +1,178 @@ +package com.yarolegovich.discretescrollview; + +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import java.util.Locale; + +/** + * Created by yarolegovich on 28-Apr-17. + */ + +public class InfiniteScrollAdapter extends RecyclerView.Adapter + implements DiscreteScrollLayoutManager.InitialPositionProvider { + + private static final int CENTER = Integer.MAX_VALUE / 2; + private static final int RESET_BOUND = 100; + + public static InfiniteScrollAdapter wrap( + @NonNull RecyclerView.Adapter adapter) { + return new InfiniteScrollAdapter<>(adapter); + } + + private RecyclerView.Adapter wrapped; + private DiscreteScrollLayoutManager layoutManager; + + public InfiniteScrollAdapter(@NonNull RecyclerView.Adapter wrapped) { + this.wrapped = wrapped; + this.wrapped.registerAdapterDataObserver(new DataSetChangeDelegate()); + } + + @Override + public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { + wrapped.onAttachedToRecyclerView(recyclerView); + if (recyclerView instanceof DiscreteScrollView) { + layoutManager = (DiscreteScrollLayoutManager) recyclerView.getLayoutManager(); + } else { + String msg = recyclerView.getContext().getString(R.string.dsv_ex_msg_adapter_wrong_recycler); + throw new RuntimeException(msg); + } + } + + @Override + public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { + wrapped.onDetachedFromRecyclerView(recyclerView); + layoutManager = null; + } + + @Override + public @NonNull T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return wrapped.onCreateViewHolder(parent, viewType); + } + + @Override + public void onBindViewHolder(@NonNull T holder, int position) { + if (isResetRequired(position)) { + int resetPosition = CENTER + mapPositionToReal(layoutManager.getCurrentPosition()); + setPosition(resetPosition); + return; + } + wrapped.onBindViewHolder(holder, mapPositionToReal(position)); + } + + @Override + public int getItemViewType(int position) { + return wrapped.getItemViewType(mapPositionToReal(position)); + } + + @Override + public int getItemCount() { + return isInfinite() ? Integer.MAX_VALUE : wrapped.getItemCount(); + } + + public int getRealItemCount() { + return wrapped.getItemCount(); + } + + public int getRealCurrentPosition() { + return getRealPosition(layoutManager.getCurrentPosition()); + } + + public int getRealPosition(int position) { + return mapPositionToReal(position); + } + + public int getClosestPosition(int position) { + ensureValidPosition(position); + int adapterCurrent = layoutManager.getCurrentPosition(); + int current = mapPositionToReal(adapterCurrent); + if (position == current) { + return adapterCurrent; + } + int delta = position - current; + int target = adapterCurrent + delta; + int wraparoundTarget = adapterCurrent + (position > current ? + delta - wrapped.getItemCount() : + wrapped.getItemCount() + delta); + int distance = Math.abs(adapterCurrent - target); + int wraparoundDistance = Math.abs(adapterCurrent - wraparoundTarget); + if (distance == wraparoundDistance) { + //Scroll to the right feels more natural, so prefer it + return target > adapterCurrent ? target : wraparoundTarget; + } else { + return distance < wraparoundDistance ? target : wraparoundTarget; + } + } + + private int mapPositionToReal(int position) { + if (position < CENTER) { + int rem = (CENTER - position) % wrapped.getItemCount(); + return rem == 0 ? 0 : wrapped.getItemCount() - rem; + } else { + return (position - CENTER) % wrapped.getItemCount(); + } + } + + private boolean isResetRequired(int requestedPosition) { + return isInfinite() + && (requestedPosition <= RESET_BOUND + || requestedPosition >= (Integer.MAX_VALUE - RESET_BOUND)); + } + + private void ensureValidPosition(int position) { + if (position >= wrapped.getItemCount()) { + throw new IndexOutOfBoundsException(String.format(Locale.US, + "requested position is outside adapter's bounds: position=%d, size=%d", + position, wrapped.getItemCount())); + } + } + + private boolean isInfinite() { + return wrapped.getItemCount() > 1; + } + + @Override + public int getInitialPosition() { + return isInfinite() ? CENTER : 0; + } + + private void setPosition(int position) { + layoutManager.scrollToPosition(position); + } + + //TODO: handle proper data set change notifications + private class DataSetChangeDelegate extends RecyclerView.AdapterDataObserver { + + @Override + public void onChanged() { + setPosition(getInitialPosition()); + notifyDataSetChanged(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + onChanged(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + onChanged(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + onChanged(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + notifyItemRangeChanged(0, getItemCount()); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount, Object payload) { + notifyItemRangeChanged(0, getItemCount(), payload); + } + } +} \ No newline at end of file diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java new file mode 100644 index 0000000000..cbafbf4f6b --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/RecyclerViewProxy.java @@ -0,0 +1,107 @@ +package com.yarolegovich.discretescrollview; + +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +/** + * Created by yarolegovich on 10/25/17. + */ +public class RecyclerViewProxy { + + private RecyclerView.LayoutManager layoutManager; + + public RecyclerViewProxy(@NonNull RecyclerView.LayoutManager layoutManager) { + this.layoutManager = layoutManager; + } + + public void attachView(View view) { + layoutManager.attachView(view); + } + + public void detachView(View view) { + layoutManager.detachView(view); + } + + public void detachAndScrapView(View view, RecyclerView.Recycler recycler) { + layoutManager.detachAndScrapView(view, recycler); + } + + public void detachAndScrapAttachedViews(RecyclerView.Recycler recycler) { + layoutManager.detachAndScrapAttachedViews(recycler); + } + + public void recycleView(View view, RecyclerView.Recycler recycler) { + recycler.recycleView(view); + } + + public void removeAndRecycleAllViews(RecyclerView.Recycler recycler) { + layoutManager.removeAndRecycleAllViews(recycler); + } + + public int getChildCount() { + return layoutManager.getChildCount(); + } + + public int getItemCount() { + return layoutManager.getItemCount(); + } + + public View getMeasuredChildForAdapterPosition(int position, RecyclerView.Recycler recycler) { + View view = recycler.getViewForPosition(position); + layoutManager.addView(view); + layoutManager.measureChildWithMargins(view, 0, 0); + return view; + } + + public void layoutDecoratedWithMargins(View v, int left, int top, int right, int bottom) { + layoutManager.layoutDecoratedWithMargins(v, left, top, right, bottom); + } + + public View getChildAt(int index) { + return layoutManager.getChildAt(index); + } + + public int getPosition(View view) { + return layoutManager.getPosition(view); + } + + public int getMeasuredWidthWithMargin(View child) { + ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams(); + return layoutManager.getDecoratedMeasuredWidth(child) + lp.leftMargin + lp.rightMargin; + } + + public int getMeasuredHeightWithMargin(View child) { + ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) child.getLayoutParams(); + return layoutManager.getDecoratedMeasuredHeight(child) + lp.topMargin + lp.bottomMargin; + } + + public int getWidth() { + return layoutManager.getWidth(); + } + + public int getHeight() { + return layoutManager.getHeight(); + } + + public void offsetChildrenHorizontal(int amount) { + layoutManager.offsetChildrenHorizontal(amount); + } + + public void offsetChildrenVertical(int amount) { + layoutManager.offsetChildrenVertical(amount); + } + + public void requestLayout() { + layoutManager.requestLayout(); + } + + public void startSmoothScroll(RecyclerView.SmoothScroller smoothScroller) { + layoutManager.startSmoothScroll(smoothScroller); + } + + public void removeAllViews() { + layoutManager.removeAllViews(); + } +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java new file mode 100644 index 0000000000..957ae51f41 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/DiscreteScrollItemTransformer.java @@ -0,0 +1,11 @@ +package com.yarolegovich.discretescrollview.transform; + +import android.view.View; + +/** + * Created by yarolegovich on 02.03.2017. + */ + +public interface DiscreteScrollItemTransformer { + void transformItem(View item, float position); +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java new file mode 100644 index 0000000000..fc5fcd11d2 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/Pivot.java @@ -0,0 +1,116 @@ +package com.yarolegovich.discretescrollview.transform; + +import android.view.View; + +import androidx.annotation.IntDef; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Created by yarolegovich on 03.03.2017. + */ + +public class Pivot { + + public static final int AXIS_X = 0; + public static final int AXIS_Y = 1; + + private static final int PIVOT_CENTER = -1; + private static final int PIVOT_MAX = -2; + + private int axis; + private int pivotPoint; + + public Pivot(@Axis int axis, int pivotPoint) { + this.axis = axis; + this.pivotPoint = pivotPoint; + } + + public void setOn(View view) { + if (axis == AXIS_X) { + switch (pivotPoint) { + case PIVOT_CENTER: + view.setPivotX(view.getWidth() * 0.5f); + break; + case PIVOT_MAX: + view.setPivotX(view.getWidth()); + break; + default: + view.setPivotX(pivotPoint); + break; + } + return; + } + + if (axis == AXIS_Y) { + switch (pivotPoint) { + case PIVOT_CENTER: + view.setPivotY(view.getHeight() * 0.5f); + break; + case PIVOT_MAX: + view.setPivotY(view.getHeight()); + break; + default: + view.setPivotY(pivotPoint); + break; + } + } + } + + @Axis + public int getAxis() { + return axis; + } + + public enum X { + LEFT { + @Override + public Pivot create() { + return new Pivot(AXIS_X, 0); + } + }, + CENTER { + @Override + public Pivot create() { + return new Pivot(AXIS_X, PIVOT_CENTER); + } + }, + RIGHT { + @Override + public Pivot create() { + return new Pivot(AXIS_X, PIVOT_MAX); + } + }; + + public abstract Pivot create(); + } + + public enum Y { + TOP { + @Override + public Pivot create() { + return new Pivot(AXIS_Y, 0); + } + }, + CENTER { + @Override + public Pivot create() { + return new Pivot(AXIS_Y, PIVOT_CENTER); + } + }, + BOTTOM { + @Override + public Pivot create() { + return new Pivot(AXIS_Y, PIVOT_MAX); + } + }; + + public abstract Pivot create(); + } + + @IntDef({AXIS_X, AXIS_Y}) + @Retention(RetentionPolicy.SOURCE) + public @interface Axis{ + } +} + diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java new file mode 100644 index 0000000000..74a0d26087 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/transform/ScaleTransformer.java @@ -0,0 +1,84 @@ +package com.yarolegovich.discretescrollview.transform; + +import android.view.View; +import androidx.annotation.FloatRange; + +/** + * Created by yarolegovich on 03.03.2017. + */ +public class ScaleTransformer implements DiscreteScrollItemTransformer { + + private Pivot pivotX; + private Pivot pivotY; + private float minScale; + private float maxMinDiff; + + public ScaleTransformer() { + pivotX = Pivot.X.CENTER.create(); + pivotY = Pivot.Y.CENTER.create(); + minScale = 0.8f; + maxMinDiff = 0.2f; + } + + @Override + public void transformItem(View item, float position) { + pivotX.setOn(item); + pivotY.setOn(item); + float closenessToCenter = 1f - Math.abs(position); + float scale = minScale + maxMinDiff * closenessToCenter; + item.setScaleX(scale); + item.setScaleY(scale); + } + + public static class Builder { + + private ScaleTransformer transformer; + private float maxScale; + + public Builder() { + transformer = new ScaleTransformer(); + maxScale = 1f; + } + + public Builder setMinScale(@FloatRange(from = 0.01) float scale) { + transformer.minScale = scale; + return this; + } + + public Builder setMaxScale(@FloatRange(from = 0.01) float scale) { + maxScale = scale; + return this; + } + + public Builder setPivotX(Pivot.X pivotX) { + return setPivotX(pivotX.create()); + } + + public Builder setPivotX(Pivot pivot) { + assertAxis(pivot, Pivot.AXIS_X); + transformer.pivotX = pivot; + return this; + } + + public Builder setPivotY(Pivot.Y pivotY) { + return setPivotY(pivotY.create()); + } + + public Builder setPivotY(Pivot pivot) { + assertAxis(pivot, Pivot.AXIS_Y); + transformer.pivotY = pivot; + return this; + } + + public ScaleTransformer build() { + transformer.maxMinDiff = maxScale - transformer.minScale; + return transformer; + } + + private void assertAxis(Pivot pivot, @Pivot.Axis int axis) { + if (pivot.getAxis() != axis) { + throw new IllegalArgumentException("You passed a Pivot for wrong axis."); + } + } + } +} diff --git a/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java new file mode 100644 index 0000000000..265ab331f0 --- /dev/null +++ b/libraries/card-library/src/main/java/com/yarolegovich/discretescrollview/util/ScrollListenerAdapter.java @@ -0,0 +1,44 @@ +package com.yarolegovich.discretescrollview.util; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; +import com.yarolegovich.discretescrollview.DiscreteScrollView; + +/** + * Created by yarolegovich on 16.03.2017. + */ +public class ScrollListenerAdapter implements DiscreteScrollView.ScrollStateChangeListener { + + private DiscreteScrollView.ScrollListener adaptee; + + public ScrollListenerAdapter(@NonNull DiscreteScrollView.ScrollListener adaptee) { + this.adaptee = adaptee; + } + + @Override + public void onScrollStart(@NonNull T currentItemHolder, int adapterPosition) { + + } + + @Override + public void onScrollEnd(@NonNull T currentItemHolder, int adapterPosition) { + + } + + @Override + public void onScroll(float scrollPosition, + int currentIndex, int newIndex, + @Nullable T currentHolder, @Nullable T newCurrentHolder) { + adaptee.onScroll(scrollPosition, currentIndex, newIndex, currentHolder, newCurrentHolder); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ScrollListenerAdapter) { + return adaptee.equals(((ScrollListenerAdapter) obj).adaptee); + } else { + return super.equals(obj); + } + } +} diff --git a/libraries/card-library/src/main/res/values/attr.xml b/libraries/card-library/src/main/res/values/attr.xml new file mode 100644 index 0000000000..7310089318 --- /dev/null +++ b/libraries/card-library/src/main/res/values/attr.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/libraries/card-library/src/main/res/values/strings.xml b/libraries/card-library/src/main/res/values/strings.xml new file mode 100644 index 0000000000..4909bfbff7 --- /dev/null +++ b/libraries/card-library/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + You should not set LayoutManager on DiscreteScrollView.class instance. Library uses a special one. Just don\'t call the method. + InfiniteScrollAdapter is supposed to work only with DiscreteScrollView + diff --git a/modules/mogo-module-apps/build.gradle b/modules/mogo-module-apps/build.gradle index 8b87ab74eb..4ac0696a0d 100644 --- a/modules/mogo-module-apps/build.gradle +++ b/modules/mogo-module-apps/build.gradle @@ -43,10 +43,10 @@ dependencies { implementation rootProject.ext.dependencies.material annotationProcessor rootProject.ext.dependencies.aroutercompiler implementation rootProject.ext.dependencies.androidxrecyclerview - if (Boolean.valueOf(RELEASE)) { implementation rootProject.ext.dependencies.mogomap implementation rootProject.ext.dependencies.mogomapapi + implementation rootProject.ext.dependencies.mogomapapi implementation rootProject.ext.dependencies.mogoutils api rootProject.ext.dependencies.mogocommons api rootProject.ext.dependencies.mogoserviceapi @@ -58,6 +58,8 @@ dependencies { api project(":foudations:mogo-commons") api project(':services:mogo-service-api') implementation project(':modules:mogo-module-common') + implementation project(":libraries:card-library") + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index 5813143c2b..6cf4635b34 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; import com.mogo.module.apps.adapter.AppIndicatorAdapter; +import com.mogo.module.apps.utils.CardScaleTransformer; import com.mogo.module.apps.utils.LaunchUtils; import com.mogo.module.common.MogoModulePaths; import com.mogo.service.MogoServicePaths; @@ -23,6 +24,8 @@ import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.utils.TipToast; +import com.yarolegovich.discretescrollview.DiscreteScrollView; +import com.yarolegovich.discretescrollview.transform.ScaleTransformer; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -34,7 +37,8 @@ import java.util.Map; * 描述 */ public class AppNavigatorFragment extends MvpFragment - implements AppNavigatorView { + implements AppNavigatorView, DiscreteScrollView.OnItemChangedListener, + DiscreteScrollView.ScrollStateChangeListener { private View mApps; @@ -46,7 +50,7 @@ public class AppNavigatorFragment extends MvpFragment integers = new ArrayList<>(10); - integers.add(R.drawable.module_apps_ic_navigation); + integers.add(R.drawable.module_apps_ic_interest); + integers.add(R.drawable.module_apps_ic_online_car); + integers.add(R.drawable.module_apps_ic_news); + integers.add(R.drawable.module_apps_ic_tanlu); integers.add(R.drawable.module_apps_ic_media_center); - integers.add(R.drawable.module_apps_ic_car_settings); - integers.add(R.drawable.module_apps_ic_car_settings); - integers.add(R.drawable.module_apps_ic_car_settings); AppIndicatorAdapter appIndicatorAdapter = new AppIndicatorAdapter(getContext(), integers); scroller.setAdapter(appIndicatorAdapter); - LinearSnapHelper snapHelper = new LinearSnapHelper(); - snapHelper.attachToRecyclerView(scroller); - - scroller.scrollToPosition(Integer.MAX_VALUE / 2); + scroller.scrollToPosition(Integer.MAX_VALUE / 2-1); //mNavigation.setOnClickListener( view -> { // openSearchPanel(); // trackNavigatorClickEvent( 1 ); @@ -163,4 +172,23 @@ public class AppNavigatorFragment extends MvpFragment { @Override public void onBindViewHolder(RecycleViewHolder holder, Integer integer) { ImageView ivIndicator = holder.getView(R.id.module_apps_id_app_icon); ivIndicator.setImageResource(integer); + holder.setText(R.id.module_apps_id_app_name,names[holder.getLayoutPosition()%5] ); } + private String[] names=new String[]{"新鲜事","在线车辆","首页","探路","车聊聊"}; } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java new file mode 100644 index 0000000000..1bc8021d5d --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/CardScaleTransformer.java @@ -0,0 +1,91 @@ +package com.mogo.module.apps.utils; + +import android.view.View; +import androidx.annotation.FloatRange; +import com.mogo.module.apps.R; +import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer; +import com.yarolegovich.discretescrollview.transform.Pivot; +import com.yarolegovich.discretescrollview.transform.ScaleTransformer; + +/** + * @author zyz + * 2020-03-11. + */ +public class CardScaleTransformer implements DiscreteScrollItemTransformer { + + private Pivot pivotX; + private Pivot pivotY; + private float minScale; + private float maxMinDiff; + + public CardScaleTransformer() { + pivotX = Pivot.X.CENTER.create(); + pivotY = Pivot.Y.BOTTOM.create(); + minScale = 0.8f; + maxMinDiff = 0.2f; + } + + @Override + public void transformItem(View item, float position) { + + item= item.findViewById(R.id.module_apps_id_app_icon); + pivotX.setOn(item); + pivotY.setOn(item); + float closenessToCenter = 1f - Math.abs(position); + float scale = minScale + maxMinDiff * closenessToCenter; + item.setScaleX(scale); + item.setScaleY(scale); + } + + public static class Builder { + + private CardScaleTransformer transformer; + private float maxScale; + + public Builder() { + transformer = new CardScaleTransformer(); + maxScale = 1f; + } + + public Builder setMinScale(@FloatRange(from = 0.01) float scale) { + transformer.minScale = scale; + return this; + } + + public Builder setMaxScale(@FloatRange(from = 0.01) float scale) { + maxScale = scale; + return this; + } + + public Builder setPivotX(Pivot.X pivotX) { + return setPivotX(pivotX.create()); + } + + public Builder setPivotX(Pivot pivot) { + assertAxis(pivot, Pivot.AXIS_X); + transformer.pivotX = pivot; + return this; + } + + public Builder setPivotY(Pivot.Y pivotY) { + return setPivotY(pivotY.create()); + } + + public Builder setPivotY(Pivot pivot) { + assertAxis(pivot, Pivot.AXIS_Y); + transformer.pivotY = pivot; + return this; + } + + public CardScaleTransformer build() { + transformer.maxMinDiff = maxScale - transformer.minScale; + return transformer; + } + + private void assertAxis(Pivot pivot, @Pivot.Axis int axis) { + if (pivot.getAxis() != axis) { + throw new IllegalArgumentException("You passed a Pivot for wrong axis."); + } + } + } +} diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_apps.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_apps.png deleted file mode 100755 index c564b8867f9e2b794001010a0923e9eb4806219c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 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 b7CZj`$%@FXQqs4>00000NkvXXu0mjfU3dl5 literal 16180 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Ν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 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_media_center_checked.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_media_center_checked.png new file mode 100755 index 0000000000000000000000000000000000000000..ded21b6af2e4d576cd60e08864fb6c952500bb2f GIT binary patch literal 6782 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news.png new file mode 100755 index 0000000000000000000000000000000000000000..b3bc19464ec033b5456e2f0b0cbeae6ebd79cefd GIT binary patch literal 8773 zcmV-LBD&p)P)PyB|4BqaRCod1U3-*WRej!bXYM>QGnvWc34xeEAPI?i5j0Xv6PhkGf?7o)T@+T^ zKX_PLA64+x78Mm#TD729UA3@W6h%d$K3X8CwWNzc0wg2>l`$a+Ngy+s_v6k?f8V+1 zJNLVL&bf2%%+0HNt#iNM{(g`B+xvH3_uM;oD%>g9Mn*y7=6%*bSWJxLVKaIaj>o9p7`9kAHGa^xONNJsgCmV5TuAgO11H+zVraot*0GGw znD5VRyCa=W<5YV>+X*e8EyAU?ecV=HwPCOjNeic|1Y6jlQ6|Q5j2$>6ycFxt{6gGp zcxzQv)x!y4k2!rp3TTUUxow}YZJEwc7m>Vjl!3)I`o!7$x>DjIp7?LGLVm^y`Te+Y zjwN?o3uqHQZ)j-fPMgqL?7?Vpix%$Pf!=?SMGI8)r%zm5>NHjyr?Dx=A>zdO8~3;s z@qLER>sZH9#`~#b-fR)-t#G&5^=+FCwiW|oVX(zDvx{i8Ns=RD6a2V-pSB!BW3nj9 z!Jd7ha*P*pYX=7hxAph;-)6S;sykNlF+Tz`nal=Tn6KM{ory_sk$`BrDCj5g(8V?Q zGbZ%vPo5a(uN-56qpS#CW2p=sTgdONtgO7wj>w;oKNfh*3TP8gTk$??x7{DI;sxU* zO}LneaUo$#8HiSD++zHTiOD!Y65)%-A;B+IS66?`;ti@@x#VL~K%2xIE8hK<8`8S`yL+*DBhOE5?tualYzLInE9oc_QNy$@7{@o*3#^4-5=!>+9>g zjC{E;x0{tAq9u8Q?PXuJq=Ov;$z#uCV_y+E?!83X6O(x88H={)`>l|_Z;L)-5^2M} zB6N&Tq=rtDY$+2GuH5Tp2#UX79A^m(C@<245zulpK*NS-MM2cAD z4_HdyPMbKFU!gusl$_tk=@64Zi<=zzz(8Jf;-vl9KCeD1!!FL398hKEOFxaJvOj)Y zU*~V~6?S9OW_H)nwp5I+SEV|J*Su>vQTQV{_KBPz`y7XTB6!G%;WzNKBhsFI+OSVO zV=1p3`8a>rY5ugOKTtX3o|M1(P=>GFv0vNW-97GW;<^!_UM;;Sk5 z(rXp2wJqh2^i;T>!3x)HUlhcF(_A;=T5JPOv2E7m5w~*oP_Rv|)u_26v{3%}9;18A z4H{nt$9WT#3uSW~xwNUN=_lwHYGW3}0@d5mx6_K3_jw+IY62X@pE!9%e^MH!82=Xz zr`*FktK1W3Cu7c8K?SwGJ{ z9>QH`8VRE@5u(opMg?Bfk7nc)sp}r7aNpUQcK1G&cI~}IU$W^wF04zBxXaEPbl1MI z-%W4GUg!P!YhcaWFRb6EZ884lJ7}NkFK=vYd|vHUE?B^>uC7fs;95B71Q@_ij=Ulg zMpJ+K5!GJhho7%Pjb*p)heKc@8` zx1(?!$Mi9=fOhJ<+>XBQAs`!);Q&PFC=+Q<^m)dCUS;+Vc2>BL{|8NFHWrM1pg(`r#m!&!@U`tdR>TLCr<@y^Oo(>$ZL{FZm=Kd7 zdgcYYOfnAPs4<^CQ0dHAB)y0waaP?Aq$eQ;^CoT!~WfDZyCCQ9Q{f~B3xlcb*=LUun_bZy7FuY=E zzq@%|ud`d6AP3IZ$6^xn=g&S+8)93#tfi%8)HlFmSE{3<;|X(!zSF|wG^j6gaGz&i z^-M5K%nc2XxPSart-I%`8k(Qfc+uQJ_xZPWx%%q-vqzz%3(X&XT$2JZHcy>8^-aEh zQ~~WNz{Pgg`6vx_U~t-}%)wa@_8FrPVrTonLzCR5-xmG!s8G1$rdv2Yl-Mcf8KY#=b0?`f~EpDKUd4c`beUm zIc}}uX2dm9gdP34BPeIODtowsKY)!|UIESEYC19yEm;`ws-sM#Km5o6b=%*OavyxS z-VL6_cblAdG5FOdCON$QVbgho)45ZoEm3*OKs4=J9j>MiFe;$kyeu*03M~{2=&XfN zo-$Df1;=>Q13&t+Nv`cUJr=`w$GYKR`mLK9Y=_M4+*}8pKl7lD2%hUp&PVZGapcGm z{C+^tq5|4e7yO_=(BhoQ`3ZsdHv}PMGTIuy}y*gu$P)F_|YD3va6xsKOO-Ema`|_`I7k%Ha9R14Fh&!ug z$W5Iz>?Yf@%yi|5eLk3SuiAE~E9H*%Mf+?yhRcibtu2$>`m_7ona#O7aTX%a&^lZr z=($$@8q1y>8#pl)HD^B=_*HTGyW$^-Lp-SQS}X+&A9YW?z1qSP^>$Q|`w*Yoj9%V|1QvFF2`BDe_~#%U$nvEI$Ty9AEW%;HVvJtY35J(4o00`>Wao zP|`S5MiYv0jK)aPf!FPSU!GV2Z(h^sR?W_Skg8*<%%qfK4$yHYB&rUw&i|~IjQh%^ zZFV=Cd?Ui~l5qRMv^}iIeM_C=0nyl}9FQST&ObwtCz^f%{=Q)W2%Q-Ee&fL4IXEV* zeaZnDzTo>TFC7{G>GQoyyWQIt^=il{S0y#SBpxunLjn--hUx}R&;y~PiLOm zm)&t0laaXA>;q||sOy_xvjEq>;0S~P8-n;7bmZdf$f+IdpWZkA;!Ud`a@W0~D{pd$ z$s#ZxAe(Y3Q?HAs`nVYHT-4*%&dc9<7^fI~{!lt^%{U%>DHF*N$pf{qAL0W1&GtMR zfYb>ppCrS_Ur^ctUuqkF0dII?m#Ym=V`0KUXv#p!P#|~qiJDvB9KKLb1P$4r|KD8L z89dEV-(uz6ujL*Y>NxZVN1ihKw9)*j6P$+v;%AD3CW;_1`aTCk<=GDcgfFUZZOc8S zSDUfqh4%h#!@0eQLB}j4)8C&zd@R=n9D(>f>Sz(T2a;o-g8<{2 z@|1xc<9Pal2heNg=8is$=NC*Tq&cdrd9X0x$RjRgBK=i2!;ZqGvj#vF*+$%-Eb4M! z*>EVZ=a?J=$Z;sckb276_va5Ai_utRMnM5VpwWp4M+`cb}@%!4u5CxWL;B&Rv5Og#{denjOs|BGJN=e8Xf`)Sg-(+1pMzp>pdKP_8ujj3_L zV`E;bBS(bJZ(-cg1%#pRs7X*Ja)Rh%gD)E8p74=UKoAAu&j*o~54vpgno$!Sm zk#_Jw{%B#$#@Gv#P7*;lSl}7HDDTU(17BrNQ8LB-Sz+L|Y*xR!cph#V@+TN3%+RqD zr_#?Ke4M||3%Rnz$!9bTxj$Xn<-WVU!D2Z#t07|#(g)nC)BD^7v+a*y>az<=-^zgl zZpyy9+^h3G9py?L#?c%(E|50NP5YG94yVvgGoDH%9I>&l#*nqa1{>`u!-nz{d#-q( zGk9jMuI4l1=GzmG#WMzig*dHo$l;=YW>fYdHT*S>x90^qj++8CG^42uKu7k841_*qwWUm?U2`o8$SBS}Egy7mncw3sv2E(4>|Gj?VWU4d z$VBK>MxTX%tc@|~51q=ir5*dU)4nfP+YMIMFSnB;ud2S6T*IqBa`i|4%T)|#-*yb8 zvhUDz9AAd7Ht5MwrjO1aoNd7ex+q|@IBJBz+Gil}ak9ptFA9iu?$iPISF4Y@m8XsV z+)ZNz#`Z!EsBu+JnkZuc8Hcj^(~dhroKELY`_z!Vt;n>w>Ym-Mw)#twp1|}_Xt}^?CpE(i{ zRps0$Ii9&v2YcqI{+0bNyUBL?tLfe4Du()K9$>|Y{hi>DolZuI`=laMb9$85SotxZ zyaBBf=SR-+@2s){b?D@%)Id5>@U#J9Q-2nmcGtfl`#?BrYwYlVt8ahQPB#y_bk7Sg zi*3BSs%!s6pdU$1az|%f>`I{TFMe>7;qd!=4MxGbf zN>L4%mvWS$Q$NfJwZk>AwU8qMjHQpWp$`#zZR6qZxyD2H+fmleyoyF#SDN>K&CVN@ zu5;SE@^Zo$(Ks;?u~V^#KGGciO|N{rY{f&|OzoUec`;8#<^&(eeuJ&ghg>Um^xZU2 z)F3*5@|59+rvB$R&fJpv;JFhL!#KO~C~Y?k7=#Fp4V>~Ss|{r6xQIZs zX}`U>EX6~tilJ^dsqImSc?}aoi_6XDVZ%JBo7BF^oXhva@m+R!bdqVH|82B z!x!p^)M+0w*A{w{cc<(p@q;6f4nP?C8yy+Y*BA2dZ;buxV09@;o@}RKEVkyN0sP$5 zjxy|NhwF0l;rleigyr7)<+=D_G>)fhNsa@u?<4hE{Gfm{X3S_cWxqPmSP^Tq4FzlI!fR$q}oZ4R3#X8de2ka))kac4q+MrL_w?qHvly}&qa$hl^|HN>_ zP2c-D*L?8XZe%!n1CqDnggc|=6Xa;uyq1Ii;%4r-C3s&tu^c>adz*7~D&DK+&SJ3e z3#J8S&hSw=$klv-Jo*^d>>fkhV7EAY_;92Bu+I@Q;`?Xl#%vsrh8&PdkS9*v{}ns! z<^6gIRTIWc^=#KZ_1&(kX`LIX%>Cmq&9NfW=^Bqd>Y85ro~s%>JmE3p0(3U5cZX+x zI9T+gb%^r=r@7KbIm(6^``wt}k6W_GwOO~ewmxA6T#Z4|V9XYmNF2uj=m#VRtjfIV z&Uo?9?P2fe=b`E|A=!?A{qnfQROxk?TIp@3y_IkuUV*Th}p)wd8;u;QV4g^GFpZ4S#BU3fa zwN1auPG8@mN%_&9_|)|52)6PEFC4M0<=t)|eH!-KU@c(Hx%+EFJ}x5HHp$<7QLCUu zAJkb@@l(I#qk&04M|~Ws9zN`=Eo59D25ROq?Ef3gq-VGzQ{NlS$DconqH94zwWFTJ zW*@dHqgM2f3TW>swwvQt22>|?_GR`JAu|b$6L9ut`G-#bTf2Rl*w^hjfs+GM?v>N* zx|hoST7|BKu7k?3p`Fe_dDT<47+dGhpCA2C`>257Lf;c&bOiZ*4#0ra1F@H}CF#Kr z)ScrF&%B2@8&=z?b7N8K#L4+<;jbC($cuf(9)0FL^UEvXS!bPf(2Vg< z?(_Bn4MZJJ2NFCOmwKX~3}XQg&brZ_SX`hcr}y^DL&Y6xz+lQjW^hHyw3UG)d+GvPyX`(O`;!h2eowX5Uwe+* zH~Sy#O-c6Q1m?r}6LtRn{AdH7GSRnX;VoWXZD1F@4^*cYUwrWi3l{v`WME`(6Ervz zQ=d2)KCnfjtVo}V;XXHe|EFAC_cl@|HFh?xaR+9;-;Gp^z7b1W8=ZHY4LPE}0LE`# zv}jTA-cNOLM<5paRu~}|8V1+KJwiF!5TRo-?R z{0tWv{WuvMc_8*8?T2v!jyyPR%0up$wA%fC&Oh0k{nx4436=Y6&UUS5d?6?v5@F6j z%HT_xKmCY|%OeqeHhbfq_>oEC5eR2H3O8B6wf<4UL6dk641_K0RF31Q4-A7&#x-~R zr<-=<-|boEk%&H?!mxc4?oi8BuD$tfHjnHalIE;@QjVNAF_>n;`bdn&mn>PbPWpLb z!2;UN%z5@3qBxaiZ?(jAtR!Fx8#YdmNZv<{3mv|TIi>v}H?{47vVLRCA6NUssd{&$ z=~8#3`R#5fmHp!_KX1*mkQ~e*W(U^sRMuF=58AlP?ezJ)+NfNxfH1V9@HQ*rN9e?f z0MR%g5RH1s)Dx~A^`cJ)2axb)zGV!|ZYq+D;!eAhi`x$9`S$n~YO*WFTcWN@9oa)^h< zxzLU_acDk!r%ju-Xx6M*6Z_{^2)=vw?hSS=#Q!X);Naz&B;)BMN{L-Lc*xcF?Q}JR zdtJ4C*{OPPzpEVXw7b||S2QtFg^-Jv9qWm;3cZF0kf8 zP7(T2a*T^dE^hvI(=uY~ed*GrOMgPUBpmYyq~p$=JHKFq*~bWDH%=CoOt6#*`~L7{ zEMFc^e2t}Jkq-v57tL8^>XT4o#^uLYL_d!Cd~w;bWgqtWxPH+Ew4iA#;x8>o^r3H3 z0!ch4MnpoCfoSkWV?XE=cq!!1JctORa)GdsDlR^Ai;D#gjW$uBkfV> z*RL@w>RZN%?*nzFHb6A)NNQimUv=n^3?@IH@eVM3$ah$5;YoG?f z!1kyI3Ea&^C(@36B6!HyFj?(W4oG>SJt>XlbE?z$v;*=+LOJ>osY9QfkF)_YCT&y) zS$W8|;mDg%@ep@HM<4>QJ^Splx0oDU6E#`tiO_Ljlejp4_{8yy;UmYPkNT^uesMhG z(2o72xUi#+K0ex={HLsVrKP=9dR*D>RGa*Rb(KcBOFaH_m<#flYoQ8!U6YXOmr74b5If3t~98Eg}GUts0?IW`*dTb z{WC87FZ-*Fj{Pb*&Amk>9Th^06e-6cu;^B>t>%7@y`Q_!zVeXwCtl+STQ--Is(?DH zC!c(Bi7nnnTe$Uxt8CLBWQYo-K9sTOEMU@+NIiTg6T>+8L)R_FJ!0Gac759(@+TFX zv<1{v+O=y}V^>$#8ap!A*F|?dn{21q)X>oI z%Y_RUc8dO_6iy(RQGX1`+?pRq00000NkvXXu0mjfnY^ME literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news_unchecked.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_news_unchecked.png new file mode 100755 index 0000000000000000000000000000000000000000..5a64a68660ca8edd605d0b5f9ebe70b85379064f GIT binary patch literal 5060 zcmV;#6FcmQP)Px|en~_@RCodHT?=qj*LnW$-CeC#kJSV87Lt$vNk%-34aUUSyzGRe@gsF+;@C|| zYxm(!n>1-U(`3?7-I+E??J=3U(;-P)I|JA$&Xlw`Y5{@3j*Sf_7-T?L=mkhZFIFpQ zSF7E7Z~yx3s zOkqA`h=A_yy}U{YO|6w>;cf)BUIB!TgTn$!_+l=IqH;>Hr=6@Ut@&U+yofmi{>xu( zOdGs$>3%_yKabjbFY2y?1I`9SC_(&ZyrbB}Ul-&pJHBsUAsKB^jgM(t4ZGUsqp7Um+rph~Oz;D^|)EZfl{{Zdv`cyM*O?>f$ zD2V@lTl!(Fh3t*XS0S>#It{0k`{$tRJG`Iu5sj<;+d$a8;AxZfoYW7)?>DiJ=%~ZQh z_=&W!_O+JA#t_eRxdQ*-!(S<#8Wa9e0A)GPOwPS5q1BPCeD~0Qzt+nuFI?Knl$lN2 zp4ue)<$p#kFXxrHc_gP$4!{?ymaOjT>NwlQBVQ>4Po||xEdCbA^0%;gn8qVh^HK(t zO_3j}s%~&s{r=s1CC2}vG;p6Jze}}Q_~)AG6Iv*cxoz627nGcDAneY`gC#&g3yuf6rVP$`Jx#($fh&%avSt% z*hm2h6T)ViXuxCG)KKe%RiuKl)_~kwjit!r8D3Vkj zA8iBY=tZyxZ_L@NQb71nc%b$V;|;9YP<8KpTG@Cv$0V4`p%j2GPlK?FOV3!!>N zI&b-B*`veX2d zbe$wi|Ed>(CruHYFjDhX@Rrdem8rg5O4-O7I01R>uV6jkNlA{8$TrdTr+U+fx}~K# zQX@iB;R&S`K;N3@5cG#ojBYkk5g#}1c;R~JUH1a`@>j*>;}IAO%bQFMtp-p)euhV) zv1Isj>frjF-@_J4VJsHQ>5AxpiGt5yYsdr6aZ4-T;_B+vr#d^&;tIEq-A$^dF2VSi zfwyn0cry&F{2n$5qgx}q(=jAZ6kvGS(=c4~q#^cXne;G?(s){Iq=e)@Pd0%>@g|Bk zz+m08pa?g;??h284G*}Nfgsu;-SeSE=_utj^{d|MY(F=>Vj&6vTH$3;$}pK-14GOH z#47PA%e_(YD2!pN$0|1y+iBowEhAf2XFEq3rMXPk5Rw@11r7_A!n|Z=DfYjXl{n;{{keN15F?AtZgl3PijW z+i{$w#tPAv$P77iup?(pWlJlgwM;YM+3bk`xKx_2lN?zvy66$ULT5qRSjiTc#0rqfG(0K0WS$Su&aMR6NE;5|fD=9Y+S&@ELI7sAHPb{y)>>Dmt&gKuH?eq2`&4gb=WK8Bs3{$sdCR>U!x`(SL*!w|?Q(~V<< z7|dA2dbSxO9~fab%tKfsvkE+If8mTfcq+eyt(fHgM4}vm?5qC+d0oH4G53JsLJ=d4 zK4$kHXP38RD;s!|ZBA1%G-hx47l1eL3~S0K*_`g~i^phAK}#^zyMhJnxpx;NQ()5a zg4P!x-TP6h*~B;=$Rql#NHIwfeF%hGtS*}04F2#+vsNGnBmRs{G}OoTvoz&9+)r}>1+T~ zxk$h)rROK$hz`ygcr%(X3r{Z3Ih^p0nh=VastcR7d6)OZ3{NTmF}Kt54Q%3YbF%0% zEQ?wh_Q@f`{5%<5!|y||{C8rC6y+e~^z277_+QAw6CpG-h`Alr9yOldaDi+$4t!?+ zZ(VV9l_rR+IydBpoW?wr9S-l5wC}NCdV?kyRh9~&VB@pJx_37iFB8C#5$v_pV z^M<<0D~>2jgQyjihZ^nATLGef2+}8dAPr5B%S&y2Rl^-N37)vSAGXwuz>Zf|aLtdM zo%aHe!%HfyW1Q(|RM9nj3fDA#1kQe&6w<`pns~>_#R`x@IJAix5 zxVAsgz6cZc@F6?gfVYK4Svf=mH~ZSJ!QFQh?fBr#vdydK42J}zxqet#J_f5w$Kb9C z52PWDt@lx67!R;%3vPL4JH`=yb6vRv$%|8HBl}w*x8oO4E43=}eXyp?3rmZ~AU|^o za?^u2vkx%pbHEL}+WNEMTwfNn4`wGw!F+J#0v~*B-4&=_=m(LO7>Auh41wDvgB?u@ zbF{27j4=+7qF<%=j!sXNs(h*bBIaajd}!=b6*V2-jjMB^PhBqPM6G$Sb`Tz0)eFUL zKi1~Bjuv0HdZ#D~EXu(gpl@T%Afun|$$=jot_ANTpX#SDdlH_1tQ9gG_@Z^vr-p@$ z_!0&bjzcI64e}}y;UYlqi17vkl`4@V%&~NIh8J+$tE#@lElURA>H9jtjhd}G1YJgz z!V<}NXNAN71^>!KqZdMMb@>hW`ua}zam!Nnoa)aPm*aA6J5~6`(vMaQHGdsLe1Rv- z5qLZ}jq}pwZ)~~*+iLq6X1Es=MEv_I3jK!>jI%D!=B0hG@3-a9JDPfdH&hR@ zmun_{QuMIJK_vlb?c=@bP3#uwv^rLLu0JwJvcfL<3rkoM3EzN5Q=ipv@{^XaurLo2 z;L(*=QqIxFn(MG2({DO`GBH|SJ4do$e2QNio)ro)7wL$=luI~6z=@89gdLg|1QjpM zv1g)VAW_w4HJtg077pLMv>)w%@?$u;t^j;(?d7D?*Yf}NWphIyT3O@W33HLoWyE>} z4FW%R`dS`%vHGBM2MOd5{$J^$!blN!7LLi1&DVG-ocuOHhVO4b3kx#L9~tSgOYr^A zo`t-OK+@^6e<9|h<#G`}U{DfaO_E=LINEE|INuM~hUXsnf!fpNaGr4^Pfq)i8yQVQvx?aha# z3yUcC{G0;k_wRq{bykPaVVL|RtCHThfa_esO*7TBsDQIy20r1d(IWgr)983F&GEsD zUwQ|gxbreN?bNu|cc@9QzT!GO|H!-0P%^|`t|})&wn`1lkEBQVBhugVezksLDNr@6 znHtdvq!0}5NI~9BQ9V8<96DbPpIeTVBo=0-6RBA_O()ophc%wVyqX{HHVDDP4IQv~ z$yGSnvk)#0=7PuXf)KLiJEx$g&?d9-hM;Xf-&mZiu{s!&)8zfWfCjgzb z%QF#8)?1xr@NRbz)ve65usi;c#*s;&JDHpi(&$d%(KKoasdOz|wlIFr4L9sLZO!>d zkr+<{PX`>M;w9g3){xe@|Ma~T(C5W%@Mx5&b0Slx2`|=>B|jN!1e0iymrBF`0=^(d zw>bW&-wrPxTLV)eW(agjk^%{_Wf+G=Os8=Ee2cWWrlAzUuTMd|ZqyK(oD0_%z&(|? zxi>uGhfs%24Bb_y(q=y6%fN01EvnV{h?{r(5X%4Y@paHM%D+OT{Nmx!2i`dFQVaRX zO=~=Rz*D6e)q31L7Mh!G)AW|yfi;EKgdh`MAvwE#@~JF z4!AhPzn7{(Nhfw|e!5RS*Fw z%a1i^!ZZpaIvYk0)96`?6M0W2eo(T(Pfp$mZ}(L2E^dT8@x;+XdtZqlL~A?+&{5uz z47~jx4K0AbKe7>eJlWU|*D6%?&N@6{8iA-*rf6y+_$ZF{oND|bUmEKo0jEeaL0p9~Nc>%A=egdQLAt;bBc7p40~K^x>Uu`=;CNRxOi3av z%EoOqB37!HqN>ko()3L4L!;3%Q*WZ z7+MEP*d;5ve{70nnX`$)&gSM>2MV*ike@z*!^1M9+i+17s?B7`iMAS-i1;(0eZLW?G@K3iFwG6m8tIW5%^Nr1DM1=uSiIx$1GX!} z<2YEj5{HyIFDy4&EIxcRw2Pk={TJo_+J88*>m?c@<>t7VnwdGe{UP0%h(teI2E3Nc z?N3K*NJQT)2VP6=_Q%pSB-Hz?0k0)XCw9{T$Lt*Axo!brO9fYW9i+uZ%}smGYk8cF z`>X@66^afxW@qiv(YgYx$LXY5s)&^!PSc*iUBz$ETE>0*j1O#SdFOGTGvFgL&yHZk z(_ZN?OgfhlTSN7@V1P@D3kyh#k1x(gI;xe<3T%&nUjz|Vw$UIZNx$W92v zgVS&(8!w>*mpI{)W5}eH59r6^UTE4?n4o4KdM42C!}(#{FpYb6aZ4lZuA_}!^8x6Y aW&D389*D|O^adsX0000PyULPWtrc*_c=Mahf4?n<+2y+a*9bn3>b$2xsz}SgydZI z?(gzE@AvL=P9TI3Gw;d%-uHc;-}8HJ-}mjEefBx0SN~o zL>b>QvG&BR*YsX9_4lnD$oJqM@4oB0m6MZWZ!Cksn}(&lq4dhBWjGv1gYZ=fWL{-9 z6lgTs9@dZ>n|jVR0@HM_*Sj12{$8)&|IXON_;;^A?d{uI+>fLrh4z{%?#g-!kwZ;+9tJZ zsI5AEf?*{{W6z3YV}t3Q((7M8F&up1+OywzFZBn*XtMm}goEd!-o+cQy#RfUA zhJ&Gcq*kyK9EeiIWPzjTbDBgLlngWX|3Ua}eU-0reTEHFpd zxmnGX1atFh7CzWB=r={!JJ4E}AjJfju&t z13K8avT4U03;bm*!dmj9YCEFh>SL1^Fy^Os&Q>NHO z#$8b$g3P_`^s<-S490Xtc2j_&nm8JeB>1EDY93Xy?Tt+^5j3a$T$x0nuT2iWGMsgQ z>bj+?mtB6%G3W1`rP?oBy58^O9Y4P2j9wXh8RzinB3B*46)I4#k~oW1bQDYl(d>{| zL$xF8$e9uqR}1akD1d{z7TMs+n~fAF&8wcA*kqg{kXF8GqlnkAj!U0>zFONbD?+@z zpDgH&Uv%ABzjLSU_usL<|ESD#;ihXYLnVHQWTJUkDH|q<5t(I?Wd#|Flse9CUdXfZ zDTEP=H8NVlv`^jyVy~f@{se$KtXq44s3J^p(TE#9>fnjUjU(}kBWxj)IIyN2o<2RC z{^38p{fn2;Vtsk}Ey@<~4TStUATV!7ug>Z7^Jk$MIf z^^S_9G&rDSfrXI>`lwt!x26xvJH7UdB<#%?{F(ww3?8CYutavl_IBDu-RVbGAi}@T zoU;DnD>n3cI3r)$U|cV0{LwxCW8s54|L#Vd-S03_L)jJ*Yvw+J2|ZJy%8kM*J4QW5 z7Fe|t4>8u+5cbu~S4LaNw!q0(?SsYy>5Eqtc<9>(j>)@-#{qPHi0n?LN*gwnOME)q zvU2H)OFnhVTX!dRUuMO(FNU;<=KXgx?_A!VSSSzAPRZ@@t%i~)aA30l^VtWPY}nM~ zuZ^w%@HS0PoYYx4&GsfJl{H?h)sKj~22NhF!~yo{ijuUin6OV1fxVIYkmnk4e*5sH zD}M8(G;yDw12^Ed`M}P5ZyXE<_;wFM%48HIC6cPJT(NWv+>IhgJE4Sh?wvKOOqAw0 zvx&yuuAmQ$X4sQLHG@3u#7!zIs=d5ddwMb?V2X~svX_#Fv&rqW%8Dut=iAdJGc`s<-8M+e2 zUUdipT}_bLzOpJ)dRC(-W+92AeFLLCZ3P&Si=wj+uF6L>@M@^Yy_c9g;)=NB(7t7F zrEIIqD3kUPV8s89dp6#56?yk%>{A2ZzVTBVka>NmuxM5P)=99lqodaQDR%t1TJ zO#xIh>__3t9;)hRmQJeh6R_a=XMcJ2JFkUkug7Q%FJShLJOBKQnW^$aM7Bgp0`D`7 z=blPAa#S)*7{hC>xX<8ydn4C~J~trsEl?&j*1iFg${5W;bk3>{3yr3b5m#sL#xuS= z2|VK_#d!9@p0?TddNM@At34KEqh1RtxP-7@dOOD_#{bcEXYBnuHhX;w<$IemQ-d$# zUD_q|nYV;&q}yUmJt{^gpY@`SgVOHy!h|f-F~LgANQvl#BWJ2)$Kt~hRp7&V&$(B@ zWZWDA%Q#4o_VNXti%cgN7JAKNp&`6vM77$XdCv?EEmM~m02~z zPXA`(Nkp0DE;8){M|CvautuI%!a|;Y5+Ak}(+&?{%@BA=Es-DEVA%iM`bkH98J_m+ zBhRqbdo>ut3y!z__>-5SW7oTgtx31eD=|V=&XGCzt);HT&6TPYI{1p|Zf9+fv}0}a zB(k3dAsu6TKKs1F2d$4DdSSPDks;S&#Q;VE~my70oM;MOY` zn=2;8HZ0r57A;)!Lf;gA;alkB%%9@6hvxB&<1sTCU314ly{}YDoSJnGH&cN=s}jN6 z-W)0-xaiYNn7mQG;!=00$DkneiV|CF-l8*;NJz}q+e*K=li!~d<1`i+2W#v*e# zUaq~8Fb=g5fwj1E+v-^l7pdcs9*Qhphe;-$(blKVClGw-U!$i<^>4epsRqDf!>p>J<_wiwd@@voc8Jj&`f&BE?Oc`7~91NI2 zGJ4LVGr=y-TFOI~syxfmq?=K6Y*Np;I}_77^xd}dv#8Y`3-JU_JhApwX0IW#S2jh% zvv4E!*l=HQENGZu&bUJYSn^q-6OOo)^BpMJdls7eG^@C@r*6>0&vab$oxzpqVD-=*OwslPz#|!9d4o1)A zpCjokW^nS}{`4=(mma>o-2dDY_AQ@W#!124s!3D=Av6A3x70Uv7_pDoNYtg;+j_xS zV{7L7%;~&W;O@;2TwDfdUW{}=Ql4QMjISitO(7bM0EHnIUyN6FQJj&hk3m99**S-t zT>j|zbIU}}Ac=FyrW=*=hrGO(cb7cLLtMb80HIp{#rb3g6iWU`)IzpbQ2*S{`2>NpR(qqb%C%m~#^vA8C z0uMGXXRc>I$U_-tul*4Te2WWmzww=O^5kqT;>c?}-Eqy?YqC;CKlU+(JHr(xyuO^i z>?jq3Ic80iFN+oN=LtoQ9NA3mE6zDkrutFN5wq(*^C9-eitae4fp5R#zg#dF3{O|+ z@az;A6m78sTddqjMHeAbfrnG2u~%{z_SEJucPW=1^IH56X5U4EeOs_BoUp;21)`4Y z4(~NR@L}6dpV+ilB;pKw+R;{PG%jZP&sbnm-g(TcYksUrtv30XH)Wim;jAWW={1D< zN1YyIfUR({v)&9i_IjsZvhhn7kggqbZlU;4(v{U43Gt<-F%q*=s2a#O0?At{0})JG z;_(kB4W-Su0V@pyS-0%ia?;`>lV+m&MZ7=S~fqL>XlyyfPThtakX8nYbiZwIF^#`0m_Xk%(dMi~qMjH6GyFPIu-mrchswBOR zIMmA?B-v0#ko{CeA~*$X_YiaEB4oijd%EbA-(LM{oaOeH6X(aCd#3!qM}C1NzOdJ= zjYWbL3(Hr;T64yN$?FQi-gDS60@_J$to7t_leDTB@+8jl7Mw^Y9lolpm{=?u#?5j5 z>a}hlH%=9^Pk0J+>LRvmkOBn`u4KTHDG6`un(>H`F&Rk&;wrDZ?Dj97*#3Ot$Srg* zHMrFO?`xdW5=0C_Ve25FiV~}lHD&6q+(!_KRvH}`*eOd^msc%4TDB@OWI6x%u?L-a zn5YPK?FF$)6i0i>J%Z#v`gFC@(sJ!!p}ee;-@r0cnx@a)Gc)B|Kf6;t=z+fYwPxw+ z^2(*F#DlH4%FQK~Uuo|>3`jr?&T5aqVe{Loe+3$7>5~s6!TEt_p3)Vl#N>$fL^Et3Tr6$ej&bre>ec62SHq87|L}t7E87$ zwQiV^Dy0>QlTwZ3GMVftR}(OQ{hm7Hm_FOAe&)FDgVn8m8 zV@w~c8|~yE?XgXJJkOtU$;O+`NtW&k9L`*1E2@-Yw;c&6t|Z7ThC`Xe%rzAnltn;_ z2s;LdasH8U^%)^8oA-B5KT)3C{hV-YfMSsi?DUUkC7t_f)H=AiX5=22BM$nEj5OQc zD6J!=$|VZhQzd)M8y~u_Jg{Rs?h=sUktf|-SDg`FZBzY6B%H{>urroaaSx&7Sfp5S z)@{Bx6Az!`XD&=&ZQ!uqdy^A38J%&@#6`qCopD4US)i1)_Lk8IgJxRVe)Ys5y|ofhr6FlQB^+cEBJY5tAPoE?x#@@0J-BdOCppTUVV0 zF=SZde5z;k-#)p$JUcziK}5tiSezg>S;N#{X>I zeb=q}{;V3<-&KAcV4r5 z!H_NOK`*>YW;sdUv~sQ9ux8?Xu%Mi`KKVHQUxi<@()uAEhk}W-6BaBvMfC4AS(p%K zHYs9~l#0|-5EzLNY{V-KaM%iC3vI*~3Q%>LN1xeI{^o&u#Yib1d^7&nSK{eGI7m3t z4f7&~KGJ8*!cr)lF_Hmm9vITT*>erfQ~68(`VVd1!EYPs+W;~EkpdPWHyHd+cr0V0 zP^vtrfFM?c052Y!C}Ru^IPxwUTYv_h8Evx_8Fo!imHVICo-_$6MqwLa25UfoMasGKT2d^(bN8KP3b*~d0x5s}5vM9w*#Xa| zi-r0Y8MQG)gFWWT2w!c!(nTJM!@vvyM1yhu#zwpsI?YqY!KDw9r8CSrgCMJCJc#8? z7_Sqv0N-x8^td;c6P6rVre~(h_UCq#?Yo~YM=m_1Eb8I*f)Q`EVl~vQlfGn+H?7H= z4>b)+Mq_{U#h2Ka14}-Z0g`xSNGwE*mj%#L3|<3Ax!+H9BbBTCgs(t~SN{hi9rL%I zGjn)q*R$pS-uJWet0$aVxfk^&%4Ns=YIz(vAGUCLIehW5GCnq5?%TPo+;smB%XB=? zD@MgaQjjrLPT?cpM<%iImH*LNBdaxi*sP(I3PkH;5<11;(e0s> zTH11Hy&I3cG;wSwsZjy7NCujxy%prmRV*;|%J+YEm!89w6C(la)a6H&Rd}_{+y|%u z$MH)JFK4Vch9AsCf8Iam7?Ry+jKNh!}xO_nEiJ{wm*uS|TV z2hW8o@R=UwK7|@g;Ri|>_+mVbC^!Y<_#)J{ru zXP+WWLs+RmhNzHAn)^^FX(Yhg9B-ezUCdxUa>e1IVnA$`11n|K(&c5*_z8FcgVQK@ zMF%u7E-G$!_~M`~3*?6Tl^?&~*y_d2%fJk>$~V$8bT=Y*td-Zry(|x=inDxQ3rcv|OKf}w~(renl7q)bG z+&C@`{aRw5%^{D3)JU!?372uUg1~yRb(melDW7>b>)6C)3zq6Rz^^$oN!oA>%d&-j zUiAJY9+~vqBrV%3>NMueF`LlRdJJ`*0QSvVl(GO<+tLM#%X8DaRgZpuy6ona2%Sz$ z)->Gk1ev$~1{;Sy$X!!^e0XnpA7_;sm}i-SA-BkB5`+72m_Zl|OEy`J#&^-5`rGoz zbKCX&H-%T2%NH)Iw@tF~3gXh?QtiNJ!XGShVgRE zIb-%LPSm5$Sc^Yqu9-XULesd7KK9(x<<1=sxR|udno+`!dDUq!qAP$D-HkGrvu=5>)^*0xUmDNw5AR9yaGS_z&Fdvas1A4$Sz&_X8Z>7 zWu0Tj6+?GAtn17qpwDCySLf8t!$AyV`YWKQKYqFUINGyZ?FnKP zlRjvm0R6I^#&n$7$Oc;npV)8$=;PBn6zt@1+GeVSQ`?S@OWgDLLuDsk#7s`{)-sKG zs!ZaF#baVlQK$~Aqx`nZ$Js}S>S|5Ny{&g0Y1C}ba4J)l%y1tflD5_u^n zmAa`Z_O8Fu)Im88%ZhQFealELVyJ-iU}DTJw@BVTFefS;B}TJsl0|M1vWF6c?Uu(L zR`YhF0K4!i&JPp@McFkuS-$nt&E>?EtIJ_ayDOIrijr}J|Kzh5>vJZbStPt%UeF-4C-Nf3?8GQLqz2LUo;B8{9xGKN+d>Xa<;7!Xn}3``YN*fS^= z$~rWryagHdmYbH!aA-t zKH+BJ`ND&zL>C8)GhZ!xc%B=SXLj#4Cb-SZ4I^-E7#VBCp&D_4eabuo4;vMOdW^J} zSVf}H?~aY5bUR>j7?m8nW%$-fXR0Qpjl=G2AfDj~)!0i8Lh%H~G6%!8Tb8qvB!z>7 z50K__W1Gy#nncZD1L%`82jh}VyL~&DiM+OVNmyj(lKIn_v7H~DayhbLqqT*WJid<$ zO8p!Rt6a&u`UARSyz~b6q)zX!ER0KuXZu=(C4GATW64|G}zn zVEg?(-t-+Sy9&N>i!tI4c+xO|Ll-ZtjZl_C+oCRKE$Gutv?Bf1nfwvgEK_Y$$C-oi zPmJ?_TFe!KW@d~WJT4etP?k(Af^RmAlJpo`?jg>TRuG~Tk9jN`X$}D}3O%XlA9D`8 z9k^p0@44|$(MVYhu=m+-m#J5=$pB7G!CmzYj~&@za~{h0l}8?3?%V!&c@A%-P2t@N zz8KJq=Rmgmlp|kJmMzN9U}m`U%=91eP|JK3o1Hhx6u3YF(V!YP`YNLqf0zd+8{>Td z-|pIl7co-{@q$b5uJDD|wCa22u_x)o%#%^nIAq?nKIEn=HKMz!+qz2^iDd7pz2spJ z9{x!oT!96DPlyAOw16Pb7Qc%Tof0k%Bx~??5<0;vE8=6+F|b}dv9PQ;>J`of;?&ZD zYtJqRPk~O~$;hSoK=Sn#2u`Q-?%2HUJnf%;1-&VppFD>WYC$+a@{(@c{WC}@K|Ny z@*zWTGIXXCs9<(W%q%E(lCOsiwcxJhhlpQ%uf3~-$Pl%Sqtgb#UUj8d{r zweT)-`fP2JL*Ak;@(w}PkF(-QS>UpMx&sD*RdegFTPUu5d^UheGC3&5>3|)Ucv4AG ztEUpfj?wJYS*%-Pp3$^RKcS9WwRf`%%#du8=vgy;1x6aIYvNReUNiPQ6?u!!Q!>}} zSvt8mbIges3UWr9=fpQFp4yD?S!+Yy;2;}E*2Ne(slL=2Dngty-d??*KO2ER!R9l~ zB)md^%~wX@wbKzB4q;r+B$7u)nj%21vw#u_2P_8PgmzK$nxQnS7u+DwS(~cHo}!UK z9Y@TJS@Aib8h4~5=nw$!F0ko+Yj$m;;(r=VOvRo_9is}}uf%zSAZBiQ4xUgXA zFtrcXksI5Q(e-z|s<D3dv08CeR!0l?1QGAZr~lB-$7= zD;P!v5wES0TNH^i9@%yqpUL5$_8>@^b~PR;Q9OsmIY+ZpT$E=$nL^s6Jag2Z2aFL8 zi{eNP^EAS|h_EqGeFDwAv#GX=;1y`&>X?f|XlS_#Nu;usDC_VZ89N)FPTi83zdxp)?zc+FhHpVype zXBlTdEaQ=1GXUqzHMw$j9Oh5^R_1jVlVhbHH$%R~9x-Cg3aI!YXO(iOhN>4O+#xdl zpBXZZC~`Kjtv~fpPcL7)c5DBd-XBZ>bhoXj2}>-ME(lGJeULMCYIPg!;4+nrIQ?_M z@<<IXbg!0$nS zI_(J(G1eLo2E83<7i2WR5HZ%g3E19p9+hl3?xbFc7YEK9@*gwzdFptk0Eu^}bSH+2zVULlNGGVy>*vBli3Ll24?v(~`mOk4SmIpfHA zzIbS>lUi}r>N(0h35ZeA$q@BtJltS*2-r(zFIe&&BJ_-(2gO)4G4|c(rVxrh%OTs8m^^h9qEw! zr~&nO4{f*@J=2nhublRwZGhoh$4N?auDgA%MHq7Ow)@18Gr7z{wq(rN==8#Q_7%iN z>1yJPhcGdByyVHRT$_6~U+cs6KKa;IK8*L=+8R4gyiH8=$EQl@;ON028!~!i{iN^2 z%2gh-aj@eMemK~4{b|3azp$;Jji3T4d|RC+Na@%z9rzRgNf2g0xhF@pr?Yenu^Q1N z%TV}elWy00(${9fdVds{&rym4v%U~xo#%;{IXgD5c;RcsS?gwIj=@1x9l&*0V=bB0 z&~eZ%mRL*D0jcQszD+4d*T7-9+2OhN5u!H$YG32+xalW=9&&f!us;{e~Z$w{gQgpg+YXs+i7%Ot#*e)0%|z79$e|h-XC-X&J((YkSqMQlKbr86h%^e{C)cO1!Ozgbu7@|Y~%`?)dKoQL;(Y5l+WfhA1?DL@18 zYn97KU1uK!jHMi6T^kwAvr7~Q#&ReOjhKudUe5~LkP6uR@V({P?few;!8;y3{K<0S zp+|QCW)6^K#*Ik0tPc^?`Q$N$*HM?OA5d;}AZ3L5+T?mqKGs{PwhPJ^&;j42B%ni> z#s713HkmoeDwlEIHW#JrU(7A75+0-rrk}5@b-UKSd#afGltJ`-!|jNsM4gT6ninmX zKo`ewV&U)$E!#)~zkb?=d(nvRN83y)v?^V~+9B(7dNLkKQ5y40Myw|Q%Pwc@y z9ILWZ6};lr;VYz@nF-N2?NO}G!fWSgsn>aBLWY{^YgTPh!0+F5+8^GVc+UENU@O4q zKR$`#zTPeKF$3Yut1y$$x_KAER~~G_jJMOt0X`-Xfl$x2ab_i!d>q5YQ)S!oN4>!@ zeGwoV*Q4sSkgOr0?~3Dwd-_D&;t6cxsBhQYQ$QI9xtg(T@sY?O1-bCd812LQNqhp2 z1e8_6Ilhb)E}f?Pj3E*N|0ffjbA_Y;-S53+^Pk)Sr~FxHjVxpb?p7Vbxe}Wz`dxd- ztIBz+-(Xl~=Zq|iJp4xCLmflqPK$2-?xTN$A2rxo&9gRHPa>=T zYUUX0HZW+*Pi{Tyy=Nl6sEQFIw@``*0ODg>8xzOQj+b{12B7?E(Wr|cFl~PNr{zaa z@I3-pVP9vifuwBfv-g#oANU%+C4x_J)Y6f;HFq6cBK4pYi3KGPUJiK&UfYhAB_`HUX?D#;EvaZwqM+ zWC1y#Nc@O>*a{QHt|pC5+6!JA4Q{MWf$Zq2u^~*}gVz9JXkomTaxRHiiErex2>uYO zp_J#y`i57!`~6$jU-7xrxAUA^XeyVVdFHif*X>Tr9y7(9l~fw!3?cQ#qWtBp# zVzF8rgoS-}x85#cn`_;+U?W@F&^~N6%TGjrwdy#_o;GuMi?Mj4Wi{3>wM0pdD?S^D*3aalBk*_Ad9(pq;0jQ z1~~Zwf48=rma>mnMA`b5X9i$?`bmsqf;{me^GTp(jj6MzjqSuFm}1525qxao^7(F^ z=4##xO+h>J?KLz)w^1b<&gq8n@j=I)X~~3A$^e_)$Vco$K@-{|+T_<&fodor!F(dP z$i@pxH`>}hi`j93xmFcy5dXmZC;Ip@`zr4O}X2j@mk5^#AmMmEGK_sy)>*a*(Sk40&wZJZ=m?6w! zWWd%ZJF&)4Ppt5A7WS@s6x?_xiM1-$*kjK^rCvVy86WaVXnQ%Or^a6T#@;-6V$t4K z^%z*mgGZ5YjUoG(CCEeYP|vSS)#`|en_h3*@`>ID(`--k3pSA7D?}kaKxZ7YKlJ1< zd}IP1?d%|lV6YB6V4N~x+NK%Bg5X%+C2Z9jO#s z$XwDhiSZ$OBTN@Lhr+wx+JY~p=ifdEe4gj zfl_)FC>&5_bysLI_+&7%8mndaYzj;s+Sj6!moNwumi(e-U4a3F%=T95iipc1pDRfhrebdD8+*hQ0GjG*#oYPn z^!E4sgpL7G$x+xwOzB5+s!I9DSJ%D&S_ShW4sA{^!mN}xZ~pM7@w0{RrID|qoDosT zw4hdns5`ZvY$PM$iJx?-c13<_K#b4_D%wMg)@(*S9A`dV63QYdjo;h{}!n#F! z#)^>v)*zJ;>s7Ndusw#YtpgV_7muu?@}Mv_#$)JNCJO8+scCV@pHHd+_ zkUsL`1du5!&fNJ{nt8@hSP zW5aMm|9@?ox(XfBbE3K^){b7qteG@&;3#&pQl3EUtqgr`6W4}5((V9`+KUwjH;Rs- zCzX73_Hkk91XQu1m@yy1VIr%x;lUJQDc*iCS?(PFwo6uRMC(R-Nr=hkVAq5Ib zT361x4jCr;t^S9@o%oTWD{fo&$JY|NzlLJiUu4O1-kl#l1HS^}W_)}Le+h%5DTdQV z-f>nMU<{6|QwS~>n27N1`( zeK4p(l)4aJu`XF9e{j|k%UmSYP6ex2RnolalRK}24^y>ATr{V+hAC07PXFMJxiy)NIi;SqbRXnE9@}Kp|Po_n>abPp?e>=ZSB9> ztM4k%ZePaBas{@5d~@x8x&gm8dkuaL>a)ms=nwh&tS8RrDl6f7Xb}gW#opvPuOyeP zvll~qW~jQb4d85hu|h|_{2Ga1gv&TzTzHx0aLvvC(gcU>@xzyRPxG_m6HC^-+|6SS zSqJ6wavy$U|mpDBK!ouY~W*y*Pe9Kfo_~LsuAV(z|SZ`?>FxF@CEpRkt^|B z^g6sdQme@#^PlR>g@)V5rSzDyp}7()4sH|+9s+@LV+QxJxiUK!@-cG7;tf&!0MPew z*?sb_&-~Y4K_iL&rH#zwmliQBF#YeV^;da&4?JmmK zNJW{*lnXcy1xVeoBIW>v!9NY q;g+$oU<-fgAAfJ$Jnjx^(fPx|K1oDDRCodHU2TvY#d&^bcK382I$g>VP$WXSL&89?p-5~9MTF7U5vWvtq)f#T zAwNtiPAUmbRsO`TN`?GL*?;14NaY7ELphNVuEJF=V-VpaA<1^iE}QrR;R1}Ly8{t{ zK_Z8AcW6Im@;vW5Jv+Czx7yq7kxtU}-A?y(zhC|IJ3T!;y}f}f!LV)HpAXe)Q^O*q z^&(Zo!TMNawFL1%90&b@!~-yU0Ozs9!AvZ{bP&WdNKXeMCq&{&k>Z3%WwKBhn%KMd zD^s9fQUP|J|3ILl=+tjV65SHS;m3gHuurQ32`1todLfkXM`1YlKTDw@&KvM|-+kYz z*>Y_(h=O|n^o>4&K8vgv4RI(At_v?2 z#1TeW-&ni0_{h$kJEwhCz$@^hqxXNLT&{dU0=d$sk>_1jEXR9#N}n4W+xe0&TME7e zZQgd@j#{<)&j5YMm&_$2Cy>Ef6#f3l#+zm)jvhMX!>+D9{@#1K{MN01y1E*bABK=?yD{QIX zLdRVVo;=rZFQ{egLh%YfN`1$k&Dt%6}@h(DN1Odxt`kDg2W&0nW>o@<+ zY`fs|`1XxhHmk_I*5Hfj0|#FDCi?bu%@};-l{O5?iY@D;G%_TG{sKm-SZ@#%ppqdm z33^xWXQ`tnuLkmGe2b?ji)SiQ9zQ9k_P-|OBkvk%UdLEo zzw^%PKH2yJecm`e46oRZm05q7mmPhh>!klru9ec|eOTNyw2b@+NShp-CHY!1hrb5G zL<{oMkTlw=-@8tFM)I9xC8oqS)s4g);Bgne9eKH}ds(sVDutW|5d0cG34zy`BwIGw^X17F7)2mu!$5U&%nGWGC_5>K7+tZ`v+;ZUz!{@@)FeyCrGR@`ufl&&0-%JKZx zwkFtq-&vJ% zH?XMxrnM5TZuykoAYrkmLCG*Sz7%+_+Fh)ucIkVzV3|#U{%wD*1wQ!pc)KEUp_}>+ zmdQ9rK&LynIk(%J+MmT(f#>>kK$6Q+>0q!VrCV1UaJm>5nsD>0ymUgUM^EJfXuCqo zM^DP^OK%!E8erhobrKG)XqSD_bi|lglTm@M)uunTXen(nls<8}gcz@L48xHJ9W2J3 zX6De%ifL81>N}@p_6KkRy#YnC@^?oh=$rRk*-FHs${f}TJiq?3DDF0iOSfGn zL4Q%l>3qc3a3+!uo_(WD3Fn4v>c3u{TNT5k@ufJoO=D>og0Mq=Miw#4-@myzFp^EMe%p=7{02c zPnx`$^69enURlcfkNa2VLE_ATBU1T4d~pze;b4#S<3^iTAm$iE6^7Hfj1Dyw@kH9Y z6(fQwykrXB-8)^8_*Og;=%YJ3PtKKuQr>+G-+**|PKU~JVv8%0Oh5CA4DGmCJ%8|? z>!h%zS7c>Lf}v1qMRbvSUYF|2KAvt%>j8YUzT3L=?D!3g#d-j3j}-8UFoG!u7%D2p zIN(1zJ}Z?Uz1OX(T={2y{H6?S-XO&*S4r4klHSe3sL8Cq*krL`z{RbbwSBK%E zLD#_7R$`bKRHP~uLJrVR>y&_v6o3_+zIGDE=QmjJ(jffOUlr2{w3j{;#zn19H7=um zWr^v7jc{Ntc^R0ta=Y@FMV%ShG!LP!pK=k{MIxp7 z@D_6_0FQe52*ezk^y}$e$*Vr|9*mlW$I~<1_?%O?xK*Jcv^EI_Rx_I*vvi^w<@6`s z+$`UCDI*O|1}K$I5zUlquJcOr+h@Lhayvbg?$VT-*h>oVV{obUQs>(3sjCF$9Aslp zfV65ICE|lqQo)Cz?_YmYWA!$Dd4X4RtPHtRp*JONXPl3S4huYm_Q>00K(uR z5QLO3JOCQ7B8UzM<7TEc9=jb<5Ud1l<42>Dk8;UNat(;5$BxMC*mzT$`nPY8fzb`r z2p;24IQ>PyoK}0C3spZvK7j7{6*S5rjs1~E16xG% ztjw}W$v)ez2Pap%9MUQe9^#sSPMNf6X3r7r+f^#A%Cx~q;4cgic+bILqF@ET!PB$K z>?%-~1}vy5fk{AX1V3^86ueZ9BA#g&m1Ng}ZJW(+#^XK8cR-&> ze7t^f)_l&uCs?f>y|qjomj?uN4+=i`^gSv7U{De^BO8Wi=)3u+A(s`ml!Q{< zKzYw@6ZM94=M&ON- z4TBsuj&||X;R0`(N}Xn?9Oci@QBB|I`UP$3-+pz2{)`SMy2}{WPZx0)nazm}1fQh38F1j8y}{ii{q4_I1#lqHo-0Z2v_N|^y5femC# z*%b2}fRvW{IHWW^j)ykb{ewC9Q(C4F*Z{OayDg+qmV?7n%?UUHH%{{zSOu+y3azJ1 zhXTOLArKUM$iYbpEc23c(5b&FAY^c$SvmzpA(V~HkjHQmn8Sw3q-pSVB%}(V#&xOe zb}XpZgC_NMEg&C178GQVC=<)^F%M6?-U)Nwp7NSpS}-@T+p%E!Go@NU`Z|wY0F;%X z^OmekhTNCYo4iDjb`MB5R^FP!z;$H~1TAB2-Q|r6I~v6UW#;wZXBVWN$VPx7(y}}O z->#a3KLaYuolF@@lud;ylNF)@zk!&C+=CHAt_i=QX|4m9an^WNi+S~YyV)U2 zL82uDf!$9X1TAAZ0ZC-LygB^IXvpbwjXR!NcrvBhcJR-qYd?P1<0C_0H%4A z24;3oCXt5F27YWBA+-xM<_gS7ETLkAB(f6^M~Afn&mBlT$W#%m7LBzkx?v=XT&0=j z8P6H&p3hvKF&HQqgwpd#>kvp{rA)``AW8aq<<~0(T;NTwhO7)q*RIMm886ec#_X~N zz%iw>@@|g~YXctJzIH3Hk-v@;D`NiS;H=ZuE2-dWf#n&EdA9N=-l|=Pwk+tF$9qC! z0%3ZUXp4f5v8IzUc&0T9y_6s3+jXN2r~Jrs06X5qDU34F531Dj zJ$gL)_d{-9W2`c;z`b^%&C9}7&X2e%vwn(!=HTT9-eHzMi^W4rB>dW!Z_8MsO$!@c ztFVDxIz!fBQZY_=)#I7w2FHL1Z>hTrW~SXdDak<3#&&skr^O?8imP>p&VFjJ9M-@` zh%1J%$x4CeuF~A#xLXx8(|sCc`Km&r+-}aTe}{zRp1@Adu2ze?k)7oww%MJ#Q{YL& zU8S?cou=tE?n4;_+|JFPn78DD8tGido^s7vKkm|q?Hu5_l{WzCssoPx7t8k`#C;s# zb`F1fv+Lf>Yn#>H;_HZH;|9c?(dY16g) z_U)UiV%}=T0|ySoBO5=$>u>X1(&e*G5Wu_TFMaK?fBR)4@0_m26+XY`iQO2>dV8R9 zaxb+Q-u`p`06?>PHwB*k5jU;J5Q}%6<!Ic^^TtZjH=-@YfFS%{;l$2(&FQULn;rTN_%XXH|hfth00!ZsZ^wI~<;6@*IV ztDu=T0&2x~371uSN~J$L+pjAu*wr}TjvRUMSNx>_O#NkNlU(s~+<-t(D13R}p076y z9vg^odRE}c!kt4$Mm~BilEXY-4$Tq3NbunP=Xd=}^U}GwE&KQ^DSw^;4^^*b^On}t@x~wG_1YHX_hrj2xpeYV70*4lYhtl=Z@Z7r3g&NO@aGwjcPyKKiKUMb zgHC=Qgg7nQ;~lv4{0$p^YY&!R+=3fLvRi~Jy|`oENbz$-e>pbx^|w2%X~)1*;rRH^ zXK(rV^<%R$g%O+%Gw)_PrwU`U(8WIc{1HX&37gZWRwl5AWam z_%0uab>;C{1Ne~j;Sb;Z!&)u66{8+bu3bFAeq`~p?L3jTTWN2=Qz54pHf_53srRSi zUhKedgV#kV?bgUA9jC?dv!YjBRr>pHeQT%J*J|Fnn#THa)B5Ef(rrYgex4ifRDm@s zf$l|Ll?TxMtgEYC!YOP!9+bkb=Ka&r9gXALg^h1t_V4}1Gu%HNs~0{GzOI&zw5zv6 zI{sMt=V|NyJ-c=<^ya8T+4I!sl^?E4;Yai0fYR z20LrVIR!qem>V2(uU&5YiuEjB7RzSkw@ULxJ{OR3En{|BT`L~nW#PyA4@pEpRCodHT?>$v#g*>9GctgHf+z|uB8*}Hjf6yliU>(%R}#(cs*{)vW;a># zFqPUomen=2kE(1Q6xmHxk~I}AlPyV78%WkojHY%s3Mdgx#RpLkWCSF>P=g})7-8SAg#v(lqT^r*PoD1$iQgkmPwcizz{Ym2Xd*`15%{EkSZEbPeCY<6r z*Ua{B9B$@7ABKK-*RPUE-LH2qN)o@gn79iI&b22lX(2Z3fW?+$oO;q7jLFBUHYI`1kb$!sd#(@Sh zHdWIH(1M>Q3zK5;dbr4}bVm_MP4U3c22E5$H8o$EMk%C2gT#+MZSjS|)puX&*GI}X zH7WgVssuFtuAe27-bjioF|{o+w2X}NXNV6(WK?(pEpfL%Sdt+4EuOFZuc zH9XKd4G$OoEScMVsJI%ywR5erT_FY0uS$ekeR*tJS$W7Gp8T$}wYAW3*Zcj0)~!ax zxGUAzu;7;DQ^oG$Mzq>asIsY$uo-mpI0odyRGET|3Z+u|BZEI_FLoyzX&dQw15akr zem4n2`wMO^76*wbdpB z3$CzX!btze{QfV6t>9ky=C;8_HPJJXCNq~E0c-WP5g zG132Nz0+x3yHIXex?U*WRCG?k;~EB_IEC`iH4PCSFIZYJW!^&Ai5mTzls`#|@1-qi zQ?pDhaa{nOx2CuPfL#?&fd-U#p#Z6B7@#q@*r`h8Fn_=dwiKJzf?S}j8TIp4<2o0 zx{IqZ6}E}j5EHrxfDliSSPB6lK_Zf>n5=~c7>h&wFn_82igXOvSZpnJs(#81;EVg@ z#&kQ^FP-KH0{{wn0Wp9^u|{Jm=(?BDvwWC8vxnIaar;aAi@Bd*SST@ zP;niBk|~g6@#sgE4RF1a^(>_e-edJ?`7nR2_G@V^T(q&H@;f#aJ&Ew*mYMry;IXhV{G8&>o9x}B(Rv&|%DF$hmbK4Rx%??(oSQhx%W>k- z-i?grNxi9{{Iia8ZbS<{FT)!Sr0Y1{yY^$HMVuO=e-5H8q@ z3BFYT2@df*rr8(ClNFgzUsA>@2BVXhCzSPre-4a%Y@3IXX=vy6yy9FJUq)cNA_H+S zHd8DcJ3>-OlE}GZM&cCHBF)a9eY|qw`#@=XB<7@xr+K&NkDQ~mhC=^EZFJt zEDb#XOb&H_CMMwoYGB6YOtYLvzy{a)$fw?^)cxge17hc%q{hW;=XmVgr)^h~e>C=N zoDvyK{xJbi<KxBhr0)QIRv9w#59fv9S%C~rT=EVB-H~IDUKjz0~WCkZtT-k{$p532r2t~C_vhT4EamHpRE|nm zETcJal$4{)Xe35HuD7~+`Oly1+{m(JyYt0NCRH*SwaV`TK=@zZNR$;}JrB=o-k zxz7NwZID;5{-#?)`JLw#!aw28n2fG;3O(mXZUH_(nP!HFV^VVTOAt2gcud23R`n=D zVLklg@zinNiRyheeKID143yJDRwx%;P;YS_`7h(rf!<9X%3-`{Dp#QT^pADRBj4o2 zd{V}KLIB`?^cI1ctt1=SFCkVT zq#g)!Ew(~amS!@8OI>J$Y1v*IgTyvQvd-4aKN%O`bFd3+4d4+#rnm3S6ljM0t$)Y{ zjd&qsUU0H^TrVYL;+xw4>h||3R-zi8`C)OKZHye^+q*}88Dv0 zG#wkXe*PshbmP(j&1gi4k$w!*Cw>tk1+ZE2x4ZyLKyG}Dfc$q)8<_sn{IU*mp!Q{d z!7O+n)Llq}KyL&+Tbvq-4O*Qv9P(1Go$D|E+pu9cd2H$EhwVfv4clz_)PK*b-o5yG z7(6K83_visBj&wQ2~Fz1wjN{zTUWAw5tvbzR@@*RvE!9whH3^cvRh%i%pf>uPo|DA zEZ7-(p**1vv@Gi{KQ}4wh4;~5L3eA^@oB;~>=0#;<&eJ+_c8ICXQ}>d@DP;#_3trA zbMS9|-nolTVXsTWk{OBn-tU^zf0dNq{`eWN8N{x2_W}NJ9PZmne{r&aq`papX-kl_ z3U-TASwzdOB40vRBmenR5_kM)mBE%(isrXq`aIaJX{)IupKH}$%qcfLdA+;;nZ$K< zSJ(d$0JwOXPETxRQL+k|t}W{jlk5*?pkUUO4F88L2X&Ex}MVu-ggg zY<*J?RT{&vzx-{5#9bV`j~>Xi&tj$@c`m>F6KtAGEtw@w!tJm;`ag-EBjANSM9YRI zj^8J96-sEDV5k1}zg~V~$H!nZvv*pk6tt3gMn{lzKh+dD)R{nzFzF_CfhkEH{O_KI zT^{bdlmo{+B|H-DNy@;gB7fqjU{z7P^u+7Sy!t;3nFTDsJh+jvcq*P?yls-oXjK2} zwm+~dz!hg^Qy=Gj1&BBhD2dr`mLui}PSa8!Po1^%k3A}J@0nf(9t{TMXt(uPfW(#!nzCw2v( zKSjoQ3K)CLanFD_c%yoqm4`Z#ih^?0+TsswQOgX@5VZfY}c}Q%rIY zOQ2%GC#jU|G_}ssydD$RG@d&7Prxe@i>GA|YsE+q6~_-@<6*kxkuPf?)ni{6OF}vp z-jTsClIGNZ)3Yks^r00bjrdQdbKt362Frf zW3=`1Ux6pyM`3QVwXgi%=hOS0doKM6fMBdD@@*$e>Ige>xe0i#*M`SLdG&v2Pm=0J z;7m`Z$6&X6F)k~#EiN^bHn8@?NE}-z$`6FAaj1i>57v7FQWb>0!73~lh2>m3KOdf+ zhkJ}>7&8uIOF!^zSZ^UTk9#HIx?9!}!2%ov?)Zq&H7@_*#4vd2ZiKsI%9E&T1%VqpcZ!Sbaq zIrZOyT`-@75WskPH(fE_+?BHj)_$@6lz%`S2)-D+EWHI}Lk0e-UaEi@oshE#bmEyg z_!rVw7^8Yo`|WYE*vXIx4DZqz*lFEqV+#L)Z96P!Ei zgn_YNng06=;V+uNN;-;YHSHMlv>;;yF=m|BPHQ;{s`K+*&5yhl#sIZUm5Ads%Xqwo z5x@EQ#>+45OMd--gV`YUIH*OP1<0U3(;ve9SDA^LXuop(ajSDbZfbk{DH=gXMj?r8 zG}>>^Xnj_$G(0P4dHK2Rp2EjPumC%4>z_c0sa8NLZF zpb@~Jzr-PZ3LZi)JVgh*$!WI!01qC>zb6zxW2_;JCS>H|S@8{k1rh^YvSEttgMSpZ z_gB3&Jgg;n(ZP)Y^R`*I=l9eE1qh9j&$g^hro%K7CXl}M$KPm@X_Pw3z>DIz>`Hhc zzq3$D1EN2t&;$S?a9_%Zz~B&k$AyE_Cew_$ zxA?8Ce+`u1U;XcWQp}KfA-bD-WJpiMEw)QeZ;t(X(_f}gJotQy!_a`^=+T3)C@6|% zlxI13ST9i({_$;z`yj6S%Tk5*|$#k%+6 z8^fP(bMDy#{kLB%Uqxm1CwAP~ZzF(aG$BGBV@S#v3skg>(BTx)lBLpVLbxSw{GWOU zZdhYsPssvF=&R%`y?Iaga1-qre_r{=;xn)xU2ZJ}AtjO4y@Af2bAy-ZFjYHE1cnOo z@54GsTXD8vFlmhA0a-wQ|7xytU%5;B(I5Nu)qi4Fz(sW@rcc38rY?GtD5vVF7f6q! zoNy{&s+>*{T2#(Ib0Y58<9Q!DY?~COD;?{ffVy?cpMjeLdBO+`+v(WyGtfAF=}(%t z|GcsN5T;QyQF3q^Wm!6%g72bf&Ygk&$NX%s7Wv%+gX}LhA{)lnO-=}yK``F z(fHTya_%ROCx6Cxnjl}`%x=lprtA$hD-Q+>o#bnORJ6Z= zKVGoxzn%O3111M8=8(@BAaCH*#(qi&`seLG-&W(3dU_c_;bCdU(7Wn22dK&$5@h@B|y)Q%iUSA8mf& zm(Km$J=~(#C%={rjOoU8P(!AF-u~~!H2*Nn*Be+YvmL42Dny>|>3sNXNE6^xUS{Lk z<)fuLg7O)FxW4^K)@T5T0%=r6xQ%4>7RO*){kmO3p6j$7-}_zpV`%euY5Qar89C+8 zz^<~^AnRZ>SWSOxr<(kAJ2L^hy1!c5bI!X z`m-$Vx7mSO#{It&{jBJLWq=aQF>Uw}g>%pd+P6@je7}oWSsN*UxYpxxuu3XICoFA3 zt#d4og0Ko+ne1r8G*(vbC6A%EN|T zxJ3A&j@oMcwaDjtp!^-Qu0wokUg_vr&u_;{RjI;rqkZC8@dUF_U%^LjCpPbQ;}`AMR;1({&O z7RvZhoJanXFXPAZz7@5}=E&GA`31p-QqoZ3fh?VKl3RmLZf9r3CWsl#K5D37*|aVs zgpl7JIJs7O2_Sy*7U#Z;+hVowo4k7EABp@J8QX~s`xb|iacC8@zL9(sAAsB>!--ZT zUW@{DmNs_1R+M^TiQ+k!CSG{OyJz>;$FI7W;M(OMas1AIbld0s_YEV9dw3u#Mva!u z%x;;Zkyi}$wpPGX%ETK{z%mU4ROudm7QZzH@K{w3KY98i|48D8O?Qtu+WjCHxg_cp z!23Vp@%64-!TWdOPBbR|NnXHWIf59O3FMi^+^JJ6%UC+hpW3D$_Jb8y5EHd(>A6<` zNizCqcOztON!<$o$#-?AQ_n-9=bTDb0aL+E5tg!He%OQNk?8@69QMN%-xk3_ID4Kd z0w{C@<~&hqNFdd_%;`7>Mev>&e2udd{Mv};8GS-JJ| zem!=it4si6qQ#ioaeSJVrp@D6E_6yNbj-_oHq2j>{b1!)#DG{-3Vi}drlVTjax}Cr z^*mYE3=kqhz%(`x<1%~4WtczAJh|=X_NnbFL8s+a0es}Meh+RJEw_2w;uH{ZFEoaj zFzPA90xSyy$RHTzrxDa9Jg4?3vmbz2PTP~Fub{)CFN#n%b7k^lY(hGe0f68iS4E4h z34sv`aw=sI1(D2XS(@<;^M~C%&4M8INc`%@uJIqxlD^MXJG?u_?+a9a|8(vU0K=iTvo)O4?SsSHsCHS_2Dgj8}+HTjBl#iK~P$Y*-|12DcVb zM^vs=;U+V#{kXkB7)cu3;{$vhh8E_ zTE~18MAcB1(y;K&#SdHFCbp~tJX*6Z0Li#+kv}wUg1Z6=Y#?~_Gjk~BN8@ zFyzy+H!Ht$8^(=y9keBFT2Cl*i`tu*_uXXl%X{4#Tq7<~@6ofsgw_pIq|kUYorW|b zsgfyHGH()oc;2xSTnFxR+N;d98(%D17h5UQMQfARC+~GP0W4h;4YhQ=BYhYvtg|)G z(iU5@M>xMP_?u6Dr~6ocJkLzkZx6JFFdh2#uecTPq~+>oF=pXzgLqp8piZI06BPiB zKFV-p^JBMpox6tn2<>hE&J6?5)M)=o@+oNc4Xkx-1co3<9Co2`8F| zZ)JxQKRVfkE`4stb+unAu%DHJ*{)K3UFGdxP38ib)y1M~w+7PLRGkgQ1{Wzpn%c

dNtt+ zn0j9c4M7#}1Z5NtX@0yK3$I)L_;vn9>t8csnxpAq&X3Hc$$|AVC9{&wdVt3S^RU93AA5CBa(Y;YE0UA!JPpJg7F#zrL5 zXapnyB5;bL#-t6!X*>k@G4{6L;rG>@*Y*7xgsIwyxG8I3CB@jW@yENf(a}!>kKHuB z?JgxPV1XM1npd2py@)nl8>6zpm!f={ z)Da5?)6}rBSZj5zH5w~p+&KPSXnqxTmaBIBgM5Y;OBu9uZ(SZVWlS(U(NF&}{w#X8 z(X0qp^g+ROEFGqYvlKCGky{G4t#|7(;Z*LC+H2j{RK4} z7TC2RA5O((NTJ&;!uOktVbF#6VF8-Ka7Yl~~g*B)oU;P~@-_?fHR#9-oUIUg7@%i~5pj TmkJ&}00000NkvXXu0mjfnim>! literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_tanlu_unchecked.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_tanlu_unchecked.png new file mode 100755 index 0000000000000000000000000000000000000000..ac2a05136b01170e2c21d55bd9ba099bcafdfabd GIT binary patch literal 4722 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 Am;e9( literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml index 2a44855ab2..5c05b17a94 100644 --- a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml +++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml @@ -1,5 +1,5 @@ - - - + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml index 8914c979ae..8e02e01c0e 100644 --- a/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml +++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml @@ -1,26 +1,24 @@ + android:layout_height="@dimen/dp_112" /> + android:textSize="@dimen/dp_26" /> \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml index ff19f10f5d..8981b061bc 100644 --- a/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values-xhdpi/dimens.xml @@ -5,9 +5,9 @@ 30px 4px 103px - 120px - 120px - 60px + 94px + 94px + 43px 60px 32px 32px diff --git a/modules/mogo-module-apps/src/main/res/values/dimens.xml b/modules/mogo-module-apps/src/main/res/values/dimens.xml index 604c52ddec..f3a1d89594 100644 --- a/modules/mogo-module-apps/src/main/res/values/dimens.xml +++ b/modules/mogo-module-apps/src/main/res/values/dimens.xml @@ -14,4 +14,5 @@ 220px 220px 154px + 174px \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 101bfcf81d..8e5e7b14fd 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -69,7 +69,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private IMogoStatusManager mMogoStatusManager; private OrientedViewPager mCardsContainer; - private VerticalStackTransformer mTransformer; + //private VerticalStackTransformer mTransformer; private CardModulesAdapter mCardModulesAdapter; private View mHeader; @@ -101,7 +101,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme protected void initViews() { mCardsContainer = findViewById( R.id.module_main_id_cards_container ); mCardsContainer.setOrientation( OrientedViewPager.Orientation.HORIZONTAL ); - mTransformer = new VerticalStackTransformer( this ); + //mTransformer = new VerticalStackTransformer( this ); mCardsContainer.setOnPageChangeListener( mOnPageChangeListener = new OnPageChangeListenerAdapter() { private boolean mIsLast = true; private boolean mCardFlipStatus = false; @@ -134,7 +134,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } } else if ( state == ViewPager.SCROLL_STATE_IDLE ) { mCardFlipStatus = false; - mTransformer.resetOffsetScroll(); + //mTransformer.resetOffsetScroll(); } int cardSize = mCardModulesAdapter.getCount(); @@ -159,7 +159,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme int positionOffsetPixels ) { super.onPageScrolled( position, positionOffset, positionOffsetPixels ); Logger.d( TAG, "pageScrolled : offset --- " + positionOffset ); - mTransformer.offsetScrollChanged( positionOffset ); + //mTransformer.offsetScrollChanged( positionOffset ); } } ); @@ -299,7 +299,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule(); mCardModulesAdapter = new CardModulesAdapter( this, providers ); mCardsContainer.setOffscreenPageLimit( providers.size() ); - mCardsContainer.setPageTransformer( true, mTransformer ); + //mCardsContainer.setPageTransformer( true, mTransformer ); mCardsContainer.setAdapter( mCardModulesAdapter ); mCardCoverUpBottomLayout.setVisibility( View.VISIBLE ); diff --git a/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png new file mode 100755 index 0000000000000000000000000000000000000000..bb0c8aef1cc1991d106f53f65493a4e87af1ed7e GIT binary patch literal 61505 zcmdqJ`6HBV*aobK$}&l1H$qfIhO9A(Y*|8)T_KSr%h=5%6+%M@S>`Du*~-38_MPn6 z_kA~(88c?SdqzF)^S<9-@O?iuOmn;M>pGX?IL_mm(0e*+jHfwHQ&CYdYN)H|Q&Am{ zp`xPZK1mDw<`Ug}Jn+vkcYU?nRJom8OH@?1s5DfR?t33wtr{s17=(=*Cm6$=$4Whv z(^QQ40vlid<7h7uJ^kPnRp8Ux=QK>kXV}%+wO;YhKN1zkNMf#Io*XK_eJ-=}7%EfC z%!IFj?}SY_X`FjO8@leE^DSv(MA&FvvHw9N@77C$g}7PSGWU%trgFoa-5jyO>Kg^9 zsogH(5cCcLu8${o@Ic`=4g5CBEAc3p zQA9>YhHk%ZK%^StH;70L7Z9B1CJ4aKKwYE}*i}1dMR{rILrZh>oC{$M{c7NV!h;$R z{QFrkQ&RR*l=_(N#xlMd*J@M^LCh!EG3_Fu-%fpws9^FZ<_Tiw#sd5kR1V$|RK9nE z_ku`T_1)OW(kQP@YC@s;8E6Qqm>OH>OnmO<<|g{yXD^Smi?+DZZG`;*+bgMpUwze+ z&zLuJ>?*KIIhn@Cat6kni!Sk@Jg8`(NDGou>dN2hM7@u5|DSD3o~33Qh7R~)Br zpWseE38$$U?PI~7g1gG>_e=E6gc-(3<3B-nf=LZ+E^C}cU43)q$Tlp9 z7(|+cCYIi_Ry7}A-N)2|Y_E2W`z$02AvhloITL3{a$P*b#760AS3(yF2SwD_^gslo z4K-T_ZRHIV7Zhysq1%gj#S!Jj-ZAeqIZ=lh|BG&_EFQaxbj@Z6ymd1Z+=Vk3{rYP8ZLttHd*?u4|4pT5xptj)q=OX;4BA;OLn%47kOiM_Fj0nSo2mV{wZR}<)U@!) zs?1mP){9#6S-OCC2e%QaSC@|iVe$gpYo@Z<+j44Jt#O7~I226&{nm`j1!&>iF9laL zk~oIOd)XB!dc~47Z!i7W$wM5jbUi&q+!`_-gegTK07qiRCQ$`Qg0Jc zBGR{2P|C8s2*TGOej*=r%3?JLA*&{@o=yu9rg|GuN$P!)O$}($K8eU5TOwM?w36IG z)VysE$?W8d77w;9dfPu*#DYcI`V9z8d6=I4b(!CCrBQC{HLj?p-?ifclB6G^6`iU{wk5cQ zmS`d8tKjwqlP{tbAo4w)vaCh?1Z_rRl?bn({wBC+`>~&=4s}O;&p$5BX^0kIz~BN( z`dwa0VdcHn%~)E>57wE6Ksfum!F_r;KeMwoD9?G^4!8z?G;?Uwj}zWDgEsQPD8 z{3&ZB$P)m#zc*3aP zOBG^&f?-sEm}V~}A;e2sK^*4sz=gvKntY-r4hBk6$|@^G@E*Uv)3-9B-BNT0l9Q6o zeV+9lv?X;ctRe}!vR{Fy*a~a>f_7A#0m=iAxXot%teTtyK^5O^18zRQK_ zr-p>sJpVZ(vn|&_!S8KF{fA3sk1B|?+k@294+H_lRXaNrT#wYfOTdCi zQ&2*gs_8-gWwqC3?1%tvZf^57{R3RNc*Q=9eO8F^ALy!G{+l6&qr${*NnY)UC|Cm4 zM`GG;TlJDaoA~(ad)2u4L@&Y#ML40fMGS(oRYajsmYn0B0mp6jw%k8Nf%eq{fGag! z(8Ft)cNQ1266i=jXnT0b;V#a%cAOBx8neTUZR$cHd=5f)b8`ffMN?w$Nb;=j#pRze zS-;L$ko47myuvcS=cz=r;x&v(B$~;Wk~41cX9-kL;DL0pb&A^=6Ad#(t!7M0w3VHy{)-k=5i;t7sVWp;WI6BH&Nc=C!jxd zr`4>itF2go{K7Y)h`opdUCew5e5GXlsb%E?B=y5Pl*@bIlZqQx`N15w5XX}2#enu* zKrgZE3v8=;_9izWr2WCNz%F@(JfW7k7zMnYx#A!MHgxEJ5lM8Uvlp{x!I_O{neTT5@vSRDa2+d;AuwTi*<)b8sbg!a zGV)#tKayC>L|L#+Q+c2m^TKPv&eVvW8kv={Hx=^KmX&vsW3*DCmFxw1Q)}OD`n6kj znH0|WN;r#+ARi<(wNx-s) z?N5SwMbAh_A#f8n_v5_1y?+z1P0+nPsO?kvmUQ{ARa(Coj>`(0(uE3s+mM@(Y5Rq} zB^qV)&n-mRJ};$_HL7m*o;o=lJaY|bjo*=k7B%m#$% zk>u)8l~?Ka@FptSo5@@gF?bPd7xo$5;`|-8$xn%6YSs{NROvm&hV2VgW%+ADwi(?T8EzqU=%VYgbgl<8y&b+nv2?tQ`doE%YpQ0*C;3d3)hLtuxV zEnjo+YghTvrqmT4hJza)#t)PEp|}$VBRPS?I-ap!cdZfRH&W4K9A9?}vnowF@FVF3 zq`QboR;w1iOX&+$hsgYx@;i^4m+r>F-gG{Uvn}D~(mIv4n&>5b zx$VkKxyauQn-u=Rw*fPM{AMMe0S?3<9rlsdW-I`!%0DI1o-xd| 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 aq1Qyc;c!@zkkc#yaA~ROsa7jL4f`MWp + + android:overScrollMode="never" /> + /> diff --git a/settings.gradle b/settings.gradle index 4747a1bb37..b813673c90 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,6 +4,7 @@ include ':foudations:mogo-utils' include ':services:mogo-service-api' include ':services:mogo-service' include ':libraries:mogo-map' +include ':libraries:card-library' include ':foudations:mogo-commons' include ':modules:mogo-module-map' include ':modules:mogo-module-common'