X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fprofiles%2FProfileDetailFragment.java;h=57fe6b995267b9a7d5c8f5495544f0f0ef7ceb1e;hp=6d26e4ba71efeb84d8ef03a69e1e871084248319;hb=83cac114e375728080194fb09758b49c50a8119b;hpb=09e26d2279484b4dfe0de218b05f075362fff4b5 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 6d26e4ba..57fe6b99 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 @@ -18,16 +18,7 @@ package net.ktnx.mobileledger.ui.profiles; import android.app.Activity; -import android.content.Context; -import android.os.Build; import android.os.Bundle; -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.material.appbar.CollapsingToolbarLayout; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.textfield.TextInputLayout; -import androidx.fragment.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -37,31 +28,33 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.LinearLayout; -import android.widget.Spinner; import android.widget.Switch; import android.widget.TextView; +import com.google.android.material.appbar.CollapsingToolbarLayout; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.textfield.TextInputLayout; + import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.MobileLedgerProfile; +import net.ktnx.mobileledger.ui.HueRingDialog; import net.ktnx.mobileledger.ui.activity.ProfileDetailActivity; -import net.ktnx.mobileledger.ui.activity.ProfileListActivity; import net.ktnx.mobileledger.utils.Colors; -import org.jetbrains.annotations.NotNull; +import java.util.Objects; -import java.util.List; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; /** * A fragment representing a single Profile detail screen. - * This fragment is either contained in a {@link ProfileListActivity} - * in two-pane mode (on tablets) or a {@link ProfileDetailActivity} + * a {@link ProfileDetailActivity} * on handsets. */ -public class ProfileDetailFragment extends Fragment { +public class ProfileDetailFragment extends Fragment implements HueRingDialog.HueSelectedListener { /** * The fragment argument representing the item ID that this fragment * represents. @@ -83,8 +76,7 @@ public class ProfileDetailFragment extends Fragment { private TextInputLayout passwordLayout; private TextView profileName; private TextInputLayout profileNameLayout; - private FloatingActionButton fab; - private Spinner colorSpinner; + private View huePickerView; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -133,7 +125,7 @@ public class ProfileDetailFragment extends Fragment { Activity context = getActivity(); if (context == null) return; - fab = context.findViewById(R.id.fab); + FloatingActionButton fab = context.findViewById(R.id.fab); fab.setOnClickListener(v -> { if (!checkValidity()) return; @@ -144,7 +136,7 @@ public class ProfileDetailFragment extends Fragment { mProfile.setAuthEnabled(useAuthentication.isChecked()); mProfile.setAuthUserName(userName.getText()); mProfile.setAuthPassword(password.getText()); - mProfile.setThemeId(colorSpinner.getSelectedItem()); + mProfile.setThemeId(huePickerView.getTag()); // Log.d("profiles", String.format("Selected item is %d", mProfile.getThemeId())); mProfile.storeInDB(); Log.d("profiles", "profile stored in DB"); @@ -160,14 +152,13 @@ public class ProfileDetailFragment extends Fragment { mProfile = new MobileLedgerProfile(profileName.getText(), postingPermitted.isChecked(), url.getText(), useAuthentication.isChecked(), userName.getText(), - password.getText(), - Integer.valueOf((String) colorSpinner.getSelectedItem())); + password.getText(), (int) huePickerView.getTag()); mProfile.storeInDB(); Data.profiles.add(mProfile); MobileLedgerProfile.storeProfilesOrder(); // first profile ever? - if (Data.profiles.getList().size() == 1) Data.profile.set(mProfile); + if (Data.profiles.size() == 1) Data.profile.set(mProfile); } Activity activity = getActivity(); @@ -192,48 +183,7 @@ public class ProfileDetailFragment extends Fragment { userNameLayout = rootView.findViewById(R.id.auth_user_name_layout); password = rootView.findViewById(R.id.password); passwordLayout = rootView.findViewById(R.id.password_layout); - colorSpinner = rootView.findViewById(R.id.colorSpinner); - - ArrayAdapter adapter = ColorListAdapter - .createFromResource(rootView.getContext(), R.array.profile_colors, - R.layout.color_selector_item); -// Log.d("profiles", String.format("color count: %s", adapter.getCount())); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - colorSpinner.setAdapter(adapter); - colorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onNothingSelected(AdapterView parent) { - - } - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - final int primaryColor; - final int degrees = - Integer.valueOf((String) (parent.getAdapter().getItem(position))); - if (degrees < 0) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (getActivity() != null) primaryColor = getResources() - .getColor(R.color.colorPrimary, getActivity().getTheme()); - else primaryColor = Colors.getPrimaryColorForHue(Colors.DEFAULT_HUE_DEG); - } - else { - primaryColor = getResources().getColor(R.color.colorPrimary); - } - } - else primaryColor = Colors.getPrimaryColorForHue(degrees); - - if (colorSpinner != null) { - colorSpinner.setBackgroundColor(primaryColor); -// for (int i = 0; i < colorSpinner.getChildCount(); i++) { -// View v = colorSpinner.getChildAt(i); -// -// if (v instanceof TextView) { -// ((TextView) v).setTextColor(Color.TRANSPARENT); -// } -// } - } - } - }); + huePickerView = rootView.findViewById(R.id.btn_pick_ring_color); useAuthentication.setOnCheckedChangeListener((buttonView, isChecked) -> { Log.d("profiles", isChecked ? "auth enabled " : "auth disabled"); @@ -246,6 +196,7 @@ public class ProfileDetailFragment extends Fragment { hookClearErrorOnFocusListener(userName, userNameLayout); hookClearErrorOnFocusListener(password, passwordLayout); + int profileThemeId; if (mProfile != null) { profileName.setText(mProfile.getName()); postingPermitted.setChecked(mProfile.isPostingPermitted()); @@ -254,21 +205,7 @@ public class ProfileDetailFragment extends Fragment { authParams.setVisibility(mProfile.isAuthEnabled() ? View.VISIBLE : View.GONE); userName.setText(mProfile.isAuthEnabled() ? mProfile.getAuthUserName() : ""); password.setText(mProfile.isAuthEnabled() ? mProfile.getAuthPassword() : ""); - - colorSpinner.setSelection(0); - int i = 0; - int sought = mProfile.getThemeId(); -// Log.d("profiles", String.format("Looking for %d",sought)); - while (i < adapter.getCount()) { - int item = Integer.valueOf(String.valueOf(adapter.getItem(i))); -// Log.d("profiles", String.format("Item %d is %d", i, item)); - if (item == sought) { - colorSpinner.setSelection(i); - break; - } - - i++; - } + profileThemeId = mProfile.getThemeId(); } else { profileName.setText(""); @@ -278,9 +215,20 @@ public class ProfileDetailFragment extends Fragment { authParams.setVisibility(View.GONE); userName.setText(""); password.setText(""); - colorSpinner.setSelection(0); + profileThemeId = -1; } + final int hue = (profileThemeId == -1) ? Colors.DEFAULT_HUE_DEG : profileThemeId; + final int profileColor = Colors.getPrimaryColorForHue(hue); + + huePickerView.setBackgroundColor(profileColor); + huePickerView.setTag(profileThemeId); + huePickerView.setOnClickListener(v -> { + HueRingDialog d = new HueRingDialog( + Objects.requireNonNull(ProfileDetailFragment.this.getContext()), hue); + d.show(); + d.setColorSelectedListener(this); + }); return rootView; } private void hookClearErrorOnFocusListener(TextView view, TextInputLayout layout) { @@ -300,7 +248,7 @@ public class ProfileDetailFragment extends Fragment { } }); } - boolean checkValidity() { + private boolean checkValidity() { boolean valid = true; String val = String.valueOf(profileName.getText()); @@ -332,42 +280,9 @@ public class ProfileDetailFragment extends Fragment { return valid; } - private class ColorListAdapter extends ArrayAdapter { - public ColorListAdapter(@NonNull Context context, int resource) { - super(context, resource); - } - public ColorListAdapter(@NonNull Context context, int resource, int textViewResourceId) { - super(context, resource, textViewResourceId); - } - public ColorListAdapter(@NonNull Context context, int resource, @NonNull String[] objects) { - super(context, resource, objects); - } - public ColorListAdapter(@NonNull Context context, int resource, int textViewResourceId, - @NonNull String[] objects) { - super(context, resource, textViewResourceId, objects); - } - public ColorListAdapter(@NonNull Context context, int resource, - @NonNull List objects) { - super(context, resource, objects); - } - public ColorListAdapter(@NonNull Context context, int resource, int textViewResourceId, - @NonNull List objects) { - super(context, resource, textViewResourceId, objects); - } - @NotNull - @Override - public View getView(int position, View convertView, @NotNull ViewGroup parent) { - String hueStr = getItem(position); - int hue = (hueStr == null) ? -1 : Integer.valueOf(hueStr); - @ColorInt int primaryColor = Colors.getPrimaryColorForHue(hue); - - View view = convertView; - if (convertView == null) { - view = getLayoutInflater().inflate(R.layout.color_selector_item, parent); - } - - view.setBackgroundColor(primaryColor); - return view; - } + @Override + public void onHueSelected(int hue) { + huePickerView.setBackgroundColor(Colors.getPrimaryColorForHue(hue)); + huePickerView.setTag(hue); } }