{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":32039560,"defaultBranch":"master","name":"navigation","ownerLogin":"grahammendick","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-03-11T20:27:48.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1761227?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1717012098.0","currentOid":""},"activityList":{"items":[{"before":"1d0624a39a295160ee0a331ececab1c0fa7e536d","after":"95db856a2da56e4302ec4b478b2e051be2e7cba3","ref":"refs/heads/issue-784","pushedAt":"2024-06-02T20:35:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Simplified android non-primary in same way\n\nBlock the tab press and send the events to Javascript.\n\nAlso applied smooth scroll to javascript set tab changes so they behave the same as native set.\n\nAlso did some general tidy suggested by android studio","shortMessageHtmlLink":"Simplified android non-primary in same way"}},{"before":"67d5bb905d7bbdce0108b517bb9b03d497e44490","after":"1d0624a39a295160ee0a331ececab1c0fa7e536d","ref":"refs/heads/issue-784","pushedAt":"2024-06-02T12:38:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Changed for clarity\n\nDidn't even know that other syntax was valid!?","shortMessageHtmlLink":"Changed for clarity"}},{"before":"2936b5ce8f84724a1fc678d1ea10d7a0c9361905","after":"67d5bb905d7bbdce0108b517bb9b03d497e44490","ref":"refs/heads/issue-784","pushedAt":"2024-06-02T12:33:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Applied same simplifications to android primary\n\nBlock the tab press and sent the events to Javascript (android allows the block by returning false anyway). That way there aren't any changes on the native side, so can't get native/javascript mismatch - instead just rely on the javascript to send the changes after it renders","shortMessageHtmlLink":"Applied same simplifications to android primary"}},{"before":"8c78fc227cf7e74952564d13b6b145bfc11aabdd","after":"2936b5ce8f84724a1fc678d1ea10d7a0c9361905","ref":"refs/heads/issue-784","pushedAt":"2024-06-02T12:08:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Simplified how the syncing works\n\n1. If out of sync block the tab press\n2. Make no changes on native\n3. Send the tabSelected and onPress\n4. Update syncCounter of current tab when props change\n5. Update syncCounter of new tab when props change\n6. Increment syncCounter when either contentSync changes to true or when the tab changes and contentSync is true\nThis is simpler because the native and javascript stay together. Don't change native. Just send the events and wait for javascript to flush changes - then update native\nGoing to do this on android as well","shortMessageHtmlLink":"Simplified how the syncing works"}},{"before":"caf0c3b5ebd484cb777f67fecc3f8eabf22368fd","after":"8c78fc227cf7e74952564d13b6b145bfc11aabdd","ref":"refs/heads/issue-784","pushedAt":"2024-06-01T23:35:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Applied sync to android non-primary RTL tabs\n\nThis is a pain because ViewPager2 is final so can't override setCurrentItem. Instead have to override selectTab in the LayoutView. Not ideal because it means the tab change doesn't happen - although it's better than ios primary because there is visual cue of the press happening.","shortMessageHtmlLink":"Applied sync to android non-primary RTL tabs"}},{"before":"0600bc8127b7286e204457e47393e66c06552f9c","after":"caf0c3b5ebd484cb777f67fecc3f8eabf22368fd","ref":"refs/heads/issue-784","pushedAt":"2024-06-01T22:18:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Removed redundant ref\n\nSee the matching PR on react-freeze https://github.com/software-mansion/react-freeze/pull/34 - the ref could get thrown away so not safe, plus not needed. Removed the copyright because don't think it's needed - it's only 1 line of code that is pretty well known now (React supsending on thrown promise)","shortMessageHtmlLink":"Removed redundant ref"}},{"before":"041c28eb1a9e41e495abbd43aa0a22f80e07f33b","after":"0600bc8127b7286e204457e47393e66c06552f9c","ref":"refs/heads/issue-784","pushedAt":"2024-06-01T22:16:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Applied sync changes to android non-primary tabs\n\nWas hoping could maybe get away without doing this because there's a slide animation. Thought maybe that would take enough time to hide any style change. But even with a 200ms render (blocked the render for that time) changing the background from blue to white was noticeable.","shortMessageHtmlLink":"Applied sync changes to android non-primary tabs"}},{"before":"9c84c37a3f0bf90ced970b92420c19c95ffd264c","after":"041c28eb1a9e41e495abbd43aa0a22f80e07f33b","ref":"refs/heads/issue-784","pushedAt":"2024-06-01T12:57:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Applied sync changes to ios non-primary tabs\n\nSame idea as already applied on android and ios for primary tabs.","shortMessageHtmlLink":"Applied sync changes to ios non-primary tabs"}},{"before":"ab03fcc525725f96cb5130e8928f22cfef49d2bc","after":"9c84c37a3f0bf90ced970b92420c19c95ffd264c","ref":"refs/heads/issue-784","pushedAt":"2024-05-31T23:02:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Applied sync content changes to ios tabs\n\nSame idea as on android. Block the tab press on the native side if the tab bar item is out of sync. The sync counter is held on the tab bar and each item has its own counter - if the counter is behind then send to js and wait for render.\nThe main counter is updated whenever contentSync toggled on (the theme change scenario) or whenever the tab is selected if contentSync is on (the always wait scenario).\nOriginal userland plan was to do something like\nonThemeChangePress={() => setContentSync(true)}\nand reset it immediately\nuseEffect(() => {\n if (contentSync) setContentSync(false);\n}, [contentSync]);\nBut when testing with weird blocking like below then had the reset happening before the set had actually been flushed to native. So the toggle didn't take effect.\nwhile (currentTime + 2000 >= new Date().getTime()) {\n}\nNew plan is to reset in onChangeTab instead\nonChangeTab={() => setContentSync(false)}\nThis works - the reset happens in the next set state so doesn't make the exiting tab out of sync either","shortMessageHtmlLink":"Applied sync content changes to ios tabs"}},{"before":"951407ad8fea48ce8c7a397470a3be55fefce602","after":"ab03fcc525725f96cb5130e8928f22cfef49d2bc","ref":"refs/heads/issue-784","pushedAt":"2024-05-31T17:04:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Added syncContent prop so user has control\n\nWhen there's a theme change then set syncContent to true and then immediately set it to false. This marks all tabs as requiring a render before they're shown.\n\nIt's tricky because even if syncContent is now false, need to delay the render if the tab hasn't been shown since syncContent was true. So tracked a syncCounter that indicates if a tab is out of sync - once out of sync then it can only get back in sync after it's rendered and then shown.\n\nThere are 2 scenarios\n1. Wait on theme change - increment the master counter whenever contentSync is toggled on\n2. Always wait - increment the master counter whenever the tab becomes inactive and contentSync is on","shortMessageHtmlLink":"Added syncContent prop so user has control"}},{"before":"8e2618a2010f540aa197036d2a27a94fe493f6fe","after":"951407ad8fea48ce8c7a397470a3be55fefce602","ref":"refs/heads/issue-784","pushedAt":"2024-05-30T07:57:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Delayed showing tab until it's re-rendered\n\nSame change as applied to android. It 'prevents' the native change so there's no instant feedback - the android change is better because the selected tab changes immediately, it's just the content change that's delayed.\nThe shouldSelect is only called when the change is made native side. So return NO and send the change to React side and wait for the next render. The next render changes the selected tab and content together.","shortMessageHtmlLink":"Delayed showing tab until it's re-rendered"}},{"before":null,"after":"8e2618a2010f540aa197036d2a27a94fe493f6fe","ref":"refs/heads/issue-784","pushedAt":"2024-05-29T19:48:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Delayed showing tab until it's re-rendered\n\nGo from tab A to tab B and change theme from light to dark, for example. Then switching back to A might show a flash of A with the light theme before the state update comes in shows the dark theme. That's because tab A was suspended when it wasn't active and the tab change happens on the native side.\nChanged so that the tab change happens on the react side - the bottom tabs change on native side but delay the tab content from changing until the render happens. Also unfroze the selected tab instantly - it was incorrectly waiting until the useEffect fired. Dropped the !selected a while back (see commit ad1df29acd378db4b717e59bfd04451334b46139) when it was duplicate check but it isn't anymore so should be there.\nTested by blocking the [Home tab render](https://stackoverflow.com/a/16624104) in twitter sample and toggling the navigation barTint from blue to white. Switching tabs waits for the render and so there's no barTint flash","shortMessageHtmlLink":"Delayed showing tab until it's re-rendered"}},{"before":"2ee11d0bbe3934c01d4943f745c636b6f8e0f1f9","after":null,"ref":"refs/heads/twitter-predictive","pushedAt":"2024-05-27T09:07:41.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"}},{"before":"35bbc2b012514b57612c455ab62f65409ef74079","after":"2924de7ba3f2bb95f754fab9529516f76fe720c6","ref":"refs/heads/master","pushedAt":"2024-05-27T09:07:29.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Merge pull request #783 from grahammendick/twitter-predictive","shortMessageHtmlLink":"Merge pull request #783 from grahammendick/twitter-predictive"}},{"before":null,"after":"2ee11d0bbe3934c01d4943f745c636b6f8e0f1f9","ref":"refs/heads/twitter-predictive","pushedAt":"2024-05-27T09:05:25.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Supported predictive back in fabric sample\n\nSame changes as on old architecture- Updated to latest navigation react native\n- Updated to latest androidx activity\n- Added enableOnBackInvokedCallback=\"true\" to manifest.xml","shortMessageHtmlLink":"Supported predictive back in fabric sample"}},{"before":"c4c314ff7fd4261ca9ebee91daf31de2713ff091","after":null,"ref":"refs/heads/predictive-docs","pushedAt":"2024-05-27T08:50:50.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"}},{"before":"21a5631a3b0432445ccee89123e4f58c37f9a538","after":"0eba36ddf3a9c0ebac0f4f8dfe96e9c6677cabcc","ref":"refs/heads/gh-pages","pushedAt":"2024-05-27T08:50:45.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Merge pull request #782 from grahammendick/predictive-docs","shortMessageHtmlLink":"Merge pull request #782 from grahammendick/predictive-docs"}},{"before":"b1ab71d8742a84e38b95f6dfd73d23259d930bad","after":"35bbc2b012514b57612c455ab62f65409ef74079","ref":"refs/heads/master","pushedAt":"2024-05-27T08:49:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Incremented navigation react native minor version","shortMessageHtmlLink":"Incremented navigation react native minor version"}},{"before":null,"after":"c4c314ff7fd4261ca9ebee91daf31de2713ff091","ref":"refs/heads/predictive-docs","pushedAt":"2024-05-27T08:32:50.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Documented that shared els disable predictive back\n\nJust couldn't get Shared element or Material Transitions to work with predictive back although android says they do - Animators yes, but Transitions no","shortMessageHtmlLink":"Documented that shared els disable predictive back"}},{"before":"f02f372b1605ed5482a010c7848d4022864e1a9a","after":null,"ref":"refs/heads/predictive-back","pushedAt":"2024-05-26T19:59:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"}},{"before":"a2548163e45251ab2d2bb99b3f9b89b97a56ac78","after":"b1ab71d8742a84e38b95f6dfd73d23259d930bad","ref":"refs/heads/master","pushedAt":"2024-05-26T19:56:44.000Z","pushType":"pr_merge","commitsCount":26,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Merge pull request #781 from grahammendick/predictive-back","shortMessageHtmlLink":"Merge pull request #781 from grahammendick/predictive-back"}},{"before":"604252ff86196873a6be92964bbebef05c961a0c","after":"f02f372b1605ed5482a010c7848d4022864e1a9a","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T20:53:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Reverted accidental change","shortMessageHtmlLink":"Reverted accidental change"}},{"before":"fe286b3e880d24e7bd7b95181fab8e1f5f726c26","after":"604252ff86196873a6be92964bbebef05c961a0c","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T20:53:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Changed to commit now for safety\n\nBetter to commit now because almost all the time it will work and is safer. Want to change the primary fragment immediately - if it's delayed then predictive back may notify the wrong fragment manager.\n\nThink the only time it will throw an error is when first mounting the nested stack. Because the parent stack is changing scenes so can't commit until this is finished. Need the commit in the catch for this scenario.","shortMessageHtmlLink":"Changed to commit now for safety"}},{"before":"71070b4b0ed9ee9060aa99fd7d9367f11f3ce00b","after":"fe286b3e880d24e7bd7b95181fab8e1f5f726c26","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T20:47:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Fixed cancelling gesture error in nested stacks\n\nTake the Twitter sample where Tabs has the ios setup on android with a stack per tab. Set\ntrackCrumbTrail true on tabs and navigate in home tab Home → Tweet → Tabs. So get 2 rows of bottom tabs. Then starting the predictive back and cancelling it would give IllegalStateException because \"already executing transactions\".\n\nThe onDetachedFromWindow fired on the nested stack but during the parent stack navigation. The predictive back was happening on the parent stack because the nested stack had no back entries. Can’t set the primary fragment when the fragment manager is changing the back stack.\n\nChanged to catch the exception. Mustn’t set the primary stack to null in this case because it still is the primary stack. If later navigate forward in this nested stack then it must receive the next predictive back and so must be primary.","shortMessageHtmlLink":"Fixed cancelling gesture error in nested stacks"}},{"before":"d40877c6f00884dd2053a2fed042c71d4d444a42","after":"71070b4b0ed9ee9060aa99fd7d9367f11f3ce00b","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T13:26:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Copied changes over from old arch to fabric","shortMessageHtmlLink":"Copied changes over from old arch to fabric"}},{"before":"b261c795d78d008271087961a5cfd0248472e116","after":"d40877c6f00884dd2053a2fed042c71d4d444a42","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T11:59:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Supported React 17\n\nIf there's no useId (hook in React 18) then created all stacks in the top level active fragment manager. This works for most scenarios - single stack and tabs with nested stacks. It won't work with stack inside modal because the modal will stay as primary fragment. But this is ok, can updgrade react native to fix","shortMessageHtmlLink":"Supported React 17"}},{"before":"69f37d73d53e87d1f27605eee472441975477aa5","after":"b261c795d78d008271087961a5cfd0248472e116","ref":"refs/heads/predictive-back","pushedAt":"2024-05-25T11:51:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Supported all nested stack configurations\n\nThis started with trying to get the medley sample to work. Navigate forward, open modal, navigate forward, close modal and the predictive back did nothing. The modal still renders the nested modal stack, it still has a back stack and is the primary fragment so it receives the back even though it’s closed. (The predictive back doesn’t work in modal but that’s a different issue - android modal receives the back even though the stack listener is registered after).\n\nOriginal idea was to shift the primary stack to the main stack when the modal stack is detached from the window. This worked but wouldn’t work for a stack directly inside a stack (without a modal). Navigate A → B in main stack then C → D in stack inside scene B. Predictive back goes back to C and the next predictive back should go back to A but it did nothing. The nested stack is still marked as primary so the main stack won’t receive the back.\n\nThe trick is to have multiple primary stacks. Opening a stack inside another stack then both should be primary. Then when the nested stack has used up all the predictive backs to get back to its first scene, then the parent stack will take over the next predictive backs. To do this create the nested stack fragment inside the childFragmentManager of the parent stack fragment. The useId hook gives the perfect way to generate a unique tag for each stack fragment. Storing the tag in React Context means the native side can find the parent fragment.\n\nWith sibling stacks, like with stacks inside tabs, then these are all created in the same fragment manager. So only one of them can be primary at any one time. The primary one is the one that’s attached to the window. Tried commitAllowingStateLoss in onAttachedToWindow but this threw an error saying \"FragmentManager is already executing transactions\". The fragment’s childFragmentManager was already adding scene(s) for the navigation and so couldn’t also add a fragment at the same time. So changed to commit but kept commitAllowingStateLoss for the onDetachedFromWindow (can’t make them both commit because the detach would clear the primary after the attach had already changed it).","shortMessageHtmlLink":"Supported all nested stack configurations"}},{"before":"a93667d842a4f1d056cc70d627a5009c5a5d80bc","after":"69f37d73d53e87d1f27605eee472441975477aa5","ref":"refs/heads/predictive-back","pushedAt":"2024-05-21T17:18:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Copied changes over from old arch to fabric","shortMessageHtmlLink":"Copied changes over from old arch to fabric"}},{"before":"712b52644a8cad7c8fb95bdefe0e7a198ddb3edd","after":"a93667d842a4f1d056cc70d627a5009c5a5d80bc","ref":"refs/heads/predictive-back","pushedAt":"2024-05-21T15:58:07.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Removed redundant import","shortMessageHtmlLink":"Removed redundant import"}},{"before":"af65e627c1448249dfdb9eaa4cdfe89fa32569a4","after":"712b52644a8cad7c8fb95bdefe0e7a198ddb3edd","ref":"refs/heads/predictive-back","pushedAt":"2024-05-19T21:39:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"grahammendick","name":"Graham Mendick","path":"/grahammendick","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1761227?s=80&v=4"},"commit":{"message":"Ensured gesture back doesn't go to replaced scene\n\nNavigated from A -> B to A -> C and then gesture back went to B. The gesture back doesn't use inclusive flag or named back entry so it always goes to the previous fragment. In this case that's B. So popped the back stack when doing a replace to remove it and make sure the gesture back goes to A (see https://stackoverflow.com/a/13074955)","shortMessageHtmlLink":"Ensured gesture back doesn't go to replaced scene"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWlhjMQA","startCursor":null,"endCursor":null}},"title":"Activity · grahammendick/navigation"}