Giter Club home page Giter Club logo

android-nimble-surveys's Introduction

Hi there, I'm Phuoc Bui πŸ‘‹

I am a dynamic and creative Android Developer with over 7 years of experience in crafting state-of-the-art Android applications. With expertise in Modern Android Development, I consistently produce high-quality apps that delight users and clients alike. My track record includes successfully delivering numerous apps to the Google Play Store. I am dedicated to continuous learning and skill enhancement to ensure I deliver exceptional and innovative applications.

Huuphuoc1396's GitHub stats

πŸ› οΈ My Tech Stack

  • Languages: Java, Kotlin
  • Frameworks: Jetpack Compose, Android SDK
  • Architecture: MVVM, Clean Architecture
  • Tools: Android Studio, Firebase, Retrofit, Dagger, Room, OkHttp, Gson, Glide
  • Version Control: Git, GitHub
  • CI/CD: GitHub Actions, GitLab CI/CD, Bitrise.io
  • Concurrency: Kotlin Coroutines, RxJava2
  • Dependency Injection: Hilt, Dagger2, Koin
  • Testing: Unit Testing, Instrumented Tests, JaCoCo
  • Security: Securing Android applications
  • Firebase Services: Authentication, Cloud Messaging, In-App Messaging, Firestore Database, Storage
  • Project Management: Code review, team development
  • Other Skills: Building location-aware apps, delivering apps to Google Play Store, understanding of Git-flow

πŸ“« How to reach me

πŸš€ Projects

  • Android Template: This project is designed to streamline the development of Android applications using Clean Architecture principles. It provides a robust foundation for building scalable, maintainable, and testable applications by separating concerns into distinct layers.
  • Android Step Detector: This project leverages either the TYPE_STEP_DETECTOR or TYPE_ACCELEROMETER sensors to detect steps. It avoids TYPE_STEP_COUNTER due to inconsistent triggering on some devices. The template ensures broad compatibility by offering a fallback to accelerometer-based step detection using Sensor Fusion Math, making it a versatile solution for step detection across various devices.

Feel free to explore my repositories to see more!


Top Langs

android-nimble-surveys's People

Contributors

huuphuoc1396 avatar

Watchers

 avatar

android-nimble-surveys's Issues

[Bug] The page indicator update logic seems to be a bit flaky

As a side note, the page indicator update logic seems to be a bit flaky that when scrolling from left to right, it won't update until the page is locked on the next page. However, in the opposite direction, it updates immediately when the scrolling first started. Lastly, the scroll sometime jumps multiple pages when scrolling in a fast manner:

23-11-28-18-32-27.mp4

Implement login page

  • Implement the login page.
  • Implement the OAuth authentication including the storage of access tokens.
  • Implement the automatic usage of refresh tokens to keep the user logged in using the OAuth API.

Start of the code review process πŸ‘‹

Hello Phuoc πŸ‘‹ , thank you for your effort on the code submission. I am Mike, Engineering Lead at Nimble, and I am happy to be the reviewer for our code review session.

During the review process, I would like to know more about your decisions, so I will create issues in some areas where there could be more improvements regarding your submission. Since solving every possible problem would take too long, I will prioritize the most important ones.

At the same time, please keep in mind that this is a bi-directional process, and I would love to hear back from you as well. Therefore, do not hesitate to ask questions or share your opinions about the implementation (if any) during the process.

We expect the code review process to be completed within 2-3 days. As a result, please make sure you are responsive during this process. If you need more time, please let us know as soon as possible so we can plan accordingly.

If we are aligned on any issue, and you would like to correct them, please address the issue using a proper git flow (creating a new branch, opening a Pull Request (PR) per issue, and merging the code when you are ready), and I will follow up on those fixes. Just so you know, you don't have to close any of my created issues after merging your PRs; I will help verify and close them for you once they pass. πŸ˜‡

In the end, I do hope that you find the process enjoyable. Good luck and happy coding. 🀘

Initialize project

  • Create a new empty activity project
  • Support Android 5.0 (API 21) and up
  • Use Kotlin language.

Implement home page

On the home screen, each survey card must display the following info:

  • Cover image (background)
  • Name (in bold)
  • Description

There must be 2 actions:

  • Horizontal scroll through the surveys.
  • A button β€œTake Survey” should take the user to the survey detail screen.

[Concern] Secret managment

It is nice to see that you are trying to encapsulate the client's id and secret in a cpp library called native-lib, which can potentially protect the sensitive information during app's runtime. However, these credentials are still exposed in git versioning:

std::string getData(int x) {
std::string app_secret;
// The first key that you want to protect against decompile
if (x == 1)
// client_id
app_secret = "6GbE8dhoz519l2N_F99StqoOs6Tcmm1rXgda4q__rIw";
// The second key that you want to protect against decompile
if (x == 2)
// client_secret
app_secret = "_ayfIm7BeUAhx2W1OUqi20fwO3uNxfo1QstyKlFCgHw";
// The number of parameters to be protected can be increased.
return app_secret;
}

Your speed of submission is appreciated, but as a reminder, we would also love to see development driven with the least compromisation, too.

[Bug] the Survey List UI implementation doesn't meet the requirements

Issues

This is one of our original requirement on the indicator list's behavior:

Screenshot 2023-11-29 at 17 43 10

In fact, while you did implement pagination loading with androidx.paging under the hood, the indicator count always shows the full total data from the API regardless of the currently loaded survey items from the API responses.

At the same time, the application needs to show the survey list after loading all the data with a valid logged-in session like the design. Currently, there are multiple UI problems with a survey item on the Home screen:

  • The display image for each survey item is very blurry:

  • For survey images with transparent background, it has an overlapping issue with the default onboarding background image:

  • The page indicator UI has overlapping issue with the survey title when its content span over 2 lines:

Expect

  • You need to make sure and follow the requirements correctly for the navigation indicator list (bullets) that must be dynamic and based on the API response.

  • The survey item should look clearer and has no overlapping issue like the design:

[Feature] Add shimmer loading indicator animation

Issue

The application needs to show the initial shimmer loading view with animation after first entering the app with a valid logged-in session. Currently, there is no proper shimmer loading animation, just a native spinning indicator, which does not match the design.

23-11-29-18-13-34.mp4

Expect

The animation for the skeleton loading view must be implemented like the following design with a correct animation that glows repeatedly transitioning from left to right.

Screen.Recording.2023-10-28.at.16.24.14.mov

[Chore] Increase test coverage for the application

Issue

It was great to see you have implemented multiple unit test cases for multiple layers like the Usecase (domain layer), ViewModel (app layer), Repository + Response classes (data layer). Now, it is a bit odd that you didn't write any unit tests for the HomeViewModel, which is the most important logic file in the application.

class HomeViewModelTest : ViewModelTest() {
private val getUserUseCase: GetUserUseCase = mockk()
private val logoutUseCase: LogoutUseCase = mockk()
private val getSurveyListUseCase: GetSurveyListUseCase = mockk()
private lateinit var homeViewModel: HomeViewModel
override fun setUp() {
super.setUp()
homeViewModel = HomeViewModel(
getUserUseCase = getUserUseCase,
logoutUseCase = logoutUseCase,
getSurveyListUseCase = getSurveyListUseCase,
)
}
}

Also, there is no instrumented test found in the application. It would be great if a few instrumented tests to verify some basic flows in the application could be provided.

Expect

  • The test coverage for this project can be improved to reach above 80% for all the ViewModel classes used.
    Screenshot 2023-11-29 at 18 44 17

  • Create some instrumented tests with Expresso for verifying a simple flow (e.g. open the Survey Lists screen from the Login screen) in the application.

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.