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'