diff --git a/app/build.gradle b/app/build.gradle index 23d7f97be37e611272efbce3ab2580acda22a161..e420075fe8261c532f13d004bd8e2407daa66efd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,11 +22,13 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' - compile 'com.android.support:design:23.0.+' + compile 'com.android.support:design:23.1.+' + compile 'com.android.support:cardview-v7:23.0.+' compile 'com.heinrichreimersoftware:material-drawer:2.2.0' //Apache 2.0 - compile 'io.realm:realm-android:0.84.1' //Apache 2.0 + RCBL + compile 'io.realm:realm-android:0.85.0' //Apache 2.0 + RCBL compile 'com.squareup.picasso:picasso:2.5.2' //Apache 2.0 - compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' + compile 'com.github.thorbenprimke:realm-recyclerview:0.9.5' //Apache 2.0 + compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' //Apache 2.0 compile ('com.squareup.retrofit:converter-simplexml:2.0.0-beta2') { exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..e3bd9f00d475adb13c8d3a54a3b80a024808edb0 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/adapters/AlbumsAdapter.java @@ -0,0 +1,27 @@ +package com.magnatune.eyecreate.companionformagnatune.adapters; + +import android.content.Context; +import android.view.ViewGroup; + +import com.magnatune.eyecreate.companionformagnatune.model.Album; +import com.magnatune.eyecreate.companionformagnatune.viewholders.AlbumViewHolder; + +import io.realm.RealmBasedRecyclerViewAdapter; +import io.realm.RealmResults; + +public class AlbumsAdapter extends RealmBasedRecyclerViewAdapter { + + public AlbumsAdapter(Context context, RealmResults realmResults, boolean automaticUpdate, boolean animateResults, String animateExtraColumnName) { + super(context, realmResults, automaticUpdate, animateResults, animateExtraColumnName); + } + + @Override + public AlbumViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int i) { + return null; + } + + @Override + public void onBindRealmViewHolder(AlbumViewHolder albumViewHolder, int i) { + + } +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..892d3d1abc832178dfc9fc64eac2cbe52d11fa55 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/fragments/AlbumsFragment.java @@ -0,0 +1,7 @@ +package com.magnatune.eyecreate.companionformagnatune.fragments; + +import android.support.v4.app.Fragment; + +public class AlbumsFragment extends Fragment { + +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Album.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Album.java index 3e6a05949756c3e8c91af8d260cd244dab5a8d4c..33c54f950593be41228f21bc41c3eb45d6ae829b 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Album.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Album.java @@ -1,7 +1,138 @@ package com.magnatune.eyecreate.companionformagnatune.model; +import java.util.Date; + +import io.realm.RealmList; import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; public class Album extends RealmObject { - //TODO:fill + + @PrimaryKey + private String albumsku; + private String albumname; + private String artist; + private String artistdesc; + private String cover_small; + private String cover_large; + private String artistphoto; + private int year; + private String album_notes; + private String homepage; + private String mp3genre; + private Date launchdate; + private RealmList genres; + private RealmList tracks; + + public String getAlbumsku() { + return albumsku; + } + + public void setAlbumsku(String albumsku) { + this.albumsku = albumsku; + } + + public String getAlbumname() { + return albumname; + } + + public void setAlbumname(String albumname) { + this.albumname = albumname; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + + public String getArtistdesc() { + return artistdesc; + } + + public void setArtistdesc(String artistdesc) { + this.artistdesc = artistdesc; + } + + public String getCover_small() { + return cover_small; + } + + public void setCover_small(String cover_small) { + this.cover_small = cover_small; + } + + public String getCover_large() { + return cover_large; + } + + public void setCover_large(String cover_large) { + this.cover_large = cover_large; + } + + public String getArtistphoto() { + return artistphoto; + } + + public void setArtistphoto(String artistphoto) { + this.artistphoto = artistphoto; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public String getAlbum_notes() { + return album_notes; + } + + public void setAlbum_notes(String album_notes) { + this.album_notes = album_notes; + } + + public String getHomepage() { + return homepage; + } + + public void setHomepage(String homepage) { + this.homepage = homepage; + } + + public String getMp3genre() { + return mp3genre; + } + + public void setMp3genre(String mp3genre) { + this.mp3genre = mp3genre; + } + + public Date getLaunchdate() { + return launchdate; + } + + public void setLaunchdate(Date launchdate) { + this.launchdate = launchdate; + } + + public RealmList getGenres() { + return genres; + } + + public void setGenres(RealmList genres) { + this.genres = genres; + } + + public RealmList getTracks() { + return tracks; + } + + public void setTracks(RealmList tracks) { + this.tracks = tracks; + } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java index c0f63a0f02819ce6828d4e01bcafc5c14950bda3..c8fbac0f03f6616511945d66b494e49808a604a9 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java @@ -9,6 +9,6 @@ import java.util.List; public class AlbumResponse { @ElementList(inline=true) - public List albums; + public List albums; } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MGenre.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MGenre.java new file mode 100644 index 0000000000000000000000000000000000000000..288c5a432f9ec15b5cf9854a56ab33de80d019b8 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MGenre.java @@ -0,0 +1,17 @@ +package com.magnatune.eyecreate.companionformagnatune.model; + +import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; + +public class MGenre extends RealmObject { + @PrimaryKey + private String genre_name; + + public String getGenre_name() { + return genre_name; + } + + public void setGenre_name(String genre_name) { + this.genre_name = genre_name; + } +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java index 849bb3de88e13e2c559e71ca7d8ce7ecf97122b2..84b8dc7f1facd5623c1076b8ba351cabdadf02f1 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java @@ -1,18 +1,124 @@ package com.magnatune.eyecreate.companionformagnatune.model; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.support.v4.content.LocalBroadcastManager; + import com.magnatune.eyecreate.companionformagnatune.MagnatuneCompainionApplication; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + import io.realm.Realm; +import io.realm.RealmList; +import retrofit.Response; public class MagnatuneDBManager { + public static final String ACTION_DB_UPDATE_DONE = "dbupdatedone"; + private static final String DB_CHECK_PREFS = "dbcheckprefs"; + private static final String SP_KEY_DB_HASH = "dbhash"; + public static void updateDB() { - //TODO:check if should update - //TODO:update realm DB + //This method should be called on another thread + //Check if DB should update + SharedPreferences prefs = MagnatuneCompainionApplication.getApplication().getSharedPreferences(DB_CHECK_PREFS, Context.MODE_PRIVATE); + boolean shouldUpdate = false; + if(prefs.contains(SP_KEY_DB_HASH)) { + String hash = ""; + try { + hash = MagnatuneCompainionApplication.getDataApi().getUpdateChecksum().execute().body(); + } catch (IOException e) { + e.printStackTrace(); + } + if(!hash.equals(prefs.getString(SP_KEY_DB_HASH,""))) { + shouldUpdate = true; + prefs.edit().putString(SP_KEY_DB_HASH,hash).apply(); + } + } else { + try { + shouldUpdate = true; + prefs.edit().putString(SP_KEY_DB_HASH,MagnatuneCompainionApplication.getDataApi().getUpdateChecksum().execute().body()).apply(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if(shouldUpdate) { + //Update DB + try { + Response response = MagnatuneCompainionApplication.getDataApi().getAlbumList().execute(); + Realm db = getAlbumDB(); + db.beginTransaction(); + for(com.magnatune.eyecreate.companionformagnatune.model.xml.Album album:response.body().albums) { + db.copyToRealmOrUpdate(xmlAlbumToDBAlbum(album)); + } + db.commitTransaction(); + db.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //Broadcast Refresh done. + LocalBroadcastManager.getInstance(MagnatuneCompainionApplication.getApplication()).sendBroadcast(new Intent(ACTION_DB_UPDATE_DONE)); } public static Realm getAlbumDB() { //Remember to close each instance when done. return Realm.getInstance(MagnatuneCompainionApplication.getAlbumDBConfig()); } + + public static RealmList genreCSVStringToMGenreList(String xmlgenres) { + List genres = Arrays.asList(xmlgenres.split(",")); + RealmList DBgenres = new RealmList<>(); + for(String genre:genres) { + MGenre mGenre = new MGenre(); + mGenre.setGenre_name(genre); + DBgenres.add(mGenre); + } + return DBgenres; + } + + public static Album xmlAlbumToDBAlbum(com.magnatune.eyecreate.companionformagnatune.model.xml.Album album) { + Album entry = new Album(); + entry.setAlbumsku(album.albumsku); + entry.setAlbumname(album.albumname); + entry.setArtist(album.artist); + entry.setArtistdesc(album.artistdesc); + entry.setAlbum_notes(album.album_notes); + entry.setCover_small(album.cover_small); + entry.setCover_large(album.cover_small.replace("200", "800")); + entry.setArtistphoto(album.artistphoto); + entry.setYear(album.year); + entry.setHomepage(album.home); + entry.setMp3genre(album.mp3genre); + entry.setLaunchdate(album.launchdate); + entry.setGenres(genreCSVStringToMGenreList(album.magnatunegenres)); + RealmList tracks = new RealmList<>(); + for(com.magnatune.eyecreate.companionformagnatune.model.xml.Track track:album.tracks) { + tracks.add(xmlTrackToDBTrack(track)); + } + entry.setTracks(tracks); + return entry; + } + + public static Track xmlTrackToDBTrack(com.magnatune.eyecreate.companionformagnatune.model.xml.Track track) { + Track entry = new Track(); + entry.setIsrc(track.isrc); + entry.setTrackname(track.trackname); + entry.setArtist(track.artist); + entry.setAlbumname(track.albumname); + entry.setTracknumber(track.tracknum); + entry.setYear(track.year); + entry.setMp3genre(track.mp3genre); + entry.setGenres(genreCSVStringToMGenreList(track.magnatunegenres)); + entry.setLicense(track.license); + entry.setSeconds(track.seconds); + entry.setUrl(track.url); + entry.setMp3_low_quality(track.mp3lofi); + entry.setOgg_url(track.oggurl); + return entry; + } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Track.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Track.java index 0e42223225a07861cb1fd21e999b8084f04747eb..59ee19094a9f12b8962029c79654ca4562c3abc3 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Track.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/Track.java @@ -1,7 +1,127 @@ package com.magnatune.eyecreate.companionformagnatune.model; +import io.realm.RealmList; import io.realm.RealmObject; +import io.realm.annotations.PrimaryKey; public class Track extends RealmObject { - //TODO:fill + + @PrimaryKey + private String isrc; + private String trackname; + private String artist; + private String albumname; + private int tracknumber; + private int year; + private String mp3genre; + private RealmList genres; + private String license; + private long seconds; + private String url; + private String mp3_low_quality; + private String ogg_url; + + public String getIsrc() { + return isrc; + } + + public void setIsrc(String isrc) { + this.isrc = isrc; + } + + public String getTrackname() { + return trackname; + } + + public void setTrackname(String trackname) { + this.trackname = trackname; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + + public String getAlbumname() { + return albumname; + } + + public void setAlbumname(String albumname) { + this.albumname = albumname; + } + + public int getTracknumber() { + return tracknumber; + } + + public void setTracknumber(int tracknumber) { + this.tracknumber = tracknumber; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public String getMp3genre() { + return mp3genre; + } + + public void setMp3genre(String mp3genre) { + this.mp3genre = mp3genre; + } + + public RealmList getGenres() { + return genres; + } + + public void setGenres(RealmList genres) { + this.genres = genres; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public long getSeconds() { + return seconds; + } + + public void setSeconds(long seconds) { + this.seconds = seconds; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMp3_low_quality() { + return mp3_low_quality; + } + + public void setMp3_low_quality(String mp3_low_quality) { + this.mp3_low_quality = mp3_low_quality; + } + + public String getOgg_url() { + return ogg_url; + } + + public void setOgg_url(String ogg_url) { + this.ogg_url = ogg_url; + } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java index 07b8a56f3470482126ad599426b435b4d4a87170..740bf98a8fd1c58b8a8280381b253bc66a9d6c58 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java @@ -43,6 +43,9 @@ public class Album { @Element public Date launchdate; + @Element + public String albumsku; + @ElementList(inline=true) public List tracks; } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/viewholders/AlbumViewHolder.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/viewholders/AlbumViewHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..c2bdf15d7f649e7fe6c6bbafa9bffe168fb77769 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/viewholders/AlbumViewHolder.java @@ -0,0 +1,11 @@ +package com.magnatune.eyecreate.companionformagnatune.viewholders; + +import android.view.View; + +import io.realm.RealmViewHolder; + +public class AlbumViewHolder extends RealmViewHolder { + public AlbumViewHolder(View itemView) { + super(itemView); + } +} diff --git a/app/src/main/res/layout/activity_browse.xml b/app/src/main/res/layout/activity_browse.xml index a7ae97cc921b75dadd4e651632c950e24d95b66a..26503bef209c9bbee95578fe8f23969287c1398b 100644 --- a/app/src/main/res/layout/activity_browse.xml +++ b/app/src/main/res/layout/activity_browse.xml @@ -1,11 +1,9 @@ + android:layout_height="match_parent" tools:context=".BrowseActivity"> - + diff --git a/app/src/main/res/layout/fragment_albums.xml b/app/src/main/res/layout/fragment_albums.xml new file mode 100644 index 0000000000000000000000000000000000000000..c15d973e93732318fb9c85bb14a9743e98856481 --- /dev/null +++ b/app/src/main/res/layout/fragment_albums.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/listitem_album_card.xml b/app/src/main/res/layout/listitem_album_card.xml new file mode 100644 index 0000000000000000000000000000000000000000..cad06995e231a1e04dd4b68c45c01b51432a6314 --- /dev/null +++ b/app/src/main/res/layout/listitem_album_card.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file