import android.app.Activity;
import android.app.AlertDialog;
+import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import net.ktnx.mobileledger.BuildConfig;
import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.async.SendTransactionTask;
+import net.ktnx.mobileledger.model.Currency;
import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.MobileLedgerProfile;
+import net.ktnx.mobileledger.ui.CurrencySelectorFragment;
import net.ktnx.mobileledger.ui.HueRingDialog;
+import net.ktnx.mobileledger.ui.OnCurrencySelectedListener;
import net.ktnx.mobileledger.ui.activity.ProfileDetailActivity;
import net.ktnx.mobileledger.utils.Colors;
+import net.ktnx.mobileledger.utils.Misc;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
* a {@link ProfileDetailActivity}
* on handsets.
*/
-public class ProfileDetailFragment extends Fragment implements HueRingDialog.HueSelectedListener {
+public class ProfileDetailFragment extends Fragment
+ implements HueRingDialog.HueSelectedListener, OnCurrencySelectedListener {
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
public static final String ARG_ITEM_ID = "item_id";
+ public static final String ARG_HUE = "hue";
@NonNls
private static final String HTTPS_URL_START = "https://";
/**
- * The dummy content this fragment is presenting.
+ * The content this fragment is presenting.
*/
private MobileLedgerProfile mProfile;
private TextView url;
private Switch postingPermitted;
+ private Switch showCommodityByDefault;
+ private TextView defaultCommodity;
+ private boolean defaultCommoditySet;
private TextInputLayout urlLayout;
private LinearLayout authParams;
private Switch useAuthentication;
private MobileLedgerProfile.FutureDates futureDates;
private View futureDatesLayout;
private TextView apiVersionText;
- private View apiVersionLayout;
private SendTransactionTask.API apiVersion;
/**
throw new AssertionError();
profiles.set(index, newProfile);
- ProfilesRecyclerViewAdapter prva = ProfilesRecyclerViewAdapter.getInstance();
- if (prva != null)
- prva.notifyItemChanged(index);
+ ProfilesRecyclerViewAdapter viewAdapter = ProfilesRecyclerViewAdapter.getInstance();
+ if (viewAdapter != null)
+ viewAdapter.notifyItemChanged(index);
if (mProfile.equals(Data.profile.getValue()))
Data.profile.setValue(newProfile);
url = context.findViewById(R.id.url);
urlLayout = context.findViewById(R.id.url_layout);
postingPermitted = context.findViewById(R.id.profile_permit_posting);
+ showCommodityByDefault = context.findViewById(R.id.profile_show_commodity);
+ defaultCommodity = context.findViewById(R.id.default_commodity_text);
futureDatesLayout = context.findViewById(R.id.future_dates_layout);
futureDatesText = context.findViewById(R.id.future_dates_text);
context.findViewById(R.id.future_dates_layout)
menu.inflate(R.menu.future_dates);
menu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()) {
+ case R.id.menu_future_dates_7:
+ futureDates = MobileLedgerProfile.FutureDates.OneWeek;
+ break;
+ case R.id.menu_future_dates_14:
+ futureDates = MobileLedgerProfile.FutureDates.TwoWeeks;
+ break;
case R.id.menu_future_dates_30:
futureDates = MobileLedgerProfile.FutureDates.OneMonth;
break;
});
menu.show();
});
- apiVersionLayout = context.findViewById(R.id.api_version_layout);
apiVersionText = context.findViewById(R.id.api_version_text);
- apiVersionLayout.setOnClickListener(v -> {
- MenuInflater mi = new MenuInflater(context);
- PopupMenu menu = new PopupMenu(context, v);
- menu.inflate(R.menu.api_version);
- menu.setOnMenuItemClickListener(item -> {
- switch (item.getItemId()) {
- case R.id.api_version_menu_html:
- apiVersion = SendTransactionTask.API.html;
- break;
- case R.id.api_version_menu_post_1_14:
- apiVersion = SendTransactionTask.API.post_1_14;
- break;
- case R.id.api_version_menu_pre_1_15:
- apiVersion = SendTransactionTask.API.pre_1_15;
- break;
- case R.id.api_version_menu_auto:
- default:
- apiVersion = SendTransactionTask.API.auto;
- }
- apiVersionText.setText(apiVersion.getDescription(getResources()));
- return true;
- });
- menu.show();
- });
+ context.findViewById(R.id.api_version_layout)
+ .setOnClickListener(v -> {
+ MenuInflater mi = new MenuInflater(context);
+ PopupMenu menu = new PopupMenu(context, v);
+ menu.inflate(R.menu.api_version);
+ menu.setOnMenuItemClickListener(item -> {
+ switch (item.getItemId()) {
+ case R.id.api_version_menu_html:
+ apiVersion = SendTransactionTask.API.html;
+ break;
+ case R.id.api_version_menu_post_1_14:
+ apiVersion = SendTransactionTask.API.post_1_14;
+ break;
+ case R.id.api_version_menu_pre_1_15:
+ apiVersion = SendTransactionTask.API.pre_1_15;
+ break;
+ case R.id.api_version_menu_auto:
+ default:
+ apiVersion = SendTransactionTask.API.auto;
+ }
+ apiVersionText.setText(apiVersion.getDescription(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);
hookClearErrorOnFocusListener(userName, userNameLayout);
hookClearErrorOnFocusListener(password, passwordLayout);
- int profileThemeId;
+ final int profileThemeId;
if (mProfile != null) {
profileName.setText(mProfile.getName());
postingPermitted.setChecked(mProfile.isPostingPermitted());
+ showCommodityByDefault.setChecked(mProfile.getShowCommodityByDefault());
+ {
+ String comm = mProfile.getDefaultCommodity();
+ if (Misc.isEmptyOrNull(comm))
+ resetDefaultCommodity();
+ else
+ setDefaultCommodity(comm);
+ }
futureDates = mProfile.getFutureDates();
futureDatesText.setText(futureDates.getText(getResources()));
apiVersion = mProfile.getApiVersion();
userName.setText(mProfile.isAuthEnabled() ? mProfile.getAuthUserName() : "");
password.setText(mProfile.isAuthEnabled() ? mProfile.getAuthPassword() : "");
preferredAccountsFilter.setText(mProfile.getPreferredAccountsFilter());
- profileThemeId = mProfile.getThemeId();
+ profileThemeId = mProfile.getThemeHue();
}
else {
profileName.setText("");
url.setText(HTTPS_URL_START);
postingPermitted.setChecked(true);
+ showCommodityByDefault.setChecked(false);
+ resetDefaultCommodity();
futureDates = MobileLedgerProfile.FutureDates.None;
futureDatesText.setText(futureDates.getText(getResources()));
apiVersion = SendTransactionTask.API.auto;
userName.setText("");
password.setText("");
preferredAccountsFilter.setText(null);
- profileThemeId = -1;
+ profileThemeId = getArguments().getInt(ARG_HUE, -1);
}
checkInsecureSchemeWithAuth();
d.setColorSelectedListener(this);
});
+ context.findViewById(R.id.default_commodity_layout).setOnClickListener(v -> {
+ CurrencySelectorFragment cpf = CurrencySelectorFragment.newInstance(CurrencySelectorFragment.DEFAULT_COLUMN_COUNT, false);
+ cpf.setOnCurrencySelectedListener(this);
+ final AppCompatActivity activity = (AppCompatActivity) v.getContext();
+ cpf.show(activity.getSupportFragmentManager(), "currency-selector");
+ });
profileName.requestFocus();
}
private void onSaveFabClicked() {
if (mProfile != null) {
updateProfileFromUI();
-// debug("profiles", String.format("Selected item is %d", mProfile.getThemeId()));
+// debug("profiles", String.format("Selected item is %d", mProfile.getThemeHue()));
mProfile.storeInDB();
debug("profiles", "profile stored in DB");
triggerProfileChange();
mProfile.setName(profileName.getText());
mProfile.setUrl(url.getText());
mProfile.setPostingPermitted(postingPermitted.isChecked());
+ mProfile.setDefaultCommodity(defaultCommoditySet ? defaultCommodity.getText() : null);
+ mProfile.setShowCommodityByDefault(showCommodityByDefault.isChecked());
mProfile.setPreferredAccountsFilter(preferredAccountsFilter.getText());
mProfile.setAuthEnabled(useAuthentication.isChecked());
mProfile.setAuthUserName(userName.getText());
mProfile.setAuthPassword(password.getText());
- mProfile.setThemeId(huePickerView.getTag());
+ mProfile.setThemeHue(huePickerView.getTag());
mProfile.setFutureDates(futureDates);
mProfile.setApiVersion(apiVersion);
}
huePickerView.setBackgroundColor(Colors.getPrimaryColorForHue(hue));
huePickerView.setTag(hue);
}
+ @Override
+ public void onCurrencySelected(Currency item) {
+ if (item == null)
+ resetDefaultCommodity();
+ else
+ setDefaultCommodity(item.getName());
+ }
+ private void resetDefaultCommodity() {
+ defaultCommoditySet = false;
+ defaultCommodity.setText(R.string.btn_no_currency);
+ defaultCommodity.setTypeface(defaultCommodity.getTypeface(), Typeface.ITALIC);
+ }
+ private void setDefaultCommodity(@NonNull @NotNull String name) {
+ defaultCommoditySet = true;
+ defaultCommodity.setText(name);
+ defaultCommodity.setTypeface(defaultCommodity.getTypeface(), Typeface.BOLD);
+ }
}