- Root Validator
- Валидаторы ввода под Android
- 8 приложений для Android, которые нужно удалить. Они опасны
- Вредоносные приложения для Android
- Как найти вирус на Android
- Как отменить подписку на Андроиде
- Правильная валидация в Android
- О чём это?
- Решение
- Condition — основа всего
- Как это работает?
- Сложений и умножение
- Validator — проверка по множеству условий
- Как это работает?
- Оператор
- Набор условий
- LiveDataValidator — реактивная валидация
- Состояние (state)
- Активация LiveDataValidator
- Реакция на другие LiveData
- MuxLiveDataValidator — объединяем валидаторы
- Состояние (state)
- Активация MuxLiveDataValidator
- Добавление валидатора
- Удаление валидатора
- Установка оператора
- Подключение валидаторов к view
- ConditionViewBinder
- ValidatorViewBinder
- LiveDataValidatorViewBinder
- Готовые реализации
- Примеры
- Простая валидация
- Сложная валидация
- Общие рекомендации по использованию
Root Validator
Root Validator — у вас есть рут, или все же нет? Эта программа позволит вам ответить на этот вопрос. Оно также вам даст некоторые подробности про SU binary, суперпользователе, а также BusyBox. Для работы просто нажмите на кнопку и узнайте результат. Это приложение несомненно вам понравиться и пригодится. Возможностей для настройке и управления есть очень много. Используйте это приложение, чтобы проверить, если вы все еще будете менятся, или если ваша попытка прошла успешно. Он проверяет доступ, программу супер-пользователя, Су двоичных файлов, а BusyBox двоичный файл. И все это совершенно бесплатно.
Это приложение не дает root на вашем устройстве!
Скачать приложение Root Validator (проверяем наличие рут прав) на Андроид вы можете по ссылке ниже.
Разработчик: darken
Платформа: Android 4.0 и выше
Язык интерфейса: Русский (RUS)
Состояние: Full (Полная версия)
Root: Нужен
Источник
Валидаторы ввода под Android
Не так давно мне понадобилось добавить в андроид-приложение валидаторы для полей ввода (EditText), но ничего подходящего в сети не нашлось: пришлось писать свои собственные. Теперь, когда все готово, можно раздать результаты всем желающим под Apache лицензией и немного рассказать, как все устроено. Тех, кому интересно, прошу под кат.
Так как писалось все с нуля, то можно было делать архитектуру под себя, поэтому была выбрана следующая схема:
- Одному полю ввода назначается один валидатор (можно больше, но в этом нет смысла)
- Каждому валидатору назначается несколько чекеров, на различные условия (длину текста, соответствие маске и т.п.)
- Чекеры выполняют проверки в том порядке, в котором были добавлены, первый «провалившийся» показывает сообщение.
Для удобства сделал пару кастомизаций:
- Можно выбрать проверку как по изменению текста в поле, так и вручную
- Можно показывать сообщение как в отдельном TextView, так и встроенным в андроид механизмом (красная иконка со всплывающим сообщением).
- Можно объединить валидаторы в группу и инициировать проверку для всей группы, а также показать отдельное сообщение, если хоть один валидатор в группе обнаружил ошибку.
У валидаторов и чекеров есть базовые абстрактные классы, реализовав которые, вы можете получить валидаторы для своих контролов и свои особые проверки.
Сейчас есть проверки:
- На пустоту строки
- На длину строки
- На соответствие регэкспу
- На принадлежность диапазону (для полей ввода целочисленных значений)
- На совпадение с текстом в другом поле ввода (полезно для подтверждения паролей)
В коде все это выглядит примерно так:
Инициировать проверку всех валидаторов в группе можно вызовом:
Всех, кого заинтересовали валидаторы, приглашаю взять проект с ГитХаба компании Rus Wizards, в стенах которой и был написан этот код.
И, конечно же, любые пожелания, предложение, советы приветствуются!
Источник
8 приложений для Android, которые нужно удалить. Они опасны
Кто бы что ни говорил, но Google Play – это помойка. Не даром её признали самым популярным источником вредоносного софта для Android. Просто пользователи в большинстве своём доверяют официальном магазину приложений Google и скачивают оттуда любое ПО без разбору. А какой ещё у них есть выбор? Ведь их всегда учили, что скачивать APK из интернета куда опаснее. В общем, это действительно так. Но остерегаться опасных приложений в Google Play нужно всегда. По крайней мере, постфактум.
Есть как минимум 8 приложений, которые нужно удалить
Google добавила в Google Play функцию разгона загрузки приложений
Исследователи кибербезопасности из антивирусной компании McAfee обнаружили в Google Play 8 вредоносных приложений с многомиллионными загрузками. Попадая на устройства своих жертв, они скачивают получают доступ к сообщениям, а потом совершают от их имени покупки в интернете, подтверждая транзакции кодами верификации, которые приходят в виде SMS.
Вредоносные приложения для Android
Нашли вирус? Удалите его
В основном это приложения, которые потенциально высоко востребованы пользователями. Среди них есть скины для клавиатуры, фоторедакторы, приложения для создания рингтонов и др.:
- com.studio.keypaper2021
- com.pip.editor.camera
- org.my.famorites.up.keypaper
- com.super.color.hairdryer
- com.celab3.app.photo.editor
- com.hit.camera.pip
- com.daynight.keyboard.wallpaper
- com.super.star.ringtones
Это названия пакетов приложений, то есть что-то вроде их идентификаторов. Поскольку всё это вредоносные приложения, их создатели знают, что их будут искать и бороться с ними. Поэтому они вполне могут быть готовы к тому, чтобы менять пользовательские названия приложений, которые видим мы с вами. Но это мы не можем этого отследить. Поэтому куда надёжнее с этой точки зрения отслеживать именно идентификаторы и удалять вредоносный софт по ним.
Как найти вирус на Android
Но ведь, скажете вы, на смартфоны софт устанавливается с пользовательскими названиями. Да, это так. Поэтому вам понадобится небольшая утилита, которая позволит вам эффективно выявить весь шлаковый софт, который вы себе установили, определив название их пакетов.
- Скачайте приложение для чтения пакетов Package Name Viewer;
- Запустите его и дайте те привилегии, которые запросит приложение;
В красном квадрате приведен пример названия пакета
- Поочерёдно вбивайте в поиск названия пакетов, приведённые выше;
- При обнаружении приложений с такими именами, нажимайте на них и удаляйте.
Package Name Viewer удобен тем, что позволяет не просто найти нужное приложение по названию его пакета, но и при необходимости перейти в настройки для его удаления. Для этого достаточно просто нажать на иконку приложения, как вы попадёте в соответствующий раздел системы, где сможете остановить, отключить, удалить накопленные данные, отозвать привилегии или просто стереть нежелательную программу.
Как отменить подписку на Андроиде
Лучше всего приложение именно удалить. Это наиболее действенный способ защитить себя от его активности. Однако не исключено, что оно могло подписать вас на платные абонементы, поэтому для начала проверьте свою карту на предмет неизвестных списаний, а потом просмотрите список действующих подписок в Google Play:
- Запустите Google Play и нажмите на иконку своего профиля;
- В открывшемся окне выберите раздел «Платежи и подписки»;
Если подписка оформлена через Google Play, отменить её ничего не стоит
- Здесь выберите «Подписки» и проверьте, нет ли среди них неизвестных;
- Если есть, просто нажмите напротив неё на кнопку «Отменить».
В принципе, если подписка была оформлена через Google Play и оплата уже прошла, вы можете потребовать у Google вернуть уплаченные деньги. О том, как это делается, мы описывали в отдельной статье. Но поскольку разработчики таких приложений обычно тщательно продумывают способы воровства денег, как правило, они не используют встроенный в Google Play инструмент проведения платежей, чтобы их в случае чего не могли отозвать.
Источник
Правильная валидация в Android
О чём это?
Эта статья — обзор моей Android-библиотеки валидации, которая позволяет организовать сложную валидацию данных. В первую очередь библиотека рассчитана на проверку пользовательского ввода.
Часто в мобильных приложениях приходится делать различные экраны для ввода пользователем информации. Но так как пользователи не отличаются умом и сообразительностью — приходится проверять, что они там написали: запрещенные символы, максимальная длина, соответствие RegExp и так далее.
Первое, что приходит в голову для решения проблемы — прицепить регулярку прямо на EditText
Например, вот так:
Но а если теперь я хочу проверять поле по двум разным RegExp и выводить разные ошибки?
Ну тогда можно добавить второй слушатель:
Однако, теперь если в поле ввести строку «12345» то ошибки не будет: первый слушатель выставит ошибку на поле, потому что поле содержит цифры, а вот второй слушатель скроет ошибку, потому что по его мнению — поле правильное, не более 10 символов.
И это только одна проблема. Дальше — веселее:
Как повесить на поле множество правил валидации, чтобы они правильно работали вместе?
Как добавлять или удалять правила?
Где хранить эту кучу валидаторов?
Как проверять любые типы данных, а не только строковые?
и многое другое.
Решение
Вся валидация должна происходить во ViewModel или Presenter, но не в UI слое. Задача UI — должным образом реагировать на результат проверки.
Не должно быть никаких специальных view-классов с поддержкой валидации. Валидацию можно привязать к любой view
Валидаторы должны поддерживать множество различных правил проверки, чтобы, например, каждое правило выдавало собственную ошибку.
Схематично всё выглядит примерно вот так:
Теперь рассмотрим её подробнее.
Condition — основа всего
В основе всей валидации лежит условие ( Condition ) — простейший интерфейс с одним методом validate .
interface Condition
Как это работает?
На изи! У Condition есть метод validate(data) , который проверит данные и вернёт результат ValidationResult . Внутри ValidationResult будет булевый результат проверки isValid и сообщение об ошибке, которое должно появляться если isValid == false
Сложений и умножение
Condition можно складывать и умножать. Сложение работает как аналог булевого ИЛИ, а умножение как аналог булевого И
ИЛИ
Conditon(true)
Conditon(false)
Conditon(true)
Conditon(false)
И
Conditon(true)
Conditon(false)
Conditon(true)
Conditon(false)
Точно так же склыдываются или умножаются ValidationResult
Validator — проверка по множеству условий
А что если надо проверять значение по множеству условий?
Как это работает?
Validator по-сути является Condition , только более прокаченный.
Внутри Validator находится множуство условий Set . В момент проверки значение проверяется по каждому из условий, формируется набор результатов валидации Set . Затем, этот набор с результатами передается на вход оператору ( Operator ), который и решает, какой будет финальный результат валидации. Вот, Всё.
Validator
У валидатора есть свои приколы:
Оператор
Operator — это просто Condition > , то есть тупа проверяет коллекцию результатов валидации. Получается такой аналог логического оператора из начального курса булевой алгебры. По-умолчанию используется оператор-конъюнкция.
Но можно написать свой оператор, который, например, будет выдавать ValidationResult(true) если количество валидных условий достигло порогового значения.
Нельзя удалять оператор! Validator не может работать без оператора
Наблюдение за изменением оператора
Может быть такое, что необходимо отслеживать изменения оператора. Например, чтобы обновить view.
Набор условий
Наблюдение за изменением условий
Чтобы следить за списком условий — добавьте слушателя OnConditionsChangedListener , который будет вызываться при любом изменении условий
Если нужно сделать много преобразований можно использовать changeConditionsSet , чтобы слушатель OnConditionsChangedListener сработал только один раз — после всех преобразований набора условий.
LiveDataValidator — реактивная валидация
Было бы удобно, если бы валидатор самостоятельно проверял данные при каждом их изменении. Так и сделаем! Сейчас модно молодежно использовать LiveData . Так пусть валидатор подпишется на неё и будет проверять каждое значение.
LiveDataValidator
LiveDataValidator работает так же как и обычный Vlidator , однако у него есть свои особенности:
Состояние (state)
Состояние это результат последней проверки. Представляет собой LiveData , поэтому за состоянием валидатора можно удобно следить. LiveDataValidator всегда в актуальном состоянии пока он подписан на источник ( Validator.observe ; Validator.observeForever )
Активация LiveDataValidator
LiveDataValidator начинает работать только тогда, когда хоть кто-нибудь подписан на него
Реакция на другие LiveData
LiveDataValidator умеет следить за другими LiveData и реагировать на их изменения
Для этого есть метод watchOn
В примере выше liveDataValidator следит за полем textMaxLength и как только значение textMaxLength меняется liveDataValidator принудительно валидируется
Для подобных случаев есть метод triggerOn , который запускает валидацию всякий раз когда изменяется дополнительный источник
Есть 2 текстовых поля: на одном пики точены, на другом х** д*ы вовсе не пики Задача, чтобы второе поле не содержало в себе текст первого поля
Как видно, secondValidator проверяет поле second , но при этом использует исползует first для проверки. Но что если first изменился? Тогда валидатор будет висеть в неактуальном состоянии до следующего изменения second . Поэтому валидатору нужно следить за first и при каждом его изменении принудительно выполнять проверку Делается это методом triggerOn(LiveData ) , который будет запускать валидатор при каждом изменении first
Вместо triggerOn можно так же использовать watchOn и самостоятельно прописать нужное действие
MuxLiveDataValidator — объединяем валидаторы
А теперь, когда у нас есть куча полей с LiveDataValidator’ами надо каким-то образом опредилить общий результат валидации. Самый распространённый пример: если все поля на форме заполнены правильно — включаем кнопку «Далее».
Для этого есть MuxLiveDataValidator . Он подписывается на множество LiveDataValidator’ов и как только один из них изменяется — MuxLiveDataValidator собирает состояния ( ValidationResult ) всех LiveDataValidator’ов и отдаёт их на проверку оператору ( Operator ). Operator выдаёт окончательный результат.
Короче, MuxLiveDataValidator работает типа как мультиплексор. Отсюда и название.
MuxLiveDataValidator
Состояние (state)
Аналогично LiveDataValidator у MuxLiveDataValidator есть состояние
Состояние это LiveData в котором находится последний результат проверки.
Активация MuxLiveDataValidator
Тут как у LiveDataValidator — доступ только по подписке
Когда вы подписываетесь на MuxLiveDataValidator , то все его LiveDataValidator активируются, то есть подписка распространяется и на них (такой вот аналог семейной подписки у MediatorLiveData ). То есть если вы подписались на MuxLiveDataValidator , то не можно не подписываться на те LiveDataValidator , за которыми он следит.
Добавление валидатора
Добавить LiveDataValidator можно при создании MuxLiveDataValidator
Можно и после создания
Удаление валидатора
Ну тут типа ваще всё изян
Установка оператора
По-умолчанию MuxLiveDataValidator использует оператор-конъюнкцию. Чтобы поменять логику выдачи финального ValidationResult нужно установить другой оператор
Есть возможность следить за сменой оператора чтобы, например, очистить ошибку на view.
Подключение валидаторов к view
ConditionViewBinder
ConditionViewBinder базовый связыватель view и Condition
В момент вызова ConditionViewBinder.validate() достает из view данные для проверки абстрактным методом getValidationData() . Эти данные улетают в Condition , который проверит их и вернет ValidationResult . Затем этот ValidationResult передаётся абстрактному методу onValidationResult() в котором и происходит изменения view.
ConditionViewBinder
Таким образом можно привязать любой валидатор к любой view
ValidatorViewBinder
Предназначен для более удобной работы с Validator : следит за изменениями оператора и условий валидатора.
LiveDataValidatorViewBinder
LiveDataValidator — особый пациент. Для него свой binder, который:
сам подписывается/отписывается на LiveDataValidator ( чтобы активировать его)
getValidationData() берется не из view, а прямо из валидатора (из его source )
LiveDataValidatorViewBinder нужно активировать. Тут 2 способа:
Через конструктор. В конструктор передать LifeycleOwner
Просто вызвать attach
Готовые реализации
TextConditionViewBinder
Связывает простые Condition с TextView . Проверяет поле при каждом изменении текста в нём
TextViewLiveDataValidatorBinder
Тут то же самое, что и TextConditionViewBinder , но тут работаем с LiveDataValidator .
Примеры
Простая валидация
Во ViewModel делаем простейший Condition
Во фрагменте (или активити) применяем условие к текстовому полю
Сложная валидация
Допустим у нас есть 3 поля: поле для ввода цифр, поле для ввода букв и поле, которое указывает максимальную длину поля ввода цифр. О как! А ещё нужно выводить общее состояние валидации всей формы в отдельное текстовое поле!
Для начала объявим сами поля и валидаторы к ним во ViewModel]
Чтобы динамически менять условия валидации — лучше всего написать свой валидатор. Потому что для смены условий нужно хранить ссылки на эти самые условия, а это лучше сделать в отдельном классе
Теперь идём во фрагмент и подключаем всё это дело
Общие рекомендации по использованию
Все валидаторы должны находиться во ViewModel (ну или в Presenter) Не надо выносить логику валидирования во фрагменты, активности и вообще на view уровень.
По-возможности используйте LiveDataValidator . Он самый прокаченный. И вообще вся библиотека ради него написана была
Аккуратнее с множеством условий. Вы можете добавить на поле противоречащие друг другу условия и будет непонятно что!
Делайте свои реализации. Создавайте свои ConditionViewBinder ы, чтобы работать с кастомными view Создавайте свои валидаторы если вам нужна более сложная валидация
Источник