summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'origin/5.14' into 5.155.15Qt Forward Merge Bot4 days1849-6/+164
|\ | | | | | | Change-Id: Ib14b8c77cefe7aaf5b11483d9a30b2ef05314598
| * Merge remote-tracking branch 'origin/5.13' into 5.145.14Qt Forward Merge Bot4 days6-4/+29
| |\ | | | | | | | | | Change-Id: I551670d92af2bc96d5d8b8724bf5b280e94498c7
| | * Unset the resolved font's families if it was not set beforeAndy Shaw4 days5-4/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the font is resolved, if the font does not have families set then it will set it to be the family to ensure that it has the right precedence. Therefore we need to reset the families setting so that it does not act like a font has changed after being resolved when it really hasn't. Fixes: QTBUG-79790 Change-Id: I03c6f1456dbe5f136181b1c3a0e22fdc0fa66679 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Doc: advise against naming root resource dirs the same as style namesMitch Curtis5 days1-0/+7
| | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-59330 Change-Id: Ie983f27f2eca0bc9c906fb7bcfe9e077616ef88b Reviewed-by: Kavindra Palaraja <kpalaraja@luxoft.com> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
| * | Merge remote-tracking branch 'origin/5.13' into 5.14v5.14.0-beta3Qt Forward Merge Bot7 days1836-0/+0
| |\ \ | | |/ | | | | | | Change-Id: I4b970036bdb5d312b0dc5cb1bcbd8e161e3d4c7e
| | * Run optipng on all imagesMitch Curtis8 days1836-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | find . -name "*.png" -exec optipng -o 7 -strip all {} \; Change-Id: I2238b2dd38813d33ed48d79817f872f922cfa28d Fixes: QTBUG-79275 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | Merge remote-tracking branch 'origin/5.13' into 5.14Qt Forward Merge Bot8 days7-2/+135
| |\ \ | | |/ | | | | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: Ibf7cf09570e73ad2f314e9ce7acf1c766ac3f332
| | * Merge remote-tracking branch 'origin/5.13.2' into 5.13Qt Forward Merge Bot13 days2-1/+26
| | |\ | | | | | | | | | | | | Change-Id: I614ee6943ab5cff62cefb2de884af8cb02fe7f55
| | | * Add changes file for Qt 5.13.2v5.13.25.13.2Antti Kokko2019-10-151-0/+25
| | | | | | | | | | | | | | | | | | | | Change-Id: Ia035cc871e42646a8053d42ec0af2902a9a56acd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | | * Bump versionFrederik Gladhorn2019-10-141-1/+1
| | | | | | | | | | | | | | | | Change-Id: Ie16762649a006dea1420c0df60ed80137491d4a9
| | * | QQuickPopup: try to grab shortcut when component completedWang Chuan2019-10-293-0/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If closePolicy of Popup is set to CloseOnEscape and the Popup is completed, shortcut will register to QGuiApplication to let Popup respond to Escape key. However if Popup is set to visible in creation, even if we set closePolicy to CloseOnEscape, the shortcut won't be registered. [ChangeLog][Controls][QQuickPopup] Fixed the issue that Popup doesn't respond to CloseOnEscape if the initial value of visible is true Fixes: QTBUG-79326 Change-Id: I90c6805e2b4d567a6e0d33d43a75fedcfc5416b3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * | Doc: Fix import statement for QtQuick.TemplatesKai Koehne2019-10-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Always show the latest Qt Minor version in the import statements for modules in QtQuick.Templates. For QtQuick.Controls this was fixed in commit b395f94. Fixes: QTBUG-76077 Change-Id: I0d63337f572fd23f0122df151f01bef2c8eab1dd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * | SplitView: fix issue where Repeater items were not createdMitch Curtis2019-10-292-1/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SplitView's contentItem is lazily created whenever contentItem() is called. When adding regular, standalone items, they will go through QQuickContainer::addItem(), which eventually calls contentItem(). This case works fine. Repeaters, on the other hand, call setTransparentForPositioner(true), which QQuickContainerPrivate::contentData_append() checks for, and instead of calling addItem(), reparents the Repeater to effectiveContentItem() with this line: item->setParentItem(effectiveContentItem(p->contentItem)); If this happens before the contentItem is created, then the Repeater has no parentItem and won't generate any items. So, instead of using the contentItem member directly, call contentItem() to create it if it doesn't exist. Fixes: QTBUG-79302 Change-Id: I258f7420d2fea843ed045d569f80e92fe1f507d2 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | | Non-modal popups shouldn't set isTabFenceMarco Martin8 days3-0/+156
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a popup is not modal, all the application's main content can still be interacted with, therefore should still be possible to navigate it with tab. This issue is particularly evident with Drawer, also commonly used as a sidebar, in which tab navigation should always work. Fixes: QTBUG-79501 Change-Id: I0e8ad2e1abe57b9617c6316efbfe2f296c91b592 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> (cherry picked from commit 3358362e61ef96b3922a438d0806561285c49230)
* | | | Fix Editable ComboBox's auto-completion performanceMitch Curtis8 days1-77/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that we can call stringValue()/variantValue() without having to call object() first (see 67ef2583), we get huge performance gains and can remove a lot of the code added in a392194. Fixes: QTBUG-78858 Change-Id: I434d3a9d06c020545b5d2cf6731cb5a030418b71 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* | | | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot11 days10-52/+202
|\ \ \ \ | |/ / / | | | | | | | | Change-Id: Ida6e83517802b1e970f755b2e2128b77f08a8d11
| * | | Merge remote-tracking branch 'origin/5.13' into 5.14Qt Forward Merge Bot2019-10-2610-52/+202
| |\ \ \ | | |/ / | | | | | | | | Change-Id: I5da24592eb292ef4f430d734fec234166ce6e1e3
| | * | Docs: Update qmlmodule to use QtMinorVersion so that this version is always ↵Kavindra Palaraja2019-10-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | up to date Fixes: QTBUG-76077 Change-Id: Ica06051a8ca5dc3858110f5eef47fec20bd2d2c1 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * | QQuickContainer: stop creating duplicate content itemsMitch Curtis2019-10-242-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In most cases, getContentItem() will create a new content item when called. In addition, its only responsibility is to return the content item, not set it as the control's new contentItem; QQuickControl::contentItem() does that. Instead, QQuickContainer should simply call contentItem(). Change-Id: I1b8cb57f9f7b9e56074e99bed20ce5bcac70e1a6 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| | * | tst_splitview.qml: remove unused SplitViewsMitch Curtis2019-10-241-17/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | These make debugging SplitView issues very confusing. Change-Id: Iea09bd5339044ac330188233286acc695e335283 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| | * | SplitView: fix cursor shape staying as Split*Cursor in some casesMitch Curtis2019-10-241-15/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't return early before restoring the ArrowCursor shape. This is not testable in QML due to QWindow's cursor API not being available there. Task-number: QTBUG-79302 Change-Id: Idb59d9cfbf04fc12ebe0adfbb7285ae7155e195d Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
| | * | texteditor: update links in html fileMitch Curtis2019-10-241-8/+7
| | | | | | | | | | | | | | | | | | | | Change-Id: I7e3bd670039d181fb562967c5e9d3830f63d46a3 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
| | * | QQuickMenuBar: let MenuBarItem lose highlight when Menu is dismissedWang Chuan2019-10-244-5/+156
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When adding new MenuBarItem to MenuBar, MenuBar will first check the Menu pointer in MenuBarItem and then connect the Menu's signal [aboutToHide] to MenuBar's slot [onMenuAboutToHide] to unhighlight the MenuBarItem. In case of adding dynamic Menu, this operation will be performed before setting new Menu to MenuBarItem. So the Menu pointer in MenuBarItem is null, and the connection will not be performed. [ChangeLog][Controls][QQuickMenuBar] Fixed issue with dynamically menu bar items not losing their highlight when their menu was dismissed. Fixes: QTBUG-77306 Change-Id: Ibe987462505f65747b4290b3c206e9dfbcbbef57 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * | Fix tst_qquickpopup failure on Windows 7 MinGWMitch Curtis2019-10-231-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I42b6a7050886f795e267893aa5eeaaf7a5841971 Fixes: QTBUG-79370 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
| | * | Fix assertion failure when hiding a SplitView with only one itemMitch Curtis2019-10-232-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Check for -1 when calling handleIndexForSplitIndex(). Change-Id: I81021b64265ace0c47269ea54e538a2725c84b79 Fixes: QTBUG-79270 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* | | | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2019-10-267-7/+2549
|\ \ \ \ | |/ / / | | | | | | | | Change-Id: If43d5edea9ec0d4beaa3336b3e9aeefc698c5e6b
| * | | Update plugins.qmltypes for 5.14Kai Koehne2019-10-217-7/+2549
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-78690 Change-Id: I0e421232f4335a7a351562f23134eccdd0b1c674 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | | Merge "Merge remote-tracking branch 'origin/5.14' into 5.15"Simon Hausmann2019-10-1810-23/+93
|\ \ \ \
| * \ \ \ Merge remote-tracking branch 'origin/5.14' into 5.15Simon Hausmann2019-10-1810-23/+93
| |\ \ \ \ | | |/ / / | | | | | | | | | | Change-Id: I0b6bd9acd2262ae87e1086a0450875a8f04a0423
| | * | | Adapt Tumbler after ListView changesv5.14.0-beta2Mitch Curtis2019-10-161-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After 2d9cf3ef, ListView now changes the currentIndex for some unknown reason. The changes clearly didn't cause any failures in Qt Quick's auto tests, but some Tumbler auto tests fail. Presumably, the failures are due to TumblerView's intimate usage of Qt Quick's C++ API, where it creates either a PathView or a ListView on demand internally. From what I could see, the currentIndex change was caused by this code: if (FxViewItem *snapItem = d->snapItemAt(d->highlight->position())) { if (snapItem->index >= 0 && snapItem->index != d->currentIndex) d->updateCurrent(snapItem->index); } So I worked around the issue by delaying the call to setHighlightRangeMode() until after the delegate has been created. I also tried moving the call to setSnapMode() (which seems very relevant given the context), but it caused test failures. Change-Id: I7017760c21193dc6ce8181669ba7cf047b18dfba Fixes: QTBUG-79150 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| | * | | Merge remote-tracking branch 'origin/5.13' into 5.14Qt Forward Merge Bot2019-10-129-22/+91
| | |\ \ \ | | | |/ / | | | | | | | | | | Change-Id: I0b00323007dc02adf98dc581e2694e44b298da29
| | | * | tst_qquickpopup: ignore ShaderEffectSource warning in debug buildsMitch Curtis2019-10-111-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was commented out but should have been #ifdef'd, and the explanation is wrong. This amends 83fbf44. Change-Id: Ibe752d63a42805361b13edc6beafcf1f3738f02f Reviewed-by: Andy Shaw <andy.shaw@qt.io>
| | | * | Universal: disable wrapping for TabBarMitch Curtis2019-10-111-13/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The wrapping behavior makes for a poor user experience. Use ListView as other styles do. [ChangeLog][Universal][TabBar] Disabled wrapping. The Universal style TabBar now behaves like TabBar from other styles. Change-Id: I0a37490cdc2b81ff864ec682256f469a1a930628 Fixes: QTBUG-50027 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
| | | * | Add translation auto test to auto.proMitch Curtis2019-10-111-0/+3
| | | |/ | | | | | | | | | | | | | | | | | | | | | | | | This amends c18c7bd7f9596e5ad3d13876a91203e1ceba2544. Change-Id: I29b48d9c8e5889bb67ea3cbc14821b5621868b6f Reviewed-by: Andy Shaw <andy.shaw@qt.io>
| | | * Imagine: fix crash when switching between 9-patch and regular imageMitch Curtis2019-10-025-2/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Consider the following changes in source: normal.png => press.9.png => normal.png => focus.png If the last two events happen quickly, pixmapChange() can be called twice with no call to updatePaintNode() inbetween. On the first call, resetNode will be true (because ninePatch is not null since it is still in the process of going from a 9-patch image to a regular image), and on the second call, resetNode would be false if we didn't have this check. This results in the oldNode never being deleted, and QQuickImage tries to static_cast a QQuickNinePatchImage to a QSGInternalImageNode. Only change resetNode when it's false; i.e. when no reset is pending. updatePaintNode() will take care of setting it to false if it's true. Change-Id: I614c172c3e24fda2506f081f8fcdb6acd1c65fb8 Fixes: QTBUG-78790 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
| | | * Doc: Rename section called StackViewNico Vertriest2019-10-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - a section title in a tutorial shouldn't be the name of a QML type only Task-number: QTBUG-78799 Change-Id: I661b639eb96926be2b92899fdbe241890d4ed6f4 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* | | | Handle -no-feature-shortcutFriedemann Kleint2019-10-185-11/+28
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Preparing for the extraction of QGuiShortcut, the shortcut feature will changed to follow the convention of using QT_REQUIRE_CONFIG(shortcut) in the affected class headers. Add the required exclusions to prevent compile errors when disabling shortcuts. Task-number: QTBUG-76493 Change-Id: I726239a6bcf1974616edc604ffc7ae4138db833a Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | | Adapt to private API changeFabian Kosmale2019-10-181-0/+10
| | | | | | | | | | | | | | | Change-Id: I1765ac71243de0a9bf9b49e88332faa98d1745e6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2019-10-126-6/+6
|\ \ \ | |/ / | | | | | | Change-Id: I342393f83eab161df8ad6323051c5fadb4cf9ddc
| * | Minor performance improvements suggested by clang-tidyAlbert Astals Cid2019-10-076-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | * Add const & to function parameters * Add const & to variables assigned from functions that return const & Change-Id: Ibf35e54ffb78f164493222125411f2ba279cb861 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2019-10-0510-34/+287
|\ \ \ | |/ / | | | | | | Change-Id: I25813bc151347f69d4dbd9f61729300626be763f
| * | ComboBox: fix performance regressionv5.14.0-beta1Mitch Curtis2019-10-011-24/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f4623123 introduced a performance regression by calling delegateModel->object() twice: if (componentComplete) { updateCurrentText(); updateCurrentValue(); } We can avoid this by introducing versions of these functions that take the delegate model object as a parameter in order to cache it between calls. Change-Id: I5f9041a8ff00b53e04d759f38677bd87c748f8d1 Fixes: QTBUG-76029 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | Merge remote-tracking branch 'origin/5.13' into 5.14Qt Forward Merge Bot2019-10-018-8/+190
| |\ \ | | |/ | | | | | | Change-Id: I53fc18c168daff6dfb504e5a64e20570de7d24ac
| | * Fix a crash on exit when using ToolTip in a specific item hierarchyMitch Curtis2019-09-303-1/+137
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QQuickPopup connects its parent item's (MouseArea, in this case) windowChanged() signal to QQuickPopupPrivate::setWindow(). It does this so that: 1) QQuickOverlay can keep track of all of the popups that it manages. 2) Fonts, palettes and locales can be resolved. 3) If the QQuickPopup component has completed loading and the popup is visible with a valid window, start the enter transition. The problem arises only when using a very specific item hierarchy: Window { width: 640 height: 480 visible: true Item { anchors.fill: parent Item { anchors.fill: parent ColorOverlay { source: parent anchors.fill: parent } MouseArea { anchors.fill: parent hoverEnabled: true ToolTip.visible: containsMouse ToolTip.text: "ToolTip text" } } } } When the window is closed and hence begins to be destroyed, the following events occur: - QQuickWindow's destructor is called. - The window's root item (QQuickRootItem) begins destruction. - QQuickOverlay is destroyed. - QQuickWindow's destructor is done, so the QWindow and then QObject destructors are called. - The QQuickItem destructor for the outer Item is called. - The child items of the outer Item have setParentItem(nullptr) called on them, one of which being the inner Item. - The inner Item's setParentItem() function calls derefWindow(), which in turn calls derefWindow() on its children. One of those children is MouseArea. - Since the MouseArea's window is deref'd, it emits the windowChanged() signal. MouseArea is the parentItem of the popup, so its windowChanged() signal causes QQuickPopupPrivate::setWindow() to be called. - setWindow() tries to remove the popup from the old overlay, which has already been destroyed. One approach I tried involved using QQuickOverlay::itemChange() to remove all of the popups (via setWindow(nullptr), to ensure that their window pointer is nullified), since that was called much earlier than the windowChanged() signal is emitted. However, this still resulted in a heap-use-after-free in the same place when running the newly added setOverlayParentToNull() test. I also tried removing the popups in QQuickOverlay's destructor, but this resulted in another heap-use-after-free (when accessing a popup in the destructor) in tst_QQuickPopup::Universal::visible(). The remaining options were: store the window in a QPointer or return early in overlay() if the wasDeleted member of the window was true. Using QPointer seems like it would catch more issues than a single check in overlay(), so I went with that. Fixes: QTBUG-73243 Change-Id: Ieb5ce26dd76d45771d28297031ec43e27d958b5b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * QQuickToolTip: fix setTimeout() behavior when tool tip is visibleKonstantin Ritt2019-09-272-1/+11
| | | | | | | | | | | | | | | | | | | | | by applying the passed timeout value prior to re-starting the timer Change-Id: I27953dbb4781b5cb0c2039d56faa56f3c000206f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Tumbler: fix displacement calculation when wrap is falseMitch Curtis2019-09-242-6/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the position of the item and the currentItem in the calculation in order to get reliable results. This fixes the displacement being off by a small margin, which increased as the delegate height became smaller. Fixes: QTBUG-66799 Change-Id: Ieca5033fb4c0ed62f5965a21fcab7aa558bd40e6 Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Doc: clarify autoRepeat/pressAndHold() behaviorMitch Curtis2019-09-241-0/+4
| | | | | | | | | | | | | | | Change-Id: Ia0dea6060be7ffd1c4a16348f166e7cde7ef2df2 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
| * | ComboBox: add missing revisionsMitch Curtis2019-09-301-2/+2
| | | | | | | | | | | | | | | | | | | | | These were forgotten in f462312365d4955fc82b247b72f84e1c77d8104d. Change-Id: If0415c9aab9555e14ee222aaa667ca1233ab4405 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Merge "Merge remote-tracking branch 'origin/5.14' into 5.15"Qt Forward Merge Bot2019-09-287-57/+115
|\ \ \
| * \ \ Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2019-09-287-57/+115
| |\ \ \ |/ / / / | | _ / | | / Change-Id: I61bff0de1d7f1ee4d73612af07cbac8d7400b534