From 147deeafb8f857939c83ed83b7d5617eeaf6298b Mon Sep 17 00:00:00 2001 From: oliexdev Date: Sun, 30 Apr 2023 12:37:32 +0200 Subject: [PATCH] change material calendar button text color --- .../gui/preferences/UserSettingsFragment.java | 214 +++++++++--------- .../app/src/main/res/values/styles.xml | 17 +- 2 files changed, 120 insertions(+), 111 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java index b0d861bd..e07e2167 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/UserSettingsFragment.java @@ -1,22 +1,21 @@ /* Copyright (C) 2014 olie.xdev -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program 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 for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see -*/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ package com.health.openscale.gui.preferences; import android.app.AlertDialog; -import android.app.DatePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; @@ -30,17 +29,21 @@ import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; -import android.widget.DatePicker; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TableRow; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Lifecycle; import androidx.navigation.Navigation; +import com.google.android.material.datepicker.MaterialDatePicker; +import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener; import com.health.openscale.R; import com.health.openscale.core.OpenScale; import com.health.openscale.core.datatypes.ScaleUser; @@ -85,7 +88,65 @@ public class UserSettingsFragment extends Fragment { View root = inflater.inflate(R.layout.fragment_usersettings, container, false); context = getContext(); - setHasOptionsMenu(true); + requireActivity().addMenuProvider(new MenuProvider() { + @Override + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + menu.clear(); + menuInflater.inflate(R.menu.userentry_menu, menu); + + // Apply a tint to all icons in the toolbar + for (int i = 0; i < menu.size(); ++i) { + MenuItem item = menu.getItem(i); + final Drawable drawable = item.getIcon(); + if (drawable == null) { + continue; + } + + final Drawable wrapped = DrawableCompat.wrap(drawable.mutate()); + + if (item.getItemId() == R.id.saveButton) { + DrawableCompat.setTint(wrapped, Color.parseColor("#FFFFFF")); + } else if (item.getItemId() == R.id.deleteButton) { + DrawableCompat.setTint(wrapped, Color.parseColor("#FF4444")); + } + + item.setIcon(wrapped); + } + + MenuItem deleteButton = menu.findItem(R.id.deleteButton); + + switch (mode) { + case ADD: + deleteButton.setVisible(false); + break; + case EDIT: + deleteButton.setVisible(true); + break; + } + } + + @Override + public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.saveButton: + if (saveUserData()) { + if (getActivity().findViewById(R.id.nav_host_fragment) != null){ + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getPreviousBackStackEntry().getSavedStateHandle().set("update", true); + Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); + } else { + getActivity().finish(); + } + } + return true; + + case R.id.deleteButton: + deleteUser(); + return true; + } + + return false; + } + }, getViewLifecycleOwner(), Lifecycle.State.RESUMED); if (getArguments() != null) { mode = UserSettingsFragmentArgs.fromBundle(getArguments()).getMode(); @@ -129,15 +190,16 @@ public class UserSettingsFragment extends Fragment { txtGoalDate.setText(dateFormat.format(goal_date)); txtBirthday.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Calendar cal = Calendar.getInstance(); - cal.setTime(birthday); - DatePickerDialog datePicker = new DatePickerDialog( - context, birthdayPickerListener, cal.get(Calendar.YEAR), - cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); - datePicker.show(); - } + @Override + public void onClick(View v) { + MaterialDatePicker datePicker = MaterialDatePicker.Builder + .datePicker() + .setSelection(birthday.getTime()) + .build(); + + datePicker.addOnPositiveButtonClickListener(birthdayPickerListener); + datePicker.show(requireActivity().getSupportFragmentManager(), "Birthday_DatePicker"); + } }); chkGoalEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -156,12 +218,13 @@ public class UserSettingsFragment extends Fragment { txtGoalDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Calendar cal = Calendar.getInstance(); - cal.setTime(goal_date); - DatePickerDialog datePicker = new DatePickerDialog( - context, goalDatePickerListener, cal.get(Calendar.YEAR), - cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); - datePicker.show(); + MaterialDatePicker datePicker = MaterialDatePicker.Builder + .datePicker() + .setSelection(goal_date.getTime()) + .build(); + + datePicker.addOnPositiveButtonClickListener(goalDatePickerListener); + datePicker.show(getActivity().getSupportFragmentManager(), "Goal_DatePicker"); } }); @@ -205,70 +268,13 @@ public class UserSettingsFragment extends Fragment { } }); + if (mode == USER_SETTING_MODE.EDIT) { + editMode(); + } + return root; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - menu.clear(); - inflater.inflate(R.menu.userentry_menu, menu); - - // Apply a tint to all icons in the toolbar - for (int i = 0; i < menu.size(); ++i) { - MenuItem item = menu.getItem(i); - final Drawable drawable = item.getIcon(); - if (drawable == null) { - continue; - } - - final Drawable wrapped = DrawableCompat.wrap(drawable.mutate()); - - if (item.getItemId() == R.id.saveButton) { - DrawableCompat.setTint(wrapped, Color.parseColor("#FFFFFF")); - } else if (item.getItemId() == R.id.deleteButton) { - DrawableCompat.setTint(wrapped, Color.parseColor("#FF4444")); - } - - item.setIcon(wrapped); - } - - MenuItem deleteButton = menu.findItem(R.id.deleteButton); - - switch (mode) { - case ADD: - deleteButton.setVisible(false); - break; - case EDIT: - editMode(); - deleteButton.setVisible(true); - break; - } - - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.saveButton: - if (saveUserData()) { - if (getActivity().findViewById(R.id.nav_host_fragment) != null){ - Navigation.findNavController(getActivity(), R.id.nav_host_fragment).getPreviousBackStackEntry().getSavedStateHandle().set("update", true); - Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp(); - } else { - getActivity().finish(); - } - } - return true; - - case R.id.deleteButton: - deleteUser(); - return true; - } - - return super.onOptionsItemSelected(item); - } - private void editMode() { int id = UserSettingsFragmentArgs.fromBundle(getArguments()).getUserId(); @@ -367,24 +373,18 @@ public class UserSettingsFragment extends Fragment { return validate; } - private final DatePickerDialog.OnDateSetListener birthdayPickerListener = new DatePickerDialog.OnDateSetListener() { + private final MaterialPickerOnPositiveButtonClickListener birthdayPickerListener = new MaterialPickerOnPositiveButtonClickListener() { @Override - public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { - Calendar cal = Calendar.getInstance(); - cal.set(selectedYear, selectedMonth, selectedDay, 0, 0, 0); - cal.set(Calendar.MILLISECOND, 0); - birthday = cal.getTime(); + public void onPositiveButtonClick(Long selection) { + birthday = new Date(selection); txtBirthday.setText(dateFormat.format(birthday)); - } - }; + } + }; - private final DatePickerDialog.OnDateSetListener goalDatePickerListener = new DatePickerDialog.OnDateSetListener() { + private final MaterialPickerOnPositiveButtonClickListener goalDatePickerListener = new MaterialPickerOnPositiveButtonClickListener() { @Override - public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { - Calendar cal = Calendar.getInstance(); - cal.set(selectedYear, selectedMonth, selectedDay, 0, 0, 0); - cal.set(Calendar.MILLISECOND, 0); - goal_date = cal.getTime(); + public void onPositiveButtonClick(Long selection) { + goal_date = new Date(selection); txtGoalDate.setText(dateFormat.format(goal_date)); } }; diff --git a/android_app/app/src/main/res/values/styles.xml b/android_app/app/src/main/res/values/styles.xml index cc6c4b75..eb42aaa3 100644 --- a/android_app/app/src/main/res/values/styles.xml +++ b/android_app/app/src/main/res/values/styles.xml @@ -5,7 +5,7 @@ @color/primaryLightColor @color/primaryDarkColor @color/primaryLightColor - @style/DatePickerStyle + @style/MaterialCalendarTheme - + + + +