Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 153acbcf authored by Jason Monk's avatar Jason Monk
Browse files

Use id directly when extensions change fragments

This avoids a crash if the fragment hasn't been created yet.

Test: manual
Change-Id: I0799c50a3482c3c60fd0e27d486db5214e92f183
Fixes: 37855553
parent ca35ed5c
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -34,12 +34,14 @@ public class ExtensionFragmentListener<T extends FragmentBase> implements Consum
    private final FragmentHostManager mFragmentHostManager;
    private final String mTag;
    private final Extension<T> mExtension;
    private final int mId;
    private String mOldClass;

    private ExtensionFragmentListener(View view, String tag, int id, Extension<T> extension) {
        mTag = tag;
        mFragmentHostManager = FragmentHostManager.get(view);
        mExtension = extension;
        mId = id;
        mFragmentHostManager.getFragmentManager().beginTransaction()
                .replace(id, (Fragment) mExtension.get(), mTag)
                .commit();
@@ -49,7 +51,7 @@ public class ExtensionFragmentListener<T extends FragmentBase> implements Consum
    public void accept(T extension) {
        try {
            Fragment.class.cast(extension);
            mFragmentHostManager.getExtensionManager().setCurrentExtension(mTag,
            mFragmentHostManager.getExtensionManager().setCurrentExtension(mId, mTag,
                    mOldClass, extension.getClass().getName(), mExtension.getContext());
            mOldClass = extension.getClass().getName();
        } catch (ClassCastException e) {
+2 −4
Original line number Diff line number Diff line
@@ -266,16 +266,14 @@ public class FragmentHostManager {
    class ExtensionFragmentManager {
        private final ArrayMap<String, Context> mExtensionLookup = new ArrayMap<>();

        public void setCurrentExtension(@NonNull  String tag, @Nullable String oldClass,
        public void setCurrentExtension(int id, @NonNull  String tag, @Nullable String oldClass,
                @NonNull String currentClass, @Nullable Context context) {
            Fragment fragment = getFragmentManager().findFragmentByTag(tag);
            if (oldClass != null) {
                mExtensionLookup.remove(oldClass);
            }
            mExtensionLookup.put(currentClass, context);
            getFragmentManager().beginTransaction()
                    .replace(((View) fragment.getView().getParent()).getId(),
                            instantiate(context, currentClass, null), tag)
                    .replace(id, instantiate(context, currentClass, null), tag)
                    .commit();
            reloadFragments();
        }