Попробовал удобный и быстрый способ протестировать диплинки в Android-приложении.
Просто запускаем команду:
Красота!
Просто запускаем команду:
adb shell am start -a android.intent.action.VIEW -d "deep_link_url" app_package_name
И приложение запускается с нужным диплинком. Красота!
👍1🔥1
Любопытный баг нашелся в Compose:
https://issuetracker.google.com/issues/192433071
Суть: при нажатии на Back сперва сбрасывается фокус поля вместо перехода на предыдущий в стеке экран. Приходится дополнительно тапать на Back.
Статус у бага вроде бы уже fixed, но пока не ясно до конца в какой версии исправят. На текущей стабильной версии Compose 1.1.0 вроде бы еще проявляется.
Вариантов исправить несколько, но если не сильно заморачиваться, то просто к полю ввода добавляем такой вот костыль-модификатор:
p.s. Давненько я что-то ничего не постил… в общем как вы там поживаете в ваших Грузиях / Армениях ? 🙂
https://issuetracker.google.com/issues/192433071
Суть: при нажатии на Back сперва сбрасывается фокус поля вместо перехода на предыдущий в стеке экран. Приходится дополнительно тапать на Back.
Статус у бага вроде бы уже fixed, но пока не ясно до конца в какой версии исправят. На текущей стабильной версии Compose 1.1.0 вроде бы еще проявляется.
Вариантов исправить несколько, но если не сильно заморачиваться, то просто к полю ввода добавляем такой вот костыль-модификатор:
modifier = Modifier
.onKeyEvent {
if (it.key == Key.Back) {
// presenter.onBackPressed() or something like
true
} else {
false
}
}
Ждем включения фикса в основную версию.p.s. Давненько я что-то ничего не постил… в общем как вы там поживаете в ваших Грузиях / Армениях ? 🙂
👍4
Я снова с вами!
Решил продолжить таки писать небольшие заметки в канал хотя бы потому что недавно делая диплинки, очень кстати под рукой оказался пост из тележки.
Кстати, теперь у постов будут теги для быстрого поиска.
Что новенького?
1️⃣ В банке сменилось руководство (теперь российское), но изменений в плане работы пока особых нет. Работаем как и раньше. Ограничений на работу из-за рубежа тоже нет, в отличии от Альфы, Сбера и еще парочки банков. Вот коллегам из Открытия (по слухам) тяжелее всего. Хотя, ВТБ многих заберет к себе, если покупка осуществится.
2️⃣ Потихоньку наша махина переходит на рельсы MVI + Compose. MVI пока самописный, благо не так чтобы сложно его реализовать в базовом виде. По Compose вроде дела идут неплохо: переносим свои компоненты на него, что-то выкидываем, ибо хватает стандартной поддержки, но все упирается как всегда во время.
3️⃣ Активнее начали заниматься написанием тестов и скоро их количество в конкретном функционале будет проверяться на CI. Сделаем минимально допустимое покрытие перед мержем ветки в dev.
4️⃣ В Сентябре переболел ковидом, но в легкой форме, поэтому полет нормальный.
А как у вас дела?
Решил продолжить таки писать небольшие заметки в канал хотя бы потому что недавно делая диплинки, очень кстати под рукой оказался пост из тележки.
Кстати, теперь у постов будут теги для быстрого поиска.
Что новенького?
1️⃣ В банке сменилось руководство (теперь российское), но изменений в плане работы пока особых нет. Работаем как и раньше. Ограничений на работу из-за рубежа тоже нет, в отличии от Альфы, Сбера и еще парочки банков. Вот коллегам из Открытия (по слухам) тяжелее всего. Хотя, ВТБ многих заберет к себе, если покупка осуществится.
2️⃣ Потихоньку наша махина переходит на рельсы MVI + Compose. MVI пока самописный, благо не так чтобы сложно его реализовать в базовом виде. По Compose вроде дела идут неплохо: переносим свои компоненты на него, что-то выкидываем, ибо хватает стандартной поддержки, но все упирается как всегда во время.
3️⃣ Активнее начали заниматься написанием тестов и скоро их количество в конкретном функционале будет проверяться на CI. Сделаем минимально допустимое покрытие перед мержем ветки в dev.
4️⃣ В Сентябре переболел ковидом, но в легкой форме, поэтому полет нормальный.
А как у вас дела?
👍4
В xml-разметке когда привязываете элемент к top и bottom других элементов, используя ConstraintLayout, по-умолчанию нужный кусок макета займет не всю область между двумя другими и нужно проставить ему height = 0dp. Частый кейс!
В Compose если поставить у этого элемента в модификаторе height = 0.dp это не сработает.
Оказывается, подобная опция есть в методе constrainAs и нужно выбрав либо ширину, либо высоту указать опцию fillToConstraints:
#Compose #ConstraintLayout
В Compose если поставить у этого элемента в модификаторе height = 0.dp это не сработает.
Оказывается, подобная опция есть в методе constrainAs и нужно выбрав либо ширину, либо высоту указать опцию fillToConstraints:
Modifier
.constrainAs(content) {
bottom.linkTo(termsAndConditions.top)
top.linkTo(topBar.bottom, margin = 32.dp)
...
height = Dimension.fillToConstraints }
Теперь элемент растянется по всей высоте.#Compose #ConstraintLayout
👍1
Любопытное, хотя уже и немного старенькое видео о том, как устроен Compose Runtime: https://www.youtube.com/watch?v=6BRlI5zfCCk
Самое интересное с 13 минуты.
Самое интересное с 13 минуты.
YouTube
KotlinConf 2019: The Compose Runtime, Demystified by Leland Richardson
Recording brought to you by American Express. https://americanexpress.io/kotlin-jobs
Jetpack Compose is an ambitious multi-team effort to reimagine Android's UI Toolkit more than 10 years after the Android Platform launched with the original UI Toolkit.
…
Jetpack Compose is an ambitious multi-team effort to reimagine Android's UI Toolkit more than 10 years after the Android Platform launched with the original UI Toolkit.
…
👍3
Кто бы мог подумать, что в 2023 я буду прикручивать к Android-приложению снова веб-сокеты? Еще когда только технология появилась все в мобильном мире считали как должное, что нужно обязательно их попробовать затянуть в проект. Потом все как хапанули с ними, особенно, в кейсах, когда нужно работать с сокетом из нескольких мест в приложении и держать коннект в фоне, который так и хотел где-то закрыться или память покушать. Видимо mobile-мир, как и человечество развивается по кругу (ну или просто архитекторы у нас вызывают вопросы?). Теперь ждем снова, когда будем хапать кое-чего на лопате.
Благо, если не нужна очень гибкая его настройка, можно воспользоваться либой, которая подключена почти в любом проекте - OkHttp:
Минус реализации в OkHttp в том, что вы не можете гибко контролировать коннект. Есть только открытие сокета, закрытие и отправка / получение сообщения. Хотя может и есть, я пока не встретил сходу, при том что в исходник тоже заглянул.
Как думаете зачем в банке могли потребоваться веб-сокеты в 2023?
Нет, не для чата 🙂
#WebSocket
Благо, если не нужна очень гибкая его настройка, можно воспользоваться либой, которая подключена почти в любом проекте - OkHttp:
webSocket = builder.newWebSocket(
Request.Builder().url(url).build(),
webSocketListener
)
и дальше работать с объектом WebSocket.Минус реализации в OkHttp в том, что вы не можете гибко контролировать коннект. Есть только открытие сокета, закрытие и отправка / получение сообщения. Хотя может и есть, я пока не встретил сходу, при том что в исходник тоже заглянул.
Как думаете зачем в банке могли потребоваться веб-сокеты в 2023?
Нет, не для чата 🙂
#WebSocket
👍4
Небольшой нюанс многомодульности в Android Studio Electric Eel
Как вы уже знаете, у нас в проекте очень много модулей (больше 100 наверное уже), поэтому иногда возникают забавные кейсы.
Вот один из них.
Суть: коллега закончил перенос конфигов в build.gradle для всех модулей на KTS и слил это в dev.
Но при мерже в ветку с новым модулем, который был только локально в этой самой ветке произошла аказия: студия САМА добавила вот такие строки в КАЖДЫЙ build.gradle:
Мораль простая: подливайте почаще изменения в свою ветку, правда, вряд ли в данном случае это бы вас сильно спасло, но по крайней мере можно заложить время на определенные правки, дабы они не были сюрпризом перед созданием PR.
#Многомодульность
Как вы уже знаете, у нас в проекте очень много модулей (больше 100 наверное уже), поэтому иногда возникают забавные кейсы.
Вот один из них.
Суть: коллега закончил перенос конфигов в build.gradle для всех модулей на KTS и слил это в dev.
Но при мерже в ветку с новым модулем, который был только локально в этой самой ветке произошла аказия: студия САМА добавила вот такие строки в КАЖДЫЙ build.gradle:
apply plugin: 'org.jetbrains.kotlin.android'
implementation("androidx.core:core-ktx:+")
implementation("androidx.core:core-ktx:+")
Неприятно.Мораль простая: подливайте почаще изменения в свою ветку, правда, вряд ли в данном случае это бы вас сильно спасло, но по крайней мере можно заложить время на определенные правки, дабы они не были сюрпризом перед созданием PR.
#Многомодульность
👍2🤔1
При переходе с MVP на MVI очень спасает мини-библиотека kotlinx.coroutines.rx2.
Проект старый, весь код работающий с API в основном возвращает Rx-сущности. А методы Middleware в котором как раз мы и дергаем этот API, возвращает flow.
Поток данных внутри flow-билдера должен быть синхронным, что как раз и позволяет сделать эта маленькая библиотечка, добавляющая метод-расширение await() к SingleSource/CompletableSource/MaybeSource и тд. Внутри расширения используется блок suspendCancellableCoroutine, который оборачивает каллбеки Rx, возвращая результат.
В итоге, код будет выглядеть примерно так:
#MVI #Coroutines #Rx
Проект старый, весь код работающий с API в основном возвращает Rx-сущности. А методы Middleware в котором как раз мы и дергаем этот API, возвращает flow.
Поток данных внутри flow-билдера должен быть синхронным, что как раз и позволяет сделать эта маленькая библиотечка, добавляющая метод-расширение await() к SingleSource/CompletableSource/MaybeSource и тд. Внутри расширения используется блок suspendCancellableCoroutine, который оборачивает каллбеки Rx, возвращая результат.
В итоге, код будет выглядеть примерно так:
val response = interactor.apiRequest().await()
Крайне рекомендую, если у вас все еще смешанное использование Coroutines/Rx. #MVI #Coroutines #Rx
👍4🤔1
В Compose 1.2.0 появились Chips.
Раньше контрол на скрине был у нас на базе RadioGroup, а теперь элементарно переехал на LazyRow + FilterChip.
Отличие FilterChip от обычного Chip в настройках цвета для выбранного/обычного состояний:
#Compose
Раньше контрол на скрине был у нас на базе RadioGroup, а теперь элементарно переехал на LazyRow + FilterChip.
Отличие FilterChip от обычного Chip в настройках цвета для выбранного/обычного состояний:
FilterChip(
modifier = Modifier,
onClick = { dayClick(index) },
content = {
...
Text(text)
},
colors = ChipDefaults.filterChipColors(
backgroundColor = .. ,
contentColor = ... ,
selectedBackgroundColor = ... ,
selectedContentColor = ...
),
selected = index == currentDay
)
Анимация нажатия тоже есть 🙂#Compose
👍3💩2🌚1
Знаете в чем основная проблема ревью пулл-реквестов?
У вас никогда не хватает времени (или желания?) скопировать себе чужую ветку из ревью, запустить и прогнать функционал 🙈
В итоге, основная проблема нового кода никак не решается. Вы просто проверяете стилистику, а не функционал.
#потрындеть
У вас никогда не хватает времени (или желания?) скопировать себе чужую ветку из ревью, запустить и прогнать функционал 🙈
В итоге, основная проблема нового кода никак не решается. Вы просто проверяете стилистику, а не функционал.
#потрындеть
🌚2
Хороший вводный доклад по KMM с примерами того, какие части архитектуры можно вынести в общий модуль и с некоторым количеством интересных вопросов в конце.
https://www.youtube.com/watch?v=3nyBxrAtF-M
#KMM
https://www.youtube.com/watch?v=3nyBxrAtF-M
#KMM
YouTube
Александр Соколинский — Почему KMM — не кроссплатформа?
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Александр уже полтора года делает приложения с использованием технологии KMM в продакшене. В докладе он рассмотрит концепцию KMM и ее принципиальные отличия от остальных кроссплатформенных решений.…
— —
Александр уже полтора года делает приложения с использованием технологии KMM в продакшене. В докладе он рассмотрит концепцию KMM и ее принципиальные отличия от остальных кроссплатформенных решений.…
🤔1
Слушайте, ну не так уж и страшно выглядит Аврора 😁
Или многие разрабы уже не учат плюсы в универе?
Понятно, что после Kotlin/Swift/Dart чуть-чуть больновато.
С другой стороны - новая ниша, новые возможности. Тут Алексей прав 👍
А доклад хороший:
https://www.youtube.com/watch?v=vPbAHQy7OBw
Или многие разрабы уже не учат плюсы в универе?
Понятно, что после Kotlin/Swift/Dart чуть-чуть больновато.
С другой стороны - новая ниша, новые возможности. Тут Алексей прав 👍
А доклад хороший:
https://www.youtube.com/watch?v=vPbAHQy7OBw
YouTube
Алексей Гладков — ОС «Аврора» глазами Android- и iOS-разработчика
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
В современном мире нельзя быть до конца уверенным, что завтра у нас будут работать Android или iOS. Поэтому спикер решил взглянуть на альтернативные мобильные ОС из России и начать с самой перспективной…
— —
В современном мире нельзя быть до конца уверенным, что завтра у нас будут работать Android или iOS. Поэтому спикер решил взглянуть на альтернативные мобильные ОС из России и начать с самой перспективной…
🆒2🤡1🤨1
Уже интереснее 👍
Работы по полноценной поддержи Flutter-разработки еще много, конечно. Особенно не хватает пока поддержки Blocs, но круто.
https://www.youtube.com/watch?v=6k3C1hjvTe4
Работы по полноценной поддержи Flutter-разработки еще много, конечно. Особенно не хватает пока поддержки Blocs, но круто.
https://www.youtube.com/watch?v=6k3C1hjvTe4
YouTube
Денис Глазков — ОС Аврора и Flutter. Статус поддержки
Ближайшая конференция: Mobius 2025 Spring, 9–10 апреля, Москва + онлайн. Подробности и билеты: https://jrg.su/ojGU3B
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV…
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV…
Forwarded from Открытая мобильная платформа
Приложения для Авроры будут публиковаться в RuStore. Скоро в мобильном приложении. https://www.omp.ru/news1/tpost/soj12068f1-natsionalnaya-mobilnaya-ekosistema-avror
www.omp.ru
Национальная мобильная экосистема Аврора планирует сделать RuStore своим основным публичным магазином приложений
Стартовала разработка RuStore для мобильной операционной системы Аврора
🤡3👍1🖕1🆒1
Как работает Android Garbage Collection под капотом - замечательная заметка из серии #MustRead 👍
https://medium.com/@banerjee.s.sayans/android-garbage-collection-in-a-nutshell-e5c8acfa1538
https://medium.com/@banerjee.s.sayans/android-garbage-collection-in-a-nutshell-e5c8acfa1538
Medium
Android Garbage Collection in a Nutshell
Have you ever wondered how Garbage Collection works under the hood in Android? 🤷♂️
Реализация паттернов проектирования на Kotlin:
https://reflectoring.io/kotlin-design-patterns/
и Java:
https://java-design-patterns.com/patterns/
Кстати, версия синглтона на базе companion object не компилится на Kotlin 1.9.24 - нужно сменить имя для getInstance. Такие дела 🫡
#DesignPatterns
https://reflectoring.io/kotlin-design-patterns/
и Java:
https://java-design-patterns.com/patterns/
Кстати, версия синглтона на базе companion object не компилится на Kotlin 1.9.24 - нужно сменить имя для getInstance. Такие дела 🫡
#DesignPatterns
reflectoring.io
Design Patterns in Kotlin
A design pattern is a general repeatable solution to a commonly occurring problem in software design. In this blog post, we will delve into various design patterns and explore how they can be effectively implemented in Kotlin.
🤔1
https://proandroiddev.com/everything-you-need-to-know-about-memory-leaks-in-android-d7a59faaf46a
Ультимативный гайд по Memory Leaks в JVM (да и не только), который хорошо сочетается с заметкой про сборку мусора
#MemoryLeaks #MustRead
Ультимативный гайд по Memory Leaks в JVM (да и не только), который хорошо сочетается с заметкой про сборку мусора
#MemoryLeaks #MustRead
Medium
Everything you need to know about Memory Leaks in android.
One of the core benefits of Java that they are garbage collected language. Essentially, we can create objects and the garbage collector…
❤1
Продолжая тему полезных статей для собесов, хочется отдельно поблагодарить автора за такую классную подборку статей по Kotlin. Здоровья тебе, мил человек!
Есть пару нюансов, но в остальном - замечательно 👍
Пол часа делов и ты снова в форме 😄
https://habr.com/ru/articles/721084/
#Kotlin
Есть пару нюансов, но в остальном - замечательно 👍
Пол часа делов и ты снова в форме 😄
https://habr.com/ru/articles/721084/
#Kotlin
Хабр
Вопросы и ответы для собеседования по Kotlin. Часть 1
Вопросы и ответы для собеседования по Kotlin. Часть 1 — вы находитесь здесь Вопросы и ответы для собеседования по Kotlin. Часть 2 Вопросы и ответы для собеседования по Kotlin. Часть 3 Вопросы и...
❤2✍1
Forwarded from Стас Ильин | Flutter
Ну как вам такие новости?
Я долго пропадал, обо всем по порядку...
Несколькими неделями ранее мне написал Станислав Чернышев, автор книги “Основы Dart”. Думаю многие из вас уже читали или, как минимум, слышали про эту книгу
Станислав предложил мне войти в авторский состав книги по Flutter, я конечно же согласился!
Это позволит нам собирать быструю обратную связь по добавленному материалу и вносить правки
Мы хотим выбрать тему сквозного проекта, на основе которого будут рассматриваться аспекты и главы книги
Предлагай тему проекта (только не todo-лист🥴) и если она понравится авторскому коллективу - мы упомянем вас в графе с благодарностями
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🌚1