From 605d3139899288eae65b56debfab02c5c20a1eb7 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Mon, 9 May 2016 15:21:49 -0700 Subject: [PATCH 01/78] Always showing connect button --- .../wordpress/android/ui/publicize/PublicizeDetailFragment.java | 1 - WordPress/src/main/res/layout/publicize_detail_fragment.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java index 55af5882ea2c..c2a87e5cc0eb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java @@ -134,7 +134,6 @@ public void onAdapterLoaded(boolean isEmpty) { if (!isAdded()) return; mLayoutConnections.setVisibility(isEmpty ? View.GONE : View.VISIBLE); - mConnectBtn.setVisibility(isEmpty ? View.VISIBLE : View.GONE); if (isEmpty && hasOnPublicizeActionListener()) { mConnectBtn.setAction(ConnectAction.CONNECT); diff --git a/WordPress/src/main/res/layout/publicize_detail_fragment.xml b/WordPress/src/main/res/layout/publicize_detail_fragment.xml index f4f7d2758fd6..20c8b6339d2d 100644 --- a/WordPress/src/main/res/layout/publicize_detail_fragment.xml +++ b/WordPress/src/main/res/layout/publicize_detail_fragment.xml @@ -57,7 +57,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/margin_extra_large" - android:visibility="gone" tools:visibility="visible" /> Date: Mon, 9 May 2016 15:42:08 -0700 Subject: [PATCH 02/78] Configure connect button for adding another account --- .../org/wordpress/android/ui/publicize/ConnectButton.java | 6 ++++++ .../android/ui/publicize/PublicizeConstants.java | 3 ++- .../android/ui/publicize/PublicizeDetailFragment.java | 8 ++++++-- WordPress/src/main/res/values/strings.xml | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/ConnectButton.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/ConnectButton.java index f4cc4be90785..142d4816f7cc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/ConnectButton.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/ConnectButton.java @@ -74,6 +74,12 @@ private void updateView() { textColorResId = R.color.white; captionResId = R.string.share_btn_reconnect; break; + case CONNECT_ANOTHER_ACCOUNT: + normalColorResId = R.color.blue_medium; + pressedColorResId = R.color.blue_light; + textColorResId = R.color.white; + captionResId = R.string.share_btn_connect_another_account; + break; default: return; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index ed875a2d08fc..8886744dece2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -8,6 +8,7 @@ public class PublicizeConstants { public enum ConnectAction { CONNECT, DISCONNECT, - RECONNECT + RECONNECT, + CONNECT_ANOTHER_ACCOUNT } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java index c2a87e5cc0eb..df0859c005f6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java @@ -135,8 +135,12 @@ public void onAdapterLoaded(boolean isEmpty) { mLayoutConnections.setVisibility(isEmpty ? View.GONE : View.VISIBLE); - if (isEmpty && hasOnPublicizeActionListener()) { - mConnectBtn.setAction(ConnectAction.CONNECT); + if (hasOnPublicizeActionListener()) { + if (isEmpty) { + mConnectBtn.setAction(ConnectAction.CONNECT); + } else { + mConnectBtn.setAction(ConnectAction.CONNECT_ANOTHER_ACCOUNT); + } mConnectBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index cb69dfd4e953..8065142865a6 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1338,6 +1338,7 @@ Connect Disconnect Reconnect + Connect another account Disconnect from %s? From 3f372fb560ec224e195739e111910511f3a4edf1 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Mon, 9 May 2016 16:57:56 -0700 Subject: [PATCH 03/78] Move Connect button below RecyclerView --- .../res/layout/publicize_detail_fragment.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_detail_fragment.xml b/WordPress/src/main/res/layout/publicize_detail_fragment.xml index 20c8b6339d2d..b000d95d0695 100644 --- a/WordPress/src/main/res/layout/publicize_detail_fragment.xml +++ b/WordPress/src/main/res/layout/publicize_detail_fragment.xml @@ -52,13 +52,6 @@ - - - + + + From a564f5481f5562b291e0835af578472ab1a1c553 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Mon, 9 May 2016 17:55:13 -0700 Subject: [PATCH 04/78] Always clear cookies before loading the connect url --- .../ui/publicize/PublicizeWebViewFragment.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java index e5085a3dfa29..8f96f983f068 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java @@ -1,12 +1,14 @@ package org.wordpress.android.ui.publicize; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.webkit.CookieManager; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; @@ -106,6 +108,7 @@ public void onActivityCreated(Bundle savedInstanceState) { if (savedInstanceState == null) { mProgress.setVisibility(View.VISIBLE); + clearCookies(); loadConnectUrl(); } else { mWebView.restoreState(savedInstanceState); @@ -118,6 +121,17 @@ public void onResume() { setNavigationIcon(R.drawable.ic_close_white_24dp); } + private void clearCookies() { + CookieManager cookieManager = CookieManager.getInstance(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(null); + } else { + //noinspection deprecation + cookieManager.removeAllCookie(); + } + } + /* * display the current connect URL for this service - this will ask the user to * authorize the connection via the external service From 2940999987defcd943b5ace4a8b7113ef637efad Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 10 May 2016 08:30:21 -0700 Subject: [PATCH 05/78] Removing unused visibility and app namespace --- WordPress/src/main/res/layout/publicize_detail_fragment.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_detail_fragment.xml b/WordPress/src/main/res/layout/publicize_detail_fragment.xml index b000d95d0695..9232d164400b 100644 --- a/WordPress/src/main/res/layout/publicize_detail_fragment.xml +++ b/WordPress/src/main/res/layout/publicize_detail_fragment.xml @@ -1,7 +1,6 @@ + android:layout_marginTop="@dimen/margin_extra_large" /> From 584f42fb93279bbff3a50dfd0b79c7954c1c52b3 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 10 May 2016 09:55:07 -0700 Subject: [PATCH 06/78] Updating support library as its required to address a RecyclerView bug --- WordPress/build.gradle | 16 ++++++++-------- libs/editor/WordPressEditor/build.gradle | 6 +++--- libs/utils/WordPressUtils/build.gradle | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 73801ed72ddc..72fb82151b43 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -87,14 +87,14 @@ dependencies { } compile 'com.google.code.gson:gson:2.6.+' compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' - compile 'com.android.support:support-v13:23.1.1' - compile 'com.android.support:appcompat-v7:23.1.1' - compile 'com.android.support:cardview-v7:23.1.1' - compile 'com.android.support:recyclerview-v7:23.1.1' - compile 'com.android.support:design:23.1.1' - compile 'com.android.support:percent:23.1.1' - compile 'com.google.android.gms:play-services-gcm:8.3.0' - compile 'com.google.android.gms:play-services-auth:8.3.0' + compile 'com.android.support:support-v13:23.3.0' + compile 'com.android.support:appcompat-v7:23.3.0' + compile 'com.android.support:cardview-v7:23.3.0' + compile 'com.android.support:recyclerview-v7:23.3.0' + compile 'com.android.support:design:23.3.0' + compile 'com.android.support:percent:23.3.0' + compile 'com.google.android.gms:play-services-gcm:8.4.0' + compile 'com.google.android.gms:play-services-auth:8.4.0' compile 'com.github.chrisbanes.photoview:library:1.2.4' compile 'com.helpshift:android-helpshift-aar:4.4.0' compile 'de.greenrobot:eventbus:2.4.0' diff --git a/libs/editor/WordPressEditor/build.gradle b/libs/editor/WordPressEditor/build.gradle index b90f4106c4c8..432f7cc9092a 100644 --- a/libs/editor/WordPressEditor/build.gradle +++ b/libs/editor/WordPressEditor/build.gradle @@ -45,9 +45,9 @@ android { } dependencies { - compile 'com.android.support:appcompat-v7:23.1.1' - compile 'com.android.support:support-v4:23.1.1' - compile 'com.android.support:design:23.1.1' + compile 'com.android.support:appcompat-v7:23.3.0' + compile 'com.android.support:support-v4:23.3.0' + compile 'com.android.support:design:23.3.0' compile 'org.wordpress:utils:1.9.0' // Test libraries diff --git a/libs/utils/WordPressUtils/build.gradle b/libs/utils/WordPressUtils/build.gradle index 69b0a16c04e1..ae4b7dce1409 100644 --- a/libs/utils/WordPressUtils/build.gradle +++ b/libs/utils/WordPressUtils/build.gradle @@ -20,7 +20,7 @@ dependencies { exclude group: 'commons-logging' } compile 'com.mcxiaoke.volley:library:1.0.18' - compile 'com.android.support:support-v13:23.1.1' + compile 'com.android.support:support-v13:23.3.0' } android { From d4efbf900ed0e776bf209cbb06099bc360ed4309 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 10 May 2016 15:50:49 -0700 Subject: [PATCH 07/78] making RelativeLayout full height so that the empty text will be in the center --- WordPress/src/main/res/layout/publicize_list_fragment.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_list_fragment.xml b/WordPress/src/main/res/layout/publicize_list_fragment.xml index 0c61eb8f434b..fb012f76b45b 100644 --- a/WordPress/src/main/res/layout/publicize_list_fragment.xml +++ b/WordPress/src/main/res/layout/publicize_list_fragment.xml @@ -1,10 +1,9 @@ From abc0f60eb9382bfd070817e88d1761ce1fb24cf3 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 11 May 2016 12:03:12 -0700 Subject: [PATCH 08/78] Updating to support library 23.4.0 --- WordPress/build.gradle | 12 ++++++------ libs/editor/WordPressEditor/build.gradle | 6 +++--- libs/utils/WordPressUtils/build.gradle | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 56b322cfb0fa..5bf0b771da91 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -87,12 +87,12 @@ dependencies { } compile 'com.google.code.gson:gson:2.6.+' compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' - compile 'com.android.support:support-v13:23.3.0' - compile 'com.android.support:appcompat-v7:23.3.0' - compile 'com.android.support:cardview-v7:23.3.0' - compile 'com.android.support:recyclerview-v7:23.3.0' - compile 'com.android.support:design:23.3.0' - compile 'com.android.support:percent:23.3.0' + compile 'com.android.support:support-v13:23.4.0' + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:cardview-v7:23.4.0' + compile 'com.android.support:recyclerview-v7:23.4.0' + compile 'com.android.support:design:23.4.0' + compile 'com.android.support:percent:23.4.0' compile 'com.google.android.gms:play-services-gcm:8.4.0' compile 'com.google.android.gms:play-services-auth:8.4.0' compile 'com.github.chrisbanes.photoview:library:1.2.4' diff --git a/libs/editor/WordPressEditor/build.gradle b/libs/editor/WordPressEditor/build.gradle index 432f7cc9092a..708e47b730d8 100644 --- a/libs/editor/WordPressEditor/build.gradle +++ b/libs/editor/WordPressEditor/build.gradle @@ -45,9 +45,9 @@ android { } dependencies { - compile 'com.android.support:appcompat-v7:23.3.0' - compile 'com.android.support:support-v4:23.3.0' - compile 'com.android.support:design:23.3.0' + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:support-v4:23.4.0' + compile 'com.android.support:design:23.4.0' compile 'org.wordpress:utils:1.9.0' // Test libraries diff --git a/libs/utils/WordPressUtils/build.gradle b/libs/utils/WordPressUtils/build.gradle index ae4b7dce1409..7c493ed8d117 100644 --- a/libs/utils/WordPressUtils/build.gradle +++ b/libs/utils/WordPressUtils/build.gradle @@ -20,7 +20,7 @@ dependencies { exclude group: 'commons-logging' } compile 'com.mcxiaoke.volley:library:1.0.18' - compile 'com.android.support:support-v13:23.3.0' + compile 'com.android.support:support-v13:23.4.0' } android { From a5f711c3d4fae023eb9bc54990d9a11584b826ff Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 12 May 2016 10:24:44 -0700 Subject: [PATCH 09/78] Moving the removal of cookies to a Utility class and calling when fragment is removed --- .../publicize/PublicizeWebViewFragment.java | 27 +++++++------------ .../wordpress/android/util/WebViewUtils.java | 22 +++++++++++++++ 2 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/WebViewUtils.java diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java index 8f96f983f068..a7d9c13ff57f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java @@ -1,14 +1,12 @@ package org.wordpress.android.ui.publicize; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.webkit.CookieManager; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; @@ -23,6 +21,7 @@ import org.wordpress.android.ui.WPWebViewActivity; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; import org.wordpress.android.util.AppLog; +import org.wordpress.android.util.WebViewUtils; import de.greenrobot.event.EventBus; @@ -108,34 +107,28 @@ public void onActivityCreated(Bundle savedInstanceState) { if (savedInstanceState == null) { mProgress.setVisibility(View.VISIBLE); - clearCookies(); loadConnectUrl(); } else { mWebView.restoreState(savedInstanceState); } } + @Override + public void onStop() { + super.onStop(); + WebViewUtils.clearCookiesAsync(); + } + @Override public void onResume() { super.onResume(); setNavigationIcon(R.drawable.ic_close_white_24dp); } - private void clearCookies() { - CookieManager cookieManager = CookieManager.getInstance(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - cookieManager.removeAllCookies(null); - } else { - //noinspection deprecation - cookieManager.removeAllCookie(); - } - } - /* - * display the current connect URL for this service - this will ask the user to - * authorize the connection via the external service - */ + * display the current connect URL for this service - this will ask the user to + * authorize the connection via the external service + */ private void loadConnectUrl() { if (!isAdded()) return; diff --git a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/WebViewUtils.java b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/WebViewUtils.java new file mode 100644 index 000000000000..6247957819dc --- /dev/null +++ b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/WebViewUtils.java @@ -0,0 +1,22 @@ +package org.wordpress.android.util; + +import android.os.Build; +import android.webkit.CookieManager; +import android.webkit.ValueCallback; + +public class WebViewUtils { + public static void clearCookiesAsync() { + clearCookiesAsync(null); + } + + public static void clearCookiesAsync(ValueCallback callback) { + CookieManager cookieManager = CookieManager.getInstance(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(callback); + } else { + //noinspection deprecation + cookieManager.removeAllCookie(); + } + } +} From 068a6cff6220b5f36cd8be622553000795386674 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 12 May 2016 11:25:34 -0700 Subject: [PATCH 10/78] Change minSdkVersion to 16 so that ImageView.setImgAlpha() can be called --- WordPress/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index f325977e41d1..f0277098d9e8 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -34,7 +34,7 @@ android { applicationId "org.wordpress.android" versionName "alpha-8" versionCode 260 - minSdkVersion 14 + minSdkVersion 16 targetSdkVersion 23 vectorDrawables.useSupportLibrary = true From a925ce78e785c56e49a4b1f1e891084115d8cb25 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 15 May 2016 19:38:13 -0700 Subject: [PATCH 11/78] Clearing cookies after connection request --- .../android/ui/publicize/PublicizeWebViewFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java index a7d9c13ff57f..688a8205ed94 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java @@ -116,7 +116,6 @@ public void onActivityCreated(Bundle savedInstanceState) { @Override public void onStop() { super.onStop(); - WebViewUtils.clearCookiesAsync(); } @Override @@ -181,6 +180,7 @@ public void onPageFinished(WebView view, String url) { // call the endpoint to make the actual connection PublicizeActions.connect(mSiteId, mServiceId); + WebViewUtils.clearCookiesAsync(); } } } From 985408448bf4a6726359ec1973907ed31a964f41 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 17 May 2016 13:14:06 -0700 Subject: [PATCH 12/78] Only getting keyringConnectionId automatically if there is one account --- .../android/ui/publicize/PublicizeActions.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index 6a0fc4ee79b8..fd6d0a068914 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -83,8 +83,12 @@ private static void connectStepOne(final int siteId, final String serviceId) { RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { - int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); - connectStepTwo(siteId, keyringConnectionId); + if (hasMoreThanOneConnectedAccount(jsonObject)) { + + } else { + int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); + connectStepTwo(siteId, keyringConnectionId); + } } }; RestRequest.ErrorListener errorListener = new RestRequest.ErrorListener() { @@ -127,6 +131,11 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().post(path, params, null, listener, errorListener); } + private static boolean hasMoreThanOneConnectedAccount(JSONObject jsonObject) { + JSONArray jsonConnectionList = jsonObject.optJSONArray("connections"); + return jsonConnectionList != null && jsonConnectionList.length() > 1; + } + /* * extract the keyring connection for the passed service from the response * to /me/keyring-connections From 2b69fb1f566f01d42a2ba0df8e0cde2a38f426d4 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 19 Jun 2016 12:49:40 -0700 Subject: [PATCH 13/78] Making connectStepTwo public so that it can be called after the user chooses the correct account --- .../org/wordpress/android/ui/publicize/PublicizeActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index fd6d0a068914..940d476a9370 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -107,7 +107,7 @@ public void onErrorResponse(VolleyError volleyError) { * step two in creating a publicize connection: now that we have the keyring connection id, * create the actual connection */ - private static void connectStepTwo(int siteId, int keyringConnectionId) { + public static void connectStepTwo(int siteId, int keyringConnectionId) { RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { From 26e60b16f02db781f966b0b194890062918180d6 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 19 Jun 2016 12:50:13 -0700 Subject: [PATCH 14/78] Instead of picking the first one, we have the user pick the correct account they want to connect. --- .../org/wordpress/android/ui/publicize/PublicizeActions.java | 3 ++- .../org/wordpress/android/ui/publicize/PublicizeConstants.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index 940d476a9370..c4e1c8abec4a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -84,7 +84,8 @@ private static void connectStepOne(final int siteId, final String serviceId) { @Override public void onResponse(JSONObject jsonObject) { if (hasMoreThanOneConnectedAccount(jsonObject)) { - + // show dialog showing multiple options + EventBus.getDefault().post(new ActionCompleted(false, ConnectAction.CHOOSE_ACCOUNT)); } else { int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); connectStepTwo(siteId, keyringConnectionId); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index 8886744dece2..0c107078b827 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -9,6 +9,7 @@ public enum ConnectAction { CONNECT, DISCONNECT, RECONNECT, - CONNECT_ANOTHER_ACCOUNT + CONNECT_ANOTHER_ACCOUNT, + CHOOSE_ACCOUNT } } From aced5a663aaad49598ffca4ef1a3bec43e233347 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 19 Jun 2016 12:50:34 -0700 Subject: [PATCH 15/78] If we receive the "choose account" action, we show a chooser dialog --- .../ui/publicize/PublicizeListActivity.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index a66d28095ea3..5e541d9cb0fb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -1,12 +1,12 @@ package org.wordpress.android.ui.publicize; -import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.ActionBar; +import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; @@ -263,8 +263,26 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { closeWebViewFragment(); reloadDetailFragment(); - if (!event.didSucceed()) { - ToastUtils.showToast(this, R.string.error_generic); + if (event.getAction() == PublicizeConstants.ConnectAction.CHOOSE_ACCOUNT) { + showChooserDialog(); + } else { + if (!event.didSucceed()) { + ToastUtils.showToast(this, R.string.error_generic); + } } } + + private void showChooserDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + String[] array = { + "hey", "what", "else" + }; + builder.setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + PublicizeActions.connectStepTwo(1, 1); + } + }); + builder.show(); + } } From 3dcf16b07c0bf75cc16c57676db68438088b32a8 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 19 Jun 2016 22:04:53 -0700 Subject: [PATCH 16/78] Adding JSONObject handling so that the dialog can use the list --- .../android/ui/publicize/PublicizeActions.java | 2 +- .../android/ui/publicize/PublicizeEvents.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index c4e1c8abec4a..8a53099857d3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -85,7 +85,7 @@ private static void connectStepOne(final int siteId, final String serviceId) { public void onResponse(JSONObject jsonObject) { if (hasMoreThanOneConnectedAccount(jsonObject)) { // show dialog showing multiple options - EventBus.getDefault().post(new ActionCompleted(false, ConnectAction.CHOOSE_ACCOUNT)); + EventBus.getDefault().post(new ActionCompleted(jsonObject, ConnectAction.CHOOSE_ACCOUNT)); } else { int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); connectStepTwo(siteId, keyringConnectionId); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 57ba8848c885..34640402c00b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -1,5 +1,6 @@ package org.wordpress.android.ui.publicize; +import org.json.JSONObject; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; /** @@ -16,10 +17,22 @@ public static class ConnectionsChanged {} public static class ActionCompleted { private final boolean mSucceeded; private final ConnectAction mAction; + private final JSONObject mJsonObject; public ActionCompleted(boolean succeeded, ConnectAction action) { mSucceeded = succeeded; mAction = action; + mJsonObject = new JSONObject(); + } + + public ActionCompleted(JSONObject jsonObject, ConnectAction action) { + mSucceeded = false; + mJsonObject = jsonObject; + mAction = action; + } + + public JSONObject getJsonObject() { + return mJsonObject; } public ConnectAction getAction() { From f8acfd63ca0082fcf24eefb0712f67ea1d9cbb4c Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Mon, 20 Jun 2016 15:58:44 -0700 Subject: [PATCH 17/78] Showing Publicize Account Chooser Dialog when there are multiple accounts available --- ...PublicizeAccountChooserDialogFragment.java | 20 ++++++++++ .../ui/publicize/PublicizeListActivity.java | 40 ++++++++++++++++--- .../publicize_account_chooser_dialog.xml | 6 +++ 3 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java create mode 100644 WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java new file mode 100644 index 000000000000..669cd94634b5 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -0,0 +1,20 @@ +package org.wordpress.android.ui.publicize; + +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; + +/** + * Created by Will on 6/19/16. + */ +public class PublicizeAccountChooserDialogFragment extends DialogFragment { + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + + return super.onCreateDialog(savedInstanceState); + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 5e541d9cb0fb..7f850b51b67a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -11,6 +11,9 @@ import android.support.v7.widget.Toolbar; import android.view.MenuItem; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.datasets.PublicizeTable; @@ -21,6 +24,9 @@ import org.wordpress.android.ui.publicize.services.PublicizeUpdateService; import org.wordpress.android.util.ToastUtils; +import java.util.LinkedList; +import java.util.List; + import de.greenrobot.event.EventBus; public class PublicizeListActivity extends AppCompatActivity @@ -264,7 +270,8 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { reloadDetailFragment(); if (event.getAction() == PublicizeConstants.ConnectAction.CHOOSE_ACCOUNT) { - showChooserDialog(); + JSONObject jsonObject = event.getJsonObject(); + showChooserDialog(jsonObject); } else { if (!event.didSucceed()) { ToastUtils.showToast(this, R.string.error_generic); @@ -272,12 +279,35 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { } } - private void showChooserDialog() { + private void showChooserDialog(JSONObject jsonObject) { + LinkedList lists = new LinkedList<>(); + try { + JSONArray array = jsonObject.getJSONArray("connections"); + for (int i = 0; i < array.length(); i++) { + JSONObject object = array.getJSONObject(i); + lists.add(object.getString("external_display")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + String[] array = lists.toArray(new String[lists.size()]); AlertDialog.Builder builder = new AlertDialog.Builder(this); - String[] array = { - "hey", "what", "else" - }; + builder.setTitle("Connecting " + "Facebook"); +// builder.setMessage("Select the account you wish to authorize. Note that your posts will be shared to the selected account automatically."); builder.setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }); + builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { PublicizeActions.connectStepTwo(1, 1); diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml new file mode 100644 index 000000000000..3509b84116ac --- /dev/null +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file From dd64a50bc6244a8b6d2e2509dd0e1f22d9cedcd8 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 12:43:55 -0700 Subject: [PATCH 18/78] Removing JSONObject parameter/variable in ActionCompleted --- .../android/ui/publicize/PublicizeEvents.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 34640402c00b..17067711f18a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -17,16 +17,20 @@ public static class ConnectionsChanged {} public static class ActionCompleted { private final boolean mSucceeded; private final ConnectAction mAction; - private final JSONObject mJsonObject; public ActionCompleted(boolean succeeded, ConnectAction action) { mSucceeded = succeeded; mAction = action; - mJsonObject = new JSONObject(); } - public ActionCompleted(JSONObject jsonObject, ConnectAction action) { - mSucceeded = false; + public ConnectAction getAction() { + return mAction; + } + + public boolean didSucceed() { + return mSucceeded; + } + } mJsonObject = jsonObject; mAction = action; } From bd98cbd5aed5e4e51a9fd89a7d947786f47e6ab6 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 12:48:45 -0700 Subject: [PATCH 19/78] Reverting back to this method listening to all connectaction events --- .../android/ui/publicize/PublicizeListActivity.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 7f850b51b67a..a7488b26cad2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -269,13 +269,8 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { closeWebViewFragment(); reloadDetailFragment(); - if (event.getAction() == PublicizeConstants.ConnectAction.CHOOSE_ACCOUNT) { - JSONObject jsonObject = event.getJsonObject(); - showChooserDialog(jsonObject); - } else { - if (!event.didSucceed()) { - ToastUtils.showToast(this, R.string.error_generic); - } + if (!event.didSucceed()) { + ToastUtils.showToast(this, R.string.error_generic); } } From f460e1fbbb384f9e278f94f3d63df006bb255e99 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 12:49:08 -0700 Subject: [PATCH 20/78] Removing unnecessary onStop() override --- .../android/ui/publicize/PublicizeWebViewFragment.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java index 688a8205ed94..afe7285e3948 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeWebViewFragment.java @@ -113,11 +113,6 @@ public void onActivityCreated(Bundle savedInstanceState) { } } - @Override - public void onStop() { - super.onStop(); - } - @Override public void onResume() { super.onResume(); From 9187d49aadde0829dd7feacf04e25f8fee980c14 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 12:51:07 -0700 Subject: [PATCH 21/78] Adding new Event, ConnectionChooserRequired with an array of Connections that the dialog needs --- .../android/ui/publicize/PublicizeEvents.java | 85 +++++++++++++++++-- 1 file changed, 78 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 17067711f18a..9f53704df96a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -1,8 +1,12 @@ package org.wordpress.android.ui.publicize; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; +import java.net.URI; + /** * Publicize-related EventBus event classes */ @@ -31,20 +35,87 @@ public boolean didSucceed() { return mSucceeded; } } + + public static class ConnectionChooserRequired { + private JSONObject mJsonObject; + private Connection[] mConnections; + + public ConnectionChooserRequired(JSONObject jsonObject) { mJsonObject = jsonObject; - mAction = action; + try { + mConnections = convertJsonToConnections(); + } catch (JSONException e) { + mConnections = new Connection[0]; + e.printStackTrace(); + } } - public JSONObject getJsonObject() { - return mJsonObject; + public Connection[] getConnections() { + return mConnections; } - public ConnectAction getAction() { - return mAction; + private Connection[] convertJsonToConnections() throws JSONException { + JSONArray jsonArray = mJsonObject.getJSONArray("connections"); + Connection[] connectionArray = new Connection[jsonArray.length()]; + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject currentJsonConnection = jsonArray.getJSONObject(i); + URI profilePictureUrl = URI.create(currentJsonConnection.getString("external_profile_picture")); + String displayName = currentJsonConnection.getString("external_display"); + int keychainId = currentJsonConnection.getInt("ID"); + String connectionName = currentJsonConnection.getString("label"); + JSONArray jsonSitesArray = currentJsonConnection.getJSONArray("sites"); + int[] sitesArray = getSitesArrayFromJson(jsonSitesArray); + + Connection connection = new Connection(profilePictureUrl, displayName, keychainId, connectionName, sitesArray); + connectionArray[i] = connection; + } + + return connectionArray; } - public boolean didSucceed() { - return mSucceeded; + private int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { + int[] sitesArray = new int[jsonArray.length()]; + for (int i = 0; i < jsonArray.length(); i++) { + sitesArray[i] = jsonArray.getInt(i); + } + + return sitesArray; + } + } + + public static class Connection { + private URI mProfilePictureUrl; + private String mDisplayName; + private int mKeychainId; + private String mServiceName; + private int[] mSites; + + public Connection(URI profilePictureUrl, String displayName, int keychainId, String serviceName, int[] sites) { + mProfilePictureUrl = profilePictureUrl; + mDisplayName = displayName; + mKeychainId = keychainId; + mServiceName = serviceName; + mSites = sites; + } + + public URI getProfilePictureUrl() { + return mProfilePictureUrl; + } + + public String getDisplayName() { + return mDisplayName; + } + + public int getKeychainId() { + return mKeychainId; + } + + public String getServiceName() { + return mServiceName; + } + + public int[] getSites() { + return mSites; } } } From 0084d10df0434ab6a478c8b6f5ce056d1b16c277 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 12:53:44 -0700 Subject: [PATCH 22/78] All logic has been removed from this class for parsing out the json. Now it just shows the DialogFragment --- .../ui/publicize/PublicizeListActivity.java | 43 +------------------ 1 file changed, 2 insertions(+), 41 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index a7488b26cad2..81123e58e422 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -11,9 +11,6 @@ import android.support.v7.widget.Toolbar; import android.view.MenuItem; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.datasets.PublicizeTable; @@ -24,9 +21,6 @@ import org.wordpress.android.ui.publicize.services.PublicizeUpdateService; import org.wordpress.android.util.ToastUtils; -import java.util.LinkedList; -import java.util.List; - import de.greenrobot.event.EventBus; public class PublicizeListActivity extends AppCompatActivity @@ -274,40 +268,7 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { } } - private void showChooserDialog(JSONObject jsonObject) { - LinkedList lists = new LinkedList<>(); - try { - JSONArray array = jsonObject.getJSONArray("connections"); - for (int i = 0; i < array.length(); i++) { - JSONObject object = array.getJSONObject(i); - lists.add(object.getString("external_display")); - } - } catch (JSONException e) { - e.printStackTrace(); - } - - String[] array = lists.toArray(new String[lists.size()]); - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("Connecting " + "Facebook"); -// builder.setMessage("Select the account you wish to authorize. Note that your posts will be shared to the selected account automatically."); - builder.setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }); - builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - PublicizeActions.connectStepTwo(1, 1); - } - }); - builder.show(); + public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { + PublicizeEvents.Connection[] connections = event.getConnections(); } } From b38cdb0f08049efa919264d56ef4f54d73e229f8 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 22 Jun 2016 17:48:47 -0700 Subject: [PATCH 23/78] Adding title/message/listview of layout --- .../publicize_account_chooser_dialog.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 3509b84116ac..3a3e0bab2c27 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -1,6 +1,23 @@ + android:layout_height="match_parent" + android:weightSum="1"> + + + + + \ No newline at end of file From c17ea779163832aa5a29f32d65e33b98a0c44067 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:05:03 -0700 Subject: [PATCH 24/78] enabling data binding --- WordPress/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 10ff9e196903..892f1fa7ebe4 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -24,6 +24,10 @@ apply plugin: 'io.fabric' android { useLibrary 'org.apache.http.legacy' + dataBinding { + enabled = true + } + dexOptions { jumboMode = true javaMaxHeapSize = "4g" From 2df394ce798e13e60c98fdff9135148acbc85233 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:11:44 -0700 Subject: [PATCH 25/78] Using the new PublicizeEvent of ConnectionChooserRequired when there is more than one account --- .../org/wordpress/android/ui/publicize/PublicizeActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index 8a53099857d3..81ba01934e0f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -85,7 +85,7 @@ private static void connectStepOne(final int siteId, final String serviceId) { public void onResponse(JSONObject jsonObject) { if (hasMoreThanOneConnectedAccount(jsonObject)) { // show dialog showing multiple options - EventBus.getDefault().post(new ActionCompleted(jsonObject, ConnectAction.CHOOSE_ACCOUNT)); + EventBus.getDefault().post(new PublicizeEvents.ConnectionChooserRequired(jsonObject)); } else { int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); connectStepTwo(siteId, keyringConnectionId); From 19da55a909a1e0de4acb05ed917da968f37d7610 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:32:54 -0700 Subject: [PATCH 26/78] Retrieving list item binding from data binder --- ...PublicizeAccountChooserDialogFragment.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 669cd94634b5..2d50119e3f93 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -1,10 +1,20 @@ package org.wordpress.android.ui.publicize; import android.app.Dialog; +import android.content.DialogInterface; +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.ListViewCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ListView; + +import org.wordpress.android.R; +import org.wordpress.android.databinding.PublicizeConnectionListItemBinding; /** * Created by Will on 6/19/16. @@ -14,6 +24,26 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + LayoutInflater inflater = getActivity().getLayoutInflater(); + View view = inflater.inflate(R.layout.publicize_account_chooser_dialog, null); + builder.setView(view); + builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + PublicizeActions.connectStepTwo(1, 1); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.cancel(); + } + }); + + + ListView listView = (ListView) view.findViewById(R.id.listView); + PublicizeConnectionListItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.publicize_connection_list_item, listView, false); + return super.onCreateDialog(savedInstanceState); } From 45a7d8258be4bc7ea5f12b5362b87d909dc2aee4 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:33:17 -0700 Subject: [PATCH 27/78] Chaging member variables to not have the m prefix as data binding requires the getters to have the same name as the member variables --- .../android/ui/publicize/PublicizeEvents.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 9f53704df96a..256b96fd73a2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -84,38 +84,38 @@ private int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { } public static class Connection { - private URI mProfilePictureUrl; - private String mDisplayName; - private int mKeychainId; - private String mServiceName; - private int[] mSites; + private URI profilePictureUrl; + private String displayName; + private int keychainId; + private String serviceName; + private int[] sites; public Connection(URI profilePictureUrl, String displayName, int keychainId, String serviceName, int[] sites) { - mProfilePictureUrl = profilePictureUrl; - mDisplayName = displayName; - mKeychainId = keychainId; - mServiceName = serviceName; - mSites = sites; + this.profilePictureUrl = profilePictureUrl; + this.displayName = displayName; + this.keychainId = keychainId; + this.serviceName = serviceName; + this.sites = sites; } public URI getProfilePictureUrl() { - return mProfilePictureUrl; + return profilePictureUrl; } public String getDisplayName() { - return mDisplayName; + return displayName; } public int getKeychainId() { - return mKeychainId; + return keychainId; } public String getServiceName() { - return mServiceName; + return serviceName; } public int[] getSites() { - return mSites; + return sites; } } } From 2ea590eaf1501df17744e87c25b8e41972cb8b9d Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:33:36 -0700 Subject: [PATCH 28/78] Data-binding list item for publicize connections --- .../layout/publicize_connection_list_item.xml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 WordPress/src/main/res/layout/publicize_connection_list_item.xml diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml new file mode 100644 index 000000000000..5855334ae340 --- /dev/null +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + \ No newline at end of file From 444a417048711c7d29ce58560572a1b922d3b11f Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Thu, 23 Jun 2016 17:34:00 -0700 Subject: [PATCH 29/78] Adding connection variable for data binding --- .../publicize_account_chooser_dialog.xml | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 3a3e0bab2c27..79f55eeaf7e9 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -1,23 +1,30 @@ - + + + + - + android:layout_height="match_parent" + android:weightSum="1"> - + - - \ No newline at end of file + + + + + \ No newline at end of file From 04d0a9321529b7e2a63017a6c5d1068952e27769 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Fri, 24 Jun 2016 19:01:25 -0700 Subject: [PATCH 30/78] Adding connections member variable to DialogFragment --- .../publicize/PublicizeAccountChooserDialogFragment.java | 8 +++++--- .../android/ui/publicize/PublicizeListActivity.java | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 2d50119e3f93..5d2399f89aae 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -3,12 +3,10 @@ import android.app.Dialog; import android.content.DialogInterface; import android.databinding.DataBindingUtil; -import android.databinding.ViewDataBinding; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; -import android.support.v7.widget.ListViewCompat; import android.view.LayoutInflater; import android.view.View; import android.widget.ListView; @@ -20,6 +18,7 @@ * Created by Will on 6/19/16. */ public class PublicizeAccountChooserDialogFragment extends DialogFragment { + private PublicizeEvents.Connection[] mConnections; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -44,7 +43,10 @@ public void onClick(DialogInterface dialogInterface, int i) { ListView listView = (ListView) view.findViewById(R.id.listView); PublicizeConnectionListItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.publicize_connection_list_item, listView, false); - return super.onCreateDialog(savedInstanceState); } + + public void setConnections(PublicizeEvents.Connection[] connections) { + mConnections = connections; + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 81123e58e422..adeea92e8c2c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -270,5 +270,8 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { PublicizeEvents.Connection[] connections = event.getConnections(); + PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); + dialogFragment.setConnections(connections); + dialogFragment.show(getSupportFragmentManager(), "yup"); } } From 5b7bf400546763d5e66cc227d812dc1f3fb69a69 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Fri, 24 Jun 2016 19:59:08 -0700 Subject: [PATCH 31/78] Using ListAdapter that has list of Connections --- ...PublicizeAccountChooserDialogFragment.java | 15 ++++-- .../PublicizeAccountChooserListAdapter.java | 51 +++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 5d2399f89aae..f4907e188b77 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -3,6 +3,7 @@ import android.app.Dialog; import android.content.DialogInterface; import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; @@ -14,6 +15,9 @@ import org.wordpress.android.R; import org.wordpress.android.databinding.PublicizeConnectionListItemBinding; +import java.util.ArrayList; +import java.util.Arrays; + /** * Created by Will on 6/19/16. */ @@ -39,11 +43,16 @@ public void onClick(DialogInterface dialogInterface, int i) { } }); - ListView listView = (ListView) view.findViewById(R.id.listView); - PublicizeConnectionListItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.publicize_connection_list_item, listView, false); + ObservableArrayList connectionObservableArrayList = new ObservableArrayList<>(); + for (int i = 0; i < mConnections.length; i++) { + connectionObservableArrayList.add(mConnections[i]); + } + PublicizeAccountChooserListAdapter listAdapter = new PublicizeAccountChooserListAdapter(connectionObservableArrayList); + listView.setAdapter(listAdapter); - return super.onCreateDialog(savedInstanceState); + AlertDialog dialog = builder.create(); + return dialog; } public void setConnections(PublicizeEvents.Connection[] connections) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java new file mode 100644 index 000000000000..90bd64c86481 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -0,0 +1,51 @@ +package org.wordpress.android.ui.publicize; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import org.wordpress.android.R; +import org.wordpress.android.databinding.PublicizeConnectionListItemBinding; + +/** + * Created by Will on 6/24/16. + */ +public class PublicizeAccountChooserListAdapter extends BaseAdapter { + private ObservableArrayList list; + private LayoutInflater inflater; + + public PublicizeAccountChooserListAdapter(ObservableArrayList list) { + this.list = list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return list.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + if (inflater == null) { + inflater = (LayoutInflater) viewGroup.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + PublicizeConnectionListItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.publicize_connection_list_item, viewGroup, false); + binding.setConnection(list.get(i)); + + return binding.getRoot(); + } +} From 210ee14f1f7301ffe536489a11878889099fae02 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 12:49:21 -0700 Subject: [PATCH 32/78] Converting PublicizeAccountChooserListAdapter to extend from ArrayAdapter for simplicity --- ...PublicizeAccountChooserDialogFragment.java | 15 ++----- .../PublicizeAccountChooserListAdapter.java | 45 +++++++------------ 2 files changed, 18 insertions(+), 42 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index f4907e188b77..90efb7eece62 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -2,8 +2,6 @@ import android.app.Dialog; import android.content.DialogInterface; -import android.databinding.DataBindingUtil; -import android.databinding.ObservableArrayList; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; @@ -13,10 +11,6 @@ import android.widget.ListView; import org.wordpress.android.R; -import org.wordpress.android.databinding.PublicizeConnectionListItemBinding; - -import java.util.ArrayList; -import java.util.Arrays; /** * Created by Will on 6/19/16. @@ -44,12 +38,9 @@ public void onClick(DialogInterface dialogInterface, int i) { }); ListView listView = (ListView) view.findViewById(R.id.listView); - ObservableArrayList connectionObservableArrayList = new ObservableArrayList<>(); - for (int i = 0; i < mConnections.length; i++) { - connectionObservableArrayList.add(mConnections[i]); - } - PublicizeAccountChooserListAdapter listAdapter = new PublicizeAccountChooserListAdapter(connectionObservableArrayList); - listView.setAdapter(listAdapter); + PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, R.id.name, mConnections); + + listView.setAdapter(adapter); AlertDialog dialog = builder.create(); return dialog; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 90bd64c86481..4296de423fce 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -1,51 +1,36 @@ package org.wordpress.android.ui.publicize; import android.content.Context; -import android.databinding.DataBindingUtil; -import android.databinding.ObservableArrayList; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.BaseAdapter; +import android.widget.ArrayAdapter; +import android.widget.TextView; import org.wordpress.android.R; -import org.wordpress.android.databinding.PublicizeConnectionListItemBinding; +import org.wordpress.android.widgets.WPNetworkImageView; /** * Created by Will on 6/24/16. */ -public class PublicizeAccountChooserListAdapter extends BaseAdapter { - private ObservableArrayList list; - private LayoutInflater inflater; +public class PublicizeAccountChooserListAdapter extends ArrayAdapter { - public PublicizeAccountChooserListAdapter(ObservableArrayList list) { - this.list = list; - } - - @Override - public int getCount() { - return list.size(); - } - - @Override - public Object getItem(int i) { - return list.get(i); - } - - @Override - public long getItemId(int i) { - return i; + public PublicizeAccountChooserListAdapter(Context context, int resource, int resource2, PublicizeEvents.Connection[] objects) { + super(context, resource, resource2, objects); } @Override public View getView(int i, View view, ViewGroup viewGroup) { - if (inflater == null) { - inflater = (LayoutInflater) viewGroup.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } + LayoutInflater inflater = (LayoutInflater) getContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View rowView = inflater.inflate(R.layout.publicize_connection_list_item, viewGroup, false); + PublicizeEvents.Connection connection = (PublicizeEvents.Connection)getItem(i); + WPNetworkImageView imageView = (WPNetworkImageView) rowView.findViewById(R.id.profile_pic); + imageView.setImageUrl(connection.getProfilePictureUrl().toString(), WPNetworkImageView.ImageType.AVATAR); - PublicizeConnectionListItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.publicize_connection_list_item, viewGroup, false); - binding.setConnection(list.get(i)); + TextView name = (TextView) rowView.findViewById(R.id.name); + name.setText(connection.getDisplayName()); - return binding.getRoot(); + return rowView; } } From 2c327357b6488693b80eb153285c043edb40f1c6 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 12:49:46 -0700 Subject: [PATCH 33/78] Removing data binding --- WordPress/build.gradle | 4 ---- .../main/res/layout/publicize_account_chooser_dialog.xml | 5 ----- .../main/res/layout/publicize_connection_list_item.xml | 8 +++----- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 892f1fa7ebe4..e210637fe5dd 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -23,10 +23,6 @@ apply plugin: 'io.fabric' android { useLibrary 'org.apache.http.legacy' - - dataBinding { - enabled = true - } dexOptions { jumboMode = true diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 79f55eeaf7e9..96ba25c9c0a3 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -1,9 +1,5 @@ - - - - - - - + android:layout_height="100dp" + android:id="@+id/profile_pic"/> + android:id="@+id/name"/> \ No newline at end of file From effbe76b579b21241a445e15a5af1016055585a6 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 14:02:39 -0700 Subject: [PATCH 34/78] Changing type to image so that it isn't rounded --- .../ui/publicize/PublicizeAccountChooserListAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 4296de423fce..28a70bfb1a90 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -26,7 +26,7 @@ public View getView(int i, View view, ViewGroup viewGroup) { View rowView = inflater.inflate(R.layout.publicize_connection_list_item, viewGroup, false); PublicizeEvents.Connection connection = (PublicizeEvents.Connection)getItem(i); WPNetworkImageView imageView = (WPNetworkImageView) rowView.findViewById(R.id.profile_pic); - imageView.setImageUrl(connection.getProfilePictureUrl().toString(), WPNetworkImageView.ImageType.AVATAR); + imageView.setImageUrl(connection.getProfilePictureUrl().toString(), WPNetworkImageView.ImageType.PHOTO); TextView name = (TextView) rowView.findViewById(R.id.name); name.setText(connection.getDisplayName()); From 2f624733ca85a4508b16133a33d4b2331513c09b Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 14:11:54 -0700 Subject: [PATCH 35/78] Adding the sites that the connection is connected to --- .../wordpress/android/models/PublicizeConnection.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java index 3aee592d4294..60f51eca3ed8 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java +++ b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java @@ -39,6 +39,7 @@ public String toString() { private String mExternalName; private String mExternalDisplayName; private String mExternalProfilePictureUrl; + private int[] mSites; // `status` can be `ok` or `broken` -- `broken` means the connection needs to be re-established via the `refresh_URL` private String mStatus; @@ -136,6 +137,14 @@ public boolean isSameAs(PublicizeConnection other) { && other.getService().equals(this.getService()); } + public void setSites(int[] sites) { + mSites = sites; + } + + public int[] getSites() { + return mSites; + } + /* * passed JSON is a single connection from the response to sites/%d/publicize-connections {"ID":12783250, From f23c4cb61113b29750b1e40039ca7c3fe6ade933 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 14:26:00 -0700 Subject: [PATCH 36/78] Adding sites from JSON object --- .../android/models/PublicizeConnection.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java index 60f51eca3ed8..46067c118235 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java +++ b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java @@ -3,6 +3,8 @@ import android.support.annotation.NonNull; import android.text.TextUtils; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.util.JSONUtils; import org.wordpress.android.util.StringUtils; @@ -194,6 +196,23 @@ public static PublicizeConnection fromJson(JSONObject json) { connection.mStatus = json.optString("status"); connection.mRefreshUrl = json.optString("refresh_URL"); + try { + JSONArray jsonSitesArray = json.getJSONArray("sites"); + connection.mSites = getSitesArrayFromJson(jsonSitesArray); + } catch (JSONException e) { + connection.mSites = new int[0]; + e.printStackTrace(); + } + return connection; } + + private static int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { + int[] sitesArray = new int[jsonArray.length()]; + for (int i = 0; i < jsonArray.length(); i++) { + sitesArray[i] = jsonArray.getInt(i); + } + + return sitesArray; + } } From 33a04df08e04b56178fb30ee8d61df77bf2a9597 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 14:32:13 -0700 Subject: [PATCH 37/78] Deleting Connection model and using PublicizeConnection --- ...PublicizeAccountChooserDialogFragment.java | 8 ++- .../PublicizeAccountChooserListAdapter.java | 8 +-- .../android/ui/publicize/PublicizeEvents.java | 66 +++---------------- .../ui/publicize/PublicizeListActivity.java | 26 ++++---- 4 files changed, 32 insertions(+), 76 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 90efb7eece62..6d61b9b6af67 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -11,12 +11,14 @@ import android.widget.ListView; import org.wordpress.android.R; +import org.wordpress.android.models.PublicizeConnection; /** * Created by Will on 6/19/16. */ public class PublicizeAccountChooserDialogFragment extends DialogFragment { - private PublicizeEvents.Connection[] mConnections; + private PublicizeConnection[] mPublicizeConnections; + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -46,7 +48,7 @@ public void onClick(DialogInterface dialogInterface, int i) { return dialog; } - public void setConnections(PublicizeEvents.Connection[] connections) { - mConnections = connections; + public void setConnections(PublicizeConnection[] publicizeConnections) { + mPublicizeConnections = publicizeConnections; } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 28a70bfb1a90..40093c87917e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -15,8 +15,8 @@ */ public class PublicizeAccountChooserListAdapter extends ArrayAdapter { - public PublicizeAccountChooserListAdapter(Context context, int resource, int resource2, PublicizeEvents.Connection[] objects) { super(context, resource, resource2, objects); + public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects, boolean isConnected) { } @Override @@ -24,12 +24,12 @@ public View getView(int i, View view, ViewGroup viewGroup) { LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.publicize_connection_list_item, viewGroup, false); - PublicizeEvents.Connection connection = (PublicizeEvents.Connection)getItem(i); + PublicizeConnection publicizeConnection = (PublicizeConnection)getItem(i); WPNetworkImageView imageView = (WPNetworkImageView) rowView.findViewById(R.id.profile_pic); - imageView.setImageUrl(connection.getProfilePictureUrl().toString(), WPNetworkImageView.ImageType.PHOTO); + imageView.setImageUrl(publicizeConnection.getExternalProfilePictureUrl().toString(), WPNetworkImageView.ImageType.PHOTO); TextView name = (TextView) rowView.findViewById(R.id.name); - name.setText(connection.getDisplayName()); + name.setText(publicizeConnection.getExternalDisplayName()); return rowView; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 256b96fd73a2..1830ee656e30 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -3,10 +3,9 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; -import java.net.URI; - /** * Publicize-related EventBus event classes */ @@ -38,39 +37,30 @@ public boolean didSucceed() { public static class ConnectionChooserRequired { private JSONObject mJsonObject; - private Connection[] mConnections; + private PublicizeConnection[] mPublicizeConnections; public ConnectionChooserRequired(JSONObject jsonObject) { mJsonObject = jsonObject; try { - mConnections = convertJsonToConnections(); + mPublicizeConnections = convertJsonToConnections(); } catch (JSONException e) { - mConnections = new Connection[0]; + mPublicizeConnections = new PublicizeConnection[0]; e.printStackTrace(); } } - public Connection[] getConnections() { - return mConnections; + public PublicizeConnection[] getConnections() { + return mPublicizeConnections; } - private Connection[] convertJsonToConnections() throws JSONException { + private PublicizeConnection[] convertJsonToConnections() throws JSONException { JSONArray jsonArray = mJsonObject.getJSONArray("connections"); - Connection[] connectionArray = new Connection[jsonArray.length()]; + PublicizeConnection[] publicizeConnectionArray = new PublicizeConnection[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { - JSONObject currentJsonConnection = jsonArray.getJSONObject(i); - URI profilePictureUrl = URI.create(currentJsonConnection.getString("external_profile_picture")); - String displayName = currentJsonConnection.getString("external_display"); - int keychainId = currentJsonConnection.getInt("ID"); - String connectionName = currentJsonConnection.getString("label"); - JSONArray jsonSitesArray = currentJsonConnection.getJSONArray("sites"); - int[] sitesArray = getSitesArrayFromJson(jsonSitesArray); - - Connection connection = new Connection(profilePictureUrl, displayName, keychainId, connectionName, sitesArray); - connectionArray[i] = connection; + publicizeConnectionArray[i] = PublicizeConnection.fromJson(jsonArray.getJSONObject(i)); } - return connectionArray; + return publicizeConnectionArray; } private int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { @@ -82,40 +72,4 @@ private int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { return sitesArray; } } - - public static class Connection { - private URI profilePictureUrl; - private String displayName; - private int keychainId; - private String serviceName; - private int[] sites; - - public Connection(URI profilePictureUrl, String displayName, int keychainId, String serviceName, int[] sites) { - this.profilePictureUrl = profilePictureUrl; - this.displayName = displayName; - this.keychainId = keychainId; - this.serviceName = serviceName; - this.sites = sites; - } - - public URI getProfilePictureUrl() { - return profilePictureUrl; - } - - public String getDisplayName() { - return displayName; - } - - public int getKeychainId() { - return keychainId; - } - - public String getServiceName() { - return serviceName; - } - - public int[] getSites() { - return sites; - } - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index adeea92e8c2c..722e7e96ed43 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -142,11 +142,11 @@ private void reloadDetailFragment() { private void showWebViewFragment(int siteId, PublicizeService service, - PublicizeConnection connection) { + PublicizeConnection publicizeConnection) { if (isFinishing()) return; String tag = getString(R.string.fragment_tag_publicize_webview); - Fragment webViewFragment = PublicizeWebViewFragment.newInstance(siteId, service, connection); + Fragment webViewFragment = PublicizeWebViewFragment.newInstance(siteId, service, publicizeConnection); getFragmentManager() .beginTransaction() .replace(R.id.fragment_container, webViewFragment, tag) @@ -212,31 +212,31 @@ public void onRequestConnect(PublicizeService service) { } /* - * user requested to reconnect a broken connection from the detail fragment + * user requested to reconnect a broken publicizeConnection from the detail fragment */ @Override - public void onRequestReconnect(PublicizeService service, PublicizeConnection connection) { - showWebViewFragment(mSiteId, service, connection); + public void onRequestReconnect(PublicizeService service, PublicizeConnection publicizeConnection) { + showWebViewFragment(mSiteId, service, publicizeConnection); } /* - * user requested to disconnect a service connection from the detail fragment + * user requested to disconnect a service publicizeConnection from the detail fragment */ @Override - public void onRequestDisconnect(PublicizeConnection connection) { - confirmDisconnect(connection); + public void onRequestDisconnect(PublicizeConnection publicizeConnection) { + confirmDisconnect(publicizeConnection); } - private void confirmDisconnect(final PublicizeConnection connection) { + private void confirmDisconnect(final PublicizeConnection publicizeConnection) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage( - String.format(getString(R.string.dlg_confirm_publicize_disconnect), connection.getLabel())); + String.format(getString(R.string.dlg_confirm_publicize_disconnect), publicizeConnection.getLabel())); builder.setTitle(R.string.share_btn_disconnect); builder.setCancelable(true); builder.setPositiveButton(R.string.share_btn_disconnect, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { - PublicizeActions.disconnect(connection); + PublicizeActions.disconnect(publicizeConnection); reloadDetailFragment(); } }); @@ -269,9 +269,9 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { } public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { - PublicizeEvents.Connection[] connections = event.getConnections(); + PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); - dialogFragment.setConnections(connections); + dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), "yup"); } } From 1e1e7f88387eb9ba688823e5d4c096f7ec66b7f8 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sat, 25 Jun 2016 14:41:59 -0700 Subject: [PATCH 38/78] Adding connected/not_connected boolean parameter for whether or not to show the radio button selector --- .../PublicizeAccountChooserDialogFragment.java | 6 ++++-- .../PublicizeAccountChooserListAdapter.java | 15 ++++++++++++++- .../layout/publicize_account_chooser_dialog.xml | 12 +++++++++++- .../res/layout/publicize_connection_list_item.xml | 1 + 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 6d61b9b6af67..6faa3c5ece12 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -39,8 +39,10 @@ public void onClick(DialogInterface dialogInterface, int i) { } }); - ListView listView = (ListView) view.findViewById(R.id.listView); - PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, R.id.name, mConnections); + ListView listView = (ListView) view.findViewById(R.id.listView_not_connected); + PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mPublicizeConnections, false); + + ListView listViewConnected = (ListView) view.findViewById(R.id.listview_connected); listView.setAdapter(adapter); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 40093c87917e..4e486e461831 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -5,18 +5,26 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.RadioButton; import android.widget.TextView; import org.wordpress.android.R; +import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.widgets.WPNetworkImageView; /** * Created by Will on 6/24/16. */ public class PublicizeAccountChooserListAdapter extends ArrayAdapter { + private boolean mAreAccountsConnected; - super(context, resource, resource2, objects); public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects, boolean isConnected) { + super(context, resource, objects); + mAreAccountsConnected = isConnected; + } + + public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects) { + this(context, resource, objects, true); } @Override @@ -31,6 +39,11 @@ public View getView(int i, View view, ViewGroup viewGroup) { TextView name = (TextView) rowView.findViewById(R.id.name); name.setText(publicizeConnection.getExternalDisplayName()); + if (mAreAccountsConnected) { + RadioButton radioButton = (RadioButton) rowView.findViewById(R.id.radio_button); + radioButton.setVisibility(View.INVISIBLE); + } + return rowView; } } diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 96ba25c9c0a3..1bd87e2a907b 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -20,6 +20,16 @@ + android:id="@+id/listView_not_connected" /> + + + + \ No newline at end of file diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index db4f75ec3a98..a5ffc9982c50 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -6,6 +6,7 @@ android:layout_height="wrap_content"> From 7622a089fb8568fd29c822cb54d39fa9f456e38a Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 10:56:30 -0700 Subject: [PATCH 39/78] Removing item since we removed data binding --- .../publicize_account_chooser_dialog.xml | 55 +++++++++---------- .../layout/publicize_connection_list_item.xml | 38 ++++++------- 2 files changed, 44 insertions(+), 49 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 1bd87e2a907b..b9b29e0e1761 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -1,35 +1,32 @@ - - + - + - + - + - + - - - \ No newline at end of file + + diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index a5ffc9982c50..046c6d4b791d 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -1,24 +1,22 @@ - - - - + - + - + - - \ No newline at end of file + + + From 3173a5259f0726ea357359de6406ac8fd371c57d Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 12:37:42 -0700 Subject: [PATCH 40/78] Splitting listview into two that show connected and not connected yet sites --- ...PublicizeAccountChooserDialogFragment.java | 60 ++++++++++++++++++- .../PublicizeAccountChooserListAdapter.java | 2 +- .../ui/publicize/PublicizeListActivity.java | 4 ++ 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 6faa3c5ece12..fc9a51f9fa67 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -10,18 +10,30 @@ import android.view.View; import android.widget.ListView; +import org.apache.commons.lang.ArrayUtils; import org.wordpress.android.R; import org.wordpress.android.models.PublicizeConnection; +import org.wordpress.android.models.PublicizeConnectionList; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.stream.IntStream; /** * Created by Will on 6/19/16. */ public class PublicizeAccountChooserDialogFragment extends DialogFragment { private PublicizeConnection[] mPublicizeConnections; + private PublicizeConnection[] mNotConnectedAccounts; + private PublicizeConnection[] mConnectedAccounts; + private int mCurrentSite; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { + retrieveCurrentSite(); + addConnectionsToLists(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.publicize_account_chooser_dialog, null); @@ -40,11 +52,13 @@ public void onClick(DialogInterface dialogInterface, int i) { }); ListView listView = (ListView) view.findViewById(R.id.listView_not_connected); - PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mPublicizeConnections, false); + PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mNotConnectedAccounts, false); ListView listViewConnected = (ListView) view.findViewById(R.id.listview_connected); + PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mConnectedAccounts, true); listView.setAdapter(adapter); + listViewConnected.setAdapter(connectedAdapter); AlertDialog dialog = builder.create(); return dialog; @@ -53,4 +67,48 @@ public void onClick(DialogInterface dialogInterface, int i) { public void setConnections(PublicizeConnection[] publicizeConnections) { mPublicizeConnections = publicizeConnections; } + + private void addConnectionsToLists() { + ArrayList unconnected = new ArrayList<>(); + ArrayList connected = new ArrayList<>(); + for (int i = 0; i < mPublicizeConnections.length; i++) { + PublicizeConnection connection = mPublicizeConnections[i]; + if (containsCurrentSite(connection.getSites())) { + connected.add(connection); + } else { + unconnected.add(connection); + } + } + + mNotConnectedAccounts = new PublicizeConnection[unconnected.size()]; + mConnectedAccounts = new PublicizeConnection[connected.size()]; + + for (int i = 0; i < unconnected.size(); i++) { + mNotConnectedAccounts[i] = unconnected.get(i); + } + + for (int i = 0; i < connected.size(); i++) { + mConnectedAccounts[i] = connected.get(i); + } + + } + + private boolean containsCurrentSite(int[] array) { + for (int i = 0; i < array.length; i++) { + if (array[i] == mCurrentSite) { + return true; + } + } + + return false; + } + + private void retrieveCurrentSite() { + Bundle args = getArguments(); + if (args != null) { + mCurrentSite = args.getInt("site_id"); + } else { + mCurrentSite = 0; + } + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 4e486e461831..8d67cb0f96e6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -24,7 +24,7 @@ public PublicizeAccountChooserListAdapter(Context context, int resource, Publici } public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects) { - this(context, resource, objects, true); + this(context, resource, objects, false); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 722e7e96ed43..a3a055fe24cc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -17,6 +17,7 @@ import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.models.PublicizeService; import org.wordpress.android.ui.ActivityLauncher; +import org.wordpress.android.ui.prefs.WPPreference; import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter; import org.wordpress.android.ui.publicize.services.PublicizeUpdateService; import org.wordpress.android.util.ToastUtils; @@ -271,6 +272,9 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); + Bundle args = new Bundle(); + args.putInt("site_id", WordPress.wpDB.getRemoteBlogIdForLocalTableBlogId(WordPress.wpDB.getLastBlogId())); + dialogFragment.setArguments(args); dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), "yup"); } From cd08570834a5cad36b1de947609e7639b87a9c22 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 12:39:06 -0700 Subject: [PATCH 41/78] Removing unnecessary line in gradle --- WordPress/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index e210637fe5dd..5702a68410bc 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -2,7 +2,6 @@ buildscript { repositories { jcenter() maven { url 'https://maven.fabric.io/public' } - } dependencies { classpath 'com.android.tools.build:gradle:2.1.2' From 1e1dd894528cf7fdbfcf6d16a4aa58d64e4ad197 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 13:21:30 -0700 Subject: [PATCH 42/78] Converting connected/not connected accounts to arraylists --- ...PublicizeAccountChooserDialogFragment.java | 31 +++++-------------- .../PublicizeAccountChooserListAdapter.java | 8 ++--- .../ui/publicize/PublicizeListActivity.java | 1 - 3 files changed, 11 insertions(+), 29 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index fc9a51f9fa67..06eb4f986eed 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -8,25 +8,21 @@ import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; +import android.widget.ArrayAdapter; import android.widget.ListView; -import org.apache.commons.lang.ArrayUtils; import org.wordpress.android.R; import org.wordpress.android.models.PublicizeConnection; -import org.wordpress.android.models.PublicizeConnectionList; -import java.lang.reflect.Array; import java.util.ArrayList; -import java.util.Arrays; -import java.util.stream.IntStream; /** * Created by Will on 6/19/16. */ public class PublicizeAccountChooserDialogFragment extends DialogFragment { private PublicizeConnection[] mPublicizeConnections; - private PublicizeConnection[] mNotConnectedAccounts; - private PublicizeConnection[] mConnectedAccounts; + private ArrayList mNotConnectedAccounts; + private ArrayList mConnectedAccounts; private int mCurrentSite; @NonNull @@ -52,6 +48,7 @@ public void onClick(DialogInterface dialogInterface, int i) { }); ListView listView = (ListView) view.findViewById(R.id.listView_not_connected); + ArrayAdapter PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mNotConnectedAccounts, false); ListView listViewConnected = (ListView) view.findViewById(R.id.listview_connected); @@ -69,28 +66,16 @@ public void setConnections(PublicizeConnection[] publicizeConnections) { } private void addConnectionsToLists() { - ArrayList unconnected = new ArrayList<>(); - ArrayList connected = new ArrayList<>(); + mNotConnectedAccounts = new ArrayList<>(); + mConnectedAccounts = new ArrayList<>(); for (int i = 0; i < mPublicizeConnections.length; i++) { PublicizeConnection connection = mPublicizeConnections[i]; if (containsCurrentSite(connection.getSites())) { - connected.add(connection); + mConnectedAccounts.add(connection); } else { - unconnected.add(connection); + mNotConnectedAccounts.add(connection); } } - - mNotConnectedAccounts = new PublicizeConnection[unconnected.size()]; - mConnectedAccounts = new PublicizeConnection[connected.size()]; - - for (int i = 0; i < unconnected.size(); i++) { - mNotConnectedAccounts[i] = unconnected.get(i); - } - - for (int i = 0; i < connected.size(); i++) { - mConnectedAccounts[i] = connected.get(i); - } - } private boolean containsCurrentSite(int[] array) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 8d67cb0f96e6..70982570f24e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -12,21 +12,19 @@ import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.widgets.WPNetworkImageView; +import java.util.ArrayList; + /** * Created by Will on 6/24/16. */ public class PublicizeAccountChooserListAdapter extends ArrayAdapter { private boolean mAreAccountsConnected; - public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects, boolean isConnected) { + public PublicizeAccountChooserListAdapter(Context context, int resource, ArrayList objects, boolean isConnected) { super(context, resource, objects); mAreAccountsConnected = isConnected; } - public PublicizeAccountChooserListAdapter(Context context, int resource, PublicizeConnection[] objects) { - this(context, resource, objects, false); - } - @Override public View getView(int i, View view, ViewGroup viewGroup) { LayoutInflater inflater = (LayoutInflater) getContext() diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index a3a055fe24cc..c2ac2c271828 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -17,7 +17,6 @@ import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.models.PublicizeService; import org.wordpress.android.ui.ActivityLauncher; -import org.wordpress.android.ui.prefs.WPPreference; import org.wordpress.android.ui.publicize.adapters.PublicizeServiceAdapter; import org.wordpress.android.ui.publicize.services.PublicizeUpdateService; import org.wordpress.android.util.ToastUtils; From b0e4fb51149803e6d6a0a9547951bebdad2b2134 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 13:29:09 -0700 Subject: [PATCH 43/78] Removing errant ArrayAdapter --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 06eb4f986eed..355717d08028 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -48,7 +48,6 @@ public void onClick(DialogInterface dialogInterface, int i) { }); ListView listView = (ListView) view.findViewById(R.id.listView_not_connected); - ArrayAdapter PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mNotConnectedAccounts, false); ListView listViewConnected = (ListView) view.findViewById(R.id.listview_connected); From 3c9bc210baa2b953aa1aec07ff8f225af48df0c9 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 15:49:05 -0700 Subject: [PATCH 44/78] Close web fragment before showing chooser --- .../wordpress/android/ui/publicize/PublicizeListActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index c2ac2c271828..76a0a7371251 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -269,6 +269,10 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { } public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { + if (isFinishing()) return; + + closeWebViewFragment(); + PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); Bundle args = new Bundle(); From 593a98b971a158a9a9d7546fde64318b5c2abe5e Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 16:11:57 -0700 Subject: [PATCH 45/78] Shortcut that allows me not to sign in every time --- .../ui/publicize/PublicizeDetailFragment.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java index df0859c005f6..ed965c9447d7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java @@ -7,6 +7,8 @@ import android.view.ViewGroup; import android.widget.TextView; +import org.json.JSONException; +import org.json.JSONObject; import org.wordpress.android.R; import org.wordpress.android.datasets.PublicizeTable; import org.wordpress.android.models.PublicizeService; @@ -18,6 +20,8 @@ import org.wordpress.android.widgets.RecyclerItemDecoration; import org.wordpress.android.widgets.WPNetworkImageView; +import de.greenrobot.event.EventBus; + public class PublicizeDetailFragment extends PublicizeBaseFragment implements PublicizeConnectionAdapter.OnAdapterLoadedListener { private int mSiteId; @@ -144,7 +148,14 @@ public void onAdapterLoaded(boolean isEmpty) { mConnectBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - getOnPublicizeActionListener().onRequestConnect(mService); + try { + JSONObject object = new JSONObject("{\"connections\":[{\"ID\":14460414,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-15 23:27:10\",\"expires\":\"2016-07-14 16:47:41\",\"external_ID\":\"122653424811017\",\"external_name\":null,\"external_display\":\"Jason Lee\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c47.0.160.160\\/p160x160\\/10354686_10150004552801856_220367501106153455_n.jpg?oh=b5df82644cdd221e1da17017092c51f5&oe=57E04C49\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[\"90298630\"],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14460414\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14460414\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14460414\"}}},{\"ID\":14477513,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-17 19:21:32\",\"expires\":\"2016-08-25 17:15:17\",\"external_ID\":\"123585121381948\",\"external_name\":null,\"external_display\":\"Joseph Park\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c47.0.160.160\\/p160x160\\/1379841_10150004552801901_469209496895221757_n.jpg?oh=b2b810118540c28b9a9766b47aed25e8&oe=57F1ED56\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14477513\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14477513\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14477513\"}}},{\"ID\":14359331,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-03 21:43:25\",\"expires\":\"0000-00-00 00:00:00\",\"external_ID\":\"760048377\",\"external_name\":null,\"external_display\":\"Will Kwon\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c0.11.160.160\\/p160x160\\/12140837_10154338963603378_3978128539399730629_n.jpg?oh=f9fc9fbc4d7b7db211e9eb36b3b073b1&oe=57FC0952\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[\"106611662\"],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14359331\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14359331\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14359331\"}}}]}"); + EventBus.getDefault().post(new PublicizeEvents.ConnectionChooserRequired(object)); + } catch (JSONException e) { + e.printStackTrace(); + } + +// getOnPublicizeActionListener().onRequestConnect(mService); } }); } From 8451485543ebf6788bf8579575452035b4ed1112 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Sun, 26 Jun 2016 16:42:06 -0700 Subject: [PATCH 46/78] Having the RadioButton pass the click to the LinearLayout --- .../src/main/res/layout/publicize_connection_list_item.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index 046c6d4b791d..09d232043c84 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -2,12 +2,14 @@ + android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground"> + android:layout_height="match_parent" + android:clickable="false"/> Date: Mon, 27 Jun 2016 18:08:57 -0700 Subject: [PATCH 47/78] Adding CheckableLinearLayout that implements Checkable --- .../widgets/CheckableLinearLayout.java | 39 +++++++++++++++++++ .../layout/publicize_connection_list_item.xml | 4 +- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java diff --git a/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java b/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java new file mode 100644 index 000000000000..028d8edd9239 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java @@ -0,0 +1,39 @@ +package org.wordpress.android.widgets; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.Checkable; +import android.widget.LinearLayout; +import android.widget.RadioButton; + +import org.wordpress.android.R; + +/** + * Created by Will on 6/26/16. + */ +public class CheckableLinearLayout extends LinearLayout implements Checkable { + private Boolean mIsChecked; + + public CheckableLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void setChecked(boolean b) { + RadioButton radioButton = (RadioButton) findViewById(R.id.radio_button); + if (radioButton != null) { + radioButton.setChecked(b); + } + mIsChecked = b; + } + + @Override + public boolean isChecked() { + return mIsChecked; + } + + @Override + public void toggle() { + setChecked(!mIsChecked); + } +} diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index 09d232043c84..63a12248eaf3 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -1,5 +1,5 @@ - - + From 0be8d1c7cd9be0a4780654505978a72c68e4c34b Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 12:24:40 -0700 Subject: [PATCH 48/78] Converting to RecyclerViewAdapter --- .../PublicizeAccountChooserListAdapter.java | 82 +++++++++++++------ 1 file changed, 58 insertions(+), 24 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 70982570f24e..11c05d4b2889 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -1,10 +1,9 @@ package org.wordpress.android.ui.publicize; -import android.content.Context; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.RadioButton; import android.widget.TextView; @@ -12,36 +11,71 @@ import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.widgets.WPNetworkImageView; -import java.util.ArrayList; +import java.util.List; -/** - * Created by Will on 6/24/16. - */ -public class PublicizeAccountChooserListAdapter extends ArrayAdapter { +public class PublicizeAccountChooserListAdapter extends RecyclerView.Adapter { + private List mConnectionItems; + private OnPublicizeAccountChooserListener mListener; private boolean mAreAccountsConnected; + private int mSelectedPosition; - public PublicizeAccountChooserListAdapter(Context context, int resource, ArrayList objects, boolean isConnected) { - super(context, resource, objects); + public PublicizeAccountChooserListAdapter(List connectionItems, OnPublicizeAccountChooserListener listener, boolean isConnected) { + mConnectionItems = connectionItems; + mListener = listener; mAreAccountsConnected = isConnected; + mSelectedPosition = 0; } @Override - public View getView(int i, View view, ViewGroup viewGroup) { - LayoutInflater inflater = (LayoutInflater) getContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View rowView = inflater.inflate(R.layout.publicize_connection_list_item, viewGroup, false); - PublicizeConnection publicizeConnection = (PublicizeConnection)getItem(i); - WPNetworkImageView imageView = (WPNetworkImageView) rowView.findViewById(R.id.profile_pic); - imageView.setImageUrl(publicizeConnection.getExternalProfilePictureUrl().toString(), WPNetworkImageView.ImageType.PHOTO); - - TextView name = (TextView) rowView.findViewById(R.id.name); - name.setText(publicizeConnection.getExternalDisplayName()); - - if (mAreAccountsConnected) { - RadioButton radioButton = (RadioButton) rowView.findViewById(R.id.radio_button); - radioButton.setVisibility(View.INVISIBLE); + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.publicize_connection_list_item, parent, false); + + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + final PublicizeConnection connection = mConnectionItems.get(position); + holder.mProfileImageView.setImageUrl(connection.getExternalProfilePictureUrl(), WPNetworkImageView.ImageType.PHOTO); + holder.mNameTextView.setText(connection.getExternalName()); + holder.mRadioButton.setChecked(position == mSelectedPosition); + + if (!mAreAccountsConnected) { + holder.mView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mListener != null) { + mSelectedPosition = holder.getAdapterPosition(); + mListener.onAccountSelected(connection.keyringConnectionId); + } + } + }); + } else { + holder.mRadioButton.setVisibility(View.INVISIBLE); } + } + + @Override + public int getItemCount() { + return mConnectionItems.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + public final View mView; + public final RadioButton mRadioButton; + public final WPNetworkImageView mProfileImageView; + public final TextView mNameTextView; + + public ViewHolder(View view) { + super(view); + mView = view; + mRadioButton = (RadioButton) view.findViewById(R.id.radio_button); + mProfileImageView = (WPNetworkImageView) view.findViewById(R.id.profile_pic); + mNameTextView = (TextView) view.findViewById(R.id.name); + } + } - return rowView; + public interface OnPublicizeAccountChooserListener { + void onAccountSelected(int keyringConnectionId); } } From 22bd7b038d6d764fcd8cdc82d51939f3fcd9ac44 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 12:24:50 -0700 Subject: [PATCH 49/78] Putting ids on top --- .../main/res/layout/publicize_connection_list_item.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index 63a12248eaf3..cbc4ec4c987a 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -9,16 +9,16 @@ android:id="@+id/radio_button" android:layout_width="wrap_content" android:layout_height="match_parent" - android:clickable="false"/> + android:clickable="false" /> + android:layout_height="100dp" /> + android:layout_height="wrap_content" /> From a4e9e4ca7c85000ae01fa9a7e32ff5abd594e876 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 12:25:41 -0700 Subject: [PATCH 50/78] Removing checkablelinearlayout --- .../widgets/CheckableLinearLayout.java | 39 ------------------- .../layout/publicize_connection_list_item.xml | 4 +- 2 files changed, 2 insertions(+), 41 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java diff --git a/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java b/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java deleted file mode 100644 index 028d8edd9239..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/widgets/CheckableLinearLayout.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.wordpress.android.widgets; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.Checkable; -import android.widget.LinearLayout; -import android.widget.RadioButton; - -import org.wordpress.android.R; - -/** - * Created by Will on 6/26/16. - */ -public class CheckableLinearLayout extends LinearLayout implements Checkable { - private Boolean mIsChecked; - - public CheckableLinearLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void setChecked(boolean b) { - RadioButton radioButton = (RadioButton) findViewById(R.id.radio_button); - if (radioButton != null) { - radioButton.setChecked(b); - } - mIsChecked = b; - } - - @Override - public boolean isChecked() { - return mIsChecked; - } - - @Override - public void toggle() { - setChecked(!mIsChecked); - } -} diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index cbc4ec4c987a..4814e40837b7 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -1,5 +1,5 @@ - - + From 601ae7b5c073b6cf396163bdca4009d19b5b8428 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 13:12:45 -0700 Subject: [PATCH 51/78] Using the new RecyclerViews --- ...PublicizeAccountChooserDialogFragment.java | 40 ++++++++++--------- .../publicize_account_chooser_dialog.xml | 8 ++-- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 355717d08028..33be9e267385 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -6,24 +6,23 @@ import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; -import android.widget.ArrayAdapter; -import android.widget.ListView; import org.wordpress.android.R; import org.wordpress.android.models.PublicizeConnection; import java.util.ArrayList; -/** - * Created by Will on 6/19/16. - */ -public class PublicizeAccountChooserDialogFragment extends DialogFragment { +public class PublicizeAccountChooserDialogFragment extends DialogFragment implements PublicizeAccountChooserListAdapter.OnPublicizeAccountChooserListener { + private RecyclerView mNotConnectedRecyclerView; private PublicizeConnection[] mPublicizeConnections; private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; - private int mCurrentSite; + private int mSelectedKeychainConnectionId = 0; + private int mCurrentSite = 0; @NonNull @Override @@ -37,7 +36,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - PublicizeActions.connectStepTwo(1, 1); + PublicizeActions.connectStepTwo(mCurrentSite, mSelectedKeychainConnectionId); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @@ -47,17 +46,18 @@ public void onClick(DialogInterface dialogInterface, int i) { } }); - ListView listView = (ListView) view.findViewById(R.id.listView_not_connected); - PublicizeAccountChooserListAdapter adapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mNotConnectedAccounts, false); + mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); + mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + PublicizeAccountChooserListAdapter notConnectedAdapter = new PublicizeAccountChooserListAdapter(mNotConnectedAccounts, this, false); + notConnectedAdapter.setHasStableIds(true); + mNotConnectedRecyclerView.setAdapter(notConnectedAdapter); - ListView listViewConnected = (ListView) view.findViewById(R.id.listview_connected); - PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(getActivity(), R.layout.publicize_connection_list_item, mConnectedAccounts, true); - - listView.setAdapter(adapter); + RecyclerView listViewConnected = (RecyclerView) view.findViewById(R.id.connected_recyclerview); + listViewConnected.setLayoutManager(new LinearLayoutManager(getContext())); + PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(mConnectedAccounts, null, true); listViewConnected.setAdapter(connectedAdapter); - AlertDialog dialog = builder.create(); - return dialog; + return builder.create(); } public void setConnections(PublicizeConnection[] publicizeConnections) { @@ -91,8 +91,12 @@ private void retrieveCurrentSite() { Bundle args = getArguments(); if (args != null) { mCurrentSite = args.getInt("site_id"); - } else { - mCurrentSite = 0; } } + + @Override + public void onAccountSelected(int keyringConnectionId) { + mNotConnectedRecyclerView.getAdapter().notifyDataSetChanged(); + mSelectedKeychainConnectionId = keyringConnectionId; + } } diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index b9b29e0e1761..a6d19940e33b 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -15,18 +15,18 @@ android:text="New Text" android:id="@+id/message" /> - + android:id="@+id/not_connected_recyclerview" /> - + android:id="@+id/connected_recyclerview" /> From acff3b9bd6ace2203e88e08ad6073f37e58ed15d Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:02:28 -0700 Subject: [PATCH 52/78] Adding message about social network --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 1 + WordPress/src/main/res/values/strings.xml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 33be9e267385..f1f09725d695 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -45,6 +45,7 @@ public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); } }); + builder.setMessage(getString(R.string.connection_chooser_message)); mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index f1bfc872364f..612871cabb43 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1363,6 +1363,8 @@ Reconnect Connect another account Disconnect from %s? + Connecting %s + Select the account you wish to authorize. Note that your posts will be shared to the selected account automatically. Current Theme From 6286f75fd938c111f91ee1dd98815d3765970d72 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:28:26 -0700 Subject: [PATCH 53/78] Using external display name instead of just name --- .../ui/publicize/PublicizeAccountChooserListAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 11c05d4b2889..3611e28a5283 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -37,7 +37,7 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { public void onBindViewHolder(final ViewHolder holder, int position) { final PublicizeConnection connection = mConnectionItems.get(position); holder.mProfileImageView.setImageUrl(connection.getExternalProfilePictureUrl(), WPNetworkImageView.ImageType.PHOTO); - holder.mNameTextView.setText(connection.getExternalName()); + holder.mNameTextView.setText(connection.getExternalDisplayName()); holder.mRadioButton.setChecked(position == mSelectedPosition); if (!mAreAccountsConnected) { From a7d0890afde7f52697f8fb3e1c92714eb5f23feb Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:36:18 -0700 Subject: [PATCH 54/78] Adding current social network --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 3 +++ .../wordpress/android/ui/publicize/PublicizeListActivity.java | 1 + 2 files changed, 4 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index f1f09725d695..a8a7771d3ba7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -21,6 +21,7 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implem private PublicizeConnection[] mPublicizeConnections; private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; + private String mSocialNetwork; private int mSelectedKeychainConnectionId = 0; private int mCurrentSite = 0; @@ -45,6 +46,7 @@ public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); } }); + builder.setTitle(getString(R.string.connecting_social_network, mSocialNetwork)); builder.setMessage(getString(R.string.connection_chooser_message)); mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); @@ -92,6 +94,7 @@ private void retrieveCurrentSite() { Bundle args = getArguments(); if (args != null) { mCurrentSite = args.getInt("site_id"); + mSocialNetwork = args.getString("social_network"); } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 76a0a7371251..f9c840341c08 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -276,6 +276,7 @@ public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); Bundle args = new Bundle(); + args.putString("social_network", publicizeConnections[0].getService()); args.putInt("site_id", WordPress.wpDB.getRemoteBlogIdForLocalTableBlogId(WordPress.wpDB.getLastBlogId())); dialogFragment.setArguments(args); dialogFragment.setConnections(publicizeConnections); From a3b28221486030e384042160f63bfd53b9a88a4a Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:36:29 -0700 Subject: [PATCH 55/78] Dismissing after connection request --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index a8a7771d3ba7..1bb98fcf3f1c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -38,6 +38,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { @Override public void onClick(DialogInterface dialogInterface, int i) { PublicizeActions.connectStepTwo(mCurrentSite, mSelectedKeychainConnectionId); + dialogInterface.dismiss(); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { From 5f9438265679cd76712706dc89fe3439ac7b4fac Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:36:41 -0700 Subject: [PATCH 56/78] Using connection id (which is same as keychain id) --- .../ui/publicize/PublicizeAccountChooserListAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 3611e28a5283..5803eb045105 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -46,7 +46,7 @@ public void onBindViewHolder(final ViewHolder holder, int position) { public void onClick(View view) { if (mListener != null) { mSelectedPosition = holder.getAdapterPosition(); - mListener.onAccountSelected(connection.keyringConnectionId); + mListener.onAccountSelected(connection.connectionId); } } }); From 7a6d43744a0347eb34e4480969564da213a3428f Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:36:56 -0700 Subject: [PATCH 57/78] Fixing padding and using message/title --- .../res/layout/publicize_account_chooser_dialog.xml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index a6d19940e33b..ad7e8ed31d6f 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -1,20 +1,11 @@ - - - - Date: Tue, 28 Jun 2016 15:37:10 -0700 Subject: [PATCH 58/78] formatting styles --- .../res/layout/publicize_connection_list_item.xml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index 4814e40837b7..c71e84473505 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -3,6 +3,8 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="10dp" + android:paddingTop="10dp" android:background="?attr/selectableItemBackground"> + android:layout_width="40dp" + android:layout_height="40dp" /> + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:textSize="16sp" + android:layout_marginLeft="8dp"/> From 04b017ccdb8be169b4ed6d1205adb78acf9354b9 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 15:56:52 -0700 Subject: [PATCH 59/78] Adding divider view in Connected dialog --- .../publicize_account_chooser_dialog.xml | 19 +++++++++++++++++-- .../layout/publicize_connection_list_item.xml | 1 + WordPress/src/main/res/values/strings.xml | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index ad7e8ed31d6f..cdaf1d861ecd 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -11,10 +11,25 @@ android:layout_height="wrap_content" android:id="@+id/not_connected_recyclerview" /> - + android:orientation="horizontal"> + + + + + + diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 612871cabb43..d14cc31ab1d0 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1545,5 +1545,6 @@ Some media uploads have failed. You can\'t save or publish your post in this state. Would you like to remove all failed media? Remove failed uploads + Connected From e5a06426dca9009c9f9f5d79a1da9ed88c9a1e9a Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 16:32:21 -0700 Subject: [PATCH 60/78] Passing back selected index in case no one clicks anything --- .../PublicizeAccountChooserDialogFragment.java | 15 ++++++++++----- .../PublicizeAccountChooserListAdapter.java | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 1bb98fcf3f1c..32be4ab5a277 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -22,7 +22,7 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implem private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; private String mSocialNetwork; - private int mSelectedKeychainConnectionId = 0; + private int mSelectedIndex = 0; private int mCurrentSite = 0; @NonNull @@ -37,8 +37,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - PublicizeActions.connectStepTwo(mCurrentSite, mSelectedKeychainConnectionId); - dialogInterface.dismiss(); + connectAndDismiss(dialogInterface); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @@ -99,9 +98,15 @@ private void retrieveCurrentSite() { } } + private void connectAndDismiss(DialogInterface dialogInterface) { + int keychainId = mNotConnectedAccounts.get(mSelectedIndex).connectionId; + PublicizeActions.connectStepTwo(mCurrentSite, keychainId); + dialogInterface.dismiss(); + } + @Override - public void onAccountSelected(int keyringConnectionId) { + public void onAccountSelected(int selectedIndex) { + mSelectedIndex = selectedIndex; mNotConnectedRecyclerView.getAdapter().notifyDataSetChanged(); - mSelectedKeychainConnectionId = keyringConnectionId; } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java index 5803eb045105..f3bd52f0a2b1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserListAdapter.java @@ -46,7 +46,7 @@ public void onBindViewHolder(final ViewHolder holder, int position) { public void onClick(View view) { if (mListener != null) { mSelectedPosition = holder.getAdapterPosition(); - mListener.onAccountSelected(connection.connectionId); + mListener.onAccountSelected(mSelectedPosition); } } }); @@ -76,6 +76,6 @@ public ViewHolder(View view) { } public interface OnPublicizeAccountChooserListener { - void onAccountSelected(int keyringConnectionId); + void onAccountSelected(int selectedIndex); } } From 0852afe38a4f89c8f2394fa142691bef53ffeb38 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:10:24 -0700 Subject: [PATCH 61/78] Showing progress dialog when adding new account --- .../ui/publicize/PublicizeListActivity.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index f9c840341c08..c26a15ad0b5c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -3,6 +3,7 @@ import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.ActionBar; @@ -26,9 +27,11 @@ public class PublicizeListActivity extends AppCompatActivity implements PublicizeActions.OnPublicizeActionListener, - PublicizeServiceAdapter.OnServiceClickListener { + PublicizeServiceAdapter.OnServiceClickListener, + DialogInterface.OnDismissListener { private int mSiteId; + private ProgressDialog mProgressDialog; @Override public void onCreate(Bundle savedInstanceState) { @@ -261,6 +264,9 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { if (isFinishing()) return; closeWebViewFragment(); + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } reloadDetailFragment(); if (!event.didSucceed()) { @@ -282,4 +288,11 @@ public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), "yup"); } + + @Override + public void onDismiss(DialogInterface dialogInterface) { + mProgressDialog = new ProgressDialog(this); + mProgressDialog.setMessage("Connecting account"); + mProgressDialog.show(); + } } From de45ef33406ffb6752ca37d7f935a4b930f90327 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:10:38 -0700 Subject: [PATCH 62/78] Sending request --- .../PublicizeAccountChooserDialogFragment.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 32be4ab5a277..1529c21f2345 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -1,5 +1,6 @@ package org.wordpress.android.ui.publicize; +import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; @@ -63,6 +64,15 @@ public void onClick(DialogInterface dialogInterface, int i) { return builder.create(); } + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + Activity activity = getActivity(); + if (activity != null && activity instanceof DialogInterface.OnDismissListener) { + ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); + } + } + public void setConnections(PublicizeConnection[] publicizeConnections) { mPublicizeConnections = publicizeConnections; } From 3cb567935c06ff21ba483ea6a7ac41f172453145 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:10:54 -0700 Subject: [PATCH 63/78] Sending onRequestConnect when clicking button --- .../android/ui/publicize/PublicizeDetailFragment.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java index ed965c9447d7..fe1e9cef5ece 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java @@ -148,14 +148,7 @@ public void onAdapterLoaded(boolean isEmpty) { mConnectBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - try { - JSONObject object = new JSONObject("{\"connections\":[{\"ID\":14460414,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-15 23:27:10\",\"expires\":\"2016-07-14 16:47:41\",\"external_ID\":\"122653424811017\",\"external_name\":null,\"external_display\":\"Jason Lee\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c47.0.160.160\\/p160x160\\/10354686_10150004552801856_220367501106153455_n.jpg?oh=b5df82644cdd221e1da17017092c51f5&oe=57E04C49\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[\"90298630\"],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14460414\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14460414\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14460414\"}}},{\"ID\":14477513,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-17 19:21:32\",\"expires\":\"2016-08-25 17:15:17\",\"external_ID\":\"123585121381948\",\"external_name\":null,\"external_display\":\"Joseph Park\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c47.0.160.160\\/p160x160\\/1379841_10150004552801901_469209496895221757_n.jpg?oh=b2b810118540c28b9a9766b47aed25e8&oe=57F1ED56\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14477513\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14477513\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14477513\"}}},{\"ID\":14359331,\"user_ID\":85830968,\"type\":\"publicize\",\"service\":\"facebook\",\"label\":\"Facebook\",\"issued\":\"2016-05-03 21:43:25\",\"expires\":\"0000-00-00 00:00:00\",\"external_ID\":\"760048377\",\"external_name\":null,\"external_display\":\"Will Kwon\",\"external_profile_picture\":\"https:\\/\\/scontent.xx.fbcdn.net\\/v\\/t1.0-1\\/c0.11.160.160\\/p160x160\\/12140837_10154338963603378_3978128539399730629_n.jpg?oh=f9fc9fbc4d7b7db211e9eb36b3b073b1&oe=57FC0952\",\"additional_external_users\":[],\"status\":\"ok\",\"refresh_URL\":\"https:\\/\\/public-api.wordpress.com\\/connect\\/?action=request&kr_nonce=a685796cd6&nonce=1fb9b2d834&refresh=1&for=connect&service=facebook&kr_blog_nonce=dab5dee2b5&magic=keyring&blog=90298630\",\"sites\":[\"106611662\"],\"meta\":{\"links\":{\"self\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14359331\",\"help\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/keyring-connections\\/14359331\\/help\",\"service\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/meta\\/external-services\\/facebook\",\"publicize_connections\":\"https:\\/\\/public-api.wordpress.com\\/rest\\/v1.1\\/me\\/publicize-connections\\/?keyring_connection_ID=14359331\"}}}]}"); - EventBus.getDefault().post(new PublicizeEvents.ConnectionChooserRequired(object)); - } catch (JSONException e) { - e.printStackTrace(); - } - -// getOnPublicizeActionListener().onRequestConnect(mService); + getOnPublicizeActionListener().onRequestConnect(mService); } }); } From d98c8a7279aaaf1b6a32846842eb908cb8ab21de Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:13:06 -0700 Subject: [PATCH 64/78] Showing toast when cancelling --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 1529c21f2345..9f07f24ab6d3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -14,6 +14,7 @@ import org.wordpress.android.R; import org.wordpress.android.models.PublicizeConnection; +import org.wordpress.android.util.ToastUtils; import java.util.ArrayList; @@ -45,6 +46,7 @@ public void onClick(DialogInterface dialogInterface, int i) { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); + ToastUtils.showToast(getActivity(), "You must select an account to connect"); } }); builder.setTitle(getString(R.string.connecting_social_network, mSocialNetwork)); From bff28c89e8e78e488a8aa79ca28403c7951f5384 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:33:46 -0700 Subject: [PATCH 65/78] Converting logic so that progress dialog can be shown --- ...PublicizeAccountChooserDialogFragment.java | 14 ++++++-------- .../android/ui/publicize/PublicizeEvents.java | 18 ++++++++++++++++++ .../ui/publicize/PublicizeListActivity.java | 19 ++++++++++--------- WordPress/src/main/res/values/strings.xml | 1 + 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 9f07f24ab6d3..cbf6abc1d917 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -18,6 +18,8 @@ import java.util.ArrayList; +import de.greenrobot.event.EventBus; + public class PublicizeAccountChooserDialogFragment extends DialogFragment implements PublicizeAccountChooserListAdapter.OnPublicizeAccountChooserListener { private RecyclerView mNotConnectedRecyclerView; private PublicizeConnection[] mPublicizeConnections; @@ -39,14 +41,16 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - connectAndDismiss(dialogInterface); + dialogInterface.dismiss(); + int keychainId = mNotConnectedAccounts.get(mSelectedIndex).connectionId; + EventBus.getDefault().post(new PublicizeEvents.ActionAccountChosen(mCurrentSite, keychainId)); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); - ToastUtils.showToast(getActivity(), "You must select an account to connect"); + ToastUtils.showToast(getActivity(), getActivity().getString(R.string.cannot_connect_account_error, mSocialNetwork)); } }); builder.setTitle(getString(R.string.connecting_social_network, mSocialNetwork)); @@ -110,12 +114,6 @@ private void retrieveCurrentSite() { } } - private void connectAndDismiss(DialogInterface dialogInterface) { - int keychainId = mNotConnectedAccounts.get(mSelectedIndex).connectionId; - PublicizeActions.connectStepTwo(mCurrentSite, keychainId); - dialogInterface.dismiss(); - } - @Override public void onAccountSelected(int selectedIndex) { mSelectedIndex = selectedIndex; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 1830ee656e30..08f6e0f76698 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -35,6 +35,24 @@ public boolean didSucceed() { } } + public static class ActionAccountChosen { + private int mSiteId; + private int mKeychainId; + + public ActionAccountChosen(int siteId, int keychainId) { + mSiteId = siteId; + mKeychainId = keychainId; + } + + public int getSiteId() { + return mSiteId; + } + + public int getKeychainId() { + return mKeychainId; + } + } + public static class ConnectionChooserRequired { private JSONObject mJsonObject; private PublicizeConnection[] mPublicizeConnections; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index c26a15ad0b5c..60bcc32fbf37 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -27,8 +27,7 @@ public class PublicizeListActivity extends AppCompatActivity implements PublicizeActions.OnPublicizeActionListener, - PublicizeServiceAdapter.OnServiceClickListener, - DialogInterface.OnDismissListener { + PublicizeServiceAdapter.OnServiceClickListener { private int mSiteId; private ProgressDialog mProgressDialog; @@ -274,6 +273,15 @@ public void onEventMainThread(PublicizeEvents.ActionCompleted event) { } } + public void onEventMainThread(PublicizeEvents.ActionAccountChosen event) { + if (isFinishing()) return; + + PublicizeActions.connectStepTwo(event.getSiteId(), event.getKeychainId()); + mProgressDialog = new ProgressDialog(this); + mProgressDialog.setMessage("Connecting account"); + mProgressDialog.show(); + } + public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { if (isFinishing()) return; @@ -288,11 +296,4 @@ public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), "yup"); } - - @Override - public void onDismiss(DialogInterface dialogInterface) { - mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage("Connecting account"); - mProgressDialog.show(); - } } diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index d14cc31ab1d0..f6652aaaadad 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1546,5 +1546,6 @@ your post in this state. Would you like to remove all failed media? Remove failed uploads Connected + The %s connection could not be made because no account was selected. From 23b4fe9fa3b9bd5da0b88665ef28416def7a6584 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:43:55 -0700 Subject: [PATCH 66/78] Removing extra spaces --- WordPress/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/build.gradle b/WordPress/build.gradle index ac69bdabefe4..59a76120ae05 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'io.fabric' android { useLibrary 'org.apache.http.legacy' - + dexOptions { jumboMode = true javaMaxHeapSize = "4g" From 5472f16485e720746a4ad821e62f351bb2955151 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:56:29 -0700 Subject: [PATCH 67/78] Cleaning up class. No functional changes. --- ...PublicizeAccountChooserDialogFragment.java | 92 ++++++++++--------- .../ui/publicize/PublicizeConstants.java | 1 + .../ui/publicize/PublicizeDetailFragment.java | 1 - .../ui/publicize/PublicizeListActivity.java | 4 +- 4 files changed, 54 insertions(+), 44 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index cbf6abc1d917..930fe9cd18a6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -25,47 +25,22 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implem private PublicizeConnection[] mPublicizeConnections; private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; - private String mSocialNetwork; + private String mConnectionName = ""; private int mSelectedIndex = 0; - private int mCurrentSite = 0; + private int mSiteId = 0; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - retrieveCurrentSite(); + retrieveCurrentSiteFromArgs(); addConnectionsToLists(); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.publicize_account_chooser_dialog, null); - builder.setView(view); - builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.dismiss(); - int keychainId = mNotConnectedAccounts.get(mSelectedIndex).connectionId; - EventBus.getDefault().post(new PublicizeEvents.ActionAccountChosen(mCurrentSite, keychainId)); - } - }); - builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.cancel(); - ToastUtils.showToast(getActivity(), getActivity().getString(R.string.cannot_connect_account_error, mSocialNetwork)); - } - }); - builder.setTitle(getString(R.string.connecting_social_network, mSocialNetwork)); - builder.setMessage(getString(R.string.connection_chooser_message)); - mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); - mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - PublicizeAccountChooserListAdapter notConnectedAdapter = new PublicizeAccountChooserListAdapter(mNotConnectedAccounts, this, false); - notConnectedAdapter.setHasStableIds(true); - mNotConnectedRecyclerView.setAdapter(notConnectedAdapter); - - RecyclerView listViewConnected = (RecyclerView) view.findViewById(R.id.connected_recyclerview); - listViewConnected.setLayoutManager(new LinearLayoutManager(getContext())); - PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(mConnectedAccounts, null, true); - listViewConnected.setAdapter(connectedAdapter); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + configureAlertDialog(view, builder); + configureRecyclerViews(view); return builder.create(); } @@ -83,12 +58,47 @@ public void setConnections(PublicizeConnection[] publicizeConnections) { mPublicizeConnections = publicizeConnections; } + private void configureRecyclerViews(View view) { + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); + + mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); + mNotConnectedRecyclerView.setLayoutManager(linearLayoutManager); + PublicizeAccountChooserListAdapter notConnectedAdapter = new PublicizeAccountChooserListAdapter(mNotConnectedAccounts, this, false); + notConnectedAdapter.setHasStableIds(true); + mNotConnectedRecyclerView.setAdapter(notConnectedAdapter); + + RecyclerView listViewConnected = (RecyclerView) view.findViewById(R.id.connected_recyclerview); + listViewConnected.setLayoutManager(linearLayoutManager); + PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(mConnectedAccounts, null, true); + listViewConnected.setAdapter(connectedAdapter); + } + + private void configureAlertDialog(View view, AlertDialog.Builder builder) { + builder.setView(view); + builder.setTitle(getString(R.string.connecting_social_network, mConnectionName)); + builder.setMessage(getString(R.string.connection_chooser_message)); + builder.setPositiveButton(R.string.share_btn_connect, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.dismiss(); + int keychainId = mNotConnectedAccounts.get(mSelectedIndex).connectionId; + EventBus.getDefault().post(new PublicizeEvents.ActionAccountChosen(mSiteId, keychainId)); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.cancel(); + ToastUtils.showToast(getActivity(), getActivity().getString(R.string.cannot_connect_account_error, mConnectionName)); + } + }); + } + private void addConnectionsToLists() { mNotConnectedAccounts = new ArrayList<>(); mConnectedAccounts = new ArrayList<>(); - for (int i = 0; i < mPublicizeConnections.length; i++) { - PublicizeConnection connection = mPublicizeConnections[i]; - if (containsCurrentSite(connection.getSites())) { + for (PublicizeConnection connection : mPublicizeConnections) { + if (containsSiteId(connection.getSites())) { mConnectedAccounts.add(connection); } else { mNotConnectedAccounts.add(connection); @@ -96,9 +106,9 @@ private void addConnectionsToLists() { } } - private boolean containsCurrentSite(int[] array) { - for (int i = 0; i < array.length; i++) { - if (array[i] == mCurrentSite) { + private boolean containsSiteId(int[] array) { + for (int a : array) { + if (a == mSiteId) { return true; } } @@ -106,11 +116,11 @@ private boolean containsCurrentSite(int[] array) { return false; } - private void retrieveCurrentSite() { + private void retrieveCurrentSiteFromArgs() { Bundle args = getArguments(); if (args != null) { - mCurrentSite = args.getInt("site_id"); - mSocialNetwork = args.getString("social_network"); + mSiteId = args.getInt(PublicizeConstants.ARG_SITE_ID); + mConnectionName = args.getString(PublicizeConstants.ARG_CONNECTION_NAME); } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index 0c107078b827..753224d73ea8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -4,6 +4,7 @@ public class PublicizeConstants { public static final String ARG_SITE_ID = "site_id"; public static final String ARG_SERVICE_ID = "service_id"; public static final String ARG_CONNECTION_ID = "connection_id"; + public static final String ARG_CONNECTION_NAME = "connection_name"; public enum ConnectAction { CONNECT, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java index fe1e9cef5ece..67ec98c401a6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeDetailFragment.java @@ -23,7 +23,6 @@ import de.greenrobot.event.EventBus; public class PublicizeDetailFragment extends PublicizeBaseFragment implements PublicizeConnectionAdapter.OnAdapterLoadedListener { - private int mSiteId; private String mServiceId; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 60bcc32fbf37..d8fcf5fda08a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -290,8 +290,8 @@ public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); Bundle args = new Bundle(); - args.putString("social_network", publicizeConnections[0].getService()); - args.putInt("site_id", WordPress.wpDB.getRemoteBlogIdForLocalTableBlogId(WordPress.wpDB.getLastBlogId())); + args.putString(PublicizeConstants.ARG_CONNECTION_NAME, publicizeConnections[0].getService()); + args.putInt(PublicizeConstants.ARG_SITE_ID, mSiteId); dialogFragment.setArguments(args); dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), "yup"); From 77d349e37097b6d0bc849bd8f362a2e9a00b43db Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:58:20 -0700 Subject: [PATCH 68/78] Removing unused CHOOSE_ACCOUNT enum value --- .../org/wordpress/android/ui/publicize/PublicizeConstants.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index 753224d73ea8..86a5caa9fd94 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -10,7 +10,6 @@ public enum ConnectAction { CONNECT, DISCONNECT, RECONNECT, - CONNECT_ANOTHER_ACCOUNT, - CHOOSE_ACCOUNT + CONNECT_ANOTHER_ACCOUNT } } From 6e787283ba40ac2720f0fc3645ea17190fab8d69 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 17:59:28 -0700 Subject: [PATCH 69/78] Removing unused method --- .../wordpress/android/ui/publicize/PublicizeEvents.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 08f6e0f76698..0b5e8181a944 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -80,14 +80,5 @@ private PublicizeConnection[] convertJsonToConnections() throws JSONException { return publicizeConnectionArray; } - - private int[] getSitesArrayFromJson(JSONArray jsonArray) throws JSONException { - int[] sitesArray = new int[jsonArray.length()]; - for (int i = 0; i < jsonArray.length(); i++) { - sitesArray[i] = jsonArray.getInt(i); - } - - return sitesArray; - } } } From 453f9a9e500522efebf4430615626e7182c776a2 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 18:00:44 -0700 Subject: [PATCH 70/78] Renaming class to be consistent with the rest --- .../org/wordpress/android/ui/publicize/PublicizeActions.java | 2 +- .../org/wordpress/android/ui/publicize/PublicizeEvents.java | 4 ++-- .../wordpress/android/ui/publicize/PublicizeListActivity.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index 81ba01934e0f..cf11ad3bb833 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -85,7 +85,7 @@ private static void connectStepOne(final int siteId, final String serviceId) { public void onResponse(JSONObject jsonObject) { if (hasMoreThanOneConnectedAccount(jsonObject)) { // show dialog showing multiple options - EventBus.getDefault().post(new PublicizeEvents.ConnectionChooserRequired(jsonObject)); + EventBus.getDefault().post(new PublicizeEvents.ActionRequestChooseAccount(jsonObject)); } else { int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); connectStepTwo(siteId, keyringConnectionId); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index 0b5e8181a944..b37773f41a10 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -53,11 +53,11 @@ public int getKeychainId() { } } - public static class ConnectionChooserRequired { + public static class ActionRequestChooseAccount { private JSONObject mJsonObject; private PublicizeConnection[] mPublicizeConnections; - public ConnectionChooserRequired(JSONObject jsonObject) { + public ActionRequestChooseAccount(JSONObject jsonObject) { mJsonObject = jsonObject; try { mPublicizeConnections = convertJsonToConnections(); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index d8fcf5fda08a..9e52074d2c76 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -282,7 +282,7 @@ public void onEventMainThread(PublicizeEvents.ActionAccountChosen event) { mProgressDialog.show(); } - public void onEventMainThread(PublicizeEvents.ConnectionChooserRequired event) { + public void onEventMainThread(PublicizeEvents.ActionRequestChooseAccount event) { if (isFinishing()) return; closeWebViewFragment(); From da270a8741a9ebde0666b44f1ab25da1fdac31eb Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 18:03:42 -0700 Subject: [PATCH 71/78] Converting magic strings --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 1 + .../wordpress/android/ui/publicize/PublicizeListActivity.java | 4 ++-- WordPress/src/main/res/values/strings.xml | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 930fe9cd18a6..c35105563840 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -21,6 +21,7 @@ import de.greenrobot.event.EventBus; public class PublicizeAccountChooserDialogFragment extends DialogFragment implements PublicizeAccountChooserListAdapter.OnPublicizeAccountChooserListener { + public static String TAG = "publicize-account-chooser-dialog-fragment"; private RecyclerView mNotConnectedRecyclerView; private PublicizeConnection[] mPublicizeConnections; private ArrayList mNotConnectedAccounts; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 9e52074d2c76..8155336e642e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -278,7 +278,7 @@ public void onEventMainThread(PublicizeEvents.ActionAccountChosen event) { PublicizeActions.connectStepTwo(event.getSiteId(), event.getKeychainId()); mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage("Connecting account"); + mProgressDialog.setMessage(getString(R.string.connecting_account)); mProgressDialog.show(); } @@ -294,6 +294,6 @@ public void onEventMainThread(PublicizeEvents.ActionRequestChooseAccount event) args.putInt(PublicizeConstants.ARG_SITE_ID, mSiteId); dialogFragment.setArguments(args); dialogFragment.setConnections(publicizeConnections); - dialogFragment.show(getSupportFragmentManager(), "yup"); + dialogFragment.show(getSupportFragmentManager(), PublicizeAccountChooserDialogFragment.TAG); } } diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index f6652aaaadad..ef6d8f604ea4 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1547,5 +1547,6 @@ Remove failed uploads Connected The %s connection could not be made because no account was selected. + Connecting account From d1cb875abd4c24ced1aa31b6108addf6cb0fd8ed Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 18:08:32 -0700 Subject: [PATCH 72/78] Cleaning up strings/dimension --- .../res/layout/publicize_account_chooser_dialog.xml | 4 ++-- .../res/layout/publicize_connection_list_item.xml | 12 ++++++------ WordPress/src/main/res/values/dimens.xml | 8 ++++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index cdaf1d861ecd..39efdd29d9e4 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -24,8 +24,8 @@ diff --git a/WordPress/src/main/res/layout/publicize_connection_list_item.xml b/WordPress/src/main/res/layout/publicize_connection_list_item.xml index 755758725272..548734e537b7 100644 --- a/WordPress/src/main/res/layout/publicize_connection_list_item.xml +++ b/WordPress/src/main/res/layout/publicize_connection_list_item.xml @@ -3,8 +3,8 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingBottom="10dp" - android:paddingTop="10dp" + android:paddingBottom="@dimen/publicize_default_margin" + android:paddingTop="@dimen/publicize_default_margin" android:background="?attr/selectableItemBackground"> + android:layout_width="@dimen/publicize_pic_width" + android:layout_height="@dimen/publicize_pic_width" /> + android:textSize="@dimen/publicize_name_size" + android:layout_marginLeft="@dimen/publicize_name_margin"/> diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index 8b0172c2348c..eeff128cf2ef 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -283,4 +283,12 @@ 20dp 1dp 72dp + + + 1dp + 10dp + 40dp + 16sp + 8dp + From 5773983be2948e0a8960ce9529655c294ecb6e0c Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 18:23:16 -0700 Subject: [PATCH 73/78] Can't use same linearLayoutManager for two recyclerviews --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index c35105563840..5fa727968579 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -60,16 +60,14 @@ public void setConnections(PublicizeConnection[] publicizeConnections) { } private void configureRecyclerViews(View view) { - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); - mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); - mNotConnectedRecyclerView.setLayoutManager(linearLayoutManager); + mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); PublicizeAccountChooserListAdapter notConnectedAdapter = new PublicizeAccountChooserListAdapter(mNotConnectedAccounts, this, false); notConnectedAdapter.setHasStableIds(true); mNotConnectedRecyclerView.setAdapter(notConnectedAdapter); RecyclerView listViewConnected = (RecyclerView) view.findViewById(R.id.connected_recyclerview); - listViewConnected.setLayoutManager(linearLayoutManager); + listViewConnected.setLayoutManager(new LinearLayoutManager(getActivity())); PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(mConnectedAccounts, null, true); listViewConnected.setAdapter(connectedAdapter); } From ccab771feabd0aa3abb1aca0f92075f03d71de26 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 28 Jun 2016 18:44:16 -0700 Subject: [PATCH 74/78] Passing in JSONObject as String args to PublicizeAccountChooserDialogFragment to deal with rotation --- ...PublicizeAccountChooserDialogFragment.java | 53 ++++++++++++------- .../ui/publicize/PublicizeConstants.java | 1 + .../android/ui/publicize/PublicizeEvents.java | 25 ++------- .../ui/publicize/PublicizeListActivity.java | 4 +- 4 files changed, 39 insertions(+), 44 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 5fa727968579..49b2f41a3d8d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -12,6 +12,9 @@ import android.view.LayoutInflater; import android.view.View; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.wordpress.android.R; import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.util.ToastUtils; @@ -23,7 +26,6 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implements PublicizeAccountChooserListAdapter.OnPublicizeAccountChooserListener { public static String TAG = "publicize-account-chooser-dialog-fragment"; private RecyclerView mNotConnectedRecyclerView; - private PublicizeConnection[] mPublicizeConnections; private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; private String mConnectionName = ""; @@ -34,7 +36,7 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implem @Override public Dialog onCreateDialog(Bundle savedInstanceState) { retrieveCurrentSiteFromArgs(); - addConnectionsToLists(); + configureConnectionName(); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.publicize_account_chooser_dialog, null); @@ -55,10 +57,6 @@ public void onDismiss(DialogInterface dialog) { } } - public void setConnections(PublicizeConnection[] publicizeConnections) { - mPublicizeConnections = publicizeConnections; - } - private void configureRecyclerViews(View view) { mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); @@ -92,19 +90,7 @@ public void onClick(DialogInterface dialogInterface, int i) { } }); } - - private void addConnectionsToLists() { - mNotConnectedAccounts = new ArrayList<>(); - mConnectedAccounts = new ArrayList<>(); - for (PublicizeConnection connection : mPublicizeConnections) { - if (containsSiteId(connection.getSites())) { - mConnectedAccounts.add(connection); - } else { - mNotConnectedAccounts.add(connection); - } - } - } - + private boolean containsSiteId(int[] array) { for (int a : array) { if (a == mSiteId) { @@ -119,7 +105,34 @@ private void retrieveCurrentSiteFromArgs() { Bundle args = getArguments(); if (args != null) { mSiteId = args.getInt(PublicizeConstants.ARG_SITE_ID); - mConnectionName = args.getString(PublicizeConstants.ARG_CONNECTION_NAME); + String jsonString = args.getString(PublicizeConstants.ARG_CONNECTION_ARRAY_JSON); + addConnectionsToLists(jsonString); + } + } + + private void addConnectionsToLists(String jsonString) { + mNotConnectedAccounts = new ArrayList<>(); + mConnectedAccounts = new ArrayList<>(); + try { + JSONObject jsonObject = new JSONObject(jsonString); + JSONArray jsonArray = jsonObject.getJSONArray("connections"); + for (int i = 0; i < jsonArray.length(); i++) { + PublicizeConnection connection = PublicizeConnection.fromJson(jsonArray.getJSONObject(i)); + if (containsSiteId(connection.getSites())) { + mConnectedAccounts.add(connection); + } else { + mNotConnectedAccounts.add(connection); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void configureConnectionName() { + PublicizeConnection connection = mNotConnectedAccounts.get(0); + if (connection != null) { + mConnectionName = connection.getLabel(); } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index 86a5caa9fd94..c97bf33bb323 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -5,6 +5,7 @@ public class PublicizeConstants { public static final String ARG_SERVICE_ID = "service_id"; public static final String ARG_CONNECTION_ID = "connection_id"; public static final String ARG_CONNECTION_NAME = "connection_name"; + public static final String ARG_CONNECTION_ARRAY_JSON = "connection_array_json"; public enum ConnectAction { CONNECT, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index b37773f41a10..c6ca299c26d9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -54,31 +54,14 @@ public int getKeychainId() { } public static class ActionRequestChooseAccount { - private JSONObject mJsonObject; - private PublicizeConnection[] mPublicizeConnections; + private JSONObject mJSONObject; public ActionRequestChooseAccount(JSONObject jsonObject) { - mJsonObject = jsonObject; - try { - mPublicizeConnections = convertJsonToConnections(); - } catch (JSONException e) { - mPublicizeConnections = new PublicizeConnection[0]; - e.printStackTrace(); - } + mJSONObject = jsonObject; } - public PublicizeConnection[] getConnections() { - return mPublicizeConnections; - } - - private PublicizeConnection[] convertJsonToConnections() throws JSONException { - JSONArray jsonArray = mJsonObject.getJSONArray("connections"); - PublicizeConnection[] publicizeConnectionArray = new PublicizeConnection[jsonArray.length()]; - for (int i = 0; i < jsonArray.length(); i++) { - publicizeConnectionArray[i] = PublicizeConnection.fromJson(jsonArray.getJSONObject(i)); - } - - return publicizeConnectionArray; + public JSONObject getJSONObject() { + return mJSONObject; } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index 8155336e642e..a3e5764d45e0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -287,13 +287,11 @@ public void onEventMainThread(PublicizeEvents.ActionRequestChooseAccount event) closeWebViewFragment(); - PublicizeConnection[] publicizeConnections = event.getConnections(); PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); Bundle args = new Bundle(); - args.putString(PublicizeConstants.ARG_CONNECTION_NAME, publicizeConnections[0].getService()); + args.putString(PublicizeConstants.ARG_CONNECTION_ARRAY_JSON, event.getJSONObject().toString()); args.putInt(PublicizeConstants.ARG_SITE_ID, mSiteId); dialogFragment.setArguments(args); - dialogFragment.setConnections(publicizeConnections); dialogFragment.show(getSupportFragmentManager(), PublicizeAccountChooserDialogFragment.TAG); } } From 30c4149d6aea46a8bbfe2fdde99a5f7ada12b5a2 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 29 Jun 2016 09:42:03 -0700 Subject: [PATCH 75/78] Making sure only the correct type of account is connected --- .../PublicizeAccountChooserDialogFragment.java | 12 ++++++++---- .../android/ui/publicize/PublicizeActions.java | 2 +- .../ui/publicize/PublicizeConstants.java | 1 - .../android/ui/publicize/PublicizeEvents.java | 17 +++++++++++++---- .../ui/publicize/PublicizeListActivity.java | 3 ++- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 49b2f41a3d8d..52eaf7ad349c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -29,6 +29,7 @@ public class PublicizeAccountChooserDialogFragment extends DialogFragment implem private ArrayList mNotConnectedAccounts; private ArrayList mConnectedAccounts; private String mConnectionName = ""; + private String mServiceId = ""; private int mSelectedIndex = 0; private int mSiteId = 0; @@ -105,6 +106,7 @@ private void retrieveCurrentSiteFromArgs() { Bundle args = getArguments(); if (args != null) { mSiteId = args.getInt(PublicizeConstants.ARG_SITE_ID); + mServiceId = args.getString(PublicizeConstants.ARG_SERVICE_ID); String jsonString = args.getString(PublicizeConstants.ARG_CONNECTION_ARRAY_JSON); addConnectionsToLists(jsonString); } @@ -118,10 +120,12 @@ private void addConnectionsToLists(String jsonString) { JSONArray jsonArray = jsonObject.getJSONArray("connections"); for (int i = 0; i < jsonArray.length(); i++) { PublicizeConnection connection = PublicizeConnection.fromJson(jsonArray.getJSONObject(i)); - if (containsSiteId(connection.getSites())) { - mConnectedAccounts.add(connection); - } else { - mNotConnectedAccounts.add(connection); + if (connection.getService().equals(mServiceId)) { + if (containsSiteId(connection.getSites())) { + mConnectedAccounts.add(connection); + } else { + mNotConnectedAccounts.add(connection); + } } } } catch (JSONException e) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index cf11ad3bb833..595298edd530 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -85,7 +85,7 @@ private static void connectStepOne(final int siteId, final String serviceId) { public void onResponse(JSONObject jsonObject) { if (hasMoreThanOneConnectedAccount(jsonObject)) { // show dialog showing multiple options - EventBus.getDefault().post(new PublicizeEvents.ActionRequestChooseAccount(jsonObject)); + EventBus.getDefault().post(new PublicizeEvents.ActionRequestChooseAccount(siteId, serviceId, jsonObject)); } else { int keyringConnectionId = parseServiceKeyringId(serviceId, jsonObject); connectStepTwo(siteId, keyringConnectionId); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java index c97bf33bb323..5197ddcd88d7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeConstants.java @@ -4,7 +4,6 @@ public class PublicizeConstants { public static final String ARG_SITE_ID = "site_id"; public static final String ARG_SERVICE_ID = "service_id"; public static final String ARG_CONNECTION_ID = "connection_id"; - public static final String ARG_CONNECTION_NAME = "connection_name"; public static final String ARG_CONNECTION_ARRAY_JSON = "connection_array_json"; public enum ConnectAction { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java index c6ca299c26d9..5a08bb007ea0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeEvents.java @@ -1,9 +1,6 @@ package org.wordpress.android.ui.publicize; -import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; -import org.wordpress.android.models.PublicizeConnection; import org.wordpress.android.ui.publicize.PublicizeConstants.ConnectAction; /** @@ -54,14 +51,26 @@ public int getKeychainId() { } public static class ActionRequestChooseAccount { + private int mSiteId; + private String mServiceId; private JSONObject mJSONObject; - public ActionRequestChooseAccount(JSONObject jsonObject) { + public ActionRequestChooseAccount(int siteId, String serviceId, JSONObject jsonObject) { + mSiteId = siteId; + mServiceId = serviceId; mJSONObject = jsonObject; } public JSONObject getJSONObject() { return mJSONObject; } + + public int getSiteId() { + return mSiteId; + } + + public String getServiceId() { + return mServiceId; + } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java index a3e5764d45e0..4ba412314384 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeListActivity.java @@ -290,7 +290,8 @@ public void onEventMainThread(PublicizeEvents.ActionRequestChooseAccount event) PublicizeAccountChooserDialogFragment dialogFragment = new PublicizeAccountChooserDialogFragment(); Bundle args = new Bundle(); args.putString(PublicizeConstants.ARG_CONNECTION_ARRAY_JSON, event.getJSONObject().toString()); - args.putInt(PublicizeConstants.ARG_SITE_ID, mSiteId); + args.putInt(PublicizeConstants.ARG_SITE_ID, event.getSiteId()); + args.putString(PublicizeConstants.ARG_SERVICE_ID, event.getServiceId()); dialogFragment.setArguments(args); dialogFragment.show(getSupportFragmentManager(), PublicizeAccountChooserDialogFragment.TAG); } From 2a145e58a99c9e7b0d4c83d3479b48b256a1e1d0 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Wed, 29 Jun 2016 11:14:40 -0700 Subject: [PATCH 76/78] Only showing connection dialog if there is at least one unconnected site of that service --- .../android/models/PublicizeConnection.java | 10 ++++++++ ...PublicizeAccountChooserDialogFragment.java | 2 +- .../ui/publicize/PublicizeActions.java | 24 ++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java index 46067c118235..393981dc59fa 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java +++ b/WordPress/src/main/java/org/wordpress/android/models/PublicizeConnection.java @@ -147,6 +147,16 @@ public int[] getSites() { return mSites; } + public boolean isInSite(int siteId) { + for (int i = 0; i < mSites.length; i++) { + if (siteId == mSites[i]) { + return true; + } + } + + return false; + } + /* * passed JSON is a single connection from the response to sites/%d/publicize-connections {"ID":12783250, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 52eaf7ad349c..ec0870a56b6b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -121,7 +121,7 @@ private void addConnectionsToLists(String jsonString) { for (int i = 0; i < jsonArray.length(); i++) { PublicizeConnection connection = PublicizeConnection.fromJson(jsonArray.getJSONObject(i)); if (connection.getService().equals(mServiceId)) { - if (containsSiteId(connection.getSites())) { + if (connection.isInSite(mSiteId)) { mConnectedAccounts.add(connection); } else { mNotConnectedAccounts.add(connection); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java index 595298edd530..d42b15669f86 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeActions.java @@ -7,6 +7,7 @@ import com.wordpress.rest.RestRequest; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.WordPress; import org.wordpress.android.datasets.PublicizeTable; @@ -83,7 +84,7 @@ private static void connectStepOne(final int siteId, final String serviceId) { RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { - if (hasMoreThanOneConnectedAccount(jsonObject)) { + if (shouldShowChooserDialog(siteId, serviceId, jsonObject)) { // show dialog showing multiple options EventBus.getDefault().post(new PublicizeEvents.ActionRequestChooseAccount(siteId, serviceId, jsonObject)); } else { @@ -132,9 +133,26 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().post(path, params, null, listener, errorListener); } - private static boolean hasMoreThanOneConnectedAccount(JSONObject jsonObject) { + private static boolean shouldShowChooserDialog(int siteId, String serviceId, JSONObject jsonObject) { JSONArray jsonConnectionList = jsonObject.optJSONArray("connections"); - return jsonConnectionList != null && jsonConnectionList.length() > 1; + if (jsonConnectionList == null || jsonConnectionList.length() <= 1) { + return false; + } + + int totalAccounts = 0; + try { + for (int i = 0; i < jsonConnectionList.length(); i++) { + JSONObject connectionObject = jsonConnectionList.getJSONObject(i); + PublicizeConnection publicizeConnection = PublicizeConnection.fromJson(connectionObject); + if (publicizeConnection.getService().equals(serviceId) && !publicizeConnection.isInSite(siteId)) { + totalAccounts++; + } + } + + return totalAccounts > 0; + } catch (JSONException e) { + return false; + } } /* From 30e0989f7f2f5dd2b88b8b92cb101d82cc015ff8 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Mon, 4 Jul 2016 19:50:20 -0700 Subject: [PATCH 77/78] Hiding connected text if there are no connected accounts --- ...PublicizeAccountChooserDialogFragment.java | 21 ++++++++++++++++--- .../publicize_account_chooser_dialog.xml | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index ec0870a56b6b..2c22043777fe 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -11,6 +11,7 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; +import android.widget.LinearLayout; import org.json.JSONArray; import org.json.JSONException; @@ -59,15 +60,29 @@ public void onDismiss(DialogInterface dialog) { } private void configureRecyclerViews(View view) { - mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); - mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); PublicizeAccountChooserListAdapter notConnectedAdapter = new PublicizeAccountChooserListAdapter(mNotConnectedAccounts, this, false); notConnectedAdapter.setHasStableIds(true); + mNotConnectedRecyclerView = (RecyclerView) view.findViewById(R.id.not_connected_recyclerview); + mNotConnectedRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); mNotConnectedRecyclerView.setAdapter(notConnectedAdapter); + if (mConnectedAccounts.isEmpty()) { + hideConnectedView(view); + } else { + populateConnectedListView(view); + } + } + + private void hideConnectedView(View view) { + LinearLayout connectedHeader = (LinearLayout) view.findViewById(R.id.connected_recyclerview); + connectedHeader.setVisibility(View.GONE); + } + + private void populateConnectedListView(View view) { RecyclerView listViewConnected = (RecyclerView) view.findViewById(R.id.connected_recyclerview); - listViewConnected.setLayoutManager(new LinearLayoutManager(getActivity())); PublicizeAccountChooserListAdapter connectedAdapter = new PublicizeAccountChooserListAdapter(mConnectedAccounts, null, true); + + listViewConnected.setLayoutManager(new LinearLayoutManager(getActivity())); listViewConnected.setAdapter(connectedAdapter); } diff --git a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml index 39efdd29d9e4..04715cbab855 100644 --- a/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml +++ b/WordPress/src/main/res/layout/publicize_account_chooser_dialog.xml @@ -12,6 +12,7 @@ android:id="@+id/not_connected_recyclerview" /> From c5c7d90815576a1b9d28aa87c6d2f8fc85e26d97 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 12 Jul 2016 19:29:32 -0500 Subject: [PATCH 78/78] Fixing resource that is being hidden --- .../ui/publicize/PublicizeAccountChooserDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java index 2c22043777fe..d79e82d822fa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/publicize/PublicizeAccountChooserDialogFragment.java @@ -74,7 +74,7 @@ private void configureRecyclerViews(View view) { } private void hideConnectedView(View view) { - LinearLayout connectedHeader = (LinearLayout) view.findViewById(R.id.connected_recyclerview); + LinearLayout connectedHeader = (LinearLayout) view.findViewById(R.id.connected_header); connectedHeader.setVisibility(View.GONE); }