Skip to content

Commit

Permalink
support new field overriddenDisplayName in Social API response (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
LiYing2010 authored and plateaukao committed Dec 16, 2019
1 parent 802a1b9 commit 781cece
Show file tree
Hide file tree
Showing 11 changed files with 277 additions and 33 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -47,8 +47,8 @@ android {
}

dependencies {
//implementation project(':line-sdk')
implementation 'com.linecorp.linesdk:linesdk:5.3.1'
implementation project(':line-sdk')
// implementation 'com.linecorp.linesdk:linesdk:5.3.1'

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
Expand Down
Expand Up @@ -26,8 +26,8 @@
import com.linecorp.linesdk.LineApiError;
import com.linecorp.linesdk.LineApiResponse;
import com.linecorp.linesdk.LineApiResponseCode;
import com.linecorp.linesdk.LineFriendProfile;
import com.linecorp.linesdk.LineGroup;
import com.linecorp.linesdk.LineProfile;
import com.linecorp.linesdk.dialog.SendMessageDialog;
import com.linecorp.linesdk.message.AudioMessage;
import com.linecorp.linesdk.message.ImageMessage;
Expand Down Expand Up @@ -511,8 +511,8 @@ private static class ReceiverList {
private final List<Receiver> friends = new ArrayList<>();
private final List<Receiver> groups = new ArrayList<>();

private void addFriends(final List<LineProfile> friendList) {
for (final LineProfile friend : friendList) {
private void addFriends(final List<LineFriendProfile> friendList) {
for (final LineFriendProfile friend : friendList) {
friends.add(new Receiver(friend));
}
}
Expand Down Expand Up @@ -555,10 +555,10 @@ private static class Receiver {
final String id;
final String displayName;

private Receiver(final LineProfile friend) {
private Receiver(final LineFriendProfile friend) {
type = Type.Friend;
id = friend.getUserId();
displayName = friend.getDisplayName();
displayName = friend.getAvailableDisplayName();
}

private Receiver(final LineGroup group) {
Expand Down
Expand Up @@ -11,22 +11,22 @@
*/
public class GetFriendsResponse {
@NonNull
private List<LineProfile> friends;
private List<LineFriendProfile> friends;

@Nullable
private String nextPageRequestToken;

public GetFriendsResponse(@NonNull List<LineProfile> friends) {
public GetFriendsResponse(@NonNull List<LineFriendProfile> friends) {
this.friends = friends;
}

public GetFriendsResponse(@NonNull List<LineProfile> friends, @Nullable String pageToken) {
public GetFriendsResponse(@NonNull List<LineFriendProfile> friends, @Nullable String pageToken) {
this.friends = friends;
this.nextPageRequestToken = pageToken;
}

@NonNull
public List<LineProfile> getFriends() {
public List<LineFriendProfile> getFriends() {
return friends;
}

Expand Down
119 changes: 119 additions & 0 deletions line-sdk/src/main/java/com/linecorp/linesdk/LineFriendProfile.java
@@ -0,0 +1,119 @@
package com.linecorp.linesdk;

import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;

/**
* Represents a friend's LINE profile in the Social API.
*/
public class LineFriendProfile extends LineProfile {
public static final Parcelable.Creator<LineFriendProfile> CREATOR =
new Parcelable.Creator<LineFriendProfile>() {
@Override
public LineFriendProfile createFromParcel(final Parcel in) {
return new LineFriendProfile(in);
}

@Override
public LineFriendProfile[] newArray(final int size) {
return new LineFriendProfile[size];
}
};

/**
* Friend's nickname which changed by owner user
*/
@Nullable
private final String overriddenDisplayName;

/**
* Constructs a new {@link LineFriendProfile} instance.
* @param userId Friend's user ID.
* @param displayName Friend's display name.
* @param pictureUrl Friend's profile image URL.
* @param statusMessage Friend's status message.
* @param overriddenDisplayName Friend's nickname which changed by owner user
*/
public LineFriendProfile(@NonNull final String userId,
@NonNull final String displayName,
@Nullable final Uri pictureUrl,
@Nullable final String statusMessage,
@NonNull final String overriddenDisplayName) {
super(userId, displayName, pictureUrl, statusMessage);
this.overriddenDisplayName = overriddenDisplayName;
}

protected LineFriendProfile(@NonNull final Parcel in) {
super(in);
overriddenDisplayName = in.readString();
}

@Override
public void writeToParcel(final Parcel dest, final int flags) {
super.writeToParcel(dest, flags);
dest.writeString(overriddenDisplayName);
}

/**
* get the friend's nickname which changed by owner user
* @return The friend's nickname which changed by owner user
*/
@Nullable
public String getOverriddenDisplayName() {
return overriddenDisplayName;
}

/**
* get the friend's nickname which changed by owner user, or the original display name.
* @return The friend's nickname which changed by owner user, if not available, return the original display name
*/
@NonNull
public String getAvailableDisplayName() {
return !TextUtils.isEmpty(overriddenDisplayName)
? overriddenDisplayName
: getDisplayName();
}

/**
* @hide
*/
@Override
public boolean equals(final Object o) {
if (this == o) { return true; }
if (!(o instanceof LineFriendProfile)) { return false; }
if (!super.equals(o)) { return false; }

final LineFriendProfile that = (LineFriendProfile) o;

return overriddenDisplayName != null ? overriddenDisplayName.equals(that.overriddenDisplayName) :
that.overriddenDisplayName == null;
}

/**
* @hide
*/
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (overriddenDisplayName != null ? overriddenDisplayName.hashCode() : 0);
return result;
}

/**
* @hide
*/
@Override
public String toString() {
return "LineFriendProfile{" +
"userId='" + getUserId() + '\'' +
", displayName='" + getDisplayName() + '\'' +
", pictureUrl=" + getPictureUrl() +
", statusMessage='" + getStatusMessage() + '\'' +
", overriddenDisplayName='" + overriddenDisplayName + '\'' +
'}';
}
}
12 changes: 6 additions & 6 deletions line-sdk/src/main/java/com/linecorp/linesdk/LineProfile.java
Expand Up @@ -49,7 +49,7 @@ public LineProfile(
this.statusMessage = statusMessage;
}

private LineProfile(@NonNull Parcel in) {
protected LineProfile(@NonNull Parcel in) {
userId = in.readString();
displayName = in.readString();
pictureUrl = in.readParcelable(Uri.class.getClassLoader());
Expand Down Expand Up @@ -147,10 +147,10 @@ public int hashCode() {
@Override
public String toString() {
return "LineProfile{" +
"displayName='" + displayName + '\'' +
", userId='" + userId + '\'' +
", pictureUrl='" + pictureUrl + '\'' +
", statusMessage='" + statusMessage + '\'' +
'}';
"userId='" + userId + '\'' +
", displayName='" + displayName + '\'' +
", pictureUrl=" + pictureUrl +
", statusMessage='" + statusMessage + '\'' +
'}';
}
}
Expand Up @@ -7,8 +7,8 @@
import com.linecorp.linesdk.GetFriendsResponse;
import com.linecorp.linesdk.GetGroupsResponse;
import com.linecorp.linesdk.LineApiResponse;
import com.linecorp.linesdk.LineFriendProfile;
import com.linecorp.linesdk.LineGroup;
import com.linecorp.linesdk.LineProfile;
import com.linecorp.linesdk.api.LineApiClient;

import java.util.ArrayList;
Expand Down Expand Up @@ -49,10 +49,10 @@ public interface NextAction {
}

@NonNull
private List<TargetUser> convertFriendsToTargetUsers(List<LineProfile> profiles) {
private List<TargetUser> convertFriendsToTargetUsers(List<LineFriendProfile> friends) {
List<TargetUser> targetUsers = new ArrayList<>();
for (LineProfile profile : profiles) {
targetUsers.add(TargetUser.createInstance(profile));
for (LineFriendProfile friend : friends) {
targetUsers.add(TargetUser.createInstance(friend));
}
return targetUsers;
}
Expand Down
Expand Up @@ -2,8 +2,8 @@

import android.net.Uri;

import com.linecorp.linesdk.LineFriendProfile;
import com.linecorp.linesdk.LineGroup;
import com.linecorp.linesdk.LineProfile;

public class TargetUser {
public enum Type { FRIEND, GROUP }
Expand Down Expand Up @@ -49,18 +49,18 @@ public void setSelected(Boolean selected) {
isSelected = selected;
}

public static TargetUser createInstance(LineProfile profile) {
public static TargetUser createInstance(final LineFriendProfile friend) {
return new TargetUser(Type.FRIEND,
profile.getUserId(),
profile.getDisplayName(),
profile.getPictureUrl());
friend.getUserId(),
friend.getAvailableDisplayName(),
friend.getPictureUrl());
}

public static TargetUser createInstance(LineGroup group) {
public static TargetUser createInstance(final LineGroup group) {
return new TargetUser(Type.GROUP,
group.getGroupId(),
group.getGroupName(),
group.getPictureUrl());
group.getGroupId(),
group.getGroupName(),
group.getPictureUrl());
}

public static int getTargetTypeCount() {
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.linecorp.linesdk.LineApiError;
import com.linecorp.linesdk.LineApiResponse;
import com.linecorp.linesdk.LineApiResponseCode;
import com.linecorp.linesdk.LineFriendProfile;
import com.linecorp.linesdk.LineFriendshipStatus;
import com.linecorp.linesdk.LineGroup;
import com.linecorp.linesdk.LineProfile;
Expand Down Expand Up @@ -321,10 +322,10 @@ static class FriendsParser extends JsonToObjectBaseResponseParser<GetFriendsResp
@NonNull
@Override
GetFriendsResponse parseJsonToObject(@NonNull JSONObject jsonObject) throws JSONException {
List<LineProfile> friendList = new ArrayList<>();
List<LineFriendProfile> friendList = new ArrayList<>();
JSONArray friendsArray = jsonObject.getJSONArray("friends");
for (int i = 0; i < friendsArray.length(); i++) {
friendList.add(ProfileParser.parseLineProfile(friendsArray.getJSONObject(i)));
friendList.add(FriendProfileParser.parseLineFriendProfile(friendsArray.getJSONObject(i)));
}
String pageToken = jsonObject.optString("pageToken", null);
return new GetFriendsResponse(friendList, pageToken);
Expand All @@ -349,6 +350,25 @@ LineProfile parseJsonToObject(@NonNull JSONObject jsonObject) throws JSONExcepti
}
}

@VisibleForTesting
static class FriendProfileParser extends JsonToObjectBaseResponseParser<LineFriendProfile> {
private static LineFriendProfile parseLineFriendProfile(@NonNull JSONObject jsonObject) throws JSONException {
LineProfile lineProfile = ProfileParser.parseLineProfile(jsonObject);
String overriddenDisplayName = jsonObject.optString("displayNameOverridden", null);
return new LineFriendProfile(lineProfile.getUserId(),
lineProfile.getDisplayName(),
lineProfile.getPictureUrl(),
lineProfile.getStatusMessage(),
overriddenDisplayName);
}

@NonNull
@Override
LineFriendProfile parseJsonToObject(@NonNull JSONObject jsonObject) throws JSONException {
return parseLineFriendProfile(jsonObject);
}
}

@VisibleForTesting
static class FriendshipStatusParser extends JsonToObjectBaseResponseParser<LineFriendshipStatus> {
@NonNull
Expand Down
@@ -0,0 +1,58 @@
package com.linecorp.linesdk;

import android.net.Uri;
import android.os.Parcel;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
* Test for {@link LineFriendProfile}.
*/
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = TestConfig.TARGET_SDK_VERSION)
public class LineFriendProfileTest {
@Test
public void testParcelable() {
LineFriendProfile expected = new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me"), "statusMessage", "overriddenDisplayName");

Parcel parcel = Parcel.obtain();
expected.writeToParcel(parcel, 0);

parcel.setDataPosition(0);

LineFriendProfile actual = LineFriendProfile.CREATOR.createFromParcel(parcel);
assertTrue(expected.equals(actual));
}

@Test
public void testEquals() {
LineFriendProfile expected = new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me"), "statusMessage", "overriddenDisplayName");

assertTrue(expected.equals(new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me"), "statusMessage",
"overriddenDisplayName")));
assertFalse(expected.equals(new LineFriendProfile(
"userId2", "displayName", Uri.parse("http://line.me"), "statusMessage",
"overriddenDisplayName")));
assertFalse(expected.equals(new LineFriendProfile(
"userId", "displayName2", Uri.parse("http://line.me"), "statusMessage",
"overriddenDisplayName")));
assertFalse(expected.equals(new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me/2"), "statusMessage",
"overriddenDisplayName")));
assertFalse(expected.equals(new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me"), "statusMessage2",
"overriddenDisplayName")));
assertFalse(expected.equals(new LineFriendProfile(
"userId", "displayName", Uri.parse("http://line.me"), "statusMessage",
"overriddenDisplayName2")));
}
}
Expand Up @@ -27,7 +27,7 @@ public void testParcelable() {

parcel.setDataPosition(0);

LineProfile actual = (LineProfile) LineProfile.CREATOR.createFromParcel(parcel);
LineProfile actual = LineProfile.CREATOR.createFromParcel(parcel);
assertTrue(expected.equals(actual));
}

Expand Down

0 comments on commit 781cece

Please sign in to comment.