Skip to content
This repository has been archived by the owner on Jan 6, 2022. It is now read-only.

Commit

Permalink
Merge branch 'indev' ; v1.3
Browse files Browse the repository at this point in the history
  • Loading branch information
vhaudiquet committed Sep 17, 2018
2 parents b95098b + 4a1eed3 commit d553710
Show file tree
Hide file tree
Showing 34 changed files with 624 additions and 130 deletions.
Binary file added .idea/caches/build_file_checksums.ser
Binary file not shown.
1 change: 0 additions & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 5 additions & 6 deletions README.md
Expand Up @@ -32,14 +32,13 @@ Used to quickly search for songs, artists or albums in the library. 2 search mo

## Releases

[Latest Release (v 1.2)](https://github.com/Valou3433/blade-player/releases/download/v1.2/blade-1.2.apk)
[Latest Release (v 1.3)](https://github.com/Valou3433/blade-player/releases/download/v1.3/blade-1.3.apk)

[Mirror](http://valou3433.fr/blade/blade-1.2.apk)
[Mirror](http://valou3433.fr/blade/blade-1.3.apk)

- added ability to edit local songs metadata
- added themes (for now only blade, nightly and green)
- added image generation for local playlists, ...
- fixed bugs
- added song linkmanager
- added animation and red theme
- fixed bugs on search, mediasession, tag editor
<hr>

Link to all [Blade-Player Releases](https://github.com/Valou3433/blade-player/releases)
Expand Down
17 changes: 17 additions & 0 deletions app/app.iml
Expand Up @@ -84,20 +84,36 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes-jar" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/processing-tools" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
Expand Down Expand Up @@ -150,5 +166,6 @@
<orderEntry type="library" name="Gradle: ch.acra:acra-http-5.1.3" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" />
<orderEntry type="module" module-name="library" />
</component>
</module>
4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -7,8 +7,8 @@ android {
applicationId "v.blade"
minSdkVersion 16
targetSdkVersion 27
versionCode 11
versionName "1.2"
versionCode 12
versionName "1.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
compileOptions {
Expand Down
Binary file added app/release/blade-1.3.apk
Binary file not shown.
21 changes: 15 additions & 6 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -89,12 +89,21 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="v.blade.ui.MainActivity"/>
</activity>
<activity android:name=".ui.settings.ThemesActivity"
android:label="@string/themes"
android:parentActivityName=".ui.settings.SettingsActivity"
android:theme="@style/Blade.AppTheme.NoActionBar">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.settings.SettingsActivity"/>
<activity
android:name=".ui.settings.ThemesActivity"
android:label="@string/themes"
android:parentActivityName=".ui.settings.SettingsActivity"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.settings.SettingsActivity"/>
</activity>
<activity android:name=".ui.settings.LinkManagerActivity"
android:label="@string/link_manager"
android:parentActivityName=".ui.settings.SettingsActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.settings.SettingsActivity"/>
</activity>
</application>

Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/v/blade/BladeApplication.java
Expand Up @@ -46,6 +46,8 @@ else if(theme.equalsIgnoreCase("blade"))
ThemesActivity.setThemeToBlade();
else if(theme.equalsIgnoreCase("green"))
ThemesActivity.setThemeToGreen();
else if(theme.equalsIgnoreCase("red"))
ThemesActivity.setThemeToRed();
}
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/v/blade/library/LibraryObject.java
Expand Up @@ -19,6 +19,7 @@

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;

import java.io.Serializable;

Expand Down Expand Up @@ -52,6 +53,7 @@ public void setArt(String path, Bitmap miniatureArt)
public boolean getArtLoading() {return this.artLoad;}
public Bitmap getArtMiniature() {return miniatureArt;}
public Bitmap getArt() {return BitmapFactory.decodeFile(artPath);}
public Uri getArtUri() {return artPath == null ? null : Uri.parse(artPath);}
public boolean hasArt() {return hasArt;}

public String getType() {return this.getClass().getSimpleName();}
Expand Down
91 changes: 54 additions & 37 deletions app/src/main/java/v/blade/library/LibraryService.java
Expand Up @@ -29,6 +29,7 @@ public class LibraryService
public static boolean SAVE_PLAYLISTS_TO_LIBRARY;
public static boolean REGISTER_SONGS_BETTER_SOURCES;
public static Uri TREE_URI;
public static boolean ENABLE_SONG_CHANGE_ANIM;

/* library */
private static final List<Artist> artists = Collections.synchronizedList(new ArrayList<Artist>());
Expand All @@ -43,7 +44,7 @@ public class LibraryService
static HashMap<String, ArrayList<Song>> songsByName = new HashMap<>();

//song linkss
private static final HashMap<Song, List<Song>> songLinks = new HashMap<>();
public static final HashMap<Song, List<Song>> songLinks = new HashMap<>();

/* list callbacks */
public interface UserLibraryCallback{void onLibraryChange();}
Expand Down Expand Up @@ -157,6 +158,8 @@ public static void configureLibrary(Context appContext)
String treeUri = generalPrefs.getString("sdcard_uri", null);
if(treeUri != null) TREE_URI = Uri.parse(treeUri);

ENABLE_SONG_CHANGE_ANIM = generalPrefs.getBoolean("anim_0", true);

SAVE_PLAYLISTS_TO_LIBRARY = generalPrefs.getBoolean("save_playlist_to_library", false);
REGISTER_SONGS_BETTER_SOURCES = generalPrefs.getBoolean("register_better_sources", true);

Expand Down Expand Up @@ -319,7 +322,7 @@ public static void linkSong(Song source, Song destination, boolean save)
{
if(src != null)
{
destination.getSources().addSource(src);
destination.getSources().addSource(src); //addSource is checking for double-add
unregisterSong(source, src);
}
}
Expand Down Expand Up @@ -347,27 +350,32 @@ public static void linkSong(Song source, Song destination, boolean save)
list.add(source);

//save songlinks to cache (by rewriting hashmap)
if(save)
if(save) writeLinks();
}

/*
* Rewrite song links on disk
*/
public static void writeLinks()
{
try
{
try
songLinksFile.createNewFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(songLinksFile));
for(Song s : songLinks.keySet())
{
songLinksFile.createNewFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(songLinksFile));
for(Song s : songLinks.keySet())
{
List<Song> links = songLinks.get(s);
writer.write(s.getArtist() + CACHE_SEPARATOR + s.getAlbum() + CACHE_SEPARATOR + s.getTitle() + CACHE_SEPARATOR +
links.size() + CACHE_SEPARATOR);
for(Song linked : links)
writer.write(linked.getArtist() + CACHE_SEPARATOR + linked.getAlbum() + CACHE_SEPARATOR + linked.getTitle() + CACHE_SEPARATOR);
writer.newLine();
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
List<Song> links = songLinks.get(s);
writer.write(s.getArtist() + CACHE_SEPARATOR + s.getAlbum() + CACHE_SEPARATOR + s.getTitle() + CACHE_SEPARATOR +
links.size() + CACHE_SEPARATOR);
for(Song linked : links)
writer.write(linked.getArtist() + CACHE_SEPARATOR + linked.getAlbum() + CACHE_SEPARATOR + linked.getTitle() + CACHE_SEPARATOR);
writer.newLine();
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}

Expand Down Expand Up @@ -437,27 +445,31 @@ private static void registerSongBetterSources()

//search all songs on best source
ArrayList<Song> bestSourceSongs = new ArrayList<>();
for(Song s : songs)
synchronized (songs)
{
if(s.getSources().getSourceByPriority(0).getSource() != bestSource && s.getSources().getSourceByPriority(0).getSource() != Source.SOURCE_LOCAL_LIB)
for(Song s : songs)
{
//query bestSource for this song
try
if(s.getSources().getSourceByPriority(0).getSource() != bestSource && s.getSources().getSourceByPriority(0).getSource() != Source.SOURCE_LOCAL_LIB)
{
if(bestSource.searchForSong(s))
//query bestSource for this song
try
{
if(bestSource.searchForSong(s))
{
bestSourceSongs.add(s);
}
addedSongs++;
if(addedSongs >= BETTER_SOURCES_MAX) break;
}
catch (Exception error)
{
bestSourceSongs.add(s);
//TODO : handle error
continue;
}
addedSongs++;
if(addedSongs >= BETTER_SOURCES_MAX) break;
}
catch (Exception error)
{
//TODO : handle error
continue;
}
}
}

//also search for songs in playlist
if(!SAVE_PLAYLISTS_TO_LIBRARY)
{
Expand Down Expand Up @@ -512,7 +524,7 @@ private static void registerSongLinks()
while (reader.ready())
{
String[] line = reader.readLine().split(CACHE_SEPARATOR);
System.out.println(Arrays.toString(line));
//System.out.println(Arrays.toString(line));
Song song = getSongHandle(line[2], line[1], line[0], 0, null, 0, 0);
if(song == null) continue;
int size = Integer.parseInt(line[3]);
Expand All @@ -527,6 +539,7 @@ private static void registerSongLinks()
}
catch (IOException e)
{
System.err.println("registerSongLinks() encoutered IOException");
e.printStackTrace();
}
}
Expand Down Expand Up @@ -720,9 +733,13 @@ static Song getSongHandle(String name, String album, String artist, long duratio
if(alb.getName().equalsIgnoreCase(album) && alb.getArtist().getName().equalsIgnoreCase(songArtist.getName()))
songAlbum = alb;
}
if(songAlbum == null) for(Album alb : albumHandles)
if(alb.getName().equalsIgnoreCase(album) && alb.getArtist().getName().equalsIgnoreCase(songArtist.getName()))
songAlbum = alb;
if(songAlbum == null)
synchronized (albumHandles)
{
for (Album alb : albumHandles)
if (alb.getName().equalsIgnoreCase(album) && alb.getArtist().getName().equalsIgnoreCase(songArtist.getName()))
songAlbum = alb;
}
if(songAlbum == null) {songAlbum = new Album(album, songArtist); songAlbum.setHandled(true); albumHandles.add(songAlbum);}
songAlbum.getSources().addSource(source);

Expand Down

0 comments on commit d553710

Please sign in to comment.