Skip to content

Commit 567d530

Browse files
author
Suneet Srivastava
committed
feat: Removed volley and shifted api calls to retrofit
1 parent 7c4f5cf commit 567d530

File tree

6 files changed

+148
-109
lines changed

6 files changed

+148
-109
lines changed

app/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ android {
9292

9393
configurations {
9494
implementation.exclude group: 'org.jetbrains', module: 'annotations'
95-
all*.exclude group: 'com.android.volley'
9695
}
9796

9897
lintOptions {
@@ -145,7 +144,10 @@ dependencies {
145144
androidTestImplementation 'androidx.test:runner:1.2.0'
146145
androidTestImplementation 'androidx.test:rules:1.2.0'
147146

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

150152
//google and support
151153
implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion"

app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java

Lines changed: 93 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import android.text.Editable;
3838
import android.text.TextUtils;
3939
import android.text.TextWatcher;
40+
import android.util.ArrayMap;
4041
import android.util.Log;
4142
import android.view.View;
4243
import android.view.WindowManager;
@@ -54,14 +55,6 @@
5455
import androidx.recyclerview.widget.RecyclerView;
5556
import butterknife.BindView;
5657
import butterknife.ButterKnife;
57-
import com.android.volley.AuthFailureError;
58-
import com.android.volley.DefaultRetryPolicy;
59-
import com.android.volley.Request;
60-
import com.android.volley.RequestQueue;
61-
import com.android.volley.Response;
62-
import com.android.volley.VolleyError;
63-
import com.android.volley.toolbox.StringRequest;
64-
import com.android.volley.toolbox.Volley;
6558
import com.box.androidsdk.content.BoxApiFile;
6659
import com.box.androidsdk.content.BoxConfig;
6760
import com.box.androidsdk.content.BoxException;
@@ -78,6 +71,7 @@
7871
import com.dropbox.core.v2.DbxClientV2;
7972
import com.dropbox.core.v2.files.WriteMode;
8073
import com.google.android.material.snackbar.Snackbar;
74+
import com.google.gson.JsonElement;
8175
import com.mikepenz.community_material_typeface_library.CommunityMaterial;
8276
import com.mikepenz.iconics.view.IconicsImageView;
8377
import com.owncloud.android.lib.common.OwnCloudClient;
@@ -109,8 +103,6 @@
109103
import java.text.SimpleDateFormat;
110104
import java.util.ArrayList;
111105
import java.util.Date;
112-
import java.util.HashMap;
113-
import java.util.Map;
114106
import org.fossasia.phimpme.R;
115107
import org.fossasia.phimpme.base.PhimpmeProgressBarHandler;
116108
import org.fossasia.phimpme.base.RecyclerItemClickListner;
@@ -126,11 +118,16 @@
126118
import org.fossasia.phimpme.share.twitter.HelperMethods;
127119
import org.fossasia.phimpme.utilities.ActivitySwitchHelper;
128120
import org.fossasia.phimpme.utilities.Constants;
121+
import org.fossasia.phimpme.utilities.ImgurApi;
129122
import org.fossasia.phimpme.utilities.NotificationHandler;
123+
import org.fossasia.phimpme.utilities.RetrofitClient;
130124
import org.fossasia.phimpme.utilities.SnackBarHandler;
131125
import org.fossasia.phimpme.utilities.Utils;
132126
import org.json.JSONException;
133127
import org.json.JSONObject;
128+
import retrofit2.Call;
129+
import retrofit2.Callback;
130+
import retrofit2.Response;
134131

135132
/**
136133
* Class which deals with Sharing images to multiple Account logged in by the user in the app. If
@@ -155,7 +152,10 @@ public class SharingActivity extends ThemedActivity
155152
OnRemoteOperationListener,
156153
RecyclerItemClickListner.OnItemClickListener {
157154

155+
private static final String IMGUR_BASE_URL = "https://api.imgur.com/3/";
158156
public static final String EXTRA_OUTPUT = "extra_output";
157+
public static String IMGUR_HEADER_CLIENT = "Client-ID";
158+
public String IMGUR_HEADER_USER = "Bearer";
159159
private static String LOG_TAG = SharingActivity.class.getCanonicalName();
160160
public String saveFilePath;
161161
ThemeHelper themeHelper;
@@ -202,9 +202,10 @@ public class SharingActivity extends ThemedActivity
202202
public String uploadName;
203203
private int positionShareOption;
204204
private boolean triedUploading = false;
205+
private ImgurApi imgurApiInterface;
205206

206207
public static String getClientAuth() {
207-
return Constants.IMGUR_HEADER_CLIENt + " " + Constants.MY_IMGUR_CLIENT_ID;
208+
return IMGUR_HEADER_CLIENT + " " + Constants.MY_IMGUR_CLIENT_ID;
208209
}
209210

210211
@Override
@@ -1015,14 +1016,17 @@ private void shareToWhatsapp() {
10151016
}
10161017

10171018
private void shareToImgur() {
1019+
if (imgurApiInterface == null) {
1020+
imgurApiInterface = RetrofitClient.getRetrofitClient(IMGUR_BASE_URL).create(ImgurApi.class);
1021+
}
10181022
final AlertDialog.Builder dialogBuilder =
10191023
new AlertDialog.Builder(SharingActivity.this, getDialogStyle());
10201024
RealmQuery<AccountDatabase> query = realm.where(AccountDatabase.class);
10211025
query.equalTo("name", getString(R.string.imgur));
10221026
final RealmResults<AccountDatabase> result = query.findAll();
10231027
if (result.size() != 0) {
10241028
isPersonal = true;
1025-
imgurAuth = Constants.IMGUR_HEADER_USER + " " + result.get(0).getToken();
1029+
imgurAuth = IMGUR_HEADER_USER + " " + result.get(0).getToken();
10261030
}
10271031
AlertDialogsHelper.getTextDialog(
10281032
SharingActivity.this, dialogBuilder, R.string.choose, R.string.imgur_select_mode, null);
@@ -1081,107 +1085,93 @@ void uploadImgur() {
10811085
Bitmap bitmap = getBitmapFromPath(saveFilePath);
10821086
final String imageString = getStringImage(bitmap);
10831087
// sending image to server
1084-
StringRequest request =
1085-
new StringRequest(
1086-
Request.Method.POST,
1087-
Constants.IMGUR_IMAGE_UPLOAD_URL,
1088-
new Response.Listener<String>() {
1088+
ArrayMap<String, String> body = new ArrayMap<>();
1089+
body.put("image", imageString);
1090+
if (caption != null && !caption.isEmpty()) {
1091+
body.put("title", caption);
1092+
}
1093+
String authorization;
1094+
if (isPersonal && imgurAuth != null) {
1095+
authorization = imgurAuth;
1096+
} else {
1097+
authorization = getClientAuth();
1098+
}
1099+
imgurApiInterface
1100+
.uploadImageToImgur(authorization, body)
1101+
.enqueue(
1102+
new Callback<JsonElement>() {
10891103
@Override
1090-
public void onResponse(String s) {
1091-
dialog.dismiss();
1092-
JSONObject jsonObject = null;
1093-
1094-
try {
1095-
jsonObject = new JSONObject(s);
1096-
Boolean success = jsonObject.getBoolean("success");
1097-
if (success) {
1098-
final String url = jsonObject.getJSONObject("data").getString("link");
1104+
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
1105+
if (response.body() != null && response.isSuccessful()) {
1106+
dialog.dismiss();
1107+
JSONObject jsonObject = null;
1108+
try {
1109+
jsonObject = new JSONObject(response.body().toString());
1110+
boolean success = jsonObject.getBoolean("success");
1111+
if (success) {
1112+
final String url = jsonObject.getJSONObject("data").getString("link");
1113+
1114+
if (isPersonal) {
1115+
imgurString = getString(R.string.upload_personal) + "\n" + url;
1116+
} else {
1117+
imgurString = getString(R.string.upload_anonymous) + "\n" + url;
1118+
}
10991119

1100-
if (isPersonal) {
1101-
imgurString = getString(R.string.upload_personal) + "\n" + url;
1120+
AlertDialogsHelper.getTextDialog(
1121+
SharingActivity.this,
1122+
dialogBuilder,
1123+
R.string.imgur_uplaoded_dialog_title,
1124+
0,
1125+
imgurString);
1126+
dialogBuilder.setPositiveButton(
1127+
getString(R.string.share).toUpperCase(),
1128+
new DialogInterface.OnClickListener() {
1129+
@Override
1130+
public void onClick(DialogInterface dialogInterface, int i) {
1131+
shareMsgOnIntent(SharingActivity.this, url);
1132+
sendResult(Constants.SUCCESS);
1133+
}
1134+
});
1135+
1136+
dialogBuilder.setNeutralButton(
1137+
getString(R.string.copy_action).toUpperCase(),
1138+
new DialogInterface.OnClickListener() {
1139+
@Override
1140+
public void onClick(DialogInterface dialogInterface, int i) {
1141+
copyToClipBoard(SharingActivity.this, url);
1142+
sendResult(Constants.SUCCESS);
1143+
}
1144+
});
1145+
dialogBuilder.setNegativeButton(getString(R.string.exit).toUpperCase(), null);
1146+
AlertDialog alertDialog = dialogBuilder.create();
1147+
alertDialog.show();
1148+
AlertDialogsHelper.setButtonTextColor(
1149+
new int[] {
1150+
DialogInterface.BUTTON_POSITIVE,
1151+
DialogInterface.BUTTON_NEGATIVE,
1152+
DialogInterface.BUTTON_NEUTRAL
1153+
},
1154+
getAccentColor(),
1155+
alertDialog);
11021156
} else {
1103-
imgurString = getString(R.string.upload_anonymous) + "\n" + url;
1157+
SnackBarHandler.create(parent, getString(R.string.error_on_imgur)).show();
1158+
sendResult(FAIL);
11041159
}
1105-
1106-
AlertDialogsHelper.getTextDialog(
1107-
SharingActivity.this,
1108-
dialogBuilder,
1109-
R.string.imgur_uplaoded_dialog_title,
1110-
0,
1111-
imgurString);
1112-
dialogBuilder.setPositiveButton(
1113-
getString(R.string.share).toUpperCase(),
1114-
new DialogInterface.OnClickListener() {
1115-
@Override
1116-
public void onClick(DialogInterface dialogInterface, int i) {
1117-
shareMsgOnIntent(SharingActivity.this, url);
1118-
sendResult(Constants.SUCCESS);
1119-
}
1120-
});
1121-
1122-
dialogBuilder.setNeutralButton(
1123-
getString(R.string.copy_action).toUpperCase(),
1124-
new DialogInterface.OnClickListener() {
1125-
@Override
1126-
public void onClick(DialogInterface dialogInterface, int i) {
1127-
copyToClipBoard(SharingActivity.this, url);
1128-
sendResult(Constants.SUCCESS);
1129-
}
1130-
});
1131-
dialogBuilder.setNegativeButton(getString(R.string.exit).toUpperCase(), null);
1132-
AlertDialog alertDialog = dialogBuilder.create();
1133-
alertDialog.show();
1134-
AlertDialogsHelper.setButtonTextColor(
1135-
new int[] {
1136-
DialogInterface.BUTTON_POSITIVE,
1137-
DialogInterface.BUTTON_NEGATIVE,
1138-
DialogInterface.BUTTON_NEUTRAL
1139-
},
1140-
getAccentColor(),
1141-
alertDialog);
1142-
} else {
1143-
SnackBarHandler.create(parent, getString(R.string.error_on_imgur)).show();
1144-
sendResult(FAIL);
1160+
} catch (JSONException e) {
1161+
e.printStackTrace();
11451162
}
1146-
} catch (JSONException e) {
1147-
e.printStackTrace();
1163+
} else {
1164+
dialog.dismiss();
1165+
SnackBarHandler.create(parent, getString(R.string.error_volly)).show();
11481166
}
11491167
}
1150-
},
1151-
new Response.ErrorListener() {
1168+
11521169
@Override
1153-
public void onErrorResponse(VolleyError volleyError) {
1170+
public void onFailure(Call<JsonElement> call, Throwable t) {
11541171
dialog.dismiss();
1155-
SnackBarHandler.create(parent, getString(R.string.error_volly))
1156-
.show(); // add volleyError to check error
1172+
SnackBarHandler.create(parent, getString(R.string.error_volly)).show();
11571173
}
1158-
}) {
1159-
@Override
1160-
protected Map<String, String> getParams() throws AuthFailureError {
1161-
Map<String, String> parameters = new HashMap<String, String>();
1162-
parameters.put("image", imageString);
1163-
if (caption != null && !caption.isEmpty()) parameters.put("title", caption);
1164-
return parameters;
1165-
}
1166-
1167-
@Override
1168-
public Map<String, String> getHeaders() throws AuthFailureError {
1169-
Map<String, String> headers = new HashMap<String, String>();
1170-
if (isPersonal) {
1171-
if (imgurAuth != null) {
1172-
headers.put(getString(R.string.header_auth), imgurAuth);
1173-
}
1174-
} else {
1175-
headers.put(getString(R.string.header_auth), getClientAuth());
1176-
}
1177-
1178-
return headers;
1179-
}
1180-
};
1181-
request.setRetryPolicy(
1182-
new DefaultRetryPolicy(50000, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
1183-
RequestQueue rQueue = Volley.newRequestQueue(SharingActivity.this);
1184-
rQueue.add(request);
1174+
});
11851175
}
11861176

11871177
/**

app/src/main/java/org/fossasia/phimpme/utilities/Constants.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@ public class Constants {
88
public static final int REQUEST_SHARE_RESULT = 50;
99
public static final String SHARE_RESULT = "share_result";
1010

11-
public static final String IMGUR_IMAGE_UPLOAD_URL = "https://api.imgur.com/3/image/";
12-
public static String IMGUR_HEADER_CLIENt = "Client-ID";
13-
public static String IMGUR_HEADER_USER = "Bearer";
14-
1511
/*Also add dropbox api key in manifest */
1612
public static final String DROPBOX_APP_KEY = "7fhwc9meece1m9g";
1713
public static final String DROPBOX_APP_SECRET = "m5567c8v5yt1qc1";
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.fossasia.phimpme.utilities;
2+
3+
import android.util.ArrayMap;
4+
import com.google.gson.JsonElement;
5+
import retrofit2.Call;
6+
import retrofit2.http.Body;
7+
import retrofit2.http.Header;
8+
import retrofit2.http.POST;
9+
10+
public interface ImgurApi {
11+
12+
@POST("/image")
13+
Call<JsonElement> uploadImageToImgur(
14+
@Header("Authorization") String authorization, @Body ArrayMap<String, String> body);
15+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.fossasia.phimpme.utilities;
2+
3+
import okhttp3.OkHttpClient;
4+
import okhttp3.logging.HttpLoggingInterceptor;
5+
import org.fossasia.phimpme.BuildConfig;
6+
import retrofit2.Retrofit;
7+
import retrofit2.converter.gson.GsonConverterFactory;
8+
9+
// Retrofit client used for API Calls
10+
public class RetrofitClient {
11+
12+
private static OkHttpClient.Builder httpClientBuilder = null;
13+
14+
private static OkHttpClient.Builder httpClient() {
15+
if (httpClientBuilder == null) {
16+
httpClientBuilder = new OkHttpClient.Builder();
17+
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
18+
if (BuildConfig.DEBUG) {
19+
interceptor.level(HttpLoggingInterceptor.Level.BASIC);
20+
} else {
21+
interceptor.level(HttpLoggingInterceptor.Level.NONE);
22+
}
23+
httpClientBuilder.interceptors().add(interceptor);
24+
}
25+
return httpClientBuilder;
26+
}
27+
28+
public static Retrofit getRetrofitClient(String baseUrl) {
29+
return new Retrofit.Builder()
30+
.baseUrl(baseUrl)
31+
.client(httpClient().build())
32+
.addConverterFactory(GsonConverterFactory.create())
33+
.build();
34+
}
35+
}

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,6 @@ ext {
5454
nextCloudVersion = "1.5.0"
5555
lifecycleVersion = "2.1.0"
5656
glideVersion = "4.10.0"
57+
retrofitVersion = "2.6.2"
5758
}
5859

0 commit comments

Comments
 (0)