diff --git a/app/build.gradle b/app/build.gradle
index 19a777a0f..b58311a50 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -39,7 +39,7 @@ android {
vectorDrawables.useSupportLibrary = true
resConfigs "en"
ndk {
- abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
+ abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
@@ -134,6 +134,7 @@ spotless {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'androidx.appcompat:appcompat:1.1.0'
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.1.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
@@ -236,9 +237,6 @@ dependencies {
//opencv
implementation project(':openCV')
- //pdk
- implementation 'com.github.forkerknights:android-pdk:1.2b'
-
//compressor
implementation 'id.zelory:compressor:2.1.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb6946394..be3e1238b 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,6 +46,11 @@
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
+
+
@@ -392,8 +397,12 @@
android:name="io.fabric.ApiKey"
android:value="78c6ec5c18fcd10ffbfd28ae038f3311f2763889" />
-
-
+
+
+
+
diff --git a/app/src/main/java/org/fossasia/phimpme/accounts/AccountActivity.java b/app/src/main/java/org/fossasia/phimpme/accounts/AccountActivity.java
index f6a3736dc..a8d81a50f 100644
--- a/app/src/main/java/org/fossasia/phimpme/accounts/AccountActivity.java
+++ b/app/src/main/java/org/fossasia/phimpme/accounts/AccountActivity.java
@@ -1,18 +1,15 @@
package org.fossasia.phimpme.accounts;
-import static com.pinterest.android.pdk.PDKClient.setDebugMode;
import static org.fossasia.phimpme.R.string.no_account_signed_in;
import static org.fossasia.phimpme.data.local.AccountDatabase.AccountName.BOX;
import static org.fossasia.phimpme.utilities.Constants.BOX_CLIENT_ID;
import static org.fossasia.phimpme.utilities.Constants.BOX_CLIENT_SECRET;
-import static org.fossasia.phimpme.utilities.Constants.PINTEREST_APP_ID;
import static org.fossasia.phimpme.utilities.Constants.SUCCESS;
import static org.fossasia.phimpme.utilities.Utils.checkNetwork;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -31,13 +28,8 @@
import com.box.androidsdk.content.models.BoxSession;
import com.dropbox.core.android.Auth;
import com.google.android.material.bottomnavigation.BottomNavigationView;
-import com.pinterest.android.pdk.PDKCallback;
-import com.pinterest.android.pdk.PDKClient;
-import com.pinterest.android.pdk.PDKException;
-import com.pinterest.android.pdk.PDKResponse;
import com.twitter.sdk.android.core.identity.TwitterAuthClient;
import io.realm.RealmQuery;
-import java.util.ArrayList;
import org.fossasia.phimpme.R;
import org.fossasia.phimpme.base.PhimpmeProgressBarHandler;
import org.fossasia.phimpme.base.RecyclerItemClickListner;
@@ -51,6 +43,7 @@
import org.fossasia.phimpme.share.imgur.ImgurAuthActivity;
import org.fossasia.phimpme.share.nextcloud.NextCloudAuth;
import org.fossasia.phimpme.share.owncloud.OwnCloudActivity;
+import org.fossasia.phimpme.share.pinterest.PinterestAuthActivity;
import org.fossasia.phimpme.share.twitter.LoginActivity;
import org.fossasia.phimpme.utilities.ActivitySwitchHelper;
import org.fossasia.phimpme.utilities.BasicCallBack;
@@ -82,7 +75,6 @@ public class AccountActivity extends ThemedActivity
private AccountViewModel accountViewModel;
private TwitterAuthClient client;
- private PDKClient pdkClient;
private BoxSession sessionBox;
@Override
@@ -103,9 +95,6 @@ public void onCreate(Bundle savedInstanceState) {
phimpmeProgressBarHandler.show();
setUpRecyclerView();
client = new TwitterAuthClient();
- pdkClient = PDKClient.configureInstance(this, PINTEREST_APP_ID);
- pdkClient.onConnect(this);
- setDebugMode(true);
configureBoxClient();
initObserver();
}
@@ -190,7 +179,7 @@ public void onItemClick(final View childView, final int position) {
break;
case PINTEREST:
- signInPinterest();
+ startActivity(new Intent(this, PinterestAuthActivity.class));
break;
case FLICKR:
@@ -284,37 +273,6 @@ public void callBack(int status, Object data) {
startActivity(i);
}
- private void signInPinterest() {
- ArrayList scopes = new ArrayList<>();
- scopes.add(PDKClient.PDKCLIENT_PERMISSION_READ_PUBLIC);
- scopes.add(PDKClient.PDKCLIENT_PERMISSION_WRITE_PUBLIC);
- scopes.add(PDKClient.PDKCLIENT_PERMISSION_READ_RELATIONSHIPS);
- scopes.add(PDKClient.PDKCLIENT_PERMISSION_WRITE_RELATIONSHIPS);
-
- pdkClient.login(
- this,
- scopes,
- new PDKCallback() {
- @Override
- public void onSuccess(PDKResponse response) {
- Log.d(getClass().getName(), response.getData().toString());
- accountViewModel.savePinterestToken(
- response.getUser().getFirstName() + " " + response.getUser().getLastName());
- finish();
- startActivity(getIntent());
- SnackBarHandler.create(coordinatorLayout, getString(R.string.account_logged_pinterest))
- .show();
- }
-
- @Override
- public void onFailure(PDKException exception) {
- Log.e(getClass().getName(), exception.getDetailMessage());
- SnackBarHandler.create(coordinatorLayout, getString(R.string.pinterest_signIn_fail))
- .show();
- }
- });
- }
-
@Override
public void onItemLongPress(View childView, int position) {
// No need to be implemented
@@ -362,7 +320,6 @@ private void boxAuthentication() {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
client.onActivityResult(requestCode, resultCode, data);
- pdkClient.onOauthResponse(requestCode, resultCode, data);
if ((requestCode == accountViewModel.OWNCLOUD_REQUEST_CODE
&& resultCode == accountViewModel.RESULT_OK)
|| (requestCode == accountViewModel.NEXTCLOUD_REQUEST_CODE
diff --git a/app/src/main/java/org/fossasia/phimpme/accounts/AccountRepository.java b/app/src/main/java/org/fossasia/phimpme/accounts/AccountRepository.java
index d3f08bb94..99d8a34d8 100644
--- a/app/src/main/java/org/fossasia/phimpme/accounts/AccountRepository.java
+++ b/app/src/main/java/org/fossasia/phimpme/accounts/AccountRepository.java
@@ -1,15 +1,32 @@
package org.fossasia.phimpme.accounts;
+import android.graphics.Bitmap;
import io.realm.Realm;
import io.realm.RealmQuery;
+import java.io.ByteArrayOutputStream;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
import org.fossasia.phimpme.data.local.AccountDatabase;
import org.fossasia.phimpme.data.local.DatabaseHelper;
+import org.fossasia.phimpme.share.pinterest.PinterestBoardsResp;
+import org.fossasia.phimpme.share.pinterest.PinterestUploadImgResp;
+import org.fossasia.phimpme.utilities.BasicCallBack;
+import org.fossasia.phimpme.utilities.Constants;
+import org.fossasia.phimpme.utilities.PinterestApi;
+import org.fossasia.phimpme.utilities.RetrofitClient;
+import org.fossasia.phimpme.utilities.Utils;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
/** Created by @codedsun on 09/Oct/2019 */
class AccountRepository {
private Realm realm = Realm.getDefaultInstance();
private DatabaseHelper databaseHelper = new DatabaseHelper(realm);
+ private PinterestApi pinterestApi =
+ RetrofitClient.getRetrofitClient(Constants.PINTEREST_BASE_URL).create(PinterestApi.class);
// Fetches the details of all accounts
RealmQuery fetchAllAccounts() {
@@ -41,4 +58,78 @@ void saveUsernameAndToken(
void deleteAccount(String accountName) {
databaseHelper.deleteSignedOutAccount(accountName);
}
+
+ void uploadImageToPinterest(BasicCallBack callBack, String imagePath, String note, String board) {
+ AccountDatabase pinterestAccount =
+ databaseHelper.getAccountByName(AccountDatabase.AccountName.PINTEREST.name());
+ if (pinterestAccount != null && pinterestAccount.getToken() != null) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Bitmap bitmap = Utils.getBitmapFromPath(imagePath);
+ int numPixels = bitmap.getHeight() * bitmap.getWidth();
+ if (numPixels > 3150000) {
+ PinterestUploadImgResp resp = new PinterestUploadImgResp();
+ resp.setMessage("Image Size too large");
+ callBack.callBack(Constants.FAIL, resp);
+ return;
+ }
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+ RequestBody reqFile =
+ RequestBody.create(baos.toByteArray(), MediaType.parse("multipart/form-data"));
+ MultipartBody.Part multipartBody =
+ MultipartBody.Part.createFormData("image", imagePath, reqFile);
+ pinterestApi
+ .uploadImageToPinterest(pinterestAccount.getToken(), note, board, multipartBody)
+ .enqueue(
+ new Callback() {
+ @Override
+ public void onResponse(
+ Call call, Response response) {
+ if (response.isSuccessful()) {
+ callBack.callBack(Constants.SUCCESS, response.body());
+ } else {
+ PinterestUploadImgResp resp = new PinterestUploadImgResp();
+ resp.setMessage(response.message());
+ callBack.callBack(Constants.FAIL, resp);
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ PinterestUploadImgResp resp = new PinterestUploadImgResp();
+ resp.setMessage(t.toString());
+ callBack.callBack(Constants.FAIL, resp);
+ }
+ });
+ } else {
+ // No account found for pinterest
+ callBack.callBack(Constants.FAIL, null);
+ }
+ }
+
+ // get pinterest boards of user
+ void getPinterestBoards(BasicCallBack callBack) {
+ AccountDatabase pinterestAccount =
+ databaseHelper.getAccountByName(AccountDatabase.AccountName.PINTEREST.name());
+ if (pinterestAccount != null && pinterestAccount.getToken() != null) {
+ pinterestApi
+ .getUserBoards(pinterestAccount.getToken())
+ .enqueue(
+ new Callback() {
+ @Override
+ public void onResponse(
+ Call call, Response response) {
+ if (response.body() != null && response.isSuccessful()) {
+ callBack.callBack(Constants.SUCCESS, response.body());
+ } else {
+ callBack.callBack(Constants.FAIL, "Unable to get Boards");
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ callBack.callBack(Constants.FAIL, null);
+ }
+ });
+ }
+ }
}
diff --git a/app/src/main/java/org/fossasia/phimpme/accounts/AccountViewModel.java b/app/src/main/java/org/fossasia/phimpme/accounts/AccountViewModel.java
index e6157b11e..91569910e 100644
--- a/app/src/main/java/org/fossasia/phimpme/accounts/AccountViewModel.java
+++ b/app/src/main/java/org/fossasia/phimpme/accounts/AccountViewModel.java
@@ -4,6 +4,9 @@
import androidx.lifecycle.ViewModel;
import io.realm.RealmQuery;
import org.fossasia.phimpme.data.local.AccountDatabase;
+import org.fossasia.phimpme.share.pinterest.PinterestBoardsResp;
+import org.fossasia.phimpme.share.pinterest.PinterestUploadImgResp;
+import org.fossasia.phimpme.utilities.Constants;
/** Created by @codedsun on 09/Oct/2019 */
public class AccountViewModel extends ViewModel {
@@ -13,8 +16,12 @@ public class AccountViewModel extends ViewModel {
final int RESULT_OK = 1;
private AccountRepository accountRepository = new AccountRepository();
- MutableLiveData error = new MutableLiveData<>();
+ public MutableLiveData error = new MutableLiveData<>();
MutableLiveData> accountDetails = new MutableLiveData<>();
+ public MutableLiveData boards = new MutableLiveData<>();
+ public MutableLiveData pinterestUploadImageResponse =
+ new MutableLiveData<>();
+ public MutableLiveData pinterestUploadImageError = new MutableLiveData<>();
public AccountViewModel() {}
@@ -69,4 +76,38 @@ void deleteAccountFromDatabase(String accountName) {
void saveImgurAccount(String username, String token) {
accountRepository.saveUsernameAndToken(AccountDatabase.AccountName.IMGUR, username, token);
}
+
+ public void savePinterestAccount(String username, String token) {
+ accountRepository.saveUsernameAndToken(AccountDatabase.AccountName.PINTEREST, username, token);
+ }
+
+ public void getUserPinterestBoards() {
+ accountRepository.getPinterestBoards(
+ (status, data) -> {
+ if (status == Constants.SUCCESS) {
+ PinterestBoardsResp resp = (PinterestBoardsResp) data;
+ boards.postValue(resp);
+ } else {
+ error.postValue(true);
+ }
+ });
+ }
+
+ public void uploadImageToBoards(String image, String note, String board) {
+ accountRepository.uploadImageToPinterest(
+ (status, data) -> {
+ if (status == Constants.SUCCESS) {
+ pinterestUploadImageResponse.postValue((PinterestUploadImgResp) data);
+ } else {
+ if (data == null) {
+ pinterestUploadImageError.postValue("No account logged in");
+ } else {
+ pinterestUploadImageError.postValue(((PinterestUploadImgResp) data).getMessage());
+ }
+ }
+ },
+ image,
+ note,
+ board);
+ }
}
diff --git a/app/src/main/java/org/fossasia/phimpme/data/local/DatabaseHelper.java b/app/src/main/java/org/fossasia/phimpme/data/local/DatabaseHelper.java
index bf1138684..7b791b08d 100644
--- a/app/src/main/java/org/fossasia/phimpme/data/local/DatabaseHelper.java
+++ b/app/src/main/java/org/fossasia/phimpme/data/local/DatabaseHelper.java
@@ -64,4 +64,8 @@ public void delete(ImageDescModel item) {
item.deleteFromRealm();
realm.commitTransaction();
}
+
+ public AccountDatabase getAccountByName(String accountName) {
+ return realm.where(AccountDatabase.class).contains("name", accountName).findFirst();
+ }
}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java b/app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java
index 252233325..d7669f6e9 100644
--- a/app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java
+++ b/app/src/main/java/org/fossasia/phimpme/share/SharingActivity.java
@@ -81,10 +81,6 @@
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation;
import com.owncloud.android.lib.resources.files.UploadFileRemoteOperation;
-import com.pinterest.android.pdk.PDKCallback;
-import com.pinterest.android.pdk.PDKClient;
-import com.pinterest.android.pdk.PDKException;
-import com.pinterest.android.pdk.PDKResponse;
import com.tumblr.jumblr.JumblrClient;
import com.tumblr.jumblr.types.PhotoPost;
import com.tumblr.jumblr.types.User;
@@ -114,6 +110,7 @@
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.pinterest.PinterestShareActivity;
import org.fossasia.phimpme.share.tumblr.TumblrClient;
import org.fossasia.phimpme.share.twitter.HelperMethods;
import org.fossasia.phimpme.utilities.ActivitySwitchHelper;
@@ -318,7 +315,11 @@ public void onClick(DialogInterface dialogInterface, int i) {
break;
case PINTEREST:
- shareToPinterest();
+ Intent pinterestIntent =
+ new Intent(SharingActivity.this, PinterestShareActivity.class);
+ pinterestIntent.putExtra(Constants.DATA, saveFilePath);
+ startActivity(pinterestIntent);
+ finish();
break;
case MESSENGER:
@@ -804,75 +805,6 @@ public void onClick(View v) {
});
}
- private void shareToPinterest() {
- final AlertDialog.Builder dialogBuilder =
- new AlertDialog.Builder(SharingActivity.this, getDialogStyle());
- final EditText captionEditText = new EditText(getApplicationContext());
-
- String link = context.getString(R.string.Pinterest_link);
- AlertDialogsHelper.getInsertTextDialog(
- SharingActivity.this, dialogBuilder, captionEditText, R.string.Pinterest_link, link);
- dialogBuilder.setNegativeButton(getString(R.string.cancel).toUpperCase(), null);
- dialogBuilder.setPositiveButton(
- getString(R.string.post_action).toUpperCase(),
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // This should br empty it will be overwrite later
- // to avoid dismiss of the dialog on wrong password
- }
- });
-
- final AlertDialog passwordDialog = dialogBuilder.create();
- passwordDialog.show();
- AlertDialogsHelper.setButtonTextColor(
- new int[] {DialogInterface.BUTTON_POSITIVE, DialogInterface.BUTTON_NEGATIVE},
- getAccentColor(),
- passwordDialog);
- passwordDialog
- .getButton(AlertDialog.BUTTON_POSITIVE)
- .setOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String captionText = captionEditText.getText().toString();
- boardID = captionText;
- postToPinterest(boardID);
- passwordDialog.dismiss();
- }
- });
- }
-
- private void postToPinterest(final String boardID) {
- SnackBarHandler.create(parent, getString(R.string.pinterest_image_uploading)).show();
- NotificationHandler.make(
- R.string.pinterest, R.string.upload_progress, R.drawable.ic_cloud_upload_black_24dp);
- Bitmap image = getBitmapFromPath(saveFilePath);
- PDKClient.getInstance()
- .createPin(
- caption,
- boardID,
- image,
- null,
- new PDKCallback() {
- @Override
- public void onSuccess(PDKResponse response) {
- NotificationHandler.actionPassed(R.string.upload_complete);
- Log.d(getClass().getName(), response.getData().toString());
- SnackBarHandler.create(parent, getString(R.string.pinterest_post)).show();
- sendResult(Constants.SUCCESS);
- }
-
- @Override
- public void onFailure(PDKException exception) {
- NotificationHandler.actionFailed();
- Log.e(getClass().getName(), exception.getDetailMessage());
- SnackBarHandler.create(parent, getString(R.string.Pinterest_fail)).show();
- sendResult(FAIL);
- }
- });
- }
-
private void shareToTwitter() {
if (Utils.checkAlreadyExist(TWITTER)) {
Glide.with(this)
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/BoardsListAdapter.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/BoardsListAdapter.java
new file mode 100644
index 000000000..2828fae35
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/BoardsListAdapter.java
@@ -0,0 +1,63 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import java.util.ArrayList;
+import org.fossasia.phimpme.R;
+import org.fossasia.phimpme.utilities.BasicCallBack;
+import org.fossasia.phimpme.utilities.Constants;
+
+/** Created by @codedsun on 14/Oct/2019 */
+public class BoardsListAdapter extends RecyclerView.Adapter {
+
+ BasicCallBack callback;
+
+ BoardsListAdapter(BasicCallBack callback) {
+ this.callback = callback;
+ }
+
+ private ArrayList boardsArray = new ArrayList<>();
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new ViewHolder(
+ LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_pinterest_boards, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ holder.tvName.setText((boardsArray.get(position)).getName());
+ holder.itemView.setOnClickListener(
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ callback.callBack(Constants.SUCCESS, boardsArray.get(position));
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return boardsArray.size();
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ private TextView tvName;
+
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ tvName = itemView.findViewById(R.id.tv_name);
+ }
+ }
+
+ public void addDatatoArray(ArrayList dataArray) {
+ boardsArray = dataArray;
+ notifyDataSetChanged();
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestAuthActivity.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestAuthActivity.java
new file mode 100644
index 000000000..2cb6da851
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestAuthActivity.java
@@ -0,0 +1,163 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ProgressBar;
+import androidx.lifecycle.ViewModelProviders;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import org.fossasia.phimpme.R;
+import org.fossasia.phimpme.accounts.AccountViewModel;
+import org.fossasia.phimpme.base.ThemedActivity;
+import org.fossasia.phimpme.utilities.Constants;
+import org.fossasia.phimpme.utilities.PinterestApi;
+import org.fossasia.phimpme.utilities.RetrofitClient;
+import org.fossasia.phimpme.utilities.Utils;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+/** Created by codedsun on 13/Oct/2019 */
+public class PinterestAuthActivity extends ThemedActivity {
+
+ private static final String TAG = PinterestAuthActivity.class.getName();
+ private static final String PINTEREST_GRANT_TYPE = "authorization_code";
+ private static final String PINTEREST_AUTH_STATE =
+ "2019phimpme"; // TODO:check before release to be exact in developer console
+ private static final String PINTEREST_REDIRECT_URI =
+ "https://phimp.me"; // TODO: check before release to be exact as in developer console
+ private static final String PINTEREST_AUTH_URL =
+ "https://api.pinterest.com/oauth/?"
+ + "response_type=code&"
+ + "redirect_uri="
+ + PINTEREST_REDIRECT_URI
+ + "&"
+ + "client_id="
+ + Constants.PINTEREST_APP_ID
+ + "&"
+ + "scope=read_public,write_public&"
+ + "state="
+ + PINTEREST_AUTH_STATE;
+
+ @BindView(R.id.web_view)
+ WebView webView;
+
+ @BindView(R.id.progress_bar)
+ ProgressBar progressBar;
+
+ private PinterestApi pinterestApi;
+ private AccountViewModel accountViewModel;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_pinterest_auth);
+ ButterKnife.bind(this);
+ accountViewModel = ViewModelProviders.of(this).get(AccountViewModel.class);
+ webView.setBackgroundColor(Color.TRANSPARENT);
+ Log.d(TAG, PINTEREST_AUTH_URL);
+ pinterestApi =
+ RetrofitClient.getRetrofitClient(Constants.PINTEREST_BASE_URL).create(PinterestApi.class);
+ webView.getSettings().setJavaScriptEnabled(true);
+ if (Constants.PINTEREST_APP_ID.isEmpty()
+ || Constants.PINTEREST_APP_SECRET.isEmpty()
+ || PINTEREST_AUTH_STATE.isEmpty()
+ || PINTEREST_REDIRECT_URI.isEmpty()) {
+ Utils.showToastShort(this, "No App Id Present ");
+ return;
+ }
+ webView.setWebViewClient(
+ new WebViewClient() {
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ progressBar.setVisibility(View.GONE);
+ }
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+ // https://phimp.me/?state=2019phimpme&code=87ee9a33518a418c - when yes pressed
+ // https://phimp.me/?state=2019phimpme - When no pressed
+ if (request.getUrl().toString().contains(PINTEREST_REDIRECT_URI)
+ && (request.getUrl().getQueryParameter("state") != null
+ && request.getUrl().getQueryParameter("state").equals(PINTEREST_AUTH_STATE))) {
+ if (request.getUrl().getQueryParameter("code") != null) {
+ processAuthCode(request.getUrl().getQueryParameter("code"));
+ progressBar.setVisibility(View.VISIBLE);
+ } else {
+ // User has pressed no
+ finish();
+ }
+ }
+ return false;
+ }
+ });
+ webView.loadUrl(PINTEREST_AUTH_URL);
+ }
+
+ private void processAuthCode(String code) {
+ progressBar.setVisibility(View.VISIBLE);
+ pinterestApi
+ .getUserToken(
+ PINTEREST_GRANT_TYPE, Constants.PINTEREST_APP_ID, Constants.PINTEREST_APP_SECRET, code)
+ .enqueue(
+ new Callback() {
+ @Override
+ public void onResponse(
+ Call call, Response response) {
+ if (response.body() != null && response.isSuccessful()) {
+ PinterestUserTokenResp resp = response.body();
+ fetchUserDetails(resp.getAccessToken());
+ } else {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(
+ PinterestAuthActivity.this, getString(R.string.something_went_wrong));
+ finish();
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(
+ PinterestAuthActivity.this, getString(R.string.something_went_wrong));
+ finish();
+ }
+ });
+ }
+
+ private void fetchUserDetails(String accessToken) {
+ pinterestApi
+ .getUserDetails(accessToken)
+ .enqueue(
+ new Callback() {
+ @Override
+ public void onResponse(
+ Call call, Response response) {
+ if (response.body() != null && response.isSuccessful()) {
+ PinterestUserResp resp = response.body();
+ accountViewModel.savePinterestAccount(
+ resp.getData().getUrl().substring(26, resp.getData().getUrl().length() - 1),
+ accessToken);
+ finish();
+ } else {
+ Utils.showToastShort(
+ PinterestAuthActivity.this, getString(R.string.something_went_wrong));
+ finish();
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Utils.showToastShort(
+ PinterestAuthActivity.this, getString(R.string.something_went_wrong));
+ finish();
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestBoardsResp.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestBoardsResp.java
new file mode 100644
index 000000000..1b2ba61ac
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestBoardsResp.java
@@ -0,0 +1,46 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import java.util.ArrayList;
+
+/** Created by @codedsun on 23/Oct/2019 */
+public class PinterestBoardsResp {
+ private ArrayList data;
+
+ public ArrayList getData() {
+ return data;
+ }
+
+ public void setData(ArrayList data) {
+ this.data = data;
+ }
+
+ public static class Data {
+ private String name;
+ private String url;
+ private String id;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestShareActivity.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestShareActivity.java
new file mode 100644
index 000000000..461aef96c
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestShareActivity.java
@@ -0,0 +1,150 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProviders;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import com.bumptech.glide.Glide;
+import java.io.File;
+import org.fossasia.phimpme.R;
+import org.fossasia.phimpme.accounts.AccountViewModel;
+import org.fossasia.phimpme.utilities.Constants;
+import org.fossasia.phimpme.utilities.Utils;
+
+public class PinterestShareActivity extends AppCompatActivity {
+
+ @BindView(R.id.iv_pic)
+ ImageView ivPic;
+
+ @BindView(R.id.tv_boards_label)
+ TextView tvBoardsLabel;
+
+ @BindView(R.id.rv_boards)
+ RecyclerView rvBoards;
+
+ @BindView(R.id.progress_bar)
+ ProgressBar progressBar;
+
+ @BindView(R.id.toolbar)
+ Toolbar toolbar;
+
+ private AccountViewModel accountViewModel;
+
+ private String saveImagePath;
+
+ private BoardsListAdapter boardsListAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_pinterest_share);
+ ButterKnife.bind(this);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setTitle(R.string.pinterest);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ accountViewModel = ViewModelProviders.of(this).get(AccountViewModel.class);
+ saveImagePath = getIntent().getStringExtra(Constants.DATA);
+ if (saveImagePath != null) {
+ initObserver();
+ initViews();
+ } else {
+ Utils.showToastShort(this, getString(R.string.image_invalid));
+ finish();
+ }
+ }
+
+ private void initObserver() {
+ accountViewModel.boards.observe(
+ this,
+ response -> {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(this, "Suneet");
+ if (response.getData().size() != 0) {
+ rvBoards.setVisibility(View.VISIBLE);
+ tvBoardsLabel.setVisibility(View.VISIBLE);
+ boardsListAdapter.addDatatoArray(response.getData());
+ } else {
+ rvBoards.setVisibility(View.GONE);
+ tvBoardsLabel.setVisibility(View.GONE);
+ }
+ });
+
+ accountViewModel.error.observe(
+ this,
+ status -> {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(this, "Suneet1");
+ if (status) {
+ // jsonException or volley error occured
+ Utils.showToastShort(
+ PinterestShareActivity.this, getString(R.string.something_went_wrong));
+ } else {
+ // no account found of pinterest
+ Utils.showToastShort(
+ PinterestShareActivity.this, "Please Sign In with pinterest account again");
+ finish();
+ }
+ });
+
+ accountViewModel.pinterestUploadImageError.observe(
+ this,
+ new Observer() {
+ @Override
+ public void onChanged(String s) {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(PinterestShareActivity.this, s);
+ }
+ });
+
+ accountViewModel.pinterestUploadImageResponse.observe(
+ this,
+ new Observer() {
+ @Override
+ public void onChanged(PinterestUploadImgResp pinterestUploadImgResp) {
+ progressBar.setVisibility(View.GONE);
+ Utils.showToastShort(PinterestShareActivity.this, getString(R.string.upload_complete));
+ finish();
+ }
+ });
+ }
+
+ private void initViews() {
+ Glide.with(this).asBitmap().load(Uri.fromFile(new File(saveImagePath))).into(ivPic);
+ // tvCreateBoard.setVisibility(View.VISIBLE);
+ boardsListAdapter =
+ new BoardsListAdapter(
+ (status, data) -> {
+ if (status == Constants.SUCCESS) {
+ accountViewModel.uploadImageToBoards(
+ saveImagePath, "Suneeet", "suneetbond/vrindavan");
+ } else {
+ Utils.showToastShort(this, getString(R.string.something_went_wrong));
+ progressBar.setVisibility(View.GONE);
+ }
+ });
+ rvBoards.setLayoutManager(new LinearLayoutManager(this));
+ rvBoards.setAdapter(boardsListAdapter);
+ accountViewModel.getUserPinterestBoards();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ }
+ return false;
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUploadImgResp.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUploadImgResp.java
new file mode 100644
index 000000000..becf40bb9
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUploadImgResp.java
@@ -0,0 +1,65 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import java.util.ArrayList;
+
+/** Created by @codedsun on 05/Nov/2019 */
+public class PinterestUploadImgResp {
+ private ArrayList data;
+
+ private String message;
+
+ public ArrayList getData() {
+ return data;
+ }
+
+ public void setData(ArrayList data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public static class Data {
+ private String link;
+ private String note;
+ private String id;
+ private String url;
+
+ public String getLink() {
+ return link;
+ }
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public void setNote(String note) {
+ this.note = note;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserResp.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserResp.java
new file mode 100644
index 000000000..e30eb1136
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserResp.java
@@ -0,0 +1,51 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import com.google.gson.annotations.SerializedName;
+
+/** Created by @codedsun on 23/Oct/2019 */
+public class PinterestUserResp {
+
+ private Data data;
+
+ public static class Data {
+ private String url;
+
+ @SerializedName("first_name")
+ private String firstName;
+
+ @SerializedName("last_name")
+ private String lastName;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ }
+
+ public Data getData() {
+ return data;
+ }
+
+ public void setData(Data data) {
+ this.data = data;
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserTokenResp.java b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserTokenResp.java
new file mode 100644
index 000000000..13a1745fa
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/share/pinterest/PinterestUserTokenResp.java
@@ -0,0 +1,27 @@
+package org.fossasia.phimpme.share.pinterest;
+
+import com.google.gson.annotations.SerializedName;
+
+/** Created by @codedsun on 23/Oct/2019 */
+public class PinterestUserTokenResp {
+ String status;
+
+ @SerializedName("access_token")
+ String accessToken;
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public void setAccessToken(String accessToken) {
+ this.accessToken = accessToken;
+ }
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/utilities/Constants.java b/app/src/main/java/org/fossasia/phimpme/utilities/Constants.java
index 85fe41bf6..581079af3 100644
--- a/app/src/main/java/org/fossasia/phimpme/utilities/Constants.java
+++ b/app/src/main/java/org/fossasia/phimpme/utilities/Constants.java
@@ -7,6 +7,7 @@ public class Constants {
public static int FAIL = 1;
public static final int REQUEST_SHARE_RESULT = 50;
public static final String SHARE_RESULT = "share_result";
+ public static final String DATA = "DATA";
/*Also add dropbox api key in manifest */
public static final String DROPBOX_APP_KEY = "7fhwc9meece1m9g";
@@ -33,7 +34,11 @@ public class Constants {
+ MY_IMGUR_CLIENT_ID
+ "&response_type=token";
- public static final String PINTEREST_APP_ID = "4914573327424567067";
+ // public static final String PINTEREST_APP_ID = "4914573327424567067";
+ public static final String PINTEREST_APP_ID = "5060239792999016722";
+ public static final String PINTEREST_APP_SECRET =
+ "bb2e4bfbb72dd12fd9cd6ec40627a3999eda262320178e63c10b6f74e10d4e5d";
+ public static final String PINTEREST_BASE_URL = "https://api.pinterest.com/v1/";
public static final String PACKAGE_INSTAGRAM = "com.instagram.android";
public static final String PACKAGE_WHATSAPP = "com.whatsapp";
diff --git a/app/src/main/java/org/fossasia/phimpme/utilities/PinterestApi.java b/app/src/main/java/org/fossasia/phimpme/utilities/PinterestApi.java
new file mode 100644
index 000000000..1253cfed5
--- /dev/null
+++ b/app/src/main/java/org/fossasia/phimpme/utilities/PinterestApi.java
@@ -0,0 +1,41 @@
+package org.fossasia.phimpme.utilities;
+
+import okhttp3.MultipartBody;
+import org.fossasia.phimpme.share.pinterest.PinterestBoardsResp;
+import org.fossasia.phimpme.share.pinterest.PinterestUploadImgResp;
+import org.fossasia.phimpme.share.pinterest.PinterestUserResp;
+import org.fossasia.phimpme.share.pinterest.PinterestUserTokenResp;
+import retrofit2.Call;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.GET;
+import retrofit2.http.Multipart;
+import retrofit2.http.POST;
+import retrofit2.http.Part;
+import retrofit2.http.Query;
+
+/** Created by @codedsun on 23/Oct/2019 */
+public interface PinterestApi {
+
+ @GET("me")
+ Call getUserDetails(@Query("access_token") String accessToken);
+
+ @POST("oauth/token")
+ @FormUrlEncoded
+ Call getUserToken(
+ @Field("grant_type") String grantType,
+ @Field("client_id") String clientId,
+ @Field("client_secret") String clientSecret,
+ @Field("code") String code);
+
+ @GET("me/boards")
+ Call getUserBoards(@Query("access_token") String accessToken);
+
+ @Multipart
+ @POST("pins/")
+ Call uploadImageToPinterest(
+ @Query("access_token") String accessToken,
+ @Query("note") String note,
+ @Query("board") String boards,
+ @Part MultipartBody.Part image);
+}
diff --git a/app/src/main/java/org/fossasia/phimpme/utilities/RetrofitClient.java b/app/src/main/java/org/fossasia/phimpme/utilities/RetrofitClient.java
index 9f0ddef79..52b1d0e06 100644
--- a/app/src/main/java/org/fossasia/phimpme/utilities/RetrofitClient.java
+++ b/app/src/main/java/org/fossasia/phimpme/utilities/RetrofitClient.java
@@ -16,7 +16,7 @@ private static OkHttpClient.Builder httpClient() {
httpClientBuilder = new OkHttpClient.Builder();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
if (BuildConfig.DEBUG) {
- interceptor.level(HttpLoggingInterceptor.Level.BASIC);
+ interceptor.level(HttpLoggingInterceptor.Level.BODY);
} else {
interceptor.level(HttpLoggingInterceptor.Level.NONE);
}
diff --git a/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java b/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java
index 2998cae63..67bceacb7 100644
--- a/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java
+++ b/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java
@@ -20,6 +20,7 @@
import android.speech.RecognizerIntent;
import android.util.Base64;
import android.view.View;
+import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.material.snackbar.Snackbar;
import io.realm.Realm;
@@ -162,4 +163,8 @@ public static void promptSpeechInput(
SnackBarHandler.create(parentView, activity.getString(R.string.speech_not_supported)).show();
}
}
+
+ public static void showToastShort(Context context, String message) {
+ Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+ }
}
diff --git a/app/src/main/res/drawable-mdpi/ic_plus_pinterest.png b/app/src/main/res/drawable-mdpi/ic_plus_pinterest.png
new file mode 100644
index 000000000..819bb9585
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_plus_pinterest.png differ
diff --git a/app/src/main/res/layout/activity_pinterest_auth.xml b/app/src/main/res/layout/activity_pinterest_auth.xml
new file mode 100644
index 000000000..9c61cec4d
--- /dev/null
+++ b/app/src/main/res/layout/activity_pinterest_auth.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_pinterest_share.xml b/app/src/main/res/layout/activity_pinterest_share.xml
new file mode 100644
index 000000000..cbd846396
--- /dev/null
+++ b/app/src/main/res/layout/activity_pinterest_share.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_pinterest_boards.xml b/app/src/main/res/layout/item_pinterest_boards.xml
new file mode 100644
index 000000000..de9db7db6
--- /dev/null
+++ b/app/src/main/res/layout/item_pinterest_boards.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 553648d0e..886a389bf 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1439,4 +1439,6 @@
fb://page/
phimpmeapp
https://www.facebook.com/phimpmeapp
+ Something went wrong
+ Boards