Android Home screen access user_stories API to get domains - first implementation without filtering

This commit is contained in:
Cristian Luis Duarte 2018-04-18 16:03:17 -03:00
parent 744fa808e3
commit 1c31a519ba
7 changed files with 143 additions and 4 deletions

View file

@ -105,6 +105,9 @@ dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.squareup.retrofit2:retrofit:2.4.0'
compile 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation fileTree(include: ['*.jar'], dir: 'libs')
}

View file

@ -21,6 +21,7 @@
#include <AddressManager.h>
#include "AndroidHelper.h"
#include <udt/PacketHeaders.h>
QAndroidJniObject __activity;
@ -204,4 +205,8 @@ JNIEXPORT jstring JNICALL Java_io_highfidelity_hifiinterface_HifiUtils_getCurren
return env->NewStringUTF(str.toLatin1().data());
}
JNIEXPORT jstring JNICALL Java_io_highfidelity_hifiinterface_HifiUtils_protocolVersionSignature(JNIEnv *env, jobject instance) {
return env->NewStringUTF(protocolVersionsSignatureBase64().toLatin1().data());
}
}

View file

@ -20,4 +20,6 @@ public class HifiUtils {
public native String getCurrentAddress();
public native String protocolVersionSignature();
}

View file

@ -87,7 +87,7 @@ public class HomeActivity extends AppCompatActivity implements NavigationView.On
int numberOfColumns = 1;
GridLayoutManager gridLayoutMgr = new GridLayoutManager(this, numberOfColumns);
domainsView.setLayoutManager(gridLayoutMgr);
domainAdapter = new DomainAdapter(this);
domainAdapter = new DomainAdapter(this, "");
domainAdapter.setClickListener(new DomainAdapter.ItemClickListener() {
@Override

View file

@ -0,0 +1,19 @@
package io.highfidelity.hifiinterface.provider;
import java.util.List;
import io.highfidelity.hifiinterface.view.DomainAdapter;
/**
* Created by cduarte on 4/17/18.
*/
public interface DomainProvider {
void retrieve(Callback callback);
interface Callback {
void retrieveOk(List<DomainAdapter.Domain> domain);
void retrieveError(Exception e, String message);
}
}

View file

@ -0,0 +1,89 @@
package io.highfidelity.hifiinterface.provider;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import io.highfidelity.hifiinterface.view.DomainAdapter;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* Created by cduarte on 4/17/18.
*/
public class UserStoryDomainProvider implements DomainProvider {
public static final String BASE_URL = "https://metaverse.highfidelity.com/";
private String mProtocol;
private Retrofit mRetrofit;
private UserStoryDomainProviderService mUserStoryDomainProviderService;
public UserStoryDomainProvider(String protocol) {
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
mUserStoryDomainProviderService = mRetrofit.create(UserStoryDomainProviderService.class);
mProtocol = protocol;
}
@Override
public void retrieve(Callback callback) {
// TODO Call multiple pages
Call<UserStories> userStories = mUserStoryDomainProviderService.getUserStories(mProtocol);
userStories.enqueue(new retrofit2.Callback<UserStories>() {
@Override
public void onResponse(Call<UserStories> call, Response<UserStories> response) {
UserStories userStories = response.body();
if (userStories == null) {
callback.retrieveOk(new ArrayList<>(0));
}
List<DomainAdapter.Domain> domains = new ArrayList<>(userStories.total_entries);
userStories.user_stories.forEach(userStory -> {
// TODO Proper url creation (it can or can't have hifi
// TODO Or use host value from api?
domains.add(new DomainAdapter.Domain(
userStory.place_name,
"hifi://" + userStory.place_name + "/" + userStory.path,
userStory.thumbnail_url
));
});
callback.retrieveOk(domains);
}
@Override
public void onFailure(Call<UserStories> call, Throwable t) {
callback.retrieveError(new Exception(t), t.getMessage());
}
});
}
public interface UserStoryDomainProviderService {
@GET("api/v1/user_stories")
Call<UserStories> getUserStories(@Query("protocol") String protocol);
}
class UserStory {
public UserStory() {}
String place_name;
String path;
String thumbnail_url;
}
class UserStories {
String status;
int current_page;
int total_pages;
int total_entries;
List<UserStory> user_stories;
}
}

View file

@ -19,6 +19,8 @@ import java.util.ArrayList;
import java.util.List;
import io.highfidelity.hifiinterface.R;
import io.highfidelity.hifiinterface.provider.DomainProvider;
import io.highfidelity.hifiinterface.provider.UserStoryDomainProvider;
/**
* Created by Gabriel Calero & Cristian Duarte on 3/20/18.
@ -30,12 +32,13 @@ public class DomainAdapter extends RecyclerView.Adapter<DomainAdapter.ViewHolder
private Context mContext;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
private String mProtocol;
public class Domain {
public static class Domain {
public String name;
public String url;
public String thumbnail;
Domain(String name, String url, String thumbnail) {
public Domain(String name, String url, String thumbnail) {
this.name = name;
this.thumbnail = thumbnail;
this.url = url;
@ -45,13 +48,31 @@ public class DomainAdapter extends RecyclerView.Adapter<DomainAdapter.ViewHolder
// references to our domains
private Domain[] mDomains = {};
public DomainAdapter(Context c) {
public DomainAdapter(Context c, String protocol) {
mContext = c;
this.mInflater = LayoutInflater.from(mContext);
mProtocol = protocol;
loadDomains();
}
private void loadDomains() {
DomainProvider domainProvider = new UserStoryDomainProvider(mProtocol);
domainProvider.retrieve(new DomainProvider.Callback() {
@Override
public void retrieveOk(List<Domain> domain) {
mDomains = domain.toArray(mDomains);
notifyDataSetChanged();
}
@Override
public void retrieveError(Exception e, String message) {
//
Log.e("DOMAINS", message, e);
}
});
}
private void loadDomainsLocalFile() {
try {
JSONObject json = new JSONObject(loadJSONFromAsset());
JSONArray hifiDomains = json.getJSONArray("hifi_domains");