basbeu/theSofties

View on GitHub
app/src/main/java/ch/epfl/sweng/favors/profile/EditProfileFragment.java

Summary

Maintainability
A
0 mins
Test Coverage
package ch.epfl.sweng.favors.profile;

import android.databinding.DataBindingUtil;
import android.databinding.ObservableField;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;

import ch.epfl.sweng.favors.R;
import ch.epfl.sweng.favors.database.Database;
import ch.epfl.sweng.favors.database.User;
import ch.epfl.sweng.favors.databinding.FragmentEditProfileBinding;
import ch.epfl.sweng.favors.utils.TextWatcherCustom;

public class EditProfileFragment extends Fragment {

    private static final String TAG = "EDIT_PROFILE_FRAGMENT";

    public ObservableField<String> firstName = User.getMain().getObservableObject(User.StringFields.firstName);
    public ObservableField<String> lastName = User.getMain().getObservableObject(User.StringFields.lastName);
    public ObservableField<String> baseCity = User.getMain().getObservableObject(User.StringFields.city);
    public ObservableField<String> sex = User.getMain().getObservableObject(User.StringFields.sex);


    FragmentEditProfileBinding binding;

    private TextWatcherCustom profFirstNameEditWatcher = new TextWatcherCustom() {
        @Override
        public void afterTextChanged(Editable editable) {
            User.getMain().set(User.StringFields.firstName, editable.toString());
        }
    };

    private TextWatcherCustom profLastNameEditWatcher = new TextWatcherCustom() {
        @Override
        public void afterTextChanged(Editable editable) {
            User.getMain().set(User.StringFields.lastName, editable.toString());
        }
    };

    private TextWatcherCustom profCityEditWatcher = new TextWatcherCustom() {
        @Override
        public void afterTextChanged(Editable editable) {
            User.getMain().set(User.StringFields.city, editable.toString());
        }
    };

    private void displayGender(){
        User.UserGender gender = User.UserGender.getGenderFromUser(User.getMain());
        Log.d(TAG,gender.toString());
        switch (gender){
            case F: binding.profGenderEdit.check(R.id.profGenderFEdit); break;
            case M: binding.profGenderEdit.check(R.id.profGenderMEdit); break;
            case DEFAULT: Log.e(TAG,"Gender parsing issue.");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Database.getInstance().updateFromDb(User.getMain()).addOnCompleteListener(t->displayGender());
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_edit_profile,container,false);
        binding.setElements(this);

        //Set the RadioGroup buttons to select the current sex
        binding.profFirstNameEdit.addTextChangedListener(profFirstNameEditWatcher);
        binding.profLastNameEdit.addTextChangedListener(profLastNameEditWatcher);
        binding.profCityEdit.addTextChangedListener(profCityEditWatcher);
        binding.profGenderEdit.setOnCheckedChangeListener((RadioGroup group, int checkedId) ->{
            switch (checkedId){
                case R.id.profGenderMEdit:
                    User.UserGender.setGender(User.getMain(),User.UserGender.M);
                    break;
                case  R.id.profGenderFEdit:
                    User.UserGender.setGender(User.getMain(), User.UserGender.F);
                    break;
                default:
                    Log.e(TAG, "RadioButton clicked for sex change unidentified");
            }
        });

        binding.commitChanges.setOnClickListener((v)-> {
            Database.getInstance().updateOnDb(User.getMain());
            EditProfileFragment.this.getActivity().getSupportFragmentManager().popBackStack();
        });
        return binding.getRoot();
    }
}