From 27dfeaa92da87f9d53e9f5441fba55ee50146aa7 Mon Sep 17 00:00:00 2001
From: Matthew <37573096+BlueMatthew@users.noreply.github.com>
Date: Sat, 22 Jan 2022 13:22:51 +0800
Subject: [PATCH] Move FlexLayoutManager into serparate module
---
app/build.gradle | 19 +-
app/src/main/AndroidManifest.xml | 6 +-
.../app/MainActivity.java | 28 +-
.../app/MainActivityDataSource.java | 198 +++----
.../app/MainActivityHelper.java | 8 +-
.../app/NetImageView.java | 2 +-
.../app/PageWebView.java | 2 +-
.../app/RecyclerViewPager.java | 4 +-
.../app/cells/CategoryBarView.java | 8 +-
.../app/cells/ItemView.java | 8 +-
.../app/cells/NavView.java | 2 +-
.../app/models/CellData.java | 2 +-
.../app/models/PageData.java | 2 +-
.../app/models/PageFixedData.java | 2 +-
.../app/models/SectionData.java | 7 +-
app/src/main/res/raw/ds.json | 9 +
flexlayout/.gitignore | 1 +
flexlayout/build.gradle | 55 ++
flexlayout/consumer-rules.pro | 0
flexlayout/proguard-rules.pro | 21 +
.../flexlayout/ExampleInstrumentedTest.java | 26 +
flexlayout/src/main/AndroidManifest.xml | 5 +
.../src/main/cpp/CMakeLists.txt | 0
.../src/main/cpp/FlexLayoutManager.cpp | 22 +-
.../src/main/cpp/FlexLayoutManager.h | 0
.../src/main/cpp/FlexLayoutObjects.h | 0
.../src/main/cpp/LayoutCallbackAdapter.cpp | 4 +-
.../src/main/cpp/LayoutCallbackAdapter.h | 0
.../src/main/cpp/RecyclerLayout.h | 0
.../src/main/cpp/common/BoolTraits.h | 0
.../src/main/cpp/common/ContainerBase.h | 0
.../src/main/cpp/common/FlexColumn.h | 0
.../src/main/cpp/common/FlexFlowSection.h | 0
.../src/main/cpp/common/FlexItem.h | 0
.../cpp/common/FlexLayout-before-sync-ios.h | 484 ++++++++++++++++++
.../src/main/cpp/common/FlexLayout.h | 2 +-
.../src/main/cpp/common/FlexPage.h | 0
.../src/main/cpp/common/FlexPageLayout.h | 0
.../src/main/cpp/common/FlexRow.h | 0
.../src/main/cpp/common/FlexSection.h | 0
.../main/cpp/common/FlexWaterfallSection.h | 0
.../src/main/cpp/common/Graphics.h | 0
.../wakin/flexlayout}/FlexLayoutHelper.java | 8 +-
.../wakin/flexlayout}/FlexLayoutManager.java | 8 +-
.../org/wakin/flexlayout}/LayoutCallback.java | 6 +-
.../org/wakin/flexlayout}/LayoutItem.java | 4 +-
.../wakin/flexlayout}/graphics/Insets.java | 2 +-
.../org/wakin/flexlayout}/graphics/Size.java | 2 +-
.../wakin/flexlayout}/impl/LayoutImpl.java | 20 +-
.../flexlayout}/impl/SectionPosition.java | 2 +-
.../flexlayout}/impl/elements/FlexColumn.java | 10 +-
.../impl/elements/FlexFlowSection.java | 12 +-
.../flexlayout}/impl/elements/FlexItem.java | 6 +-
.../flexlayout}/impl/elements/FlexRow.java | 6 +-
.../impl/elements/FlexSection.java | 8 +-
.../impl/elements/FlexWaterfallSection.java | 16 +-
.../layoutobjects/DisplayInfo.java | 10 +-
.../layoutobjects/LayoutAndSectionsInfo.java | 11 +-
.../flexlayout}/layoutobjects/LayoutInfo.java | 10 +-
.../layoutobjects/SectionInfo.java | 10 +-
.../org/wakin/flexlayout}/util/Algorithm.java | 2 +-
.../wakin/flexlayout}/util/Comparator.java | 2 +-
.../org/wakin/flexlayout/ExampleUnitTest.java | 17 +
settings.gradle | 3 +-
64 files changed, 870 insertions(+), 232 deletions(-)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/MainActivity.java (97%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/MainActivityDataSource.java (86%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/MainActivityHelper.java (98%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/NetImageView.java (99%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/PageWebView.java (99%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/RecyclerViewPager.java (99%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/cells/CategoryBarView.java (97%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/cells/ItemView.java (97%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/cells/NavView.java (92%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/models/CellData.java (95%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/models/PageData.java (97%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/models/PageFixedData.java (94%)
rename app/src/main/java/org/wakin/{flexlayout => flexlayoutsample}/app/models/SectionData.java (95%)
create mode 100644 app/src/main/res/raw/ds.json
create mode 100644 flexlayout/.gitignore
create mode 100644 flexlayout/build.gradle
create mode 100644 flexlayout/consumer-rules.pro
create mode 100644 flexlayout/proguard-rules.pro
create mode 100644 flexlayout/src/androidTest/java/org/wakin/flexlayout/ExampleInstrumentedTest.java
create mode 100644 flexlayout/src/main/AndroidManifest.xml
rename {app => flexlayout}/src/main/cpp/CMakeLists.txt (100%)
rename {app => flexlayout}/src/main/cpp/FlexLayoutManager.cpp (94%)
rename {app => flexlayout}/src/main/cpp/FlexLayoutManager.h (100%)
rename {app => flexlayout}/src/main/cpp/FlexLayoutObjects.h (100%)
rename {app => flexlayout}/src/main/cpp/LayoutCallbackAdapter.cpp (98%)
rename {app => flexlayout}/src/main/cpp/LayoutCallbackAdapter.h (100%)
rename {app => flexlayout}/src/main/cpp/RecyclerLayout.h (100%)
rename {app => flexlayout}/src/main/cpp/common/BoolTraits.h (100%)
rename {app => flexlayout}/src/main/cpp/common/ContainerBase.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexColumn.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexFlowSection.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexItem.h (100%)
create mode 100755 flexlayout/src/main/cpp/common/FlexLayout-before-sync-ios.h
rename {app => flexlayout}/src/main/cpp/common/FlexLayout.h (99%)
rename {app => flexlayout}/src/main/cpp/common/FlexPage.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexPageLayout.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexRow.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexSection.h (100%)
rename {app => flexlayout}/src/main/cpp/common/FlexWaterfallSection.h (100%)
rename {app => flexlayout}/src/main/cpp/common/Graphics.h (100%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/FlexLayoutHelper.java (94%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/FlexLayoutManager.java (99%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/LayoutCallback.java (87%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/LayoutItem.java (96%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/graphics/Insets.java (98%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/graphics/Size.java (98%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/LayoutImpl.java (95%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/SectionPosition.java (96%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexColumn.java (90%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexFlowSection.java (96%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexItem.java (95%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexRow.java (96%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexSection.java (95%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/impl/elements/FlexWaterfallSection.java (91%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/layoutobjects/DisplayInfo.java (93%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/layoutobjects/LayoutAndSectionsInfo.java (85%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/layoutobjects/LayoutInfo.java (90%)
rename {app/src/main/java/org/wakin/flexlayout/layoutmanager => flexlayout/src/main/java/org/wakin/flexlayout}/layoutobjects/SectionInfo.java (86%)
rename {app/src/main/java/org/wakin/flexlayout/app => flexlayout/src/main/java/org/wakin/flexlayout}/util/Algorithm.java (99%)
rename {app/src/main/java/org/wakin/flexlayout/app => flexlayout/src/main/java/org/wakin/flexlayout}/util/Comparator.java (95%)
create mode 100644 flexlayout/src/test/java/org/wakin/flexlayout/ExampleUnitTest.java
diff --git a/app/build.gradle b/app/build.gradle
index 5db3db4..508b5cc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,19 +15,14 @@ android {
keyPassword KEY_PASSWORD
}
}
- compileSdkVersion 28
+ compileSdkVersion 30
defaultConfig {
applicationId "org.wakin.flexlayoutmanager"
minSdkVersion 19
- targetSdkVersion 28
+ targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- externalNativeBuild {
- cmake {
- cppFlags "-std=c++14"
- }
- }
}
buildTypes {
release {
@@ -40,18 +35,16 @@ android {
jniDebuggable = true
}
}
- externalNativeBuild {
- cmake {
- path "src/main/cpp/CMakeLists.txt"
- version "3.10.2"
- }
- }
+ ndkVersion '23.1.7779620'
+ buildToolsVersion '30.0.3'
+
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation project(path: ':flexlayout')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d411723..c808493 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="org.wakin.flexlayoutsample">
@@ -14,7 +14,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
@@ -23,4 +23,4 @@
-
\ No newline at end of file
+
diff --git a/app/src/main/java/org/wakin/flexlayout/app/MainActivity.java b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivity.java
similarity index 97%
rename from app/src/main/java/org/wakin/flexlayout/app/MainActivity.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/MainActivity.java
index 0aeaba1..b120e18 100755
--- a/app/src/main/java/org/wakin/flexlayout/app/MainActivity.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivity.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
import android.content.pm.ActivityInfo;
@@ -17,12 +17,12 @@
import android.view.View;
import android.view.ViewGroup;
-import org.wakin.flexlayout.R;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.impl.SectionPosition;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayoutsample.R;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.impl.SectionPosition;
+import org.wakin.flexlayout.graphics.Size;
import java.util.List;
import java.util.HashMap;
@@ -324,13 +324,6 @@ private void setFlexLayoutManager() {
mRecyclerView.setBackgroundColor(Color.LTGRAY);
FlexLayoutManager layoutManager = new FlexLayoutManager(this, MainActivityDataSource.ORIENTATION, false, this);
- for (SectionPosition sp : mDataSource.getStickyItems()) {
- layoutManager.addStickyItem(sp.section, sp.item);
- }
-
- layoutManager.setStackedStickyItems(true);
- // layoutManager.setLayoutCallback(this);
-
mRecyclerView.setLayoutManager(layoutManager);
}
@@ -346,6 +339,13 @@ protected void initDataSource(Rect frame) {
mDataSource = new MainActivityDataSource(mRecyclerView.getContext(), width, height);
+ FlexLayoutManager layoutManager = (FlexLayoutManager) mRecyclerView.getLayoutManager();
+ for (SectionPosition sp : mDataSource.getStickyItems()) {
+ layoutManager.addStickyItem(sp.section, sp.item);
+ }
+
+ layoutManager.setStackedStickyItems(true);
+
mAdapter.notifyDataSetChanged();
final Handler handler = new Handler();
diff --git a/app/src/main/java/org/wakin/flexlayout/app/MainActivityDataSource.java b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityDataSource.java
similarity index 86%
rename from app/src/main/java/org/wakin/flexlayout/app/MainActivityDataSource.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityDataSource.java
index b5ca6fb..1483b2c 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/MainActivityDataSource.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityDataSource.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
import android.content.Context;
import android.content.res.Resources;
@@ -13,16 +13,16 @@
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
-import org.wakin.flexlayout.R;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.impl.SectionPosition;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
-import org.wakin.flexlayout.app.cells.ItemView;
-import org.wakin.flexlayout.app.models.PageData;
-import org.wakin.flexlayout.app.models.PageFixedData;
-import org.wakin.flexlayout.app.models.SectionData;
-import org.wakin.flexlayout.app.models.CellData;
+import org.wakin.flexlayoutsample.R;
+import org.wakin.flexlayoutsample.app.cells.ItemView;
+import org.wakin.flexlayoutsample.app.models.CellData;
+import org.wakin.flexlayoutsample.app.models.PageData;
+import org.wakin.flexlayoutsample.app.models.PageFixedData;
+import org.wakin.flexlayoutsample.app.models.SectionData;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.graphics.Size;
+import org.wakin.flexlayout.impl.SectionPosition;
import java.util.ArrayList;
import java.util.List;
@@ -70,12 +70,20 @@ public class MainActivityDataSource {
public static int VIEW_TYPE_ITEM_HALF_SIZE = 7; // 2 columns
public static int VIEW_TYPE_FULL_SPAN = 8;
+ // public static String DATA_JSON = ";
+
+ public int[][] SECTIONS = // Navbar Entry Cat Item1 Item2 // ViewType, Sticky, NumberOfItems, ItemHeight
+ {{VIEW_TYPE_NAV, 1, 1, 100},
+ {VIEW_TYPE_ENTRY, 1, 0, 90},
+ {VIEW_TYPE_CAT, 1, 1, 90},
+ {ITEM_COLUMNS == 1 ? VIEW_TYPE_ITEM : VIEW_TYPE_ITEM_HALF_SIZE, 1, 0, 160},
+ {VIEW_TYPE_ITEM2, 1, 0, 120}};
- public int[] VIEW_TYPES_OF_SECTION = {VIEW_TYPE_NAV, VIEW_TYPE_ENTRY, VIEW_TYPE_CAT, ITEM_COLUMNS == 1 ? VIEW_TYPE_ITEM : VIEW_TYPE_ITEM_HALF_SIZE, VIEW_TYPE_ITEM2}; // Navbar Product Entry Cat Product Brand
public int VIEW_TYPE_WEBVIEW = 7;
public int VIEW_TYPE_PADDINGBOTTOM = 99;
// Navbar Product Entry Cat
- public int[] NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART = {1, 1, 1, 1, 1};
+ // public int[] NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART = {1, 1, 1, 1, 1};
+
// Product Brand
public int[][] NUM_OF_ITEMS_IN_SECTION_FOR_PAGES = {
{20, 2},
@@ -88,9 +96,6 @@ public class MainActivityDataSource {
{11, 0}}; // Navbar Product Entry Cat Product Brand
public int PAGE_INDEX_OF_WEBVIEW = 16;
- public int[] STICKY_SECTIONS = {0, 2};
-
- public int[] ITEM_HEIGHT_IN_SECTION = {100, 90, 90, 90, 50, 160, 120};
public int[] ITEM_HEIGHT_ITEM2 = {120};
public int ITEM_HEIGHT_FULL_SPAN = 60;
@@ -100,9 +105,11 @@ public class MainActivityDataSource {
public int mBoundWidth = 0;
public int mBoundHeight = 0;
- private int mPage;
+ private int mPage = 1;
private Context mContext;
+ private int mNumberOfFixedSections = 0;
+ private List mStickySections = new ArrayList();
public MainActivityDataSource(Context context, int boundWidth, int boundHeight) {
mContext = context;
@@ -117,6 +124,14 @@ public MainActivityDataSource(Context context, int boundWidth, int boundHeight)
debugStartTime = System.nanoTime();
}
+ for (int idx = 0; idx < SECTIONS.length; idx++) {
+ if (SECTIONS[idx][0] == VIEW_TYPE_CAT) {
+ mNumberOfFixedSections++;
+ break;
+ }
+ mNumberOfFixedSections++;
+ }
+
initializeDataSource();
if (DEBUG) {
@@ -182,15 +197,15 @@ public SectionPosition toSectionPosition(int position) {
public int getMinPagablePosition() {
int pos = 0;
- for (int idx = 0; idx < NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART.length; idx++) {
- pos += NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART[idx];
+ for (int idx = 0; idx < mNumberOfFixedSections; idx++) {
+ pos += SECTIONS[idx][1];
}
return pos;
}
public int getMinPagableSection() {
- return NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART.length;
+ return mNumberOfFixedSections;
}
/*
@@ -258,18 +273,17 @@ public int getInfoForItemsBatchly(int section, int itemStart, int itemCount, int
return itemCount;
}
- // mDataSource.getItemSize(section, item, size);
-
public int getViewType(int position) {
CellData cellData = getCellData(position);
return cellData.viewType;
}
- public static List getStickyItems() {
+ public List getStickyItems() {
List items = new ArrayList<>();
- items.add(new SectionPosition(SECTION_INDEX_NAVBAR, 0));
- items.add(new SectionPosition(SECTION_INDEX_CATBAR, 0));
+ for (Integer idx : mStickySections) {
+ items.add(new SectionPosition(idx.intValue(), 0));
+ }
return items;
}
@@ -443,15 +457,23 @@ void initializeDataSource() {
int boundWidth = isVertical() ? mBoundWidth - (RECYCLERVIEW_PADDING.left + RECYCLERVIEW_PADDING.right) :
mBoundHeight - (RECYCLERVIEW_PADDING.top + RECYCLERVIEW_PADDING.bottom);
+ int position = 0;
+ for (int idx = 0; idx < mNumberOfFixedSections; idx++) {
- for (int idx = 0; idx < NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART.length; idx++) {
- int position = 0;
- if (mSections.size() > 0) {
- SectionData lastSectionData = mSections.get(mSections.size() - 1);
- position = lastSectionData.getPosition() + lastSectionData.getReservedItemCount();
+ if (SECTIONS[idx][2] != 0) {
+ mStickySections.add(new Integer(idx));
+ }
+ int viewType = SECTIONS[idx][0];
+ SectionData sectionData = new SectionData(mSections.size(), SECTIONS[idx][1], position);
+
+ if (viewType == VIEW_TYPE_NAV) {
+ initializeNavSection(sectionData, dataSourceColors, SECTIONS[idx][3]);
+ } else if (viewType == VIEW_TYPE_ENTRY) {
+ initializeEntrySection(sectionData, dataSourceColors, SECTIONS[idx][3]);
+ } else if (viewType == VIEW_TYPE_CAT) {
+ initializeCatBarSection(sectionData, dataSourceColors, SECTIONS[idx][3]);
}
- SectionData sectionData = new SectionData(mSections.size(), NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART[idx], position);
mSections.add(sectionData);
mFixedData.addSection(sectionData);
}
@@ -460,57 +482,23 @@ void initializeDataSource() {
PageData pageData = new PageData(mFixedData);
mPages.add(pageData);
- int[] sections = NUM_OF_ITEMS_IN_SECTION_FOR_PAGES[page];
- for (int idx = 0; idx < sections.length; idx++) {
- int position = 0;
+ int[] pageSections = NUM_OF_ITEMS_IN_SECTION_FOR_PAGES[page];
+ for (int idx = 0; idx < pageSections.length; idx++) {
+ position = 0;
if (mSections.size() > 0) {
SectionData lastSectionData = mSections.get(mSections.size() - 1);
position = lastSectionData.getPosition() + lastSectionData.getReservedItemCount();
}
- SectionData sectionData = new SectionData(mSections.size(), sections[idx], position);
+ SectionData sectionData = new SectionData(mSections.size(), pageSections[idx], position);
mSections.add(sectionData);
pageData.addSection(sectionData);
}
}
- // Navigation Bar
- SectionData section = mSections.get(SECTION_INDEX_NAVBAR);
-
- cellData = new CellData();
- cellData.viewType = VIEW_TYPE_NAV;
- cellData.backgroundColor = dataSourceColors.NavBarColor;
- cellData.text = "Navigation Bar pos=" + section.getPosition();
- setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
- setCellHeight(cellData, toPixel(ITEM_HEIGHT_IN_SECTION[section.getSection()]));
- section.addCellData(cellData);
-
- int colorIdx = 0;
- for (int idx = 1; idx < section.getReservedItemCount(); idx++, colorIdx++) {
- cellData = new CellData();
- cellData.viewType = VIEW_TYPE_ENTRY;
- cellData.backgroundColor = dataSourceColors.getEntryBackgroundColor(colorIdx);
- cellData.text = "Entry " + idx + " pos=" + (section.getPosition() + idx);
- setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
- setCellHeight(cellData, toPixel(ITEM_HEIGHT_IN_SECTION[section.getSection()]));
- section.addCellData(cellData);
- }
-
- // Entry
- section = mSections.get(SECTION_INDEX_ENTRY);
- colorIdx = 0;
- for (int idx = 0; idx < section.getReservedItemCount(); idx++, colorIdx++) {
- cellData = new CellData();
- cellData.viewType = VIEW_TYPE_ENTRY;
- cellData.backgroundColor = dataSourceColors.getEntryBackgroundColor(colorIdx);
- cellData.text = "Entry " + idx + " pos=" + (section.getPosition() + idx);
- setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
- setCellHeight(cellData, toPixel(ITEM_HEIGHT_IN_SECTION[section.getSection()]));
- section.addCellData(cellData);
- }
-
+ /*
// Test 1
- colorIdx += 4;
+ int colorIdx += 4;
section = mSections.get(SECTION_INDEX_TEST1);
for (int idx = 0; idx < section.getReservedItemCount(); idx++, colorIdx++) {
cellData = new CellData();
@@ -545,26 +533,16 @@ void initializeDataSource() {
setCellHeight(cellData, toPixel(ITEM_HEIGHT_IN_SECTION[section.getSection()]));
section.addCellData(cellData);
}
+ */
- // Catbar
- section = mSections.get(SECTION_INDEX_CATBAR);
- for (int idx = 0; idx < section.getReservedItemCount(); idx++) {
- cellData = new CellData();
- cellData.viewType = VIEW_TYPE_CAT;
- cellData.backgroundColor = dataSourceColors.getEntryBackgroundColor(idx);
- cellData.text = "Category Bar pos=" + (section.getPosition() + idx);
- setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
- setCellHeight(cellData, toPixel(ITEM_HEIGHT_IN_SECTION[section.getSection()]));
- section.addCellData(cellData);
- }
- int offsetBase = NUM_OF_ITEMS_IN_SECTION_FOR_FIXED_PART.length;
+ int offsetBase = mNumberOfFixedSections;
for (int page = 0; page < NUM_OF_ITEMS_IN_SECTION_FOR_PAGES.length; page++) {
PageData pageData = mPages.get(page);
if (pageData.getNumberOfPageSections() > 0) {
- section = pageData.getPageSection(0);
+ SectionData section = pageData.getPageSection(0);
section.setColumns(2);
section.setWaterfallMode(true);
@@ -574,7 +552,7 @@ void initializeDataSource() {
}
if (pageData.getNumberOfPageSections() > 1) {
- section = pageData.getPageSection(1);
+ SectionData section = pageData.getPageSection(1);
section.setColumns(3);
int[] itemHeights2 = ITEM_HEIGHT_ITEM2;
initializeItems(page, section, ITEM_TEXT_ITEM2, dataSourceColors, itemHeights2);
@@ -596,6 +574,49 @@ void initializeDataSource() {
}
}
+ void initializeNavSection(SectionData section, DataSourceColors dataSourceColors, int itemHeight) {
+
+ // Navigation Bar
+ CellData cellData = new CellData();
+ cellData.viewType = VIEW_TYPE_NAV;
+ cellData.backgroundColor = dataSourceColors.NavBarColor;
+ cellData.text = "Navigation Bar pos=" + section.getPosition();
+ setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
+ setCellHeight(cellData, toPixel(itemHeight));
+ section.addCellData(cellData);
+ }
+
+ void initializeCatBarSection(SectionData section, DataSourceColors dataSourceColors, int itemHeight) {
+ // Catbar
+ int idx = section.getItemCount();
+ while (section.getReservedItemCount() > 0) {
+ CellData cellData = new CellData();
+ cellData.viewType = VIEW_TYPE_CAT;
+ cellData.backgroundColor = dataSourceColors.getEntryBackgroundColor(idx);
+ cellData.text = "Category Bar pos=" + (section.getPosition() + idx);
+ setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
+ setCellHeight(cellData, toPixel(itemHeight));
+ section.addCellData(cellData);
+ }
+ }
+
+ void initializeEntrySection(SectionData section, DataSourceColors dataSourceColors, int itemHeight) {
+ // Entry
+ int colorIdx = 0;
+ int idx = section.getItemCount();
+ while (section.getReservedItemCount() > 0) {
+ CellData cellData = new CellData();
+ cellData.viewType = VIEW_TYPE_ENTRY;
+ cellData.backgroundColor = dataSourceColors.getEntryBackgroundColor(colorIdx);
+ cellData.text = "Entry " + idx + " pos=" + (section.getPosition() + idx);
+ setCellWidth(cellData, section.calcCellWidth(isVertical(), mBoundWidth));
+ setCellHeight(cellData, toPixel(itemHeight));
+ section.addCellData(cellData);
+ idx++;
+ colorIdx++;
+ }
+ }
+
void initializeItems(int page, SectionData section, String textFormat, DataSourceColors dsColors, int[] itemHeights) {
int bgIndex = 4 * page;
@@ -607,7 +628,8 @@ void initializeItems(int page, SectionData section, String textFormat, DataSourc
mBoundHeight - (RECYCLERVIEW_PADDING.top + RECYCLERVIEW_PADDING.bottom);
- for (int idx = 0; idx < section.getReservedItemCount(); idx++, imageColorIndex+=8, bgIndex++) {
+ int idx = section.getItemCount();
+ while (section.getReservedItemCount() > 0) {
CellData cellData = new CellData();
if (section.getSection() == SECTION_INDEX_WITH_FULL_SPAN && section.getColumns() > 1) {
@@ -639,7 +661,11 @@ void initializeItems(int page, SectionData section, String textFormat, DataSourc
cellData.imageBackgroundColor = dsColors.imageColors[(imageColorIndex % dsColors.imageColors.length)];
section.addCellData(cellData);
+ idx++;
+ imageColorIndex+=8;
+ bgIndex++;
}
+
}
private int toPixel(int dip) {
diff --git a/app/src/main/java/org/wakin/flexlayout/app/MainActivityHelper.java b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityHelper.java
similarity index 98%
rename from app/src/main/java/org/wakin/flexlayout/app/MainActivityHelper.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityHelper.java
index 0d75ad1..bbcb2ec 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/MainActivityHelper.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/MainActivityHelper.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
import java.io.IOException;
import android.content.Context;
@@ -19,9 +19,9 @@
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
-import org.wakin.flexlayout.R;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.app.cells.ItemView;
+import org.wakin.flexlayoutsample.R;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayoutsample.app.cells.ItemView;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/NetImageView.java b/app/src/main/java/org/wakin/flexlayoutsample/app/NetImageView.java
similarity index 99%
rename from app/src/main/java/org/wakin/flexlayout/app/NetImageView.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/NetImageView.java
index a0a1d71..3736521 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/NetImageView.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/NetImageView.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
/**
* Created by matthew on 23/06/2020.
*/
diff --git a/app/src/main/java/org/wakin/flexlayout/app/PageWebView.java b/app/src/main/java/org/wakin/flexlayoutsample/app/PageWebView.java
similarity index 99%
rename from app/src/main/java/org/wakin/flexlayout/app/PageWebView.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/PageWebView.java
index c24546e..370760e 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/PageWebView.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/PageWebView.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
import android.content.Context;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/RecyclerViewPager.java b/app/src/main/java/org/wakin/flexlayoutsample/app/RecyclerViewPager.java
similarity index 99%
rename from app/src/main/java/org/wakin/flexlayout/app/RecyclerViewPager.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/RecyclerViewPager.java
index ffbd4ac..cdf3d0e 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/RecyclerViewPager.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/RecyclerViewPager.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app;
+package org.wakin.flexlayoutsample.app;
import android.animation.Animator;
import android.animation.ValueAnimator;
@@ -19,7 +19,7 @@
import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
-import org.wakin.flexlayout.R;
+import org.wakin.flexlayoutsample.R;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/cells/CategoryBarView.java b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/CategoryBarView.java
similarity index 97%
rename from app/src/main/java/org/wakin/flexlayout/app/cells/CategoryBarView.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/cells/CategoryBarView.java
index 773c3e2..178ab4d 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/cells/CategoryBarView.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/CategoryBarView.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.cells;
+package org.wakin.flexlayoutsample.app.cells;
import android.content.Context;
import android.graphics.Color;
@@ -11,9 +11,9 @@
import android.view.ViewGroup;
import android.widget.TextView;
-import org.wakin.flexlayout.app.NetImageView;
-import org.wakin.flexlayout.R;
-import org.wakin.flexlayout.app.models.CellData;
+import org.wakin.flexlayoutsample.app.NetImageView;
+import org.wakin.flexlayoutsample.R;
+import org.wakin.flexlayoutsample.app.models.CellData;
public class CategoryBarView extends ViewGroup {
diff --git a/app/src/main/java/org/wakin/flexlayout/app/cells/ItemView.java b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/ItemView.java
similarity index 97%
rename from app/src/main/java/org/wakin/flexlayout/app/cells/ItemView.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/cells/ItemView.java
index 8529071..4caefdb 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/cells/ItemView.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/ItemView.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.cells;
+package org.wakin.flexlayoutsample.app.cells;
import android.content.Context;
import android.graphics.Color;
@@ -12,9 +12,9 @@
import android.view.ViewGroup;
import android.widget.TextView;
-import org.wakin.flexlayout.app.NetImageView;
-import org.wakin.flexlayout.R;
-import org.wakin.flexlayout.app.models.CellData;
+import org.wakin.flexlayoutsample.app.NetImageView;
+import org.wakin.flexlayoutsample.R;
+import org.wakin.flexlayoutsample.app.models.CellData;
public class ItemView extends ViewGroup {
diff --git a/app/src/main/java/org/wakin/flexlayout/app/cells/NavView.java b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/NavView.java
similarity index 92%
rename from app/src/main/java/org/wakin/flexlayout/app/cells/NavView.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/cells/NavView.java
index 3bb5dd7..4a2d377 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/cells/NavView.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/cells/NavView.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.cells;
+package org.wakin.flexlayoutsample.app.cells;
import android.content.Context;
import android.util.AttributeSet;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/models/CellData.java b/app/src/main/java/org/wakin/flexlayoutsample/app/models/CellData.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/app/models/CellData.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/models/CellData.java
index 99b9ec1..6a86cb1 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/models/CellData.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/models/CellData.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.models;
+package org.wakin.flexlayoutsample.app.models;
import android.graphics.Color;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/models/PageData.java b/app/src/main/java/org/wakin/flexlayoutsample/app/models/PageData.java
similarity index 97%
rename from app/src/main/java/org/wakin/flexlayout/app/models/PageData.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/models/PageData.java
index bad38d4..b6dcbee 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/models/PageData.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/models/PageData.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.models;
+package org.wakin.flexlayoutsample.app.models;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/models/PageFixedData.java b/app/src/main/java/org/wakin/flexlayoutsample/app/models/PageFixedData.java
similarity index 94%
rename from app/src/main/java/org/wakin/flexlayout/app/models/PageFixedData.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/models/PageFixedData.java
index f7cfd49..79cda72 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/models/PageFixedData.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/models/PageFixedData.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.models;
+package org.wakin.flexlayoutsample.app.models;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/models/SectionData.java b/app/src/main/java/org/wakin/flexlayoutsample/app/models/SectionData.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/app/models/SectionData.java
rename to app/src/main/java/org/wakin/flexlayoutsample/app/models/SectionData.java
index 7939b4d..07350f6 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/models/SectionData.java
+++ b/app/src/main/java/org/wakin/flexlayoutsample/app/models/SectionData.java
@@ -1,8 +1,8 @@
-package org.wakin.flexlayout.app.models;
+package org.wakin.flexlayoutsample.app.models;
import android.util.Log;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
+import org.wakin.flexlayout.graphics.Insets;
import java.util.ArrayList;
import java.util.List;
@@ -93,6 +93,9 @@ public int getReservedItemCount() {
public void addCellData(CellData cellData) {
mItems.add(cellData);
+ if (mReservedItemCount > 0) {
+ mReservedItemCount--;
+ }
}
public CellData getItem(int itemIndex) {
diff --git a/app/src/main/res/raw/ds.json b/app/src/main/res/raw/ds.json
new file mode 100644
index 0000000..cea49f7
--- /dev/null
+++ b/app/src/main/res/raw/ds.json
@@ -0,0 +1,9 @@
+[
+ {
+ "viewType": "nav",
+ "numberOfItems": 1,
+ "fixed": 1
+
+ }
+
+]
\ No newline at end of file
diff --git a/flexlayout/.gitignore b/flexlayout/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/flexlayout/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/flexlayout/build.gradle b/flexlayout/build.gradle
new file mode 100644
index 0000000..6d81054
--- /dev/null
+++ b/flexlayout/build.gradle
@@ -0,0 +1,55 @@
+plugins {
+ id 'com.android.library'
+}
+
+android {
+ compileSdkVersion 30
+
+ defaultConfig {
+ minSdkVersion 19
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ }
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ debug {
+ jniDebuggable = true
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ buildToolsVersion '30.0.3'
+ externalNativeBuild {
+ cmake {
+ path "src/main/cpp/CMakeLists.txt"
+ version "3.10.2"
+ }
+ }
+ ndkVersion '21.3.6528147'
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.3.0'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+}
\ No newline at end of file
diff --git a/flexlayout/consumer-rules.pro b/flexlayout/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/flexlayout/proguard-rules.pro b/flexlayout/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/flexlayout/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/flexlayout/src/androidTest/java/org/wakin/flexlayout/ExampleInstrumentedTest.java b/flexlayout/src/androidTest/java/org/wakin/flexlayout/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..cbd9fec
--- /dev/null
+++ b/flexlayout/src/androidTest/java/org/wakin/flexlayout/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package org.wakin.flexlayout;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("org.wakin.flexlayout.test", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/flexlayout/src/main/AndroidManifest.xml b/flexlayout/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ac9e33c
--- /dev/null
+++ b/flexlayout/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/cpp/CMakeLists.txt b/flexlayout/src/main/cpp/CMakeLists.txt
similarity index 100%
rename from app/src/main/cpp/CMakeLists.txt
rename to flexlayout/src/main/cpp/CMakeLists.txt
diff --git a/app/src/main/cpp/FlexLayoutManager.cpp b/flexlayout/src/main/cpp/FlexLayoutManager.cpp
similarity index 94%
rename from app/src/main/cpp/FlexLayoutManager.cpp
rename to flexlayout/src/main/cpp/FlexLayoutManager.cpp
index 132015e..42fe680 100644
--- a/app/src/main/cpp/FlexLayoutManager.cpp
+++ b/flexlayout/src/main/cpp/FlexLayoutManager.cpp
@@ -220,7 +220,7 @@ int FlexLayoutManager::computerContentOffsetToMakePositionTopVisible(const Layou
// JNI Functions
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_initLayoutEnv(
+Java_org_wakin_flexlayout_FlexLayoutManager_initLayoutEnv(
JNIEnv* env,
jclass layoutManagerClass,
jclass callbackClass) {
@@ -231,7 +231,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_initLayoutEnv(
// protected native long createLayout();
extern "C" JNIEXPORT jlong JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_createLayout(
+Java_org_wakin_flexlayout_FlexLayoutManager_createLayout(
JNIEnv* env,
jobject javaThis,
jobject layoutCallback) {
@@ -243,7 +243,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_createLayout(
// protected native long releaseLayout();
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_releaseLayout(
+Java_org_wakin_flexlayout_FlexLayoutManager_releaseLayout(
JNIEnv* env,
jobject javaThis,
jlong layout) {
@@ -256,7 +256,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_releaseLayout(
}
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_addStickyItem(
+Java_org_wakin_flexlayout_FlexLayoutManager_addStickyItem(
JNIEnv* env,
jobject javaThis,
jlong layout,
@@ -270,7 +270,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_addStickyItem(
}
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_clearStickyItems(
+Java_org_wakin_flexlayout_FlexLayoutManager_clearStickyItems(
JNIEnv* env,
jobject javaThis,
jlong layout) {
@@ -283,7 +283,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_clearStickyItems(
}
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_setStackedStickyItems(
+Java_org_wakin_flexlayout_FlexLayoutManager_setStackedStickyItems(
JNIEnv* env,
jobject javaThis,
jlong layout,
@@ -297,7 +297,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_setStackedStickyItems(
}
extern "C" JNIEXPORT jboolean JNICALL
- Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_isStackedStickyItems(
+ Java_org_wakin_flexlayout_FlexLayoutManager_isStackedStickyItems(
JNIEnv* env,
jobject javaThis,
jlong layout) {
@@ -316,7 +316,7 @@ extern "C" JNIEXPORT jboolean JNICALL
// 1:
extern "C" JNIEXPORT void JNICALL
-Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_prepareLayout(
+Java_org_wakin_flexlayout_FlexLayoutManager_prepareLayout(
JNIEnv* env,
jobject javaThis,
jlong layout,
@@ -348,7 +348,7 @@ Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_prepareLayout(
}
extern "C" JNIEXPORT jintArray JNICALL
- Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_filterItems(
+ Java_org_wakin_flexlayout_FlexLayoutManager_filterItems(
JNIEnv* env,
jobject javaThis,
jlong layout,
@@ -396,7 +396,7 @@ extern "C" JNIEXPORT jintArray JNICALL
// int array: left, top, right, bottom
extern "C" JNIEXPORT jintArray JNICALL
- Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_getItemRect(
+ Java_org_wakin_flexlayout_FlexLayoutManager_getItemRect(
JNIEnv* env,
jobject javaThis,
jlong layout,
@@ -424,7 +424,7 @@ extern "C" JNIEXPORT jintArray JNICALL
}
extern "C" JNIEXPORT jint JNICALL
- Java_org_wakin_flexlayout_layoutmanager_FlexLayoutManager_computerContentOffsetToMakePositionTopVisible(
+ Java_org_wakin_flexlayout_FlexLayoutManager_computerContentOffsetToMakePositionTopVisible(
JNIEnv* env,
jobject javaThis,
jlong layout,
diff --git a/app/src/main/cpp/FlexLayoutManager.h b/flexlayout/src/main/cpp/FlexLayoutManager.h
similarity index 100%
rename from app/src/main/cpp/FlexLayoutManager.h
rename to flexlayout/src/main/cpp/FlexLayoutManager.h
diff --git a/app/src/main/cpp/FlexLayoutObjects.h b/flexlayout/src/main/cpp/FlexLayoutObjects.h
similarity index 100%
rename from app/src/main/cpp/FlexLayoutObjects.h
rename to flexlayout/src/main/cpp/FlexLayoutObjects.h
diff --git a/app/src/main/cpp/LayoutCallbackAdapter.cpp b/flexlayout/src/main/cpp/LayoutCallbackAdapter.cpp
similarity index 98%
rename from app/src/main/cpp/LayoutCallbackAdapter.cpp
rename to flexlayout/src/main/cpp/LayoutCallbackAdapter.cpp
index 2ba8404..f1b7b36 100644
--- a/app/src/main/cpp/LayoutCallbackAdapter.cpp
+++ b/flexlayout/src/main/cpp/LayoutCallbackAdapter.cpp
@@ -9,7 +9,7 @@
#define CACHE_NUMBER_OF_ITEMS 1024
#define JAVA_CLASS_POINT "android/graphics/Point"
-#define JAVA_CLASS_SIZE "org/wakin/flexlayout/layoutmanager/graphics/Size"
+#define JAVA_CLASS_SIZE "org/wakin/flexlayout/graphics/Size"
jmethodID LayoutCallbackAdapter::m_setContentSizeMid = NULL;
@@ -35,7 +35,7 @@ void LayoutCallbackAdapter::initLayoutEnv(JNIEnv* env, jclass layoutManagerClass
// Methods on LayoutCallback
m_itemEnterStickyModeMid = env->GetMethodID(callbackClass, "onItemEnterStickyMode", "(IIILandroid/graphics/Rect;)V");
m_itemExitStickyModeMid = env->GetMethodID(callbackClass, "onItemExitStickyMode", "(III)V");
- m_itemSizeMid = env->GetMethodID(callbackClass, "getSizeForItem", "(IILorg/wakin/flexlayout/layoutmanager/graphics/Size;)V");
+ m_itemSizeMid = env->GetMethodID(callbackClass, "getSizeForItem", "(IILorg/wakin/flexlayout/graphics/Size;)V");
m_fullSpanMid = env->GetMethodID(callbackClass, "isFullSpanAtItem", "(II)Z");
m_itemDataMid = env->GetMethodID(callbackClass, "getInfoForItemsBatchly", "(III[I)I");
diff --git a/app/src/main/cpp/LayoutCallbackAdapter.h b/flexlayout/src/main/cpp/LayoutCallbackAdapter.h
similarity index 100%
rename from app/src/main/cpp/LayoutCallbackAdapter.h
rename to flexlayout/src/main/cpp/LayoutCallbackAdapter.h
diff --git a/app/src/main/cpp/RecyclerLayout.h b/flexlayout/src/main/cpp/RecyclerLayout.h
similarity index 100%
rename from app/src/main/cpp/RecyclerLayout.h
rename to flexlayout/src/main/cpp/RecyclerLayout.h
diff --git a/app/src/main/cpp/common/BoolTraits.h b/flexlayout/src/main/cpp/common/BoolTraits.h
similarity index 100%
rename from app/src/main/cpp/common/BoolTraits.h
rename to flexlayout/src/main/cpp/common/BoolTraits.h
diff --git a/app/src/main/cpp/common/ContainerBase.h b/flexlayout/src/main/cpp/common/ContainerBase.h
similarity index 100%
rename from app/src/main/cpp/common/ContainerBase.h
rename to flexlayout/src/main/cpp/common/ContainerBase.h
diff --git a/app/src/main/cpp/common/FlexColumn.h b/flexlayout/src/main/cpp/common/FlexColumn.h
similarity index 100%
rename from app/src/main/cpp/common/FlexColumn.h
rename to flexlayout/src/main/cpp/common/FlexColumn.h
diff --git a/app/src/main/cpp/common/FlexFlowSection.h b/flexlayout/src/main/cpp/common/FlexFlowSection.h
similarity index 100%
rename from app/src/main/cpp/common/FlexFlowSection.h
rename to flexlayout/src/main/cpp/common/FlexFlowSection.h
diff --git a/app/src/main/cpp/common/FlexItem.h b/flexlayout/src/main/cpp/common/FlexItem.h
similarity index 100%
rename from app/src/main/cpp/common/FlexItem.h
rename to flexlayout/src/main/cpp/common/FlexItem.h
diff --git a/flexlayout/src/main/cpp/common/FlexLayout-before-sync-ios.h b/flexlayout/src/main/cpp/common/FlexLayout-before-sync-ios.h
new file mode 100755
index 0000000..2104e70
--- /dev/null
+++ b/flexlayout/src/main/cpp/common/FlexLayout-before-sync-ios.h
@@ -0,0 +1,484 @@
+//
+// Created by Matthew on 2020-07-03.
+//
+
+#ifndef FLEXLAYOUTMANAGER_FLEXLAYOUT_OLD_H
+#define FLEXLAYOUTMANAGER_FLEXLAYOUT_OLD_H
+
+#include
+#include "../FlexLayoutObjects.h"
+
+#include "FlexSection.h"
+#include "FlexFlowSection.h"
+#include "FlexWaterfallSection.h"
+#include "../LayoutCallbackAdapter.h"
+
+
+#ifndef NDEBUG
+#include
+
+#define TAG "NDK"
+#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__)
+#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
+#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
+
+#endif // NDK_DEBUG
+
+
+#define INVALID_OFFSET INT_MIN
+
+template
+class SectionT : public nsflex::FlexSectionT
+{
+protected:
+ using BaseSection = nsflex::FlexSectionT;
+ // using TLayout = typename BaseSection::LayoutType;
+ // using TInt = typename BaseSection::IntType;
+ // using TCoordinate = typename BaseSection::CoordinateType;
+
+ int m_position;
+
+public:
+ SectionT(TInt section, const Rect& frame) : BaseSection(section, frame), m_position(0)
+ {
+ }
+
+ int getPositionBase() const { return m_position; }
+ void setPositionBase(int position) { m_position = position; }
+};
+
+// using FlexSection = SectionT;
+// typedef nsflex::FlexFlowSectionT, true> FlexFlowSection;
+// typedef nsflex::FlexWaterfallSectionT, true> FlexWaterfallSection;
+// typedef nsflex::FlexVerticalCompareT> FlexSectionVerticalCompare;
+// typedef nsflex::FlexHorizontalCompareT> FlexSectionHorizontalCompare;
+// typedef std::vector *>::const_iterator FlexSectionConstIterator;
+// typedef std::pair FlexSectionConstIteratorPair;
+
+template
+struct FlexSectionPositionCompare
+{
+ bool operator() ( const T* section, int position) const
+ {
+ return section->getPositionBase() + section->getItemCount() <= position;
+ }
+ bool operator() ( int position, const T* item ) const
+ {
+ return position < item->getPositionBase();
+ }
+};
+
+template
+class FlexLayout : public nsflex::ContainerBaseT
+{
+public:
+
+ using TBase = nsflex::ContainerBaseT;
+
+ using Section = SectionT;
+ using FlowSection = typename nsflex::FlexFlowSectionT;
+ using WaterfallSection = typename nsflex::FlexWaterfallSectionT;
+ using SectionCompare = nsflex::FlexCompareT;
+ using SectionConstIterator = typename std::vector::const_iterator;
+ using SectionConstIteratorPair = std::pair;
+ using SectionPositionCompare = FlexSectionPositionCompare;
+
+ using TBase::x;
+ using TBase::y;
+ using TBase::left;
+ using TBase::top;
+ using TBase::right;
+ using TBase::bottom;
+
+ using TBase::offset;
+ using TBase::offsetX;
+ using TBase::offsetY;
+ using TBase::incWidth;
+
+ using TBase::leftBottom;
+ using TBase::height;
+ using TBase::width;
+
+ using TBase::hinsets;
+ using TBase::vinsets;
+ using TBase::makeSize;
+ using TBase::makeRect;
+
+protected:
+
+ std::vector m_sections;
+
+public:
+ FlexLayout()
+ {
+
+ }
+ ~FlexLayout()
+ {
+ clearSections();
+ }
+
+ Size prepareLayout(const LayoutCallbackAdapter& layoutCallbackAdapter, const LayoutAndSectionsInfo &layoutAndSectionsInfo)
+ {
+ struct timeval startTime;
+ gettimeofday(&startTime, NULL);
+
+ clearSections();
+
+ int sectionCount = layoutCallbackAdapter.getNumberOfSections();
+ if (sectionCount <= 0)
+ {
+ layoutCallbackAdapter.updateContentSize(layoutAndSectionsInfo.size.width, layoutAndSectionsInfo.padding.top + layoutAndSectionsInfo.padding.bottom);
+ return Size(layoutAndSectionsInfo.size.width, layoutAndSectionsInfo.padding.top + layoutAndSectionsInfo.padding.bottom);
+ }
+
+ Rect bounds(layoutAndSectionsInfo.padding.left, layoutAndSectionsInfo.padding.top,
+ layoutAndSectionsInfo.size.width - (layoutAndSectionsInfo.padding.left + layoutAndSectionsInfo.padding.right),
+ layoutAndSectionsInfo.size.height - (layoutAndSectionsInfo.padding.top + layoutAndSectionsInfo.padding.bottom));
+ int positionBase = 0;
+
+ Rect rectOfSection = makeRect(left(layoutAndSectionsInfo.padding), top(layoutAndSectionsInfo.padding), width(bounds), 0);
+ for (int sectionIndex = 0; sectionIndex < sectionCount; sectionIndex++) {
+ int layoutMode = layoutCallbackAdapter.getLayoutModeForSection(sectionIndex);
+ Section *section = layoutMode == 1 ?
+ static_cast(new WaterfallSection(sectionIndex, rectOfSection)) :
+ static_cast(new FlowSection(sectionIndex, rectOfSection));
+
+ section->setPositionBase(positionBase);
+ section->prepareLayout(&layoutCallbackAdapter, bounds.size);
+
+ m_sections.push_back(section);
+
+ positionBase += section->getItemCount();
+
+ offsetY(rectOfSection, height(section->getFrame()));
+ // top(rectOfSection, top(rectOfSection) += section->getFrame().height();
+ // rectOfSection.size.height = 0;
+ }
+
+ Size contentSize = makeSize(width(layoutAndSectionsInfo.size), bottom(rectOfSection) + bottom(layoutAndSectionsInfo.padding));
+
+ layoutCallbackAdapter.updateContentSize(contentSize.width, contentSize.height);
+
+
+ struct timeval endTime;
+ gettimeofday(&endTime, NULL);
+
+ struct timeval t_result;
+ timersub(&endTime, &startTime, &t_result);
+
+ LOGI("PERF prepareLayout(C) elapsed time= %dns \n", (int)(t_result.tv_usec));
+
+ return contentSize;
+ }
+
+ void updateItems(int action, int itemStart, int itemCount)
+ {
+
+ }
+
+ // LayoutItem::data == 1, indicates that the item is sticky
+ void getItemsInRect(std::vector &items, std::vector> &changingStickyItems, std::vector &stickyItems, bool stackedStickyItems, const LayoutInfo &layoutInfo) const;
+
+ int computerContentOffsetToMakePositionTopVisible(std::vector &stickyItems, bool stackedStickyItems, const LayoutInfo &layoutInfo, int position, int positionOffset) const;
+
+ bool getItem(int position, LayoutItem &layoutItem) const;
+
+
+protected:
+
+ inline void clearSections()
+ {
+ for (typename std::vector::iterator it = m_sections.begin(); it != m_sections.end(); delete *it, ++it);
+ m_sections.clear();
+ }
+
+ LayoutItem *makeLayoutItem(int sectionIndex, int itemIndex) const
+ {
+ if (sectionIndex < m_sections.size())
+ {
+ Section *section = m_sections[sectionIndex];
+
+ FlexItem *item = section->getItem(itemIndex);
+
+ if (NULL != item)
+ {
+ Rect rect = item->getFrame();
+ rect.offset(section->getFrame().left(), section->getFrame().top());
+
+ return new LayoutItem(sectionIndex, itemIndex, section->getPositionBase() + itemIndex, rect);
+ }
+ }
+ return NULL;
+ }
+
+#ifdef NDK_DEBUG
+ std::string printDebugInfo(std::string prefix) const
+ {
+ std::ostringstream str;
+
+
+ int idx = 1;
+ for (typename std::vector::const_iterator it = m_sections.begin(); it != m_sections.end(); ++it)
+ {
+ str << prefix << "Section " << idx << "[" << (*it)->getFrame().left() << "," << (*it)->getFrame().top() << "-" << (*it)->getFrame().width() << "," << (*it)->getFrame().height() << "]\r\n";
+
+ idx++;
+ }
+
+ return str.str();
+ }
+#endif
+
+};
+
+
+
+template
+void FlexLayout::getItemsInRect(std::vector &items, std::vector> &changingStickyItems, std::vector &stickyItems, bool stackedStickyItems, const LayoutInfo &layoutInfo) const
+{
+
+#ifdef NDK_DEBUG
+ std::string str = printDebugInfo("");
+ LOGI("%s", str.c_str());
+
+#endif
+
+ Rect rect(layoutInfo.contentOffset.x, layoutInfo.contentOffset.y, layoutInfo.size.width, layoutInfo.size.height); // visibleRect
+
+ SectionConstIteratorPair range = std::equal_range(m_sections.begin(), m_sections.end(), std::pair(top(rect), bottom(rect)), SectionCompare());
+
+ if (range.first == range.second)
+ {
+ // No Sections
+ return;
+ }
+
+ std::vector flexItems;
+ for (SectionConstIterator it = range.first; it != range.second; ++it)
+ {
+ (*it)->filterInRect(flexItems, rect);
+ if (flexItems.empty())
+ {
+ continue;
+ }
+
+ for (std::vector::const_iterator itItem = flexItems.begin(); itItem != flexItems.end(); ++itItem)
+ {
+ if ((*itItem)->isPlaceHolder())
+ {
+ continue;
+ }
+
+ Rect frame = (*itItem)->getFrame();
+ frame.offset((*it)->getFrame().left(), (*it)->getFrame().top());
+
+ LayoutItem item((*it)->getSection(), (*itItem)->getItem(), (*it)->getPositionBase() + (*itItem)->getItem(), frame);
+
+ items.push_back(item);
+ }
+ flexItems.clear();
+ }
+
+ if (!stickyItems.empty())
+ {
+ int maxSection = range.second - 1 - m_sections.begin();
+ int minSection = range.first - m_sections.begin();
+
+ int totalStickyItemSize = 0; // When m_stackedStickyItems == YES
+
+ LayoutStickyItemCompare comp;
+ Rect rect;
+ Point origin;
+
+ for (std::vector::iterator it = stickyItems.begin(); it != stickyItems.end(); ++it)
+ {
+ if (it->section > maxSection || (!stackedStickyItems && (it->section < minSection)))
+ {
+ if (it->inSticky)
+ {
+ it->inSticky = false;
+ // Pass the change info to caller
+ changingStickyItems.push_back(std::make_pair(*it, Point()));
+ // notifyItemLeavingStickyMode((*it)->section, (*it)->item, (*it)->position);
+ }
+ continue;
+ }
+
+ Section *section = m_sections[it->section];
+ const FlexItem *item = section->getItem(it->item);
+ if (item == NULL)
+ {
+ continue;
+ }
+
+ it->position = section->getPositionBase() + item->getItem();
+
+ rect = item->getFrame();
+ offset(rect, left(section->getFrame()) - x(layoutInfo.contentOffset), top(section->getFrame()) - y(layoutInfo.contentOffset));
+ origin = rect.origin;
+
+ int stickyItemSize = height(rect);
+
+ if (stackedStickyItems)
+ {
+ top(rect, std::max(totalStickyItemSize + top(layoutInfo.padding), y(origin)));
+ }
+ else
+ {
+ Rect lastItemInSection = section->getItem(section->getItemCount() - 1)->getFrame();
+ Rect frameItems = makeRect(x(origin), y(origin), right(lastItemInSection), bottom(lastItemInSection));
+ frameItems.offset(section->getFrame().left(), section->getFrame().top());
+ top(rect, std::min(std::max(top(layoutInfo.padding), (top(frameItems) - stickyItemSize)),
+ (bottom(frameItems) - stickyItemSize)));
+ }
+
+ // If original mode is sticky, we check contentOffset and if contentOffset.y is less than origin.y, it is exiting sticky mode
+ // Otherwise, we check the top of sticky header
+ bool stickyMode = it->inSticky ? ((y(layoutInfo.contentOffset) + top(layoutInfo.padding) < top(rect)) ? false : true) : ((top(rect) >= y(origin)) ? true : false);
+ bool originChanged = it->inSticky ? ((top(rect) >= y(layoutInfo.contentOffset) + top(layoutInfo.padding)) ? false : true) : ((top(rect) > y(origin)) ? true : false);
+ // bool stickyMode = (rect.origin.y >= origin.y);
+ if (stickyMode != it->inSticky)
+ {
+ // Pass the change info to caller
+ it->inSticky = stickyMode;
+ changingStickyItems.push_back(std::make_pair(*it, origin));
+ }
+
+ if (stickyMode)
+ {
+ std::vector::iterator itVisibleItem = std::lower_bound(items.begin(), items.end(), *it, comp);
+ if (itVisibleItem == items.end() || (itVisibleItem->section != it->section || itVisibleItem->item != it->item))
+ {
+ // Create new LayoutItem and put it into visibleItems
+ LayoutItem *layoutItem = new LayoutItem(it->section, it->item, it->position, rect);
+ layoutItem->setInSticky(true);
+ layoutItem->setOriginChanged(true);
+ items.insert(itVisibleItem, layoutItem);
+ }
+ else
+ {
+ // Update in place
+ itVisibleItem->frame = rect;
+ itVisibleItem->setInSticky(true);
+ itVisibleItem->setOriginChanged(true);
+ }
+
+ totalStickyItemSize += stickyItemSize;
+ }
+ }
+ }
+
+}
+
+template
+bool FlexLayout::getItem(int position, LayoutItem &layoutItem) const
+{
+ SectionConstIterator it = std::upper_bound(m_sections.begin(), m_sections.end(), position, SectionPositionCompare());
+ if (it == m_sections.end())
+ {
+ return false;
+ }
+
+ int itemIndex = position - (*it)->getPositionBase();
+ if (itemIndex >= (*it)->getItemCount())
+ {
+ return false;
+ }
+
+ // layoutItem = *it;
+ Rect rect = (*it)->getItemFrameInView(itemIndex);
+ layoutItem.reset((*it)->getSection(), itemIndex, position, rect, 0);
+
+ return true;
+}
+
+template
+int FlexLayout::computerContentOffsetToMakePositionTopVisible(std::vector &stickyItems, bool stackedStickyItems, const LayoutInfo &layoutInfo, int position, int positionOffset) const
+{
+ SectionConstIterator itTargetSection = std::lower_bound(m_sections.begin(), m_sections.end(), position, SectionPositionCompare());
+ if (itTargetSection == m_sections.end())
+ {
+ return INVALID_OFFSET;
+ }
+
+ FlexItem *targetItem = (*itTargetSection)->getItem(position - (*itTargetSection)->getPositionBase());
+ if (NULL == targetItem)
+ {
+ return INVALID_OFFSET;
+ }
+
+#ifdef INTERNAL_VERTICAL_LAYOUT
+ int newContentOffset = targetItem->getFrame().top() + positionOffset;
+#else
+ int newContentOffset = targetItem->getFrame().left() + positionOffset;
+#endif // #ifdef INTERNAL_VERTICAL_LAYOUT
+
+ int totalStickyItemSize = 0; // When m_stackedStickyItems == true
+ Rect rect;
+ Point origin; // old origin
+
+ for (std::vector::const_iterator it = stickyItems.begin(); it != stickyItems.end(); ++it)
+ {
+ if ((!stackedStickyItems) && (it->section < (*itTargetSection)->getSection()))
+ {
+ continue;
+ }
+ if (it->section > (*itTargetSection)->getSection() || (it->section == (*itTargetSection)->getSection() && it->item > targetItem->getItem()))
+ {
+ // If the sticky item is greater than target item
+ break;
+ }
+
+ // int sectionIndex = it->section;
+ const Section *section = m_sections[it->section];
+
+ rect = section->getItemFrameInView(it->item);
+ // TODO:There should be bug
+ rect.offset(-layoutInfo.contentOffset.x, -layoutInfo.contentOffset.y);
+ origin = rect.origin;
+
+#ifdef INTERNAL_VERTICAL_LAYOUT
+ int stickyItemSize = rect.height();
+#else
+ int stickyItemSize = rect.width();
+#endif // #ifdef INTERNAL_VERTICAL_LAYOUT
+
+ if (stackedStickyItems)
+ {
+#ifdef INTERNAL_VERTICAL_LAYOUT
+ rect.origin.y = std::max(totalStickyItemSize + layoutInfo.padding.top, rect.origin.y);
+#else
+ rect.origin.x = std::max(totalStickyItemSize + layoutInfo.padding.left, rect.origin.x);
+#endif // #ifdef INTERNAL_VERTICAL_LAYOUT
+ }
+ else
+ {
+ Rect frameItems = section->getItemsFrameInViewAfterItem(it->item);
+ top(rect, std::min(
+ std::max(top(layoutInfo.padding), top(frameItems) - stickyItemSize),
+ (bottom(frameItems) - stickyItemSize))
+ );
+ }
+
+ // If original mode is sticky, we check contentOffset and if contentOffset.y is less than origin.y, it is exiting sticky mode
+ // Otherwise, we check the top of sticky header
+ bool stickyMode = it->inSticky ? ((y(layoutInfo.contentOffset) + top(layoutInfo.padding) < top(rect)) ? false : true) : ((top(rect) >= y(origin)) ? true : false);
+ if (stickyMode)
+ {
+ totalStickyItemSize = stackedStickyItems ? (totalStickyItemSize + stickyItemSize) : stickyItemSize;
+ }
+
+ }
+
+ int contentOffset = 0;
+ rect = targetItem->getFrame();
+ offset(rect, left((*itTargetSection)->getFrame()), top((*itTargetSection)->getFrame()));
+ contentOffset = top(rect) - top(layoutInfo.padding) - totalStickyItemSize + positionOffset;
+
+ return contentOffset;
+}
+
+
+
+#endif //FLEXLAYOUTMANAGER_FLEXLAYOUT_OLD_H
diff --git a/app/src/main/cpp/common/FlexLayout.h b/flexlayout/src/main/cpp/common/FlexLayout.h
similarity index 99%
rename from app/src/main/cpp/common/FlexLayout.h
rename to flexlayout/src/main/cpp/common/FlexLayout.h
index 7d1f15b..686dca4 100644
--- a/app/src/main/cpp/common/FlexLayout.h
+++ b/flexlayout/src/main/cpp/common/FlexLayout.h
@@ -652,7 +652,7 @@ class FlexLayoutT : public nsflex::ContainerBaseT
void getItemsInRect(std::vector &items, StickyItemList &changingStickyItems, StickyItemList &stickyItems, bool stackedStickyItems, const Rect &rect, const Size &size, const Size &contentSize, const Insets &padding, const Point &contentOffset, const Point &pagingOffset, TInt fixedSection, TInt currentPage) const
{
- if (fixedSection >= m_sections.size())
+ if (fixedSection > m_sections.size())
{
return;
}
diff --git a/app/src/main/cpp/common/FlexPage.h b/flexlayout/src/main/cpp/common/FlexPage.h
similarity index 100%
rename from app/src/main/cpp/common/FlexPage.h
rename to flexlayout/src/main/cpp/common/FlexPage.h
diff --git a/app/src/main/cpp/common/FlexPageLayout.h b/flexlayout/src/main/cpp/common/FlexPageLayout.h
similarity index 100%
rename from app/src/main/cpp/common/FlexPageLayout.h
rename to flexlayout/src/main/cpp/common/FlexPageLayout.h
diff --git a/app/src/main/cpp/common/FlexRow.h b/flexlayout/src/main/cpp/common/FlexRow.h
similarity index 100%
rename from app/src/main/cpp/common/FlexRow.h
rename to flexlayout/src/main/cpp/common/FlexRow.h
diff --git a/app/src/main/cpp/common/FlexSection.h b/flexlayout/src/main/cpp/common/FlexSection.h
similarity index 100%
rename from app/src/main/cpp/common/FlexSection.h
rename to flexlayout/src/main/cpp/common/FlexSection.h
diff --git a/app/src/main/cpp/common/FlexWaterfallSection.h b/flexlayout/src/main/cpp/common/FlexWaterfallSection.h
similarity index 100%
rename from app/src/main/cpp/common/FlexWaterfallSection.h
rename to flexlayout/src/main/cpp/common/FlexWaterfallSection.h
diff --git a/app/src/main/cpp/common/Graphics.h b/flexlayout/src/main/cpp/common/Graphics.h
similarity index 100%
rename from app/src/main/cpp/common/Graphics.h
rename to flexlayout/src/main/cpp/common/Graphics.h
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutHelper.java b/flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutHelper.java
similarity index 94%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutHelper.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutHelper.java
index d3bea33..65b85f4 100755
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutHelper.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutHelper.java
@@ -1,11 +1,11 @@
-package org.wakin.flexlayout.layoutmanager;
+package org.wakin.flexlayout;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.layoutobjects.DisplayInfo;
-import org.wakin.flexlayout.layoutmanager.layoutobjects.LayoutAndSectionsInfo;
-import org.wakin.flexlayout.layoutmanager.layoutobjects.LayoutInfo;
+import org.wakin.flexlayout.layoutobjects.DisplayInfo;
+import org.wakin.flexlayout.layoutobjects.LayoutAndSectionsInfo;
+import org.wakin.flexlayout.layoutobjects.LayoutInfo;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutManager.java b/flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutManager.java
similarity index 99%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutManager.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutManager.java
index 9ba97c6..f6ed9c3 100755
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/FlexLayoutManager.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/FlexLayoutManager.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.layoutmanager;
+package org.wakin.flexlayout;
import android.content.Context;
import android.graphics.Point;
@@ -15,9 +15,9 @@
import androidx.recyclerview.widget.OrientationHelper;
import androidx.recyclerview.widget.RecyclerView;
-import org.wakin.flexlayout.layoutmanager.impl.LayoutImpl;
-import org.wakin.flexlayout.app.util.Algorithm;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.impl.LayoutImpl;
+import org.wakin.flexlayout.util.Algorithm;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutCallback.java b/flexlayout/src/main/java/org/wakin/flexlayout/LayoutCallback.java
similarity index 87%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutCallback.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/LayoutCallback.java
index 33c3b44..1743ef5 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutCallback.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/LayoutCallback.java
@@ -1,10 +1,10 @@
-package org.wakin.flexlayout.layoutmanager;
+package org.wakin.flexlayout;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.graphics.Size;
public interface LayoutCallback {
int getNumberOfSections();
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutItem.java b/flexlayout/src/main/java/org/wakin/flexlayout/LayoutItem.java
similarity index 96%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutItem.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/LayoutItem.java
index 4d8384e..001a25b 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/LayoutItem.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/LayoutItem.java
@@ -1,8 +1,8 @@
-package org.wakin.flexlayout.layoutmanager;
+package org.wakin.flexlayout;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.impl.elements.FlexItem;
+import org.wakin.flexlayout.impl.elements.FlexItem;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Insets.java b/flexlayout/src/main/java/org/wakin/flexlayout/graphics/Insets.java
similarity index 98%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Insets.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/graphics/Insets.java
index 25af6f5..5c734c1 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Insets.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/graphics/Insets.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.layoutmanager.graphics;
+package org.wakin.flexlayout.graphics;
import android.graphics.Rect;
import android.os.Parcel;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Size.java b/flexlayout/src/main/java/org/wakin/flexlayout/graphics/Size.java
similarity index 98%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Size.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/graphics/Size.java
index ea40ac2..2938113 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/graphics/Size.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/graphics/Size.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.layoutmanager.graphics;
+package org.wakin.flexlayout.graphics;
import android.graphics.Point;
import android.os.Parcel;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/LayoutImpl.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/LayoutImpl.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/LayoutImpl.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/LayoutImpl.java
index 4b0fb0b..1ac0449 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/LayoutImpl.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/LayoutImpl.java
@@ -1,19 +1,19 @@
-package org.wakin.flexlayout.layoutmanager.impl;
+package org.wakin.flexlayout.impl;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.view.View;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.LayoutItem;
-import org.wakin.flexlayout.layoutmanager.impl.elements.FlexFlowSection;
-import org.wakin.flexlayout.layoutmanager.impl.elements.FlexItem;
-import org.wakin.flexlayout.layoutmanager.impl.elements.FlexSection;
-import org.wakin.flexlayout.layoutmanager.impl.elements.FlexWaterfallSection;
-import org.wakin.flexlayout.app.util.Algorithm;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.LayoutItem;
+import org.wakin.flexlayout.impl.elements.FlexFlowSection;
+import org.wakin.flexlayout.impl.elements.FlexItem;
+import org.wakin.flexlayout.impl.elements.FlexSection;
+import org.wakin.flexlayout.impl.elements.FlexWaterfallSection;
+import org.wakin.flexlayout.util.Algorithm;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/SectionPosition.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/SectionPosition.java
similarity index 96%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/SectionPosition.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/SectionPosition.java
index 8c83798..b0387b1 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/SectionPosition.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/SectionPosition.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.layoutmanager.impl;
+package org.wakin.flexlayout.impl;
public class SectionPosition implements Comparable {
public int section;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexColumn.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexColumn.java
similarity index 90%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexColumn.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexColumn.java
index 100a84b..cf6438c 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexColumn.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexColumn.java
@@ -1,9 +1,9 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Rect;
-import org.wakin.flexlayout.app.util.Algorithm;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.util.Algorithm;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.List;
@@ -62,7 +62,7 @@ public int deleteItemsFrom(FlexItem item) {
return -1;
}
- public int mergeItemsInBounds(List items, Rect rect, org.wakin.flexlayout.app.util.Comparator boundComparator, org.wakin.flexlayout.app.util.Comparator filterComparator) {
+ public int mergeItemsInBounds(List items, Rect rect, org.wakin.flexlayout.util.Comparator boundComparator, org.wakin.flexlayout.util.Comparator filterComparator) {
int lowerBound = Algorithm.lowerBound(mItems, rect, boundComparator);
if (lowerBound == -1) {
return 0;
@@ -82,7 +82,7 @@ public int mergeItemsInBounds(List items, Rect rect, org.wakin.flexlay
return matchedItems;
}
- public int mergeItemsInBounds(List items, Rect rect, org.wakin.flexlayout.app.util.Comparator boundComparator) {
+ public int mergeItemsInBounds(List items, Rect rect, org.wakin.flexlayout.util.Comparator boundComparator) {
int lowerBound = Algorithm.lowerBound(mItems, rect, boundComparator);
if (lowerBound == -1) {
return 0;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexFlowSection.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexFlowSection.java
similarity index 96%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexFlowSection.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexFlowSection.java
index be44fe6..7c8694a 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexFlowSection.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexFlowSection.java
@@ -1,14 +1,14 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
-import org.wakin.flexlayout.app.util.Algorithm;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Size;
+import org.wakin.flexlayout.util.Algorithm;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexItem.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexItem.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexItem.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexItem.java
index d2b726c..4694b83 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexItem.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexItem.java
@@ -1,10 +1,10 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.graphics.Size;
+import org.wakin.flexlayout.util.Comparator;
public class FlexItem implements Comparable {
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexRow.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexRow.java
similarity index 96%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexRow.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexRow.java
index ef44477..44814c4 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexRow.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexRow.java
@@ -1,10 +1,10 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.app.util.Algorithm;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.util.Algorithm;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexSection.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexSection.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexSection.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexSection.java
index 066f2eb..7df3db9 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexSection.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexSection.java
@@ -1,11 +1,11 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
-import org.wakin.flexlayout.app.util.Comparator;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Size;
+import org.wakin.flexlayout.util.Comparator;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexWaterfallSection.java b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexWaterfallSection.java
similarity index 91%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexWaterfallSection.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexWaterfallSection.java
index 9733dad..f3a2e18 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/impl/elements/FlexWaterfallSection.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/impl/elements/FlexWaterfallSection.java
@@ -1,12 +1,12 @@
-package org.wakin.flexlayout.layoutmanager.impl.elements;
+package org.wakin.flexlayout.impl.elements;
import android.graphics.Point;
import android.graphics.Rect;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
-import org.wakin.flexlayout.app.util.Algorithm;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Size;
+import org.wakin.flexlayout.util.Algorithm;
import java.util.ArrayList;
import java.util.Collections;
@@ -42,7 +42,7 @@ public int mergeItemsInRect(List items, Rect rect, final boolean verti
Rect offsettedRect = new Rect(rect);
offsettedRect.offset(-mFrame.left, -mFrame.top);
- org.wakin.flexlayout.app.util.Comparator comparator = vertical ? new FlexColumn.RectHorizontalComparator() : new FlexColumn.RectVerticalComparator();
+ org.wakin.flexlayout.util.Comparator comparator = vertical ? new FlexColumn.RectHorizontalComparator() : new FlexColumn.RectVerticalComparator();
int lowerRowBound = Algorithm.lowerBound(mColumns, offsettedRect, comparator);
if (lowerRowBound == -1) {
@@ -50,9 +50,9 @@ public int mergeItemsInRect(List items, Rect rect, final boolean verti
}
int upperRowBound = Algorithm.upperBound(mColumns, offsettedRect, comparator);
- org.wakin.flexlayout.app.util.Comparator rowItemComparator = vertical ? new FlexItem.RectVerticalComparator() : new FlexItem.RectHorizontalComparator();
+ org.wakin.flexlayout.util.Comparator rowItemComparator = vertical ? new FlexItem.RectVerticalComparator() : new FlexItem.RectHorizontalComparator();
// Check if the item is in rect vertically
- org.wakin.flexlayout.app.util.Comparator itemFilterComparator = new org.wakin.flexlayout.app.util.Comparator() {
+ org.wakin.flexlayout.util.Comparator itemFilterComparator = new org.wakin.flexlayout.util.Comparator() {
@Override
public int compare(FlexItem o1, Rect o2) {
Rect itemRect = o1.getFrame();
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/DisplayInfo.java b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/DisplayInfo.java
similarity index 93%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/DisplayInfo.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/DisplayInfo.java
index 0b6d375..43b4418 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/DisplayInfo.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/DisplayInfo.java
@@ -1,13 +1,13 @@
-package org.wakin.flexlayout.layoutmanager.layoutobjects;
+package org.wakin.flexlayout.layoutobjects;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Point;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.graphics.Size;
public class DisplayInfo {
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutAndSectionsInfo.java b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutAndSectionsInfo.java
similarity index 85%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutAndSectionsInfo.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutAndSectionsInfo.java
index d37906d..d62eb4b 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutAndSectionsInfo.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutAndSectionsInfo.java
@@ -1,11 +1,8 @@
-package org.wakin.flexlayout.layoutmanager.layoutobjects;
+package org.wakin.flexlayout.layoutobjects;
-import android.graphics.Point;
-
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Size;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutInfo.java b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutInfo.java
similarity index 90%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutInfo.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutInfo.java
index 38c5147..1df1cb0 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/LayoutInfo.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/LayoutInfo.java
@@ -1,11 +1,11 @@
-package org.wakin.flexlayout.layoutmanager.layoutobjects;
+package org.wakin.flexlayout.layoutobjects;
import android.graphics.Point;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.graphics.Size;
import java.util.List;
diff --git a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/SectionInfo.java b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/SectionInfo.java
similarity index 86%
rename from app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/SectionInfo.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/SectionInfo.java
index 999c2ca..fef1c71 100644
--- a/app/src/main/java/org/wakin/flexlayout/layoutmanager/layoutobjects/SectionInfo.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/layoutobjects/SectionInfo.java
@@ -1,9 +1,9 @@
-package org.wakin.flexlayout.layoutmanager.layoutobjects;
+package org.wakin.flexlayout.layoutobjects;
-import org.wakin.flexlayout.layoutmanager.FlexLayoutManager;
-import org.wakin.flexlayout.layoutmanager.LayoutCallback;
-import org.wakin.flexlayout.layoutmanager.graphics.Insets;
-import org.wakin.flexlayout.layoutmanager.graphics.Size;
+import org.wakin.flexlayout.FlexLayoutManager;
+import org.wakin.flexlayout.LayoutCallback;
+import org.wakin.flexlayout.graphics.Insets;
+import org.wakin.flexlayout.graphics.Size;
public class SectionInfo {
diff --git a/app/src/main/java/org/wakin/flexlayout/app/util/Algorithm.java b/flexlayout/src/main/java/org/wakin/flexlayout/util/Algorithm.java
similarity index 99%
rename from app/src/main/java/org/wakin/flexlayout/app/util/Algorithm.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/util/Algorithm.java
index 22a566a..b66e28c 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/util/Algorithm.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/util/Algorithm.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.util;
+package org.wakin.flexlayout.util;
import java.util.List;
import java.util.ListIterator;
diff --git a/app/src/main/java/org/wakin/flexlayout/app/util/Comparator.java b/flexlayout/src/main/java/org/wakin/flexlayout/util/Comparator.java
similarity index 95%
rename from app/src/main/java/org/wakin/flexlayout/app/util/Comparator.java
rename to flexlayout/src/main/java/org/wakin/flexlayout/util/Comparator.java
index 4c917a4..1d44174 100644
--- a/app/src/main/java/org/wakin/flexlayout/app/util/Comparator.java
+++ b/flexlayout/src/main/java/org/wakin/flexlayout/util/Comparator.java
@@ -1,4 +1,4 @@
-package org.wakin.flexlayout.app.util;
+package org.wakin.flexlayout.util;
public interface Comparator {
/**
diff --git a/flexlayout/src/test/java/org/wakin/flexlayout/ExampleUnitTest.java b/flexlayout/src/test/java/org/wakin/flexlayout/ExampleUnitTest.java
new file mode 100644
index 0000000..a513b73
--- /dev/null
+++ b/flexlayout/src/test/java/org/wakin/flexlayout/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package org.wakin.flexlayout;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 2b522d5..90e713d 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,3 @@
-include ':app'
rootProject.name='FlexLayoutManager'
+include ':app'
+include ':flexlayout'