Skip to content

feat: Removed volley and shifted api calls to retrofit #2896

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 21, 2019
Merged
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
6 changes: 4 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ android {

configurations {
implementation.exclude group: 'org.jetbrains', module: 'annotations'
all*.exclude group: 'com.android.volley'
}

lintOptions {
Expand Down Expand Up @@ -145,7 +144,10 @@ dependencies {
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'

implementation 'com.mcxiaoke.volley:library:1.0.19'
//retrofit
implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.0'

//google and support
implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion"
Expand Down
106 changes: 45 additions & 61 deletions app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,6 @@
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.box.androidsdk.content.BoxApiFile;
import com.box.androidsdk.content.BoxConfig;
import com.box.androidsdk.content.BoxException;
Expand Down Expand Up @@ -109,8 +101,6 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.fossasia.phimpme.R;
import org.fossasia.phimpme.base.PhimpmeProgressBarHandler;
import org.fossasia.phimpme.base.RecyclerItemClickListner;
Expand All @@ -122,15 +112,20 @@
import org.fossasia.phimpme.gallery.util.AlertDialogsHelper;
import org.fossasia.phimpme.gallery.util.ThemeHelper;
import org.fossasia.phimpme.share.flickr.FlickrHelper;
import org.fossasia.phimpme.share.imgur.ImgurPicUploadReq;
import org.fossasia.phimpme.share.imgur.ImgurPicUploadResp;
import org.fossasia.phimpme.share.tumblr.TumblrClient;
import org.fossasia.phimpme.share.twitter.HelperMethods;
import org.fossasia.phimpme.utilities.ActivitySwitchHelper;
import org.fossasia.phimpme.utilities.Constants;
import org.fossasia.phimpme.utilities.ImgurApi;
import org.fossasia.phimpme.utilities.NotificationHandler;
import org.fossasia.phimpme.utilities.RetrofitClient;
import org.fossasia.phimpme.utilities.SnackBarHandler;
import org.fossasia.phimpme.utilities.Utils;
import org.json.JSONException;
import org.json.JSONObject;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
* Class which deals with Sharing images to multiple Account logged in by the user in the app. If
Expand All @@ -155,6 +150,9 @@ public class SharingActivity extends ThemedActivity
OnRemoteOperationListener,
RecyclerItemClickListner.OnItemClickListener {

private static final String IMGUR_BASE_URL = "https://api.imgur.com/3/";
private static final String IMGUR_HEADER_CLIENT = "Client-ID";
private static final String IMGUR_HEADER_USER = "Bearer";
public static final String EXTRA_OUTPUT = "extra_output";
private static String LOG_TAG = SharingActivity.class.getCanonicalName();
public String saveFilePath;
Expand Down Expand Up @@ -202,9 +200,10 @@ public class SharingActivity extends ThemedActivity
public String uploadName;
private int positionShareOption;
private boolean triedUploading = false;
private ImgurApi imgurApiInterface;

public static String getClientAuth() {
return Constants.IMGUR_HEADER_CLIENt + " " + Constants.MY_IMGUR_CLIENT_ID;
return IMGUR_HEADER_CLIENT + " " + Constants.MY_IMGUR_CLIENT_ID;
}

@Override
Expand Down Expand Up @@ -1015,14 +1014,17 @@ private void shareToWhatsapp() {
}

private void shareToImgur() {
if (imgurApiInterface == null) {
imgurApiInterface = RetrofitClient.getRetrofitClient(IMGUR_BASE_URL).create(ImgurApi.class);
}
final AlertDialog.Builder dialogBuilder =
new AlertDialog.Builder(SharingActivity.this, getDialogStyle());
RealmQuery<AccountDatabase> query = realm.where(AccountDatabase.class);
query.equalTo("name", getString(R.string.imgur));
final RealmResults<AccountDatabase> result = query.findAll();
if (result.size() != 0) {
isPersonal = true;
imgurAuth = Constants.IMGUR_HEADER_USER + " " + result.get(0).getToken();
imgurAuth = IMGUR_HEADER_USER + " " + result.get(0).getToken();
}
AlertDialogsHelper.getTextDialog(
SharingActivity.this, dialogBuilder, R.string.choose, R.string.imgur_select_mode, null);
Expand Down Expand Up @@ -1081,21 +1083,30 @@ void uploadImgur() {
Bitmap bitmap = getBitmapFromPath(saveFilePath);
final String imageString = getStringImage(bitmap);
// sending image to server
StringRequest request =
new StringRequest(
Request.Method.POST,
Constants.IMGUR_IMAGE_UPLOAD_URL,
new Response.Listener<String>() {
ImgurPicUploadReq imgurPicUpload = new ImgurPicUploadReq();
imgurPicUpload.setImage(imageString);
if (caption != null && !caption.isEmpty()) {
imgurPicUpload.setCaption(caption);
}
String authorization;
if (isPersonal && imgurAuth != null) {
authorization = imgurAuth;
} else {
authorization = getClientAuth();
}
imgurApiInterface
.uploadImageToImgur(authorization, imgurPicUpload)
.enqueue(
new Callback<ImgurPicUploadResp>() {
@Override
public void onResponse(String s) {
dialog.dismiss();
JSONObject jsonObject = null;

try {
jsonObject = new JSONObject(s);
Boolean success = jsonObject.getBoolean("success");
public void onResponse(
Call<ImgurPicUploadResp> call, Response<ImgurPicUploadResp> response) {
if (response.body() != null && response.isSuccessful()) {
dialog.dismiss();
ImgurPicUploadResp imgurPicUploadResp = response.body();
boolean success = imgurPicUploadResp.isSuccess();
if (success) {
final String url = jsonObject.getJSONObject("data").getString("link");
final String url = imgurPicUploadResp.getData().getLink();

if (isPersonal) {
imgurString = getString(R.string.upload_personal) + "\n" + url;
Expand Down Expand Up @@ -1143,45 +1154,18 @@ public void onClick(DialogInterface dialogInterface, int i) {
SnackBarHandler.create(parent, getString(R.string.error_on_imgur)).show();
sendResult(FAIL);
}
} catch (JSONException e) {
e.printStackTrace();
} else {
dialog.dismiss();
SnackBarHandler.create(parent, getString(R.string.error_volly)).show();
}
}
},
new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError volleyError) {
public void onFailure(Call<ImgurPicUploadResp> call, Throwable t) {
dialog.dismiss();
SnackBarHandler.create(parent, getString(R.string.error_volly))
.show(); // add volleyError to check error
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("image", imageString);
if (caption != null && !caption.isEmpty()) parameters.put("title", caption);
return parameters;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
if (isPersonal) {
if (imgurAuth != null) {
headers.put(getString(R.string.header_auth), imgurAuth);
SnackBarHandler.create(parent, getString(R.string.error_volly)).show();
}
} else {
headers.put(getString(R.string.header_auth), getClientAuth());
}

return headers;
}
};
request.setRetryPolicy(
new DefaultRetryPolicy(50000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
RequestQueue rQueue = Volley.newRequestQueue(SharingActivity.this);
rQueue.add(request);
});
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.fossasia.phimpme.share.imgur;

public class ImgurPicUploadReq {
String image;
String caption;

public String getImage() {
return image;
}

public void setImage(String image) {
this.image = image;
}

public String getCaption() {
return caption;
}

public void setCaption(String caption) {
this.caption = caption;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.fossasia.phimpme.share.imgur;

public class ImgurPicUploadResp {
private boolean success;
private Data data;

public boolean isSuccess() {
return success;
}

public void setSuccess(boolean success) {
this.success = success;
}

public Data getData() {
return data;
}

public void setData(Data data) {
this.data = data;
}

public static class Data {
private String id;
private String title;
private String link;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getLink() {
return link;
}

public void setLink(String link) {
this.link = link;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ public class Constants {
public static final int REQUEST_SHARE_RESULT = 50;
public static final String SHARE_RESULT = "share_result";

public static final String IMGUR_IMAGE_UPLOAD_URL = "https://api.imgur.com/3/image/";
public static String IMGUR_HEADER_CLIENt = "Client-ID";
public static String IMGUR_HEADER_USER = "Bearer";

/*Also add dropbox api key in manifest */
public static final String DROPBOX_APP_KEY = "7fhwc9meece1m9g";
public static final String DROPBOX_APP_SECRET = "m5567c8v5yt1qc1";
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/org/fossasia/phimpme/utilities/ImgurApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.fossasia.phimpme.utilities;

import org.fossasia.phimpme.share.imgur.ImgurPicUploadReq;
import org.fossasia.phimpme.share.imgur.ImgurPicUploadResp;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.POST;

public interface ImgurApi {

@POST("/image")
Call<ImgurPicUploadResp> uploadImageToImgur(
@Header("Authorization") String authorization, @Body ImgurPicUploadReq body);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.fossasia.phimpme.utilities;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import org.fossasia.phimpme.BuildConfig;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

// Retrofit client used for API Calls
public class RetrofitClient {

private static OkHttpClient.Builder httpClientBuilder = null;

private static OkHttpClient.Builder httpClient() {
if (httpClientBuilder == null) {
httpClientBuilder = new OkHttpClient.Builder();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
if (BuildConfig.DEBUG) {
interceptor.level(HttpLoggingInterceptor.Level.BASIC);
} else {
interceptor.level(HttpLoggingInterceptor.Level.NONE);
}
httpClientBuilder.interceptors().add(interceptor);
}
return httpClientBuilder;
}

public static Retrofit getRetrofitClient(String baseUrl) {
return new Retrofit.Builder()
.baseUrl(baseUrl)
.client(httpClient().build())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
}
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,6 @@ ext {
nextCloudVersion = "1.5.0"
lifecycleVersion = "2.1.0"
glideVersion = "4.10.0"
retrofitVersion = "2.6.2"
}