Initial commit retro music app

This commit is contained in:
h4h13 2018-07-27 18:37:33 +05:30
parent ab332473bc
commit fe890632fd
932 changed files with 83126 additions and 0 deletions

View file

@ -0,0 +1,12 @@
package code.name.monkey.retromusic.mvp;
/**
* Created by hemanths on 09/08/17.
*/
public interface BasePresenter<T> {
void subscribe();
void unsubscribe();
}

View file

@ -0,0 +1,15 @@
package code.name.monkey.retromusic.mvp;
/**
* Created by hemanths on 09/08/17.
*/
public interface BaseView<T> {
void loading();
void showData(T list);
void showEmptyView();
void completed();
}

View file

@ -0,0 +1,27 @@
package code.name.monkey.retromusic.mvp;
import android.support.annotation.NonNull;
import code.name.monkey.retromusic.Injection;
import code.name.monkey.retromusic.providers.interfaces.Repository;
import code.name.monkey.retromusic.util.schedulers.BaseSchedulerProvider;
import io.reactivex.disposables.CompositeDisposable;
/**
* Created by hemanths on 16/08/17.
*/
public class Presenter {
@NonNull
protected Repository repository;
@NonNull
protected CompositeDisposable disposable;
@NonNull
protected BaseSchedulerProvider schedulerProvider;
public Presenter() {
this.repository = Injection.provideRepository();
this.schedulerProvider = Injection.provideSchedulerProvider();
this.disposable = new CompositeDisposable();
}
}

View file

@ -0,0 +1,19 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
public interface AlbumContract {
interface AlbumView extends BaseView<ArrayList<Album>> {
}
interface Presenter extends BasePresenter<AlbumView> {
void loadAlbums();
}
}

View file

@ -0,0 +1,18 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
public interface AlbumDetailsContract {
interface AlbumDetailsView extends BaseView<Album> {
}
interface Presenter extends BasePresenter<AlbumDetailsView> {
void loadAlbumSongs(int albumId);
}
}

View file

@ -0,0 +1,23 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* Created by hemanths on 16/08/17.
*/
public interface ArtistContract {
interface ArtistView extends BaseView<ArrayList<Artist>> {
}
interface Presenter extends BasePresenter<ArtistView> {
void loadArtists();
}
}

View file

@ -0,0 +1,21 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
/**
* Created by hemanths on 20/08/17.
*/
public interface ArtistDetailContract {
interface ArtistsDetailsView extends BaseView<Artist> {
}
interface Presenter extends BasePresenter<ArtistsDetailsView> {
void loadArtistById(int artistId);
}
}

View file

@ -0,0 +1,21 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* @author Hemanth S (h4h13).
*/
public interface GenreContract {
interface GenreView extends BaseView<ArrayList<Genre>> {
}
interface Presenter extends BasePresenter<GenreView> {
void loadGenre();
}
}

View file

@ -0,0 +1,20 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* @author Hemanth S (h4h13).
*/
public interface GenreDetailsContract {
interface GenreDetailsView extends BaseView<ArrayList<Song>> {
}
interface Presenter extends BasePresenter<GenreDetailsView> {
void loadGenre(int genreId);
}
}

View file

@ -0,0 +1,44 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
public interface HomeContract {
interface HomeView extends BaseView<ArrayList<Object>> {
void recentArtist(ArrayList<Artist> artists);
void recentAlbum(ArrayList<Album> albums);
void topArtists(ArrayList<Artist> artists);
void topAlbums(ArrayList<Album> albums);
void suggestions(ArrayList<Playlist> songs);
void geners(ArrayList<Genre> songs);
}
interface HomePresenter extends BasePresenter<HomeView> {
void loadRecentAlbums();
void loadTopAlbums();
void loadRecentArtists();
void loadTopArtists();
void loadSuggestions();
void loadGenres();
}
}

View file

@ -0,0 +1,21 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* Created by hemanths on 19/08/17.
*/
public interface PlaylistContract {
interface PlaylistView extends BaseView<ArrayList<Playlist> > {
}
interface Presenter extends BasePresenter<PlaylistView> {
void loadPlaylists();
}
}

View file

@ -0,0 +1,23 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* Created by hemanths on 20/08/17.
*/
public interface PlaylistSongsContract {
interface PlaylistSongsView extends BaseView<ArrayList<Song>> {
}
interface Presenter extends BasePresenter<PlaylistSongsView> {
void loadSongs(Playlist playlist);
}
}

View file

@ -0,0 +1,21 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* Created by hemanths on 20/08/17.
*/
public interface SearchContract {
interface SearchView extends BaseView<ArrayList<Object>> {
}
interface SearchPresenter extends BasePresenter<SearchView> {
void search(String query);
}
}

View file

@ -0,0 +1,24 @@
package code.name.monkey.retromusic.mvp.contract;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.BasePresenter;
import code.name.monkey.retromusic.mvp.BaseView;
import java.util.ArrayList;
/**
* Created by hemanths on 10/08/17.
*/
public interface SongContract {
interface SongView extends BaseView<ArrayList<Song>> {
}
interface Presenter extends BasePresenter<SongView> {
void loadSongs();
}
}

View file

@ -0,0 +1,54 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.AlbumDetailsContract;
/**
* Created by hemanths on 20/08/17.
*/
public class AlbumDetailsPresenter extends Presenter implements AlbumDetailsContract.Presenter {
@NonNull
private final int albumId;
@NonNull
private AlbumDetailsContract.AlbumDetailsView view;
public AlbumDetailsPresenter(@NonNull AlbumDetailsContract.AlbumDetailsView view, int albumId) {
this.view = view;
this.albumId = albumId;
}
@Override
public void subscribe() {
loadAlbumSongs(albumId);
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadAlbumSongs(int albumId) {
disposable.add(repository.getAlbum(albumId)
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showAlbum,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
private void showAlbum(Album album) {
if (album != null) {
view.showData(album);
} else {
view.showEmptyView();
}
}
}

View file

@ -0,0 +1,49 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.AlbumContract;
/**
* Created by hemanths on 12/08/17.
*/
public class AlbumPresenter extends Presenter implements AlbumContract.Presenter {
@NonNull
private AlbumContract.AlbumView view;
public AlbumPresenter(@NonNull AlbumContract.AlbumView view) {
this.view = view;
}
@Override
public void subscribe() {
loadAlbums();
}
@Override
public void unsubscribe() {
disposable.clear();
}
private void showList(@NonNull ArrayList<Album> albums) {
view.showData(albums);
}
@Override
public void loadAlbums() {
disposable.add(repository.getAllAlbums()
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showList,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
}

View file

@ -0,0 +1,54 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract;
/**
* Created by hemanths on 20/08/17.
*/
public class ArtistDetailsPresenter extends Presenter implements ArtistDetailContract.Presenter {
private final int artistId;
@NonNull
private final ArtistDetailContract.ArtistsDetailsView view;
public ArtistDetailsPresenter(@NonNull ArtistDetailContract.ArtistsDetailsView view,
int artistId) {
this.view = view;
this.artistId = artistId;
}
@Override
public void subscribe() {
loadArtistById(artistId);
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadArtistById(int artistId) {
disposable.add(repository.getArtistById(artistId)
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showArtist,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
private void showArtist(Artist album) {
if (album != null) {
view.showData(album);
} else {
view.showEmptyView();
}
}
}

View file

@ -0,0 +1,47 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.ArtistContract;
public class ArtistPresenter extends Presenter implements ArtistContract.Presenter {
@NonNull
private ArtistContract.ArtistView mView;
public ArtistPresenter(@NonNull ArtistContract.ArtistView view) {
mView = view;
}
@Override
public void subscribe() {
loadArtists();
}
@Override
public void unsubscribe() {
disposable.clear();
}
private void showList(@NonNull ArrayList<Artist> songs) {
if (songs.isEmpty()) {
mView.showEmptyView();
} else {
mView.showData(songs);
}
}
@Override
public void loadArtists() {
disposable.add(repository.getAllArtists()
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> mView.loading())
.subscribe(this::showList,
throwable -> mView.showEmptyView(),
() -> mView.completed()));
}
}

View file

@ -0,0 +1,56 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.GenreDetailsContract;
/**
* Created by hemanths on 20/08/17.
*/
public class GenreDetailsPresenter extends Presenter
implements GenreDetailsContract.Presenter {
private final int genreId;
@NonNull
private GenreDetailsContract.GenreDetailsView view;
public GenreDetailsPresenter(@NonNull GenreDetailsContract.GenreDetailsView view,
int genreId) {
this.view = view;
this.genreId = genreId;
}
@Override
public void subscribe() {
loadGenre(genreId);
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadGenre(int genreId) {
disposable.add(repository.getGenre(genreId)
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showGenre,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
private void showGenre(ArrayList<Song> songs) {
if (songs != null) {
view.showData(songs);
} else {
view.showEmptyView();
}
}
}

View file

@ -0,0 +1,53 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.GenreContract;
/**
* @author Hemanth S (h4h13).
*/
public class GenrePresenter extends Presenter
implements GenreContract.Presenter {
@NonNull
private GenreContract.GenreView view;
public GenrePresenter(
@NonNull GenreContract.GenreView view) {
this.view = view;
}
@Override
public void subscribe() {
loadGenre();
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadGenre() {
disposable.add(repository.getAllGenres()
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showList,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
private void showList(@NonNull ArrayList<Genre> genres) {
if (genres.isEmpty()) {
view.showEmptyView();
} else {
view.showData(genres);
}
}
}

View file

@ -0,0 +1,128 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.HomeContract;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class HomePresenter extends Presenter implements HomeContract.HomePresenter {
@NonNull
private HomeContract.HomeView view;
public HomePresenter(@NonNull HomeContract.HomeView view) {
this.view = view;
}
@Override
public void subscribe() {
loadRecentAlbums();
loadRecentArtists();
loadTopAlbums();
loadTopArtists();
loadSuggestions();
if (PreferenceUtil.getInstance(RetroApplication.getInstance()).isGenreShown()) {
loadGenres();
}
}
@Override
public void unsubscribe() {
disposable.clear();
}
public void loadPlaylists() {
disposable.add(repository.getAllPlaylists()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.subscribe(playlists -> {
if (!playlists.isEmpty()) {
view.suggestions(playlists);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
@Override
public void loadRecentAlbums() {
disposable.add(repository.getRecentAlbums()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(artists -> {
if (!artists.isEmpty()) {
view.recentAlbum(artists);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
@Override
public void loadTopAlbums() {
disposable.add(repository.getTopAlbums()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(artists -> {
if (!artists.isEmpty()) {
view.topAlbums(artists);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
@Override
public void loadRecentArtists() {
disposable.add(repository.getRecentArtists()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(artists -> {
if (!artists.isEmpty()) {
view.recentArtist(artists);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
@Override
public void loadTopArtists() {
disposable.add(repository.getTopArtists()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(artists -> {
if (!artists.isEmpty()) {
view.topArtists(artists);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
@Override
public void loadSuggestions() {
}
@Override
public void loadGenres() {
disposable.add(repository.getAllGenres()
.observeOn(schedulerProvider.ui())
.subscribeOn(schedulerProvider.io())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(genres -> {
if (!genres.isEmpty()) {
view.geners(genres);
}
},
throwable -> view.showEmptyView(), () -> view.completed()));
}
}

View file

@ -0,0 +1,54 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.PlaylistContract;
/**
* Created by hemanths on 19/08/17.
*/
public class PlaylistPresenter extends Presenter
implements PlaylistContract.Presenter {
@NonNull
private PlaylistContract.PlaylistView mView;
public PlaylistPresenter(@NonNull PlaylistContract.PlaylistView view) {
mView = view;
}
@Override
public void subscribe() {
loadPlaylists();
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadPlaylists() {
disposable.add(repository.getAllPlaylists()
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> mView.loading())
.subscribe(this::showList,
throwable -> mView.showEmptyView(),
() -> mView.completed()));
}
private void showList(@NonNull ArrayList<Playlist> songs) {
if (songs.isEmpty()) {
mView.showEmptyView();
} else {
mView.showData(songs);
}
}
}

View file

@ -0,0 +1,48 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.PlaylistSongsContract;
/**
* Created by hemanths on 20/08/17.
*/
public class PlaylistSongsPresenter extends Presenter
implements PlaylistSongsContract.Presenter {
@NonNull
private PlaylistSongsContract.PlaylistSongsView mView;
@NonNull
private Playlist mPlaylist;
public PlaylistSongsPresenter(@NonNull PlaylistSongsContract.PlaylistSongsView view,
@NonNull Playlist playlist) {
mView = view;
mPlaylist = playlist;
}
@Override
public void subscribe() {
loadSongs(mPlaylist);
}
@Override
public void unsubscribe() {
disposable.clear();
}
@Override
public void loadSongs(Playlist playlist) {
disposable.add(repository.getPlaylistSongs(playlist)
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> mView.loading())
.subscribe(songs -> mView.showData(songs),
throwable -> mView.showEmptyView(),
() -> mView.completed()));
}
}

View file

@ -0,0 +1,52 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.SearchContract;
/**
* Created by hemanths on 20/08/17.
*/
public class SearchPresenter extends Presenter implements SearchContract.SearchPresenter {
@NonNull
private SearchContract.SearchView mView;
public SearchPresenter(@NonNull SearchContract.SearchView view) {
mView = view;
}
@Override
public void subscribe() {
search("");
}
@Override
public void unsubscribe() {
disposable.clear();
}
private void showList(@NonNull ArrayList<Object> albums) {
if (albums.isEmpty()) {
mView.showEmptyView();
} else {
mView.showData(albums);
}
}
@Override
public void search(String query) {
disposable.add(repository.search(query)
.debounce(500, TimeUnit.MILLISECONDS)
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> mView.loading())
.subscribe(this::showList,
throwable -> mView.showEmptyView(),
() -> mView.completed()));
}
}

View file

@ -0,0 +1,53 @@
package code.name.monkey.retromusic.mvp.presenter;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.Presenter;
import code.name.monkey.retromusic.mvp.contract.SongContract;
/**
* Created by hemanths on 10/08/17.
*/
public class SongPresenter extends Presenter implements SongContract.Presenter {
@NonNull
private SongContract.SongView view;
public SongPresenter(@NonNull SongContract.SongView view) {
this.view = view;
}
@Override
public void loadSongs() {
disposable.add(repository.getAllSongs()
.subscribeOn(schedulerProvider.computation())
.observeOn(schedulerProvider.ui())
.doOnSubscribe(disposable1 -> view.loading())
.subscribe(this::showList,
throwable -> view.showEmptyView(),
() -> view.completed()));
}
@Override
public void subscribe() {
loadSongs();
}
private void showList(@NonNull ArrayList<Song> songs) {
if (songs.isEmpty()) {
view.showEmptyView();
} else {
view.showData(songs);
}
}
@Override
public void unsubscribe() {
disposable.clear();
}
}