From 1e194d57ccef8a915f985a7b5b9e81883f3b5cce Mon Sep 17 00:00:00 2001 From: koziodigitalinc Date: Mon, 22 Aug 2016 22:44:23 -0500 Subject: [PATCH] Retrofit work begins, ZulipServices and dependencies. touch ups reset pointless auto styling fixes Removed line space, fix spelling based on pr. Fixes: #147 Removed fabricKey, removed extra line Removed line Added some crashlytics logging for potential breadcrumbs on failure. Started working on retrofit implementation. Backup save. Nearly reached completion of modeling responses. Backup. Working through weird bug on formatting for updating pointer realized wrong encoding was being used. --- app/build.gradle | 5 +- .../com/zulip/android/test/UnsortedTests.java | 4 +- .../main/java/com/zulip/android/ZulipApp.java | 76 +++++- .../activities/RecyclerMessageAdapter.java | 7 +- .../android/activities/ZulipActivity.java | 20 ++ .../models/updated/ChatStatusWrapper.java | 17 ++ .../android/models/updated/JenkinsType.java | 18 ++ .../android/models/updated/Referrals.java | 30 +++ .../models/updated/UserChatStatus.java | 35 +++ .../android/models/updated/ZulipStream.java | 138 ++++++++++ .../android/models/updated/ZulipUser.java | 51 ++++ .../networking/AsyncPointerUpdate.java | 14 - .../zulip/android/networking/HTTPRequest.java | 2 + .../networking/ZulipAsyncPushTask.java | 2 +- .../android/networking/ZulipInterceptor.java | 39 +++ .../response/UserConfigurationResponse.java | 246 ++++++++++++++++++ .../zulip/android/service/ZulipServices.java | 25 ++ build.gradle | 5 +- 18 files changed, 696 insertions(+), 38 deletions(-) create mode 100644 app/src/main/java/com/zulip/android/models/updated/ChatStatusWrapper.java create mode 100644 app/src/main/java/com/zulip/android/models/updated/JenkinsType.java create mode 100644 app/src/main/java/com/zulip/android/models/updated/Referrals.java create mode 100644 app/src/main/java/com/zulip/android/models/updated/UserChatStatus.java create mode 100644 app/src/main/java/com/zulip/android/models/updated/ZulipStream.java create mode 100644 app/src/main/java/com/zulip/android/models/updated/ZulipUser.java delete mode 100644 app/src/main/java/com/zulip/android/networking/AsyncPointerUpdate.java create mode 100644 app/src/main/java/com/zulip/android/networking/ZulipInterceptor.java create mode 100644 app/src/main/java/com/zulip/android/networking/response/UserConfigurationResponse.java create mode 100644 app/src/main/java/com/zulip/android/service/ZulipServices.java diff --git a/app/build.gradle b/app/build.gradle index fe66db65eaaad8..d2d6231deac022 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,6 +65,10 @@ dependencies { compile 'com.android.support:recyclerview-v7:24.1.1' compile 'com.google.android.gms:play-services-gcm:8.4.0' compile 'com.google.android.gms:play-services-auth:8.4.0' + compile 'com.squareup.retrofit2:retrofit:2.1.0' + compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' + compile 'com.squareup.retrofit2:converter-gson:2.1.0' + compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.j256.ormlite:ormlite-core:5.0' compile 'com.j256.ormlite:ormlite-android:5.0' compile 'commons-lang:commons-lang:2.6' @@ -86,7 +90,6 @@ dependencies { } compile 'com.squareup.picasso:picasso:2.5.2' testCompile 'junit:junit:4.12' - compile 'com.squareup.okhttp3:okhttp:3.4.1' compile('com.crashlytics.sdk.android:crashlytics:2.6.2@aar') { transitive = true; } diff --git a/app/src/androidTest/java/com/zulip/android/test/UnsortedTests.java b/app/src/androidTest/java/com/zulip/android/test/UnsortedTests.java index 0a8353e361918e..0d4457b9ba495e 100644 --- a/app/src/androidTest/java/com/zulip/android/test/UnsortedTests.java +++ b/app/src/androidTest/java/com/zulip/android/test/UnsortedTests.java @@ -216,9 +216,9 @@ public void testAGOMFetch() throws SQLException, InterruptedException, private Message sampleMessage(ZulipApp app, int id) throws SQLException { Message rtr = new Message(app); - rtr.setSender(Person.getOrUpdate(app, "Test User", + rtr.setSender(Person.getOrUpdate(app, "UserConfigurationResponse User", TESTUSER_EXAMPLE_COM, "")); - rtr.setContent("Test message"); + rtr.setContent("UserConfigurationResponse message"); rtr.setType(MessageType.PRIVATE_MESSAGE); rtr.setRecipient(new String[] {TESTUSER_EXAMPLE_COM}); rtr.setID(id); diff --git a/app/src/main/java/com/zulip/android/ZulipApp.java b/app/src/main/java/com/zulip/android/ZulipApp.java index cd1501ed3f0562..41b5a00d1f1000 100644 --- a/app/src/main/java/com/zulip/android/ZulipApp.java +++ b/app/src/main/java/com/zulip/android/ZulipApp.java @@ -1,17 +1,5 @@ package com.zulip.android; -import com.crashlytics.android.Crashlytics; -import io.fabric.sdk.android.Fabric; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; -import java.util.Queue; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; - import android.app.Application; import android.content.Context; import android.content.SharedPreferences; @@ -21,6 +9,7 @@ import android.os.Handler; import android.util.Log; +import com.crashlytics.android.Crashlytics; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.RuntimeExceptionDao; import com.j256.ormlite.misc.TransactionManager; @@ -32,12 +21,35 @@ import com.zulip.android.models.Presence; import com.zulip.android.models.Stream; import com.zulip.android.networking.AsyncUnreadMessagesUpdate; -import com.zulip.android.util.BuildHelper; +import com.zulip.android.networking.ZulipInterceptor; +import com.zulip.android.service.ZulipServices; import com.zulip.android.util.ZLog; import org.json.JSONArray; import org.json.JSONException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashSet; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.TimeUnit; + +import io.fabric.sdk.android.Fabric; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.ResponseBody; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + /** * Stores the global variables which are frequently used. * @@ -60,6 +72,10 @@ public class ZulipApp extends Application { private DatabaseHelper databaseHelper; private Set mutedTopics; private static final String MUTED_TOPIC_KEY = "mutedTopics"; + private ZulipServices zulipServices; + + public Request goodRequest; + public Request badRequest; private ZulipActivity zulipActivity; public ZulipActivity getZulipActivity() { @@ -159,6 +175,24 @@ private void afterLogin() { setupEmoji(); } + public ZulipServices getZulipServices() { + if(zulipServices == null) { + HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); + logging.setLevel(HttpLoggingInterceptor.Level.BASIC); + + zulipServices = new Retrofit.Builder() + .client(new OkHttpClient.Builder().readTimeout(60, TimeUnit.SECONDS) + .addInterceptor(new ZulipInterceptor()) + .addInterceptor(logging) + .build()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl(getServerURI()) + .build() + .create(ZulipServices.class); + } + return zulipServices; + } + /** * Fills the Emoji Table with the existing emoticons saved in the assets folder. */ @@ -389,4 +423,20 @@ private static void setInstance(ZulipApp instance) { public boolean isTopicMute(int id, String subject) { return mutedTopics.contains(id + subject); } + + public void syncPointer(final int mID) { + + getZulipServices().updatePointer(Integer.toString(mID)) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + setPointer(mID); + } + + @Override + public void onFailure(Call call, Throwable t) { + //do nothing.. don't want to mis-update the pointer. + } + }); + } } diff --git a/app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java b/app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java index 0643a05994b0bb..d787781dc76787 100644 --- a/app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java +++ b/app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java @@ -29,7 +29,6 @@ import com.zulip.android.models.MessageType; import com.zulip.android.models.Person; import com.zulip.android.models.Stream; -import com.zulip.android.networking.AsyncPointerUpdate; import com.zulip.android.util.OnItemClickListener; import com.zulip.android.util.ZLog; import com.zulip.android.viewholders.LoadingHolder; @@ -139,8 +138,7 @@ public void onItemClick(int viewId, int position) { try { int mID = msg.getID(); if (zulipApp.getPointer() < mID) { - (new AsyncPointerUpdate(zulipApp)).execute(mID); - zulipApp.setPointer(mID); + zulipApp.syncPointer(mID); } } catch (NullPointerException e) { ZLog.logException(e); @@ -394,8 +392,7 @@ private void markThisMessageAsRead(Message message) { try { int mID = message.getID(); if (!startedFromFilter && zulipApp.getPointer() < mID) { - (new AsyncPointerUpdate(zulipApp)).execute(mID); - zulipApp.setPointer(mID); + zulipApp.syncPointer(mID); } if (!message.getMessageRead()) { try { diff --git a/app/src/main/java/com/zulip/android/activities/ZulipActivity.java b/app/src/main/java/com/zulip/android/activities/ZulipActivity.java index 904a5d4c5f9d0a..992106b382b1bd 100644 --- a/app/src/main/java/com/zulip/android/activities/ZulipActivity.java +++ b/app/src/main/java/com/zulip/android/activities/ZulipActivity.java @@ -85,6 +85,7 @@ import com.zulip.android.R; import com.zulip.android.models.Stream; import com.zulip.android.networking.AsyncSend; +import com.zulip.android.networking.response.UserConfigurationResponse; import com.zulip.android.util.AnimationHelper; import com.zulip.android.util.SwipeRemoveLinearLayout; import com.zulip.android.util.ZLog; @@ -96,6 +97,11 @@ import org.json.JSONObject; +import okhttp3.Response; +import okhttp3.ResponseBody; +import retrofit2.Call; +import retrofit2.Callback; + /** * The main Activity responsible for holding the {@link MessageListFragment} which has the list to the * messages @@ -1466,6 +1472,20 @@ protected void onResume() { narrowedList.onActivityResume(); } startRequests(); + final Handler handler = new Handler(); + ZulipApp.get().getZulipServices() + .register() + .enqueue(new Callback() { + @Override + public void onResponse(Call call, retrofit2.Response response) { + String k = ""; + } + + @Override + public void onFailure(Call call, Throwable t) { + String k = ""; + } + }); } @Override diff --git a/app/src/main/java/com/zulip/android/models/updated/ChatStatusWrapper.java b/app/src/main/java/com/zulip/android/models/updated/ChatStatusWrapper.java new file mode 100644 index 00000000000000..fc7bbc992ed0e5 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/ChatStatusWrapper.java @@ -0,0 +1,17 @@ +package com.zulip.android.models.updated; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class ChatStatusWrapper { + + @SerializedName("website") + private UserChatStatus website; + + public UserChatStatus getWebsite() { + return website; + } +} diff --git a/app/src/main/java/com/zulip/android/models/updated/JenkinsType.java b/app/src/main/java/com/zulip/android/models/updated/JenkinsType.java new file mode 100644 index 00000000000000..7ab55b99e8eb18 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/JenkinsType.java @@ -0,0 +1,18 @@ +package com.zulip.android.models.updated; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class JenkinsType { + private String source_url; + private String display_url; + + public String getSource_url() { + return source_url; + } + + public String getDisplay_url() { + return display_url; + } +} diff --git a/app/src/main/java/com/zulip/android/models/updated/Referrals.java b/app/src/main/java/com/zulip/android/models/updated/Referrals.java new file mode 100644 index 00000000000000..191aa7e651c035 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/Referrals.java @@ -0,0 +1,30 @@ +package com.zulip.android.models.updated; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class Referrals { + @SerializedName("granted") + private int granted; + @SerializedName("used") + private int used; + + public int getGranted() { + return granted; + } + + public void setGranted(int granted) { + this.granted = granted; + } + + public int getUsed() { + return used; + } + + public void setUsed(int used) { + this.used = used; + } +} diff --git a/app/src/main/java/com/zulip/android/models/updated/UserChatStatus.java b/app/src/main/java/com/zulip/android/models/updated/UserChatStatus.java new file mode 100644 index 00000000000000..587984196ba862 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/UserChatStatus.java @@ -0,0 +1,35 @@ +package com.zulip.android.models.updated; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class UserChatStatus { + + @SerializedName("status") + private String status; + @SerializedName("timestamp") + private int timestamp; + @SerializedName("client") + private String client; + @SerializedName("pushable") + private boolean pushable; + + public String getStatus() { + return status; + } + + public int getTimestamp() { + return timestamp; + } + + public String getClient() { + return client; + } + + public boolean isPushable() { + return pushable; + } +} diff --git a/app/src/main/java/com/zulip/android/models/updated/ZulipStream.java b/app/src/main/java/com/zulip/android/models/updated/ZulipStream.java new file mode 100644 index 00000000000000..dc4d15450bd140 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/ZulipStream.java @@ -0,0 +1,138 @@ +package com.zulip.android.models.updated; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class ZulipStream { + + + /** + * description : Automated issue traffic on Android repository + * color : #a6dcbf + * subscribers : [23,7,150,22] + * audible_notifications : false + * email_address : + * desktop_notifications : true + * name : android-issues + * stream_id : 29 + * invite_only : false + * pin_to_top : false + * in_home_view : true + */ + + @SerializedName("description") + private String description; + @SerializedName("color") + private String color; + @SerializedName("audible_notifications") + private boolean audibleNotifications; + @SerializedName("email_address") + private String emailAddress; + @SerializedName("desktop_notifications") + private boolean desktopNotifications; + @SerializedName("name") + private String name; + @SerializedName("stream_id") + private int streamId; + @SerializedName("invite_only") + private boolean inviteOnly; + @SerializedName("pin_to_top") + private boolean pinToTop; + @SerializedName("in_home_view") + private boolean inHomeView; + @SerializedName("subscribers") + private List subscribers; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public boolean isAudibleNotifications() { + return audibleNotifications; + } + + public void setAudibleNotifications(boolean audibleNotifications) { + this.audibleNotifications = audibleNotifications; + } + + public String getEmailAddress() { + return emailAddress; + } + + public void setEmailAddress(String emailAddress) { + this.emailAddress = emailAddress; + } + + public boolean isDesktopNotifications() { + return desktopNotifications; + } + + public void setDesktopNotifications(boolean desktopNotifications) { + this.desktopNotifications = desktopNotifications; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getStreamId() { + return streamId; + } + + public void setStreamId(int streamId) { + this.streamId = streamId; + } + + public boolean isInviteOnly() { + return inviteOnly; + } + + public void setInviteOnly(boolean inviteOnly) { + this.inviteOnly = inviteOnly; + } + + public boolean isPinToTop() { + return pinToTop; + } + + public void setPinToTop(boolean pinToTop) { + this.pinToTop = pinToTop; + } + + public boolean isInHomeView() { + return inHomeView; + } + + public void setInHomeView(boolean inHomeView) { + this.inHomeView = inHomeView; + } + + public List getSubscribers() { + return subscribers; + } + + public void setSubscribers(List subscribers) { + this.subscribers = subscribers; + } +} diff --git a/app/src/main/java/com/zulip/android/models/updated/ZulipUser.java b/app/src/main/java/com/zulip/android/models/updated/ZulipUser.java new file mode 100644 index 00000000000000..db1185a74d9351 --- /dev/null +++ b/app/src/main/java/com/zulip/android/models/updated/ZulipUser.java @@ -0,0 +1,51 @@ +package com.zulip.android.models.updated; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class ZulipUser { + + @SerializedName("is_bot") + private boolean isBot; + @SerializedName("is_admin") + private boolean isAdmin; + @SerializedName("email") + private String email; + @SerializedName("full_name") + private String fullName; + + public boolean isIsBot() { + return isBot; + } + + public void setIsBot(boolean isBot) { + this.isBot = isBot; + } + + public boolean isIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } +} diff --git a/app/src/main/java/com/zulip/android/networking/AsyncPointerUpdate.java b/app/src/main/java/com/zulip/android/networking/AsyncPointerUpdate.java deleted file mode 100644 index 782dcd525f0adc..00000000000000 --- a/app/src/main/java/com/zulip/android/networking/AsyncPointerUpdate.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zulip.android.networking; - -import com.zulip.android.ZulipApp; - -public class AsyncPointerUpdate extends ZulipAsyncPushTask { - public AsyncPointerUpdate(ZulipApp app) { - super(app); - } - - public final void execute(int newPointer) { - this.setProperty("pointer", Integer.toString(newPointer)); - execute("PUT", "v1/users/me/pointer"); - } -} diff --git a/app/src/main/java/com/zulip/android/networking/HTTPRequest.java b/app/src/main/java/com/zulip/android/networking/HTTPRequest.java index 11f1d21e592447..50689b98628d82 100644 --- a/app/src/main/java/com/zulip/android/networking/HTTPRequest.java +++ b/app/src/main/java/com/zulip/android/networking/HTTPRequest.java @@ -119,6 +119,8 @@ public Response execute() throws IOException { } Request request = requestBuilder.build(); Log.i("OkHTTP.request", method + " " + request.url().toString()); + if(request.url().toString().contains("pointer")) + ZulipApp.get().goodRequest = request; response = okHttpClient.newCall(request).execute(); return response; } diff --git a/app/src/main/java/com/zulip/android/networking/ZulipAsyncPushTask.java b/app/src/main/java/com/zulip/android/networking/ZulipAsyncPushTask.java index f5ca2d8956d371..f8c1ea50684d4b 100644 --- a/app/src/main/java/com/zulip/android/networking/ZulipAsyncPushTask.java +++ b/app/src/main/java/com/zulip/android/networking/ZulipAsyncPushTask.java @@ -92,7 +92,7 @@ public void setProperty(String key, String value) { protected String doInBackground(String... api_path) { Crashlytics.log(Log.VERBOSE, "Network call", getClass().getCanonicalName() + request); - + try { Response response = request.execute(); String responseString = response.body().string(); diff --git a/app/src/main/java/com/zulip/android/networking/ZulipInterceptor.java b/app/src/main/java/com/zulip/android/networking/ZulipInterceptor.java new file mode 100644 index 00000000000000..6e47a3549f3d64 --- /dev/null +++ b/app/src/main/java/com/zulip/android/networking/ZulipInterceptor.java @@ -0,0 +1,39 @@ +package com.zulip.android.networking; + +import android.util.Base64; + +import com.zulip.android.ZulipApp; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +/** + * Created by patrykpoborca on 8/25/16. + */ +public class ZulipInterceptor implements Interceptor { + + private final ZulipApp app; + + public ZulipInterceptor() { + app = ZulipApp.get(); + } + + @Override + public Response intercept(Chain chain) throws IOException { + Request.Builder requestBuilder = chain.request().newBuilder(); + requestBuilder.addHeader("client", "Android"); + requestBuilder.addHeader("User-Agent", app.getUserAgent()); + + if (app.getApiKey() != null) { + String authstr = app.getEmail() + ":" + app.getApiKey(); + requestBuilder.addHeader("Authorization", "Basic " + Base64.encodeToString(authstr.getBytes(), Base64.NO_WRAP)); + } + + Request request = requestBuilder.build(); + ZulipApp.get().badRequest = request; + return chain.proceed(request); + } +} diff --git a/app/src/main/java/com/zulip/android/networking/response/UserConfigurationResponse.java b/app/src/main/java/com/zulip/android/networking/response/UserConfigurationResponse.java new file mode 100644 index 00000000000000..272586c3d119c7 --- /dev/null +++ b/app/src/main/java/com/zulip/android/networking/response/UserConfigurationResponse.java @@ -0,0 +1,246 @@ +package com.zulip.android.networking.response; + +import com.google.gson.annotations.SerializedName; +import com.zulip.android.models.updated.ChatStatusWrapper; +import com.zulip.android.models.updated.JenkinsType; +import com.zulip.android.models.updated.Referrals; +import com.zulip.android.models.updated.ZulipStream; +import com.zulip.android.models.updated.ZulipUser; + +import java.util.List; +import java.util.Map; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public class UserConfigurationResponse { + + @SerializedName("last_event_id") + private int lastEventId; + + @SerializedName("realm_domain") + private String realmDomain; + + @SerializedName("realm_name") + private String realmName; + + @SerializedName("result") + private String result; + + @SerializedName("realm_default_language") + private String realmDefaultLanguage; + + @SerializedName("presences") + private Map presences; + + @SerializedName("pointer") + private int pointer; + + @SerializedName("realm_create_stream_by_admins_only") + private boolean realmCreateStreamByAdminsOnly; + + @SerializedName("email_dict") + private Map emailDict; + + @SerializedName("msg") + private String msg; + + @SerializedName("realm_allow_message_editing") + private boolean realmAllowMessageEditing; + + @SerializedName("realm_emoji") + private Map realmEmoji; + + @SerializedName("default_language") + private String defaultLanguage; + + @SerializedName("realm_restricted_to_domain") + private boolean realmRestrictedToDomain; + + @SerializedName("max_message_id") + private int maxMessageId; + + @SerializedName("queue_id") + private String queueId; + + @SerializedName("realm_message_content_edit_limit_seconds") + private int realmMessageContentEditLimitSeconds; + + @SerializedName("realm_invite_by_admins_only") + private boolean realmInviteByAdminsOnly; + + @SerializedName("realm_invite_required") + private boolean realmInviteRequired; + + @SerializedName("referrals") + private Referrals referrals; + + @SerializedName("twenty_four_hour_time") + private boolean twentyFourHourTime; + + @SerializedName("left_side_userlist") + private boolean leftSideUserlist; + + //todo + @SerializedName("muted_topics") + private List mutedTopics; + + //todo + @SerializedName("alert_words") + private List alertWords; + + //todo + @SerializedName("realm_bots") + private List realmBots; + + @SerializedName("never_subscribed") + private List neverSubscribed; + + @SerializedName("realm_default_streams") + private List realmDefaultStreams; + + @SerializedName("unsubscribed") + private List unsubscribed; + + @SerializedName("subscriptions") + private List subscriptions; + + @SerializedName("streams") + private List streams; + + @SerializedName("realm_filters") + private List> realmFilters; + + @SerializedName("realm_users") + private List realmUsers; + + + public int getLastEventId() { + return lastEventId; + } + + public String getRealmDomain() { + return realmDomain; + } + + public String getRealmName() { + return realmName; + } + + public String getResult() { + return result; + } + + public String getRealmDefaultLanguage() { + return realmDefaultLanguage; + } + + public Map getPresences() { + return presences; + } + + public int getPointer() { + return pointer; + } + + public boolean isRealmCreateStreamByAdminsOnly() { + return realmCreateStreamByAdminsOnly; + } + + public Map getEmailDict() { + return emailDict; + } + + public String getMsg() { + return msg; + } + + public boolean isRealmAllowMessageEditing() { + return realmAllowMessageEditing; + } + + public String getDefaultLanguage() { + return defaultLanguage; + } + + public boolean isRealmRestrictedToDomain() { + return realmRestrictedToDomain; + } + + public int getMaxMessageId() { + return maxMessageId; + } + + public String getQueueId() { + return queueId; + } + + public int getRealmMessageContentEditLimitSeconds() { + return realmMessageContentEditLimitSeconds; + } + + public boolean isRealmInviteByAdminsOnly() { + return realmInviteByAdminsOnly; + } + + public boolean isRealmInviteRequired() { + return realmInviteRequired; + } + + public Referrals getReferrals() { + return referrals; + } + + public boolean isTwentyFourHourTime() { + return twentyFourHourTime; + } + + public boolean isLeftSideUserlist() { + return leftSideUserlist; + } + + public List getMutedTopics() { + return mutedTopics; + } + + public List getAlertWords() { + return alertWords; + } + + public List getRealmBots() { + return realmBots; + } + + public List getNeverSubscribed() { + return neverSubscribed; + } + + public List getRealmDefaultStreams() { + return realmDefaultStreams; + } + + public List getUnsubscribed() { + return unsubscribed; + } + + public List getSubscriptions() { + return subscriptions; + } + + public List getStreams() { + return streams; + } + + public List> getRealmFilters() { + return realmFilters; + } + + public List getRealmUsers() { + return realmUsers; + } + + public JenkinsType getRealmEmoji() { + return realmEmoji == null ? null : realmEmoji.get("jenkins"); + } +} diff --git a/app/src/main/java/com/zulip/android/service/ZulipServices.java b/app/src/main/java/com/zulip/android/service/ZulipServices.java new file mode 100644 index 00000000000000..ee26630c3d09a1 --- /dev/null +++ b/app/src/main/java/com/zulip/android/service/ZulipServices.java @@ -0,0 +1,25 @@ +package com.zulip.android.service; + +import com.zulip.android.networking.response.UserConfigurationResponse; + +import okhttp3.ResponseBody; +import retrofit2.Call; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; +import retrofit2.http.PUT; + +/** + * Created by patrykpoborca on 8/25/16. + */ + +public interface ZulipServices { + + @POST("v1/register") + Call register(); + + @FormUrlEncoded + @PUT("v1/users/me/pointer") + Call updatePointer(@Field("pointer") String pointer); + +} diff --git a/build.gradle b/build.gradle index abcd55d64bd0c2..81d2c44f513719 100644 --- a/build.gradle +++ b/build.gradle @@ -8,9 +8,10 @@ buildscript { classpath 'com.google.gms:google-services:2.1.0' } } - +project.ext.fabricKey = ""; allprojects { repositories { jcenter() } -} + +} \ No newline at end of file