X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fprofiles%2FProfileDetailFragment.java;h=fce5967ff6d0242ada1e59c7a6949dd4bd83cff7;hb=860e0419d619210bb59bcae1b64d8c5db90eef70;hp=100918956c71b71659185b47464182393596237d;hpb=5df10dc0b58df4d4be4e9ab34f1e0f477ca46766;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfileDetailFragment.java b/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfileDetailFragment.java index 10091895..fce5967f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfileDetailFragment.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfileDetailFragment.java @@ -45,6 +45,7 @@ import com.google.android.material.textfield.TextInputLayout; import net.ktnx.mobileledger.BuildConfig; import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.dao.BaseDAO; import net.ktnx.mobileledger.dao.ProfileDAO; import net.ktnx.mobileledger.databinding.ProfileDetailBinding; import net.ktnx.mobileledger.db.DB; @@ -63,6 +64,7 @@ import org.jetbrains.annotations.NotNull; import java.net.MalformedURLException; import java.net.URL; import java.util.List; +import java.util.Objects; import static net.ktnx.mobileledger.utils.Logger.debug; @@ -80,7 +82,6 @@ public class ProfileDetailFragment extends Fragment { public static final String ARG_HUE = "hue"; @NonNls - private Profile mProfile; private boolean defaultCommoditySet; private boolean syncingModelFromUI = false; private ProfileDetailBinding binding; @@ -100,21 +101,37 @@ public class ProfileDetailFragment extends Fragment { menuDeleteProfile.setOnMenuItemClickListener(item -> onDeleteProfile()); final List profiles = Data.profiles.getValue(); - if (BuildConfig.DEBUG) { - final MenuItem menuWipeProfileData = menu.findItem(R.id.menuWipeData); + final MenuItem menuWipeProfileData = menu.findItem(R.id.menuWipeData); + if (BuildConfig.DEBUG) menuWipeProfileData.setOnMenuItemClickListener(ignored -> onWipeDataMenuClicked()); - menuWipeProfileData.setVisible(mProfile != null); - } + + getModel().getProfileId() + .observe(getViewLifecycleOwner(), id -> { + menuDeleteProfile.setVisible(id > 0); + if (BuildConfig.DEBUG) + menuWipeProfileData.setVisible(id > 0); + }); } private boolean onDeleteProfile() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(mProfile.getName()); + @NotNull ProfileDetailModel model = getModel(); + builder.setTitle(model.getProfileName()); builder.setMessage(R.string.remove_profile_dialog_message); builder.setPositiveButton(R.string.Remove, (dialog, which) -> { - debug("profiles", String.format("[fragment] removing profile %s", mProfile.getId())); + final long profileId = Objects.requireNonNull(model.getProfileId() + .getValue()); + debug("profiles", String.format("[fragment] removing profile %s", profileId)); ProfileDAO dao = DB.get() .getProfileDAO(); - dao.delete(mProfile, () -> dao.updateOrderSync(dao.getAllOrderedSync())); + dao.getById(profileId) + .observe(getViewLifecycleOwner(), profile -> { + if (profile != null) + BaseDAO.runAsync(() -> DB.get() + .runInTransaction(() -> { + dao.deleteSync(profile); + dao.updateOrderSync(dao.getAllOrderedSync()); + })); + }); final FragmentActivity activity = getActivity(); if (activity != null) @@ -125,7 +142,14 @@ public class ProfileDetailFragment extends Fragment { } private boolean onWipeDataMenuClicked() { // this is a development option, so no confirmation - mProfile.wipeAllData(); + DB.get() + .getProfileDAO() + .getById(Objects.requireNonNull(getModel().getProfileId() + .getValue())) + .observe(getViewLifecycleOwner(), profile -> { + if (profile != null) + profile.wipeAllData(); + }); return true; } private void hookTextChangeSyncRoutine(TextView view, TextChangeSyncRoutine syncRoutine) { @@ -373,16 +397,15 @@ public class ProfileDetailFragment extends Fragment { ProfileDAO dao = DB.get() .getProfileDAO(); - if (mProfile != null) { - model.updateProfile(mProfile); - dao.update(mProfile, null); + Profile profile = new Profile(); + model.updateProfile(profile); + if (profile.getId() > 0) { + dao.update(profile); debug("profiles", "profile stored in DB"); // debug("profiles", String.format("Selected item is %d", mProfile.getThemeHue())); } else { - mProfile = new Profile(); - model.updateProfile(mProfile); - dao.insertLast(mProfile, null); + dao.insertLast(profile, null); } Activity activity = getActivity();