Giter Club home page Giter Club logo

android-musician-tools's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar mercuriete avatar renovate-bot avatar renovate[bot] avatar

Stargazers

 avatar

Watchers

 avatar  avatar

android-musician-tools's Issues

Azure Pipelines sign

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do Azure pipelines sign so that i can do Azure pipelines sign


OK but now serious

I want to improve the azure continuous integration pipeline from only build to build, create a bundle and sign a bundle.

This is the second part of the epic #35

In order to achieve this goal we need to read some docs:
https://docs.microsoft.com/ca-es/azure/devops/pipelines/tasks/build/android-signing

DI Framework Dagger2

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do Dagger 2 so that i can Dagger 2


OK but now serious
part of the job is actually in develop-dagger2 branch

I want to implement dagger 2 dependency injection in order to follow the MVP google architecture example

I like too much dependency injection framework because you can decouple your application following SOLID and then configuring the wiring with DI.

I dont need to explain more details because is already implemented and working, I only need a little bit of cleaning.

Automatic Version Bump

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do automatic version bump so that i can do automatic version bump.


OK but now serious

I want to implement automatic version bump because I dont want to make a commit everytime I need to do a release on Google Play.

We would like to follow semver but with semver is imposible to do automatic version bump so:

the app version will follow the following schema:

versionName => year.month.day

versionCode => number of commits from initial commit

 git rev-list --count HEAD

With this changes I can deploy to Google Play a consistent version number but a different versionName per day.
This will have some pros and some cons.
It will fix the problem of having to hardcode the version and make a commit each time we want do do a release, but the problem is we cant do a version without fooling the system clock.

TLDR;
I don't want trash commits hardcoding version numbers.
So I want to automate versionCode and versionName.

Edit: the motivation of changing to a year.month.day schema is some projects in the wild are changing to that schema and I want to follow the convention.

Clean Boilerplate from skeleton

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to clean shit so that i can clean shit


OK but now serious
I need to delete some ui elements from skeleton boilerplate.
Most of them are in MainActivity.
I want to delete all stuff but the BPM label and the button

Add Mailmap

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to add mailmap so that i can add mailmap


OK but now serious

I want to clean the git log because I had 2 mail addresses and I wanted to be the only contributor in github pulse.
Adding a mapping between all my mails fixes the problem of beeing two different commiters.

sonar is not working

from logs

> Task :sonarqube
Could not find ref: master in refs/heads, refs/remotes/upstream or refs/remotes/origin
> Task :sonarqube FAILED

use fragments

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to fragments so that i can do fragments


OK but now serious

research fragments usage on dagger2 and in android in general.

The deliverable of this spike will be that BPMCalculator now is an Activity and the presenter is injected to the activity. Intead of that, BPMCalculatorActivity will be BPMCalculatorFragment and the presenter will be injected to that fragment.

We need FragmentScoped annotation as well.

Send Jacoco report to sonar

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do sonar coverage so that i can do sonar coverage


OK but now serious

I tried on previous attemps to send the jacoco report to sonarqube.

We need to insvestigate why coverage is not working.

This ticket blocks espresso-cucumber test because we need coverage report.

Product Backlog

Product Backlog

Here we can discuss the product backlog before create a new feature request and before add it to the
kanban board

Functional requirements

  • BPM Detector with a button #2 #3
  • add bottom navigation #12 #15
  • add settings + permission fragment
  • Permission manager (request to user app's permissions) (record audio at least)
  • Metronome without accentuation (only tempo) (tic tic tic)
  • Metronome with accentuation (tempo + flexible time signature) (tic toc toc toc)
  • Pitch Detector (harmonic product spectrum) (Equal temperament)
  • BPM Detector with a sound (clap clap clap)

Non functional requirements

  • Continous Integration with Travis CI 90bcae1
  • Unit Testing #2 #3
  • Clean Boilerplate from skeleton #6 #7
  • Dependency Injection Framework (Dagger2) #4 #5
  • Add editorconfig #10 #11
  • MVP Architecture #8 #9
  • Learn and Use fragments #13 #14
  • update android sdk to 29.0.0 #18 #19
  • Jacoco reports #20 #21 #22
  • Update deps 2020-05 #27 #28
  • Automatic Version Bump #29 #30
  • Azure Pipelines only build #36 #37
  • Add Mailmap #39 #40
  • Update deps 2020-06 #33 #34
  • Espresso Testing + cucumber #25 #26
  • Implement github actions CI #68 #69
  • Instrumented test in CI #94 #95
  • Migrate from dagger2 to hilt #102 #103
  • Sonarcloud.io #20 #21 #22 #46 #116
  • Send Jacoco report to sonar #23 #24 #46 #116 #122
  • Azure Pipelines sign
  • Azure Pipelines upload to Google Play
  • App Translated to all languages (en_US, en_GB, es_ES at least)
  • Interface should be beautiful
  • Continous Deployment to Google Play
  • Clean Code
  • Fast and Performant code
  • Usage of GPU for audio processing (Vulkan Compute Shaders) (this is kind a joke or wishlist)
  • I wanna be rich

Update deps 2020 05

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do updates so that i can do updates


OK but now serious

Time to time we need to make some housekeeping of the project

Update Android Studio if possible.
Update kotlin plugin
Update all Android Studio plugins
Update al deps
Update gradle wrapper
Update gradle plugin
Fix warnings from Android Lint.

All this changes are non functional changes so... If is not broken why to fix it?
Because I want to lower the technical debt as a good developer.

add editorconfig

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do editorconfig so that i can do editorconfig


OK but now serious

just do editorconfig

Continous Deployment to Google Play

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do CD to Google Play so that i can do CD to Google Play


OK but now serious

I want to implement Continuous Deployment to Google Play in order to be more efficient in this one man project.

In order to achieve this goal we need to split the effort in three steps.
First one is adding a new CI pipeline but using azure pipelines.
Second one is sign the bundle with my key
Third one is upload the bundle to Google Play

This is an Epic:

  • Azure Pipelines only build #36
  • Azure Pipelines sign
  • Azure Pipelines upload to Google Play

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/android.yml
  • actions/checkout v3
  • actions/setup-java v3.11.0
  • reactivecircus/android-emulator-runner v2.28.0
.github/workflows/gitleaks.yaml
  • actions/checkout v3
  • zricethezav/gitleaks-action v1.6.0
gradle
gradle.properties
settings.gradle
build.gradle
  • com.android.tools.build:gradle 7.4.2
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.8.22
  • com.google.dagger:hilt-android-gradle-plugin 2.46.1
  • org.sonarsource.scanner.gradle:sonarqube-gradle-plugin 3.5.0.2730
  • com.hiya:jacoco-android 0.2
  • io.gitlab.arturbosch.detekt:detekt-gradle-plugin 1.23.0
  • org.jetbrains.kotlin:kotlin-stdlib-jdk7 1.8.22
  • io.cucumber:cucumber-android 4.4.+
  • io.cucumber:cucumber-picocontainer 4.4.+
  • com.google.dagger:hilt-android 2.46.1
  • com.google.dagger:hilt-android-compiler 2.46.1
  • com.google.dagger:hilt-android-testing 2.46.1
app/build.gradle
  • jacoco 0.8.10
  • androidx.appcompat:appcompat 1.4.2
  • androidx.constraintlayout:constraintlayout 2.1.4
  • com.google.android.material:material 1.6.1
  • android.arch.navigation:navigation-fragment 1.0.0
  • android.arch.navigation:navigation-ui 1.0.0
  • junit:junit 4.13.2
  • androidx.test.ext:junit 1.1.5
  • androidx.test:core-ktx 1.5.0
  • androidx.test.espresso:espresso-core 3.5.1
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 7.6.1

  • Check this box to trigger a request for Renovate to run again on this repository

implement espresso and cucumber

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do BDD so that i can do BDD


OK but now serious

I want to implement behaviour driven development using cucumber on top of espresso.

Right now we only have 20% of coverage on test that is unacceptable.
but the problem is that code is all in fragment or activity and can't be tested as unit tests.

check this tutorial: https://medium.com/gumtree-dev-team/android-bdd-with-cucumber-and-espresso-the-full-guide-9c20cfcb8535

steps are

  1. install dependencies
  2. create a simple scenario (open main activity)
  3. create a robot for main activity.
  4. check "hello world" string.

This is a simple test and not functional.

As optional we can do:
4. click twice on button
5. assert on BPM label

Add Sonar and Jacoco

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do sonar so that i can do sonar.


OK but now serious

I want to improve the code quality using a free for opensource tool called sonarcloud.io.

To archive this goal we need to read the travis documentation:
https://docs.travis-ci.com/user/sonarcloud/
that automatically setup all the important sonar properties.

and follow this tutorial to archive sonar scanner with jacoco coverage report:
https://medium.com/@vialyx/android-code-coverage-metrics-with-sonarqube-jacoco-3f99bc700e84

Once we archive this, we need to enforce the checks in the github settings.

happy coding!

BPM Detector with a button

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do a bpm detector so that i can detect BPM


OK but now serious
part of the job is actually in develop branch

from the point of the user:
The user can tap a button several times and then in a label the BPM should appear in a label

form the point of the implementation:
The logic takes the user input and should save a system clock timestamp in an array.
Then some time later, the app can calculate the average of the deltas between taps and then we can convert from nanoseconds (period) to beat per minute (frequency).

add bottom navigation

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do bottom navigation so that i can do bottom navigation


OK but now serious

Now that we have all important features in the archichitectural skeleton, I need a simple navigation for the different views.

In the begining I thought that navigation with tabs was the best option, but then i change the opinion and i want to go for bottom navigation.

the first implmentation have to do the following:

  • User will be prompted to the beat calculator fragment when load the application

    • so we need to implement that view as a fragment and not as activity.
  • Then we need to implement a stupid blank fragment for the future setting view and the permission view.

  • The User can switch between this 2 views with bottom navigation buttons.

  • We have to use dagger 2 to inject those fragments and for lifecycle.

  • We have to think about memory issues. How to delete and reinstantiate those fragments or if we want to keep the presenters as Singletons.

  • Once we have this User Story done, we could start to think in Continous Deployment and deply our first app.

add mvp architecture

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do MVP so that i can be fancy


OK but now serious

I wanted to decuple the views and the logic, so i read some documentation about it and it seems that MVP is the best option for android.
I saw an example on android architecture-examples that makes use of dagger2 and MVP.

My goal is create a project with dagger2, MVP and kotlin.

The things to archive this goal are.

  • create a contract for the main activity (that now is bpm detector activity)
  • implement view contract in MainActivity
  • implement presenter contract that talks with view and the BPMDetectorService.

Out of main scope, I also wanted to delete an extra button, and tap directly to the label to test if decoupling is good (that i know that it is good).

Azure Pipelines only build

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do Azure Pipelines only build so that i can do Azure pipelines only build


OK but now serious

I want to implement Continous Integration on Azure pipelines as part of the epic #35

In order to achieve this task I will copy and paste this pipeline from the Azure documentation:
https://github.com/MicrosoftDocs/pipelines-android/blob/master/azure-pipelines.yml
and read this:
https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android?view=azure-devops

The difficulty of this task is 0.

Restrict access to exported components with appropriate permissions

https://sonarcloud.io/project/issues?id=android-musician-tools&open=AXfA5BmbQKHTrGwwMrjG&resolved=false&types=VULNERABILITY

Restrict access to exported components with appropriate permissions
If an Android component is exported and no permissions are defined then other mobile apps can interact with it and perform potential unauthorized actions.
For instance, an exported content provider can expose sensitive data, if no permissions are defined, to other mobile apps.
It's highly recommended to implement restrictive permissions on exposed components.

Update deps 2020 06

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to do updates so that i can do updates


OK but now serious

Time to time we need to make some housekeeping of the project

Update Android Studio to 4.0
Update kotlin plugin
Update all Android Studio plugins
Update al deps
Update gradle wrapper
Update gradle plugin
Fix warnings from Android Lint.

At the point of updating I am hitting this bug:
arturdm/jacoco-android-gradle-plugin#72
so copiying this solution:
JuulLabs-OSS/mcumgr-android#74

All this changes are non functional changes so... If is not broken why to fix it?
Because I want to lower the technical debt as a good developer.

Update android sdk 29

As a < type of user >, I want < some goal > so that < some reason >.
Fuking Scrum

I as a product_owner/analyst/developer/tester/user, I want to update android so that i can have android updated

OK but now serious


We need to keep the android sdk level updated to the new android Q.
There are no more motivation than android recommends to update always to the latest sdk.

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.