>> Conhecendo o Bada <<

>> Não é buda ou banda por acaso?

      Não, é Bada mesmo. O Bada é um framework situado acima do
sistema operacional. Para muitos é chamado de sistema operacional, mas a
verdade é que ele trabalha sobre uma versão do Linux.




     No mercado já existem dois aparelhos com o Bada. O Samsung
Wave e o Samsung Jet.

      Apesar de novo, a Samsung já liberou um SDK para os
desenvolvedores, além disso, criou o Bada Developer Challenge, que
premia os melhores aplicativos para esta plataforma.

      Este pequeno artigo é uma visão geral e bem sucinta do Bada, visto
que o próprio autor era leigo no assunto a apenas algumas horas.


>> Gostei disso, como instalo o SDK?

      O kit de desenvolvimento é baseado na IDE Eclipse, ou seja, para
quem já utiliza esta ferramenta a curva de aprendizado é quase inexistente.
Além das ferramentas padrões como compilador, depurador e editor de
código, o sdk possui uma ferramenta espetacular, o UI Builder. Aguarde
um pouco e verá.
A instalação se dá em 8 passos:

•        Baixar o sdk aqui. É necessário criar um usuário antes do
         download.

•        Depois do download efetuado, descompacte a pasta em um
         lugar de seu interesse. A árvore de diretórios deve ser
         assim:




•        Dê um duplo clique no instalador. O wizard começa pela
         tela abaixo. Clique em Next.
•   O próximo passo é aceitar a licença. Leia o texto e clique
    em I Agree.




•   Escolha os componentes a serem instalados.
•   Especifique o diretório onde o SDK será instalado.




•   Especifique o shortcut para o Windows e clique em Install.
•   Agora espere a instalação concluir suas etapas.




•   Se receber a tela abaixo tudo ocorreu bem e já podemos
    passar para o Hello World.
•   Para garantir que tudo deu certo, seu Windows deve
    mostrar o seguinte menu na lista de programas:




              Figura 1: Menu windows.

•   Para ter mais certeza ainda, clique em Simulator:
>> Quero criar meu primeiro aplicativo Bada

      Lembram da Figura 1, cliquem em badaIDE.




      Quando a IDE/Eclipse estiver aberta, navegue para file->new->bada
application proejct.




      Depois disso informe o nome do projeto e o seu tipo de protótipo,
que deve ser bada Frame Based Application
Sobre os tipos de projeto:
 Segundo a documentação:

 •        bada Frame Based Application: cria um simples projeto baseado
          em um frame. O template já cria as funcionalidades básicas da
          aplicação para mostrar o nome do projeto na tela.
 •        bada Form Based Application: cria um simples projeto baseado
          em Form. Contém as funcionalidades básicas para desenhar um
          Form na tela.
 •        bada Empty Project: cria um projeto somente com os arquivos
          essenciais.
 •        bada Static Library: cria uma biblioteca.




O próximo passo é configurar o path do bada SDK.
Posteriormente, vamos definir qual arquivo de manifesto
     vamos usar.




      Podemos utilizar o manifesto padrão enquanto estivermos apenas
estudando o sdk e a API do Bada. Porém, quando este trabalho for
profissional e exigir a distribuição da aplicação, é necessário criar este
manifesto a partir do site da Samsung.

      Estamos quase acabando!!!!

     Agora, defina o criador da aplicação bem como sua descrição básica.
Depois disso já podemos finalizar o projeto.




       Depois que o projeto foi criado, a IDE cria a seguinte árvore de
diretórios:
Figura 2: árvore de diretórios.
       Rode o projeto como bada Simulator Application. Se tudo ocorreu
certo, você verá o celular abaixo na sua tela.

      Calma, se um erro Launch File. Binaty not found foi lançado, apenas
clique com o botão direito no nome projeto e escolha Build Project.
Execute o projeto novamente:
>> Um pouco sobre o aplicativo gerado pela IDE

       Para entender toda a árvore de diretórios e arquivos, indico a leitura
da documentação oficial. Para nós, iniciantes no Bada vamos com mais
calma. Por hora só precisamos saber que a pasta src contém os códigos
fontes do aplicativo. Os resources também são importantes, mas serão
vistos daqui a pouco.

      Vamos a alguns pontos importantes do código fonte:

      •        O ponto de entrada da aplicação é o método OspMain(),
               presente em HelloWorldEntry.cpp;

      •        A instância da aplicação é criada usando o método
               CreateInstance, presente em HelloWorld.cpp;

      •        Os recursos da aplicação, como o arquivo XML de layout
               por exemplo, são inicializados usando o método
               OnAppInitializing(), presente em HelloWorld.cpp;

      •        Os recursos alocados serão destruídos e os estados da
               aplicação salvos usando o método OnAppTerminating;
               presente em HelloWorld.cpp;
•       Além disso, outros métodos são criados para tratar
              determinados eventos relativos a aplicação. Veja parte do
              código na listagem abaixo.

void
HelloWorld::OnForeground(void)
{
// Começe ou reinicie o desenho da tela quando a aplicação é movida
para foreground.

      Canvas* pCanvas = GetAppFrame()->GetCanvasN();

      Font font;
      font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50);
      pCanvas->SetFont(font);
      pCanvas->DrawText(Point(30, 30), GetAppName());
      pCanvas->Show();

      delete pCanvas;
}

void
HelloWorld::OnBackground(void)
{
// para a pintura na tela quando a aplicação é movida para background.
}

void
HelloWorld::OnLowMemory(void)
{
// Libere recursos não utilizados ou feche a aplicação
}

void
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel)
{
// Lidar com as alterações de nível de bateria aqui.
// Pare de usar mídia se estiver fazendo (camera, mp3 etc.) quando o
nível da bateria é CRITICAL.
}

     Com a listagem de código acima o leitor já deve ter percebido um
dado muito importante. Não lidamos com Java aqui, mas sim com C++.


>> Brincando um pouco com eventos

       Só para ter uma idéia do tratamento de eventos no Bada vamos
brincar um pouco com o HelloWorld. A missão é criar um código que
intercepe eventos de bateria e diga ao usuário a situação da carga do seu
aparelho móvel.

      Reescreva o método OnBatteryLevelChanged para:
void
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel)
{
      Canvas* pCanvas = GetAppFrame()->GetCanvasN();

     Font font;
     font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50);

      pCanvas->Clear();
      pCanvas->FillRectangle(Color(255, 255, 255, 30),
                  Rectangle(0, 0, pCanvas->GetBounds().width, pCanvas-
>GetBounds().height));
      pCanvas->SetFont(font);
      pCanvas->DrawText(Point(30, 30), GetAppName());

     if (batteryLevel == BATTERY_CRITICAL)
           pCanvas->DrawText(Point(30, 90), "Crítica");
     else if (batteryLevel == BATTERY_EMPTY)
           pCanvas->DrawText(Point(30, 90), "Vazia");
     else if (batteryLevel == BATTERY_FULL)
                       pCanvas->DrawText(Point(30, 90), "Cheia");
     else if (batteryLevel == BATTERY_HIGH)
                       pCanvas->DrawText(Point(30, 90), "Alta");
     else if (batteryLevel == BATTERY_LOW)
                       pCanvas->DrawText(Point(30, 90), "Baixa");

     pCanvas->Show();

      delete pCanvas;
      // TODO:
      // Handle any changes in battery level here.
      // Stop using multimedia features(camera, mp3 etc.) if the
battery level is CRITICAL.
      }

     Rode a aplicação novamente. Clique com o botão direito no
emulador, depois clique em Event Injector. No wizard que receber, clique
em Device, localizado na extremidade direita das tabs superiores:
Em Battery Level escreva 99 e clique em Send Battery File.




>> Melhorando a interface e conhecendo o UIBuilder

     Agora vamo apresentar um ponto que me chamou muito a atenção no
SDK do Bada, fazendo eu esquecer o fato de usar C++ e não Java.
***** Para entender os conceitos de UI no Bada visite a
documentação aqui.

      A interface gráfica de uma aplicação Bada é constituída de uma ou
mais application views. Cada view é uma janela full-screen da aplicação
que é representada por um Form, contendo uma barra de indicadores, soft
keys e uma barra de título. Além disso, um Form contém controles, que
podem ser controles puros ou containers que contém controles.

     Todos os forms de uma aplicação precisam ser anexados a um
Frame. Pode haver somente um frame por aplicação. Fonte: aqui.

     Figura: componentes GUI.




     Então vamos criar um Form.

      Revejam a Figura 2 por favor. Anteriormente eu disse o seguinte:
“Os resources também são importantes, mas serão vistos daqui a pouco.”
Na verdade eles serão vistos agora.
      Vamos adicionar um recurso a nossa aplicação.

     Clique em Form e depois Insert Resource:
Agora a magia começa:




       Dê um duplo clique no formulário para ver suas propriedades na
parte inferior.

      Nas propriedades configure o título do form, bem como o label para
Soft Key 0 e Soft Key 1.
Já conseguimos isso:




      Para adicionar os controles, os componentes se preferirem, o
desenvolvedor tem algumas opções na aba Palette.

      Utilizando o arrastar e colar, construa uma tela conforme a imagem
abaixo:
Construindo esta tela, somente clicando a arrastando os componentes
me deu uma saudade do Java ME, de criar as telas com diretivas gráficas,
com seus drawRect, drawString etc e etc.

       Mas calma, ainda não fizemos todo o trabalho. Clique com o botão
direito no Form e escolha Add Class. Chame a classe de Listener e informe
que desejas controlar tudo o que é possível:
Depois do Finish vamos visitar o HelloWorld.cpp.

     Veja o comentário do método OnAppInitilçizing(), ele diz o seguinte:
// TODO:
// Initialize UI resources and application specific data.
// The application's permanent data and context can be obtained from
the appRegistry.
//
// If this method is successful, return true; otherwise, return false.
// If this method returns false, the application will be terminated.
// Uncomment the following statement to listen to the screen on/off
events.
//PowerManager::SetScreenEventListener(*this);

       Já que diz que é nesse método que inicializamos os recursos de
interface gráfica, substitua esse método por esta versão:
bool
HelloWorld::OnAppInitializing(AppRegistry& appRegistry)
{
     Listener *pForm1 = new Listener();

     pForm1->Construct(L"IDF_FORM1");
     Frame *pFrame = GetAppFrame()->GetFrame();
     pFrame->AddControl(*pForm1);
     pFrame->SetCurrentForm(*pForm1);
     pForm1->RequestRedraw();
     return true;
}

     Ao esqueça de adicionar essa linha no início do código:
#include "Listener.h"

     Agora vamos rodar novamente o aplicativo e sorrir:
E oque acham do controle da hora:




     Quantas linhas programamos mesmo?


>> Conclusão. Oque concluir?

      O Bada está recém chegando no mundo móbile, ainda é impossível
qualquer direcionamento sem um pouco de achômetro. Façamos o seguinte,
tirem suas conclusões, ou ainda, vamos discutir isso com os comentários
desse artigo. Mas duas coisas são fatos:
* A Samsung poderia deixar de querer reiventar a roda e adotar
Android.
      * O UI Builder é extremamente útil e poderoso. Isso pode ser um
importante diferencial.

Bada

  • 1.
    >> Conhecendo oBada << >> Não é buda ou banda por acaso? Não, é Bada mesmo. O Bada é um framework situado acima do sistema operacional. Para muitos é chamado de sistema operacional, mas a verdade é que ele trabalha sobre uma versão do Linux. No mercado já existem dois aparelhos com o Bada. O Samsung Wave e o Samsung Jet. Apesar de novo, a Samsung já liberou um SDK para os desenvolvedores, além disso, criou o Bada Developer Challenge, que premia os melhores aplicativos para esta plataforma. Este pequeno artigo é uma visão geral e bem sucinta do Bada, visto que o próprio autor era leigo no assunto a apenas algumas horas. >> Gostei disso, como instalo o SDK? O kit de desenvolvimento é baseado na IDE Eclipse, ou seja, para quem já utiliza esta ferramenta a curva de aprendizado é quase inexistente. Além das ferramentas padrões como compilador, depurador e editor de código, o sdk possui uma ferramenta espetacular, o UI Builder. Aguarde um pouco e verá.
  • 2.
    A instalação sedá em 8 passos: • Baixar o sdk aqui. É necessário criar um usuário antes do download. • Depois do download efetuado, descompacte a pasta em um lugar de seu interesse. A árvore de diretórios deve ser assim: • Dê um duplo clique no instalador. O wizard começa pela tela abaixo. Clique em Next.
  • 3.
    O próximo passo é aceitar a licença. Leia o texto e clique em I Agree. • Escolha os componentes a serem instalados.
  • 4.
    Especifique o diretório onde o SDK será instalado. • Especifique o shortcut para o Windows e clique em Install.
  • 5.
    Agora espere a instalação concluir suas etapas. • Se receber a tela abaixo tudo ocorreu bem e já podemos passar para o Hello World.
  • 6.
    Para garantir que tudo deu certo, seu Windows deve mostrar o seguinte menu na lista de programas: Figura 1: Menu windows. • Para ter mais certeza ainda, clique em Simulator:
  • 7.
    >> Quero criarmeu primeiro aplicativo Bada Lembram da Figura 1, cliquem em badaIDE. Quando a IDE/Eclipse estiver aberta, navegue para file->new->bada application proejct. Depois disso informe o nome do projeto e o seu tipo de protótipo, que deve ser bada Frame Based Application
  • 8.
    Sobre os tiposde projeto: Segundo a documentação: • bada Frame Based Application: cria um simples projeto baseado em um frame. O template já cria as funcionalidades básicas da aplicação para mostrar o nome do projeto na tela. • bada Form Based Application: cria um simples projeto baseado em Form. Contém as funcionalidades básicas para desenhar um Form na tela. • bada Empty Project: cria um projeto somente com os arquivos essenciais. • bada Static Library: cria uma biblioteca. O próximo passo é configurar o path do bada SDK.
  • 9.
    Posteriormente, vamos definirqual arquivo de manifesto vamos usar. Podemos utilizar o manifesto padrão enquanto estivermos apenas estudando o sdk e a API do Bada. Porém, quando este trabalho for
  • 10.
    profissional e exigira distribuição da aplicação, é necessário criar este manifesto a partir do site da Samsung. Estamos quase acabando!!!! Agora, defina o criador da aplicação bem como sua descrição básica. Depois disso já podemos finalizar o projeto. Depois que o projeto foi criado, a IDE cria a seguinte árvore de diretórios:
  • 11.
    Figura 2: árvorede diretórios. Rode o projeto como bada Simulator Application. Se tudo ocorreu certo, você verá o celular abaixo na sua tela. Calma, se um erro Launch File. Binaty not found foi lançado, apenas clique com o botão direito no nome projeto e escolha Build Project. Execute o projeto novamente:
  • 12.
    >> Um poucosobre o aplicativo gerado pela IDE Para entender toda a árvore de diretórios e arquivos, indico a leitura da documentação oficial. Para nós, iniciantes no Bada vamos com mais calma. Por hora só precisamos saber que a pasta src contém os códigos fontes do aplicativo. Os resources também são importantes, mas serão vistos daqui a pouco. Vamos a alguns pontos importantes do código fonte: • O ponto de entrada da aplicação é o método OspMain(), presente em HelloWorldEntry.cpp; • A instância da aplicação é criada usando o método CreateInstance, presente em HelloWorld.cpp; • Os recursos da aplicação, como o arquivo XML de layout por exemplo, são inicializados usando o método OnAppInitializing(), presente em HelloWorld.cpp; • Os recursos alocados serão destruídos e os estados da aplicação salvos usando o método OnAppTerminating; presente em HelloWorld.cpp;
  • 13.
    Além disso, outros métodos são criados para tratar determinados eventos relativos a aplicação. Veja parte do código na listagem abaixo. void HelloWorld::OnForeground(void) { // Começe ou reinicie o desenho da tela quando a aplicação é movida para foreground. Canvas* pCanvas = GetAppFrame()->GetCanvasN(); Font font; font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50); pCanvas->SetFont(font); pCanvas->DrawText(Point(30, 30), GetAppName()); pCanvas->Show(); delete pCanvas; } void HelloWorld::OnBackground(void) { // para a pintura na tela quando a aplicação é movida para background. } void HelloWorld::OnLowMemory(void) { // Libere recursos não utilizados ou feche a aplicação } void HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel) { // Lidar com as alterações de nível de bateria aqui. // Pare de usar mídia se estiver fazendo (camera, mp3 etc.) quando o nível da bateria é CRITICAL. } Com a listagem de código acima o leitor já deve ter percebido um dado muito importante. Não lidamos com Java aqui, mas sim com C++. >> Brincando um pouco com eventos Só para ter uma idéia do tratamento de eventos no Bada vamos brincar um pouco com o HelloWorld. A missão é criar um código que intercepe eventos de bateria e diga ao usuário a situação da carga do seu aparelho móvel. Reescreva o método OnBatteryLevelChanged para:
  • 14.
    void HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel) { Canvas* pCanvas = GetAppFrame()->GetCanvasN(); Font font; font.Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50); pCanvas->Clear(); pCanvas->FillRectangle(Color(255, 255, 255, 30), Rectangle(0, 0, pCanvas->GetBounds().width, pCanvas- >GetBounds().height)); pCanvas->SetFont(font); pCanvas->DrawText(Point(30, 30), GetAppName()); if (batteryLevel == BATTERY_CRITICAL) pCanvas->DrawText(Point(30, 90), "Crítica"); else if (batteryLevel == BATTERY_EMPTY) pCanvas->DrawText(Point(30, 90), "Vazia"); else if (batteryLevel == BATTERY_FULL) pCanvas->DrawText(Point(30, 90), "Cheia"); else if (batteryLevel == BATTERY_HIGH) pCanvas->DrawText(Point(30, 90), "Alta"); else if (batteryLevel == BATTERY_LOW) pCanvas->DrawText(Point(30, 90), "Baixa"); pCanvas->Show(); delete pCanvas; // TODO: // Handle any changes in battery level here. // Stop using multimedia features(camera, mp3 etc.) if the battery level is CRITICAL. } Rode a aplicação novamente. Clique com o botão direito no emulador, depois clique em Event Injector. No wizard que receber, clique em Device, localizado na extremidade direita das tabs superiores:
  • 15.
    Em Battery Levelescreva 99 e clique em Send Battery File. >> Melhorando a interface e conhecendo o UIBuilder Agora vamo apresentar um ponto que me chamou muito a atenção no SDK do Bada, fazendo eu esquecer o fato de usar C++ e não Java.
  • 16.
    ***** Para entenderos conceitos de UI no Bada visite a documentação aqui. A interface gráfica de uma aplicação Bada é constituída de uma ou mais application views. Cada view é uma janela full-screen da aplicação que é representada por um Form, contendo uma barra de indicadores, soft keys e uma barra de título. Além disso, um Form contém controles, que podem ser controles puros ou containers que contém controles. Todos os forms de uma aplicação precisam ser anexados a um Frame. Pode haver somente um frame por aplicação. Fonte: aqui. Figura: componentes GUI. Então vamos criar um Form. Revejam a Figura 2 por favor. Anteriormente eu disse o seguinte: “Os resources também são importantes, mas serão vistos daqui a pouco.” Na verdade eles serão vistos agora. Vamos adicionar um recurso a nossa aplicação. Clique em Form e depois Insert Resource:
  • 17.
    Agora a magiacomeça: Dê um duplo clique no formulário para ver suas propriedades na parte inferior. Nas propriedades configure o título do form, bem como o label para Soft Key 0 e Soft Key 1.
  • 18.
    Já conseguimos isso: Para adicionar os controles, os componentes se preferirem, o desenvolvedor tem algumas opções na aba Palette. Utilizando o arrastar e colar, construa uma tela conforme a imagem abaixo:
  • 19.
    Construindo esta tela,somente clicando a arrastando os componentes me deu uma saudade do Java ME, de criar as telas com diretivas gráficas, com seus drawRect, drawString etc e etc. Mas calma, ainda não fizemos todo o trabalho. Clique com o botão direito no Form e escolha Add Class. Chame a classe de Listener e informe que desejas controlar tudo o que é possível:
  • 20.
    Depois do Finishvamos visitar o HelloWorld.cpp. Veja o comentário do método OnAppInitilçizing(), ele diz o seguinte: // TODO: // Initialize UI resources and application specific data. // The application's permanent data and context can be obtained from the appRegistry. // // If this method is successful, return true; otherwise, return false. // If this method returns false, the application will be terminated. // Uncomment the following statement to listen to the screen on/off events. //PowerManager::SetScreenEventListener(*this); Já que diz que é nesse método que inicializamos os recursos de interface gráfica, substitua esse método por esta versão: bool HelloWorld::OnAppInitializing(AppRegistry& appRegistry)
  • 21.
    { Listener *pForm1 = new Listener(); pForm1->Construct(L"IDF_FORM1"); Frame *pFrame = GetAppFrame()->GetFrame(); pFrame->AddControl(*pForm1); pFrame->SetCurrentForm(*pForm1); pForm1->RequestRedraw(); return true; } Ao esqueça de adicionar essa linha no início do código: #include "Listener.h" Agora vamos rodar novamente o aplicativo e sorrir:
  • 22.
    E oque achamdo controle da hora: Quantas linhas programamos mesmo? >> Conclusão. Oque concluir? O Bada está recém chegando no mundo móbile, ainda é impossível qualquer direcionamento sem um pouco de achômetro. Façamos o seguinte, tirem suas conclusões, ou ainda, vamos discutir isso com os comentários desse artigo. Mas duas coisas são fatos:
  • 23.
    * A Samsungpoderia deixar de querer reiventar a roda e adotar Android. * O UI Builder é extremamente útil e poderoso. Isso pode ser um importante diferencial.