Skip to content

Commit 6d1bc0a

Browse files
Show Gravatar QuickEditor on Avatar tap
1 parent da0cccb commit 6d1bc0a

File tree

3 files changed

+52
-12
lines changed

3 files changed

+52
-12
lines changed

WordPress/src/main/java/org/wordpress/android/ui/main/MeFragment.kt

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ import androidx.lifecycle.ViewModelProvider
2121
import androidx.lifecycle.lifecycleScope
2222
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2323
import com.google.android.material.snackbar.Snackbar
24+
import com.gravatar.quickeditor.GravatarQuickEditor
25+
import com.gravatar.quickeditor.ui.editor.AuthenticationMethod
26+
import com.gravatar.quickeditor.ui.editor.AvatarPickerContentLayout
27+
import com.gravatar.quickeditor.ui.editor.GravatarQuickEditorParams
2428
import com.gravatar.services.AvatarService
2529
import com.gravatar.services.GravatarResult
30+
import com.gravatar.types.Email
2631
import com.yalantis.ucrop.UCrop
2732
import com.yalantis.ucrop.UCrop.Options
2833
import com.yalantis.ucrop.UCropActivity
@@ -81,6 +86,7 @@ import org.wordpress.android.util.ToastUtils
8186
import org.wordpress.android.util.ToastUtils.Duration.SHORT
8287
import org.wordpress.android.util.WPMediaUtils
8388
import org.wordpress.android.util.config.DomainManagementFeatureConfig
89+
import org.wordpress.android.util.config.GravatarQuickEditorFeatureConfig
8490
import org.wordpress.android.util.config.QRCodeAuthFlowFeatureConfig
8591
import org.wordpress.android.util.config.RecommendTheAppFeatureConfig
8692
import org.wordpress.android.util.extensions.getColorFromAttribute
@@ -130,6 +136,9 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
130136
@Inject
131137
lateinit var qrCodeAuthFlowFeatureConfig: QRCodeAuthFlowFeatureConfig
132138

139+
@Inject
140+
lateinit var gravatarQuickEditorFeatureConfig: GravatarQuickEditorFeatureConfig
141+
133142
@Inject
134143
lateinit var jetpackBrandingUtils: JetpackBrandingUtils
135144

@@ -155,6 +164,7 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
155164

156165
private val shouldShowDomainButton
157166
get() = BuildConfig.IS_JETPACK_APP && domainManagementFeatureConfig.isEnabled() && accountStore.hasAccessToken()
167+
158168
override fun onCreate(savedInstanceState: Bundle?) {
159169
super.onCreate(savedInstanceState)
160170
(requireActivity().application as WordPress).component().inject(this)
@@ -191,7 +201,21 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
191201

192202
val showPickerListener = OnClickListener {
193203
AnalyticsTracker.track(ME_GRAVATAR_TAPPED)
194-
showPhotoPickerForGravatar()
204+
if (gravatarQuickEditorFeatureConfig.isEnabled()) {
205+
GravatarQuickEditor.show(
206+
fragment = this@MeFragment,
207+
gravatarQuickEditorParams = GravatarQuickEditorParams {
208+
email = Email(accountStore.account.email)
209+
avatarPickerContentLayout = AvatarPickerContentLayout.Horizontal
210+
},
211+
authenticationMethod = AuthenticationMethod.Bearer(accountStore.accessToken.orEmpty()),
212+
onAvatarSelected = {
213+
loadAvatar(null, true)
214+
},
215+
)
216+
} else {
217+
showPhotoPickerForGravatar()
218+
}
195219
}
196220
avatarContainer.setOnClickListener(showPickerListener)
197221
rowMyProfile.setOnClickListener {
@@ -472,9 +496,9 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
472496
isUpdatingGravatar = isUpdating
473497
}
474498

475-
private fun MeFragmentBinding.loadAvatar(injectFilePath: String?) {
499+
private fun MeFragmentBinding.loadAvatar(injectFilePath: String?, forceRefresh: Boolean = false) {
476500
val newAvatarUploaded = !injectFilePath.isNullOrEmpty()
477-
val avatarUrl = meGravatarLoader.constructGravatarUrl(accountStore.account.avatarUrl)
501+
val avatarUrl = meGravatarLoader.constructGravatarUrl(accountStore.account.avatarUrl, forceRefresh)
478502
meGravatarLoader.load(
479503
newAvatarUploaded,
480504
avatarUrl,
@@ -687,7 +711,10 @@ class MeFragment : Fragment(R.layout.me_fragment), OnScrollToTopListener {
687711
avatarService.uploadCatching(file, accountStore.accessToken.orEmpty())
688712
when (result) {
689713
is GravatarResult.Failure -> {
690-
AnalyticsTracker.track(ME_GRAVATAR_UPLOAD_EXCEPTION, mapOf("error_type" to result.error.javaClass.name))
714+
AnalyticsTracker.track(
715+
ME_GRAVATAR_UPLOAD_EXCEPTION,
716+
mapOf("error_type" to result.error.javaClass.name)
717+
)
691718
EventBus.getDefault().post(GravatarUploadFinished(filePath, false))
692719
}
693720

WordPress/src/main/java/org/wordpress/android/ui/main/utils/MeGravatarLoader.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ class MeGravatarLoader @Inject constructor(
5656
}
5757
}
5858

59-
fun constructGravatarUrl(rawAvatarUrl: String): String {
59+
fun constructGravatarUrl(rawAvatarUrl: String, forceRefresh: Boolean = false): String {
6060
val avatarSz = resourseProvider.getDimensionPixelSize(R.dimen.avatar_sz_extra_small)
61-
return WPAvatarUtils.rewriteAvatarUrl(rawAvatarUrl, avatarSz)
61+
val cacheBuster = if (forceRefresh) System.currentTimeMillis().toString() else null
62+
return WPAvatarUtils.rewriteAvatarUrl(rawAvatarUrl, avatarSz, cacheBuster)
6263
}
6364
}

WordPress/src/main/java/org/wordpress/android/util/WPAvatarUtils.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class WPAvatarUtils {
2222
private WPAvatarUtils() {
2323
throw new IllegalStateException("Utility class");
2424
}
25+
2526
public static final DefaultAvatarOption DEFAULT_AVATAR = MysteryPerson.INSTANCE;
2627

2728
/**
@@ -35,7 +36,8 @@ private WPAvatarUtils() {
3536
* @return the fixed url
3637
*/
3738
public static String rewriteAvatarUrl(@NonNull final String imageUrl, int avatarSz,
38-
@Nullable DefaultAvatarOption defaultImage) {
39+
@Nullable DefaultAvatarOption defaultImage,
40+
@Nullable String cacheBuster) {
3941
if (TextUtils.isEmpty(imageUrl)) {
4042
return "";
4143
}
@@ -47,17 +49,27 @@ public static String rewriteAvatarUrl(@NonNull final String imageUrl, int avatar
4749
try {
4850
return new AvatarUrl(new URL(imageUrl),
4951
new AvatarQueryOptions.Builder()
50-
.setPreferredSize(avatarSz)
51-
.setDefaultAvatarOption(defaultImage)
52-
.build()
53-
).url(null).toString();
52+
.setPreferredSize(avatarSz)
53+
.setDefaultAvatarOption(defaultImage)
54+
.build()
55+
).url(cacheBuster).toString();
5456
} catch (MalformedURLException | IllegalArgumentException e) {
5557
return "";
5658
}
5759
}
5860
}
5961

6062
public static String rewriteAvatarUrl(@NonNull final String imageUrl, int avatarSz) {
61-
return rewriteAvatarUrl(imageUrl, avatarSz, DEFAULT_AVATAR);
63+
return rewriteAvatarUrl(imageUrl, avatarSz, DEFAULT_AVATAR, null);
64+
}
65+
66+
public static String rewriteAvatarUrl(@NonNull final String imageUrl, int avatarSz,
67+
@Nullable DefaultAvatarOption defaultImage) {
68+
return rewriteAvatarUrl(imageUrl, avatarSz, defaultImage, null);
69+
}
70+
71+
public static String rewriteAvatarUrl(@NonNull final String imageUrl, int avatarSz,
72+
@Nullable String cacheBuster) {
73+
return rewriteAvatarUrl(imageUrl, avatarSz, DEFAULT_AVATAR, cacheBuster);
6274
}
6375
}

0 commit comments

Comments
 (0)