package info.justaway.model;
import android.os.AsyncTask;
import android.support.v4.util.LongSparseArray;
import java.util.ArrayList;
import twitter4j.IDs;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.auth.AccessToken;
public class Relationship {
private static final LongSparseArray<Boolean> mIsBlockMap = new LongSparseArray<>();
private static final LongSparseArray<Boolean> mIsOfficialMuteMap = new LongSparseArray<>();
private static final LongSparseArray<Boolean> mIsNoRetweetMap = new LongSparseArray<>();
private static final LongSparseArray<Boolean> mMyIDMap = new LongSparseArray<>();
public static void init() {
ArrayList<AccessToken> accessTokens = AccessTokenManager.getAccessTokens();
if (accessTokens == null || accessTokens.size() == 0) {
return;
}
for (AccessToken accessToken : accessTokens) {
Twitter twitter = TwitterManager.getTwitterInstance();
twitter.setOAuthAccessToken(accessToken);
mMyIDMap.put(accessToken.getUserId(), true);
loadBlock(twitter);
loadOfficialMute(twitter);
loadNoRetweet(twitter);
}
}
public static boolean isMe(long userId) {
return mMyIDMap.get(userId, false);
}
public static boolean isBlock(long userId) {
return mIsBlockMap.get(userId, false);
}
public static boolean isOfficialMute(long userId) {
return mIsOfficialMuteMap.get(userId, false);
}
public static boolean isNoRetweet(long userId) {
return mIsNoRetweetMap.get(userId, false);
}
public static void setBlock(long userId) {
mIsBlockMap.put(userId, true);
}
public static void setOfficialMute(long userId) {
mIsOfficialMuteMap.put(userId, true);
}
public static void setNoRetweet(long userId) {
mIsNoRetweetMap.put(userId, true);
}
public static void removeBlock(long userId) {
mIsBlockMap.remove(userId);
}
public static void removeOfficialMute(long userId) {
mIsOfficialMuteMap.remove(userId);
}
public static void removeNoRetweet(long userId) {
mIsNoRetweetMap.remove(userId);
}
public static void loadBlock(final Twitter twitter) {
new AsyncTask<Void, Void, IDs>() {
@Override
protected IDs doInBackground(Void... voids) {
try {
return twitter.getBlocksIDs();
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(IDs iDs) {
if (iDs == null) {
return;
}
for (long id : iDs.getIDs()) {
mIsBlockMap.put(id, true);
}
}
}.execute();
}
public static void loadOfficialMute(final Twitter twitter) {
new AsyncTask<Void, Void, IDs>() {
@Override
protected IDs doInBackground(Void... voids) {
try {
return twitter.getMutesIDs(-1L);
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(IDs iDs) {
if (iDs == null) {
return;
}
for (long id : iDs.getIDs()) {
mIsOfficialMuteMap.put(id, true);
}
}
}.execute();
}
public static void loadNoRetweet(final Twitter twitter) {
new AsyncTask<Void, Void, IDs>() {
@Override
protected IDs doInBackground(Void... voids) {
try {
return twitter.getNoRetweetsFriendships();
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(IDs iDs) {
if (iDs == null) {
return;
}
for (long id : iDs.getIDs()) {
mIsNoRetweetMap.put(id, true);
}
}
}.execute();
}
public static boolean isVisible(final twitter4j.Status status) {
if (Relationship.isMe(status.getUser().getId())) {
return true;
}
if (Relationship.isBlock(status.getUser().getId())) {
return false;
}
if (Relationship.isOfficialMute(status.getUser().getId())) {
return false;
}
Status retweetedStatus = status.getRetweetedStatus();
if (retweetedStatus != null) {
if (Relationship.isNoRetweet(status.getUser().getId())) {
return false;
}
if (Relationship.isBlock(retweetedStatus.getUser().getId())) {
return false;
}
if (Relationship.isOfficialMute(retweetedStatus.getUser().getId())) {
return false;
}
}
Status quotedStatus = status.getQuotedStatus();
if (quotedStatus != null) {
if (Relationship.isBlock(quotedStatus.getUser().getId())) {
return false;
}
if (Relationship.isOfficialMute(quotedStatus.getUser().getId())) {
return false;
}
}
return true;
}
}