Skip to content

mamewotoko/podplayer

Repository files navigation

podplayer - An android podcast player Build Status Android CI

日本語のREADME

Screenshot

main screen gestures

Video

podplayer

Google Play

https://play.google.com/store/apps/details?id=com.mamewo.podplayer0

How to build

  1. Install "Android support repository" using Android SDK Manager

Install script: ci/snapci/init_android.sh

  1. Clone source

    git clone https://github.com/mamewotoko/podplayer.git
    git submodule update --init

Gradle

  1. Build

    ./gradlew assembleDebug

apk file created in ./app/build/outputs/apk/app-debug.apk

A file bin/podplayer-debug.apk is created if succeed.

Continuous build

./gradlew -t assembleDebug

How to run UI test using Robotium

  1. Connect android device or start android emulator

  2. Start testing

    ./gradlew spoon
  3. A test report is created as app/build/spoon/debug/index.html

  4. To select test class, pass spoonClassName gradle property with test class name

    ./gradlew -PspoonClassName=com.mamewo.podplayer0.tests.TestPodplayerExpActivity spoon

TODO

  • categorize TODOs below...
  • release
    • separate release for old devices and new ones
  • update lib
    • realm
    • okhttp3
    • glide
  • UI
    • use SwifeRefreshLayout
    • add seek bar of audio?
    • marking, tagging to audio position.
    • A-B repeat?
    • add favorite button?
    • design layout with AndroidStudio
    • use com.android.support:design (material design)
    • notification
      • add controll button to notificaiton
    • use RecyclerView
      • animation
      • efficient memory use?
    • material icon: change loading icon of pulltorefresh
    • layout for TV (landscape)
      • add activity for tv?
    • display author info of episode/podcast
    • podcast detail as activity
      • channel/description or itunes:subtitle
      • channel/copyright
  • add function to save/cache podcast episode and audio file as files
  • support adding podcast from link with pcast, podto, podcast schema
  • add filter of language, region
    • English<?>
  • ask stop playing episode when exit menu is selected
  • spoon test
    • bug: MainActivityTest, PodcastActivity then testAbortReload blocks...
    • add test of share function
      • QR code
      • mail
      • Twitter
    • test multiple test classes once / merge test result
      • current situation: freeze?
      • set "package" instrumentationArgs to start all test classes
    • add test of content description (manual test)
    • preference
    • notification
    • landscape UI
    • add episode search UI
    • enable episode long click
  • add podcast to podcast site
  • fix bugs
    • open Podcast list editor, press detail button, rotate screen -> crash -> selectedPodcastInfo_ is null, touched
    • when prepare error occurs, cursor moves to next episode
      • stop playing
        • or mark error item and try playing next unerror item
    • test: Solo.clickOnMenuItem does not work (when screen is landscape? e.g. 1280x800)
      • menu key does not work
  • fast load
    • improve incremental update algorithm to reduce cpu usage
      • problem: displayed episode is not played by click while loading episodes
  • podcast title should be nullable?
  • change color of category text in preference screen
  • add option to exit by pressing back button
    • display confirm dialog: exit or playing background, live as servcie and display notification
  • handle opml as input to specify podcast list
  • share podcast with friend / author (add to preset)
    • bluetooth
    • Google
    • Facebook
    • as text
  • set default item / show notification in paused state
    • start player service
  • use minifyEnabled option of build.gradle
    • disable logging
  • fix lint warnings
    • use java.util.concurrent instead of java.io.AsyncTask
    • review lint.xml and enable appropriate options
    • check report of code inspection of Android Studio
    • enable Google App Indexing
  • support http auth for fetching podcast xml and episodes (#2)
    • cache auth info for each host?
    • support preemptive authentication: http://hc.apache.org/httpclient-3.x/authentication.html
      • use username and password for podcast xml to get episode file
      • ver1: simple authenticator host,port,realm,user,password,auth_method
      • ver2: use AccountManager to manage host, username, password
  • build podcast parser with gradle
    • fix dependency
      • commons-io
      • okhttp3 (linked with podcast_parser)
  • sort episodes by pubdate
    • fix sort crash
      • or sort on database
    • add test
  • just add podcast url without check (preference)?
  • use database to manage loaded episodes
    • display mark which is already played, new item etc...
    • to reduce reload of podcast
    • show description of playing episode
    • save podcast list and updated time as state
    • add/mark listened item list
  • add score thershold preference dialog
  • add preference to display pubdate as "X days before"
  • save latest few item to savedInstanceState
  • filter not listened item only (preference)
  • move state to service
    • remove array adapter contents?
  • use large notification
    • change notification icon for Android4.0
    • show both podcast title and episode title
    • avoid flicker when button on notification pressed
  • write additional podcast url to sd card?
  • add confirm dialog to open web site
  • improve UI to add podcast URL
    • update main activity when setting is changed
  • reset playing position after podcast selection is changed
  • optimize initialization of podplayer
    • setContentView takes long time
  • Autoload: load when create activity or when podcast list setting is changed
  • play episode which is clicked while preparing other episode
  • add error handling
  • write user guide?
  • display playing icon in group of expandable list

Third-party libraries

The podplayer uses the following software, resource and tool.

License

Copyright (c) 2012-2021 Takashi Masuyama. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Keywords

Android, MediaPlayer, Podcast, AsyncTask, PullToRefresh, Gesture, Gradle, Spoon, FalconSpoon, Robotium, Glide, Travis CI


Takashi Masuyama < [email protected] > http://mamewo.ddo.jp/