added list fragment superclass, removed redundant code
This commit is contained in:
parent
567c31850d
commit
66cdcec840
|
@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment;
|
|||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
|
||||
import org.nuclearfog.twidda.fragment.ListFragment;
|
||||
import org.nuclearfog.twidda.fragment.MessageFragment;
|
||||
import org.nuclearfog.twidda.fragment.TrendFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetFragment;
|
||||
|
@ -44,7 +45,7 @@ import static org.nuclearfog.twidda.fragment.UserListFragment.LIST_USER_SUBSCR_T
|
|||
*/
|
||||
public class FragmentAdapter extends FragmentStatePagerAdapter {
|
||||
|
||||
private Fragment[] fragments;
|
||||
private ListFragment[] fragments;
|
||||
|
||||
/**
|
||||
* Initialize Fragment Adapter
|
||||
|
@ -53,7 +54,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
*/
|
||||
public FragmentAdapter(FragmentManager fManager) {
|
||||
super(fManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
|
||||
fragments = new Fragment[0];
|
||||
fragments = new ListFragment[0];
|
||||
}
|
||||
|
||||
|
||||
|
@ -82,7 +83,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
* Clear all fragments
|
||||
*/
|
||||
public void clear() {
|
||||
fragments = new Fragment[0];
|
||||
fragments = new ListFragment[0];
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
@ -94,7 +95,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
Bundle ment_tl = new Bundle();
|
||||
home_tl.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_HOME);
|
||||
ment_tl.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_MENT);
|
||||
fragments = new Fragment[3];
|
||||
fragments = new ListFragment[3];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new TrendFragment();
|
||||
fragments[2] = new TweetFragment();
|
||||
|
@ -115,7 +116,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
usr_favor.putLong(KEY_FRAG_TWEET_ID, userId);
|
||||
usr_tweet.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_TWEETS);
|
||||
usr_favor.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_FAVORS);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new TweetFragment();
|
||||
fragments[0].setArguments(usr_tweet);
|
||||
|
@ -135,7 +136,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
usr_favor.putString(KEY_FRAG_TWEET_SEARCH, username);
|
||||
usr_tweet.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_TWEETS);
|
||||
usr_favor.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_FAVORS);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new TweetFragment();
|
||||
fragments[0].setArguments(usr_tweet);
|
||||
|
@ -155,7 +156,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
userSearch.putString(KEY_FRAG_USER_SEARCH, search);
|
||||
tweetSearch.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_SEARCH);
|
||||
userSearch.putInt(KEY_FRAG_USER_MODE, USER_FRAG_SEARCH);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new UserFragment();
|
||||
fragments[0].setArguments(tweetSearch);
|
||||
|
@ -174,7 +175,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
param.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_ANSWER);
|
||||
param.putString(KEY_FRAG_TWEET_SEARCH, replyName);
|
||||
param.putLong(KEY_FRAG_TWEET_ID, tweetId);
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[0].setArguments(param);
|
||||
notifyDataSetChanged();
|
||||
|
@ -189,7 +190,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
Bundle param = new Bundle();
|
||||
param.putLong(KEY_FRAG_USER_ID, userId);
|
||||
param.putInt(KEY_FRAG_USER_MODE, USER_FRAG_FRIENDS);
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(param);
|
||||
notifyDataSetChanged();
|
||||
|
@ -204,7 +205,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
Bundle param = new Bundle();
|
||||
param.putLong(KEY_FRAG_USER_ID, userId);
|
||||
param.putInt(KEY_FRAG_USER_MODE, USER_FRAG_FOLLOWS);
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(param);
|
||||
notifyDataSetChanged();
|
||||
|
@ -214,7 +215,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
* setup adapter for a list of direct messages
|
||||
*/
|
||||
public void setupMessagePage() {
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new MessageFragment();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
@ -228,7 +229,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
Bundle param = new Bundle();
|
||||
param.putLong(KEY_FRAG_USER_ID, tweetId);
|
||||
param.putInt(KEY_FRAG_USER_MODE, USER_FRAG_RETWEET);
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(param);
|
||||
notifyDataSetChanged();
|
||||
|
@ -246,7 +247,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
userListParam.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_OWNS);
|
||||
subscriberParam.putLong(KEY_FRAG_LIST_OWNER_ID, userId);
|
||||
subscriberParam.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_SUBSCR_TO);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[1] = new UserListFragment();
|
||||
fragments[0].setArguments(userListParam);
|
||||
|
@ -266,7 +267,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
userListParam.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_OWNS);
|
||||
subscriberParam.putString(KEY_FRAG_LIST_OWNER_NAME, ownerName);
|
||||
subscriberParam.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_SUBSCR_TO);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[1] = new UserListFragment();
|
||||
fragments[0].setArguments(userListParam);
|
||||
|
@ -283,7 +284,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
Bundle param = new Bundle();
|
||||
param.putLong(KEY_FRAG_USER_ID, listId);
|
||||
param.putInt(KEY_FRAG_USER_MODE, USER_FRAG_SUBSCR);
|
||||
fragments = new Fragment[1];
|
||||
fragments = new ListFragment[1];
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(param);
|
||||
notifyDataSetChanged();
|
||||
|
@ -303,7 +304,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
userParam.putInt(KEY_FRAG_USER_MODE, USER_FRAG_LISTS);
|
||||
userParam.putBoolean(KEY_FRAG_DEL_USER, ownerOfList);
|
||||
userParam.putLong(KEY_FRAG_USER_ID, listId);
|
||||
fragments = new Fragment[2];
|
||||
fragments = new ListFragment[2];
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new UserFragment();
|
||||
fragments[0].setArguments(tweetParam);
|
||||
|
@ -315,10 +316,8 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
* called when app settings change
|
||||
*/
|
||||
public void notifySettingsChanged() {
|
||||
for (Fragment fragment : fragments) {
|
||||
if (fragment instanceof FragmentChangeObserver) {
|
||||
((FragmentChangeObserver) fragment).onReset();
|
||||
}
|
||||
for (ListFragment fragment : fragments) {
|
||||
fragment.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -328,22 +327,6 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
|
|||
* @param index tab position of page
|
||||
*/
|
||||
public void scrollToTop(int index) {
|
||||
if (fragments[index] instanceof FragmentChangeObserver) {
|
||||
((FragmentChangeObserver) fragments[index]).onTabChange();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public interface FragmentChangeObserver {
|
||||
|
||||
/**
|
||||
* called if settings changed to refresh fragments
|
||||
*/
|
||||
void onReset();
|
||||
|
||||
/**
|
||||
* called when the current tab changes
|
||||
*/
|
||||
void onTabChange();
|
||||
fragments[index].onTabChange();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.RecyclerView.Adapter;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
/**
|
||||
* this fragment class hosts a list view inside a swipe view
|
||||
* superclass for all list fragments
|
||||
*/
|
||||
public abstract class ListFragment extends Fragment implements OnRefreshListener {
|
||||
|
||||
/**
|
||||
* delay to enable swipe view in milliseconds
|
||||
*/
|
||||
private static final int REFRESH_DELAY = 500;
|
||||
|
||||
private RecyclerView list;
|
||||
private SwipeRefreshLayout reload;
|
||||
private GlobalSettings settings;
|
||||
|
||||
|
||||
@Override
|
||||
public final View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle param) {
|
||||
Context context = requireContext();
|
||||
settings = GlobalSettings.getInstance(context);
|
||||
onCreate();
|
||||
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setAdapter(initAdapter());
|
||||
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.addView(list);
|
||||
return reload;
|
||||
}
|
||||
|
||||
/**
|
||||
* enables or disables swipe layout
|
||||
*
|
||||
* @param enable true to enable swipe view delayed, false to stop immediately
|
||||
*/
|
||||
protected void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reload.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!reload.isRefreshing()) {
|
||||
reload.setRefreshing(true);
|
||||
}
|
||||
}
|
||||
}, REFRESH_DELAY);
|
||||
} else {
|
||||
reload.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check if swipe refresh is active
|
||||
*
|
||||
* @return true if swipe view is active
|
||||
*/
|
||||
protected boolean isRefreshing() {
|
||||
return reload.isRefreshing();
|
||||
}
|
||||
|
||||
/**
|
||||
* called to reset all data
|
||||
*/
|
||||
public void reset() {
|
||||
if (reload != null && list != null) {
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
list.setAdapter(list.getAdapter()); // force redrawing list
|
||||
setRefresh(true);
|
||||
}
|
||||
onReset();
|
||||
}
|
||||
|
||||
/**
|
||||
* called when this tab is deselected
|
||||
*/
|
||||
public void onTabChange() {
|
||||
if (list != null) {
|
||||
list.smoothScrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* called to initialize sub classes
|
||||
*/
|
||||
abstract void onCreate();
|
||||
|
||||
/**
|
||||
* initialize list adapter
|
||||
*
|
||||
* @return adapter for the recycler view list
|
||||
*/
|
||||
abstract Adapter<RecyclerView.ViewHolder> initAdapter();
|
||||
|
||||
/**
|
||||
* called to reset all data
|
||||
*/
|
||||
abstract void onReset();
|
||||
}
|
|
@ -2,21 +2,10 @@ package org.nuclearfog.twidda.fragment;
|
|||
|
||||
import android.app.Dialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
|
@ -27,16 +16,15 @@ import org.nuclearfog.twidda.activity.UserProfile;
|
|||
import org.nuclearfog.twidda.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter.OnItemSelected;
|
||||
import org.nuclearfog.twidda.backend.MessageListLoader;
|
||||
import org.nuclearfog.twidda.backend.TrendListLoader;
|
||||
import org.nuclearfog.twidda.backend.engine.EngineException;
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
|
||||
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
|
||||
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.activity.MessagePopup.KEY_DM_PREFIX;
|
||||
|
@ -50,10 +38,10 @@ import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DEL_M
|
|||
/**
|
||||
* Fragment class for direct message lists
|
||||
*/
|
||||
public class MessageFragment extends Fragment implements OnRefreshListener, OnItemSelected, DialogBuilder.OnDialogClick {
|
||||
public class MessageFragment extends ListFragment implements OnRefreshListener, OnItemSelected, OnDialogClick {
|
||||
|
||||
private GlobalSettings settings;
|
||||
private MessageListLoader messageTask;
|
||||
private SwipeRefreshLayout reload;
|
||||
private MessageAdapter adapter;
|
||||
private Dialog deleteDialog;
|
||||
|
||||
|
@ -61,23 +49,9 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle param) {
|
||||
Context context = inflater.getContext();
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
adapter = new MessageAdapter(this, settings);
|
||||
|
||||
RecyclerView list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
protected void onCreate() {
|
||||
settings = GlobalSettings.getInstance(requireContext());
|
||||
deleteDialog = DialogBuilder.create(requireContext(), DEL_MESSAGE, this);
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.addView(list);
|
||||
return reload;
|
||||
}
|
||||
|
||||
|
||||
|
@ -91,6 +65,13 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReset() {
|
||||
setRefresh(true);
|
||||
load(MessageListLoader.Action.DB);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (messageTask != null && messageTask.getStatus() == RUNNING)
|
||||
|
@ -109,8 +90,8 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
|
||||
@Override
|
||||
public void onTagClick(String tag) {
|
||||
if (getContext() != null && !reload.isRefreshing()) {
|
||||
Intent intent = new Intent(getContext(), SearchPage.class);
|
||||
if (!isRefreshing()) {
|
||||
Intent intent = new Intent(requireContext(), SearchPage.class);
|
||||
intent.putExtra(KEY_SEARCH_QUERY, tag);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
@ -119,27 +100,25 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
|
||||
@Override
|
||||
public void onLinkClick(String tag) {
|
||||
if (getContext() != null) {
|
||||
String shortLink = tag;
|
||||
int cut = shortLink.indexOf('?');
|
||||
if (cut > 0) {
|
||||
shortLink = shortLink.substring(0, cut);
|
||||
}
|
||||
if (LINK_PATTERN.matcher(shortLink).matches()) {
|
||||
String name = shortLink.substring(20, shortLink.indexOf('/', 20));
|
||||
long id = Long.parseLong(shortLink.substring(shortLink.lastIndexOf('/') + 1));
|
||||
Intent intent = new Intent(getContext(), TweetActivity.class);
|
||||
intent.putExtra(KEY_TWEET_ID, id);
|
||||
intent.putExtra(KEY_TWEET_NAME, name);
|
||||
String shortLink = tag;
|
||||
int cut = shortLink.indexOf('?');
|
||||
if (cut > 0) {
|
||||
shortLink = shortLink.substring(0, cut);
|
||||
}
|
||||
if (LINK_PATTERN.matcher(shortLink).matches()) {
|
||||
String name = shortLink.substring(20, shortLink.indexOf('/', 20));
|
||||
long id = Long.parseLong(shortLink.substring(shortLink.lastIndexOf('/') + 1));
|
||||
Intent intent = new Intent(requireContext(), TweetActivity.class);
|
||||
intent.putExtra(KEY_TWEET_ID, id);
|
||||
intent.putExtra(KEY_TWEET_NAME, name);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
Uri link = Uri.parse(tag);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, link);
|
||||
try {
|
||||
startActivity(intent);
|
||||
} else {
|
||||
Uri link = Uri.parse(tag);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, link);
|
||||
try {
|
||||
startActivity(intent);
|
||||
} catch (ActivityNotFoundException err) {
|
||||
Toast.makeText(requireContext(), R.string.error_connection_failed, LENGTH_SHORT).show();
|
||||
}
|
||||
} catch (ActivityNotFoundException err) {
|
||||
Toast.makeText(requireContext(), R.string.error_connection_failed, LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,10 +126,10 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
|
||||
@Override
|
||||
public void onClick(final Message message, Action action) {
|
||||
if (getContext() != null && !reload.isRefreshing()) {
|
||||
if (!isRefreshing()) {
|
||||
switch (action) {
|
||||
case ANSWER:
|
||||
Intent sendDm = new Intent(getContext(), MessagePopup.class);
|
||||
Intent sendDm = new Intent(requireContext(), MessagePopup.class);
|
||||
sendDm.putExtra(KEY_DM_PREFIX, message.getSender().getScreenname());
|
||||
startActivity(sendDm);
|
||||
break;
|
||||
|
@ -163,7 +142,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
break;
|
||||
|
||||
case PROFILE:
|
||||
Intent profile = new Intent(getContext(), UserProfile.class);
|
||||
Intent profile = new Intent(requireContext(), UserProfile.class);
|
||||
profile.putExtra(KEY_PROFILE_ID, message.getSender().getId());
|
||||
startActivity(profile);
|
||||
break;
|
||||
|
@ -171,6 +150,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onConfirm(DialogBuilder.DialogType type) {
|
||||
messageTask = new MessageListLoader(MessageFragment.this, MessageListLoader.Action.DEL);
|
||||
|
@ -196,24 +176,11 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
adapter.remove(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* called from {@link TrendListLoader} to enable or disable RefreshLayout
|
||||
*
|
||||
* @param enable true to enable RefreshLayout with delay
|
||||
*/
|
||||
public void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reload.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (messageTask != null && messageTask.getStatus() != FINISHED
|
||||
&& !reload.isRefreshing())
|
||||
reload.setRefreshing(true);
|
||||
}
|
||||
}, 500);
|
||||
} else {
|
||||
reload.setRefreshing(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MessageAdapter initAdapter() {
|
||||
adapter = new MessageAdapter(this, settings);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -222,8 +189,8 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
* @param error Twitter exception
|
||||
*/
|
||||
public void onError(EngineException error) {
|
||||
if (getContext() != null && error != null)
|
||||
ErrorHandler.handleFailure(getContext(), error);
|
||||
if (error != null)
|
||||
ErrorHandler.handleFailure(requireContext(), error);
|
||||
setRefresh(false);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,22 +1,10 @@
|
|||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.activity.SearchPage;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.adapter.TrendAdapter.TrendClickListener;
|
||||
import org.nuclearfog.twidda.backend.TrendListLoader;
|
||||
|
@ -27,39 +15,22 @@ import org.nuclearfog.twidda.database.GlobalSettings;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
|
||||
/**
|
||||
* Fragment class for trend lists
|
||||
*/
|
||||
public class TrendFragment extends Fragment implements OnRefreshListener, TrendClickListener, FragmentChangeObserver {
|
||||
public class TrendFragment extends ListFragment implements OnRefreshListener, TrendClickListener {
|
||||
|
||||
private TrendListLoader trendTask;
|
||||
private TrendAdapter adapter;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private SwipeRefreshLayout reload;
|
||||
private RecyclerView list;
|
||||
private TrendAdapter adapter;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle param) {
|
||||
Context context = inflater.getContext();
|
||||
|
||||
settings = GlobalSettings.getInstance(context);
|
||||
adapter = new TrendAdapter(this, settings);
|
||||
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.addView(list);
|
||||
return reload;
|
||||
protected void onCreate() {
|
||||
settings = GlobalSettings.getInstance(requireContext());
|
||||
}
|
||||
|
||||
|
||||
|
@ -73,6 +44,13 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReset() {
|
||||
setRefresh(true);
|
||||
load();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (trendTask != null && trendTask.getStatus() == RUNNING)
|
||||
|
@ -81,6 +59,13 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected TrendAdapter initAdapter() {
|
||||
adapter = new TrendAdapter(this, settings);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
if (trendTask != null && trendTask.getStatus() != RUNNING) {
|
||||
|
@ -91,33 +76,13 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC
|
|||
|
||||
@Override
|
||||
public void onTrendClick(TwitterTrend trend) {
|
||||
if (!reload.isRefreshing()) {
|
||||
if (!isRefreshing()) {
|
||||
Intent intent = new Intent(getContext(), SearchPage.class);
|
||||
intent.putExtra(KEY_SEARCH_QUERY, trend.getSearchString());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onReset() {
|
||||
if (reload != null && list != null && adapter != null) {
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
list.setAdapter(adapter); // force redrawing list
|
||||
adapter.clear();
|
||||
setRefresh(true);
|
||||
load();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTabChange() {
|
||||
if (list != null) {
|
||||
list.smoothScrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set trend data to list
|
||||
*
|
||||
|
@ -137,7 +102,6 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC
|
|||
return adapter.isEmpty();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* called from {@link TrendListLoader} if an error occurs
|
||||
*
|
||||
|
@ -149,26 +113,6 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC
|
|||
setRefresh(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* called from {@link TrendListLoader} to enable or disable RefreshLayout
|
||||
*
|
||||
* @param enable true to enable RefreshLayout with delay
|
||||
*/
|
||||
private void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reload.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (trendTask != null && trendTask.getStatus() != FINISHED
|
||||
&& !reload.isRefreshing())
|
||||
reload.setRefreshing(true);
|
||||
}
|
||||
}, 500);
|
||||
} else {
|
||||
reload.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* load content into the list
|
||||
*/
|
||||
|
|
|
@ -1,22 +1,12 @@
|
|||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.activity.TweetActivity;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter.TweetClickListener;
|
||||
import org.nuclearfog.twidda.backend.TweetListLoader;
|
||||
|
@ -28,7 +18,6 @@ import org.nuclearfog.twidda.database.GlobalSettings;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_ID;
|
||||
import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_NAME;
|
||||
|
@ -36,7 +25,7 @@ import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_NAME;
|
|||
/**
|
||||
* #Fragment class for a list of tweets
|
||||
*/
|
||||
public class TweetFragment extends Fragment implements OnRefreshListener, TweetClickListener, FragmentChangeObserver {
|
||||
public class TweetFragment extends ListFragment implements OnRefreshListener, TweetClickListener {
|
||||
|
||||
/**
|
||||
* Key to define what type of tweets should be loaded
|
||||
|
@ -73,27 +62,13 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
private static final int REQUEST_TWEET_CHANGED = 2;
|
||||
|
||||
private TweetListLoader tweetTask;
|
||||
private TweetAdapter adapter;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private SwipeRefreshLayout reload;
|
||||
private RecyclerView list;
|
||||
private TweetAdapter adapter;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle param) {
|
||||
Context context = inflater.getContext();
|
||||
|
||||
settings = GlobalSettings.getInstance(context);
|
||||
adapter = new TweetAdapter(this, settings);
|
||||
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setAdapter(adapter);
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.addView(list);
|
||||
return reload;
|
||||
protected void onCreate() {
|
||||
settings = GlobalSettings.getInstance(requireContext());
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,6 +82,13 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReset() {
|
||||
load(0, 0, CLEAR_LIST);
|
||||
setRefresh(true);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (tweetTask != null && tweetTask.getStatus() == RUNNING) {
|
||||
|
@ -116,6 +98,13 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected TweetAdapter initAdapter() {
|
||||
adapter = new TweetAdapter(this, settings);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int reqCode, int returnCode, @Nullable Intent intent) {
|
||||
if (intent != null && reqCode == REQUEST_TWEET_CHANGED && returnCode == RETURN_TWEET_CHANGED) {
|
||||
|
@ -139,7 +128,7 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
|
||||
@Override
|
||||
public void onTweetClick(Tweet tweet) {
|
||||
if (getContext() != null && !reload.isRefreshing()) {
|
||||
if (getContext() != null && !isRefreshing()) {
|
||||
if (tweet.getEmbeddedTweet() != null)
|
||||
tweet = tweet.getEmbeddedTweet();
|
||||
Intent tweetIntent = new Intent(getContext(), TweetActivity.class);
|
||||
|
@ -158,24 +147,6 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onReset() {
|
||||
if (reload != null && list != null && adapter != null) {
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
list.setAdapter(adapter); // force redrawing list
|
||||
load(0, 0, CLEAR_LIST);
|
||||
setRefresh(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTabChange() {
|
||||
if (list != null) {
|
||||
list.smoothScrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Tweet data to list
|
||||
*
|
||||
|
@ -205,26 +176,6 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* called from {@link TweetListLoader} to enable or disable RefreshLayout
|
||||
*
|
||||
* @param enable true to enable RefreshLayout with delay
|
||||
*/
|
||||
private void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reload.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (tweetTask != null && tweetTask.getStatus() != FINISHED
|
||||
&& !reload.isRefreshing())
|
||||
reload.setRefreshing(true);
|
||||
}
|
||||
}, 500);
|
||||
} else {
|
||||
reload.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* load content into the list
|
||||
*
|
||||
|
|
|
@ -1,25 +1,15 @@
|
|||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.adapter.UserAdapter.UserClickListener;
|
||||
import org.nuclearfog.twidda.backend.UserListLoader;
|
||||
|
@ -34,7 +24,6 @@ import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
|
|||
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
|
||||
import static org.nuclearfog.twidda.backend.UserListLoader.NO_CURSOR;
|
||||
|
@ -44,8 +33,8 @@ import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DEL_U
|
|||
/**
|
||||
* Fragment class for lists a list of users
|
||||
*/
|
||||
public class UserFragment extends Fragment implements OnRefreshListener, UserClickListener,
|
||||
FragmentChangeObserver, OnDialogClick, ListManagerCallback {
|
||||
public class UserFragment extends ListFragment implements OnRefreshListener, UserClickListener,
|
||||
OnDialogClick, ListManagerCallback {
|
||||
|
||||
/**
|
||||
* key to set the type of user list to show
|
||||
|
@ -77,9 +66,8 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
|
||||
private UserListLoader userTask;
|
||||
private UserListManager listTask;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private SwipeRefreshLayout reload;
|
||||
private RecyclerView list;
|
||||
private Dialog deleteDialog;
|
||||
private UserAdapter adapter;
|
||||
|
||||
|
@ -89,17 +77,9 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
private int mode = 0;
|
||||
private boolean delUser = false;
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle b) {
|
||||
Context context = inflater.getContext();
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
|
||||
adapter = new UserAdapter(this, settings);
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
protected void onCreate() {
|
||||
Bundle param = getArguments();
|
||||
if (param != null) {
|
||||
mode = param.getInt(KEY_FRAG_USER_MODE, 0);
|
||||
|
@ -108,11 +88,7 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
delUser = param.getBoolean(KEY_FRAG_DEL_USER, false);
|
||||
}
|
||||
deleteDialog = DialogBuilder.create(requireContext(), DEL_USER_LIST, this);
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.addView(list);
|
||||
return reload;
|
||||
settings = GlobalSettings.getInstance(requireContext());
|
||||
}
|
||||
|
||||
|
||||
|
@ -125,6 +101,12 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReset() {
|
||||
load(NO_CURSOR);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (userTask != null && userTask.getStatus() == RUNNING)
|
||||
|
@ -133,6 +115,13 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected UserAdapter initAdapter() {
|
||||
adapter = new UserAdapter(this, settings);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
if (userTask != null && userTask.getStatus() != RUNNING) {
|
||||
|
@ -143,8 +132,8 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
|
||||
@Override
|
||||
public void onUserClick(TwitterUser user) {
|
||||
if (getContext() != null && !reload.isRefreshing()) {
|
||||
Intent intent = new Intent(getContext(), UserProfile.class);
|
||||
if (!isRefreshing()) {
|
||||
Intent intent = new Intent(requireContext(), UserProfile.class);
|
||||
intent.putExtra(KEY_PROFILE_ID, user.getId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
@ -167,23 +156,6 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTabChange() {
|
||||
if (list != null) {
|
||||
list.smoothScrollToPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onReset() {
|
||||
if (list != null) {
|
||||
list.setAdapter(adapter);
|
||||
load(NO_CURSOR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onConfirm(DialogBuilder.DialogType type) {
|
||||
if (type == DEL_USER_LIST) {
|
||||
|
@ -225,34 +197,13 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
|
|||
* @param error Engine exception
|
||||
*/
|
||||
public void onError(@Nullable EngineException error) {
|
||||
if (getContext() != null && error != null) {
|
||||
ErrorHandler.handleFailure(getContext(), error);
|
||||
if (error != null) {
|
||||
ErrorHandler.handleFailure(requireContext(), error);
|
||||
}
|
||||
adapter.disableLoading();
|
||||
setRefresh(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* enables or disables swiperefresh
|
||||
*
|
||||
* @param enable true to enable RefreshLayout with delay
|
||||
*/
|
||||
private void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reload.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (userTask != null && userTask.getStatus() != FINISHED
|
||||
&& !reload.isRefreshing()) {
|
||||
reload.setRefreshing(true);
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
|
||||
} else {
|
||||
reload.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* load content into the list
|
||||
|
|
|
@ -1,27 +1,17 @@
|
|||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.ListDetail;
|
||||
import org.nuclearfog.twidda.activity.UserDetail;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.ListAdapter;
|
||||
import org.nuclearfog.twidda.adapter.ListAdapter.ListClickListener;
|
||||
import org.nuclearfog.twidda.backend.TwitterListLoader;
|
||||
|
@ -33,7 +23,6 @@ import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
|
|||
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.activity.ListDetail.KEY_CURRENT_USER_OWNS;
|
||||
import static org.nuclearfog.twidda.activity.ListDetail.KEY_LISTDETAIL_DESCR;
|
||||
|
@ -55,8 +44,8 @@ import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.LIST_
|
|||
/**
|
||||
* Fragment class for user lists
|
||||
*/
|
||||
public class UserListFragment extends Fragment implements OnRefreshListener, ListClickListener,
|
||||
FragmentChangeObserver, OnDialogClick {
|
||||
public class UserListFragment extends ListFragment implements OnRefreshListener,
|
||||
ListClickListener, OnDialogClick {
|
||||
|
||||
/**
|
||||
* Key for the owner ID
|
||||
|
@ -85,34 +74,19 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
public static final int LIST_USER_SUBSCR_TO = 2;
|
||||
|
||||
private TwitterListLoader listTask;
|
||||
|
||||
private SwipeRefreshLayout reloadLayout;
|
||||
private RecyclerView list;
|
||||
private ListAdapter adapter;
|
||||
private GlobalSettings settings;
|
||||
|
||||
private Dialog followDialog, deleteDialog;
|
||||
private ListAdapter adapter;
|
||||
|
||||
private long selectedList;
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle param) {
|
||||
Context context = inflater.getContext();
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
adapter = new ListAdapter(this, settings);
|
||||
|
||||
list = new RecyclerView(inflater.getContext());
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
protected void onCreate() {
|
||||
settings = GlobalSettings.getInstance(requireContext());
|
||||
followDialog = DialogBuilder.create(requireContext(), LIST_UNFOLLOW, this);
|
||||
deleteDialog = DialogBuilder.create(requireContext(), LIST_DELETE, this);
|
||||
reloadLayout = new SwipeRefreshLayout(context);
|
||||
reloadLayout.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reloadLayout.setOnRefreshListener(this);
|
||||
reloadLayout.addView(list);
|
||||
return reloadLayout;
|
||||
}
|
||||
|
||||
|
||||
|
@ -126,6 +100,13 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onReset() {
|
||||
setRefresh(true);
|
||||
load(NO_CURSOR);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (listTask != null && listTask.getStatus() == RUNNING)
|
||||
|
@ -144,10 +125,10 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
|
||||
@Override
|
||||
public void onClick(final TwitterList listItem, Action action) {
|
||||
if (getContext() != null && !reloadLayout.isRefreshing()) {
|
||||
if (isRefreshing()) {
|
||||
switch (action) {
|
||||
case PROFILE:
|
||||
Intent profile = new Intent(getContext(), UserProfile.class);
|
||||
Intent profile = new Intent(requireContext(), UserProfile.class);
|
||||
profile.putExtra(KEY_PROFILE_ID, listItem.getListOwner().getId());
|
||||
startActivity(profile);
|
||||
break;
|
||||
|
@ -166,14 +147,14 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
break;
|
||||
|
||||
case SUBSCRIBER:
|
||||
Intent subscriberIntent = new Intent(getContext(), UserDetail.class);
|
||||
Intent subscriberIntent = new Intent(requireContext(), UserDetail.class);
|
||||
subscriberIntent.putExtra(KEY_USERDETAIL_ID, listItem.getId());
|
||||
subscriberIntent.putExtra(KEY_USERDETAIL_MODE, USERLIST_SUBSCRBR);
|
||||
startActivity(subscriberIntent);
|
||||
break;
|
||||
|
||||
case MEMBER:
|
||||
Intent listIntent = new Intent(getContext(), ListDetail.class);
|
||||
Intent listIntent = new Intent(requireContext(), ListDetail.class);
|
||||
listIntent.putExtra(KEY_CURRENT_USER_OWNS, listItem.isListOwner());
|
||||
listIntent.putExtra(KEY_LISTDETAIL_ID, listItem.getId());
|
||||
listIntent.putExtra(KEY_LISTDETAIL_TITLE, listItem.getTitle());
|
||||
|
@ -205,6 +186,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onFooterClick(long cursor) {
|
||||
if (listTask != null && listTask.getStatus() != RUNNING) {
|
||||
load(cursor);
|
||||
|
@ -213,20 +195,9 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
|
||||
|
||||
@Override
|
||||
public void onReset() {
|
||||
if (list != null) {
|
||||
list.setAdapter(adapter);
|
||||
setRefresh(true);
|
||||
load(NO_CURSOR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTabChange() {
|
||||
if (list != null) {
|
||||
list.smoothScrollToPosition(0);
|
||||
}
|
||||
protected ListAdapter initAdapter() {
|
||||
adapter = new ListAdapter(this, settings);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -257,25 +228,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
adapter.removeItem(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* called from {@link TwitterListLoader} to enable or disable RefreshLayout
|
||||
*
|
||||
* @param enable true to enable RefreshLayout with delay
|
||||
*/
|
||||
private void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reloadLayout.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (listTask != null && listTask.getStatus() != FINISHED
|
||||
&& !reloadLayout.isRefreshing())
|
||||
reloadLayout.setRefreshing(true);
|
||||
}
|
||||
}, 500);
|
||||
} else {
|
||||
reloadLayout.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* called from {@link TwitterListLoader} if an error occurs
|
||||
|
@ -283,8 +236,8 @@ public class UserListFragment extends Fragment implements OnRefreshListener, Lis
|
|||
* @param error Twitter exception
|
||||
*/
|
||||
public void onError(@Nullable EngineException error) {
|
||||
if (getContext() != null && error != null)
|
||||
ErrorHandler.handleFailure(getContext(), error);
|
||||
if (error != null)
|
||||
ErrorHandler.handleFailure(requireContext(), error);
|
||||
adapter.disableLoading();
|
||||
setRefresh(false);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue