Git Product home page Git Product logo

muzi-android's Introduction

Muzi-Android : Android Muzi player

Muzi-Android is a music player based on muzi which basically gives user a great experience. It has been optimized for slow internet connections.

Uses

Installation

Requires

  • Android version above Froyo (>= 2.2.1)
  • To setup on localhost: mysql, php on server side.

Procedure

  1. https://github.com/captn3m0/muzi-android.git
  2. Setup Muzi (See #2)
  3. Rename GlobalSampleVariables to GlobalVariables & edit configuration.

Feedback & Contact

muzi-android's People

Contributors

shivam-mangla avatar akshaydeshraj avatar captn3m0 avatar pragyach avatar

Watchers

 avatar James Cloos avatar Abhishek Das avatar Shashank Mehta avatar  avatar Shubham Singh avatar  avatar  avatar  avatar

muzi-android's Issues

Language Settings

How they work
The language filter only works on two screens: Albums and Artists list pages. The JSON returned for these two contains language data, and will be used for filtering.

Language Settings Page
This consists of 3 android switches, one for each language setting. We can use android-switch-backport for getting switches to work on android versions 2.2+. This setting is stored in the application itself.

The mockup for language change activity is available here

Mockups

I'm using FluidUI for mockups. The current state can always be previewed using this link. If I have any additional mockups, I'll attach them here.

Roadmap

Version 1

  • Search should be functional
  • Browsing should be functional on the basis of artists/albums
  • Language Filter
  • Top Tracks, Albums (for this week)
  • Recently added albums
  • Integration with the Android Music System

Other Basic Features

  • Shuffle, Repeat, Volume
  • Now Playing screen (with Album Art)
  • Intranet Detection (Muzi should complain when it cannot reach sdslabs servers)
  • Feedback Link

Version 2

  • Tickr should be visible and available
  • Full Screen display of artist art
  • Lyrics
  • Request a Song
  • Support major tablets (Nexus/Galaxy Tab at least)

Version 3

  • Login (using the new OAuth API)
  • Like a Track
  • User's Playlists (creation/deletion/browsing) only after Login
  • Playlist changes (addition, removal)
  • Slow connection mode

Unnecessary use of Global Variables for passing data between intents

Taking an example:
In HomeScreen.java, you are sending an intent to FilteredList.java

            Intent i = new Intent(HomeScreen.this, FilteredList.class);
            i.putExtra(GlobalVariables.HomeScreen_to_FilteredList,
                    listItems[position]);
            // Log.i("extra", listItems[position]);
            startActivity(i);
            // HomeScreen.this.finish();

And then in FilteredList.java you are fetching the data using:

    FilteredNamesList = new ArrayList<String>();
    FilteredArrayList = new ArrayList<HashMap<String, String>>();
    String value1 = getIntent().getStringExtra(
            GlobalVariables.HomeScreen_to_FilteredList);

What's the need for GlobalVariables.HomeScreen_to_FilteredList?
You are setting the key for the data being passed with the intent and you know the key. This key can be directly used in both the files rather than being referenced from GlobalVariables.java.

Any particular reason behind using this system rather than directly setting the keys?

I think GlobalVariables should be used only for those cases where the value of the variable will differ between developers.

Now Playing screen

Now Playing

Some observations:

  • The now playing screen can be reached from any screen with a click on the Album Art in the footer
  • Inside the nowPlaying view, a click on the album art again will show us the album art in a popup in its maximum size possible (usually 200x200, but can differ)
  • Now playing screen also shows the album arts for all the tracks

I haven't edited the footer in all pages, but the footer in the nowplaying.html file will appear everywhere (the difference is the track title and the seekbar). Both these should appear in the footer everywhere.

Opinions welcome.

Configuration Options

Provide a way for the application to load its configuration options when started. This is to be decided at compile time and does not relate to the "internal app configurations", like Volume and stuff.

This would entail (default values in brackets):

This should be put in a config.json file at the root of the project. Would be read by a configuration class as default, with further options to set and get more configuration. The config.json file would also be added to gitignore.

Requests Structure

This issue basically describes what requests should be made and when; and whether or not it should be cached.

On Launch
Make a background request to /album/list.php and /band/list.php. Both these requests are cached for exactly one day. The cache borderline is 12 'o' clock midnight. So basically, we check the date on the device and compare it against the date of the cache. If its greater, we make a fresh request to both these urls and save them again. If the user browses to Artists or Albums while this request is being made, we show the stale data from cache. When the user browses to Artists/Albums, use the current language filter to decide which rows to show.

Click on an Album

  1. Make a request to /album/?id=ID. Show the tracks and cover art. For track numbers:
  2. Check the track number in the first song. If it is zero, use natural numbering for songs to show as their track numbers. If it is not zero, use the track numbers from the request.
  3. Make a request to the first track in background (/track/?id=1282) and get the year of release and show it, if its not 0.

Album Arts

I've mailed shivam the album arts. They are supposed to be extracted in a folder (muzi/pics).

Use them in the app as http://localhost/muzi/pics/<ALBUM_ID>.jpg

Keep the base picRoot in a global config variable.

Missing Readme and GlobalVariables.example.java

An example file is needed for GlobalVariables.java otherwise it's nearly impossible for another developer to start working on this project.

Also, the .gitignore file inside the folder for classes that ignores GlobalVariables.java should be moved to root directory.

A readme needs to be added to the repo which at the very least should give the basic setting up instructions like creating GlobalVariables.java from the GlobalVariables.example.java file.

@shivam-mangla You might also want to read this link.

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.