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=59f27a7906798d7bae098eb68ba9cf0f5ab1bb9f;hp=0288378393766a3331270154616079a0ecb3d937;hb=8d69552b756ba44e254251edf08206f8866c639b;hpb=0e2937f7e472c52675d47ff7a5dcb214adbeb35d 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 02883783..59f27a79 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 @@ -1,30 +1,26 @@ /* * Copyright © 2019 Damyan Ivanov. - * This file is part of Mobile-Ledger. - * Mobile-Ledger is free software: you can distribute it and/or modify it + * This file is part of MoLe. + * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your opinion), any later version. * - * Mobile-Ledger is distributed in the hope that it will be useful, + * MoLe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License terms for details. * * You should have received a copy of the GNU General Public License - * along with Mobile-Ledger. If not, see . + * along with MoLe. If not, see . */ package net.ktnx.mobileledger.ui.profiles; import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.CollapsingToolbarLayout; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -34,19 +30,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.activity.ProfileListActivity; +import net.ktnx.mobileledger.ui.activity.ProfileDetailActivity; +import net.ktnx.mobileledger.utils.Colors; + +import java.util.List; + +import androidx.annotation.ColorInt; +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 { @@ -72,6 +82,7 @@ public class ProfileDetailFragment extends Fragment { private TextView profileName; private TextInputLayout profileNameLayout; private FloatingActionButton fab; + private Spinner colorSpinner; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -131,6 +142,8 @@ public class ProfileDetailFragment extends Fragment { mProfile.setAuthEnabled(useAuthentication.isChecked()); mProfile.setAuthUserName(userName.getText()); mProfile.setAuthPassword(password.getText()); + mProfile.setThemeId(colorSpinner.getSelectedItem()); +// Log.d("profiles", String.format("Selected item is %d", mProfile.getThemeId())); mProfile.storeInDB(); Log.d("profiles", "profile stored in DB"); Data.profiles.triggerItemChangedNotification(mProfile); @@ -142,9 +155,11 @@ public class ProfileDetailFragment extends Fragment { } } else { - mProfile = new MobileLedgerProfile(profileName.getText(), postingPermitted.isChecked(), - url.getText(), useAuthentication.isChecked(), userName.getText(), - password.getText()); + mProfile = + new MobileLedgerProfile(profileName.getText(), postingPermitted.isChecked(), + url.getText(), useAuthentication.isChecked(), userName.getText(), + password.getText(), + Integer.valueOf((String) colorSpinner.getSelectedItem())); mProfile.storeInDB(); Data.profiles.add(mProfile); MobileLedgerProfile.storeProfilesOrder(); @@ -175,6 +190,41 @@ 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); + + ColorListAdapter adapter = + new ColorListAdapter(rootView.getContext(), R.layout.color_selector_item); + adapter.add(-1); + for (int i = 0; i < 360; i += 15) adapter.add(i); + Log.d("profiles", String.format("color count: %s", adapter.getCount())); +// adapter.setDropDownViewResource(R.layout.color_selector_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) parent.getAdapter().getItem(position); + if (degrees < 0) { + primaryColor = Colors.getPrimaryColorForHue(Colors.DEFAULT_HUE_DEG); + } + 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); +// } +// } + } + } + }); useAuthentication.setOnCheckedChangeListener((buttonView, isChecked) -> { Log.d("profiles", isChecked ? "auth enabled " : "auth disabled"); @@ -195,6 +245,21 @@ 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++; + } } else { profileName.setText(""); @@ -204,6 +269,7 @@ public class ProfileDetailFragment extends Fragment { authParams.setVisibility(View.GONE); userName.setText(""); password.setText(""); + colorSpinner.setSelection(0); } return rootView; @@ -257,4 +323,43 @@ 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 Integer[] objects) { + super(context, resource, objects); + } + public ColorListAdapter(@NonNull Context context, int resource, int textViewResourceId, + @NonNull Integer[] 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); + } + @Override + public @NonNull + View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + Integer hueDeg = getItem(position); + int hue = ((hueDeg == null) || (hueDeg == -1)) ? Colors.DEFAULT_HUE_DEG : hueDeg; + @ColorInt int primaryColor = Colors.getPrimaryColorForHue(hue); + + View view = convertView; + if (convertView == null) { + view = getLayoutInflater().inflate(R.layout.color_selector_item, null); + } + + view.setBackground(new ColorDrawable(primaryColor)); + return view; + } + } }