Event Trackr Android app. Allows users to track birthdays and anniversaries of friends and family.

Overview

Trackr


our epic trackr logo

Android CI

Event Trackr Android app. Allows users to track birthdays and anniversaries of friends and family.

You need to open this project in Android Studio to get the best development experience.

Configuring the Project

To keep things organized, this project uses the modules feature of IntelliJ. IntelliJ modules separate out the phase-specific folders from the source code, and keep the project root from getting cluttered by gradle build files (which are only necessary for the source code).

To set this up, you need to import the gradle project:

  • Right click on /trackr-app/build.gradle
  • Click Link Gradle Project

Building the Project

  1. After adding the gradle project, the top-right build menu should be populated with build options.
  2. Ensure that trackr-app.app is selected, and a device of your choosing is available (either an emulator or a physically tethered device).
  3. Click the hammer to build the project, and then the play button to launch the app on your device

Running Tests

Once the project has been configured, the simplest way to run all tests is to navigate (in IntelliJ) to trackr-app/app/src/androidTest/java/com/trackr/trackr_app, right click on this folder, and select run 'All Tests'.

Running the project

You can download the apk from the latest release and download the app on any android device with APK level 26+

Comments
  • fixed typo in package name

    fixed typo in package name "usecases" and raises issues regarding the PersonManager class

    I fixed a small typo in the package name.

    Here are a couple of questions/issues I think need to be discussed:

    • I think PersonManger should be creating people rather than taking Person objects as inputs for the methods. Taking Person as argument delegates the task of creating Person objects to other classes. This may result in violations of clean architecture, i.e. the task of creating Person objects may be delegated to a class that shouldn't know that Person exists.
    • For the edit method, maybe we could split it up into different methods. That is, an editFirstName, editLastName, addTags, removeTags, changeDescription methods, or something like that.
    • Using a hashmap that maps name to Person object may not be correct. For instance, what would happen if two people have the exact first name, i.e. imagine if we had a person named Jonathan Pace and a person named Jonathan Garvin. How would you store both? (or if we were mapping full names, how would you deal with two people with the exact same first and last names?). There are a couple of solutions to this problem that I came up with:
      • Use a hashMap< String, List< Person>> instead of a hashMap.
      • Use a regular List, i.e. List< Person> instead at the price of constant-time lookup.
      • Create a private static variable in the Person class called id. Each id will correspond with exactly ONE person, i.e. it is unique. Every time we create a new person we increase id by one. This is a cool idea but when enough people have been created the id variable may overflow. I'm not sure how java handles integer overflow but this should be something we consider.

      Feel free to use any ideas you come up with! These are just some tentative ideas that we can play around with.

    • I feel like the role of PersonManager is not well defined. Here are some questions that come to mind:
      • Why is PersonManager storing Person objects? Are we using the stored data later? Maybe if we create two different events for a single Person, then we could use the existing Person and have two events reference it, instead of having two different Person objects represent the same person. If so, how should we implement this and what would we need to change? I would assume that we would need to be able to figure out if the Person is already created or not.
      • Should PersonManager be creating Person objects and then return the Person created for other classes to use? If so, we need to consider which classes are going to be using the returned Person classes so we aren't violating clean architecture.
      • Basically, on the implementation level, what do we want the PersonManager to be doing? That is, what do you need PersonManager to implement so that the class you're writing works?

    Do you guys have any ideas or suggestions on what we should do?

    That is all. Thanks for coming to my TED talk.

    help wanted question 
    opened by menghaoyu2002 4
  • File structure changes

    File structure changes

    I deleted all the classes and files we won't be using anymore. This includes

    • all the use cases, their tasks have been delegated to the repos
    • all the interface adapters and input output boundaries.
    • the anniversary and birthday classes (I think @romanZupancic thought they were redundant and I agree with him)

    I also restructured our file structure like this image

    The ViewModel folder will probably go in the future, and we can put our view models in their respective UI folders.

    Tell me if you disagree with any of these changes. These changes are pretty massive.

    opened by menghaoyu2002 3
  • Added AddEvent Page

    Added AddEvent Page

    Added an add event page to the app. Also modified the navigation routes inside of MainScreen.kt to use strings because for some reason using dot notation wasn't working. Currently, the addEvent page adds events to the home screen ViewModels. This will change when we start using the database.

    opened by danielhocevar 3
  • Created the new general event design pattern

    Created the new general event design pattern

    Okay, so I finally found the time to start reworking the design of events within our app.

    This whole thing is still pretty bare bones (and there definitely some implementation-level kinks I need to work out), but the general structure is here.

    • Basically, we now only have one Event class (event types not yet implemented)
    • The behavior of event classes is designated by EventRepeaterStrategys: the idea being that each even repeater strategy contains the algorithm that designates how an even will repeat over time
      • Currently, each implementation of EventRepeaterStrategy subclasses will generate the dates for an event to repeat every time it is called; this might be slow if we're continually calculating on repeat intervals, but there is always an opportunity to implement some kind of adaptive memoization.
    • The actual event objects, complete with their repetition strategies, can be requested through EventFactory
      • I'm still debating whether this is a good idea, it seems a little overkill? But otherwise we'd need outside code to interact directly with the Repetition strategies, which could get messy really quickly

    I'm marking this as draft because there is still a ~~shit ton~~ bunch of stuff to do:

    • First, I need to make sure it builds by updating EventManager and related functions
    • I need to work out some kind of event-specific reminder system (could that be another subsystem all on it's own?)
    • Then, I need to write some tests
    • Then, I need to figure out some kind of interface that will allow us to select the repetition strategy from the front-end
    • Probably other stuff

    If you think I did bad, yell at me pls.

    opened by romanZupancic 3
  • Added Interfaces for the Manager Classes

    Added Interfaces for the Manager Classes

    One point of feedback from our TA was that we weren't properly implementing ISP. This pr seeks to address this as well as ensure that our codebase conforms to DIP.

    Additions:

    • Interfaces for each of the manager classes were added
    • There are multiple interfaces for each manager class, each with specific responsibilities (ISP)
    • Hilt doesn't support directly injecting an interface into a constructor, so each interface was given a binding using an abstract class called Binding
    • Here's some documentation on hilt interface bindings: https://developer.android.com/training/dependency-injection/hilt-android

    Other Changes:

    • Modified view models to depend on these new interfaces instead of the manager classes themselves.
    • Updated view model documentation to account for these changes
    opened by danielhocevar 2
  • Bridge the gap between views and data repositories (the viewmodel proposal)

    Bridge the gap between views and data repositories (the viewmodel proposal)

    This commit implements the bare-bones required for viewmodels to communicate data between the views and the models.

    The goal is to produce a product that builds.

    opened by romanZupancic 2
  • Refactored Event to store a person instance attribute

    Refactored Event to store a person instance attribute

    Actually makes these series of classes usable, but most of the event implementation still sucks. I will work on adding #16 in a future pull request, along with any tagging features we want implemented for events.

    For this pull request: Do we want to get rid of the event heirarchy altogether, and just use tags instead on a single concrete event class?

    opened by romanZupancic 2
  • Made UUID's self generating and added firstname + lastname to the add event screen + integrated wrapper class into ui

    Made UUID's self generating and added firstname + lastname to the add event screen + integrated wrapper class into ui

    I integrated the wrapper class into our views. Our viewmodels now fetch List and display it as a LiveData for the UI to observe. I did a lot of things, replaced/added a lot of code, let me know if you hate anything I did. Idk how good my changes are in terms of architecture, advice is appreciated.

    Person and Users and Events are created in the ViewModel right now. Should we move this to the repos and just pass in the values from the viewmodels?

    goodnight ✌

    opened by menghaoyu2002 1
  • Sqlite local

    Sqlite local

    this is really big i'm sorry. main things to go over: https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 ^^^^READ THIS IF YOU'RE TRYING TO WRAP YOUR HEAD AROUND SOME PART OF THIS FOR FRONTEND IMPLEMENTATION. it can probably explain better than me. with that out of the way:

    • in theory this should mostly work. if it doesn't let me know.
    • i think i deleted dataAccess or something. it was dead to me
    • the database is still NOT INSTANTIATED ANYWHERE. we are still flying blind!
    • it is far past my bedtime so no tests written yet
    • for implementation, please please please do user functionality first since it is simplest and getting it working will pave the way for persons and events
    • clean architecture wise, this is what is happening: we have our entities user person event. these are annotated for easy storage in the db.

    we have data access use cases for each entity as daos. (data access objects) these connect to their respective repositories which are also use cases but i think they hold onto some data for interface adapters.

    then we got viewModels which connect to frontend. how? not entirely sure. some stuff might need tweaking (events in particular atm) but its mostly there.

    i hope to all that is holy i never have to make a commit this ungodly ever again. maybe just maybe it will simply work.

    opened by nathan-hansen 1
  • Added interface_adapters package

    Added interface_adapters package

    Adds BirthdayPresenter class, and InputBoundary and OutputBoundary Interfaces BirthdayPresenter should be class to run program for now. So it will handle "exit" input, not cli.

    NEEDED:

    • EventManager.view() function
    • cli to implement InputBoundary, OutputBoundary
    opened by JeremiahDjianto 1
  • Created Person class and added empty tests

    Created Person class and added empty tests

    Resolves #5

    I used a HashSet to store tags because I think that duplicate tags are redundant. This can be discussed if needed.

    The event classes will need to be edited to use this person class.

    JUnit needs to be added to path for any tests to be written.

    Empty tests have been written as a placeholder for now.

    Not sure how the directory will work so I just added the Person class in the main directory. This should be discussed before we implement anything else because we don't want to refactor code.

    opened by menghaoyu2002 1
Releases(v2.0.0)
  • v2.0.0(Dec 6, 2021)

    The second release of our app!

    What's New?

    • Events now have Person object's attached to them
    • Multiple events can now be made for the same person
    • A screen to view all Person objects and their corresponding events
    • The first and last names of Person objects can be edited.
    • Events displayed on other screens update to reflect the edited name
    • Person objects can now be deleted along with all their corresponding events, after a warning.
    Source code(tar.gz)
    Source code(zip)
    trackr.apk(10.71 MB)
  • v1.0.0(Nov 14, 2021)

Owner
null
This is the toy app for Lesson 9 of the Android App Development in Kotlin course on Udacity.

Behind the Scenes - DevByte Viewer App This is the toy app for Lesson 9 of the Android App Development in Kotlin course on Udacity. DevByte DevByte Vi

Jaime 1 Oct 20, 2021
The simple app is to demonstrate how the modern Enterprise Android App Architecture should be

Weather Forecast App The simple app is to demonstrate how the modern Enterprise Android App Architecture should be. Clean Architecture (Mr Uncle Bob)

null 2 Nov 12, 2021
eCommerce app developed with Android Jetpack and Kotlin

garden-shed eCommerce app developed with Android Jetpack and Kotlin This is my first mobile application. Garden Shed is a simple application for buyin

null 2 Nov 1, 2022
LoadApp This is my submission for the "Building an Advanced Android App"

LoadApp This is my submission for the "Building an Advanced Android App" project of the Udacity Android Kotlin Developer nanodegree. (C) Jaldhar H. Vy

Jaldhar H. Vyas 1 Oct 7, 2021
MVI Architecture Android Beginners: Sample App

MVI Architecture Android Beginners: Sample App This repository contains a sample app that implements MVI architecture using Kotlin, ViewModel, LiveDat

null 16 Dec 7, 2022
A sample app that demonstrate how to build an Android application using the Uncle Bob's Clean Architecture approach

A sample app that demonstrate how to build an Android application using the Uncle Bob's Clean Architecture approach

Ahmed Shaban  Elhdad 2 Apr 8, 2022
A sample photo browsing app in Kotlin, Android using Picsum image API.

Picsum Photo App Functionality The app's functionality includes: Fetch a list of images from picsum photos api (https://picsum.photos/) and show them

Rafsan Ahmad 15 Nov 2, 2022
An app to manage posts such as create, update, show the post list and detail also delete the post.

Otopost An app to manage posts such as create, update, show the post list and detail also delete the post. Minimum Requirements Software Android Studi

Imantoko 1 Oct 20, 2021
A sample Album list app that shows how to use ViewModels and Room together with RxJava & Dagger2, in Kotlin by Clean Architecture.

Kotlin-MVVM-Hilt A sample Album list app that shows how to use ViewModels and Room together with RxJava & Dagger2, in Kotlin by Clean Architecture. Im

hpAndro 1 May 12, 2022
The code for the Congression App Challenge Webinar.

Getting-Started-with-Android-Studio-and-Kotlin-CAC-Webinar A webinar hosted by the Congressional App Challenge and theCoderSchool The code for the Con

null 1 Oct 18, 2021
The source code for the Bus Scheduler app codelab

Bus Scheduler App This folder contains the source code for the Bus Scheduler app codelab. Introduction The Bus Scheduler app displays a list of bus st

Sharlene Kumbhar 1 Nov 21, 2021
Room - SleepQualityTracker app

Room - SleepQualityTracker app This is the toy app for Lesson 6 of the Android App Development in Kotlin course on Udacity. SleepQualityTracker The Sl

null 0 Jun 10, 2022
Taken from a PeopleCode app package to be used as a refactoring exercise

The code below was taken from a PeopleCode app package to be used as a refactoring exercise. Packages original: contains the code below translated int

Luis Arcos 1 Feb 15, 2022
Base App - MVVM, Base Structure, Hilt, Kotlin Flow, Retrofit

Base App - MVVM, Base Structure, Hilt, Kotlin Flow, Retrofit

Kerem TÜRKER 39 Nov 17, 2022
A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.

Android Architecture Blueprints v2 Android Architecture Blueprints is a project to showcase different architectural approaches to developing Android a

Android 42k Jan 3, 2023
📚 Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Android Components Architecture in a Modular Word Android Components Architecture in a Modular Word is a sample project that presents modern, 2020 app

Madalin Valceleanu 2.3k Dec 30, 2022
Saga of Star wars - An Android sample repo showcasing Clean Arch with MVVM and Epoxy models

Star Wars Universe This is a showcase android application written in Kotlin and follows Clean Code architecture to showcase Characters from the StarWa

Adit Lal 5 Dec 13, 2022
An Android project template with MVVM, Hilt, Navigation and Compose

compose-android-template An Android project template with MVVM, Hilt, Navigation and Compose ?? Status UNDER ACTIVE DEVELOPMENT ?? Terminologies Termi

Sifar 20 Oct 20, 2022
This project was created as a demo project for implementing latest frameworks, Android APIs, tools, and techniques.

IWeather Android Application This project was created as a demo project for implementing latest frameworks, Android APIs, tools, and techniques. It fo

Ali Mansour 9 Dec 30, 2022