Ao iniciar o sistema será exibido para o usuário uma tela de login, nela existe um botão para a criação de um novo usuário, quando o usuário clicar nesse botão será apresentado a ele uma tela de cadastro para que sejam digitados o seu nome (posteriormente editável), seu nome de usuário e sua senha (estes fixos aquela conta), após todos os campos serem preenchidos e o botão "Confirmar" ser clicado um novo usuário é adicionado a base de dados (para este projeto salva numa lista).
Após o login será apresentada ao usuário uma janela com as informações da sua conta - quem são seus amigos, de quais comunidades ele participa, além de um menu onde através dele o usuário pode editar suas informaçõs, adicionar novos dados, adicionar amigos, enviar mensagens, entre outras funcionalidades que vão ser explicadas abaixo, em outras palavras esta janela é a janela base de navegação no sistema.
Abaixo segue uma imagem com um exemplo desta tela
O primeiro botão do menu é o botão de configuração do perfil, ao clicar nele vão ser exibidos outros dois botões que são usudos para adicionar as informações ao seu perfil e para adicionar novas informações ao seu perfil, respectivamente, veja abaixo este "submenu".
Para adicionar uma nova informação ao seu perfil basta clicar no botão config. perfil e depois clicar no botão adicionar caracteristica, feito isso você será redirecionado para uma janela pedindo o titulo da informação que você deseja adicionar (idade, status de relacionamento, formação, etc.), após isso, outra janela aparecerá solicitando que você digite a descrição da informação anteriormente citada, quando os dois forem digitados e confirmados pelo usuário será adicionado as suas informações.
Ao clicar no botão de edição de informações do perfil você será redirecionado a uma janela com seu nome de usuario (este, inalterável), e com todas as suas outras informações - como nome (por padrão), idade, onde trabalha, entre outras coisas. Para editar alguma informação, basta clicar na caixa de texto com o valor atual, alterar para o novo valor e clicar em confirmar e a informação será atualizada no seu perfil. Veja abaixo um exemplo de tela.
Para adicionar um amigo ou ingressar em uma comunidade você vai clicar no botão adicionar amigo/Comunidade e digitar o nome do amigo ou da comunidade que você deseja adicionar ou ser inserido, feito isso, o sistema vai realizar uma busca e a partir disso cinco coisas podem acontecer
- O usuário correspondente ser encontrado, com isso, uma notificação é enviada ao usuário.
- Este usuário já ter enviado uma solitação de amizade para você, neste caso você será notificado disso eir nas notificações aceitar o usuário para ser adicionado.
- Você já ser amigo do usuário.
- Ser uma comunidade, neste caso, você é inserido como membro desta comunidade
- Ser uma comunidade e você já estar inserido nela.
- O nome buscado não ser encontrado.
Ao selecionar esta opção no menu a esquerda será aberta uma janela com a sua lista de amigos e comunidades em uma caixa de seleção e um campo de texto para que você digite a mensagem que deseja enviar (Veja abaixo uma imagem desta tela).
Para criar uma comunidade você deve clicar no botão criar comunidade, feito isso uma janela vai abrir e solicitar o nome da comunidade e uma breve descrição desta.
Ao clicar no botão ver perfil será aberta uma janela que vai solicitar o nome de usuário ou o nome da comunidade, após este ser digitado e confirmado pelo usuário, o iFace faz uma busca em sua base de dados e, em caso de encontrar uma correspondencia (vale lembrar que o nome de usuário e o nome da comunidade é único e inalterável) ele exibirá uma janela com essas informações, veja abaixo um exemplo:
No centro inferior da janela inicial é exibido um painel sob dois botões, são eles: amigos e mensagens.
Ao clicar em amigos o painel é atualizado e nele é carregado o nome de usuário e o nome de todos os seus amigos, assim, como, todas as comunidades.
Ao clicar em mensagens o painel é atualizado e nele são exibidas todas as suas mensagens enviadas e recebidas (inclusive as mensagens que você recebeu através das comunidades que participa).
No canto superior direito há um botão relativo as notificações, sempre que houver notificações de amizade o sino tem uma imagem indicando que ele está tocando, quando não houver notificações não respondidas, um sino parado.
Por fim, a função de deletar sua conta, ao fazer isso tudo relacionado a você, para fazer isso, é percorrida sua lista de amigos e exclui você da lista de amigos deles, feito isso, algo similar acontece nas notificações, mas é removido da lista de notificações, depois disso, são buscadas as comunidades que você participa e é dono se só existir você ela é apagada, caso contrario é passada a posse dela para algum outro membro, em seguida são apagas as mensagens enviadas por você e para você, e, por fim, sua conta é removida do banco de dados do sistema.
- Motivação: Definir o que é uma comunidade para o sistema
- Solução: Com isso é possivel ter dados compartilhados globalmente com todos os usuário através de uma lista de comunidades
- Vantagem: Com ela é possível agrupar todas as informações de uma comunidade
- Motivação: Definir o que seria a messagem no sistema
- Solução: agrupar em um mesmo objeto quem enviou, o que enviou e para quem enviou
- Vantagem: Ter todos os dados agrupados em um só objeto, permitindo assim que apenas os os usuários relacionados a mensagem tenham acesso a ela
- Desvantagem: Informação duplicada, pois, a mesma mensagem é salva no usuário que enviou e no usuário que recebeu a mensagem.
- Motivação: Agrupar todas as informações que cabem no usuário em relação as especificações sistema
- Solução: criar um usuário e dar a ele acesso as suas informações
- Vantagem: Poder ter uma lista de usuários global compartilhada para todos os usuários.
- Desvantagem: Informação duplicada, para formar a lista de amigos e de notificações de amizade é salvo todo o objeto do outro usuário em duas novas listas além da lista global.
- Motivação: Criar uma classe que tenha os padrões de configuração de botões
- Solução: Eliminar a duplicação de trechos de código para configurar um botão
- Vantagem: eliminar a duplicação de código
- Motivação: Criar um objeto que possa agrupar informações em pares para salvar os novos detalhes de cada usuário (tendo na chave e valor o titulo e a descrição da caracteristica)
- Solução: Criar um objeto que agrupe informações em pares
- Vantagem: Quando a relação direta entre os objetos (como no caso de titulo e descrição) é interessante que os dois sejam salvos juntos, para evitar a chance de ter um chaveamento errado e relacionar o que deveria ser uma chave com o valor errado
- Motivação: Ter agrupado os dados gerais do sistema, como o URL base das imagens, as cores utilizadas no fundo e nas fontes, além da estilização do texto.
- Solução: Uma classe com constantes que tenham esses valores estaticos.
- Vantagem: Se for necessário alterar a paleta de cores ou o caminho onde as imagens estão, basta alterar a sua constante e será atualizado para todo o sistema.
- Motivação: Evitar a duplicação de código na configuração do sistema
- Solução: Criar uma classe que faça essas configurações de maneira geral e, ao passar os componentes que ela
- Vantagem: redução na duplicação e na quantidade de código escrito, visto que em seus métodos são recebidos arrays e, por conta disso, é possivel percorrer os componentes com um for e aplicar a eles certa configuração
- Motivação: Ter uma janela que agrupe as funcionalidades do usuário
- Solução: Criar uma classe que crie as funcionalidades
- Vantagem: Ter em um só lugar toda a navegação do usuário pós login
- Motivação: Ter uma janela que faça o cadastro de uma nova comunidade
- Solução: Criar uma janela com os dados de uma nova comunidade
- Vantagem: Ter uma forma interativa de adicionar uma nova comunidade
- Motivação: exibir de os detalhes do usuário de forma interativa e amigavel
- Solução: Criar uma janela que exiba de forma amigavel as informações do usuário
- Vantagem: É mais atrativo para o usuário ter os dados exibidos em uma janela do que no terminal
- Motivação: editar os dados de um usuário
- Solução: Criar uma janela que receba os dados atuais e permita a atualização
- Vantagem: É mais atrativo ao usuário comum utilizar uma janela
- Desvantagem: demanda mais código
- Motivação: ter como o usuário entrar em sua conta no sistema
- Solução: criar uma janela que o permita fazer isso
- Vantagem: É mais atrativo ao usuário comum utilizar uma janela
- Desvantagem: demanda mais código
- Motivação: cadastrar um usuário
- Solução: Criar uma janela que faça o cadastro de um novo usuário
- Vantagem: É mais atrativo ao usuário comum utilizar uma janela
- Desvantagem: demanda mais código
- Motivação: permitir a troca de mensagens entre os usuários
- Solução: Criar uma janela que permita o usuário escolher para quem quer enviar uma mensagem e fazer com que o envio seja feito
- Vantagem: É mais atrativo ao usuário comum utilizar uma janela
- Desvantagem: demanda mais código
- Motivação: Obrigar todas as janelas a seguir o mesmo padrão de nome de método para as configurações
- Solução: Criar uma interface com os métodos padrão e fazer todas as janelas implementarem ela
- Vantagem: ter a certeza de um padrão de métodos de configuração de janelas
- Desvantagem: estes métodos tem de ser públicos
- Motivação: ter um padrão para a configuração das janelas
- Solução:ter um método padrão que seja por toda a configuração de uma janela
- Vantagens: ter a configuração da janela agrupada neste método, fazendo com que, ao desejar acrescentar ou remover algo, ser necessário apenas invocar neste método
- Motivação: ter um padrão para criar o posicionamento das janelas.
- Solução:ter um método padrão que seja responsável pelo posicionamento dos componentes
- Vantagens: ter o posicionamento dos componentes agrupado neste método
- Motivação: ter um padrão para as ações dos botões
- Solução: Criar um método que contenha todas as ações
- Motivação: Remover a duplicação de código na configuração básica de uma janela
- Solução: ter um método que faça as configurações da janela em relação a layout, tamanho, localização da janela, o que fazer quando a janela for fechada, visibilidade da janela
- Vantagem: Reduzir a quantidade de código digitado e repetido anteriormente presente e reuso de métodos
- Motivação: Automatizar e reduzir a quantidade de cdóigo escrito para adicionar componentes em uma janela
- Solução: criar um método que ao ser invocado, recebe o container e os componentes a serem adicionados e os adiciona ao container
- Vantagem: Redução de código e reuso de método
- Motivação: Automatizar o processo de colorir as fontes dos componentes
- Solução: Criar um método que receba um array com todos os componentes e altere a cor da sua fonte
- Motivação: Formatar o texto a partir da estilização do html para um header H3
- Solução: Usar o suporte dado pelo java para isso e criar um método que retorne a string formatada
- Motivação: Formatar o texto a partir da estilização do html para um header H2
- Solução: Usar o suporte dado pelo java para isso e criar um método que retorne a string formatada
- Motivação: Formatar o texto a partir da estilização do html para uma tag p
- Solução: Usar o suporte dado pelo java para isso e criar um método que retorne a string formatada
- Motivação: Atribuir os valores iniciais para a chave e o valor do pair
- Solução: criar um método construtor que receba os dois parametros e inicie as váriaveis
- Motivação: criar uma animação de hover
- Solução: criar um método que escute as ações do mouse e mude a cor de fundo do botão em relação a isso
- Motivação: reduzir a duplicação de código para configurar um botão
- Solução: criar um método que configure um botão da forma padrão definida pelo sistema
- Motivação: alinhar o texto dos botões em relação a borda
- Solução: criar um método que alinhe o texto do botão
icons color: #6E8EB5