Code Monkey home page Code Monkey logo

bmm-app's Introduction

BMM Mobile Apps

This repository contains an app to consume the content from BMM on your phone. It uses Xamarin to deliver apps for Android and iOS.

If you have a feature request please submit it at User Voice. If you find a bug feel free to create an issue or submit a pull request.

Getting started

Warning: if you want to run your locally built version of BMM on your iPhone, you need an Developer license from Apple (~100$/year). Even then, the process to get it to work is quite complicated and you should not rely on our help.

  1. Download and install Visual Studio (We use Jetbrains Rider but if you do not have experience we recommend to use Visual Studio)
  2. Setup Android and iOS environment

Branching model

We use git flow as our branching model. We use the following naming conventions:

  • For release branches: release/*
    • Where '*' is the version number
  • For feature branches: feature/*
    • Where '*' is the name of the feature in PascalCase
  • For hotfix branches: hotfix/*
    • Where '*' is the name of the critical bug in PascalCase

Creating a pull request

We work with pull requests so other project members can review your code before it appears in the develop branch.

  1. Create a feature branch for your feature according to the naming convention above.
  2. Commit your changes and push your changes to the repository in the features branch.
  3. Create a pull request to the develop branch.
  4. Link the issue and the pull request

Your pull requests should be small, ideally below 400 lines of code but never more than one feature.

After you submitted a pull request the code will be reviewed by some selected people. After your pull request is submitted, make sure you check back regularly and have notifications enabled so you get notified whenever someone adds a comment to your pull request. When the reviewers are satisfied and there are no more comments or tasks, the pull request will be merged. You are not done with implementing the feature before the pull request is merged.

DOs and DON'TS

  • DO include tests when adding new features, either Unit tests where possible and UITests to test the platform specific UI code. When fixing bugs, start with adding a test that highlights how the current behavior is broken.
  • DO keep the discussions focused. When a new or related topic comes up it's often better to create new issue than to side track the discussion.
  • DON'T create big pull request, but always keep them as small and focused as possible. Generally you should split up a pull request whenever you can and it doesn't break anything. Only one feature per pull request.
  • DON'T surprise us with big pull requests. Instead, file an issue and start a discussion, so we can agree on a direction before you invest a large amount of time.

Continuous delivery

  • Commits to the develop branch create a new alpha build
  • Commits to a release/* branch create a new beta build which is distributed to the beta testers
  • Commits to a hotfix/* branch create a new beta build which is distributed to the beta testers
  • Commits to the main branch create a build for the App Store and Play Store

App Center

We use App Center for:

  1. Gathering crashes: Only by install the packages App Center will automatically save the crashes with the respective report, nevertheless if there is some specific crash that is common, there should be an specific log for it
  2. Logging:
    • Errors: It gives more specific information about common errors that may occur
    • Debug: It gives specific information about data that may be recolected while debugging
    • Information: It gives extra information about the different functions and sections that are being use
    • Warnings It gives extra information about the warning that are boing use and how can they affect the application
  3. UI Tests

How can I see the traffic from my devices?

Windows

Some video tutorials are available here: https://www.telerik.com/videos/fiddler Docs for iOS: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureForiOS Docs for Android: https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureForAndroid

MacOS

https://proxyman.io - it's awesome

Firebase

How can I test Firebase Analytics (Debug View), Firebase Remote Config and Notifications on DEBUG mode and simulator for iOS?

  1. Go to BMM.UI.iOS -> Properties.
  2. Go to iOS Bundle Signing and make sure you have set Signing Identity and Provisional Profile correctly.
  3. Set up Custom Entitlements in iOS Bundle Signing. There is Entitlements.plist in iOS project which should be set there.

To use Notifications, you must do this additional step too:

  1. Make sure you use 'RegisterForNotification(app)' method in AppDelegate.

To use Firebase Analytics Debug View - follow instruction below: How to set DebugView for Analytics

Updating Firebase packages

When the app doesn't start after upgrading a firebase package or throws some weird message clean this folder: ~/Library/Caches/XamarinBuildDownload

bmm-app's People

Contributors

adelinn avatar akrol95 avatar bcc-bot avatar dependabot[bot] avatar kkuepper avatar laurensgroeneveld avatar nvelinz avatar olivereisenhut avatar rvanoord avatar simonsimcity avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

bmm-app's Issues

check login problem without Chrome installed

Reng: "I got a new phone, but couldn't log into the BMM app with Google
Just keeps going back to the login screen
That was specifically with the Samsung browser set as the system default browser
With Chrome as the default browser, it worked."

  • we cannot reproduce this, need more info
  • Android API 24 and older it requires Chrome to work

Download icon looking "cursive"

  • the download icon on playlists sometimes looks weird
  • it usually shows correctly the first time, but when opening the seconds time it looks distorted

telegram-cloud-photo-size-2-5409016843068356887-y

Player Redesign

  • Lyrics: link to songtreasures; use remote config; placeholders (songnumber, songbook (HV, FMB)): songtreasures_song_link
    • song information in Relations (type songbook)
    • mapping from herrens_veier to HV should already exist in app somewhere
  • language: send request to api to get single track; adjust Accept-Language based on user selection
    • would be nice to keep the current position
    • language of track in the queue should be changed as well (e.g. go to next track; go to previous track again -> should play in changed language)
  • try to keep special links to BrunstadTV (e.g. https://int-bmm.brunstad.org/track/100426)
  • button to cast can be dropped and done at a later stage if it's a lot of work

player covering bottom bar

  • most likely only happens on devices with gesture navigation (instead of bottom buttons)
  • unable to reproduce on Arek's phones or simulators

...

  • check on browserstack
  • check on Pixel 3a (Karsten)

easier experiments

  • details in PlaybackOrigin for TrackCollection & Podcast
  • send age and church to discover
    • add feature flag
  • internal link contains ViewModel/PlaybackOrigin
  • support A/B testing

continue audiobook

  • implement tiles
  • continue album (and play if there's no position)

notes:

  • backend (vs local)
    • shared between devices
    • don't lose it when logging out
    • no offline updates
  • app changes required
    • send latest position
    • audiobook overvi
  • homescreen
    • send all info to render
    • when clicking play load additional information about the album to fill the whole queue
  • album view
    • replace whole album request with one containing all info
    • retrieve info immediately (to decide if button should be shown or not)
      when clicking continue, still do request (use offline info if request fails)
    • when clicking continue, do request to server (similar to random podcast episode)
      • disadvantage: does not work offline

continue audiobook fixes

switching darkmode while player is open

reproduction steps

  • only tested on iPhone, not sure about Android
  • set dark mode to "follow system settings"
  • play anything
  • open player
  • swipe down to get the system menu and toggle dark mode
  • -> the player view is not updated and I need to reopen the player for it to switch to the new mode

ANDROID: Empty player when app tombstoning

Every time, when player is opened (even not playing) and then the app is minimalized for some time (to allow system kill it) after opening the app again player fragment is recovering.

PlayerFragment takes information about current track from the player, and as the player is not initialized, we have empty view.

With the new version of the app with queue recovering, the old fragment is also recovered, but after some time last queue is recovered, which sets proper player state and populates fragment, so we see empty player only for few seconds.

The problem is that the "empty player" event is logged from old fragment anyway and it's not reliable and not corresponding with what user sees on the screen.

Albums by year

  • deeplink to /archive opens LibraryArchiveViewModel
  • better tracking of what user does on browse screen

[iOS] OS track information not updated

I don't have proper steps to reproduce it
playing in BMM works fine
only the information displayed in the iOS integration (widget when you swipe down, lockscreen) is wrong/outdated

flickering images

prevent the flickering by checking if the new item is the same as the previous item

splashscreen for dark mode

  • always systemsettings vs switch after few milliseconds
  • show the bmm logo on the dark gray background
  • copyright text is not using dark mode
    telegram-cloud-photo-size-2-5309958889879485518-y

Dark mode

  • android dark mode
  • ios dark mode
  • settings (light|system|dark)

notes:

  • recovering player
    • investigate problem
    • show a message and give option to cancel
    • message with option to apply at next start
    • kill player and recover queue (short interruption in playback)

it's only experimental for now. Add a setting that's only visible in Feature Preview:
IFeaturePreviewPermission.IsFeaturePreviewEnabled()

Playback stops on Samsung

Solution:

  • We detect if background apps are not allowed and then show a message informing the user and offering a link to the settings

We occasionally hear from Samsung users that the playback stops after a while.
Related tickets:

Tested on a friends device:

  • disabled "Allow background activity"
  • once the screen is turned off it takes ~2 minutes for playback to stop

Dark mode fixes

  • android: white lines should be a bit darker (looks different in Figma)
  • sometimes dark status bar on iOS (not reproducible)
  • contributor view not adjusted
  • remove feature preview flag (and enable for everybody)
  • content languages
    telegram-cloud-photo-size-4-5992381892739054442-y

update downloaded files

possible solutions

  • redownload files before fixed date (one-time solution)
  • check file timestamp & api sends last updated timestamp

questions:

  • to we have a created date or similar in the app?

lyrics button for "sangtekst"

If an external relation is called "sangtekst", it should be shown as a lyrics button as well.

  • first check if the song has a reference to a songbook (HV*** or FMB***)
  • if not check if there's an external relation called "sangtekst" (ignoring upper or smaller case)

variable playback speed

  • option to change the playback speed
    • ExoPlayer offers an option for that
  • reset speed everytime you change the queue?
  • 0.75, 1, 1.25, 1.5
  • investigate logging
    • uniqueSecondsListened = seconds of content consumed = e.g. 10 min
    • timeSpentListening = how much time did the user spend on that content = e.g 7 min
  • possible future requirement: limit based on content (music, Fra Kaare, ...)

[Spike] Apple Car support

What are the options? How much effort?
Small proof of concept

Use cases

  • From Kåre
  • Curated Playlists
  • Your own playlists

Provisioning profile / Run iOS simulator

Right now it's not possible to start the iOS simulator without a provisioning profile. However, judging from other open source projects it should be possible and it seems like our configuration is wrong somewhere.

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.