bug fix, code cleanup
This commit is contained in:
parent
55b5648623
commit
b728208f03
|
@ -27,10 +27,10 @@ import org.nuclearfog.twidda.model.UserList;
|
|||
import org.nuclearfog.twidda.model.WebPush;
|
||||
import org.nuclearfog.twidda.model.lists.Domains;
|
||||
import org.nuclearfog.twidda.model.lists.Filters;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
import org.nuclearfog.twidda.model.lists.Notifications;
|
||||
import org.nuclearfog.twidda.model.lists.ScheduledStatuses;
|
||||
import org.nuclearfog.twidda.model.lists.Statuses;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
import org.nuclearfog.twidda.model.lists.UserLists;
|
||||
import org.nuclearfog.twidda.model.lists.Users;
|
||||
|
||||
|
|
|
@ -57,10 +57,10 @@ import org.nuclearfog.twidda.model.UserList;
|
|||
import org.nuclearfog.twidda.model.WebPush;
|
||||
import org.nuclearfog.twidda.model.lists.Domains;
|
||||
import org.nuclearfog.twidda.model.lists.Filters;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
import org.nuclearfog.twidda.model.lists.Notifications;
|
||||
import org.nuclearfog.twidda.model.lists.ScheduledStatuses;
|
||||
import org.nuclearfog.twidda.model.lists.Statuses;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
import org.nuclearfog.twidda.model.lists.UserLists;
|
||||
import org.nuclearfog.twidda.model.lists.Users;
|
||||
|
||||
|
@ -467,7 +467,10 @@ public class Mastodon implements Connection {
|
|||
@Override
|
||||
public Hashtags searchHashtags(String search) throws MastodonException {
|
||||
List<String> params = new ArrayList<>();
|
||||
params.add("q=" + StringUtils.encode(search));
|
||||
if (search.startsWith("#"))
|
||||
params.add("q=" + StringUtils.encode(search.substring(1)));
|
||||
else
|
||||
params.add("q=" + StringUtils.encode(search));
|
||||
params.add("type=hashtags");
|
||||
Hashtags result = getTrends(ENDPOINT_SEARCH_TIMELINE, params);
|
||||
Collections.sort(result);
|
||||
|
|
|
@ -43,9 +43,9 @@ import org.nuclearfog.twidda.model.Poll;
|
|||
import org.nuclearfog.twidda.model.Status;
|
||||
import org.nuclearfog.twidda.model.User;
|
||||
import org.nuclearfog.twidda.model.lists.Accounts;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
import org.nuclearfog.twidda.model.lists.Notifications;
|
||||
import org.nuclearfog.twidda.model.lists.Statuses;
|
||||
import org.nuclearfog.twidda.model.lists.Hashtags;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
|
@ -71,7 +71,7 @@ public class Hashtags extends LinkedList<Hashtag> {
|
|||
* add a sublist at specific position
|
||||
*
|
||||
* @param hashtags sublist to add
|
||||
* @param index index where to insert the sublist
|
||||
* @param index index where to insert the sublist
|
||||
*/
|
||||
public void addAll(int index, Hashtags hashtags) {
|
||||
if (isEmpty()) {
|
||||
|
|
|
@ -91,12 +91,12 @@ public class HashtagActivity extends AppCompatActivity implements OnQueryTextLis
|
|||
public boolean onQueryTextSubmit(String query) {
|
||||
if (hashtagAction.isIdle()) {
|
||||
if (viewPager.getCurrentItem() == 0) {
|
||||
Toast.makeText(getApplicationContext(), R.string.info_hashtag_following,Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.info_hashtag_following, Toast.LENGTH_SHORT).show();
|
||||
HashtagAction.Param param = new HashtagAction.Param(HashtagAction.Param.FOLLOW, query);
|
||||
hashtagAction.execute(param, this);
|
||||
return true;
|
||||
} else if (viewPager.getCurrentItem() == 1) {
|
||||
Toast.makeText(getApplicationContext(), R.string.info_hashtag_featuring,Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.info_hashtag_featuring, Toast.LENGTH_SHORT).show();
|
||||
HashtagAction.Param param = new HashtagAction.Param(HashtagAction.Param.FEATURE, query);
|
||||
hashtagAction.execute(param, this);
|
||||
return true;
|
||||
|
|
|
@ -175,6 +175,7 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
|
|||
confirmDialog = new ConfirmDialog(this, this);
|
||||
picasso = PicassoBuilder.get(this);
|
||||
settings = GlobalSettings.get(this);
|
||||
adapter = new ProfileAdapter(this);
|
||||
|
||||
if (!settings.toolbarOverlapEnabled()) {
|
||||
ConstraintSet constraints = new ConstraintSet();
|
||||
|
@ -225,7 +226,7 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
|
|||
userId = user.getId();
|
||||
}
|
||||
// setup pager fragments
|
||||
adapter = new ProfileAdapter(this, userId, settings.getLogin().getId() == userId);
|
||||
adapter.setId(userId);
|
||||
viewPager.setAdapter(adapter);
|
||||
// set user/relation data and initialize loaders
|
||||
if (user != null) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import androidx.annotation.Nullable;
|
|||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.utils.AppStyles;
|
||||
import org.nuclearfog.twidda.ui.fragments.ScheduleFragment;
|
||||
|
|
|
@ -87,6 +87,7 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener
|
|||
|
||||
settings = GlobalSettings.get(this);
|
||||
hashtagAction = new HashtagAction(this);
|
||||
adapter = new SearchAdapter(this);
|
||||
|
||||
String query = getIntent().getStringExtra(KEY_QUERY);
|
||||
Serializable data = getIntent().getSerializableExtra(KEY_DATA);
|
||||
|
@ -100,18 +101,16 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener
|
|||
hashtagAction.execute(param, this);
|
||||
}
|
||||
}
|
||||
adapter.setSearch(search);
|
||||
|
||||
if (!settings.floatingButtonEnabled()) {
|
||||
floatingButton.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
toolbar.setTitle("");
|
||||
setSupportActionBar(toolbar);
|
||||
viewPager.setOffscreenPageLimit(3);
|
||||
adapter = new SearchAdapter(this, search);
|
||||
viewPager.setAdapter(adapter);
|
||||
if (adapter.getItemCount() == 3)
|
||||
tabSelector.addTabIcons(R.array.search_hashtag_tab_icons);
|
||||
else
|
||||
tabSelector.addTabIcons(R.array.search_tab_icons);
|
||||
tabSelector.addTabIcons(R.array.search_hashtag_tab_icons);
|
||||
AppStyles.setTheme(root);
|
||||
|
||||
tabSelector.addOnTabSelectedListener(this);
|
||||
|
|
|
@ -112,24 +112,25 @@ public class UserlistActivity extends AppCompatActivity implements OnTabSelected
|
|||
userlistDialog = new UserlistDialog(this, this);
|
||||
listLoaderAsync = new UserlistAction(this);
|
||||
listManagerAsync = new UserlistManager(this);
|
||||
adapter = new UserlistAdapter(this);
|
||||
|
||||
Object data = getIntent().getSerializableExtra(KEY_DATA);
|
||||
if (data instanceof UserList) {
|
||||
userList = (UserList) data;
|
||||
toolbar.setTitle(userList.getTitle());
|
||||
adapter = new UserlistAdapter(this, userList.getId(), settings.getLogin().getConfiguration().isUserlistSubscriberSupported());
|
||||
adapter.setId(userList.getId());
|
||||
viewPager.setAdapter(adapter);
|
||||
if (adapter.getItemCount() == 2) {
|
||||
tabSelector.addTabIcons(R.array.list_tab_icons);
|
||||
} else if (adapter.getItemCount() == 3) {
|
||||
tabSelector.addTabIcons(R.array.list_subscriber_tab_icons);
|
||||
}
|
||||
viewPager.setOffscreenPageLimit(3);
|
||||
setSupportActionBar(toolbar);
|
||||
AppStyles.setTheme(root);
|
||||
|
||||
tabSelector.addOnTabSelectedListener(this);
|
||||
}
|
||||
viewPager.setOffscreenPageLimit(3);
|
||||
setSupportActionBar(toolbar);
|
||||
AppStyles.setTheme(root);
|
||||
|
||||
tabSelector.addOnTabSelectedListener(this);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -58,18 +58,24 @@ public class UserlistsActivity extends AppCompatActivity implements UserlistUpda
|
|||
TabSelector tabSelector = findViewById(R.id.page_tab_view_tabs);
|
||||
viewPager = findViewById(R.id.page_tab_view_pager);
|
||||
|
||||
adapter = new UserListsAdapter(this);
|
||||
userlistDialog = new UserlistDialog(this, this);
|
||||
settings = GlobalSettings.get(this);
|
||||
|
||||
toolbar.setTitle(R.string.list_appbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
long ownerId = getIntent().getLongExtra(KEY_ID, 0L);
|
||||
adapter.setId(ownerId);
|
||||
if (settings.getLogin().getConfiguration().isUserlistMembershipSupported()) {
|
||||
tabSelector.addTabIcons(R.array.userlist_tab_ownership_membership_icons);
|
||||
adapter.setPageCount(2);
|
||||
} else {
|
||||
tabSelector.addTabIcons(R.array.userlist_tab_ownership_icons);
|
||||
adapter.setPageCount(1);
|
||||
}
|
||||
|
||||
adapter = new UserListsAdapter(this, ownerId, settings.getLogin().getConfiguration().isUserlistMembershipSupported());
|
||||
viewPager.setAdapter(adapter);
|
||||
viewPager.setOffscreenPageLimit(2);
|
||||
tabSelector.addTabIcons(R.array.userlist_tab_icons);
|
||||
toolbar.setTitle(R.string.list_appbar);
|
||||
setSupportActionBar(toolbar);
|
||||
AppStyles.setOverflowIcon(toolbar, settings.getIconColor());
|
||||
AppStyles.setTheme(root);
|
||||
|
||||
|
|
|
@ -116,18 +116,21 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis
|
|||
|
||||
filterLoader = new UserFilterAction(this);
|
||||
settings = GlobalSettings.get(this);
|
||||
adapter = new UserAdapter(this);
|
||||
viewPager.setOffscreenPageLimit(3);
|
||||
|
||||
mode = getIntent().getIntExtra(KEY_MODE, 0);
|
||||
long id = getIntent().getLongExtra(KEY_ID, 0L);
|
||||
adapter.setId(id);
|
||||
|
||||
switch (mode) {
|
||||
case USERS_FOLLOWING:
|
||||
toolbar.setTitle(R.string.userlist_following);
|
||||
adapter.setType(UserAdapter.FOLLOWING);
|
||||
if (settings.getLogin().getId() == id)
|
||||
adapter = new UserAdapter(this, id, UserAdapter.FOLLOWING, 2);
|
||||
adapter.setPageCount(2);
|
||||
else
|
||||
adapter = new UserAdapter(this, id, UserAdapter.FOLLOWING, 1);
|
||||
adapter.setPageCount(1);
|
||||
viewPager.setAdapter(adapter);
|
||||
if (adapter.getItemCount() > 1) {
|
||||
tabSelector.addTabIcons(R.array.user_following);
|
||||
|
@ -139,10 +142,11 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis
|
|||
|
||||
case USERS_FOLLOWER:
|
||||
toolbar.setTitle(R.string.userlist_follower);
|
||||
adapter.setType(UserAdapter.FOLLOWER);
|
||||
if (settings.getLogin().getId() == id && settings.getLogin().getConfiguration().isOutgoingFollowRequestSupported())
|
||||
adapter = new UserAdapter(this, id, UserAdapter.FOLLOWER, 2);
|
||||
adapter.setPageCount(2);
|
||||
else
|
||||
adapter = new UserAdapter(this, id, UserAdapter.FOLLOWER, 1);
|
||||
adapter.setPageCount(1);
|
||||
viewPager.setAdapter(adapter);
|
||||
tabSelector.setVisibility(View.GONE);
|
||||
if (adapter.getItemCount() > 1) {
|
||||
|
@ -155,7 +159,8 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis
|
|||
|
||||
case USERS_REPOST:
|
||||
toolbar.setTitle(R.string.toolbar_userlist_repost);
|
||||
adapter = new UserAdapter(this, id, UserAdapter.REPOSTER, 1);
|
||||
adapter.setType(UserAdapter.REPOSTER);
|
||||
adapter.setPageCount(1);
|
||||
viewPager.setAdapter(adapter);
|
||||
tabSelector.setVisibility(View.GONE);
|
||||
break;
|
||||
|
@ -163,14 +168,16 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis
|
|||
case USERS_FAVORIT:
|
||||
int title = settings.likeEnabled() ? R.string.toolbar_status_liker : R.string.toolbar_status_favoriter;
|
||||
toolbar.setTitle(title);
|
||||
adapter = new UserAdapter(this, id, UserAdapter.FAVORITER, 1);
|
||||
adapter.setType(UserAdapter.FAVORITER);
|
||||
adapter.setPageCount(1);
|
||||
viewPager.setAdapter(adapter);
|
||||
tabSelector.setVisibility(View.GONE);
|
||||
break;
|
||||
|
||||
case USERS_EXCLUDED:
|
||||
toolbar.setTitle(R.string.menu_toolbar_excluded_users);
|
||||
adapter = new UserAdapter(this, id, UserAdapter.BLOCKS, 3);
|
||||
adapter.setType(UserAdapter.BLOCKS);
|
||||
adapter.setPageCount(3);
|
||||
viewPager.setAdapter(adapter);
|
||||
tabSelector.addTabIcons(R.array.user_domain_exclude);
|
||||
tabSelector.addOnTabSelectedListener(this);
|
||||
|
|
|
@ -16,13 +16,12 @@ import org.nuclearfog.twidda.ui.fragments.HashtagFragment;
|
|||
*/
|
||||
public class HashtagAdapter extends ViewPagerAdapter {
|
||||
|
||||
private static final int COUNT = 3;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public HashtagAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity, COUNT);
|
||||
super(fragmentActivity);
|
||||
setPageCount(3);
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,7 +29,7 @@ public class HashtagAdapter extends ViewPagerAdapter {
|
|||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
HashtagFragment fragment = new HashtagFragment();
|
||||
switch(position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
Bundle paramFollowedTags = new Bundle();
|
||||
paramFollowedTags.putInt(HashtagFragment.KEY_MODE, HashtagFragment.MODE_FOLLOW);
|
||||
|
|
|
@ -18,13 +18,12 @@ import org.nuclearfog.twidda.ui.fragments.StatusFragment;
|
|||
*/
|
||||
public class HomeAdapter extends ViewPagerAdapter {
|
||||
|
||||
private static final int SIZE = 4;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public HomeAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity, SIZE);
|
||||
super(fragmentActivity);
|
||||
setPageCount(4);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||
import org.nuclearfog.twidda.ui.fragments.FieldFragment;
|
||||
import org.nuclearfog.twidda.ui.fragments.ListFragment;
|
||||
import org.nuclearfog.twidda.ui.fragments.StatusFragment;
|
||||
|
@ -17,16 +18,16 @@ import org.nuclearfog.twidda.ui.fragments.StatusFragment;
|
|||
*/
|
||||
public class ProfileAdapter extends ViewPagerAdapter {
|
||||
|
||||
private long userId;
|
||||
private boolean isCurrentUser;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private long userId = 0L;
|
||||
|
||||
/**
|
||||
* @param userId ID of the user (profile ID)
|
||||
*
|
||||
*/
|
||||
public ProfileAdapter(FragmentActivity fragmentActivity, long userId, boolean isCurrentUser) {
|
||||
super(fragmentActivity, isCurrentUser ? 4 : 2);
|
||||
this.isCurrentUser = isCurrentUser;
|
||||
this.userId = userId;
|
||||
public ProfileAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
settings = GlobalSettings.get(fragmentActivity);
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,7 +35,7 @@ public class ProfileAdapter extends ViewPagerAdapter {
|
|||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
ListFragment fragment;
|
||||
switch(position) {
|
||||
switch (position) {
|
||||
default:
|
||||
case 0:
|
||||
Bundle param = new Bundle();
|
||||
|
@ -45,17 +46,17 @@ public class ProfileAdapter extends ViewPagerAdapter {
|
|||
break;
|
||||
|
||||
case 1:
|
||||
if (isCurrentUser) {
|
||||
if (getItemCount() == 2) {
|
||||
param = new Bundle();
|
||||
param.putLong(FieldFragment.KEY_ID, userId);
|
||||
fragment = new FieldFragment();
|
||||
fragment.setArguments(param);
|
||||
} else {
|
||||
param = new Bundle();
|
||||
param.putLong(StatusFragment.KEY_ID, userId);
|
||||
param.putInt(StatusFragment.KEY_MODE, StatusFragment.MODE_FAVORIT);
|
||||
fragment = new StatusFragment();
|
||||
fragment.setArguments(param);
|
||||
} else {
|
||||
param = new Bundle();
|
||||
param.putLong(FieldFragment.KEY_ID, userId);
|
||||
fragment = new FieldFragment();
|
||||
fragment.setArguments(param);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -76,4 +77,18 @@ public class ProfileAdapter extends ViewPagerAdapter {
|
|||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/**
|
||||
* set user ID of the profile
|
||||
*
|
||||
* @param userId user ID
|
||||
*/
|
||||
public void setId(long userId) {
|
||||
this.userId = userId;
|
||||
if (settings.getLogin().getId() == userId) {
|
||||
setPageCount(4);
|
||||
} else {
|
||||
setPageCount(2);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,14 +18,14 @@ import org.nuclearfog.twidda.ui.fragments.UserFragment;
|
|||
*/
|
||||
public class SearchAdapter extends ViewPagerAdapter {
|
||||
|
||||
private String search;
|
||||
private String search = "";
|
||||
|
||||
/**
|
||||
* @param search search string
|
||||
*
|
||||
*/
|
||||
public SearchAdapter(FragmentActivity fragmentActivity, String search) {
|
||||
super(fragmentActivity, search.startsWith("#") ? 2 : 3);
|
||||
this.search = search;
|
||||
public SearchAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
setPageCount(3);
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,4 +61,11 @@ public class SearchAdapter extends ViewPagerAdapter {
|
|||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/**
|
||||
* set search text used by fragments
|
||||
*/
|
||||
public void setSearch(String search) {
|
||||
this.search = search;
|
||||
}
|
||||
}
|
|
@ -43,16 +43,13 @@ public class UserAdapter extends ViewPagerAdapter {
|
|||
public static final int BLOCKS = 14;
|
||||
|
||||
private long id;
|
||||
private int mode;
|
||||
private int type;
|
||||
|
||||
/**
|
||||
* @param id Status ID, List ID or User ID, depending on mode
|
||||
* @param mode what type of fragments should be loaded {@link #FOLLOWER,#FOLLOWING,#REQUESTS,#REPOSTER,#FAVORITER,#BLOCKS}
|
||||
*
|
||||
*/
|
||||
public UserAdapter(FragmentActivity fragmentActivity, long id, int mode, int pages) {
|
||||
super(fragmentActivity, pages);
|
||||
this.mode = mode;
|
||||
this.id = id;
|
||||
public UserAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
}
|
||||
|
||||
|
||||
|
@ -60,20 +57,20 @@ public class UserAdapter extends ViewPagerAdapter {
|
|||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
ListFragment fragment;
|
||||
switch(position) {
|
||||
switch (position) {
|
||||
default:
|
||||
case 0:
|
||||
Bundle param = new Bundle();
|
||||
param.putLong(UserFragment.KEY_ID, id);
|
||||
if (mode == FOLLOWING) {
|
||||
if (type == FOLLOWING) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_FOLLOWING);
|
||||
} else if (mode == FOLLOWER) {
|
||||
} else if (type == FOLLOWER) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_FOLLOWER);
|
||||
} else if (mode == REPOSTER) {
|
||||
} else if (type == REPOSTER) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_REPOSTER);
|
||||
} else if (mode == FAVORITER) {
|
||||
} else if (type == FAVORITER) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_FAVORITER);
|
||||
} else if (mode == BLOCKS) {
|
||||
} else if (type == BLOCKS) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_MUTES);
|
||||
}
|
||||
fragment = new UserFragment();
|
||||
|
@ -82,11 +79,11 @@ public class UserAdapter extends ViewPagerAdapter {
|
|||
|
||||
case 1:
|
||||
param = new Bundle();
|
||||
if (mode == FOLLOWING) {
|
||||
if (type == FOLLOWING) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_FOLLOW_INCOMING);
|
||||
} else if (mode == FOLLOWER) {
|
||||
} else if (type == FOLLOWER) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_FOLLOW_OUTGOING);
|
||||
} else if (mode == BLOCKS) {
|
||||
} else if (type == BLOCKS) {
|
||||
param.putInt(UserFragment.KEY_MODE, UserFragment.MODE_BLOCKS);
|
||||
}
|
||||
fragment = new UserFragment();
|
||||
|
@ -99,4 +96,20 @@ public class UserAdapter extends ViewPagerAdapter {
|
|||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/**
|
||||
* set content type to view
|
||||
*
|
||||
* @param type what type of fragments should be loaded {@link #FOLLOWER,#FOLLOWING,#REQUESTS,#REPOSTER,#FAVORITER,#BLOCKS}
|
||||
*/
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
|
@ -19,11 +19,10 @@ public class UserListsAdapter extends ViewPagerAdapter {
|
|||
private long userId;
|
||||
|
||||
/**
|
||||
* @param userId ID of the user related to the userlists
|
||||
*
|
||||
*/
|
||||
public UserListsAdapter(FragmentActivity fragmentActivity, long userId, boolean enableMember) {
|
||||
super(fragmentActivity, enableMember ? 2 : 1);
|
||||
this.userId = userId;
|
||||
public UserListsAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
}
|
||||
|
||||
|
||||
|
@ -31,7 +30,7 @@ public class UserListsAdapter extends ViewPagerAdapter {
|
|||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
ListFragment fragment;
|
||||
switch(position) {
|
||||
switch (position) {
|
||||
default:
|
||||
case 0:
|
||||
fragment = new UserListFragment();
|
||||
|
@ -51,4 +50,11 @@ public class UserListsAdapter extends ViewPagerAdapter {
|
|||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void setId(long userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||
import org.nuclearfog.twidda.ui.fragments.ListFragment;
|
||||
import org.nuclearfog.twidda.ui.fragments.StatusFragment;
|
||||
import org.nuclearfog.twidda.ui.fragments.UserFragment;
|
||||
|
@ -23,9 +24,14 @@ public class UserlistAdapter extends ViewPagerAdapter {
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public UserlistAdapter(FragmentActivity fragmentActivity, long id, boolean enableSubscriber) {
|
||||
super(fragmentActivity, enableSubscriber ? 3 : 2);
|
||||
this.id = id;
|
||||
public UserlistAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
GlobalSettings settings = GlobalSettings.get(fragmentActivity);
|
||||
if (settings.getLogin().getConfiguration().isUserlistSubscriberSupported()) {
|
||||
setPageCount(3);
|
||||
} else {
|
||||
setPageCount(2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -62,4 +68,11 @@ public class UserlistAdapter extends ViewPagerAdapter {
|
|||
}
|
||||
return fragment;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package org.nuclearfog.twidda.ui.adapter.viewpager;
|
||||
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
|
@ -13,25 +14,19 @@ import java.util.Random;
|
|||
*/
|
||||
public abstract class ViewPagerAdapter extends FragmentStateAdapter {
|
||||
|
||||
private static final Random RND = new Random();
|
||||
private static final Random RAND = new Random();
|
||||
|
||||
private ListFragment.ItemViewModel viewModel;
|
||||
|
||||
private int count;
|
||||
private long[] ids;
|
||||
private int count = 0;
|
||||
private long[] ids = {};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected ViewPagerAdapter(FragmentActivity fragmentActivity, int count) {
|
||||
protected ViewPagerAdapter(FragmentActivity fragmentActivity) {
|
||||
super(fragmentActivity);
|
||||
viewModel = new ViewModelProvider(fragmentActivity).get(ListFragment.ItemViewModel.class);
|
||||
this.count = count;
|
||||
// create fragment session IDs
|
||||
ids = new long[count];
|
||||
for (int i = 0 ; i < ids.length ; i++) {
|
||||
ids[i] = RND.nextLong();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -57,6 +52,20 @@ public abstract class ViewPagerAdapter extends FragmentStateAdapter {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* set page count
|
||||
*
|
||||
* @param count number of pages
|
||||
*/
|
||||
public void setPageCount(@IntRange(from = 1) int count) {
|
||||
this.count = count;
|
||||
// create fragment session IDs
|
||||
ids = new long[count];
|
||||
for (int i = 0; i < ids.length; i++) {
|
||||
ids[i] = RAND.nextLong();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* called when app settings change
|
||||
*/
|
||||
|
|
|
@ -47,8 +47,7 @@ public class FieldFragment extends ListFragment implements OnLinkClickListener,
|
|||
}
|
||||
}
|
||||
setAdapter(adapter);
|
||||
UserLoader.Param userParam = new UserLoader.Param(UserLoader.Param.ONLINE, id);
|
||||
userLoader.execute(userParam, this);
|
||||
load();
|
||||
setRefresh(true);
|
||||
}
|
||||
|
||||
|
@ -61,6 +60,13 @@ public class FieldFragment extends ListFragment implements OnLinkClickListener,
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
userLoader.cancel();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onLinkClick(String url) {
|
||||
LinkUtils.openLink(requireActivity(), url);
|
||||
|
@ -69,8 +75,7 @@ public class FieldFragment extends ListFragment implements OnLinkClickListener,
|
|||
|
||||
@Override
|
||||
protected void onReload() {
|
||||
UserLoader.Param userParam = new UserLoader.Param(UserLoader.Param.ONLINE, id);
|
||||
userLoader.execute(userParam, this);
|
||||
load();
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,8 +83,8 @@ public class FieldFragment extends ListFragment implements OnLinkClickListener,
|
|||
protected void onReset() {
|
||||
// reload adapter items
|
||||
adapter.clear();
|
||||
UserLoader.Param userParam = new UserLoader.Param(UserLoader.Param.ONLINE, id);
|
||||
userLoader.execute(userParam, this);
|
||||
userLoader = new UserLoader(requireContext());
|
||||
load();
|
||||
setRefresh(true);
|
||||
}
|
||||
|
||||
|
@ -98,4 +103,12 @@ public class FieldFragment extends ListFragment implements OnLinkClickListener,
|
|||
}
|
||||
setRefresh(false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void load() {
|
||||
UserLoader.Param userParam = new UserLoader.Param(UserLoader.Param.ONLINE, id);
|
||||
userLoader.execute(userParam, this);
|
||||
}
|
||||
}
|
|
@ -58,6 +58,7 @@ public class FilterFragment extends ListFragment implements OnFilterClickListene
|
|||
@Override
|
||||
public void onDestroy() {
|
||||
filterLoader.cancel();
|
||||
filterAction.cancel();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
|
|
@ -131,6 +131,7 @@ public class HashtagFragment extends ListFragment implements OnHashtagClickListe
|
|||
@Override
|
||||
public void onDestroy() {
|
||||
hashtagLoader.cancel();
|
||||
hashtagAction.cancel();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
@ -139,6 +140,7 @@ public class HashtagFragment extends ListFragment implements OnHashtagClickListe
|
|||
protected void onReset() {
|
||||
adapter.clear();
|
||||
hashtagLoader = new HashtagLoader(requireContext());
|
||||
hashtagAction = new HashtagAction(requireContext());
|
||||
load(HashtagLoader.Param.NO_CURSOR, HashtagAdapter.CLEAR_LIST);
|
||||
setRefresh(true);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,14 @@ import org.nuclearfog.twidda.config.GlobalSettings;
|
|||
*/
|
||||
public abstract class ListFragment extends Fragment implements OnRefreshListener, RefreshCallback, Observer<String> {
|
||||
|
||||
/**
|
||||
* used by {@link ItemViewModel} to notify {@link ListFragment} subclasses to scroll the lists to the first position
|
||||
*/
|
||||
public static final String NOTIFY_SCROLL_TOP = "refresh";
|
||||
|
||||
/**
|
||||
* used by {@link ItemViewModel} to notify {@link ListFragment} subclassed that settings may have changed
|
||||
*/
|
||||
public static final String NOTIFY_CHANGED = "settings_changed";
|
||||
|
||||
/**
|
||||
|
@ -145,15 +152,25 @@ public abstract class ListFragment extends Fragment implements OnRefreshListener
|
|||
*/
|
||||
protected abstract void onReset();
|
||||
|
||||
|
||||
/**
|
||||
* View model used by Activities to communicate with {@link ListFragment} subclasses
|
||||
*/
|
||||
public static class ItemViewModel extends ViewModel {
|
||||
|
||||
private final MutableLiveData<String> selectedItem = new MutableLiveData<>();
|
||||
|
||||
/**
|
||||
* send notification to {@link ListFragment} subclasses
|
||||
*
|
||||
* @param s notification type {@link ListFragment#NOTIFY_CHANGED,#ListFragment#NOTIFY_SCROLL_TOP}
|
||||
*/
|
||||
public void notify(String s) {
|
||||
selectedItem.setValue(s);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public LiveData<String> getSelectedItem() {
|
||||
return selectedItem;
|
||||
}
|
||||
|
|
|
@ -46,14 +46,13 @@ public class ScheduleFragment extends ListFragment implements OnScheduleClickLis
|
|||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
scheduleLoader = new ScheduleLoader(requireContext());
|
||||
scheduleAction = new ScheduleAction(requireContext());
|
||||
adapter = new ScheduleAdapter(this);
|
||||
confirm = new ConfirmDialog(requireActivity(), this);
|
||||
timepicker = new TimePickerDialog(requireActivity(), this);
|
||||
setAdapter(adapter);
|
||||
|
||||
setAdapter(adapter);
|
||||
if (savedInstanceState != null) {
|
||||
Object data = savedInstanceState.getSerializable(KEY_SAVE);
|
||||
if (data instanceof ScheduledStatuses) {
|
||||
|
@ -72,6 +71,14 @@ public class ScheduleFragment extends ListFragment implements OnScheduleClickLis
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
scheduleLoader.cancel();
|
||||
scheduleAction.cancel();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReload() {
|
||||
load(adapter.getTopItemId(), 0L, 0);
|
||||
|
@ -81,6 +88,8 @@ public class ScheduleFragment extends ListFragment implements OnScheduleClickLis
|
|||
@Override
|
||||
protected void onReset() {
|
||||
adapter.clear();
|
||||
scheduleLoader = new ScheduleLoader(requireContext());
|
||||
scheduleAction = new ScheduleAction(requireContext());
|
||||
load(0L, 0L, CLEAR_LIST);
|
||||
setRefresh(true);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ public class LockableConstraintLayout extends ConstraintLayout {
|
|||
@Override
|
||||
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
||||
switch (ev.getActionMasked()) {
|
||||
case MotionEvent.ACTION_SCROLL:
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
float deltaY = ev.getAxisValue(MotionEvent.AXIS_Y) - yPos;
|
||||
// detect scroll down, then aquire scroll lock
|
||||
|
@ -45,11 +46,13 @@ public class LockableConstraintLayout extends ConstraintLayout {
|
|||
}
|
||||
// fall through
|
||||
|
||||
case MotionEvent.ACTION_POINTER_DOWN:
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
// note the current coordinates touch event
|
||||
yPos = ev.getAxisValue(MotionEvent.AXIS_Y);
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_POINTER_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
case MotionEvent.ACTION_UP:
|
||||
yLock = false;
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
android:layout_margin="@dimen/item_schedule_layout_margins"
|
||||
android:maxLines="@integer/item_schedule_text_max_lines"
|
||||
android:fadeScrollbars="false"
|
||||
android:scrollbars="vertical"/>
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_schedule_visibility"
|
||||
|
@ -56,7 +56,7 @@
|
|||
android:layout_margin="@dimen/item_schedule_layout_margins"
|
||||
android:drawablePadding="@dimen/item_schedule_drawable_padding"
|
||||
android:textSize="@dimen/item_schedule_textsize_small"
|
||||
android:lines="1"/>
|
||||
android:lines="1" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/item_schedule_attachment"
|
||||
|
|
|
@ -239,6 +239,7 @@
|
|||
<string name="settings_enable_indicators">zeige zusätzliche Status Informationen an</string>
|
||||
<string name="login_key_enable">Token einfügen</string>
|
||||
<string name="login_key_enable_v2">API v2 nutzen</string>
|
||||
<string name="info_hashtag_following">folge Hashtag..</string>
|
||||
<string name="info_open_mastodon_login">öffne Mastodon Loginseite</string>
|
||||
<string name="info_login_to_mastodon">in Mastodon einloggen</string>
|
||||
<string name="error_service_unavailable">Service zur Zeit nicht verfügbar!</string>
|
||||
|
|
|
@ -8,11 +8,6 @@
|
|||
<item>@drawable/bell</item>
|
||||
</integer-array>
|
||||
|
||||
<integer-array name="search_tab_icons">
|
||||
<item>@drawable/search</item>
|
||||
<item>@drawable/user</item>
|
||||
</integer-array>
|
||||
|
||||
<integer-array name="search_hashtag_tab_icons">
|
||||
<item>@drawable/search</item>
|
||||
<item>@drawable/user</item>
|
||||
|
@ -64,7 +59,11 @@
|
|||
<item>@drawable/info</item>
|
||||
</integer-array>
|
||||
|
||||
<integer-array name="userlist_tab_icons">
|
||||
<integer-array name="userlist_tab_ownership_icons">
|
||||
<item>@drawable/following</item>
|
||||
</integer-array>
|
||||
|
||||
<integer-array name="userlist_tab_ownership_membership_icons">
|
||||
<item>@drawable/following</item>
|
||||
</integer-array>
|
||||
|
||||
|
|
Loading…
Reference in New Issue