From: Damyan Ivanov Date: Thu, 19 Dec 2019 20:05:56 +0000 (+0200) Subject: profile details fragment: move setup from onCreate to onActivityCreated X-Git-Tag: v0.12.0~142 X-Git-Url: https://git.ktnx.net/?a=commitdiff_plain;h=35f511dbf3d90942c33c9524e891dfdbcde4579e;p=mobile-ledger.git profile details fragment: move setup from onCreate to onActivityCreated this is what the docs suggest and it fixes a problem with the toolbar title changing to from profile name to 'Profile details' when the screen is rotated. This is because the title is set during the setup and onCreate isn't necessarily run when the screen is rotated (contrary to onActivityCreated which is re-run since the activity is re-created on reconfiguration (of which screen rotation is an instance)) --- 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 3f74bfa2..8ec562b6 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 @@ -168,8 +168,11 @@ public class ProfileDetailFragment extends Fragment implements HueRingDialog.Hue Data.profile.setValue(newProfile); } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + Activity context = getActivity(); + if (context == null) + return; if ((getArguments() != null) && getArguments().containsKey(ARG_ITEM_ID)) { int index = getArguments().getInt(ARG_ITEM_ID, -1); @@ -188,118 +191,60 @@ public class ProfileDetailFragment extends Fragment implements HueRingDialog.Hue appBarLayout.setTitle(getResources().getString(R.string.new_profile_title)); } } - } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - Activity context = getActivity(); - if (context == null) - return; FloatingActionButton fab = context.findViewById(R.id.fab); fab.setOnClickListener(v -> onSaveFabClicked()); - - profileName.requestFocus(); - } - private void onSaveFabClicked() { - if (!checkValidity()) - return; - - if (mProfile != null) { - updateProfileFromUI(); -// debug("profiles", String.format("Selected item is %d", mProfile.getThemeId())); - mProfile.storeInDB(); - debug("profiles", "profile stored in DB"); - triggerProfileChange(); - } - else { - mProfile = new MobileLedgerProfile(); - updateProfileFromUI(); - mProfile.storeInDB(); - final ArrayList profiles = Data.profiles.getValue(); - if (profiles == null) - throw new AssertionError(); - ArrayList newList = new ArrayList<>(profiles); - newList.add(mProfile); - Data.profiles.setValue(newList); - MobileLedgerProfile.storeProfilesOrder(); - - // first profile ever? - if (newList.size() == 1) - Data.profile.setValue(mProfile); - } - - Activity activity = getActivity(); - if (activity != null) - activity.finish(); - } - private void updateProfileFromUI() { - mProfile.setName(profileName.getText()); - mProfile.setUrl(url.getText()); - mProfile.setPostingPermitted(postingPermitted.isChecked()); - mProfile.setPreferredAccountsFilter(preferredAccountsFilter.getText()); - mProfile.setAuthEnabled(useAuthentication.isChecked()); - mProfile.setAuthUserName(userName.getText()); - mProfile.setAuthPassword(password.getText()); - mProfile.setThemeId(huePickerView.getTag()); - mProfile.setFutureDates(futureDates); - } - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.profile_detail, container, false); - - profileName = rootView.findViewById(R.id.profile_name); - profileNameLayout = rootView.findViewById(R.id.profile_name_layout); - url = rootView.findViewById(R.id.url); - urlLayout = rootView.findViewById(R.id.url_layout); - postingPermitted = rootView.findViewById(R.id.profile_permit_posting); - futureDatesLayout = rootView.findViewById(R.id.future_dates_layout); - futureDatesText = rootView.findViewById(R.id.future_dates_text); - rootView.findViewById(R.id.future_dates_layout) - .setOnClickListener(v -> { - MenuInflater mi = new MenuInflater(getContext()); - PopupMenu menu = new PopupMenu(getContext(), v); - menu.inflate(R.menu.future_dates); - menu.setOnMenuItemClickListener(item -> { - switch (item.getItemId()) { - case R.id.menu_future_dates_30: - futureDates = MobileLedgerProfile.FutureDates.OneMonth; - break; - case R.id.menu_future_dates_60: - futureDates = MobileLedgerProfile.FutureDates.TwoMonths; - break; - case R.id.menu_future_dates_90: - futureDates = MobileLedgerProfile.FutureDates.ThreeMonths; - break; - case R.id.menu_future_dates_180: - futureDates = MobileLedgerProfile.FutureDates.SixMonths; - break; - case R.id.menu_future_dates_365: - futureDates = MobileLedgerProfile.FutureDates.OneYear; - break; - case R.id.menu_future_dates_all: - futureDates = MobileLedgerProfile.FutureDates.All; - break; - default: - futureDates = MobileLedgerProfile.FutureDates.None; - } - futureDatesText.setText(futureDates.getText(getResources())); - return true; - }); - menu.show(); - }); - authParams = rootView.findViewById(R.id.auth_params); - useAuthentication = rootView.findViewById(R.id.enable_http_auth); - userName = rootView.findViewById(R.id.auth_user_name); - userNameLayout = rootView.findViewById(R.id.auth_user_name_layout); - password = rootView.findViewById(R.id.password); - passwordLayout = rootView.findViewById(R.id.password_layout); - huePickerView = rootView.findViewById(R.id.btn_pick_ring_color); - preferredAccountsFilter = rootView.findViewById(R.id.preferred_accounts_filter_filter); + profileName = context.findViewById(R.id.profile_name); + profileNameLayout = context.findViewById(R.id.profile_name_layout); + url = context.findViewById(R.id.url); + urlLayout = context.findViewById(R.id.url_layout); + postingPermitted = context.findViewById(R.id.profile_permit_posting); + futureDatesLayout = context.findViewById(R.id.future_dates_layout); + futureDatesText = context.findViewById(R.id.future_dates_text); + context.findViewById(R.id.future_dates_layout) + .setOnClickListener(v -> { + MenuInflater mi = new MenuInflater(context); + PopupMenu menu = new PopupMenu(context, v); + menu.inflate(R.menu.future_dates); + menu.setOnMenuItemClickListener(item -> { + switch (item.getItemId()) { + case R.id.menu_future_dates_30: + futureDates = MobileLedgerProfile.FutureDates.OneMonth; + break; + case R.id.menu_future_dates_60: + futureDates = MobileLedgerProfile.FutureDates.TwoMonths; + break; + case R.id.menu_future_dates_90: + futureDates = MobileLedgerProfile.FutureDates.ThreeMonths; + break; + case R.id.menu_future_dates_180: + futureDates = MobileLedgerProfile.FutureDates.SixMonths; + break; + case R.id.menu_future_dates_365: + futureDates = MobileLedgerProfile.FutureDates.OneYear; + break; + case R.id.menu_future_dates_all: + futureDates = MobileLedgerProfile.FutureDates.All; + break; + default: + futureDates = MobileLedgerProfile.FutureDates.None; + } + futureDatesText.setText(futureDates.getText(getResources())); + return true; + }); + menu.show(); + }); + authParams = context.findViewById(R.id.auth_params); + useAuthentication = context.findViewById(R.id.enable_http_auth); + userName = context.findViewById(R.id.auth_user_name); + userNameLayout = context.findViewById(R.id.auth_user_name_layout); + password = context.findViewById(R.id.password); + passwordLayout = context.findViewById(R.id.password_layout); + huePickerView = context.findViewById(R.id.btn_pick_ring_color); + preferredAccountsFilter = context.findViewById(R.id.preferred_accounts_filter_filter); preferredAccountsFilterLayout = - rootView.findViewById(R.id.preferred_accounts_accounts_filter_layout); - insecureWarningText = rootView.findViewById(R.id.insecure_scheme_text); + context.findViewById(R.id.preferred_accounts_accounts_filter_layout); + insecureWarningText = context.findViewById(R.id.insecure_scheme_text); useAuthentication.setOnCheckedChangeListener((buttonView, isChecked) -> { debug("profiles", isChecked ? "auth enabled " : "auth disabled"); @@ -376,6 +321,57 @@ public class ProfileDetailFragment extends Fragment implements HueRingDialog.Hue d.show(); d.setColorSelectedListener(this); }); + + profileName.requestFocus(); + } + private void onSaveFabClicked() { + if (!checkValidity()) + return; + + if (mProfile != null) { + updateProfileFromUI(); +// debug("profiles", String.format("Selected item is %d", mProfile.getThemeId())); + mProfile.storeInDB(); + debug("profiles", "profile stored in DB"); + triggerProfileChange(); + } + else { + mProfile = new MobileLedgerProfile(); + updateProfileFromUI(); + mProfile.storeInDB(); + final ArrayList profiles = Data.profiles.getValue(); + if (profiles == null) + throw new AssertionError(); + ArrayList newList = new ArrayList<>(profiles); + newList.add(mProfile); + Data.profiles.setValue(newList); + MobileLedgerProfile.storeProfilesOrder(); + + // first profile ever? + if (newList.size() == 1) + Data.profile.setValue(mProfile); + } + + Activity activity = getActivity(); + if (activity != null) + activity.finish(); + } + private void updateProfileFromUI() { + mProfile.setName(profileName.getText()); + mProfile.setUrl(url.getText()); + mProfile.setPostingPermitted(postingPermitted.isChecked()); + mProfile.setPreferredAccountsFilter(preferredAccountsFilter.getText()); + mProfile.setAuthEnabled(useAuthentication.isChecked()); + mProfile.setAuthUserName(userName.getText()); + mProfile.setAuthPassword(password.getText()); + mProfile.setThemeId(huePickerView.getTag()); + mProfile.setFutureDates(futureDates); + } + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.profile_detail, container, false); + return rootView; } private boolean checkUrlValidity() {