Commit graph

82 commits

Author SHA1 Message Date
kinarob
de08713b33 Remove intercepted duplicate selector in IGListAdapterProxy. (#1291)
Summary:
## Changes in this pull request

### Checklist
Don't need tests.

- [x] All tests pass. Demo project builds and runs.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1291

Reviewed By: lorixx

Differential Revision: D15564138

Pulled By: candance

fbshipit-source-id: a0fabbd6a8f8389b09da7cd5484df75d67a709e5
2019-06-01 11:55:12 -07:00
Benny Wong
831e9b8809 Fix travis & upgrade cocoapods (#1317)
Summary:
This is a bigger PR than I'd like but there is a bunch of stuff in here that feels like we should land all at once to fix the Travis setup.

Currently, there is a few things wrong. Briefly:
1. Travis is failing to even build the library (see: [build 2298](https://travis-ci.org/Instagram/IGListKit/jobs/506564900))
2. There are legitimately failing tests
3. Travis seems to be flakey running UI tests

This PR deals with the first two.

The Xcode projects were not building because some recently added files weren't added to the xcodeproj (ie. 46a124ddfe and 4662454c4a).

Also added `Foundation.h` import for `bool` definition for `IGSystemVersion` (also a new file)

The main `Podfile.lock` was already being generated via `1.5.3` (0c0b31ad7c) but the `Gemfile` had the wrong version and none of the example project `Podfile.lock`s were re-generated with it.

Once I got the projects correctly building and tests running, I discovered there were a bunch of tests that were legitimately failing. It's unclear when these started failing and what caused it.

I thought it made sense to disable these tests for now and then create Github issues to fix them as starter tasks instead of making this diff even larger.. I can create those if that sounds good.

Somewhat related, it seems like the UI tests on Travis may be a bit flakey. They pass locally, but breaks on Travis [[example](https://travis-ci.com/bdotdub/IGListKit/jobs/195758250)] with error messages like `Failure requesting automation session for com.instagram.IGListKitExamples:85190`

----

- [X] All tests pass. Demo project builds and runs.
- [X] I added tests, an experiment, or detailed why my change isn't tested.
- [X] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [X] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1317

Reviewed By: rnystrom

Differential Revision: D15157375

Pulled By: rnystrom

fbshipit-source-id: b29131f59b74398b6d2b3a73453248cb3325a955
2019-05-01 15:13:25 -07:00
Maxime Ollivier
4f9c61a37f clean up IGListExperimentBackgroundDiffingSerial
Summary: * Cleaning up experiment

Reviewed By: lorixx

Differential Revision: D15134137

fbshipit-source-id: a3f5a6d7b4a5f3897608c4e32ad4c4e6e4e720e5
2019-04-30 10:50:52 -07:00
Maxime Ollivier
4662454c4a create IGListAdapterPerformanceDelegate
Summary:
* Currently, there's no easy way to measure how long we spend dequeueing cells or handling scroll events across the app. This makes it a bit difficult to catch scroll-perf issues early on.
* Fix: Lets create `IGListAdapterPerformanceDelegate` which gives us that information.

Reviewed By: rnystrom

Differential Revision: D14430449

fbshipit-source-id: 7bc170bdaa37807c8719976e8818f3a578ee17dd
2019-03-14 18:10:00 -07:00
Scott Wolchok
035808e750 Don't call [UIDevice currentDevice] in +load
Summary: sysctl should be faster.

Reviewed By: timonus

Differential Revision: D13981833

fbshipit-source-id: ae7a67d4eb69595441a4a66e0ef0a271762f77ce
2019-02-08 14:42:56 -08:00
Ofir Gluzman
36d1b8b210 Fix inconsistent state caused in UICollectionViewLayout+InteractiveReordering. (#1289)
Summary:
Issue fixed: #1288

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1289

Reviewed By: timonus

Differential Revision: D13590406

Pulled By: rnystrom

fbshipit-source-id: 0814b0c2383a185da747176bad57dfb15c7e883f
2019-01-10 08:25:26 -08:00
Tim Johnsen
a09242e279 Add experiment to perform IGListAdapterUpdater background updates on a serial queue.
Summary: This diff adds a new `IGListExperimentBackgroundDiffingSerial` experiment that behaves similarly to `IGListExperimentBackgroundDiffing` but executes changes in a per-`IGListAdapterUpdater` serial queue instead of a global queue. Global queues are concurrent, and concurrent queues by nature don't ensure the execution order of the blocks that are enqueued into them, so there's a chance that the former `IGListExperimentBackgroundDiffing` experiment would lead to changes being applied out of order.

Reviewed By: calimarkus

Differential Revision: D13567403

fbshipit-source-id: a2aebb20e5e7dc22601fad3c2dfc80112747c81b
2019-01-03 09:27:03 -08:00
Zhisheng Huang
6cdd112790 Fix some crash from IGListKit that nil dataSource might result in crash
Summary:
This happens when we set collectionView.dataSource to be nil before calling performUpdates:, the crash is easily reproduced by a simple unit test.

To make the infra more robust and we don't crash the app, let's add an early return before applying a collectionView update.

Reviewed By: rnystrom, calimarkus

Differential Revision: D12896196

fbshipit-source-id: ab024d0e7e9282d50c3be297e1e67cfccaff8242
2018-11-06 11:37:27 -08:00
Ryan Nystrom
8d8a632b67 Update MIT license language (#1272)
Summary:
Updating license language to meet FB open source standards.
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1272

Differential Revision: D12844366

Pulled By: rnystrom

fbshipit-source-id: 27ae49ae00d963c5c012c79c5738365c232a5773
2018-11-01 10:58:46 -07:00
trungducc
aa2361f449 Remove nibName argument from IGListReusableViewIdentifier #trivial (#1241)
Summary:
Issue fixed: #1223

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1241

Differential Revision: D12838898

Pulled By: rnystrom

fbshipit-source-id: af47550dd320fb0e813e8ae22bc7051c2460a05d
2018-10-30 13:43:59 -07:00
Jeremy Lawrence
3b19cfb9d7 Fix bug with cell identifiers
Summary:
When we added the ability to register the same class with multiple reuse identifiers, forgot to adjust the `registeredClasses` set to reflect that. This resulted in a bug where the collection view could be asked for a cell of a class that had already been registered, but with a different reuse identifier, which would end in a crash.

This diff fixes the crash, I'll follow up with another diff that adds unit tests around this, but want to fix master ASAP.

Differential Revision: D9560338

fbshipit-source-id: e8df6fe5d9929b44842c6abc01d52064ccb4147e
2018-08-29 12:33:01 -07:00
Zhisheng Huang
f699ea0e17 Add option to update cells instead of delete+insert for section reload
Summary:
We have seen unnecessary flashiness updates for any section reload updates.

Basically we have 1 section for 1 cell, which is recommended by the IGListKit document in https://instagram.github.io/IGListKit/best-practices-and-faq.html, specifically:

> "We highly recommend using single-item sections when possible."

However, the issue is that whenever we update the underlying data model, we would trigger a delete+insert for the section reload.

In order to mitigate that, we can fix this delete+insert changes or we use the `IGListBindingSectionController`, however, the latter one requires more refactoring plus view model wrapper to have `isEqualToDifferable:` to return YES, which seems less than ideal.

I am proposing that we add an option to the `IGListAdapterUpdater`, as `preferItemReloadsForSectionReloads` so that when it's set to YES, we would trigger the proper `-[UICollectionView reloadItemsAtIndexPaths:]` which handles the cell update properly.

This option also handles the case where the number of items in the section is changed before and after the updates, in that case, it will fallback to do the "delete+insert" section operation.

Reviewed By: rnystrom

Differential Revision: D9519519

fbshipit-source-id: 22ecca07679ebdd212cf771c61e40887cb6a9ba8
2018-08-28 23:32:43 -07:00
Ryan Nystrom
583efb936b Add experimental collectionView getter fix
Summary:
Adding a fix to the `IGListAdapterUpdater` that requests the `UICollectionView` to perform updates on until just-before we update. This way if the `UICollectionView` is changed between update-queue and execution (b/c updates are async), we guarantee the update is performed on the correct view.

See the accompanying unit test that fails w/out the fix enabled.

Differential Revision: D7889908

fbshipit-source-id: 7178677f34951a1e42986b0289fc4abc708d6946
2018-05-11 08:08:44 -07:00
Ryan Nystrom
000bc36919 Relicense to MIT
Summary: Relicensing IGListKit under MIT

Reviewed By: calimarkus

Differential Revision: D7764125

fbshipit-source-id: 6c773195ef3184202725fe7f08de754f979cb83f
2018-05-01 14:50:56 -07:00
Ryan Nystrom
3059c5e6f5 Add experiment to defer requesting objects from data source until just before diffing
Summary:
Inspired by recent performance investigations in Instagram, adding an experimental feature to defer requesting objects from the `IGListAdapterDataSource` until //just before// diffing is executed. If //n// updates are coalesced into one, this results in just a single request for objects from the data source.

This is a **breaking change** to the public API, but since writing custom `IGListUpdatingDelegate`s is discouraged, I'm less worried about saving this for a major version launch.

Reviewed By: manicakes

Differential Revision: D7744518

fbshipit-source-id: f0001263cddda383e3dedd1d350a83d2cfb8362a
2018-04-26 08:27:49 -07:00
Sho Ikeda
9315299fbc Minimum fixes for Xcode 9.3 build errors
Summary:
Issue fixed: #1141

This is a set of minimum fixes for Xcode 9.3 rather than #1142. Much smaller diffs 😃

The changes here were done by Xcode's FixIt. See also https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW5.

> Platform Dependencies
>
> OS X uses several data types—NSInteger, NSUInteger,CGFloat, and CFIndex—to provide a consistent means of representing values in 32- and 64-bit environments. In a 32-bit environment, NSInteger and NSUInteger are defined as int and unsigned int, respectively. In 64-bit environments, NSInteger and NSUInteger are defined as long and unsigned long, respectively. To avoid the need to use different printf-style type specifiers depending on the platform, you can use the specifiers shown in Table 3. Note that in some cases you may have to cast the value.

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/1143

Differential Revision: D7551617

Pulled By: rnystrom

fbshipit-source-id: b27ebe2b1a1c93ebfd1218dc38b7621fefee2e6b
2018-04-09 08:37:18 -07:00
Brandon Kieft
01770eb303 Prefix all private methods with an underscore
Summary: Prefix all private methods with an underscore. A private method is defined as any method not exposed via an interface or protocol. This will improve the readability of the code and hopefully reduce bugs.

Reviewed By: rnystrom

Differential Revision: D7421346

fbshipit-source-id: 536472d57ea7fd8990fe50f3e950907ca57b8e6d
2018-04-02 15:08:21 -07:00
Jeremy Lawrence
f47753e361 Add dequeue method with reuse identifier
Summary: Added the ability to register/dequeue a cell with a customized reuse identifier. This will allow for registering the same cell class for multiple reuse identifiers, as will be needed for `IGListItemView` cells.

Reviewed By: rnystrom

Differential Revision: D7436575

fbshipit-source-id: d557836b5454c50611c5a5f9367f2f2e496c3878
2018-04-02 09:17:40 -07:00
Ryan Nystrom
df18195d18 Add deselect selector to proxy
Summary:
Issue fixed: #1105

- [x] All tests pass. Demo project builds and runs.
- [ ] ~~I added tests, an experiment, or detailed why my change isn't tested.~~
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.

Unable to add tests w/out hacking `UITouch` events on a collection view. Open to suggestions.
Closes https://github.com/Instagram/IGListKit/pull/1108

Differential Revision: D7362200

Pulled By: rnystrom

fbshipit-source-id: fed640c2c017f0ade0cefff0b0d2118564dda3b0
2018-03-21 19:41:25 -07:00
Jared Verdi
f15b167e85 Interactive Reordering
Summary:
I had a desire for interactive reordering in a personal project, so here's a first attempt at adding support in IGListKit.

I figured I might as well get a WIP PR up for comments before I continue further as there are a few aspects to interactive reordering that don't interplay perfectly with IGListKit.

As discussed in #291, I went after two prime use cases:
1. Moving items amongst a section
2. Rearranging whole sections

I also "disabled" moving items between sections by having those moves revert, to mimic interactive reordering cancellation as closely as possible.

You can see both in the Mixed Data example. Grid items can be moved within a section, while users can be moved to reorder whole sections. But trying to move a grid item out of a grid or a user item into a grid will auto-revert. The revert animation isn't as tight as it should be. It may be more desirable to disable the animation - though you lose the visual cue.

There is a also a new example, `ReorderableViewController`, that demonstrates 2 in its pure form (likely the most desired use case), where all sections are reorderable single rows.

Happy to take feedback -- this is my first experience working on IGListKit, so I would expect there to be gaps. (Ex. I haven't used `IGListStackedSectionController`, and its tests failed as I hadn't implemented reordering delegates for it. Those are simply stubbed out for now.)

Issue fixed: #291

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)

- [x] Proper support in `IGListStackedSectionController`
Closes https://github.com/Instagram/IGListKit/pull/976

Differential Revision: D6674493

Pulled By: rnystrom

fbshipit-source-id: cd53c5fdc6fb59636edc4747c4bbd0f81a4610e5
2018-02-12 09:27:08 -08:00
Michelle Deng
29a82d744d Revert D6871289: [IGListKit][PR] Removed unnecessary nil check on transitionDelegate
Summary:
This reverts commit 7ccf5a286ab4ee63bf72273142857496ce62b6f4

bypass-lint

An infra SEV is better than not reverting this diff.
If you copy this password, see you in SEV Review!
cause_a_sev_many_files

Differential Revision:
D6871289

Original commit changeset: 7ccf5a286ab4

fbshipit-source-id: e75cc7bd4a378e1092f4a01be3104fddb336759a
2018-02-02 07:35:07 -08:00
Igor Vasilenko
316779fb74 Removed unnecessary nil check on transitionDelegate
Summary:
Issue fixed: #1071

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/1076

Differential Revision: D6871289

Pulled By: rnystrom

fbshipit-source-id: 7ccf5a286ab4ee63bf72273142857496ce62b6f4
2018-02-01 07:04:42 -08:00
zhongwuzw
8bccac9a79 Optimize SEL search efficiency
Summary:
Optimize `SEL` search efficiency, reduced the time complexity from O (n) to O (1).

Not need tests.

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/1055

Differential Revision: D6839942

Pulled By: rnystrom

fbshipit-source-id: 911755d6f8a4cd79b387423a51b6ea44cc7a2a07
2018-01-29 20:32:57 -08:00
Sue Suhan Ma
26924ec3b6 Customized post insertion animation
Summary:
The current animation is the collection default animation - fade in/out: demo: https://pxl.cl/bj8R
Based on our design, we want the Shelf to be push down: demo https://pxl.cl/bj9R

1. Created **IGListCollectionViewDelegate** which inherits **UICollectionViewDelegateFlowLayout**
2. **IGListAdapter ** conforms **UICollectionViewDelegateFlowLayout**
3. add **transitionDelegate** to IGListSectionController
4. **IGFeedSectionController** sets transitionDelegate as itself and handles IGListCollectionViewDelegate methods

Reviewed By: rnystrom

Differential Revision: D6785726

fbshipit-source-id: bdf19f84fef05264ca0e082c6a326a31494a20da
2018-01-29 11:03:11 -08:00
Jesse Squires
ae7f36f5c2 Update gems, fix warnings, pod install
Summary:
- Update CocoaPods + Gems
- Update SwiftLint version
- Fix lint errors
- Fix `pod_setup.sh` script, move to `scripts/` (should now be run from root dir)
- Run `pod_setup.sh`
Closes https://github.com/Instagram/IGListKit/pull/1038

Differential Revision: D6602297

Pulled By: rnystrom

fbshipit-source-id: 1bf69611e041903cf982fe7d9a95197729e44d94
2017-12-19 09:31:37 -08:00
Yury Bogdanov
bc4132dba7 Negative size assertion
Summary:
Assertions for item's size added to prevent negative values return from IGListAdapter

Issue fixed: #977

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/992

Reviewed By: ryanolsonk

Differential Revision: D6272307

Pulled By: rnystrom

fbshipit-source-id: 844affd914329e0ca04597ada2952f1a077897af
2017-12-18 11:47:45 -08:00
yiplee
e63a0e78fe Add new iOS 11 api adjustedContentInset support
Summary:
adopt adjustedContentInset instead of contentInset on iOS 11

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/1020

Reviewed By: manicakes

Differential Revision: D6513703

Pulled By: rnystrom

fbshipit-source-id: 5d718f2cb30361959ca5ba8238746427223cb5fd
2017-12-18 08:51:14 -08:00
Ryan Nystrom
296baf5f85 Assert duplicate objects and check object types on map lookup
Summary:
Followup to make sure that object type mismatches can't happen, even if identifiers collide (which is discouraged). Add assert when duplicates are detected.

Patched some unit tests while I'm in here.

Reviewed By: calimarkus

Differential Revision: D6439094

fbshipit-source-id: d669c01734e5ce9483e851051f548d9960b3087c
2017-11-30 12:48:07 -08:00
Maxime Ollivier
82a2a2ee18 added experiment to make [IGListAdapter visibleSectionControllers] a bit faster
Summary:
* Issue: [IGListAdapter visibleSectionControllers] calls [UICollectionViewLayout layoutAttributesForElementsInRect:] which can be expensive. And since visibleSectionControllers is called in scrollViewDidScroll, it can add up and take a toll on scroll performance. On an iPhone 7, it's in 2-10% of the main-thread samples (using Time Profiler).
* Fix: IGListDisplayHandler conveniently keeps track of visible IGListSectionControllers, so let's just use that. Now, [IGListAdapter visibleSectionControllers] drops to ~0.3% of samples.

Reviewed By: rnystrom

Differential Revision: D6351474

fbshipit-source-id: 66914db95e08498927bfbceda4d2e9d58cbc7530
2017-11-16 16:07:29 -08:00
Saad Ismail
d6e26d54e8 IGListDiffKit
Reviewed By: rnystrom

Differential Revision: D6201376

fbshipit-source-id: c7d2e643de5329f00f6d7a2bec4f0fc86e81f27b
2017-11-06 17:02:06 -08:00
Ryan Nystrom
a6f264fc12 Update project settings and fix errors
Summary:
Updated the main project lib settings for iOS 11, fixed all errors (which are from warnings-as-errors).

- [x] All tests pass. Demo project builds and runs.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
Closes https://github.com/Instagram/IGListKit/pull/942

Differential Revision: D6161473

Pulled By: rnystrom

fbshipit-source-id: 1fd51d8805f9c6483942b44d750b2756efde9376
2017-10-26 11:20:55 -07:00
Ryan Nystrom
5cf01cc0a7 Add update finished announcer API
Summary:
Adding a new API to support adding 1:many listeners to observe when an `IGListAdapter` finishes performing an update event. It supports:

- `performUpdates:`
- `reloadData...`
- Even handling update triggered from //inside// a section controller

Differential Revision: D6108096

fbshipit-source-id: d0b43d83f1963fdbf6ef388685cbd8f6890177fa
2017-10-20 08:57:11 -07:00
Jakub Grzmiel
0f04a07319 Fix format warnings for clang 5.0
Summary: Fix format warning which occur when using clang 5.0 compiler.

Reviewed By: mzlee

Differential Revision: D5900751

fbshipit-source-id: 4e9aea068aab3d2d882b8fb103a8828e861da97c
2017-09-25 10:34:51 -07:00
Kevin Delannoy
9ddc64f4ce Add cell (un)highlight APIs
Summary:
This implements the `collectionView:didHighlightItemAtIndexPath:` and `collectionView:didUnhighlightItemAtIndexPath:` `UICollectionViewDelegate` APIs and forward the calls to the appropriate `IGListSectionController`.
For the most part, it's doing the same thing as the `collectionView:didDeselectItemAtIndexPath:` calls and tests are also based on that feature.

- Implements `collectionView:didHighlightItemAtIndexPath:` and `collectionView:didUnhighlightItemAtIndexPath:` in IGListAdapter
- Catch those selectors in `IGListAdapterProxy`
- Adds `didHighlightItemAtIndex:` and `didUnhighlightItemAtIndex:` methods to IGListSectionController and friends (supports `IGListBindingSectionController` via its delegate and `IGListStackedSectionController`)
- Tests for changes

Issue fixed: I didn't open one, so none I guess.

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/933

Differential Revision: D5872090

Pulled By: rnystrom

fbshipit-source-id: adc93b68aced3e995f32c291bf607a263cd58edf
2017-09-20 08:46:17 -07:00
Phil Larson
1717b2c904 IGListAdapter support for scrollViewDidEndDecelerating
Summary:
References #842

We use -[UIScrollViewDelegate scrollViewDidEndDecelerating:] delegate callback in the app we are building to hide/show elements when motion has ended.
Closes https://github.com/Instagram/IGListKit/pull/899

Differential Revision: D5689239

Pulled By: rnystrom

fbshipit-source-id: ea17fe94ccacc5e4f0a9e085e61f8f77cfcea3b4
2017-08-23 13:30:44 -07:00
Candance Smith
1faf59b302 Added debug dump support to IGListBindingSectionController
Summary:
Issue fixed: #698

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/856

Differential Revision: D5611625

Pulled By: rnystrom

fbshipit-source-id: d9d54e2a10cf0cfae6cff121c20cc8d24d802716
2017-08-11 09:19:00 -07:00
Ryan Nystrom
6540f960e2 Add cell deselection API
Summary:
Adding support for a cell deselection API. Trying to make some headway to move and drag+drop support, but also want better stock `UICollectionView` API support. Will also assist eventual `UITableView` support.

- Added overridable API to `IGListSectionController`
- Support for stacked SC
- Breaking, required protocol for binding SC

Assists #524 and #184

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
Closes https://github.com/Instagram/IGListKit/pull/853

Reviewed By: jeremycohen

Differential Revision: D5425414

Pulled By: rnystrom

fbshipit-source-id: 0b25c125b1f171979a15c3095095fc18b4108be6
2017-07-17 14:19:41 -07:00
Viktor Gardart
95367bb6a4 replace alloc] init] -> new]
Summary:
Issue fixed: #822

As rnystrom would've said: Go 💚
Closes https://github.com/Instagram/IGListKit/pull/823

Differential Revision: D5301864

Pulled By: rnystrom

fbshipit-source-id: c7a0f62b91712a54ee75ee0d1fe62b8611745e37
2017-06-22 09:31:45 -07:00
heshamsalman
4770164599 unintercepted => non-intercepted, close #774
Summary:
Issue fixed: #774

- [ ] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [ ] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/787

Differential Revision: D5129345

Pulled By: rnystrom

fbshipit-source-id: 2673191f566a189a1374bfcff8a6639e1cb1fa29
2017-05-25 08:03:36 -07:00
Ryan Nystrom
0a416914d5 Rename sectionIndex API to just section
Summary:
Quick rename before releasing 3.0 to get this API in parity w/ `isFirstSection` and `isLastSection`. My b I should have caught this in review.

Closes #720

Reviewed By: jessesquires, amonshiz

Differential Revision: D5031184

fbshipit-source-id: 1cd7b00c8b32084fecd861e78808eea0d0056337
2017-05-11 14:49:59 -07:00
Ryan Nystrom
7304fe820d Fix UICollectionView debug dump script
Summary:
Duh, need to import macro

Issue fixed: #722

- [x] All tests pass. Demo project builds and runs.
Closes https://github.com/Instagram/IGListKit/pull/733

Differential Revision: D5040026

Pulled By: jessesquires

fbshipit-source-id: e9e51137ab4f7fa949667e3f3d644cd5c03abf80
2017-05-11 14:31:28 -07:00
Bas Broek
f94d01ed17 Add isPrefetchingEnabled to debug description
Summary:
Issue fixed: #725

- [x] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/726

Differential Revision: D5032405

Pulled By: jessesquires

fbshipit-source-id: aeda891f09c6aec751daa672258c0b071ea75ae2
2017-05-09 16:20:47 -07:00
Andrew Monshizadeh
a4e5ad862e Move section index to property
Summary:
This pull request removes the `sectionForSectionController:` method from the `IGListCollectionContext` protocol so that the protocol is exclusively for presentation methods.

This should not add new functionality, but rather makes the index directly accessible on the section controllers themselves. This change makes sense because at no time will there be an update to the list that the list adapter is unaware of and so it will always be able to set and update any indexes for a section controller that has changed.

Issue fixed: #609

- [X] All tests pass. Demo project builds and runs.
- [X] I added tests, an experiment, or detailed why my change isn't tested.
- [X] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [X] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/671

Reviewed By: jessesquires

Differential Revision: D4942159

Pulled By: amonshiz

fbshipit-source-id: d648cfdd381cbf1d9ee7ff549ae27d2972a84622
2017-05-01 07:28:27 -07:00
Ryan Nystrom
5fe27d8809 Add debug dump scripts
Summary:
Got a little time on the plane to mess around with this idea. Very much want comments on this! Some questions:

- We should probably compile out parts of this using `#if DEBUG`.
  - Should I compile out all of the description methods?
  - Maybe I wrap the entire debug files w/ `#if DEBUG ... #endif` so none of it is loaded?
- ryanolsonk I used [FLEX](https://github.com/Flipboard/FLEX/blob/master/Classes/Utility/FLEXHeapEnumerator.m) for searching the heap, lmk if you see any problems w/ this
  - Its lifted w/ only a few changes for my specific needs (including comments 😂)
  - Chalk us up for using [another bit](https://github.com/Instagram/IGListKit/blob/master/Source/Internal/IGListAdapterProxy.m#L77-L82) of your code
- Added a basic test so that the basics of this work and coverage doesn't tank
  - Anything else I should test?
- Is there more data we should be dumping?
- I have to track batch update state on the updater in order to dump it. If this seems dan
Closes https://github.com/Instagram/IGListKit/pull/617

Reviewed By: jessesquires

Differential Revision: D4929426

Pulled By: rnystrom

fbshipit-source-id: fcba0d6f0b7766485440f208cf70ad39dfc7a42e
2017-04-21 16:46:06 -07:00
Ryan Nystrom
073fc073e0 Prevent duplicate item deletes and drop reload collisions
Summary:
a415ef5552 exposed a bug in `UICollectionView` where its state gets corrupted when deleting the same index path more than once in a single batch update block. This resulted crashes like

```
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x4)
Closes https://github.com/Instagram/IGListKit/pull/657

Reviewed By: jessesquires

Differential Revision: D4913790

Pulled By: rnystrom

fbshipit-source-id: 8f6fcdd2e2438da309fc64ca0ac111b9a0980149
2017-04-19 17:17:41 -07:00
Ryan Nystrom
3102852ce2 Remove IGListSectionType
Summary:
Removing the `IGListSectionType` protocol and adding default implementations into `IGListSectionController`.

- `numberOfItems` returns 1
- `cellForItemAtIndex:` asserts (have to return a cell)
- `didUpdateToObject:` no-ops
- `didSelectItemAtIndex:` no-ops

Fixes #168

Reviewed By: jessesquires

Differential Revision: D4909585

fbshipit-source-id: 8816702504e3fc0683868914ff4dd20e4af7c166
2017-04-19 08:26:30 -07:00
Jesse Squires
693cb8a523 fix NSProxy init
Summary:
`NSProxy` doesn't define `init` because it's abstract.

designated init requires a call to super designated init (which doesn't exist for NSProxy)

sweet
Closes https://github.com/Instagram/IGListKit/pull/667

Differential Revision: D4908034

Pulled By: jessesquires

fbshipit-source-id: c223e05f49ab74d69affe8fdf37e0625e587c8b0
2017-04-18 13:00:55 -07:00
Andrew Monshizadeh
ae11d6af53 Move UICollectionView(DataSource|Delegate) to category
Summary:
This reduces the quantity of the code within IGListAdapter.m and is a bit more in line with Swift style of putting protocol conformance into extensions.

This does not change functionality just rearranges where code lives.

- [X] All tests pass. Demo project builds and runs.
- [X] I added tests, an experiment, or detailed why my change isn't tested.
- [N/A] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [N/A] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/599

Reviewed By: jessesquires

Differential Revision: D4861777

Pulled By: amonshiz

fbshipit-source-id: eaa31aa9438f3892193aeb8b4ae580ba2960ee8b
2017-04-18 11:21:18 -07:00
Bas Broek
edc38c77fe Remove @param alignment from header docs #trivial
Summary:
Issue fixed: #655

- [x] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)

I've also addressed a few cases where there was no empty line between the `param`s and `return`.
Closes https://github.com/Instagram/IGListKit/pull/665

Differential Revision: D4906215

Pulled By: jessesquires

fbshipit-source-id: 5693c85eb548644b0b0e2571eea8ff4d9f706b12
2017-04-18 09:46:18 -07:00
James Sherlock
df0e538119 Added NS_UNAVAILABLE to new/init
Summary:
Not sure what was expected for a "designated initialiser" feel free to school me and I'll do it!

(Also just had to google difference between + and - in ObjC)

Issue fixed: #654, #652
Closes https://github.com/Instagram/IGListKit/pull/662

Differential Revision: D4900092

Pulled By: jessesquires

fbshipit-source-id: 7858065ecc88a9ad7cb064811f0180d0f84f174d
2017-04-17 15:01:54 -07:00