• Mathematical Driven Design: размеры и отступы

      Здравствуйте, меня зовут Дмитрий Карловский и я… дизайнер. Дизайнер от слова design (проектирование), а не от слова style (дизайн). Я разрабатываю высокоуровневый фреймворк $mol. Одна из основных концепций которого — Лего. То есть это набор очень маленьких кирпичиков с простым и универсальным интерфейсом коммуникации. Комбинируя эти кирпичики в разных комбинациях можно строить приложения любой сложности.


      Но, чтобы приложение не выглядело как лоскутное одеяло, а было лаконичным и опрятным, необходимо, чтобы выполнены эти кирпичики были в едином стиле, а располагать их можно было в любой комбинации, не теряя опрятности.


      Поэтому, мы разработали математически выверенный концепт дизайна, суть которого можно уловить из следующей шпаргалки:



      Далее я расскажу, почему всё именно так, и никак иначе...

      Читать дальше →
    • Kotlin Android Extensions deprecated. Что делать? Инструкция по миграции

        Возможно, вы уже слышали, что Kotlin Android Extensions — плагин для Kotlin теперь deprecated.
        kotlinx.android.synthetic is no longer a recommended practice. Removing in favour of explicit findViewById

        Безусловно, это было очень удобно, особенно если у вас проект полностью на Kotlin. Однако, мир меняется и теперь нужно искать альтернативы. В этой статье мы кратко рассмотрим, что такое плагин Kotlin Android Extension, какие были проблемы с ним и что теперь нам, Android-разработчикам делать. Частично, использовался материал этой статьи. Итак, поехали.
        Читать дальше →
      • История одного pet-проекта

          Если помните, в детстве были такие книжки, где ты читаешь, а в конце есть вариант развилки — пойти направо или налево, убить кого-то или помиловать. В зависимости от вашего выбора в книжке было написано: «Перейдите на такую-то страницу и на такую-то строчку». У Александра Зимина появилась идея для pet-проекта – сделать маркетплейс с дизайном Netflix или онлайн-кинотеатров и где было бы много таких игр.

          Александр учился в Высшей Школе Экономики на факультете ФКН и руководил встречами CocoaHeads, пока не уехал из России. Участвовал в разных европейских и американских стартапах, но в то же время успел поработать и full-time в лондонском Badoo. Сейчас Александр участвует в проектах в доле. В своем докладе на конференции App Live 2019 Александр рассказал о том, что помогло ему сделать проект прибыльным, и какой путь он прошёл для этого. Его рассказ — от идеи до результата, — мы расшифровали и публикуем сегодня.


          Читать дальше →
          • +37
          • 6.5k
          • 1
        • Автоматический Code Improvement при коммите в Android Studio

          Работать с гитом в Android Studio, как известно, можно двумя способами.


          Первый способ классический — использовать консоль. Плюсом такого подхода являются в первую очередь надежность. GUI может залагать и например, зависнуть на этапе rebase так, что abort/continue/переключение на другую ветку не поможет. Консольные команды вам в помощь, они всегда безотказны.


          Второй способ — использовать GUI, предоставляемый Android Studio. Плюсы очевидны — меньший порог входа, более понятно, что вообще можно делать. А также есть различные плюшки от самой студии для удобства работы с гитом. Об одном из них и пойдет речь. Кстати, используя GUI, тоже можно оставлять в покое мышку и использовать hotkey

          Читать дальше →
        • Как спроектировать пошаговое заполнение данных в мобильном приложении

            Привет! Меня зовут Вита Соколова, я Android Team Lead в Surf.

            В мобильных приложениях бывают формы со сложным многошаговым заполнением — например, анкеты или заявки. Проектирование таких фич обычно вызывает у разработчиков головную боль: между экранами передается большое количество данных и образуются жёсткие связи — кто, кому, в каком порядке должен эти данные передавать и какой экран следующим после себя открывать.

            В статье я поделюсь удобным способом организовать работу пошаговой фичи. С его помощью удаётся минимизировать связи между экранами и легко вносить изменения в порядок шагов: добавлять новые экраны, менять их последовательность и логику показа пользователю.


            Читать дальше →
          • За двумя мобильными сервисами: HMS и GMS в одном приложении



              Привет, Хабр! Меня зовут Андрей, я делаю приложение «Кошелёк» для Android. Уже больше полугода мы помогаем пользователям смартфонов Huawei оплачивать покупки банковскими картами бесконтактно — через NFC. Для этого нам потребовалось добавить поддержку HMS: Push Kit, Map Kit и Safety Detect. Под катом я расскажу, какие проблемы нам пришлось решать при разработке, почему именно так и что из этого вышло, а также поделюсь тестовым проектом для более быстрого погружения в тему.
              Читать дальше →
              • +14
              • 2.3k
              • 2
            • Как устроен Push Kit от Huawei

                Привет, Хабр! В мае прошлого года, оставшись без сервисов и API гугла, мы основательно взялись за работы над своей платформой Huawei Mobile Services. Это наш давний проект, к которому мы вернулись после введения американских санкций. Проблема «отрезанных» сервисов постепенно сошла на нет. Мы добавили недостающие компоненты: почтовый клиент, свои карты и другие сервисы и HMS Core — набор API, SDK и прочих сервисов для разработки и улучшения приложений. В этот набор входит Push Kit — облачная служба для рассылки уведомлений — и не только. Под катом расскажем, как устроен этот инструмент, чем выделяется и как его можно использовать.

                Читать далее
              • Kotlin. Автоматизация тестирования (часть 1). Kotest: Начало

                Kotest


                Хочу поделиться опытом создания системы автоматизации функционального тестирования на языке на Kotlin.


                Основой для создания / конфигурирования / запуска / контроля выполнения тестов — будет набирающий популярность молодой фреймворк Kotest (в прошлом Kotlin Test).
                Проанализировав все популярные варианты для Kotlin — выяснилось, что есть всего два "нативных":



                Либо бесконечное кол-во из Java мира: Junit4/5, TestNG, Cucumber JVM или другие BDD фреймворки.


                Выбора пал на Kotest с бОльшим кол-вом "лайков" на GitHub, чем у Spek.


                Руководств по автоматизации тестирования на Kotlin, особенно в сочетании с Kotest — немного (пока).


                Думаю, что написать цикл статей про Kotest, а также про организацию проекта авто-тестов, сборку, запуск и сопутствующие технологии — хорошая идея.

                Читать дальше →
              • Превращаем EditText в SearchEditText

                  image

                  Пробовали ли Вы когда-нибудь настроить внешний вид или поведение стандартного компонента SearchView? Полагаю, да. В этом случае, я думаю что вы согласитесь, что далеко не все его настройки являются достаточно гибкими, для того, чтобы удовлетворить всем бизнес-требованиям отдельно взятой задачи. Одним из способов решения этой проблемы является написание собственного «кастомного» SearchView, чем мы сегодня и займемся. Поехали!

                  Примечание: создаваемое view (далее – SearchEditText), не будет обладать всеми свойствами стандартного SearchView. В случае необходимости, вы можете без труда добавить дополнительные опции под конкретные нужды.
                  Читать дальше →
                • Полируем UI в Android: StateListAnimator

                  • Translation
                  Привет, Хабр! В преддверии старта курса «Android Developer. Professional» мы подготовили для вас перевод еще одного интересного материала.




                  Большую часть времени разработки нашего Android-приложения мы тратим отнюдь не на работу над пользовательским интерфейсом — мы просто накидываем вьюх и начинаем писать код. Я заметил, что большинство из нас не особо заботится о пользовательском интерфейсе. И я считаю, что это в корне неправильно. Разработчики мобильных приложений должны заботиться также и о UI/UX. Я не говорю «будьте экспертом в мобильном UI», но вы должны понимать язык дизайна и его концепции.

                  Ранее я написал статью о тенях в материальном дизайне и получил много хороших отзывов. Я хочу поблагодарить всех вас. «Освоение теней в Android» рассказывает о высоте (elevation) и тени (shadow) в Android. Там же я показал, как дополнял ими свою UI библиотеку с открытым исходным кодом. (Scaling Layout).

                  В этой статье я хочу усовершенствовать свою библиотеку с помощью StateListAnimator и шаг за шагом показать вам, как я это буду делать.
                  Читать дальше →
                • На чем писать Android UI-тесты

                    Всем привет. Мы в Avokado Project продолжаем рассказывать про автотестирование в Android. Эта статья — обзор и сравнение существующих инструментов для написания UI-тестов.


                    Давайте начнем с того, что вспомним, как обычно выглядит процесс тестирования. Будем называть сущность, которая взаимодействует с приложением, клиентом. Для взаимодействия с приложением клиенту обычно доступно несколько интерфейсов: API, REST API, CLI, GUI и т.д. И если, например, API используются клиентами-программами, то GUI используется человеком.


                    Ожидания от поведения приложения описываются в спецификации. Задача тестирования — проверить, что поведение приложения соответствует спецификации.


                    Читать дальше →
                  • Конфигурация многомодульных проектов

                      Предыстория


                      Иногда, когда я прокрастинирую, я занимаюсь уборкой: чищу стол, раскладываю вещи, прибираюсь в комнате. По сути, привожу окружающую среду в порядок — это заряжает энергией и настраивает на рабочий лад. С программированием у меня та же ситуация, только я чищу проект: провожу рефакторинги, делаю различные инструменты и всячески стараюсь упростить жизнь себе и коллегам.

                      Некоторое время назад мы в команде Android решили сделать один из наших проектов — Кошелек — многомодульным. Это привело как к ряду преимуществ, так и проблем, одна из которых — необходимость конфигурировать каждый модуль заново. Конечно, можно просто копировать конфигурацию из модуля в модуль, но если мы захотим что-то поменять, то придется перебрать все модули.

                      Мне это не нравится, команде это не нравится, и вот какие шаги мы предприняли, чтобы упростить нашу жизнь и сделать конфигурации проще в сопровождении.


                      Читать дальше →
                      • +10
                      • 2.1k
                      • 1
                    • Пора обновить ваш монитор

                      • Translation

                      Иллюстрация: Юлия Прокопова

                      Я программист. Я не занимаюсь цифровой живописью, обработкой фотографий, видеомонтажом. Меня действительно не волнует широкая гамма или даже правильная цветопередача. Я провожу большую часть своих дней в текстовом браузере, текстовом редакторе и текстовом терминале, глядя на едва движущиеся буквы.

                      Поэтому я оптимизирую настройки, чтобы показывать действительно, действительно хорошие буквы. Для этого необходим хороший монитор. Не просто нужен, а ОБЯЗАТЕЛЕН. А под «хорошим» я имею в виду настолько хороший, насколько это возможно. Это мои мысли, основанные на моём собственном опыте того, какие мониторы лучше подходят для программирования.
                      Читать дальше →
                    • Ликбез про электронные трудовые книжки



                        Свершилось, с 1 января 2020 в России введена электронная трудовая книжка. Но от бумаги мы избавляемся только сейчас.

                        — Что это за штука?
                        Это запись в базе данных, в которой лежит то же самое, что в вашей бумажной трудовой книжке, только в одном месте в хранилище ПФР. Теперь будет меньше логистики с перемещением этих книжек, сложнее будет утерять старую с записью про увольнение по статье, да и в кадрах не надо будет хранить бумагу 75 лет.

                        — И уже работает?
                        Пока нет. Во-первых, всё уже делается с 1 января 2020, но можно решать про оставить ли себе бумажную до 31 декабря 2020. Закон уже работает, административно-техническая база есть, но нужно пройти ещё несколько стадий. Первая стадия — работодатели должны уведомить всех сотрудников об этой особенности до конца июня 2020. Вторая — до 31 декабря 2020 нужно выбрать, хотите вы всё по-старинке, в бумаге, или в электронном виде. UPD: уже можно уведомлять до осени.

                        — Стоп-стоп, осталась неделя на уведомление? И это ведь государство, и письмо в общий телеграм-чат за документ не считается?
                        Верно. Уведомлённым считается человек, который прочитал где-то что-то и расписался, то есть как минимум прибыл в офис или отправил такой документ в офис. Либо же уведомлённым считается человек, который получил заказное письмо с описью вложения, где в описи и указано это самое уведомление.

                        — И что дальше?
                        Мы уже сделали рассылку словами, и теперь отправляем официальные заказные письма курьерами и почтой. После того, как все будут уведомлены, наступит следующий этап — нужно будет написать или осознанно не написать заявление с выбором типа ведения трудовой книжки до конца рабочего дня 31 декабря 2020.
                        Читать дальше →
                      • От библиотеки компонентов к дизайн-системе



                          Разработка UI-компонентов — одна из самых затратных задач при разработке фронтенда. Чтобы оптимизировать процессы, некоторые компании поручают её выделенной команде. Мы же решили пойти другим путём: сделать библиотеку, чтобы компоненты туда могли добавлять разработчики из разных команд. В этой статье расскажу, как наша библиотека организована.

                          Читать дальше →
                          • +24
                          • 3.8k
                          • 3
                        • Стилизация Android-приложений и дизайн-система: как это сделать и подружить одно с другим

                          • Tutorial


                          Привет читателям!  

                          В какой-то момент любое крупное приложение разрастается так, что сложно везде поддерживать однотипный дизайн и динамично реагировать на любые изменения и тенденции в  дизайне и UX-требованиях.  

                          Поэтому решили внедрить в наше приложение дизайн-систему и добавить поддержку нескольких тем оформления. 

                          Изучив различные способы, выработали свой подход к решению такой задачи. Хотелось сделать так, чтобы дизайн-систему и поддержку стилей можно было повторно использовать в других своих проектах. В соответствии с этой идеей разрабатывались компоненты и темы.
                          Читать дальше →
                        • MVP для Android — преимущества использования Moxy в качестве вспомогательной библиотеки

                          В данной статье описываются преимущества использования Moxy в качестве вспомогательной библиотеки при использовании MVP для Android-приложения.


                          Важно: здесь не сравнивается MVP с другими архитектурными подходами типа MVVM, MVI и т.п. В статье описывается почему, если в качестве архитектуры UI-ной части приложения выбран MVP, то лучше не использовать самописную реализацию MVP, а использовать Moxy.


                          Библиотека Moxy позволяет избежать boilerplate кода для обработки lifecycle фрагментов и активитей, и работать с View как будто оно всегда активно.
                          Далее под View понимается имплементация View в виде фрагмента или активити.
                          Под интерактором понимается сущность бизнес-логики, т.е. класс, который лежит на более низком уровне абстракции, чем Presenter.


                          Общие преимущества Moxy


                          • Активная поддержка и разработка библиотеки.
                          • Поддержка фичей Kotlin вроде val presenter by moxyPresenter { component.myPresenter } и presenterScope для корутин.
                          • Автоматическое восстановление состояния View.
                          • Автоматическая увязка с жизненным циклом (а отсюда отсутствие утечек Активити и прочей подобной прелести).
                          • Обращения к View происходят через не-nullable viewState. Нет риска, что какая-то команда View потеряется.
                          • Весь lifecycle экрана сводится к двум коллбэкам презентера — onFirstViewAttach() и onDestroy().
                          • Время разработки экранов сокращается — не нужно писать лишний код для обработки lifecycle и сохранения состояний.
                          Читать дальше →
                        • Привет, Хабр! С мая 2019 года из-за санкций США мы остались без приложений и API для Android от Google. Из-за этого нашим устройствам грозило будущее без push-уведомлений, магазина и облачных сервисов.

                          Естественно, мы не опустили руки, а разработали и запустили платформу Huawei Mobile Services, которая заменила сервисы Google для наших устройств. Чтобы вы с ней познакомились и интегрировали в свои приложения, мы собрали 10 самых популярных вопросов, которые возникают у разработчиков, впервые столкнувшихся с HMS.
                          Под катом — наши ответы
                        • Черный лебедь в IT-проектах. Взгляд со стороны CEO на проблемы разработки



                          При чём тут лебедь?


                          Если Вас, как CEO или CTO IT-проекта (быстрорастущего или уже крупного), не покидают ощущения, что:

                          • Roadmap продукта буксует
                          • Разработка не успевает за новыми требованиями бизнеса
                          • Клиенты готовы платить деньги за продукт, который Вы не можете им предоставить
                          • Чек за доработку системы догоняет чек от потребителей
                          • Всё сложнее нанимать толковых разработчиков, а свои уходят к конкурентам
                          • Сейчас все хорошо, но как-то тревожно…

                          Тогда усаживайтесь поудобнее, эта статья для Вас.
                          Читать дальше →