diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/LinkResolverActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/LinkResolverActivity.java index 94bf7a6a..7c4a7d92 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/LinkResolverActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/LinkResolverActivity.java @@ -26,6 +26,7 @@ import javax.inject.Named; import eu.toldi.infinityforlemmy.Infinity; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; +import eu.toldi.infinityforlemmy.utils.LemmyUtils; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; public class LinkResolverActivity extends AppCompatActivity { @@ -38,8 +39,8 @@ public class LinkResolverActivity extends AppCompatActivity { private static final String POST_PATTERN_2 = "/(u|U|user)/[\\w-]+/comments/\\w+/?\\w+/?"; private static final String POST_PATTERN_3 = "/[\\w-]+$"; private static final String COMMENT_PATTERN = "/(r|u|U|user)/[\\w-]+/comments/\\w+/?[\\w-]+/\\w+/?"; - private static final String SUBREDDIT_PATTERN = "/[cC]/[\\w@.-]+/?"; - private static final String USER_PATTERN = "/(u|U|user)/[\\w-]+/?"; + private static final String SUBREDDIT_PATTERN = "(?:https?://[\\w.-]+)?/c/[\\w-]+(@[\\w.-]+)?"; + private static final String USER_PATTERN = "(?:https?://[\\w.-]+)?/u(sers)?/[\\w-]+(@[\\w.-]+)?"; private static final String SIDEBAR_PATTERN = "/[rR]/[\\w-]+/about/sidebar"; private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?"; private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?"; @@ -156,6 +157,18 @@ public class LinkResolverActivity extends AppCompatActivity { intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, uri.toString()); intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, id + ".jpg"); startActivity(intent); + } else if (uri.toString().matches(SUBREDDIT_PATTERN)) { + Intent intent = new Intent(this, ViewSubredditDetailActivity.class); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, uri.getScheme() != null ? LemmyUtils.actorID2FullName(uri.toString()) : path.substring(3)); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); + startActivity(intent); + } else if (uri.toString().matches(USER_PATTERN)) { + Intent intent = new Intent(this, ViewUserDetailActivity.class); + intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, uri.getScheme() != null ? LemmyUtils.actorID2FullName(uri.toString()) : path.substring(3)); + intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); + intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); + startActivity(intent); } else if (authority.equals("v.redd.it")) { Intent intent = new Intent(this, ViewVideoActivity.class); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT); @@ -219,18 +232,6 @@ public class LinkResolverActivity extends AppCompatActivity { intent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, segments.get(1)); intent.putExtra(WikiActivity.EXTRA_WIKI_PATH, wikiPage); startActivity(intent); - } else if (path.matches(SUBREDDIT_PATTERN)) { - Intent intent = new Intent(this, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, path.substring(3)); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); - startActivity(intent); - } else if (path.matches(USER_PATTERN)) { - Intent intent = new Intent(this, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, segments.get(1)); - intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); - intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); - startActivity(intent); } else if (path.matches(SIDEBAR_PATTERN)) { Intent intent = new Intent(this, ViewSubredditDetailActivity.class); intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, path.substring(3, path.length() - 14)); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewUserDetailActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewUserDetailActivity.java index 31770020..abf0069a 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewUserDetailActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewUserDetailActivity.java @@ -107,6 +107,7 @@ import eu.toldi.infinityforlemmy.user.UserData; import eu.toldi.infinityforlemmy.user.UserFollowing; import eu.toldi.infinityforlemmy.user.UserViewModel; import eu.toldi.infinityforlemmy.utils.APIUtils; +import eu.toldi.infinityforlemmy.utils.LemmyUtils; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; import eu.toldi.infinityforlemmy.utils.Utils; import io.noties.markwon.AbstractMarkwonPlugin; @@ -230,6 +231,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele private String mMessageFullname; private String mNewAccountName; + private UserData mUserData; + //private MaterialAlertDialogBuilder nsfwWarningBuilder; @Override @@ -271,9 +274,6 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null); lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false); - if (username.equalsIgnoreCase("me")) { - username = mAccountName; - } if (savedInstanceState == null) { mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME); @@ -288,8 +288,13 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele fetchUserInfo(); - Resources resources = getResources(); + if (mUserData != null) { + setupVisibleElements(); + } + } + private void setupVisibleElements() { + Resources resources = getResources(); String title = username; userNameTextView.setText(title); qualifiedNameTextView.setText(qualifiedName); @@ -404,7 +409,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele return true; }); - userViewModel = new ViewModelProvider(this, new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, username)) + userViewModel = new ViewModelProvider(this, new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, LemmyUtils.qualifiedUserName2ActorId(qualifiedName))) .get(UserViewModel.class); userViewModel.getUserLiveData().observe(this, userData -> { if (userData != null) { @@ -524,20 +529,20 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele CheckIsFollowingUser.checkIsFollowingUser(mExecutor, new Handler(), mRedditDataRoomDatabase, username, mAccountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() { - @Override - public void isSubscribed() { - subscribeUserChip.setText(R.string.unfollow); - subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor)); - subscriptionReady = true; - } + @Override + public void isSubscribed() { + subscribeUserChip.setText(R.string.unfollow); + subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor)); + subscriptionReady = true; + } - @Override - public void isNotSubscribed() { - subscribeUserChip.setText(R.string.follow); - subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor)); - subscriptionReady = true; - } - }); + @Override + public void isNotSubscribed() { + subscribeUserChip.setText(R.string.follow); + subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor)); + subscriptionReady = true; + } + }); } else { subscribeUserChip.setVisibility(View.GONE); } @@ -1071,6 +1076,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele FetchUserData.fetchUserData(mRetrofit.getRetrofit(), qualifiedName, new FetchUserData.FetchUserDataListener() { @Override public void onFetchUserDataSuccess(UserData userData, int inboxCount) { + mUserData = userData; + username = userData.getName(); + setupVisibleElements(); new ViewUserDetailActivity.InsertUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), userData, () -> mFetchUserInfoSuccess = true).execute(); } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/user/UserDao.java b/app/src/main/java/eu/toldi/infinityforlemmy/user/UserDao.java index 80365ab3..c7d77672 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/user/UserDao.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/user/UserDao.java @@ -20,6 +20,9 @@ public interface UserDao { @Query("SELECT * FROM users WHERE name = :userName COLLATE NOCASE LIMIT 1") LiveData getUserLiveData(String userName); + @Query("SELECT * FROM users WHERE actor_id = :actor_id COLLATE NOCASE LIMIT 1") + LiveData getUserLiveDataByQualifiedName(String actor_id); + @Query("SELECT * FROM users WHERE name = :userName COLLATE NOCASE LIMIT 1") UserData getUserData(String userName); } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/user/UserRepository.java b/app/src/main/java/eu/toldi/infinityforlemmy/user/UserRepository.java index 87e85576..3cac4023 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/user/UserRepository.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/user/UserRepository.java @@ -10,9 +10,9 @@ public class UserRepository { private UserDao mUserDao; private LiveData mUserLiveData; - UserRepository(RedditDataRoomDatabase redditDataRoomDatabase, String userName) { + UserRepository(RedditDataRoomDatabase redditDataRoomDatabase, String actor_id) { mUserDao = redditDataRoomDatabase.userDao(); - mUserLiveData = mUserDao.getUserLiveData(userName); + mUserLiveData = mUserDao.getUserLiveData(actor_id); } LiveData getUserLiveData() {