Giter Club home page Giter Club logo

jay-android's People

Contributors

dependabot[bot] avatar hlcaptain avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

cwjfeifei

jay-android's Issues

Final fixups for release

During closed testing, some issues have come up and I decided to patch them up in an issue. Also some legal concerns are being assessed as well with data collection.

Extend setup documentation

Extend setup documentation with paying attention to Gradle JVM versions (can cause problems when syncing using the JVM Toolchain).

Document and showcase new features

Write some basic documentation regarding new features, showcase functionality with media, like pictrues, gifs and video. Be thorough, but don't go in-depth too much.

Stop sessions with last recorded event when crash happens

When Jay suddenly crashes, on next startup, try to close any dangling sessions, not stopped yet. When there are ongoing sessions without a running service, stop those sessions by reading the last sensor event or location event associated with them.

Implement per user history and favorite search results

System for handling history, favorite and search suggestion records are not made for multi user use. The interface don't filter out others' results. Show records on a per user basis. Implement it via Firestore if needed, replacing the current Mapbox implementation.

Fix ServiceInteractor Unit tests

There is a strange problem when running unit tests in ServiceInteractorTest.kt. The test sometimes passes, sometimes failes depending on how the tests are run, ie. running all tests in illyan.jay.interactor.ServiceInteractorTest.kt, or running tests in illyan.jay package or running tests in illyan.jay.interactor.

Measure performance

Start measuring performance via Firebase Performance and/or implement Baseline Profiles. Keep in mind to avoid premature optimizations. This issue's primary forcus is performance monitoring.

Write unit and UI tests

With robust testing libraries, such as Mockk and JUnit5, write a basic unit test suite for domain and sub-domain (data access) classes.

For UI tests, use Espresso.

Refactor Sessions Management and Screen

Refactor handling of sessions, so syncing with local and cloud databases will be easier to do. May poke around store logic for sessions. Assign a unique identifier for each one, for example.

Enhance UI and introduce dark mode

UI has taken some heavy punches as development was more functionality driven than usability driven. Redesign bad looking UI Composables with Figma, a great time to try out the newly released Relay Plugin as well. Implement theming into Jay and have a dark great dark mode experience.

Path display more info by gradient

Enable Path to filter more information with the use of the gradient. E.g. having the speed of the vehicle shown as a gradient on the path, or the accuracy of the GPS signal during the Session.

Encode data on-device for security

Use Firebase to give personalized key to encode data for each user using a certain device. This is done to reduce unauthenticated access to locally cached data. Implementation can change drastically, this issue is kind of a Proof-of-Concept (POC).

Implement Machine Learning

Implement the usage of MLKit and machine learning models in the app to process raw data collected on-device.

Throw more `Exceptions`

Not enough Exception is being thrown currently which means, there might be bugs sneaking by silently. When assuming a state, don't just return when something is wrong, but actively throw an exception to find out what caused the wrong state in the first place.

Rely more on transactions and batches

Firestore operations can be interrupted, which might destroy consistency. With transactions and batches, operations which are already run are reverted if a failure happens during a transaction.

Use more model classes for UI

The UI should not depend on classes, other than custom, self wrote state data classes. In Search.kt, there are multiple instances when we are depending from Mapbox's implementation and data classes of favorite and search history items. Create a model package inside multiple UI elements which should depend on custom UI state data classes, so they become Previewable.

Basic Firebase data sync

Implement data sync to the cloud of Sessions and location data related to them. Modify current Composables listing these elements to reflect the option to sync when signed in.

Use BOM libraries to reduce `build.gradle` clutter

Try to make use of Bill of Material type libraries, because only one BOM library needs to be implemented instead of 5+ when using multiple sublibraries of a tech. They also tent to be well tested together and more stable than linking other libraries with different versions.

Create auto logoff option in settings

Auto sign out may be a great feature for enterprise users, as multiple users may use a singular device with multiple accounts. When auto sign out is enabled, privacy of others may be preserved, when they forget to log out, as the system automatically does it for them.

Migrate all flows to StateFlow

Currently not all flows are StateFlow and that limits flexibility when a state must be returned immediately.

Migrate all existing flows using map, mapLatest, flatMapLatest, etc. functions using stateIn at the end to convert flow to stateFlow again.

Reduce space of stored data

Try to make data storing more efficient. Convert doubles to floats, reduce sensor updates, etc. Make cloud sync more efficient and cost and storage effective, more scalable.

Reduce data sizes

Reduce collected data sizes using serialization, compression. Use Kotlin's Serialization library and ZLIB/GZIP if necessary. Experiment, test out new ways of compressing the data.

Start and End pins on Path

Place a Start and End pin on Path. Start can be a green, or white colored one, End should be a finish line, flag or something checked.

Offline indicator

  • Don't make mapbox search queries when there is no internet
  • Show the user that there is no internet connection

Use `Firestore` model objects

Create model classes for Firestore documents to eliminate getting resources from raw string references. This enables us to be more flexible when handling data transactions.

Current code:

val pathSnapshotListener = firestore
    .collection(PathsCollectionPath)
    .whereEqualTo("ownerUUID", authInteractor.userUUID)
    .addSnapshotListener { pathSnapshot, pathError ->
        if (pathError != null) {
            Timber.e(pathError, "Error while deleting user data: ${pathError.message}")
        } else if (!arePathsDeleted.value) {
            Timber.d("Delete ${pathSnapshot!!.documents.size} path data for user ${authInteractor.userUUID?.take(4)}")
            pathSnapshot.documents.forEach {
                it.reference.delete()
            }
            arePathsDeleted.value = true
        }
    }

New code should try to eliminate using raw strings, like "ownerUUID" and PathsCollectionPath.

Feature basic navigation via Mapbox Navigation SDK

Implement basic functionality and proper navigation flow into Jay.

The user should be flawlessly turn on navigation and Jay tracks their phone's sensors.
The solution must be UX friendly. Location of the phone should be taken into consideration.
Permissions must be handled properly when needed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.