Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,21 @@ dependencies {
compile libraries.lynx
compile libraries.processPhoenix

// okhttp
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

// RxJava
compile 'io.reactivex:rxjava:1.1.8'

// RxAndroid
compile 'io.reactivex:rxandroid:1.2.1'

// retrofit + stuff
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

testCompile libraries.junit
testCompile libraries.robolectric
testCompile libraries.assertJ
Expand All @@ -121,6 +136,7 @@ dependencies {
exclude module: 'recyclerview-v7'
exclude module: 'support-v4'
}
compile 'javax.annotation:javax.annotation-api:1.2'
}

configurations.all {
Expand Down
6 changes: 4 additions & 2 deletions app/src/main/java/ru/yandex/yamblz/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import ru.yandex.yamblz.developer_settings.DevMetricsProxy;
import ru.yandex.yamblz.developer_settings.DeveloperSettingsModel;
import ru.yandex.yamblz.handler.CriticalSectionsManager;
import ru.yandex.yamblz.handler.StubCriticalSectionsHandler;
import ru.yandex.yamblz.loader.CollageLoaderManager;
import ru.yandex.yamblz.loader.StubCollageLoader;
import timber.log.Timber;

public class App extends Application {
Expand All @@ -34,8 +36,8 @@ public void onCreate() {
devMetricsProxy.apply();
}

CollageLoaderManager.init(null); // add implementation
CriticalSectionsManager.init(null); // add implementation
CollageLoaderManager.init(new StubCollageLoader()); // add implementation
CriticalSectionsManager.init(new StubCriticalSectionsHandler()); // add implementation
}

@NonNull
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/ru/yandex/yamblz/api/YandexArtistApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.yandex.yamblz.api;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;

/**
* Created by user on 01.08.16.
*/

public interface YandexArtistApi {

String URL = "http://download.cdn.yandex.net/";

@GET("mobilization-2016/artists.json")
Call<List<YandexArtistResponse>> getListArtist();
}
165 changes: 165 additions & 0 deletions app/src/main/java/ru/yandex/yamblz/api/YandexArtistResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
package ru.yandex.yamblz.api;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Generated;

/**
* Created by user on 01.08.16.
*/
@Generated("org.jsonschema2pojo")
public class YandexArtistResponse {
@SerializedName("id")
@Expose
private int id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("genres")
@Expose
private List<String> genres = new ArrayList<String>();
@SerializedName("tracks")
@Expose
private int tracks;
@SerializedName("albums")
@Expose
private int albums;
@SerializedName("link")
@Expose
private String link;
@SerializedName("description")
@Expose
private String description;
@SerializedName("cover")
@Expose
private Cover cover;

public int getId() {
return id;
}

public String getName() {
return name;
}

public List<String> getGenres() {
return genres;
}

public int getTracks() {
return tracks;
}

public int getAlbums() {
return albums;
}

public String getLink() {
return link;
}

public String getDescription() {
return description;
}

public Cover getCover() {
return cover;
}

@Override
public String toString() {
return "YandexArtistResponse{" +
"id=" + id +
", name='" + name + '\'' +
", genres=" + genres +
", tracks=" + tracks +
", albums=" + albums +
", link='" + link + '\'' +
", description='" + description + '\'' +
", cover=" + cover +
'}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

YandexArtistResponse that = (YandexArtistResponse) o;

if (id != that.id) return false;
if (tracks != that.tracks) return false;
if (albums != that.albums) return false;
if (!name.equals(that.name)) return false;
if (!genres.equals(that.genres)) return false;
if (!link.equals(that.link)) return false;
if (!description.equals(that.description)) return false;
if (!cover.equals(that.cover)) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + name.hashCode();
result = 31 * result + genres.hashCode();
result = 31 * result + tracks;
result = 31 * result + albums;
result = 31 * result + link.hashCode();
result = 31 * result + description.hashCode();
result = 31 * result + cover.hashCode();
return result;
}

@Generated("org.jsonschema2pojo")
public class Cover {

@SerializedName("small")
@Expose
private String small;
@SerializedName("big")
@Expose
private String big;

public String getSmall() {
return small;
}

public String getBig() {
return big;
}

@Override
public String toString() {
return "Cover{" +
"small='" + small + '\'' +
", big='" + big + '\'' +
'}';
}

@Override
public int hashCode() {
int result = small.hashCode();
result = 31 * result + big.hashCode();
return result;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Cover cover = (Cover) o;

if (!small.equals(cover.small)) return false;
if (!big.equals(cover.big)) return false;

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ public interface CriticalSectionsHandler {

void stopSections();

void postLowPriorityTask(Task task);
Task postLowPriorityTask(Task task);

void postLowPriorityTaskDelayed(Task task, int delay);
Task postLowPriorityTaskDelayed(Task task, int delay);

void removeLowPriorityTask(Task task);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,75 @@
package ru.yandex.yamblz.handler;

import android.os.Handler;
import android.os.Looper;

import java.util.HashSet;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;

import timber.log.Timber;

public class StubCriticalSectionsHandler implements CriticalSectionsHandler {

private Handler mainHandler;
private Queue<Task> taskQueue;
private Set<Integer> criticalSections;

public StubCriticalSectionsHandler() {
mainHandler = new Handler(Looper.getMainLooper());
taskQueue = new ConcurrentLinkedQueue<>();
criticalSections = new HashSet<>();
}

@Override
public void startSection(int id) {

criticalSections.add(id);
}

@Override
public void stopSection(int id) {

criticalSections.remove(id);
if (criticalSections.isEmpty()) {
startLowPriorityTask();
}
}

@Override
public void stopSections() {

criticalSections.clear();
startLowPriorityTask();
}

@Override
public void postLowPriorityTask(Task task) {

public Task postLowPriorityTask(Task task) {
taskQueue.add(task);
startLowPriorityTask();
return task;
}

@Override
public void postLowPriorityTaskDelayed(Task task, int delay) {

public Task postLowPriorityTaskDelayed(Task task, int delay) {
mainHandler.postDelayed(() -> postLowPriorityTask(task), delay);
return task;
}

@Override
public void removeLowPriorityTask(Task task) {

taskQueue.remove(task);
}

@Override
public void removeLowPriorityTasks() {
taskQueue.clear();
}

private void startLowPriorityTask() {
Timber.d("low priority size = " + taskQueue.size());
while (!taskQueue.isEmpty() && criticalSections.isEmpty()) {
Task task = taskQueue.poll();
Timber.d("start task");
mainHandler.post(() -> task.run());
}
}
}
10 changes: 6 additions & 4 deletions app/src/main/java/ru/yandex/yamblz/loader/CollageLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@

import java.util.List;

import rx.Subscription;

public interface CollageLoader {

void loadCollage(List<String> urls, ImageView imageView);
Subscription loadCollage(List<String> urls, ImageView imageView);

void loadCollage(List<String> urls, ImageTarget imageTarget);
Subscription loadCollage(List<String> urls, ImageTarget imageTarget);

void loadCollage(List<String> urls, ImageView imageView, CollageStrategy collageStrategy);
Subscription loadCollage(List<String> urls, ImageView imageView, CollageStrategy collageStrategy);

void loadCollage(List<String> urls, ImageTarget imageTarget, CollageStrategy collageStrategy);
Subscription loadCollage(List<String> urls, ImageTarget imageTarget, CollageStrategy collageStrategy);

}
Loading