Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 06/29/20 in all areas

  1. 8 points
    Добрый день, Первоначальный релиз iOS части был запланирован на июнь этого года. Но в связи с важными на наш взгляд запрошенными новыми возможностями для Android платформы (Андроид Сервисы, Пуш уведомления, поддержка RAD Studio 10.4), без которых разработка коммерческих и сложных приложений не имеет смысла, этот срок, к сожалению, сдвигается на конец лета (август). Немалую роль в сдвиге релиза iOS части сыграло удаление поддержки ARC в 10.4 . Пришлось значительно изменить использование Android API и практически обновить всю Андроид платформу. Этому будет посвящен следующий релиз 1.4.0.0, который выйдет в ближайшие два дня. Однако, в свете того, что на лето был запланирован релиз iOS и многие наши пользователи рассчитывают на это, последние недели мы уже работаем параллельно над iOS реализации: Уже реализованы базовые компоненты: TfgForm, TfgEdit, TfgActivityIndicator, TfgLayout, TfgProgressBar, TfgCardPanel, TfgButton, TfgSwitch, TfgSpacer, TfgTimer, TfgImage. Полностью реализована поддержка FlexBox. Так же реализована часть базовых платформенных сервисов: логирование, доступ к экранам, информация о локали устройства, Информация о приложении и тд. Добавлена поддержка ресурсов и битмапов. Полностью транслированы iOS Api заголовочные файлы по последним версиям iOS. В RTL, к сожалению, iOS API устаревшее. План на ближайший месяц: Реализация канвы Реализация контролов-контейнеров, таких как, TfgDrawerLayout, TfgCollectionView, TfgListMenu. Реализация компонентов секции Дата/Время. Так же мы сейчас рассматриваем вариант частичной поставки iOS части в виде dev-дополнения для текущих клиентов. Естественно, там не будет 100% реализации iOS части. Но постепенно туда будут включаться новые и новые реализованные части iOS. Те компоненты, которые не будут реализованы, будут поставляться просто заглушками. Это поможет вам понять степень готовности iOS части, попробовать ее для своих проектов. Повторюсь, это пока только на этапе рассмотрения. Когда будут готовы основные компоненты, такие, как TfgDrawerLayout, TfgCollectionView, TfgListMenu и TfgNavigationBar, то к этому моменту мы точно определимся с тем поставлять бета-iOS часть или уже сделать полноценный релиз.
  2. 2 points
    Всем доброго дня! Как и обещал ранее, перед релизом 1.4.0.0 выкладываю инструкцию о миграции использования старого Android-Delphi моста на новый в 1.4.0.0. Это руководство актуально тем разработчикам, которые используют Android Api в своих проектах. В этой статье я рассмотрю только те аспекты в работе моста, которые изменились. По большей части изменения были необходимы только в свете поддержки RAD Studio 10.4, в которой была полностью удалена поддержка модели памяти ARC. 1. Создание Java объекта: Было: var Intent: TJIntent; Intent := TJIntent.Create; Стало: var Intent: JIntent; Intent := TJIntent.Create; Все объявления переменных, атрибутов и тд должны быть теперь именованы без префикса "T". TJActivity -> JActivity. 2. Передача Java объектов через Java интерфейс: Было: // Декларация метода. Принимает атрибут интерфейсного типа CharSequence. TJTextView.setError(const AArg0: JCharSequence); // Java cтрока TJString реализует интерфейс JCharSequence. Поэтому передача идет напрямую (в старой версии моста). View.setError(StringToJString(Control.Error)); Стало: // Декларация метода. Принимает атрибут интерфейсного типа CharSequence. TJTextView.setError(const AArg0: JCharSequence); // Теперь обертка Java cтроки TJString НЕ реализует явно интерфейс JCharSequence. Поэтому необходима явная конвертация JString -> JCharSequence View.setError(TJCharSequence.Wrap(StringToJString(Control.Error))); // Или можно воспользоваться хелпером из FGX.Helpers.Android.pas View.setError(StringToJCharSequence(Control.Error)); 3. Работа с Java массивами: При создании экземпляра Java массива (TJavaArray<T>) вся работа теперь осуществляется через интерфейс IJavaArray<T>. Было: var Points: TJavaArray<Single>; Points := TJavaArray<Single>.Create(0); FCanvas.drawLines(Points, FStroke); Стало: var Points: IJavaArray<Single>; Points := TJavaArray<Single>.Create(0); FCanvas.drawLines(Points, FStroke); 4. Работа с Java-листенерами: Если вы реализовывали свои листенеры через наследование класса Java.Bridge.TJavaLocal, то в 1.4.0.0 листенеры теперь поддерживают счетчик ссылок через Delphi IInterface. Это значит, что при создании листенера, его необходимо сохранять в переменную/поле интерфейсного типа, а не объектного. Было: TfgAndroidCameraStateListener = class(TJavaLocal, JCameraStateListener) private [Weak] FCamera: TfgAndroidCamera; public constructor Create(const ACamera: TfgAndroidCamera); { JCameraStateListener } procedure onClosed(const AArg0: JCameraDevice); procedure onDisconnected(const cameraDevice: JCameraDevice); procedure onError(const cameraDevice: JCameraDevice; const errorCode: Integer); procedure onOpened(const cameraDevice: JCameraDevice); end; var FStateListener: TfgAndroidCameraStateListener FStateListener := TfgAndroidCameraStateListener.Create(Self); FStateCallback.setListener(FStateListener); Стало: TfgAndroidCameraStateListener = class(TJavaLocal, JCameraStateListener) private [Weak] FCamera: TfgAndroidCamera; public constructor Create(const ACamera: TfgAndroidCamera); { JCameraStateListener } procedure onClosed(const AArg0: JCameraDevice); procedure onDisconnected(const cameraDevice: JCameraDevice); procedure onError(const cameraDevice: JCameraDevice; const errorCode: Integer); procedure onOpened(const cameraDevice: JCameraDevice); end; var FStateListener: JCameraStateListener FStateListener := TfgAndroidCameraStateListener.Create(Self); FStateCallback.setListener(FStateListener); В противном случае, экземпляр листенера FStateListener будет удален сразу же после вызова FStateCallback.setListener(FStateListener); Что в свою очередь приведет к последующим падения приложения. Так как сработает механизм подсчета ссылок Delphi интерфейсов. 5. Конвертация string <-> JString: До RAD Studio 10.4 мобильные компиляторы поддерживали добавление операторов неявного преобразования. Это в свою очередь позволило нам реализовать автоматическую конвертацию "на лету" Delphi string <-> Java JString. В 10.4 эту возможность убрали вместе с ARC, так как неявное преобразование реализуется через ARC. Поэтому теперь нужно явно вызывать преобразование строк через StringToJString и JStringToString: Было: TjUri.parse('tel:+'); Стало: uses FGX.Helpers.Android; TJUri.parse(StringToJString('tel:+')) Это все изменения, которые необходимо сделать.
  3. 1 point
    Добавил дополнительный раздел "4. Работа с Java-листенерами".
×
×
  • Create New...