A ideia deste exercício é aplicar os conceitos de criação e consumo de conteúdo a partir de um ContentProvider
e agendamento de tarefas via JobScheduler
.
A partir da resolução da Tarefa #2, siga os passos na ordem sugerida e marque mais abaixo, na sua resposta, quais os passos completados. Para entregar o exercício, responda o formulário de entrega até 02/05/2018, às 23h59.
- A partir da
SharedPreferences
definida para estabelecer uma periodicidade para o carregamento de notícias, agende uma tarefa periódica por meio deJobScheduler
para download das notícias do feed. A tarefa só deve ser executada se houver conectividade; - Implemente um
ContentProvider
na classeRssProvider
(disponibilizada no repositório), para realizar a manipulação do banco de dados, implementando todos os métodos de acesso e manipulação do banco; - Defina uma permissão de acesso a este
RssProvider
, nomeadabr.ufpe.cin.if1001.rss.leitura
; - Crie uma aplicação à parte, que acessa os dados de
RssProvider
e exibe em umaListView
. Esta nova aplicação não deve ter permissão de acessar a Internet.
- Comente o código que você desenvolver, explicando o que cada parte faz.
- Entregue o exercício mesmo que não tenha completado todos os itens listados. Marque abaixo apenas o que completou.
Passo | Completou? |
---|---|
18 | sim |
19 | sim |
20 | sim |
21 | sim |
A ideia deste exercício é aplicar os conceitos de Service
, BroadcastReceiver
, SQLite
, RecyclerView
, entre outros.
A aplicação RSS disponível neste repositório é uma versão atualizada da que foi passada como exercício anterior, mas ainda incompleta. Observe os passos listados abaixo.
Esta versão está usando a classe SQLiteRSSHelper
para gerenciar o banco de dados SQLite
como forma de persistir os dados.
Isto é, após o download e parsing do RSS, a lista de itens do feed está sendo armazenada no banco, ao invés de exibida diretamente na tela.
Veja que existem dois objetos AsyncTask
agora. Um é responsável por carregar o XML da internet e salvar no banco. Se tudo correr bem, outro AsyncTask executa para carregar as notícias do banco de dados e exibir na tela.
Caso você não tenha feito a Tarefa #1 use este projeto como base. Do contrário, sugiro que você pegue a estrutura deste projeto como base para modificar o seu projeto. Siga os passos na ordem sugerida e marque mais abaixo, na sua resposta, quais os passos completados. Para entregar o exercício, responda o formulário de entrega até 16/04/2018, às 23h59.
- A classe
SQLiteRSSHelper
já tem toda a configuração do banco. No entanto, ainda é necessário implementar os métodos de manipulação do banco de dados (da linha 73 em diante), que estão em aberto ainda. A implementação do métodogetItems
deve retornar apenas os itens não lidos; - Complete a implementação do método
onItemClick
(linha 74 em diante deMainActivity
), de forma que ao clicar, o link seja aberto no navegador e a notícia seja marcada como lida no banco; - Altere a aplicação de forma a usar um
Service
para fazer o download e persistência dos itens do feed no banco. Ou seja, a ideia aqui é mover o código que atualmente está noAsyncTask
que carrega o feed a partir da internet para umService
. Dica: useIntentService
; - Ao finalizar a tarefa, o
Service
deve enviar um broadcast avisando que terminou; - Use um
BroadcastReceiver
registrado dinamicamente, para quando o usuário estiver com o app em primeiro plano, a atualização da lista de itens ser feita de forma automática; - Se o usuário não estiver com o app em primeiro plano, um outro
BroadcastReceiver
registrado estaticamente deve exibir uma notificação, apenas se houver alguma notícia nova; - Usando
SharedPreferences
ePreferenceFragment
, defina um outro item na tela de configurações para estabelecer uma periodicidade para o carregamento de notícias, incluindo as seguintes possibilidades: 30 min / 1h / 3h / 6h / 12h / 24h (tem que adicionar outra preference no XML). Por enquanto basta apenas salvar a preferência do usuário, não estamos de fato agendando a tarefa ainda; - OPCIONAL Faça com que a aplicação passe a usar um
RecyclerView
, ao invés deListView
. Sugestão: UseSortedList
para ordenar itens cronologicamente (do mais recente para o mais antigo).
- Comente o código que você desenvolver, explicando o que cada parte faz.
- Entregue o exercício mesmo que não tenha completado todos os itens listados. Marque abaixo apenas o que completou.
Passo | Completou? |
---|---|
10 | sim |
11 | sim |
12 | sim |
13 | sim |
14 | sim |
15 | sim |
16 | sim |
17 | não |
Esta tarefa envolve os conceitos de UI widgets, AsyncTasks, Custom Adapters, Intents, Permissions, e SharedPreferences. Faça um clone ou fork deste projeto, siga os passos na ordem sugerida e marque mais abaixo, na sua resposta, quais os passos completados. Para entregar o exercício, responda o formulário de entrega até 02/04/2018, às 23h59.
- Teste a aplicação e certifique-se de que está tudo funcionando.
- Altere a aplicação RSS de forma que passe a processar o arquivo XML usando a classe
ParserRSS
. - Uma vez processado o XML por meio do parser, é retornado um objeto do tipo
List<ItemRSS>
. - Use este objeto para popular um
ListView
por meio de umAdapter
--- o widget deve manter o mesmo id do TextView (conteudoRSS
). - Inicialmente, use um
ArrayAdapter<ItemRSS>
para confirmar que está funcionando. - Altere o
ListView
, para mostrar título e data para cada item RSS, por meio de um Adapter personalizado, usando o layout emres/layout/itemlista.xml
como base. Este layout não deve ser alterado. - Faça com que, ao clicar em um título, o usuário seja direcionado para o navegador. Opcionalmente, pode abrir em uma nova activity com
WebView
. - Modifique a aplicação para que passe a carregar o endereço do feed a partir de uma
SharedPreferences
com a chaverssfeed
. O endereço padrão para o feed está disponível em res/values/strings.xml. - Inclua a possibilidade de alterar a
SharedPreference
(rssfeed
) incluindo um botão naActionBar
da aplicação. Ao clicar no botão, abraPreferenciasActivity
, que deve exibir umaPreferenceScreen
gerada automaticamente por meio de umFragment
que estende a classePreferenceFragment
, como visto em sala. Use o arquivo emres/xml/preferencias.xml
para definir a tela.
- Comente o código que você desenvolver, explicando o que cada parte faz.
- Entregue o exercício mesmo que não tenha completado todos os itens listados. Marque abaixo apenas o que completou.
Passo | Completou? |
---|---|
1 | sim |
2 | sim |
3 | sim |
4 | sim |
5 | sim |
6 | sim |
7 | sim |
8 | sim |
9 | sim |