Git Product home page Git Product logo

emitron-android's People

Contributors

byaruhaf avatar filbabic avatar kapilsachdev avatar kelvnpere avatar kibettheophilus avatar orionthewake avatar rachitmishra avatar sammyd avatar tgblank avatar wangerekaharun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

emitron-android's Issues

Episode download button shows incorrect prompt

The steps are:

  1. Go to a course page and download one episode.
  2. Tap the download button on a different episode that has not been downloaded.
  3. You incorrectly see a prompt to remove the download for that other episode.

It seems as if downloading one episode is marking all episodes for course as having been downloaded.

My Tutorials Crashes

On the My Tutorials Screen, when visiting the "Completed" or "Bookmarks" tabs, the app will often crash. Stack traces are shown below, and the crash appears to be due to "SQLiteConstraintException: FOREIGN KEY constraint failed".

Test Device: Pixel 3a, Android 10

Video Player Close Button

The video player close button is persistent on the screen, but instead should disappear after a few seconds then reappear with the rest of the video player controls when the user taps the screen.

Test Device: Pixel 3a, Android 10

Can bookmark courses and see a list of bookmarks

  • Both courses and individual videos can be bookmarked.
  • Users tap a toggle device in several places across the UI manage their bookmarks.
  • Bookmarks are synced via the API
  • A user can access a list of all their bookmarks, in descending creation order. This is provided via a paged API.
  • Users can swipe on this list to remove a bookmark.

In progress section of My Tutorials only shows first time

On a fresh install, the In Progress section will display correctly. Once I move to another screen, such as bookmarks, and then back to In Progress, it displays the placeholder graphics but never shows anything else. Restarting the app does not fix the issue, only a fresh install will allow me to see the In Progress section again.

Can open app and log in to their raywenderlich.com account.

  • There is a web-based flow for authentication, which returns a token to be used for future API requests. (There is a framework available for Swift). Details available on https://raywenderlich.docs.apiary.io/#/introduction/authentication
  • Users should also be able to sign out of the app.
  • Only video subscribers will be able to see anything within the app.
  • The app should check that a user is still a subscriber once every day, and remove access if they are not. (note that the inability to access the internet is distinct from determining that a user is no longer a subscriber)

Notification Icon Too Small

The icon shown in the system bar for the video player notification, when in PIP mode and within the notification itself, is too small.

Test Device: Pixel 3a, Android 10

Bugfixing and app preparation support

  • The deliverable app must be accepted by the appropriate app store. Although Razeware will handle submission, we’ll need support in case the app has review issues.
  • Also fixing bugs reported either internally or from the public.

Can see a list of downloaded videos

  • The app has a tab that lists all the downloaded videos.
  • Users can see expiry, swipe to mark complete, and swipe to delete from here.
  • The downloads list includes queued downloads, and those in progress.

Can play downloaded videos

  • Tapping on a downloaded video will pull up the player, and allow playback using the same settings as the streaming player.
  • Autoplay should work, provided the next video is available in downloads. If it’s not available, the player will dismiss, returning the user to the downloads list.

Can filter and search the course list, similar to /library.

  • Implement a search and filtering functionality on the course list. This can be done using an API endpoint, or using internally cached data.
  • The options will be a subset of those presented on raywenderlich.com/library, and filter options should be persisted between app launches. As seen in the designs / wireframes.

Can download (and delete) videos to local storage

  • If the user’s account permits it, they can download the video to local storage.
  • This storage should not be part of the backup protocol.
  • The file URL is exposed via an API call.
  • There should be a limit to the number of simultaneous downloads.
  • There are two qualities available.
  • If the user logs out, downloaded videos are deleted.
  • Downloads should use best practices for background processes and power management.

Can play video PIP

  • It should be possible to pop the player out and switch to a different app, following the OS best practices.
  • Popping it back in works as expected.

Episodes not showing in Airplane mode

I went to the library screen, and selected a course to go to the course screen. At that point, the course episode list was presumably cached locally in the DB. Switching to Airplane mode, you then get a "Failed to Fetch Episodes" popup when visiting a course screen.

In addition to not showing episodes in the DB, this would also preclude downloaded episodes for that course from being able to be played, at least when entering the course screen from the Library screen.

Videos Marked Complete Too Early

Videos seemed to be marked complete too early into the video playback, within about 10 seconds. Could be an issue with the way the progressions are being handled.

Test Device: Pixel 3a, Android 10

Can see a page about a course, including a list of the individual videos.

  • Tapping on a course in the course list will transition to a page that includes further details about a course. These will be available via an additional API call, and includes a description, artwork, platform, authors and a list of one or more episodes (videos) that make up the course.
  • The user can navigate from this display back whence they came.

Progress doesn't reset when skipping to next episode

While watching a video, if you skip to the next episode, the new episode video will skip ahead and start at the same location as the previous episode. Need to reset the playback position to the start or the last playback of the new episode if it's available.

Note: If you let the current episode play all the way to the end then the next episode will start at the beginning as expected.

Emulator: Nexus 5, Android 8.

Navigation Bar Overlap

On many screens, including the course list screen, the video player, the filter screen, and the settings screen, the app UI overlaps with the OS navigation bar. On the list screen in portrait mode, this prevents the bottom most row in the list from being selected. On the video player, this prevents the ChromeCast button from being tapped.

This may also be related to #44.

Test Device: Pixel 3a, Android 10

Crash when tapping download icon for course episode

Tapping the download icon for a single episode inside a course is causing a crash.

https://github.com/raywenderlich/emitron-Android/tree/downloads-offline

Here is a partial stack trace for the crash:

2019-10-14 10:56:54.596 5114-5114/com.raywenderlich.Emitron E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.raywenderlich.Emitron, PID: 5114
    java.lang.IllegalStateException: Fragment CollectionFragment{d7c8cef (20832de7-0fcc-4fd0-9993-d90f52c992e8)} not attached to a context.
        at androidx.fragment.app.Fragment.requireContext(Fragment.java:774)
        at com.raywenderlich.emitron.ui.collection.CollectionFragment.createDownloadProgressHandler(CollectionFragment.kt:384)

Progress through the video is stored.

  • As the viewer watches the video, we should record their progress, both locally and remotely, through regular API calls.
  • When a video is complete, this too should be recorded via an API call.
  • When a user taps on a video that has progress recorded against it, the video should begin at the point they most recently stopped watching.

Downloaded videos expire after 7 days without confirming an active subscription

  • Once a video file is downloaded, the app should periodically check that the user is still permitted to possess the downloaded file.
  • If this isn’t the case, the video should be locked, but not deleted. The user can delete locked videos.
  • If the app has not been able to confirm the user is permitted to download videos at any point in the previous 7 days, the video will become locked.
  • A locked video has a button to retry authorisation, displayed in the list view of downloaded videos.

Download button hit size too small

The episode download button hit size is too small. Frequently, when attempting to tap the download button, the video starts playing instead.

This is on the course detail page for episodes. Other download buttons should also have their hit area increased to match.

Can display subtitles

  • The user should be able to toggle subtitles on or off.
  • The setting should be saved and applied across videos and app relaunches.

The next video in a course autoplays.

When a user gets to the end of a video, the next video should autoplay in the same player, provided there is another video available in the same course.

Can play a video.

  • Tapping on a video in the list on the course display opens a modal video player and starts playing the video.
  • This involves an API call to request the stream URL, and then a call to register beginning of playback.
  • It also makes an API call to determine the most recent progress recorded against this video, and initiates playback from there.
  • The stream is an HLS stream, hosted by Vimeo.
  • It should use the most appropriate player (e.g. the system provided player in iOS).
  • The video should be played in landscape, using the following wireframe as a guide https://invis.io/MSS8ZUS9X7P. However, we want to stick to the native appearance as closely as possible, this wireframe is a guideline.

Can control the playback speed & quality of the video.

  • The user should be able to choose between the following speeds: 0.5x, 0.75x, 1x, 1.25x, 1.5x & 2x.
  • If feasible, the user should also be able to change the quality of the stream—it’s all in a single - HLS stream, so overriding the auto level may or may not be possible.
  • This settings should be saved and used for all videos.

Pro courses are labelled appropriately

  • Show a label to highlight a pro course in the content list.
  • A similar label appears on the course detail page
  • If a user is unable to view pro content (i.e. they have a beginner-level subscription) a message is displayed on the course page, and locks appear next to the videos.

Course episodes never complete download

Nexus 5 API 26

Steps taken:

  1. Clicked on the main download button for "Supporting Dark Theme" course.
  2. Went into Downloads and course was displayed.
  3. Clicked on course and first episode download icon displayed as completed. All other remaining episodes had active progress spinners.
  4. Killed app and restarted.
  5. Went back into Downloads and selected course, and spinners were still going.

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.