+ huePickerView = context.findViewById(R.id.btn_pick_ring_color);
+ model.observeThemeId(viewLifecycleOwner, themeId -> {
+ final int hue = (themeId == -1) ? Colors.DEFAULT_HUE_DEG : themeId;
+ final int profileColor = Colors.getPrimaryColorForHue(hue);
+ huePickerView.setBackgroundColor(profileColor);
+ huePickerView.setTag(hue);
+ });
+
+ preferredAccountsFilter = context.findViewById(R.id.preferred_accounts_filter_filter);
+ model.observePreferredAccountsFilter(viewLifecycleOwner, text -> {
+ if (!Misc.equalStrings(text, preferredAccountsFilter.getText()))
+ preferredAccountsFilter.setText(text);
+ });
+ hookTextChangeSyncRoutine(preferredAccountsFilter, model::setPreferredAccountsFilter);
+
+ insecureWarningText = context.findViewById(R.id.insecure_scheme_text);
+
+ hookClearErrorOnFocusListener(profileName, profileNameLayout);
+ hookClearErrorOnFocusListener(url, urlLayout);
+ hookClearErrorOnFocusListener(userName, userNameLayout);
+ hookClearErrorOnFocusListener(password, passwordLayout);
+
+ if (savedInstanceState == null) {
+ model.setValuesFromProfile(mProfile, getArguments().getInt(ARG_HUE, -1));
+ }
+ checkInsecureSchemeWithAuth();
+
+ url.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+ @Override
+ public void afterTextChanged(Editable s) {
+ checkInsecureSchemeWithAuth();
+ }
+ });
+
+ huePickerView.setOnClickListener(v -> {
+ HueRingDialog d = new HueRingDialog(ProfileDetailFragment.this.requireContext(),
+ model.initialThemeHue, (Integer) v.getTag());
+ d.show();
+ d.setColorSelectedListener(model::setThemeId);
+ });
+
+ profileName.requestFocus();
+ }
+ private void chooseAPIVersion(View v) {
+ Activity context = getActivity();
+ ProfileDetailModel model = getModel();
+ MenuInflater mi = new MenuInflater(context);
+ PopupMenu menu = new PopupMenu(context, v);
+ menu.inflate(R.menu.api_version);
+ menu.setOnMenuItemClickListener(item -> {
+ SendTransactionTask.API apiVer;
+ switch (item.getItemId()) {
+ case R.id.api_version_menu_html:
+ apiVer = SendTransactionTask.API.html;
+ break;
+ case R.id.api_version_menu_1_19_1:
+ apiVer = SendTransactionTask.API.v1_19_1;
+ break;
+ case R.id.api_version_menu_1_15:
+ apiVer = SendTransactionTask.API.v1_15;
+ break;
+ case R.id.api_version_menu_1_14:
+ apiVer = SendTransactionTask.API.v1_14;
+ break;
+ case R.id.api_version_menu_auto:
+ default:
+ apiVer = SendTransactionTask.API.auto;
+ }
+ model.setApiVersion(apiVer);
+ apiVersionText.setText(apiVer.getDescription(getResources()));
+ return true;
+ });
+ menu.show();
+ }
+ private MobileLedgerProfile.FutureDates futureDatesSettingFromMenuItemId(int itemId) {
+ switch (itemId) {
+ case R.id.menu_future_dates_7:
+ return MobileLedgerProfile.FutureDates.OneWeek;
+ case R.id.menu_future_dates_14:
+ return MobileLedgerProfile.FutureDates.TwoWeeks;
+ case R.id.menu_future_dates_30:
+ return MobileLedgerProfile.FutureDates.OneMonth;
+ case R.id.menu_future_dates_60:
+ return MobileLedgerProfile.FutureDates.TwoMonths;
+ case R.id.menu_future_dates_90:
+ return MobileLedgerProfile.FutureDates.ThreeMonths;
+ case R.id.menu_future_dates_180:
+ return MobileLedgerProfile.FutureDates.SixMonths;
+ case R.id.menu_future_dates_365:
+ return MobileLedgerProfile.FutureDates.OneYear;
+ case R.id.menu_future_dates_all:
+ return MobileLedgerProfile.FutureDates.All;
+ default:
+ return MobileLedgerProfile.FutureDates.None;
+ }
+ }
+ @NotNull
+ private ProfileDetailModel getModel() {
+ return new ViewModelProvider(requireActivity()).get(ProfileDetailModel.class);
+ }
+ private void onSaveFabClicked() {
+ if (!checkValidity())
+ return;
+
+ ProfileDetailModel model = getModel();
+ final ArrayList<MobileLedgerProfile> profiles =
+ Objects.requireNonNull(Data.profiles.getValue());
+
+ if (mProfile != null) {
+ int pos = Data.profiles.getValue()
+ .indexOf(mProfile);
+ mProfile = new MobileLedgerProfile(mProfile);
+ model.updateProfile(mProfile);
+ mProfile.storeInDB();
+ debug("profiles", "profile stored in DB");
+ profiles.set(pos, mProfile);
+// debug("profiles", String.format("Selected item is %d", mProfile.getThemeHue()));
+
+ final MobileLedgerProfile currentProfile = Data.getProfile();
+ if (mProfile.getUuid()
+ .equals(currentProfile.getUuid()))
+ {
+ Data.setCurrentProfile(mProfile);
+ }
+
+ ProfilesRecyclerViewAdapter viewAdapter = ProfilesRecyclerViewAdapter.getInstance();
+ if (viewAdapter != null)
+ viewAdapter.notifyItemChanged(pos);