Beagle is an open-source framework for cross-platform development using the concept of Server-Driven UI.

Overview

Beagle

Getting Started · Learn the Basics · Contribute

Beagle is an open-source framework for cross-platform development using the concept of Server-Driven UI.

This framework allows teams to build and alter layouts and data directly through a backend but yet displaying its contents natively in a mobile application and/or through a web one.

It is also possible to create, test and update native application components and screen paths without the need to update the mobile application at the store (App Store or Play Store).

Contents

Requirements

Beagle apps may target iOS 10.0 and Android 4.4 (API 19) or newer. You may use Windows, macOS, or Linux as your development operating system.

Building your first app using Beagle

Follow the Getting Started guide. The recommended way to install Beagle depends on your project. Here you can find short guides for the most common scenarios:

Documentation

The full documentation for Beagle can be found on our website.

The Beagle documentation discusses components, APIs, and topics that are specific to Beagle. Beagle documentation.

How to Contribute

The main purpose of this repository is to continue evolving Beagle core. We want to make contributing to this project as easy and transparent as possible, and we are grateful to the community for contributing bug fixes and improvements. Read below to learn how you can take part in improving Beagle.

Contributing Guide

Read our Contributing Guide to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes to Beagle.

Code of Conduct

Beagle has adopted a Code of Conduct that we expect project participants to adhere to. Please read the code so that you can understand what actions will and will not be tolerated.

Good First Issues

We have a list of good first issues that contains bugs, which have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process.

Projects

We decided to create a repository for each of our projects. The repositories with their respective links are:

Android

iOS

Backend

Tests

License

Beagle is Apache 2.0 licensed, as found in the LICENSE file.

Comments
  • Android - Exception thrown while deserializing JSON that contains Tabbar/PageView/PageIndicator

    Android - Exception thrown while deserializing JSON that contains Tabbar/PageView/PageIndicator

    Description

    I caught an exception thrown while trying to test the example code of PageView. It says that there was an error while deserializing JSON. I encountered the same problem when I was trying with Tabbar, OpenNativeRoute, PageIndicator,...

    Steps To Reproduce

    Provide a detailed list of steps that reproduce the issue.

    1. Go to the page with reference docs of PageView (or PageIndicator or Tabbar): https://docs.usebeagle.io/v1.6/api/components/layout/pageview/
    2. Copy the code snippet in the example (written in Kotlin DSL) and paste to the backend project, set up the service and builder to serve it on the server via an endpoint (for me: /uiController/home)
    3. On Android devices, open the screen with a ScreenRequest to the endpoint as above
    4. View Logcat and see the exception thrown as follows: java.lang.NullPointerException: null cannot be cast to non-null type kotlin.collections.Map<kotlin.String, kotlin.Any> at br.com.zup.beagle.android.data.serializer.adapter.AnalyticsActionConfigAdapter.fromJson(AnalyticsActionConfigAdapterFactory.kt:55) at br.com.zup.beagle.android.data.serializer.adapter.AnalyticsActionConfigAdapter.fromJson(AnalyticsActionConfigAdapterFactory.kt:44) at br.com.zup.beagle.android.data.serializer.adapter.BeagleKotlinJsonAdapter.fromJson(BeagleKotlinJsonAdapterFactory.kt:95) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at br.com.zup.beagle.android.data.serializer.PolymorphicJsonAdapterFactory$PolymorphicJsonAdapter.fromJson(PolymorphicJsonAdapterFactory.java:297) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at com.squareup.moshi.CollectionJsonAdapter.fromJson(CollectionJsonAdapter.java:81) at com.squareup.moshi.CollectionJsonAdapter$2.fromJson(CollectionJsonAdapter.java:55) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at br.com.zup.beagle.android.data.serializer.adapter.BeagleKotlinJsonAdapter.fromJson(BeagleKotlinJsonAdapterFactory.kt:95) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at br.com.zup.beagle.android.data.serializer.PolymorphicJsonAdapterFactory$PolymorphicJsonAdapter.fromJson(PolymorphicJsonAdapterFactory.java:297) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at com.squareup.moshi.Moshi$Lookup.fromJson(Moshi.java:408) at com.squareup.moshi.CollectionJsonAdapter.fromJson(CollectionJsonAdapter.java:81) at com.squareup.moshi.CollectionJsonAdapter$2.fromJson(CollectionJsonAdapter.java:55) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at br.com.zup.beagle.android.data.serializer.adapter.BeagleKotlinJsonAdapter.fromJson(BeagleKotlinJsonAdapterFactory.kt:95) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at br.com.zup.beagle.android.data.serializer.PolymorphicJsonAdapterFactory$PolymorphicJsonAdapter.fromJson(PolymorphicJsonAdapterFactory.java:297) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at com.squareup.moshi.Moshi$Lookup.fromJson(Moshi.java:408) at br.com.zup.beagle.android.data.serializer.adapter.BeagleKotlinJsonAdapter.fromJson(BeagleKotlinJsonAdapterFactory.kt:95) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) 2021-03-22 16:09:00.105 15956-15981/com.vt.beagle_ui E/BeagleSDK: at br.com.zup.beagle.android.data.serializer.PolymorphicJsonAdapterFactory$PolymorphicJsonAdapter.fromJson(PolymorphicJsonAdapterFactory.java:297) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41) at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:51) at br.com.zup.beagle.android.data.serializer.BeagleSerializer.deserializeComponent(BeagleSerializer.kt:46) at br.com.zup.beagle.android.data.ComponentRequester.fetchComponent(ComponentRequester.kt:45) at br.com.zup.beagle.android.data.ComponentRequester$fetchComponent$1.invokeSuspend(Unknown Source:12) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

    Expected Results

    I expect the code snippet works properly (without exception thrown). I see that if I build a screen without PageView, PageIndicator, Tabbar or OpenNativeRoute,... all run properly as expected without any exception.

    Code example, screenshot, or link to a repository:

    Container( children = listOf( PageView( children = (1..3).map { Text( text = "Page $it", alignment = TextAlignment.CENTER ) }, onPageChange = listOf(SetContext("context", "@{onPageChange}")), currentPage = expressionOf("@{context}") ), PageIndicator( numberOfPages = 3, selectedColor = "#000", unselectedColor = "#CCC", currentPage = expressionOf("@{context}") ) ), context = ContextData( id = "context", value = 0 ) )

    bug android 
    opened by hoangngv 28
  • Adjust component Image

    Adjust component Image

    Describe the problem Actual has two components Image and NetworkImage and they do the same think load an image.

    Expected behavior Remove component NetworkImage and add support to load image from network in component Image

    Actual Component

    data class Image(
        val name: String,
        val contentMode: ImageContentMode? = null
    ) : Widget()
    

    Expected Component

    data class Image(
       val url: String,
        val path: String,
        val contentMode: ImageContentMode? = null
        val typePathImage: TypePathImage
    ) : Widget()
    
    enum class TypePathImage {
    Network,
    Local
    }
    
    enhancement android backend iOS schema 
    opened by uziasferreirazup 24
  • EPIC - Refactor ListView to support rendering a template over a list iteration

    EPIC - Refactor ListView to support rendering a template over a list iteration

    Problem

    As pointed by @hernandazevedozup and discussed in the meeting of 05/29/2020, we need a way to improve the performance of our lists that repeats a template over a number of items. This will help us to utilize cache more efficiently, have a smaller json and have a better list performance in mobile devices.

    Changes

    • Attribute dataSource is an array and represents the list we'll iterate over. Just like any other attribute, we must be able to use an expression, replacing it by an array in a context.
    • Attribute onInit, just like the container, should run this event as soon as the component is rendered. onInit must be related to an action.
    • Attribute template will be the component rendered for each item in dataSource.

    The following points should be discussed further:

    • Attribute scrollEndThreshold will be the threshold that will define how many percent to trigger the onScrollEnd event.
    • Attribute onScrollEnd will be responsible to execute a list of actions whenever the scrolls reaches its threshold.

    The template can contain expressions referring to the current item in the data source. These expressions must follow the same syntax of the context feature. The current item can be referred to by the word item.

    item now becomes a reserved word and can not be used as a context id.

    Example

    {
      _beagleComponent_: 'beagle:listview',
      _context_: {
        id: 'clients',
        value: [],
      },
      onInit: {
        _beagleAction_: 'beagle:sendRequest',
        url: '/api/clients',
        onSuccess: {
          _beagleAction_: 'beagle:setContext',
          value: '@{onSuccess.data}',
        },
      },
      dataSource: '@{clients}', // must be an array or expression (referring to a context id)
      template: {
        _beagleType_: 'beagle:container',
        children: [
          {
            _beagleType_: 'beagle:text',
            text: 'O nome do cliente é @{item.name} e sua idade é @{item.age} @{currentDate}',
          },
          {
            _beagleType_: 'beagle:button',
            text: 'Teste @{client.name}',
          },
        ],
      },
    }
    
    • [ ] Web https://github.com/ZupIT/beagle-web-components/issues/6
    • [ ] Android: #542
    epic 
    opened by Tiagoperes 23
  • Height of a ServerDrivenComponent in Swift(UI)

    Height of a ServerDrivenComponent in Swift(UI)

    Description

    image

    Steps To Reproduce

    Provide a detailed list of steps that reproduce the issue.

    1. Declare a JSON like this:

    2. var containerB: String { """ { "_beagleComponent_": "beagle:text", "text": "containerB", "style": { "backgroundColor": "#003870", "size": { "height": { "value": 200, "type": "REAL" } } } } """ } var containerA: String { """ { "_beagleComponent_": "beagle:text", "text": "containerA", "style": { "backgroundColor": "#003870", "size": { "height": { "value": 500, "type": "REAL" } } } } """ }

    3. Use this converter: ` struct BeagleToSwiftUI: UIViewRepresentable { typealias UIViewType = UIView typealias Context = UIViewRepresentableContext

      let uiView: UIView

      init(uiView: UIView) { self.uiView = uiView self.uiView.setContentHuggingPriority(.required, for: .vertical) print(uiView.frame.height) // always print zero here }

      func makeUIView(context: Context) -> UIView { return self.uiView }

      func updateUIView(_ uiView: UIView, context: Context) {

      } } `

    4. Use this to calculate height in SwiftUI

    Expected Results

    It should give same height in SwiftUI world as defined in JSON?

    Code example, screenshot, or link to a repository:

    Attached already.

    opened by TakasurAtWork 19
  • How to pass an object (instead of plain text) into a screen request with POST method on Android?

    How to pass an object (instead of plain text) into a screen request with POST method on Android?

    Use case

    I'm working on a Beagle screen and I have created an API at Beagle BFF as follows:

    @PostMapping("/nBoxHome")
    fun getNBoxHome(@RequestHeader headers: Map<String, String>, @RequestBody tenant: SingleTenant) : Screen
    

    Specifically, on client, I have to pass a map of headers as header and an object called SingleTenant as request body. Normally I use loadView() method as Beagle lib provided for Android to request a screen and it works properly. Even when I try to use it along with a POST-method request and a null body, it works also. However, the problem occurred when I had to pass a SingleTenant object as body, I used gson to convert it to JSON string because the datatype for body must be a String, and I got the exception saying that:

    BeagleSDK: Exception thrown while trying to call http client.
    

    At Beagle BFF, I even didn't see any incoming request from the client, therefore I think that these API calls weren't executed successfully.

    If you guys have any idea or suggestion, please let me know. Thank you all in advance!

    Update

    I switched data type of RequestBody from SingleTenant to String and I still encounter the above error. Seemingly there is an error with ScreenRequest() on Android with non-null body.

    opened by hoangngv 18
  • eq doesn't work

    eq doesn't work

    Please provide all the information requested. Issues that do not follow this format are likely to stall.

    Description

    Please provide a clear and concise description of what the bug is. Include screenshots if needed. Please test using the latest Beagle release to make sure your issue has not already been fixed: https://github.com/ZupIT/beagle/releases

    Steps To Reproduce

    Provide a detailed list of steps that reproduce the issue.

    1. Launch the playground
    2. Run conditional-action.json with modification: replace gte function with eq function ...
    "onPress": [
            {
              "_beagleAction_": "beagle:condition",
              "condition": "@{eq(user.age, 18)}",
              "onTrue": [
                {
    

    ...

    Expected Results

    Setting the age to 18 will result buying a beer.

    What actually happen: never able to buy a beer.

    bug android iOS web epic help wanted 
    opened by brianchu 15
  • [iOS]  Analytics Screen

    [iOS] Analytics Screen

    Description

    On Beagle 1.10.1, the implementation for the analytics screen record is returning the remote url of the screen instead of the view controller identifier. This implementation is different from android where beagle is returning the identifier.

    Android code: https://github.com/ZupIT/beagle-android/blob/812a330777edd79a123495e9f678dc8f25a019f7/beagle/src/main/kotlin/br/com/zup/beagle/newanalytics/AnalyticsService.kt#L52

    iOS code: https://github.com/ZupIT/beagle-ios/blob/c44542d54f38a83bd935d5a66f0962b278745675/Sources/Beagle/Sources/Analytics/Service/RecordFactory.swift#L69

    Steps To Reproduce

    1. Create a remote screen. Example: BeagleScreenViewController(.remote(.init(url: "http://localhost:8080/timeline")))

    2. Set the analyticsProvider on Beagle.dependencies.analyticsProvider

    3. Create record will be called with the screen variable as the remote url, instead of the screen identifier.

    Expected Results

    Create record should be called with the screen identifier on the screen variable.

    Code example, screenshot, or link to a repository:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            let dependencies = BeagleDependencies()
            dependencies.analyticsProvider = Analytics()
            dependencies.urlBuilder = UrlBuilder(baseUrl: baseURL)
            dependencies.networkClient = Network()
            Beagle.dependencies = dependencies
            let beagleController = BeagleScreenViewController(.remote(.init(url: "http://localhost:8080/timeline")))
           
            window = UIWindow(frame: UIScreen.main.bounds)
            window?.rootViewController = beagleController
            window?.backgroundColor = UIColor.white
            window?.makeKeyAndVisible()        
            return true
    }
    
    class Analytics: AnalyticsProvider {
     
        func createRecord(_ record: AnalyticsRecord) {
            switch record.type {
            case .action(let action):
               return 
            case .screen:
                if let screenName = record.screen {
                    // REMOTE URL COMES AS THE SCREEN NAME
                }
            @unknown default:
                return
            }
        }
    }
    
    bug android 
    opened by mateusforgi 14
  • Error in context

    Error in context

    ERROR in node_modules/@zup-it/beagle-angular/components/beagle-markdown/beagle-markdown.component.d.ts(7,9): error TS1086: An accessor cannot be declared in an ambient context.

    bug web 
    opened by Nawan743 11
  • How to implement ListView multi view type?

    How to implement ListView multi view type?

    Use case

    I want to implement multi view type with ListView, but the template is only list of ServerDrivenComponent of one item's type. Could you tell me some advices?

    enhancement android iOS web 
    opened by ddthanh198 10
  • How to deserialize a JSON string to get ServerDrivenComponent manually?

    How to deserialize a JSON string to get ServerDrivenComponent manually?

    Use case

    I'm working on a cache solution in order to store Beagle Screen in JSON format locally on Android/iOS devices. Is there anyway enables me to manually deserialize JSON strings to get the ServerDrivenComponent? Thank you!

    Proposal

    opened by hoangngv 10
  • How to access style properties of a ServerDrivenComponent on Android?

    How to access style properties of a ServerDrivenComponent on Android?

    Use case

    Hi all, I open this issue to ask whether there is any built-in method in Beagle library or any way to access style properties of a ServerDrivenComponent on Android? For example I have a custom widget called FloatingButton, and at Beagle Backend I use it as follows:

    FloatingButton(
                 color = "#ffff00",
                 onPress = listOf(
                     OpenSettingScreen()
                 )
             ).setStyle {
                 backgroundColor = "#3596EC"
                 cornerRadius = CornerRadius(radius = 12.0)
                 size = Size(width = UnitValue(40.0), height = UnitValue(40.0))
             }
    

    For properties like color and onPress of FloatingButton as I used above, of course I can access them on Android but how about backgroundColor, cornerRadius and size, which are defined in setStyle block, how can I access them?

    If anyone has an idea, please let me know. Thank you! :D

    question 
    opened by hoangngv 9
  • How to tell when other component scroll into view?

    How to tell when other component scroll into view?

    Use case

    I want to do something to a component when other component scroll into view. They live in the same container parent. How can I do that?

    Proposal

    • Add an event like system to the JSON. Also let ListView (or GridView) send out that to each children.
    • Maybe write the data to the context (similar to implicit context added in 2.1)
    opened by brian-chu-twc 12
  • Revisão do readme.md

    Revisão do readme.md

    Esta edição faz parte do processo de revisão da Laboratoria Code Squads novembro 2020 da iniciativa Code for Development de @EL-BID

    Problema de revisão de documentação - readme.md:

    Tendo contrastado as informações apresentadas no repositório oficial com os campos solicitados no modelo de readme.md encontraram os seguintes pontos para melhorar:

    • [x] Adicione o logotipo para identificar o projeto.
    • [ ] Adicione uma imagem ou gif do projeto para identificar sua principal funcionalidade.
    • [ ] Incluir badges com o estado de desenvolvimento, licença, versão, cobertura, social ou outros. Esta ferramenta pode ser útil: https://shields.io/ (tutorial recomendado: https://www.youtube.com/watch?v=SIh5MQoQLPs)
    • [x] Forneça uma tabela com links para cada seção para funcionar como um índice.
    • [x] Especifique os pré-requisitos necessários para executar o projeto (ambiente, bibliotecas, dependências, entre outros), e forneça comandos de instalação para eles.
    • [x] Especifique se as variáveis de ambiente são necessárias e em qual parte da arquitetura elas são colocadas.
    • [x] Adicione uma lista de etapas que permitam a instalação e utilização do projeto localmente.
    • [x] Adicione o comando de execução para testes de unidade.
    • [x] Mencione as tecnologias utilizadas e adicione links referentes à documentação de cada uma.
    • [x] Se necessário, adicione trechos de código com exemplos de uso.
    • [x] Adicionar seção de autores.
    • [x] Adicione uma seção com o processo detalhado para contribuir com o projeto.
    • [x] Adicione uma seção especificando a licença de código aberto que está sendo usada redirecionando para o arquivo LICENSE.md.
    documentation good first issue low priority 
    opened by silotto 0
Releases(2.1.0)
  • 2.1.0(Nov 25, 2022)

    All Platforms

    • Multi-instances support: Beagle, before version 2.1, relied on singletons and, for this reason, could not be instantiated multiple times. This problem has been solved and although Beagle can still work like before (no breaking changes), it can also work in a way where multiple instances are allowed (useful for multi-module applications).
    • The ListView and GridView now create the implicit context “index” that tells the position of the current item in the list. To change the name of the implicit context, the property “indexName” has been added.
    • When an item of the ListView or GridView is altered from within the List or Grid, this change will now propagate to every other component that depends on the same data source.
    • The operations eq, gt, lt, gte, lte, sum, subtract, multiply and divide now have implicit type coercion, i.e. they can operate with different data types. Examples: eq('18', 18) returns true, even if the type is different; sum(10, 20.2) returns 30.2, even though the arguments types differ.
    • New operations: int, double and string. They all accept a single argument and converts the type of the data.

    iOS

    • Fixes problem where a space could make an operation unreadable inside an expression.
    • The Image Provider now supports multi-module applications.
    • The BeagleScreenViewController was made public.

    WEB

    • Fixes the image mode of the Image Component on React.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Apr 4, 2022)

    General

    • All deprecated code has been removed from all plataforms.
    • Customizable caching system through the new "ViewClient" service. The ViewClient is built on top of the HttpClient and only serves to retrieve server driven screens, which makes it much easier to implement non-standard behavior for screen requests.
    • Navigation context: It is a specialized Context ideal for sending information in a server driven screen stream.
    • Style values via Expressions: Several style properties now support expressions, making it possible to implement themes in the application's Global Context. These properties are: backgroundColor, borderColor, borderWidth, cornerRadius, size, margin, padding, position and flex.basis.
    • Updates the Alert and Confirm actions: These elements now support multiple actions.
    • Updates the Analytics 2:
      • It now includes the "rootId" property that reports the id of the first component that appears in the UI tree. This was done as we noticed that some users used this id to identify their screens.
      • Since Analytics 1 was deprecated and removed, Analytics 2 now is refered as just Analytics.
    • Updates the ScreenComponent:
      • The "navigationBar.items[i].action" property has been renamed to "onPress" and now supports multiple actions.
      • The "identifier" property has been removed, leaving only "id".
      • The "navigationBar.items[i].image" property now accepts Expression, which should be the mobileId of the image.

    Flutter (new!)

    • Beagle now works in Flutter too! Check out our documentation to learn how to use it.

    Typescript Backend (new!)

    • The Beagle backend (BFF) can now also be written with Typescript and JSX, if you know React, you will quickly get familiar with this new way of declaring server driven screens. In addition, we made use of the full potential of the language to ensure that the types of contexts and operations are always correct, allowing for much safer and more intuitive programming! Check out our documentation to get started!

    Android

    • Java 8 support has been returned to the platform.
    • Adds BeagleTypeAdapter: Creates a class responsible for serializing/deserializing json components that users can now use to build custom type adapters that have attributes with types known by Beagle.
    • Fixes bug where sendRequest didn't raise onError event.
    • Fixes bug in ListView where nested lists generated incoherent ids.
    • Fixes bug where the onInit event, in components that supports it, was triggered again when returning to a previous screen (popView).
      • Attention: if your application uses this wrong behavior that only happened on Android, it will be necessary to review the code. Let us know via our GitHub if you really need an event that fires whenever the page is "shown" and not "started".
    • Fixes bug where Analytics crashed the application if the backend passed the "additionalEntries" property.

    iOS

    • Refactored some of the lib's internal code to improve maintainability, scalability, and stability.
      • New container for deserializing components and actions using a property wrapper. It is no longer necessary to implement custom serialization for components containing actions or other components.
        • https://docs.usebeagle.io/v2.0/ios/customization/custom-widget/custom-widget/
        • https://docs.usebeagle.io/v2.0/ios/customization/custom-actions/custom-action/
      • New dependency structure with injection via property wrappers.
        • https://docs.usebeagle.io/v2.0/ios/customization/dependencies
      • Improvements to the networking API that add more power and ease for the developer.
        • https://docs.usebeagle.io/v2.0/ios/customization/dependencies/network-layer
      • Improved BeagleRenderer adds AutoLayoutWrapper automatically if needed.
        • https://docs.usebeagle.io/v2.0/ios/customization/custom-widget/custom-widget
      • Fixed a bug that prevented the user from setting transparency in the Screen's backgroundColor.
      • Removes widgetProperty property for compatibility with other platforms. The style, id and accessibility properties now come in the component root, making it easier to create custom components.

    Web

    • Navigation subsystem was refactored to ensure better customization by platforms that use Beagle Web Core (React, Angular and Flutter).
    • Loop rendering function has been refactored to ensure interoperability with Beagle Flutter.
    • Fixes bug where Text component would not render number 0 or boolean false.
    • Fixes bug where Button component did not render non-string text.
    • Fixes the "platform" header to send the value expected by the backend: "WEB".

    Kotlin backend

    • Contexts and operations can now be typed, making it easier and safer to develop server driven screens using the Context feature.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.3-iOS(Sep 20, 2021)

  • 1.6.2-android(Sep 13, 2021)

    Bug Fixes

    Update the support android library from TextView to AppCompatTextView Updates library on BeagleView Factory from EditText and Button to AppCompatEditText and AppCompatButton

    Source code(tar.gz)
    Source code(zip)
  • 1.9.0(Jul 2, 2021)

    Release notes 1.9.0

    Changes:

    Features

    • improve Appium tests CI/CD strategy (#1599)
    • Adds jacoco (#1621)
    • Sonarcloud (#1628)
    • removes module dependency from Beagle and uses lib import instead (#1629)
    • add Android pull to refresh component (#1636)
    • improve Appium iOS tests speed (#1645)
    • iOS - Pull to Refresh Component (#1648)
    • iOS - Adds init from Encodable to DynamicObject (#1650)
    • pullToRefresh Appium tests (#1651)
    • flutter/scrollView (#1658)
    • flutter: implement missing features of TextInput and fixes bugs (#1661)
    • add gridview in backend and android (#1663)
    • GridView span count and direction (#1657)
    • iOS - AutoLayoutWrapper enhancement (#1669)
    • improve Appium iOS tests speed (#1656)
    • add default logger in beagle (#1679)

    Bug fixes

    • contract adjustment grid view (#1595) (#1601)
    • adjustment contract grid view (#1596) (#1600)
    • improvements in Appium tests (#1619)
    • popView with a single view in stack (#1616)
    • Appium Android app compilation (#1627)
    • Navigation tests on iOS (#1635)
    • adjust proguard (#1638)
    • Flutter lib upgrades + fix to image component (#1641)
    • iOS - PullToRefresh with Text (#1652)
    • components and actions in Flutter are now case insensitive (#1654)
    • text component when is aligned to center (#1659)
    • flutter: page view (#1662)
    • flutter: tabbar and image (#1666)
    • flutter: webview component must react to changes in the url property (#1672)
    • adjust deploy release (#1682)

    Code refactoring

    • remove project automated test (#1605)
    • update dependencies and necessary code (#1608)
    • Android serialization tests (#1622)
    • android view factory (#1639)
    • remove debug logs (#1673)
    • rename field custom operation to operation (#1675)
    • remove class beagle config (#1676)
    • remove shared preferences and use memory to save data (#1677)

    Building system

    • adjust automated test (#1607)
    • adjust docs (#1611)
    • update dependencies beagle android (#1614)
    • iOS - Update Beagle Dependencies (#1606)
    • iOS - Remove legacy tests (#1615)
    • adjust PullToRefresh (#1653)
    • update tests (#1681)

    Testing

    • create unit test to gridview (#1602)

    Other work

    • impl (#1594)
    • Changing path of web images (#1624)
    • Creates a separated BeagleContainer component and implements the onInit event. Fixes a bug within the BeagleText component. (#1655)
    Source code(tar.gz)
    Source code(zip)
  • 1.8.1-backend(Jun 1, 2021)

  • 1.8.1-android(Jun 1, 2021)

  • 1.8.0(Jun 1, 2021)

    Release notes 1.8.0

    Changes:

    Features

    • iOS Appium tests with deep links (#1493)
    • add support to bind in field value in action add children (#1544)
    • Adds Android GridView (#1550)
    • add yoga from repository in zup (#1553)
    • Adds bridge communication for loggers (#1549)
    • add component grid view in backend (#1563)
    • Grid View in iOS (#1557)
    • listview in Appium (#1571)
    • Android listView multiple templates support (#1590)
    • iOS ListView/GridView templates (#1585)

    Bug fixes

    • popToView error message when route doesnt exist (#1517)
    • PageView component size (#1524)
    • image resize behaviour on android. Adds and refactor imageView tests (#1548)
    • adjust image corner radius (#1552)
    • support expression in action AddChildren (#1547)
    • android RequestData constructor and utilization (#1562)
    • GlobalContext set object (#1566)
    • android image placeholder reset (#1572)
    • allow to use applyStyle and applyFlex in the same implementation (#1573) (#1576)
    • run BFF on custom branch (#1579)
    • image android with screenshot tests (#1578)
    • iOS - ListView layout changes (#1556, #1581) (#1582)
    • ListView's manager id and GridView contract (#1593)

    Code refactoring

    • remove codecov by security (#1537)
    • remove widgetView inheritance from PageIndicator component (#1592)

    Building system

    • ignore appium yml (#1519)
    • link update (#1520)
    • add doc in backend and android to component gridview (#1564)
    • update Gemfile.lock (#1580)
    • updates the http client default (#1587)

    Documentation

    • iOS - Add some code documentation for components and actions (#1567)

    CI/CD

    • update horusec script (#1526)

    Other work

    • fix keys (#1516)
    • Update PULL_REQUEST_TEMPLATE.md (#1518)
    • update (#1588)
    Source code(tar.gz)
    Source code(zip)
  • 1.7.1-backend(May 19, 2021)

    Release notes 1.7.1-backend

    Changes:

    Bug fixes

    • allow to use applyStyle and applyFlex in the same implementation (#1573)
    • remove codecov to release (#1575)
    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Apr 23, 2021)

    Release notes 1.7.0

    Changes:

    Features

    • action open external url (#1379)
    • create component to load screen. (#1377)
    • add screen request in flutter (#1392)
    • flutter action open native route (#1380)
    • deprecated field isLoggingEnabled in beagle sdk and BeagleDependencies (#1408)
    • create field enabled in text input and deprecated field disabled (#1407)
    • add support to add parameters in request to push view (#1411)
    • custom operations (#1412)
    • Adds BuildContext reference to ActionHandler (#1413)
    • Improve iOS test script setup step (#1429)
    • add to support to style id in Container (#1455)
    • add new Layout Widgets: Center, Column and Row. (#1457)
    • create a beagle flex view to others developers use (#1466)
    • add support to additional data on navigate action (#1424)
    • add methods observer and evaluate in bind (#1468)
    • Adds secret manager configuration (#1485)
    • added support to empty children to Beagle components (#1503)
    • added bindable fields to navigate methods (#1507)
    • Adds support to beagle gRPC library (#1497)
    • iOS - Add SPM support (#1484)

    Bug fixes

    • iOS - SubmitForm validations (#1389)
    • make triggered scripts run on custom branch (#1394)
    • changed Android PageView component to suit BFF contract (#1420)
    • PageView retain cycle (#1434)
    • iOS - TextInput enabled custom style config (#1440)
    • iOS - ErrorView retry block (#1428)
    • adjust crash when passing color in page indicator (#1452)
    • adjust instance of text (#1456)
    • including missing files (#1476)
    • analytics test fix on Android (#1479)
    • analytics tests (#1481)
    • add conditional to dokka s3 upload steps (#1480)
    • image downloader test (#1483)
    • RecyclerView id access from ListView (#1489)
    • iOS - TextInput disabled without expression (#1486)
    • renderScreen replacement method (#1495)
    • micronaut starter stopped hanging when underlying client fails (#1502)
    • mantain the image aspect ratio (#1494)
    • iOS - Make children property optional (#1498)
    • support expression in actions OpenExternalURL, OpenNativeRoute, PopToView (#1505)
    • shouldPrefetch variable is nullable (#1510)
    • toolbar set title in beagle android (#1513)

    Code refactoring

    • Refactored BeagleJSEngine and added unit tests (#1388)
    • move dependencies to service locator (#1395)
    • remove deprecated tests (#1417)
    • deprecated dsl in backend (#1431)
    • adjust body parameter http additional data in route remote (#1454)

    Building system

    • Adds flutter tests (#1397)
    • update codeowners (#1435)
    • adjust error in horusec (#1441)
    • release 1.6.1 android into master (#1462)
    • update danger file (#1471)
    • Update CODEOWNERS (#1506)
    • iOS - Update dependencies in Podspec and Package.swift (#1511)

    Testing

    • change button attribute to enabled (#1409)

    Documentation

    • generating kdocs and uploading them (#1391)

    Other work

    • alert messages changed with onError and on success (#1384)
    • removing lazy component scenario (#1422)
    • fix page layout of listView tests (#1423)
    • tests removal (#1448)
    • make unowned references weak (#1443)
    • adding styleId on container (#1465)
    • impl (#1470)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1-android(Mar 24, 2021)

    Release notes 1.6.1-android

    Changes:

    Bug fixes

    • adjust crash when passing color in page indicator (#1452) (#1458)
    • error when passing analytics null (#1460)
    Source code(tar.gz)
    Source code(zip)
  • 1.6.2-iOS(Mar 23, 2021)

    Release notes 1.6.2-iOS

    Changes:

    Bug fixes

    • iOS - make unowned references weak (#1443)

    BREAKING CHANGES

    • the property controller in BeagleRenderer is now weak
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1-iOS(Feb 25, 2021)

  • 1.6.0(Feb 24, 2021)

    Release notes 1.6.0

    Changes:

    Features

    • add android test library (#1252)
    • iOS - Disabled button (#1250)
    • integrate core web in flutter (#1249)
    • Adds support for generation of dokka documentation to hugo md files (#1276)
    • navigator for Beagle Flutter (#1275)
    • flutter navigation controller (#1284)
    • flutter global context (#1289)
    • flutter persistent storage (#1290)
    • flutter Renderer API (#1291)
    • Analytics 2.0 (#1222)
    • disabled button (#1273)
    • added default settings to support the proguard (#1314)
    • add flutter default button (#1320)
    • add flutter default text component (#1321)
    • adds parse color (#1327)
    • Add default TabBar component (#1329)
    • change name field disabled to enabled (#1325)
    • Adding scrollIndicator to the ListView in Beagle Backend (#1319)
    • Adding scrollIndicator to the ListView in Beagle Android (#1318)
    • add action analytics in backend (#1265)
    • add support to accessibility header in android and backend (#1333)
    • Adding scrollIndicator to the ListView (#1294)
    • add flutter default image (#1334)
    • add style in component button (#1335)
    • accessibility header (#1341)
    • Add flutter logging support (#1339)
    • add style in component text (#1336)
    • add flutter default page indicator and touchable components (#1343)
    • default error view (#1330)
    • add form validation (#1354)
    • create analytics 2 (#1296)
    • Add flutter default WebView component (#1348)
    • some improvements on Analytics 2.0 (#1349)
    • Appium GitHub workflow scripts (#1285)
    • form validation (#1358)

    Bug fixes

    • publish libraries backend (#1221)
    • add controllerId to action resetApplication (#1226)
    • android listview context reference (#1233)
    • Contributing Markdown File (#1255)
    • iOS - add missing field controllerId when decoding action resetApplication (#1240)
    • screen to component (#1262)
    • letting beagleLoggerProxy public (#1303)
    • Local image crashing with invalid asset (#1337)
    • adjust appearance of button when there's no style (#1347)
    • iOS beagle view backgroundColor and server driven state (#1326)
    • remove queue on analytics2 android (#1359)
    • remove analytics Queue implementation (#1361)
    • timestamp and beahvior when both global config and action config are enabled (#1368)
    • correct param names in test script (#1371)
    • breaking change due to new analytics attribute on actions (#1376)
    • iOS - Fix ContextExpression parser (#1381)
    • iOS - Fix a crash when action not registered is triggered (#1387)

    Code refactoring

    • create BeagleScope to remove GlobalScope (#1166)
    • iOS - Remove BeagleSchema (#1118)
    • fix form validation always submit action (#1356)
    • Change the AnalyticsRecord (#1365)
    • string extension (#1370)
    • flutter image component now uses FutureBuilder (#1367)
    • action analytics (#1372)
    • deprecated field hidden (#1385)

    Building system

    • improve android ListView unit Tests (#1245)
    • release 1.5.1 android (#1247)
    • Update CODEOWNERS (#1315)
    • put iOS gitignore on root, so appium gets it (#1323)
    • remove pubspec.lock files from project (#1332)
    • Adds flutter components doc (#1353)
    • improve flutter tests (#1364)

    Testing

    • adds functional page view tests (#1155)
    • listview automated tests (#1218)
    • adds unit tests for the toolbar title generator (#1236)
    • add funcional test to textinput component (#1216)
    • Beagle Appium tests + wiki (#1268)
    • add unit tests to textinput component (#1281)
    • add unit test to ViewRendererFactory (#1292)
    • analytics2 (#1362)

    CI/CD

    • horusec manager add template (#1248)
    • fix cache usage in our workflows (#1328)
    • adjust horus with new rules (#1351)

    Other work

    • iOS - aborting local image asset load for empty mobileId (#1243)
    • fix codecov config (#1251)
    • Update codeowners (#1299)
    • Unit tests were created for BeagleMessageLogs (#1298)
    • remove unnecessary variables (#1374)
    • update documentation (#1378)
    • add behaviour in lazy component to show error when failed request (#1386)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.1-android(Dec 15, 2020)

    Release notes 1.5.1-android

    Changes:

    Bug fixes

    • image view remote (#1229)
    • adjust corner radius button
    • android listview context reference-s (#1235)
    • sonar timeout (#1246)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Dec 3, 2020)

    Release notes 1.5.0

    Changes:

    Features

    • add new state called OnCanceled when user press to back and has request doing this callback it is called(#1021)
    • change Style.display to expression (#1062)
    • adds Container instrumentation tests (#1065)
    • add OnInitiableComponent with observable AsyncActions (#1079)
    • add support to bind in the display to the backend (#1087)
    • add support to bind in Display (#1086)
    • create id manager and add support to views without id in contextDataManager (#1090)
    • add name to Horusec workflow (#1091)
    • add new attribute id in screen and deprecated field identifier (#1100)
    • iOS ListView (#805)
    • custom operations (#1096)
    • add Android ListView (#1097)
    • add support to custom operation (#1117)
    • add OnInitViewModel to handle onInit status on Android (#1134)
    • handle config changes for onInit calls (#1146)
    • Add union context operation (#1149)
    • iOS - Union Operation (#1160)

    Bug fixes

    • image and simple form test (#1037)
    • detekt rules and code smells (#1045)
    • hotfix version 1.3.1 for Android (#1064)
    • listView template component with id and context (#1124)
    • rename ListView property scrollThreshold to scrollEndThreshold (#1131)
    • iOS - Automated tests configuration fix (#1136)
    • adjust scroll horizontal (#1126)
    • adjust the type declaration method of the textInput component (#1135)
    • iOS - Fixes evaluate multiple expression when returning type is differente from String (#1139)
    • android listview scroll threshold calculation (#1151)
    • Android embedded listview without id (#1154)
    • Add useParentScroll property to ListView (#1162)
    • adjust compile testing to use type test implementation (#1165)
    • android listview oninit actions not been called for template items (#1211)
    • Adjust android listView scroll threshold calculation (#1215)
    • Android listView id management (#1217)
    • adjust version dokka (#1219)
    • remove task close and publish really, because they always create multi stagies profiles and fail (#1220)

    Code refactoring

    • add interface contextcomponent in simpleForm (#1040)
    • remove shared code between android and back-end (#1055)
    • move module kotlin-core to inside Beagle Android (#1056)
    • migrate unit test to junit 5 (#1098)
    • change name function to operation (#1103)
    • create new annotation register operation and use in internal actions (#1107)
    • create class to represent the types supported in parameter to operation (#1112)
    • changed listview scroll listener (#1129)
    • adjust name module utils to shared (#1127)
    • unifying annotation module (#1143)
    • remove code commented in jacoco to ignore some classes (#1153)
    • move constant to variable local to help develop understand the deprecation message (#1210)

    Building system

    • merge 1.4.0 into master (#1082)
    • updated backend modules' dependencies (#1133)
    • add automated-tests on horusec (#1167)

    Testing

    • navigate - automated tests (#1025)
    • add instrumentation test to component Text (#1053)
    • adds new unit tests to text input components (#1085)
    • adds SendRequest functional tests (#1035)
    • create test add children (#1034)
    • functional tests improvements (#1101)
    • adds Alert action functional tests (#1110)
    • refactor functional Text tests (#1111)
    • functional tests to textinput component (#1104)
    • functional tests to scrollview component (#1106)
    • functional tests to simple form component (#1132)
    • conditional action ui tests (#1130)
    • functional tests simple form (#1137)
    • ios - functional tests to simple form component (#1140)
    • add test to internal processor (#1138)
    • setContext tests (#1141)
    • add test in android processor (#1150)
    • confirm action ui tests (#1144)
    • action not registered on frontend (#1152)
    • add unit test to unit value extensions (#1157)
    • add test unit test to widget extensions (#1158)
    • add funcional test to scrollview component (#1172)
    • add test to preview activity (#1173)
    • tab bar functional tests (#1164)
    • adds lazy component funtional tests (#1171)

    CI/CD

    • changed workflow to enable release from any branch (#1080)
    • create ci to security (#1083)

    Other work

    • refator: remove OnStateUpdatable interface as it is not being used (#1041)
    • fix addChildren schema (#1049)
    • path parser fix (#1060)
    • fix file header template (#1075)
    • Adds the network client default implementation. (#1089)
    • adjust crash in cache manager (#1092)
    • Adds carlossteinzup as android codeOwner (#1099)
    • fix alert parameter's default value (#1109)
    • Update CODEOWNERS (#1115)
    • update codeowners (#1120)
    • adding jaco as codeowners (#1121)
    • Removes some screen elements of scroll view tests. (#1128)
    • I added myself as a code owner (#1156)
    • Fixing Xcode 12 dependencies problem and tests. (#932)
    • refactor test (#1168)
    Source code(tar.gz)
    Source code(zip)
    release-note_01.png(180.56 KB)
  • 1.4.1-android(Nov 5, 2020)

  • 1.4.0(Oct 23, 2020)

    Release notes 1.4.0

    Changes:

    Bug fixes

    • parse color when is RGB size (#1033)
    • adjust http client default to handle exception when set body (#1050)
    • adjust override title when navigate in screen (#1052)
    • adjust context evaluation to return correct types (#1043)
    • maxSize cache of ContextBinding (#1058)
    • BeagleFragment breaking change (#1057)
    • scroll view content now can grow to match screen height
    • adjust some fake vulnerability changing the names used (#1071)
    • Remove default implementation of Cache, HttpClient and BeagleLogger (#1070)
    • adjust log to show toast on PreviewActivity.kt (#1072)
    • remove default implementation of Cache, HttpClient and BeagleLogger (#1073)
    • fix addChildren schema (#1049)
    • path parser fix (#1060)

    Other work

    • adjust preview
    Source code(tar.gz)
    Source code(zip)
  • 1.3.1-iOS(Oct 21, 2020)

    Release notes 1.3.1-iOS

    Changes:

    Bug fixes

    • ScrollView content now can grow to match screen height
    • AddChildren mode attribute consistency between platforms (#1049)
    • paths in expressions can now start with a digit. Example: "@{2context.2path}" (#1060)
    Source code(tar.gz)
    Source code(zip)
  • 1.3.1-android(Oct 21, 2020)

    Release notes 1.3.1-android

    Changes:

    Bug fixes

    • parse color when is RGB size (#1033)
    • adjust http client default to handle exception when set body (#1050)
    • adjust override title when navigate in screen (#1052)
    • adjust context evaluation to return correct types (#1043)
    • maxSize cache of ContextBinding (#1058)
    • BeagleFragment breaking change (#1057)
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Oct 13, 2020)

    Release notes 1.3.0

    Changes:

    Features

    • add support to default activity (#880)
    • create BeagleView (#891)
    • conditional action android (#898)
    • add support to bind in class image (#915)
    • adding expression support to remote navigation (#922)
    • add expression support in remote route navigation (#890)
    • add support to bind in menu (#938)
    • iOS Auto-Layout Yoga interworking (#924)
    • add automation test (#912)
    • add documentation to all public components on the beagle android (#978)
    • add documentation to all public action on the beagle android (#977)
    • iOS add border parameters in Style (#1008)
    • iOS - Image Downloader Dependecy (#999)
    • add possible user override download image (#917)
    • add border parameters in style android and backend (#1024)
    • image expression (#914)

    Bug fixes

    • Merge 1.2.1-android patch with master (#881)
    • widgets styles that uses view size don't work properly (#902)
    • send request bindable fields (#927)
    • Hotfix version 1.2.2 for Android (#918)
    • adding deprecated constructor to navigate (#930)
    • add focus in component text input (#937)
    • Not passing additional data in request (#940)
    • iOS - multiple expression binding when using cache (#943)
    • dynamic object default string conversion (#909)
    • textInput onBlur (#944)
    • resize view when inside the scroll layout (#952)
    • adjust visibility gone in yoga layout (#966)
    • 1.2.2 iOS release (#961)
    • adjust request with json array (#980)
    • adjust unit test sample (#981)
    • Global Context (#945)
    • make extendsFromClass check all super classes in hierarchy (#987)
    • app crash when use a JSON without ScreenComponent on startActivity (#982)
    • fragment transition toolbar glitch (#1009)
    • iOS binding triggers layout change (#995)
    • adjust add children name action (#1029)
    • navigation crashing when open a invalid route and poptoview not working to first route. (#1027)

    Code refactoring

    • add new function to get expression (#921)
    • remove deprecated from constructor (#953)
    • renamed class AddChildrenAction to AddChildren (#959)
    • adjust component request tests scenarios to be more reliable (#963)
    • adjust package name beagle in automated test (#984)
    • documentation public class backend (#972)

    Building system

    • merge release/1.2.1-iOS hotfix with master (#875)
    • update code owners (#885)
    • update libraries android (#935)
    • adds support for web to the image test (#1022)
    • documentation package at the beagle android (#997)

    CI/CD

    • iOS update podspec version and tag independently so hotfix works (#869)

    Other work

    • Creating and testing new Condition action (#916)
    • fix form validation error (#946)
    • change example navigation screen to declarative (#979)
    • fix DynamicObject set(value: with path:) (#989)
    • Add a way to dismiss the numeric keyboard. (#985)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.3-iOS(Sep 29, 2020)

  • 1.2.2-iOS(Sep 22, 2020)

    Release notes 1.2.2-iOS

    Changes:

    Features

    • create BeagleView (#891)
    • iOS Auto-Layout Yoga interworking

    Bug fixes

    • widgets styles that uses view size don't work properly (#902)
    • TabView (deprecated) was hiding navigation bar when page changed
    • Not passing additional data in request (#940)
    • multiple expression not working when observing due to cache
    Source code(tar.gz)
    Source code(zip)
  • 1.2.2-android(Sep 15, 2020)

    Release notes 1.2.2-android

    Changes:

    Features

    • Improve cache (#893)
    • add support to user register adapter to moshi (#895)

    Bug fixes

    • Expression is evaluating to null for specific cases (#896)
    • SendRequest action mapper (#899)
    • call removeAllViews before addView (#905)

    Code refactoring

    • deprecation messages (#903)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.1-android(Sep 4, 2020)

    Release notes 1.2.1-android

    Changes:

    Features

    • Generating extra class for Widget and Actions registration (#876)

    Bug fixes

    • adjust update context in tabbar and pageview (#855)
    • improve generate id to async view (#854)
    • adjust method loadview (#857)
    • removed background work from main thread (#858)
    • Context data manager (#853)
    • adjust android action generator class (#863)
    • deserializes integer double in context (#865)
    • escape string literal (#871)
    • objects inside arrays are converted to String (#872)
    • assert made in moshi tests (#873)
    • Fix logic that replace expressions for values (#874)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.1-iOS(Sep 3, 2020)

    Release notes 1.2.1-iOS

    Changes:

    CI/CD

    • iOS update podspec version and tag independently so hotfix works (#866)

    Other work

    • Making rendering methods public again
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Aug 28, 2020)

    Release notes 1.2.0

    Changes:

    Features

    • create initial flutter project (#735)
    • context operations android (#687)
    • encode urls before http calls (#791)
    • add parameter rootview in deeplinkhanlder (#785)
    • add children action on Android (#834)
    • support multi activities in beagle (#827)
    • Improve rendering callbacks when Loading, Finished and Error (#826)
    • add method to check if the activity have a server driven screen loaded (#800) (#818)
    • context evaluation for views added asynchronously (#836)
    • iOS - Context Operations (#699)
    • Context Operations integrated (#831)
    • AddChildren Action (#792)
    • Improve rendering callbacks when Loading, Finished and Error (#832)
    • iOS - Support multiple navigations in Beagle (#840)

    Bug fixes

    • webView breaking constraints (#720)
    • updated gems used by Fastlane and Danger (#727)
    • image placeholder (#736)
    • iOS Button now have a default style equals to system style (#760)
    • adjust codecov to ignore some classes because they need to run in instrumentation test (#771)
    • image placeholder on android (#784)
    • android hotfix for version 1.1.1 (#786)
    • iOS screens on demo (#799)
    • show place holder and error when loading and the request url error (#823)
    • generate view ids (#817)
    • configBinding retain cycle (#820)
    • generate id on Android if some error happen (#828)
    • adjust import (#841)
    • Charset adequacy to support minimum api 19 (#843)
    • moshi serialization (#844)
    • updates on view (#807)
    • Text dark mode behavior (#822)
    • making init in network structs inside log public (#848)
    • deserializes integer double (#824)
    • parse expression with index path (#851)

    Code refactoring

    • tab bar component layout implementation (#714)
    • Unit test refactor to conform with guidelines (#691)
    • added interfaces for components with child, children and onInit properties (#815)
    • added rootView to BeagleFlexView as parameter on Android (#819)

    Building system

    • add backend code owner (#739)
    • change PR template to improve DX (#798)
    • Update CODEOWNERS (#845)

    Documentation

    • documents the Navigate file (#665)

    CI/CD

    • fix problem of generating release notes (#734)
    • improved caching with prior keys (#765)
    • improved Codecov reporting (#778)

    Other work

    • Links were updated (#769)
    • adjust flag codecov (#777)
    • Configuring sonar to exclude sample dir (#806)
    • fix execute actions with implicit context (#837)
    • create hasServerDrivenScreen function in BeagleScreenViewController (#842)
    • Adding SwiftLint to BeagleDemo (#850)
    Source code(tar.gz)
    Source code(zip)
  • 1.1.2-android(Aug 24, 2020)

  • 1.1.1-android(Aug 18, 2020)

    Release notes 1.1.1

    Changes:

    Bug fixes

    • load view error with successive calls to same url (#731)
    • SendRequest for Android Declarative. (#741)
    • WebView component should not handle ssl errors (#767)
    • Bind deserialization for Map and List (#773)
    • Global context does not clear cache (#764)
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Aug 10, 2020)

    Release notes 1.1.0

    Changes:

    Features

    • update beagle sample (#429)
    • Adds support for registering internal widgets by annotation processing (#387)
    • adds SimpleForm as the default way to implement a form with Beagle (#464)
    • Update spring and micronaut starters vesions (#550)
    • Adding cache to ci (#556)
    • updated backend cache defaults (#578)
    • improving Swift DSL with function builders (#600)
    • Add context binding evaluation cache (#596)
    • compile plataforms independents (#594)
    • Expression evaluates null (#608)
    • cache iOS dependencies (#610)
    • beagle retry android (#631)
    • implementing global context for iOS. (#602)
    • backend cache ttl configuration (#601)
    • TabBar Componnent (#620)
    • set possibility of escape expressions (#640)
    • context improvements iOS (#613)
    • allow developers to retry an unsuccessful request (#627)
    • Action.execute improvement iOS (#639)
    • migrate to maven central (#625)
    • kotlin dsl (#644)
    • android global Context (#641)

    Bug fixes

    • change the value to postValue on ViewModel (#413)
    • adjust in TextView for not ignoring attributes (#371)
    • image placeholder on Android and Backend (#428)
    • platform specification in Spring with disabled cache (#434)
    • label action's regexps (#433)
    • page view crash with empty array of pages and breaking constraints (#431)
    • ignoring push events for master (#441)
    • typo in git_commit.sh in Fastfile (#443)
    • Beagle iOS Carthage support (#448)
    • LiveData onActive to not call twice (#453)
    • Form remote content type (#442)
    • context lose its data when screen rotates (#466)
    • adjust url remote (#468)
    • string evaluation for JSON (#452)
    • Fixing bug in beagle platform logic with services that not returns json data (#467)
    • applyStyle method uses flex object (#454)
    • CacheManager normalize headers before use (#487)
    • Implicit context for data type that is not string and removed de… (#486)
    • Undefined actions to not crash when trying to deserialisate (#493)
    • crash when malformed color is provided (#492)
    • UndefinedWidget was not working for InputWidget and PageIndicato… (#515)
    • adjust text input (#531)
    • include jni import to fix the crash that was happen in minSdk 23+ (#551)
    • coexisting cache filters with CORS (#483)
    • cancel image request (#529)
    • renamed deploy to CI/CD in labeler settings (#557)
    • Context for SendRequest and SetContext (#555)
    • Run codecov on push to master (#564)
    • codecov badge and backend settings (#567)
    • updated backend CI to generate jacoco report (#569)
    • ViewGroupExtensions loadView method does not evaluate contexts (#565)
    • Update CODEOWNERS (#573)
    • Fixes bug related to fetch components done at wrong moments (#588)
    • clear bindings from destroyed views (#589)
    • custom components registering (#591)
    • Context evaluation for values that is not string (#584)
    • CacheManager normalize headers before use (#488)
    • live preview android plugin dependency and navigation (#611)
    • update handleEvent params (#604)
    • dependence on specific attributes in android styles (#582)
    • Toolbar with centralized title (#609)
    • Removing warnings and organizing build scripts (#612)
    • added test platform settings in Micronaut starter (#619)
    • fetch the screen before the navigation (#614)
    • Android context cache (#629)
    • broken links in readme (#568)
    • iOS - lazy component using cache (#630)
    • wrong context data evaluate (#624)
    • correct toolbar menu (#562)
    • adds extension variable for beagleComponent on View class. To set the tag with the resourceId (#621)
    • fixed readme links (#633)
    • page view (#635)
    • context in PageView and LazyComponent (#606)
    • delete duplicate TabViewUIComponent file (#664)
    • SendRequest deserialization (#642)
    • remove internal keyword (#679)
    • evaluate expression with variable string name value was the same as context id. (#676)
    • set the Android listener before loadView method is called (#681)
    • android webview without defined size (#682)
    • beagle components fetch and deserialization was taking place on the main thread (#667)
    • ios component registering (#683)
    • skip publishing shared modules when releasing backend (#689)
    • configured Beagle user for automatic commits (#693)
    • context escape ignore double quote (#700)
    • change pathType to imagePath (#701)
    • remove builder to reduce dex counter (#703)
    • backend's transitive dependencies (#706)
    • Avoid showing cold cache from disk (#718)
    • Adds method to configure SoLoader in test mode, this is needed to use beagle with robolectric (#704)
    • Context DynamicObject transform in iOS 12 prior (#717)
    • set secret keys in env variables (#723)

    Code refactoring

    • adding a beagle schema component for testing (#424)
    • migrated bff sample syncs to fastlane (#439)
    • navigate (#432)
    • page view context interaction (#571)
    • page view android (#599)
    • tab view android (#636)
    • Change context to be linked with view (#659)
    • context attribute change is not mandatory (#675)
    • changing the context value passed in the beagleWebViewClient class (#696)
    • changed the parameters position in GlobalContext.set constructor (#719)
    • tab bar component layout implementation (#714)

    Building system

    • fix begle word for Beagle (#405)
    • create PR template (#406)
    • create code of conduct (#407)
    • automatically label PRs (#417)
    • remove READMEs which contents are already being covered inside docs (#435)
    • Update test retry (#643)

    Documentation

    • update issue templates (#447)

    CI

    • add CocoaPods as a gem dependency so we can use it properly on CI (#403)
    • adjust ci to not run codecov or danger when open external pr (#412)
    • remove code owners and readme (#469)
    • iOS CocoaPods integration test workflow (#663)
    • iOS when releasing Pods, tries to avoid eventual consistency problem (#705)
    • Create automatic pr from patch (#655)
    • changed release workflow to support hofixes (#661)

    Other work

    • fix navigation inside PageView (#473)
    • remove internal keyword (#549)
    • Change event name of PageView (#597)
    • fix null tab (#658)
    • Deleting old reference (#668)
    • Update build.gradle (#685)
    • Path fix for iOS swiftlint file. (#697)
    • removing release badge (#702)
    • changed name from PathType to ImagePath (#709)
    • deleted extra ',' (#721)

    BREAKING CHANGE

    • The path attribute of the Image component has been renamed from PathType to ImagePath
    • The unique style attributes of Beagle Android have been replaced by natives. For more details access the style session at https://docs.usebeagle.io.
    • observeBindChanges method on Beagle Android returns nullable values
    Source code(tar.gz)
    Source code(zip)
Owner
ZUP IT INNOVATION
ZUP IT INNOVATION
Proof of concept Android WebView implementation based on Chromium code

Deprecation Notice This project is un-maintained. The recommended alternative is the Crosswalk Project. I did not have the time to keep the project up

Victor Costan 1.7k Dec 25, 2022
GreenDroid is a development library for the Android platform. It makes UI developments easier and consistent through your applications.

#GreenDroid Foreword : This project, initially initiated by me, Cyril Mottier, is not maintained anymore and can be considered as deprecated. As a con

Cyril Mottier 2.6k Jan 4, 2023
A cool Open Source CoverFlow view for Android with several fancy effects.

FancyCoverFlow THIS PROJECT IS NO LONGER MAINTAINED! What is FancyCoverFlow? FancyCoverFlow is a flexible Android widget providing out of the box view

David Schreiber-Ranner 1.1k Nov 10, 2022
Xamarin.Android provides open-source bindings of the Android SDK for use with .NET managed languages such as C#

Xamarin.Android Xamarin.Android provides open-source bindings of the Android SDK for use with .NET managed languages such as C#. Build Status Platform

Xamarin 1.8k Jan 5, 2023
A powerful library for creating notifications in android platform.

Download Download the latest AAR or grab via Maven: <dependency> <groupId>com.github.halysongoncalves</groupId> <artifactId>pugnotification</artif

Halyson Lima Gonçalves 867 Nov 19, 2022
This is a sample Android Studio project that shows the necessary code to create a note list widget, And it's an implementation of a lesson on the Pluralsight platform, but with some code improvements

NoteKeeper-Custom-Widgets This is a sample Android Studio project that shows the necessary code to create a note list widget, And it's an implementati

Ibrahim Mushtaha 3 Oct 29, 2022
Multi Roots TreeView implementation for Android Platform with a lot of options and customization

Multi roots TreeView :palm_tree: implementation for Android Platform with a lot of options and customization

Amr Hesham 112 Jan 3, 2023
Android App that communicates with a back-end server to display different One Piece characters

About This project is an Android App that communicates with a back-end server to display different One Piece characters. It's roughly based on this co

Sam Garcia 1 Feb 4, 2022
[] A fast PDF reader component for Android development

This project is no longer maintained. You can find a good replacement here, which is a fork relying on Pdfium instead of Vudroid/MuPDF for decoding PD

Joan Zapata 2.8k Dec 16, 2022
Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your development.

Bubbles for Android Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your

Txus Ballesteros 1.5k Jan 2, 2023
Multiplatform UI DSL with screen management in common code for mobile (android & ios) Kotlin Multiplatform development

Mobile Kotlin widgets This is a Kotlin MultiPlatform library that provides declarative UI and application screens management in common code. You can i

IceRock Development 320 Dec 30, 2022
Sentinel is a simple one screen UI which provides a standardised entry point for tools used in development and QA alongside device, application and permissions data.

Sentinel Sentinel is a simple one screen UI that provides standardised entry point for tools used in development and QA alongside device, application

Infinum 29 Dec 12, 2022
A customizable debug screen to view and edit flags that can be used for development in Jetpack Compose applications

Tweaks A customizable debug screen to view and edit flags that can be used for development in Jetpack Compose applications To include the library add

Guillermo Merino Jiménez 4 Jan 14, 2022
MIUINativeNotifyIcon - Fix the native notification bar icon function abandoned by the MIUI development team

MIUI 原生通知图标 Fix the native notification bar icon function abandoned by the MIUI

Fankesyooni 189 Jan 4, 2023
A declarative framework for building efficient UIs on Android.

Litho Litho is a declarative framework for building efficient UIs on Android. Declarative: Litho uses a declarative API to define UI components. You s

Facebook 7.5k Jan 4, 2023
MacOS theme for JetBrains Compose UI framework

MacOS theme for Compose Multiplatform MacOS theme written in Compose UI. Create native looking UIs for Mac using Compose UI. Share your UI code to run

Carson Holzheimer 204 Nov 19, 2022
A Lightweight Framework for Code Generating

Codegen A lightweight framework for code generating. Why Codegen? In Java/Kotlin world, engineers usually use JavaPoet or KotlinPoet for code generati

Johnson Lee 38 Dec 20, 2022
An Android application which visualizes some of the famous Algorithms for finding path from Source to Destination in a 2D grid.

Pathfinding-Visualizer An Android application which visualizes some of the famous Algorithms for finding path from Source to destination in a 2D grid.

Pranjal Mishra 37 Aug 8, 2022
Drawing App: A simple drawing application that allows the user to draw using a pencil or using shapes

Drawing-App Drawing app is a simple drawing application that allows the user to

Nada Feteiha 1 Oct 5, 2022