diff --git a/android/app/build.gradle b/android/app/build.gradle index 7a6f34b58b..fb0f43130c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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') } diff --git a/android/app/src/main/cpp/native.cpp b/android/app/src/main/cpp/native.cpp index c71be76b3e..2e6da456eb 100644 --- a/android/app/src/main/cpp/native.cpp +++ b/android/app/src/main/cpp/native.cpp @@ -21,6 +21,7 @@ #include #include "AndroidHelper.h" +#include 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()); } + +} \ No newline at end of file diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/HifiUtils.java b/android/app/src/main/java/io/highfidelity/hifiinterface/HifiUtils.java index 15d716548f..901add4afa 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/HifiUtils.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/HifiUtils.java @@ -20,4 +20,6 @@ public class HifiUtils { public native String getCurrentAddress(); + public native String protocolVersionSignature(); + } diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/HomeActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/HomeActivity.java index fd50d36c75..35cf49151d 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/HomeActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/HomeActivity.java @@ -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 diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/provider/DomainProvider.java b/android/app/src/main/java/io/highfidelity/hifiinterface/provider/DomainProvider.java new file mode 100644 index 0000000000..108adfbbe4 --- /dev/null +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/provider/DomainProvider.java @@ -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 domain); + void retrieveError(Exception e, String message); + } +} diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/provider/UserStoryDomainProvider.java b/android/app/src/main/java/io/highfidelity/hifiinterface/provider/UserStoryDomainProvider.java new file mode 100644 index 0000000000..d96f20ac15 --- /dev/null +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/provider/UserStoryDomainProvider.java @@ -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 = mUserStoryDomainProviderService.getUserStories(mProtocol); + userStories.enqueue(new retrofit2.Callback() { + + @Override + public void onResponse(Call call, Response response) { + UserStories userStories = response.body(); + if (userStories == null) { + callback.retrieveOk(new ArrayList<>(0)); + } + List 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 call, Throwable t) { + callback.retrieveError(new Exception(t), t.getMessage()); + } + + }); + } + + public interface UserStoryDomainProviderService { + @GET("api/v1/user_stories") + Call 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 user_stories; + } +} diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/view/DomainAdapter.java b/android/app/src/main/java/io/highfidelity/hifiinterface/view/DomainAdapter.java index 1129ec586f..f8b4e73cd1 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/view/DomainAdapter.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/view/DomainAdapter.java @@ -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 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");