UNIVERSIDADE INTELIGENTE: SOLUÇÕES TECNOLÓGICAS PARA MELHORIA DO COTIDIANO UNIVERSITÁRIO MÓDULOS GERENCIAMENTO DE USUÁRIO E DISCIPLINAS.



Documentos relacionados
Manual SAGe Versão 1.2 (a partir da versão )

Manual Q-Acadêmico 2.0 Módulo Web - Aluno

UNIVERSIDADE INTELIGENTE: SOLUÇÕES TECNOLÓGICAS PARA MELHORIA DO COTIDIANO UNIVERSITÁRIO MÓDULOS ALIMENTAÇÃO, BIBLIOTECA E TRANSPORTE.

Guia Prático de Acesso

COORDENAÇÃO DE ENSINO A DISTÂNCIA - EaD

ROTEIRO PARA TREINAMENTO DO SAGRES DIÁRIO Guia do Docente

INTRODUÇÃO AO AMBIENTE MOODLE DA UFPA. Guia rápido

Manual do Visualizador NF e KEY BEST

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Portal Sindical. Manual Operacional Empresas/Escritórios

GUIA BÁSICO DA SALA VIRTUAL

MANUAL 2ª CAMADA DE SEGURANÇA E NOVAS REGRAS DE CADASTRAMENTO

Manual do Google agenda. criação e compartilhamento de agendas

"Manual de Acesso ao Moodle - Discente" 2014

Manual do Painel Administrativo

1ª PARTE DIÁRIOS ELETRÔNICOS

OI CONTA EMPRESA MANUAL DO USUÁRIO

SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

MANUAL DA SECRETARIA

Como configurar s nos celulares. Ebook. Como configurar s no seu celular. W3alpha - Desenvolvimento e hospedagem na internet

Google Drive. Passos. Configurando o Google Drive

Sumário. Apresentação O que é o Centro de Gerenciamento de Serviços (CGS) NTI? Terminologia Status do seu chamado Utilização do Portal Web

Moodle - Tutorial para Alunos

Manual da Turma Virtual: MATERIAIS. Para acessar a turma virtual com o perfil Docente, siga o caminho indicado abaixo:

CONSTRUÇÃO DE BLOG COM O BLOGGER

Aplicação Prática de Lua para Web

Sistema de Chamados Protega

OneDrive: saiba como usar a nuvem da Microsoft

Guia de Demonstração MeusPets

Grupo Projeção. Portal Acadêmico. - Ambiente do Aluno -

UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI DEPARTAMENTO DE SISTEMAS DE INFORMAÇÕES

MANUAL DE UTILIZAÇÃO DO SISTEMA GLPI

Manual do MySuite. O MySuite é a solução adotada pela MKData para gerenciar o atendimento aos clientes.

INSTRUMENTO NORMATIVO 004 IN004

Footprints Service Core. Manual de uso do sistema

O GEM é um software 100% Web, ou seja, você poderá acessar de qualquer local através da Internet.

Registro e Acompanhamento de Chamados

O Novo Portal Etilux também foi criado para ser um facilitador para nossa Força de Vendas, abrangendo as seguintes características:

Em 2012, a Prosoft planejou o lançamento da Versão 5 dos seus produtos.

PORTAL DE COMPRAS SÃO JOSÉ DO RIO PRETO

Personalizações do mysuite

VIAÇÃO SÃO BENTO LTDA.

1 Sumário O Easy Chat Conceitos Perfil Categoria Instalação O Aplicativo HTML...

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

ÍNDICE MANUAL SITE ADMINISTRÁVEL TV. 1. Introdução 2. Acessando o site administrável/webtv SITE ADMINISTRÁVEL 3. CONFIGURAÇÕES

Moodle - Tutorial para Professores

Procedimentos para Reinstalação do Sisloc

MANUAL DO ADMINISTRADOR LOCAL. Entidade Municipal

ANDROID APPLICATION PROJECT

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

e-ouv Passo-a-passo Sistema de Ouvidorias do Poder Executivo Federal Junho, 2015 Controladoria-Geral da União

Operador de Computador. Informática Básica

Manual UNICURITIBA VIRTUAL para Professores

MANUAL DE SUPORTE. Controle de Suporte. Este manual descreve as funcionalidades do controle de suporte.

CENTRO UNIVERSITÁRIO CATÓLICA DE SANTA CATARINA PRÓ-REITORIA ACADÊMICA NÚCLEO DE EDUCAÇÃO EM AMBIENTES DIGITAIS NEAD

Programação para Android. Aula 06: Activity, menus e action bar

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

MANUAL DO GERENCIADOR ESCOLAR WEB

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Faturamento Eletrônico - CASSEMS

MOODLE NA PRÁTICA PEDAGÓGICA

Sistema de Gestão de Recursos de Aprendizagem

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Manual do Sistema de Cadastro de Cultivares Locais, Tradicionais e Crioulas

Aplicativo para elaboração de questionários, coleta de respostas e análise de dados na área da saúde em dispositivos móveis

Gestão inteligente de documentos eletrônicos

Manual do Usuário Plataforma Online

Curso de atualização Educação Integral e Integrada. Tutorial Moodle. Belo Horizonte, 2013.

TUTORIAL DO ALUNO. Olá, bem vindo à plataforma de cursos a distância da Uniapae!!!

Manual Portal Ambipar

UNIMED-BH MANUAL DE AGENDAMENTO ON-LINE. acesse

Guia de conexão na rede wireless

SUAP Módulo Protocolo Manual do Usuário DTI DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO SEÇÃO DE PROJETOS, SISTEMAS E PROCESSOS DE NEGÓCIO

Assessoria Técnica de Tecnologia da Informação - ATTI. Projeto de Informatização da. Secretaria Municipal de Saúde do. Município de São Paulo

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal.

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

Manual do Aplicativo - Rastreamento Veicular

SUMÁRIO. Faculdade Católica do Tocantins

Manual do Almoxarifado SIGA-ADM

INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF

DIÁRIO DE CLASSE. Atenciosamente,

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

TCEnet. Manual Técnico. Responsável Operacional das Entidades

Apresentação. Nossa sugestão é que você experimente e não tenha medo de clicar!!!

Manual Operacional SIGA

Tutorial do módulo Carteira Nacional de Militante

UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI COORDENAÇÃO DE DESENVOLVIMENTO DE SISTEMAS

Versão Liberada. Gerpos Sistemas Ltda. Av. Jones dos Santos Neves, nº 160/174

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

TOTVS Série 1 Varejo (Simples) - Módulo e-commerce

MANUAL DO SISTEMA. Versão 1.00

Como incluir artigos:

Treinamento GVcollege Módulo Acadêmico - Pedagógico

Sumário INTRODUÇÃO Acesso ao Ambiente do Aluno Ferramentas e Configurações Ver Perfil Modificar Perfil...

Como funciona? SUMÁRIO

Software. Módulo do GDM que funciona em plataforma Web Gerenciamento de Manutenção

E&L Protocolo, Documentos Eletrônicos e Processos Perguntas Frequentes

Ministério da Cultura

Transcrição:

UNIVERSIDADE INTELIGENTE: SOLUÇÕES TECNOLÓGICAS PARA MELHORIA DO COTIDIANO UNIVERSITÁRIO MÓDULOS GERENCIAMENTO DE USUÁRIO E DISCIPLINAS. Laura Marra Pires Projeto de Graduação apresentado ao Curso de Engenharia Eletrônica e de Computação da Escola Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários à obtenção do título de Engenheiro. Orientador: Heraldo Luis Silveira de Almeida Rio de Janeiro Agosto de 2015

UNIVERSIDADE INTELIGENTE: SOLUÇÕES TECNOLÓGICAS PARA MELHORIA DO COTIDIANO UNIVERSITÁRIO MÓDULOS GERENCIAMENTO DE USUÁRIO E DISCIPLINAS. Laura Marra Pires PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO DE ENGENHARIA ELETRÔNICA E DE COMPUTAÇÃO DA ESCOLA POLITÉCNICA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO PARTE DOS REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE ENGENHEIRO ELETRÔNICO E DE COMPUTAÇÃO Autores: Laura Marra Pires Orientador: Examinador: Heraldo Luis Silveira de Almeida, D.Sc. Aloysio de Castro Pinto Pedroza, D.Sc. Examinador: Carlos José Ribas D'Ávila, M.Sc. Rio de Janeiro RJ, Brasil Agosto de 2015 ii

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO Escola Politécnica Departamento de Eletrônica e de Computação Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária Rio de Janeiro RJ CEP 21949-900 Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que poderá incluí-lo em base de dados, armazenar em computador, microfilmar ou adotar qualquer forma de arquivamento. É permitida a menção, reprodução parcial ou integral e a transmissão entre bibliotecas deste trabalho, sem modificação de seu texto, em qualquer meio que esteja ou venha a ser fixado, para pesquisa acadêmica, comentários e citações, desde que sem finalidade comercial e que seja feita a referência bibliográfica completa. Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es). iii

iv Dedico este trabalho à minha familia.

AGRADECIMENTO Gostaria de agradecer primeiramente aos meus pais, Selma e Sérgio, por todo amor, apoio, confiança, e por sempre fazerem de tudo para me proporcionar uma excelente educação. Ao meu pai que, mesmo fisicamente distante, sempre procurou me acalmar em momentos de crise e me fazia ver os problemas como algo simples e passageiro. Em especial à minha mãe, pelas concessões que fez em prol da minha formação e por sempre estar ao meu lado, preocupada com as inúmeras noites viradas e me confortando nos momento mais críticos. À minha irmã, Carolina, pelo preocupação, companheirismo e paciência. Aos meus demais familiares, por todo o carinho que sempre me deram. Aos amigos que fiz ao longo da faculdade, por tornaram essa trajetória mais alegre. Em especial à minha amiga Natália, com a qual desenvolvi este trabalho e que também contribuiu de forma essencial para a conclusão do curso de graduação. Aos demais amigos, por compreenderem meus momentos de ausência. Ao professor e orientador Heraldo, pela sua disponibilidade e atenção durante o desenvolvimento deste projeto. E por fim ao coordenador Casé, por sempre se mostrar solícito para ajudar com os mais variados problemas. v

RESUMO Este trabalho de conclusão de curso tem como finalidade encontrar soluções atuais para problemas identificados na Universidade, bem como melhorar as atividades já existentes, de forma a inserir a Universidade no contexto tecnológico e facilitar os processos necessários para seu funcionamento. Para tal, foi sugerido o projeto de um aplicativo destinado a usuários da Universidade em geral, sendo eles professores, alunos e funcionários de diversas áreas. Separamos os principais problemas em quatro temas: Disciplinas, Alimentação, Biblioteca e Transporte, sendo os três últimos abordados na referência [1]. Inicialmente, descrevemos cada um deles e identificamos a solução atual adotada. Em um segundo momento, detalhamos as soluções propostas. Como forma de comprovar a viabilidade do aplicativo, as seções de Disciplinas e Alimentação foram desenvolvidas para o sistema Android, sendo a última abordada na referência [1] Palavras-Chave: desenvolvimento de software, automatização de tarefas, processos da universidade vi

ABSTRACT This final paper is intended to find solutions to problems identified at the University as well as improve existing activities in order to insert the University in the technological context and facilitate the required processes for its operation. To this end, the project of a mobile app for the users of the university in general, that is, teachers, students and staff from several areas was suggested. We separated the main problems in 5 themes: Disciplines, Food, Library and Transportation, the last three covered in reference [1]. Initially, we described each of them and identified the current solution adopted. In a second step, we detail the proposed solutions. In order to prove the viability of the app, the sections of Disciplines and Food were developed for the Android system, the last one covered in reference [1]. Key-words: software development, task automation, university processes vii

SIGLAS UFRJ Universidade Federal do Rio de Janeiro CT Centro de Tecnologia SISU Sistema de Seleção Unificada IDE Integrated Development Environment BOA Boletim de Orientação Acadêmica API Application Programming Interface SO Sistema Operacional viii

Sumário INTRODUÇÃO... 3 1.1 Tema... 3 1.2 Delimitação... 3 1.3 Justificativa... 4 1.4 Objetivos... 4 1.5 Metodologia... 4 1.6 Descrição... 5 POSICIONAMENTO... 6 2.1 Oportunidade de Negócio... 6 2.2 Descrição dos problemas... 6 2.3 Sentença de Posição do Produto... 9 2.4 Visão Geral do Produto... 9 2.5 Escopo... 10 REVISÃO DAS TECNOLOGIAS UTILIZADAS... 11 3.1 Android... 11 3.2 SQLite... 12 3.3 Google... 13 GERENCIAMENTO DE USUÁRIOS... 15 4.1 Resumo dos envolvidos e usuários... 15 4.2 Modelagem dos Casos de Uso... 15 4.3 Diagrama de Caso de Uso... 16 4.4 Funcionamento... 16 DISCIPLINAS... 19 5.1 Resumo dos envolvidos e usuários... 19 5.2 Modelagem dos Casos de Uso... 20 5.3 Diagrama de Caso de Uso... 21 ix

5.4 Funcionamento... 21 CONCLUSÃO... 27 6.1 Principais dificuldades... 27 BIBLIOGRAFIA... 30 APÊNDICE A... 32 A.1 Implementação das Classes... 32 APÊNDICE B... 47 B.1 Mind Map... 47 x

Lista de Figuras Figura 1 - Market share dos sistemas operacionais para celulares, considerando o mercado brasileiro. (fonte statcounter.com)... 11 Figura 2 - Diagrama de Casos de Uso do Gerenciamento de Usuários... 16 Figura 3 Tela Inicial... 16 Figura 4 Tela de contas... 17 Figura 5 Permissões necessárias... 17 Figura 6 Tela do Menu Principal... 18 Figura 7 - Diagrama de Casos de Uso de Disciplinas... 21 Figura 8 Menu de Disciplinas... 22 Figura 9 Inserção das situações das disciplinas... 23 Figura 10 Grade do dia... 24 Figura 11 Pop-up com local e status da aula... 25 Figura 12 Lista com disciplinas a serem avaliadas... 26 Figura 13 Questionário para avaliação de disciplinas... 26 Figura 14 Parte I do Mind Map... 47 Figura 15 Pate II do Mind Map... 48 1

Lista de Tabelas Tabela 1 Sentença de Posição... 9 Tabela 2 - Resumo dos envolvidos e usuários do Gerenciamento de Usuários... 15 Tabela 3 - Casos de Uso do Gerenciamento de Usuários... 15 Tabela 4 Resumo dos envolvidos e usuários de Disciplinas... 19 Tabela 5 Casos de Uso de Disciplinas... 20 2

Capítulo 1 Introdução 1.1 Tema O tema do trabalho é o estudo das atividades da universidade, tais como orientação acadêmica, suporte ao aluno, alimentação, transporte e biblioteca. Dessa forma, deseja-se aperfeiçoar tais processos, por meio de tecnologias acessíveis a fim de modernizar e tornar mais prático o cotidiano de todos que estão envolvidos no ambiente acadêmico, sejam eles alunos, professores ou demais colaboradores. Para tal, serão utilizados conhecimentos da área de computação adquiridos ao longo do curso. Mais precisamente, assuntos como banco de dados, linguagem de programação e desenvolvimento de aplicativos. O presente trabalho abordará o desenvolvimento dos módulos Gerenciamento de Usuário e Disciplinas. Os módulos Alimentação, Biblioteca e Transporte são abordados na referência [1]. 1.2 Delimitação O objeto de estudo é a Universidade Federal do Rio de Janeiro (UFRJ), tomando como base o Centro de Tecnologia (CT). Atualmente, com o avanço da tecnologia, cada vez mais os processos diários estão sendo automatizados, porém nota-se que as atividades da universidade não estão acompanhando tal evolução. O projeto estuda atividades comuns a diversas faculdades, deste modo uma vez comprovada a aplicabilidade do projeto neste centro, o modelo poderia, então, ser implementado na universidade como um todo, e posteriormente, em demais instituições de ensino. O estudo visa atender às necessidades de todos os envolvidos no ambiente acadêmico: alunos, professores e demais servidores. 3

1.3 Justificativa Nos últimos anos, estimulados por financiamentos governamentais e parcerias entre universidades, os intercâmbios acadêmicos, especialmente internacionais, têm aumentado significativamente. Além disso, com as mudanças na forma de ingresso nas Universidades, realizada agora por meio do Sistema de Seleção Unificada (SISU), o número de alunos que estudam em Universidades fora de sua cidade ou mesmo de seu estado de origem também sofreu grande aumento. Somando-se os dois fenômenos citados acima, nota-se que há uma exigência maior dos serviços oferecidos pela universidade quando comparada as demais. 1.4 Objetivos O objetivo do projeto é, portanto, sugerir um modelo que integre e otimize os processos já existentes e também novos métodos a fim de complementar o sistema com um todo. Mais especificamente, pretende-se (1) enumerar as principais deficiências identificadas no cotidiano do ambiente universitário; (2) analisar possíveis melhorias para tais falhas; e (3) propor soluções tecnológicas apropriadas para determinados casos. 1.5 Metodologia A fim de identificar o escopo inicial das principais dificuldades enfrentadas por aqueles que utilizam os serviços da universidade, será realizado um levantamento baseado em experiências pessoais e observações dos meios de comunicação entre alunos, como por exemplo, o polimail e grupos no Facebook. Uma vez identificadas tais deficiências, será feito um mapeamento através de ferramentas de mind mapping e, então, serão analisadas propostas de soluções empregando tecnologias especificas para cada caso e também avaliar sua viabilidade. Para implementação, será usado o software Android Studio e outras ferramentas que possam ser necessárias para a modelagem das soluções. 4

1.6 Descrição O Capítulo 2 trata das soluções atuais adotadas, com uma descrição detalhada de cada problema identificado. Com isso, foi possível determinar, neste mesmo capítulo, o posicionamento do produto no mercado, uma visão geral do mesmo e seus requisitos. O Capítulo 3 apresenta os conceitos e tecnologias necessárias para o desenvolvimento do projeto e também discorre sobre a justificativa da escolha de cada ferramenta. O projeto de cada seção do aplicativo junto com a descrição das soluções implementadas são abordados nos Capítulos 4 e 5. No Capítulo 4 será exposto como ocorre o gerenciamento dos usuários do sistema. O Capítulo 5 descreve como é feito o controle das disciplinas. Por fim, as conclusões e trabalhos futuros são apresentados no Capítulo 6. 5

Capítulo 2 Posicionamento 2.1 Oportunidade de Negócio Observamos a oportunidade de desenvolver o aplicativo neste setor, pois não há qualquer solução completa para os problemas observados dentro da universidade que se adequem ao atual cenário tecnológico, onde grande parte das atividades diárias é realizada por meio de softwares. 2.2 Descrição dos problemas Com base no objeto de estudo mencionado acima, UFRJ, identificamos as atividades mais criticadas pelos usuários dentro da universidade e também situações em que não há sequer solução para o problema encontrado. Organizamos as falhas identificadas e as soluções utilizadas atualmente, nos tópicos abaixo. a. Disciplinas 1. Problema identificado: Os alunos tendem a se inscrever nas disciplinas optativas de escolha condicionada com base nos horários disponíveis e indicações dos colegas. Há pouca informação quanto à linha de especificação das disciplinas. Solução atual disponível: O fluxograma do curso é o único documento em que estão relacionadas todas as disciplinas e suas dependências (requisitos) umas com as outras. Ainda assim, não é de fácil acesso; está disponível nos quadros de aviso, que estão localizados nos corredores da faculdade, e entregue no momento do ingresso à 6

universidade, mas não é possível encontrá-la no SIGA, por exemplo, principal meio de informação do aluno em relação às disciplinas e sistema utilizado para realizar as inscrições, momento no qual o aluno necessita desta informação. 2. Problema identificado: No início de cada período, os alunos precisam saber em que salas serão ministradas as aulas em que se inscreveram, preferencialmente, com certa antecedência para que não haja perda de tempo em busca do local. Como é necessário cursar disciplinas de escolha livre e também, como há equivalência entre alguns cursos, muitas vezes os alunos encontram-se em blocos, centros ou até mesmo campus que nunca estiveram antes e, portanto, não conhecem a estrutura física do local e a organização das salas de aula, ficando desorientados em relação à localização. Solução atual disponível: Existe uma listagem impressa contendo a relação entre todas as disciplinas e suas salas de aula, entretanto não há uma convenção entre todos os cursos e unidades da UFRJ sobre onde ficará disponível esta lista física no início de cada período, portanto, caso o aluno vá cursar uma matéria em uma unidade a qual não conhece, terá dificuldades primeiramente em descobrir onde fica disponível esta relação e posteriormente, em saber onde se encontram as salas descritas nela. Outro ponto a ser destacado é que no início do período, todos os alunos precisam desta relação, portanto, uma lista física não é a forma mais prática de atender a todos no momento de alta procura. Além disso, a lista contém todas as cadeiras que serão lecionadas naquele centro e cada aluno precisa da informação apenas das matérias em que está inscrito, com isso, cada pessoa 7

leva um tempo desnecessário por se tratar de um documento generalista. 3. Problema identificado: É comum os alunos buscarem dados sobre a qualidade das disciplinas e dos professores antes da inscrição. Normalmente as opiniões das pessoas que já cursaram as matérias são a maior fonte de informação, na maioria das vezes, por meio de conversas informais e redes sociais, portanto elas não estão consolidadas e documentadas em nenhum lugar específico, de forma a facilitar a todos que busquem essa informação. Além disso, quando encontradas, essas opiniões geralmente não são muito objetivas. Solução atual disponível: Não há nenhuma solução disponível por parte da própria UFRJ. As soluções encontradas pelos alunos são informais, como conversas ou redes sociais. 4. Problema identificado: Muitas vezes os professores têm imprevistos que os impossibilitam de comparecer à UFRJ para suas aulas ou, apenas, de chegar no horário. Pode acontecer de o aluno ter ido à universidade apenas para assistir a esta determinada aula que não haverá ou estar esperando por ela no último horário. Existem momentos também em que o aluno gostaria de ficar estudando na sala de estudos ou na biblioteca, muitas vezes com outros colegas, mas é necessário estar em frente à sala de aula aguardando o professor chegar. Solução atual disponível: 8

Não há solução implementada para agilizar a comunicação em relação ao status que a aula se encontra, a não ser que o professor comunique à secretaria ou envie um e-mail avisando do imprevisto. 2.3 Sentença de Posição do Produto Para Universidades. O Aplicativo Que Diferente de Nosso produto é um sistema para atividades e processos universitários. integra diversos processos, otimizando-os e modernizandoos. processos manuais atualmente utilizados ou das soluções tecnológicas desenvolvidas isoladamente. é específico, integrado e intuitivo. Tabela 1 Sentença de Posição 2.4 Visão Geral do Produto a. Perspectiva do Produto O aplicativo deve garantir o mesmo resultado e funcionamento dos processos já empregados pela UFRJ, mas de forma mais prática e modernizada. Futuramente, poderá agregar outros sistemas existentes para processos isolados, bem como o atual sistema oficial da UFRJ utilizado para inscrições de disciplinas, o SIGA, e também acrescentar novas funcionalidades que se tornem necessárias. b. Suposições e Dependências Para o funcionamento previsto para o aplicativo, pressupõe-se o correto cadastramento dos dados por parte do usuário final (Aluno, Professor ou Administrador). 9

c. Requisitos do Produto O aplicativo empregará plataforma Android, podendo ser utilizado em qualquer aparelho celular ou tablet com este sistema operacional e que possua, no mínimo, o sistema Android 2.2 (Froyo). Para realizar login no aplicativo, é necessário possuir uma conta Google ou de qualquer outro domínio que seja possível conectar a partir do Google, como por exemplo, @poli.ufrj.br. Além disso, para ter acesso a algumas informações é necessário que o dispositivo possua acesso à internet. 2.5 Escopo Para cada problema listado é necessário planejar o projeto de engenharia para então implementar cada um deles. De forma a demonstrar a viabilidade do projeto, tomamos o tópico Disciplinas (considerando o perfil de usuário Aluno ) como exemplo para realizar o projeto e desenvolvê-lo, como pode ser vistos na seção a seguir. 10

Capítulo 3 Revisão das Tecnologias Utilizadas 3.1 Android O Android é um sistema operacional (SO) desenvolvido atualmente pela Google. Seu principal foco são os smartphones, mas possui também versões para tablets, smartwatches e TVs. A escolha desse sistema operacional para o projeto se deu pela sua facilidade tanto uso quanto de desenvolvimento de aplicativos e também pela sua popularidade: o Android é encontrado atualmente em mais de 1 (um) bilhão de dispositivos (Android, 2015), possuindo o maior market share de SO para celulares. Analisando os dados do mercado brasileiro, se fizermos uma breve comparação com seu principal concorrente (ios), nos últimos 18 meses o Android apresentou, em média, mais que cinco vezes o número de usuários do SO da Apple. 100% 90% 80% 70% Market Share dos SO para Celulares no Brasil 60% 50% 40% 30% 20% Outros Series 40 Windows Phone ios Android 10% 0% Figura 1 - Market share dos sistemas operacionais para celulares, considerando o mercado brasileiro. (fonte statcounter.com) 11

Quanto às ferramentas para desenvolvimento de aplicativos para o SO em questão, a Google disponibiliza um Ambiente de Desenvolvimento Integrado (IDE, na sigla em inglês) oficial, o Android Studio. A IDE possui diversas vantagens tais como: Bibliotecas Open-Source; Extensa quantidade de informações disponibilizada em fóruns e sites proprietários; Programação em linguagem Java; Integração com sistemas de controle de versão (por exemplo: Git); Diversas APIs disponíveis para integração a sistemas/tecnologias amplamente utilizados. No que diz respeito a armazenamento, o Android oferece opções variadas que suprem diferentes necessidades do desenvolvedor. Dentre as disponíveis, gostaríamos de destacar o SQLite, que será descrito em seguida, e também o Shared Preferences, que utiliza um modelo key-value para armazenar/recuperar tipos de dados primitivos. 3.2 SQLite SQLite é uma biblioteca open-source desenvolvida em linguagem C que implementa um mecanismo de banco de dados SQL de forma muito simples. Sua facilidade de uso se da devido a: Implementa grande parte do padrão SQL (sintaxe/palavras-chave); Não possui um processo de servidor a parte; A leitura e escrita são feitas diretamente em um arquivo no dispositivo; O sistema Android já suporta automaticamente a ferramenta, logo não existe a necessidade de instalação. Uma das maneiras de criar um banco de dados em uma aplicação é através de uma Interface de Programação de Aplicações (API, na sigla em inglês). A API disponibiliza classes que permitem criar e manipular o banco. Para tal, é necessário estender a classe SQLiteOpenHelper e a partir daí é possível manipular o banco 12

utilizando querys comuns a sistemas SQL. Outra vantagem dessa ferramenta é que no ambiente Android, os bancos de dados gerados por um aplicativo podem ser acessados apenas por classes do mesmo, portando as informações do usuário não ficam expostas a outras aplicações. 3.3 Google a. Google Plus O Google Plus é uma rede social desenvolvida pela Google. A rede possui diversas ferramentas como: Círculos, que permitem organizar seus amigos por grupos; Hangout on Air, que permite transmitir vídeos online via Youtube; Comunidades, que permitem que os membros compartilhem imagens, comentário, eventos, dentro outros, sobre um determinado tema; Uma grande vantagem da rede é que ela possui total integração com demais serviços oferecidos pela Google, como por exemplo, o Gmail. b. Google Play Services A Google disponibiliza uma plataforma que permite integrar alguns de seus serviços, como por exemplo, Google Maps e Google+, a um aplicativo. Assim como ocorre no caso do SQLite, essas integrações também ocorrem via uma API. i. Google+ Android API: Google Sign-In Para poder incluir essa funcionalidade no aplicativo, é necessária a instalação do Google Play Services SDK no Android Studio. Essa API possibilita que a autenticação de usuário seja feita de forma simples e segura. O login é feito através de uma conta Google já 13

existente, portanto não existe a necessidade de criar um usuário e senha. Além disso, conta com toda a parte de segurança de autenticação dos sistemas da Google (OAuth 2.0). Uma vez feita a validação do usuário, é possível coletar dados como nome, foto e outras informações caso o usuário tenha um perfil ativo no G+. É possível ainda interagir na rede social da Google, por exemplo criando e visualizando posts. 14

Capítulo 4 Gerenciamento de Usuários Conforme descrito acima, para que o usuário tenha acesso ao aplicativo, é necessário que ele possua uma conta válida. Visando facilitar o registro dos usuários e levando em conta que todos os alunos possuem um e-mail da própria UFRJ, o qual pode ser acessado através do Google, utilizamos a API Google Play Services. 4.1 Resumo dos envolvidos e usuários Nome Descrição Responsabilidades Usuário Usuário final Cadastrar seus dados utilizando um e- mail Google. Tabela 2 - Resumo dos envolvidos e usuários do Gerenciamento de Usuários 4.2 Modelagem dos Casos de Uso #UC Nome da UC Descrição UC-01 Registrar-se Definir qual conta será utilizada neste aplicativo e inserir sua senha. UC-02 UC-03 UC-04 Efetuar Login Autenticação de usuários cadastrados no sistema. Desconectar-se do aplicativo de forma a Efetuar Logout não visualizar mais seu menu e funcionalidades. Deixar de ter permissão para acessar o menu e as funcionalidades do Revogar Acesso aplicativo. É necessário um novo cadastro. Tabela 3 - Casos de Uso do Gerenciamento de Usuários 15

4.3 Diagrama de Caso de Uso Figura 2 - Diagrama de Casos de Uso do Gerenciamento de Usuários 4.4 Funcionamento Em seu primeiro uso, antes de registrar-se no aplicativo, em sua tela inicial encontra-se o botão para realizar o login. Figura 3 Tela Inicial No momento em que o botão de login é clicado, aparece uma tela pop-up com as contas deste usuário identificadas pelo Google bem como a possibilidade de adicionar uma conta que não está listada. Caso seja o primeiro acesso, após escolher a conta que será utilizada, é necessário permitir que o Google utilize algumas informações vinculadas a esta conta. 16

Figura 4 Tela de contas Figura 5 Permissões necessárias Após o login ser efetuado com sucesso, serão exibidas as informações do usuário no topo na tela, o menu, e os botões de logout e revoke access. 17

Figura 6 Tela do Menu Principal Após este procedimento, se o usuário desejar fechar o aplicativo e retornar mais tarde, seus dados estarão salvos e não é necessário efetuar login novamente. Caso o usuário deseje se desconectar da conta para, por exemplo, utilizar uma diferente, basta clicar no botão Logout from Google, que será levado à primeira tela (Figura 2). Caso o usuário deseje desvincular sua conta ao aplicativo, basta clicar no botão Revoke Access e também retornará a tela inicial (Figura 2). No primeiro caso, se o usuário desejar acessar novamente o aplicativo com a mesma conta, será levado automaticamente para a tela vista acima (Figura 5). No último caso, se o usuário desejar conectar-se novamente, o procedimento funcionará como se fosse seu primeiro acesso, sendo necessário concordar com as permissões mais uma vez. 18

Capítulo 5 Disciplinas 5.1 Resumo dos envolvidos e usuários Nome Descrição Responsabilidades Administrador Administrador do Aplicativo Manter o banco de dados do fluxograma atualizado. Aluno Usuário final com determinadas restrições e direitos. Cadastrar seu histórico de disciplinas cursadas e em andamento. Registrar opiniões sobre as matérias já cursadas. Professor Usuário final com determinadas restrições e direitos. Cadastrar as disciplinas que lecionará no período atual. Informar o status de suas aulas. Tabela 4 Resumo dos envolvidos e usuários de Disciplinas 19

5.2 Modelagem dos Casos de Uso tabela abaixo. De forma a modelar a seção de Disciplinas, organizamos os casos de usos na UC-01 UC-02 UC-03 UC-04 UC-05 UC-06 UC-07 UC-08 UC-09 #UC Nome da UC Descrição Avaliar disciplina Visualizar opinião sobre disciplina Definir disciplina do período atual Definir disciplina já cursada Visualizar grade Visualizar localização da aula Visualizar Status da aula Definir Status da aula Atualizar Base de Dados Tabela 5 Casos de Uso de Disciplinas Registrar sua opinião na pesquisa do Google+. Acessar a pesquisa do Google+. Acessar a listagem de disciplinas por período e marcar a checkbox onde diz "cursando". Acessar a listagem de disciplinas por período, clicar onde diz "concluída" e confirmar sim no alerta que aparecerá na tela. Acessar a opção grade e visualizar as disciplinas do período atual. Clicar em cima da disciplina presente na grade. Surgirá uma mensagem indicando a sala de aula. Clicar em cima da disciplina presente na grade. Surgirá uma mensagem indicando o status da aula. Clicar em cima da disciplina presente na grade. Surgirá uma mensagem, onde é possível determinar o status da aula. Atualizar a Base de dados com as disciplinas atualizadas. 20

5.3 Diagrama de Caso de Uso Figura 7 - Diagrama de Casos de Uso de Disciplinas 5.4 Funcionamento Para gerar o banco de dados via SQLite, foi utilizado um arquivo de texto (extensão.txt) contendo toda a grade de disciplinas do curso de Engenharia Eletrônica e de Computação. O arquivo continha uma sequencia de caracteres onde o ponto-evírgula ( ; ) foi utilizado como delimitador dos campos principais e dois pontos( : ) para os subcampos: Código;Nome;Período;Créditos;PR1:PR2:PR3;DS1:DS2:DS3;Status Onde PR indica o(s) pré-requisito(s) da matéria em questão, e DS indica o(s) dia(s) da semana no(s) qual(is) a matéria é lecionada. Exemplo: 21

EEL410; Eletronica II;4; 5; EEL315;-;-;TER:QUI;H209;Concluída A partir da leitura desse arquivo foi possível criar o banco de dados utilizando uma classe que estende a SQLiteOpenHelper. Uma vez criada essa base é possível fazer a leitura dessa informação e, então, popular a ListView. Ao clicar em Disciplinas, será exibido um novo menu com as opções Grades, Andamento e Qualidade (figura 8). Figura 8 Menu de Disciplinas a. Andamento Aqui serão disponibilizadas informações quanto ao progresso do usuário na graduação. Será exibido um ListView com todas as possíveis disciplinas da sua graduação, separadas por período. Cada item da lista terá um checkbox à esquerda para ser selecionado quando a matéria está em andamento, ou seja, pertence ao período atual. Clicando sobre o status da disciplina, à direita, este irá alterar para Concluída. 22

Figura 9 Inserção das situações das disciplinas Para salvar tais informações será utilizada a ferramenta de banco de dados SQLite, conforme descrito acima. Utilizando esta ferramenta, os dados coletados serão salvos e utilizados para montar a grade do usuário. b. Grade Selecionando a opção Grade, o sistema compara o dia de hoje com os dias de cada disciplina (informação que é salva no banco de dados, conforme mencionado acima) e então exibe apenas as matérias do dia da semana equivalente. Além disso, verifica também a situação da disciplina, isto é, qual status foi inserido na seção Andamento para exibir somente as disciplinas com o status cursando. Estas serão informadas através de um ListView. 23

Figura 10 Grade do dia Clicando em cima do nome da disciplina, aparecerá uma janela pop-up contendo as seguintes informações, também coletadas do banco de dados: Localização: sala na qual a disciplina será ministrada neste dia. Status: situação na qual se encontra a disciplina naquele momento, podendo ser iniciada, atrasada ou cancelada. 24

Figura 11 Pop-up com local e status da aula c. Qualidade Nesta seção estarão listadas todas as disciplinas presentes no fluxograma do curso do usuário, organizadas por período. Ao clicar em uma disciplina, o usuário será levado a uma postagem em uma Comunidade do Google+, exclusiva para aquela matéria, com uma pergunta sobre a qualidade da disciplina, com cinco opções para resposta: péssima, ruim, média, boa e excelente. 25

Figura 12 Lista com disciplinas a serem avaliadas Figura 13 Questionário para avaliação de disciplinas O usuário poderá abrir o questionário apenas para consulta, acessando na seta do canto superior direito a opção ver resultados. Caso o usuário queira dar sua opinião a respeito da disciplina selecionada, basta clicar em cima da opção desejada e seu voto será computado. Só é possível opinar uma vez para cada disciplina, portanto, caso o usuário já tenha respondido a determinada disciplina, sua nova resposta substituirá a anterior. Caso queira, o usuário também pode inserir comentários sobre a disciplina em questão. 26

Capítulo 6 Conclusão Este trabalho apresentou a proposta para um sistema que visa facilitar o cotidiano dos alunos, professores e demais colaboradores da UFRJ. Para tal foi desenvolvido o projeto de um aplicativo que tem como objetivo (i) Gerenciar o fluxograma de disciplinas e avaliar a qualidade das mesmas, (ii) Promover o acesso à informação sobre as opções disponíveis de alimentação e também avaliar sua qualidade, (iii) Melhorar os processos relacionados a locação de livro e demais obras, e (iv) Facilitar a busca de vagas no estacionamentos e também disponibilizar estimativas sobre tempos de trajeto, sendo os três últimos descritos na referência [1]. Foram levantados os principais problemas e falhas encontrados no ambiente acadêmico e as atuais tentativas de solução para os mesmos. A fim de melhorar esses processos, foram propostas novas soluções mais práticas e eficientes a serem implementadas via aplicativo para celular. As tecnologias utilizadas e a justificativas de escolha das mesma foram previamente apresentadas. Optou-se por implementar as seções Gerenciamento de Usuários, Disciplinas e Alimentação, sendo este último abordado na referência [1], a fim de comprovar a eficiência do projeto. O sistema foi desenvolvido através da IDE Android Studio utilizando a linguagem de programação Java, a biblioteca SQLite, que implementou o banco de dados, e também a rede social Google+. Os testes foram realizados através de um emulador disponibilizado pelo próprio Android Studio, que possui funcionamento idêntico ao de um celular com sistema operacional Android. Os resultados obtidos foram satisfatórios e o aplicativo mostrou-se, então, eficiente para o que havia sido proposto. 6.1 Principais dificuldades Ao longo do desenvolvimento do projeto, foram encontradas algumas dificuldades decorrentes das tecnologias escolhidas. Alguns problemas puderam ser 27

total ou parcialmente contornados, já outros necessitam de um estudo mais profundo e serão melhor descritos em trabalhos futuros. Na seção de Gerenciamento de Usuários, a ideia original era que o e- mail utilizado para login tivesse exclusivamente extensão @poli.ufrj.br (ou @ufrj.br caso o aplicativo englobasse a universidade como um todo). O sistema do Google+ é capaz sim de fazer esse tipo de verificação, porem é necessário que quando realizado o cadastro do aplicativo na plataforma de desenvolvimento da Google seja feito o cadastro do domínio desejado (no caso poli.ufrj.br ou ufrj.br). Esse tipo de cadastro precisa ser validado com o administrator do domínio, o que inviabilizou a etapa uma vez que não possuímos essa permissão. Na seção de Disciplinas foi identificada a necessidade de armazenamento de dados. Na maior parte da seção Disciplinas, uma vez que os dados eram únicos de cada usuário, podemos contornar o uso de um banco de dados no modelo cliente-servidor e optou-se pelo uso do SQLite. Já em partes que necessitam integração entre usuários, como um aluno visualizar o status de uma aula (atualizada pelo professor), esse modelo de banco de dados se tornou necessário. Na seção Disciplinas, citamos que um dos problemas seria quanto à localização da sala. Em parte, esta questão foi solucionada, pois ao clicar na disciplina desejada, é exibida uma janela pop-up com a referência da sala. Entretanto, caso o aluno não conheça o prédio e a disposição das salas, ainda assim será uma dificuldade. Para solucionar este caso, nossa solução seria integrar o Google Maps ao aplicativo, pois ele já possui diversos estabelecimentos mapeados internamente, porém a UFRJ ainda não foi explorada nessa funcionalidade. Caso a UFRJ seja mapeada pelo Google Maps, a sugestão seria integrá-lo ao aplicativo, de forma que, ao clicar na disciplina desejada, o usuário poderá acessar o Google Maps, que criará um caminho do seu local até a sala. Inicialmente, tentamos utilizar a inserção das disciplinas pelo usuário de forma mais automatizada: o usuário faria download do Boletim ou Histórico no formato.pdf e o próprio sistema leria as informações e 28

. organizaria em já cursadas anteriormente e cursando no período atual. Após testarmos algumas bibliotecas disponíveis para leitura de pdf, percebemos que, pelo formato do Boletim e do Histórico, com diversas tabelas e colunas, a leitura não saía como desejada, então não conseguimos concluir como o projeto inicial. Adicionalmente, as bibliotecas que encontramos realizava a leitura da primeira linha do arquivo, porém, para realizar a leitura completa, era necessário pagar pelo uso da biblioteca, o que tornaria o projeto mais caro e poderia impactar na sua viabilidade. Conforme já dito acima, a intenção do projeto é facilitar diversas atividades da universidade e ainda integrar os processos em uma única solução. Algumas atividades já possuem soluções isoladas, como por exemplo, o SIGA, sistema para inscrição e consulta de disciplinas e o Minerva, sistema para busca de obras das Bibliotecas da UFRJ. Idealmente, o aplicativo incorporaria todas elas, de forma que o usuário já estaria acostumado com o seu uso e as otimizaria, acrescentando funcionalidades extras ou aprimorando as existentes. 29

Bibliografia [1] Natália França Tavares - Universidade Inteligente: Soluções Tecnológicas para Melhoria do Cotidiano Universitário Módulos alimentação, biblioteca e transporte. [2] Android Acessado em julho de 2015. https://www.android.com [3] Google Developers Acessado em julho de 2015. https://developers.google.com/+/ [4] Suelen Goularte Carvalho. Android Studio - Vantagens e Desvantagens em relação ao Eclipse. Revista imasters #08 - Open web: ultrapassando os limites do HTML5 Revista imasters n.08 - Novembro/2013 (pagina 42) [5] Android - Persistência de dados usando SQLite. Luciano Luzzi Acessado em julho de 2015. http://www.mobiltec.com.br/blog/index.php/android-persistencia-dedados-usando-sqlite/ [6] Global Stats Counter Acessado em julho de 2015. http://gs.statcounter.com/ [7] Android Developers Acessado em julho de 2015. https://developer.android.com/ [8] Android Developers Blog Acessado em julho de 2015. http://android-developers.blogspot.com.br/ [9] Sensores de Vagas 30

Acessado em julho de 2015. http://www.prosiga.com.br/controleinteligente/ [10] Base Minerva UFRJ Acessado em julho de 2015. www.minerva.ufrj.br/ [11] Proto IO Acessado em Julho de 2015. http://proto.io/ [12] Google Drive Acessado em Julho de 2015. https://drive.google.com 31

Apêndice A A.1 Implementação das Classes Este apêndice contem as principais classes utilizadas para implementar as tarefas descritas nos capítulos 4 e 5. A.1.1 Gerenciamento de Usuários public class MainActivity extends Activity implements OnClickListener, ConnectionCallbacks, OnConnectionFailedListener { private static final int RC_SIGN_IN = 0; // Logcat tag private static final String TAG = "MainActivity"; private static final int PROFILE_PIC_SIZE = 400; // Google client to interact with Google API private GoogleApiClient mgoogleapiclient; /** * Flag que indica que um PendingIntent está ativo e previne * que novos intents sejam iniciados */ private boolean mintentinprogress; private boolean msigninclicked; private ConnectionResult mconnectionresult; private SignInButton btnsignin; private Button btnsignout, btnrevokeaccess; private ImageView imgprofilepic; private TextView txtname, txtemail; private LinearLayout llprofilelayout; private ListView menulist; String[] menuoptions = new String[] { "Disciplinas","Alimentação", "Transporte", "Biblioteca"; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btnsignin = (SignInButton) findviewbyid(r.id.btn_sign_in); btnsignout = (Button) findviewbyid(r.id.btn_sign_out); btnrevokeaccess = (Button) findviewbyid(r.id.btn_revoke_access); imgprofilepic = (ImageView) findviewbyid(r.id.imgprofilepic); txtname = (TextView) findviewbyid(r.id.txtname); txtemail = (TextView) findviewbyid(r.id.txtemail); llprofilelayout = (LinearLayout) findviewbyid(r.id.llprofile); menulist = (ListView) findviewbyid(r.id.menulist); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, menuoptions); menulist.setadapter(adapter); id) { menulist.setonitemclicklistener(new AdapterView.OnItemClickListener() { @Override public void onitemclick(adapterview<?> parent, View view, int position, long Intent i; switch (position) { case 0: i = new Intent(getApplicationContext(), Disciplinas.class); 32

startactivity(i); break; case 1: i = new Intent(getApplicationContext(), Alimentacao.class); startactivity(i); break; case 2: i = new Intent(getApplicationContext(), Transporte.class); startactivity(i); break; case 3: i = new Intent(getApplicationContext(), Biblioteca.class); startactivity(i); break; ); btnsignin.setonclicklistener(this); btnsignout.setonclicklistener(this); btnrevokeaccess.setonclicklistener(this); mgoogleapiclient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API).addScope(new Scope(Scopes.PROFILE)).build(); protected void onstart() { super.onstart(); mgoogleapiclient.connect(); protected void onstop() { super.onstop(); if (mgoogleapiclient.isconnected()) { mgoogleapiclient.disconnect(); private void resolvesigninerror() { if (mconnectionresult.hasresolution()) { try { mintentinprogress = true; mconnectionresult.startresolutionforresult(this, RC_SIGN_IN); catch (SendIntentException e) { mintentinprogress = false; mgoogleapiclient.connect(); @Override public void onconnectionfailed(connectionresult result) { if (!result.hasresolution()) { GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); return; if (!mintentinprogress) { // Armazena o ConnectionResult para uso posterior mconnectionresult = result; if (msigninclicked) { // O usuario ja clicou 'sign-in' entao e feita a tentativa // de resolver todos os problemas // ate que o usuario estaja logado, senao e cancelado resolvesigninerror(); @Override protected void onactivityresult(int requestcode, int responsecode, Intent intent) { if (requestcode == RC_SIGN_IN) { if (responsecode!= RESULT_OK) { msigninclicked = false; mintentinprogress = false; if (!mgoogleapiclient.isconnecting()) { mgoogleapiclient.connect(); 33

@Override public void onconnected(bundle arg0) { msigninclicked = false; Toast.makeText(this, "Usuário conectado!", Toast.LENGTH_LONG).show(); // Coletar informacoes do usuario getprofileinformation(); // Atualizar a UI depois de conectar updateui(true); /** * Atualizar a UI, mostran/escondendo os botoes e o layout com o perfil * */ private void updateui(boolean issignedin) { if (issignedin) { btnsignin.setvisibility(view.gone); btnsignout.setvisibility(view.visible); btnrevokeaccess.setvisibility(view.visible); llprofilelayout.setvisibility(view.visible); menulist.setvisibility(view.visible); else { btnsignin.setvisibility(view.visible); btnsignout.setvisibility(view.gone); btnrevokeaccess.setvisibility(view.gone); llprofilelayout.setvisibility(view.gone); menulist.setvisibility(view.gone); /** * Coletar informacoes do usuario * */ private void getprofileinformation() { try { if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient)!= null) { Person currentperson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); String personname = currentperson.getdisplayname(); String personphotourl = currentperson.getimage().geturl(); String persongoogleplusprofile = currentperson.geturl(); String email = Plus.AccountApi.getAccountName(mGoogleApiClient); Log.e(TAG, "Name: " + personname + ", plusprofile: " + persongoogleplusprofile + ", email: " + email + ", Image: " + personphotourl); txtname.settext(personname); txtemail.settext(email); personphotourl = personphotourl.substring(0, personphotourl.length() - 2) + PROFILE_PIC_SIZE; new LoadProfileImage(imgProfilePic).execute(personPhotoUrl); else { Toast.makeText(getApplicationContext(), "Informacao de usuário inválida", Toast.LENGTH_LONG).show(); catch (Exception e) { e.printstacktrace(); @Override public void onconnectionsuspended(int arg0) { mgoogleapiclient.connect(); updateui(false); @Override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.menu_main, menu); return true; @Override public void onclick(view v) { switch (v.getid()) { case R.id.btn_sign_in: signinwithgplus(); break; case R.id.btn_sign_out: signoutfromgplus(); break; case R.id.btn_revoke_access: revokegplusaccess(); 34

break; private void signinwithgplus() { if (!mgoogleapiclient.isconnecting()) { msigninclicked = true; resolvesigninerror(); private void signoutfromgplus() { if (mgoogleapiclient.isconnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); mgoogleapiclient.disconnect(); mgoogleapiclient.connect(); updateui(false); private void revokegplusaccess() { if (mgoogleapiclient.isconnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() { @Override public void onresult(status arg0) { Log.e(TAG, "User access revoked!"); mgoogleapiclient.connect(); updateui(false); ); /** * Tarefa assincrona executada em backgroud para carregar a foto do usuario * */ private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> { ImageView bmimage; public LoadProfileImage(ImageView bmimage) { this.bmimage = bmimage; protected Bitmap doinbackground(string... urls) { String urldisplay = urls[0]; Bitmap micon11 = null; try { InputStream in = new java.net.url(urldisplay).openstream(); micon11 = BitmapFactory.decodeStream(in); catch (Exception e) { Log.e("Error", e.getmessage()); e.printstacktrace(); return micon11; protected void onpostexecute(bitmap result) { bmimage.setimagebitmap(result); A.1.2 Disciplinas public class Disciplinas extends ActionBarActivity { String[] menuopdisciplinas = new String[] { "Grade","Andamento", "Qualidade"; private ListView menudisciplinas; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_disciplinas); menudisciplinas = (ListView) findviewbyid(r.id.menudisciplinas); ArrayAdapter<String> newadapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, menuopdisciplinas); menudisciplinas.setadapter(newadapter); menudisciplinas.setonitemclicklistener(new AdapterView.OnItemClickListener() { 35

id) { @Override public void onitemclick(adapterview<?> parent, View view, int position, long Calendar scalendar = Calendar.getInstance(); int day = scalendar.get(calendar.day_of_week); Intent i; switch (position) { case 0: switch (day) { case Calendar.SUNDAY: i = new Intent(getApplicationContext(), Segunda.class); startactivity(i); break; case Calendar.TUESDAY: i = new Intent(getApplicationContext(), Terca.class); startactivity(i); break; case Calendar.WEDNESDAY: i = new Intent(getApplicationContext(), Wednesday.class); startactivity(i); break; case Calendar.THURSDAY: i = new Intent(getApplicationContext(), Thursday.class); startactivity(i); break; case Calendar.FRIDAY: i = new Intent(getApplicationContext(), Friday.class); startactivity(i); break; break; case 1: i = new Intent(getApplicationContext(), TesteAndamento2.class); startactivity(i); break; case 2: i = new Intent(getApplicationContext(), Qualidade.class); startactivity(i); break; ); A.1.3 Grade public class Segunda extends ActionBarActivity { final String[] local = new String[10]; TextView daytext; MyDBHandler dbhandler; MyDBHandler2 dbchecker; String[] menuoptionsname, menuoptionscode = new String[10]; private ListView gradedodia; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_segunda); daytext = (TextView) findviewbyid(r.id.daytext); daytext.settext("olá! " + "\n" + "\n" + "Estas são suas aulas do dia:"); gradedodia = (ListView) findviewbyid(r.id.gradedodia); dbchecker = new MyDBHandler2(this, null, null, 1); dbhandler = new MyDBHandler(getApplicationContext(), null, null, 1); menuoptionsname = dbchecker.getclassname("segunda").split(";"); menuoptionscode = dbchecker.getclassid("segunda").split(";"); for(int i = 0; i < menuoptionsname.length; i++) { local[i]= dbhandler.getlocal(menuoptionscode[i]); 36

ArrayAdapter<String> newadapter = new ArrayAdapter<String>( this, android.r.layout.simple_list_item_1, menuoptionsname); gradedodia.setadapter(newadapter); gradedodia.setonitemclicklistener(new AdapterView.OnItemClickListener() { @Override public void onitemclick( AdapterView<?> parent, View view, int position, long id) { AlertDialog alertdialog; String cut; switch (position) { case 0: cut = local[0].substring(0,4); alertdialog = new AlertDialog.Builder(Segunda.this).create(); alertdialog.settitle(menuoptionsname[0]); alertdialog.setmessage("local: " + cut + "\n" + "Status: Confimada!"); alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); alertdialog.show(); break; case 1: cut = local[1].substring(0,4); alertdialog = new AlertDialog.Builder(Segunda.this).create(); alertdialog.settitle(menuoptionsname[1]); alertdialog.setmessage("local: " + cut + "\n" + "Status: Cancelada!"); alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); alertdialog.show(); break; case 2: cut = local[2].substring(0, 4); alertdialog = new AlertDialog.Builder(Segunda.this).create(); alertdialog.settitle(menuoptionsname[2]); alertdialog.setmessage("local: " + cut + "\n" + "Status: Confimada!"); alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); alertdialog.show(); break; case 3: cut = local[3].substring(0, 4); alertdialog = new AlertDialog.Builder(Segunda.this).create(); alertdialog.settitle(menuoptionsname[2]); alertdialog.setmessage("local: " + cut + "\n" + "Status: Confimada!"); alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); alertdialog.show(); break; case 4: cut = local[4].substring(0, 4); alertdialog = new AlertDialog.Builder(Segunda.this).create(); alertdialog.settitle(menuoptionsname[2]); alertdialog.setmessage("local: " + cut + "\n" + "Status: Confimada!"); alertdialog.setbutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { ); alertdialog.show(); break; ); 37

A.1.4 Andamento public class TesteAndamento2 extends ActionBarActivity implements AdapterView.OnItemSelectedListener { MyCustomAdapter dataadapter = null; TextView textview, titletext; MyDBHandler dbhandler; MyDBHandler2 dbchecker; Spinner spinner; SharedPreferences sharedpreferences, sharedprefstring, getsharedprefint; String prename = "PREFERENCES"; String prename2 = "PREFSTRING"; String prename3 = "PREFINT"; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_teste_andamento2); titletext = (TextView) findviewbyid(r.id.titletext); titletext.settext("controle aqui as materias cursadas e em andamento:"); spinner = (Spinner) findviewbyid(r.id.spinner2); spinner.setonitemselectedlistener(this); List<String> categories = new ArrayList<String>(); categories.add("1o Periodo"); categories.add("2o Periodo"); ArrayAdapter<String> dataadapter = new ArrayAdapter<String>(this, android.r.layout.simple_spinner_item, categories); dataadapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner.setadapter(dataadapter); getsharedprefint = getsharedpreferences("spinner", Context.MODE_PRIVATE); spinner.setselection(getsharedprefint.getint("spinner",0)); getfields(); displaylistview(spinner.getselecteditemposition()); private void displaylistview(int position) { loadpref2(spinner.getselecteditem().tostring()); final ArrayList<CheckMateria> materialist = new ArrayList<CheckMateria>(); String codigo, nome, diasemana, status, periodo; CheckMateria itemlist; BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(getAssets().open("123.txt"))); String mline = reader.readline(); switch (position){ case (0): while (mline!= null) { String[] message = mline.split(";"); codigo = message[0]; nome = message[1]; periodo = message[2]; diasemana = message[7]; status = message[9]; itemlist = new CheckMateria( codigo, nome, periodo, diasemana, false, status); if(periodo.equalsignorecase("1")) materialist.add(itemlist); mline = reader.readline(); break; 38