Safely reference parent fragment from adapters

pull/157/head
M66B 6 years ago
parent 0d5b1e2bac
commit 72db63e979

@ -40,7 +40,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
@ -53,9 +57,11 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHolder> {
private Fragment parentFragment;
private boolean settings;
private Context context;
private LifecycleOwner owner;
private boolean settings;
private LayoutInflater inflater;
private int colorUnread;
@ -270,16 +276,28 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
}
}
AdapterAccount(Context context, LifecycleOwner owner, boolean settings) {
this.context = context;
this.owner = owner;
AdapterAccount(final Fragment parentFragment, boolean settings) {
this.parentFragment = parentFragment;
this.settings = settings;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
this.colorUnread = Helper.resolveColor(context, R.attr.colorUnread);
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterAccount.this + " parent destroyed");
AdapterAccount.this.parentFragment = null;
AdapterAccount.this.context = null;
AdapterAccount.this.owner = null;
}
});
}
public void set(@NonNull List<TupleAccountEx> accounts) {

@ -31,7 +31,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
@ -41,6 +45,8 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
@ -160,12 +166,25 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
}
}
AdapterAnswer(Context context, LifecycleOwner owner) {
this.context = context;
this.owner = owner;
AdapterAnswer(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterAnswer.this + " parent destroyed");
AdapterAnswer.this.parentFragment = null;
AdapterAnswer.this.context = null;
AdapterAnswer.this.owner = null;
}
});
new SimpleTask<Boolean>() {
@Override
protected Boolean onExecute(Context context, Bundle args) {

@ -38,7 +38,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DiffUtil;
@ -55,9 +59,11 @@ import java.util.Comparator;
import java.util.List;
public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LayoutInflater inflater;
private LifecycleOwner owner;
private LayoutInflater inflater;
private boolean readonly;
private boolean debug;
@ -277,14 +283,28 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
}
}
AdapterAttachment(Context context, LifecycleOwner owner, boolean readonly) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.context = context;
this.inflater = LayoutInflater.from(context);
this.owner = owner;
AdapterAttachment(Fragment parentFragment, boolean readonly) {
this.parentFragment = parentFragment;
this.readonly = readonly;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.debug = prefs.getBoolean("debug", false);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterAttachment.this + " parent destroyed");
AdapterAttachment.this.parentFragment = null;
AdapterAttachment.this.context = null;
AdapterAttachment.this.owner = null;
}
});
}
public void set(@NonNull List<EntityAttachment> attachments) {

@ -33,7 +33,11 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
@ -43,6 +47,8 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
@ -225,14 +231,28 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
}
}
AdapterContact(Context context, LifecycleOwner owner) {
this.context = context;
this.owner = owner;
AdapterContact(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
this.contacts = Helper.hasPermission(context, Manifest.permission.READ_CONTACTS);
this.colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterContact.this + " parent destroyed");
AdapterContact.this.parentFragment = null;
AdapterContact.this.context = null;
AdapterContact.this.owner = null;
}
});
}
public void set(@NonNull List<TupleContactEx> contacts) {

@ -44,7 +44,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DiffUtil;
@ -63,15 +66,15 @@ import java.util.Map;
import static android.app.Activity.RESULT_OK;
public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private LifecycleOwner owner;
private Fragment parentFragment;
private boolean show_hidden;
private long account;
private boolean show_hidden;
private IFolderSelectedListener listener;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
private boolean subscriptions;
private boolean debug;
private int dp12;
@ -599,16 +602,16 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
}
}
AdapterFolder(Context context, LifecycleOwner owner, Fragment parentFragment,
long account, boolean show_hidden, IFolderSelectedListener listener) {
this.context = context;
this.inflater = LayoutInflater.from(context);
this.owner = owner;
AdapterFolder(Fragment parentFragment, long account, boolean show_hidden, IFolderSelectedListener listener) {
this.parentFragment = parentFragment;
this.show_hidden = show_hidden;
this.account = account;
this.show_hidden = show_hidden;
this.listener = listener;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean compact = prefs.getBoolean("compact", false);
int zoom = prefs.getInt("zoom", compact ? 0 : 1);
@ -624,6 +627,16 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterFolder.this + " parent destroyed");
AdapterFolder.this.parentFragment = null;
AdapterFolder.this.context = null;
AdapterFolder.this.owner = null;
}
});
}
void setShowHidden(boolean show_hidden) {

@ -33,7 +33,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
@ -49,6 +53,7 @@ import java.util.List;
import java.util.Locale;
public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
@ -206,11 +211,23 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
}
}
AdapterIdentity(Context context, LifecycleOwner owner) {
this.context = context;
this.owner = owner;
AdapterIdentity(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterIdentity.this + " parent destroyed");
AdapterIdentity.this.parentFragment = null;
AdapterIdentity.this.context = null;
AdapterIdentity.this.owner = null;
}
});
}
public void set(@NonNull List<TupleIdentityEx> identities) {

@ -35,7 +35,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
@ -49,10 +53,10 @@ import java.util.Comparator;
import java.util.List;
public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LayoutInflater inflater;
private LifecycleOwner owner;
private View parentView;
private List<EntityAttachment> items = new ArrayList<>();
@ -132,7 +136,7 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
// Check if viewer available
if (ris.size() == 0) {
Snackbar.make(
parentView,
parentFragment.getView(),
context.getString(R.string.title_no_viewer, attachment.type),
Snackbar.LENGTH_LONG).show();
return;
@ -178,12 +182,23 @@ public class AdapterImage extends RecyclerView.Adapter<AdapterImage.ViewHolder>
}
}
AdapterImage(Context context, LifecycleOwner owner, View parentView) {
this.context = context;
AdapterImage(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
this.owner = owner;
this.parentView = parentView;
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterImage.this + " parent destroyed");
AdapterImage.this.parentFragment = null;
AdapterImage.this.context = null;
AdapterImage.this.owner = null;
}
});
}
public void set(@NonNull List<EntityAttachment> attachments) {

@ -26,6 +26,11 @@ import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
@ -36,7 +41,9 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
private List<EntityLog> items = new ArrayList<>();
@ -61,10 +68,23 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
}
AdapterLog(Context context) {
this.context = context;
this.inflater = LayoutInflater.from(context);
AdapterLog(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(parentFragment.getContext());
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterLog.this + " parent destroyed");
AdapterLog.this.parentFragment = null;
AdapterLog.this.context = null;
AdapterLog.this.owner = null;
}
});
}
public void set(@NonNull List<EntityLog> logs) {

@ -145,19 +145,19 @@ import biweekly.util.ICalDate;
import static android.app.Activity.RESULT_OK;
public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private LifecycleOwner owner;
private Fragment parentFragment;
private ViewType viewType;
private boolean compact;
private int zoom;
private String sort;
private boolean filter_duplicates;
private boolean suitable;
private int answers = -1;
private IProperties properties;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
private boolean suitable;
private int dp36;
private int colorPrimary;
private int colorAccent;
@ -182,6 +182,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private boolean authentication;
private static boolean debug;
private int answers = -1;
private boolean gotoTop = false;
private AsyncPagedListDiffer<TupleMessageEx> differ;
private SelectionTracker<Long> selectionTracker = null;
@ -389,7 +390,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
rvAttachment.setLayoutManager(llm);
rvAttachment.setItemAnimator(null);
adapterAttachment = new AdapterAttachment(context, owner, true);
adapterAttachment = new AdapterAttachment(parentFragment, true);
rvAttachment.setAdapter(adapterAttachment);
cbInline = attachments.findViewById(R.id.cbInline);
@ -416,7 +417,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
StaggeredGridLayoutManager sglm =
new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
rvImage.setLayoutManager(sglm);
adapterImage = new AdapterImage(context, owner, parentFragment.getView());
adapterImage = new AdapterImage(parentFragment);
rvImage.setAdapter(adapterImage);
grpAddresses = vsBody.findViewById(R.id.grpAddresses);
@ -2998,24 +2999,23 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}
}
AdapterMessage(Context context, LifecycleOwner owner, Fragment parentFragment,
ViewType viewType, boolean compact, int zoom, String sort, boolean filter_duplicates, final IProperties properties) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.TF = Helper.getTimeInstance(context, SimpleDateFormat.SHORT);
this.context = context;
this.owner = owner;
this.inflater = LayoutInflater.from(context);
AdapterMessage(Fragment parentFragment,
ViewType viewType, boolean compact, int zoom, String sort, boolean filter_duplicates,
final IProperties properties) {
this.parentFragment = parentFragment;
this.viewType = viewType;
this.compact = compact;
this.zoom = zoom;
this.sort = sort;
this.filter_duplicates = filter_duplicates;
this.suitable = ConnectionHelper.getNetworkState(context).isSuitable();
this.properties = properties;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.suitable = ConnectionHelper.getNetworkState(context).isSuitable();
this.inflater = LayoutInflater.from(context);
this.TF = Helper.getTimeInstance(context, SimpleDateFormat.SHORT);
this.dp36 = Helper.dp2pixels(context, 36);
this.colorPrimary = Helper.resolveColor(context, R.attr.colorPrimary);
this.colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
@ -3027,6 +3027,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.contacts = Helper.hasPermission(context, Manifest.permission.READ_CONTACTS);
this.textSize = Helper.getTextSize(context, zoom);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.date = prefs.getBoolean("date", true);
this.threading = prefs.getBoolean("threading", true);
this.avatars = (prefs.getBoolean("avatars", true) ||
@ -3053,6 +3054,16 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}
}
});
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterMessage.this + " parent destroyed");
AdapterMessage.this.parentFragment = null;
AdapterMessage.this.context = null;
AdapterMessage.this.owner = null;
}
});
}
void gotoTop() {

@ -30,7 +30,11 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DiffUtil;
@ -44,9 +48,10 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LayoutInflater inflater;
private LifecycleOwner owner;
private LayoutInflater inflater;
private boolean debug;
@ -207,15 +212,26 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
}
}
AdapterOperation(Context context, LifecycleOwner owner) {
this.context = context;
AdapterOperation(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
this.owner = owner;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.debug = prefs.getBoolean("debug", false);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterOperation.this + " parent destroyed");
AdapterOperation.this.parentFragment = null;
AdapterOperation.this.context = null;
AdapterOperation.this.owner = null;
}
});
}
public void set(@NonNull List<TupleOperationEx> operations) {

@ -26,7 +26,11 @@ import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
@ -37,6 +41,7 @@ import java.util.List;
import java.util.Objects;
public class AdapterOrder extends RecyclerView.Adapter<AdapterOrder.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
@ -63,11 +68,23 @@ public class AdapterOrder extends RecyclerView.Adapter<AdapterOrder.ViewHolder>
}
}
AdapterOrder(Context context, LifecycleOwner owner) {
this.context = context;
this.owner = owner;
AdapterOrder(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterOrder.this + " parent destroyed");
AdapterOrder.this.parentFragment = null;
AdapterOrder.this.context = null;
AdapterOrder.this.owner = null;
}
});
}
public void set(@NonNull List<EntityOrder> items) {

@ -33,7 +33,11 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
@ -51,10 +55,10 @@ import java.util.List;
import javax.mail.MessagingException;
public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
private View parentView;
private List<TupleRuleEx> items = new ArrayList<>();
@ -262,7 +266,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
@Override
protected void onExecuted(Bundle args, Integer applied) {
Snackbar.make(
parentView,
parentFragment.getView(),
context.getString(R.string.title_rule_applied, applied),
Snackbar.LENGTH_LONG).show();
}
@ -281,12 +285,23 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
}
}
AdapterRule(Context context, LifecycleOwner owner, View parentView) {
this.context = context;
this.owner = owner;
AdapterRule(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
this.parentView = parentView;
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterRule.this + " parent destroyed");
AdapterRule.this.parentFragment = null;
AdapterRule.this.context = null;
AdapterRule.this.owner = null;
}
});
}
public void set(@NonNull List<TupleRuleEx> rules) {

@ -26,7 +26,11 @@ import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
@ -37,6 +41,7 @@ import java.util.ArrayList;
import java.util.List;
public class AdapterRuleMatch extends RecyclerView.Adapter<AdapterRuleMatch.ViewHolder> {
private Fragment parentFragment;
private Context context;
private LifecycleOwner owner;
private LayoutInflater inflater;
@ -70,11 +75,23 @@ public class AdapterRuleMatch extends RecyclerView.Adapter<AdapterRuleMatch.View
}
}
AdapterRuleMatch(Context context, LifecycleOwner owner) {
this.context = context;
this.owner = owner;
AdapterRuleMatch(Fragment parentFragment) {
this.parentFragment = parentFragment;
this.context = parentFragment.getContext();
this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(context);
setHasStableIds(true);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i(AdapterRuleMatch.this + " parent destroyed");
AdapterRuleMatch.this.parentFragment = null;
AdapterRuleMatch.this.context = null;
AdapterRuleMatch.this.owner = null;
}
});
}
public void set(@NonNull List<EntityMessage> messages) {

@ -92,7 +92,7 @@ public class FragmentAccounts extends FragmentBase {
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvAccount.addItemDecoration(itemDecorator);
adapter = new AdapterAccount(getContext(), getViewLifecycleOwner(), settings);
adapter = new AdapterAccount(this, settings);
rvAccount.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {

@ -70,7 +70,7 @@ public class FragmentAnswers extends FragmentBase {
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvAnswer.addItemDecoration(itemDecorator);
adapter = new AdapterAnswer(getContext(), getViewLifecycleOwner());
adapter = new AdapterAnswer(this);
rvAnswer.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {

@ -529,7 +529,7 @@ public class FragmentCompose extends FragmentBase {
rvAttachment.setLayoutManager(llm);
rvAttachment.setItemAnimator(null);
adapter = new AdapterAttachment(getContext(), getViewLifecycleOwner(), false);
adapter = new AdapterAttachment(this, false);
rvAttachment.setAdapter(adapter);
tvNoInternetAttachments.setVisibility(View.GONE);

@ -75,7 +75,7 @@ public class FragmentContacts extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvContacts.setLayoutManager(llm);
adapter = new AdapterContact(getContext(), getViewLifecycleOwner());
adapter = new AdapterContact(this);
rvContacts.setAdapter(adapter);
// Initialize

@ -77,7 +77,7 @@ public class FragmentDialogFolder extends DialogFragment {
long account = args.getLong("account");
AdapterFolder adapter = new AdapterFolder(
getContext(), getActivity(), FragmentDialogFolder.this,
FragmentDialogFolder.this,
account, false, new AdapterFolder.IFolderSelectedListener() {
@Override
public void onFolderSelected(TupleFolderEx folder) {

@ -150,9 +150,7 @@ public class FragmentFolders extends FragmentBase {
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvFolder.addItemDecoration(itemDecorator);
adapter = new AdapterFolder(
getContext(), getViewLifecycleOwner(), this,
account, show_hidden, null);
adapter = new AdapterFolder(this, account, show_hidden, null);
rvFolder.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {

@ -72,7 +72,7 @@ public class FragmentIdentities extends FragmentBase {
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvIdentity.addItemDecoration(itemDecorator);
adapter = new AdapterIdentity(getContext(), getViewLifecycleOwner());
adapter = new AdapterIdentity(this);
rvIdentity.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {

@ -65,7 +65,7 @@ public class FragmentLogs extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvLog.setLayoutManager(llm);
adapter = new AdapterLog(getContext());
adapter = new AdapterLog(this);
rvLog.setAdapter(adapter);
// Initialize

@ -529,9 +529,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
String sort = prefs.getString("sort", "time");
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", false);
adapter = new AdapterMessage(
getContext(), getViewLifecycleOwner(), this,
viewType, compact, zoom, sort, filter_duplicates, iProperties);
adapter = new AdapterMessage(this, viewType, compact, zoom, sort, filter_duplicates, iProperties);
rvMessage.setAdapter(adapter);
seekBar.setOnTouchListener(new View.OnTouchListener() {

@ -74,7 +74,7 @@ public class FragmentOperations extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvOperation.setLayoutManager(llm);
adapter = new AdapterOperation(getContext(), getViewLifecycleOwner());
adapter = new AdapterOperation(this);
rvOperation.setAdapter(adapter);
// Initialize

@ -78,7 +78,7 @@ public class FragmentOrder extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvOrder.setLayoutManager(llm);
adapter = new AdapterOrder(getContext(), getViewLifecycleOwner());
adapter = new AdapterOrder(this);
rvOrder.setAdapter(adapter);
new ItemTouchHelper(touchHelper).attachToRecyclerView(rvOrder);

@ -638,7 +638,7 @@ public class FragmentRule extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvMessage.setLayoutManager(llm);
final AdapterRuleMatch adapter = new AdapterRuleMatch(getContext(), getViewLifecycleOwner());
final AdapterRuleMatch adapter = new AdapterRuleMatch(this);
rvMessage.setAdapter(adapter);
tvNoMessages.setVisibility(View.GONE);

@ -78,7 +78,7 @@ public class FragmentRules extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvRule.setLayoutManager(llm);
adapter = new AdapterRule(getContext(), getViewLifecycleOwner(), view);
adapter = new AdapterRule(this);
rvRule.setAdapter(adapter);
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation());

Loading…
Cancel
Save