Skip to content

Commit

Permalink
[MaterialTimePicker] Fix AM/PM toggle
Browse files Browse the repository at this point in the history
Before the CL we set AM/PM selection in the listeners no matter the target view (AM/PM) is being checked or being unchecked. So the order of calling listeners of AM and PM can "revert" the selection, if the callback for being unchecked is called later.

This logic is apparently wrong - we should select AM/PM when they are being unchecked anyways.

Resolves #2791
Resolves #2788

GIT_ORIGIN_REV_ID=018e053394f44d6334827fc3f95406c2937ae582
PiperOrigin-RevId: 458027987
  • Loading branch information
pubiqq authored and hunterstich committed Jul 6, 2022
1 parent cd80b71 commit 1dc0e6b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 22 deletions.
Expand Up @@ -43,7 +43,6 @@
import androidx.annotation.ColorInt;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.google.android.material.button.MaterialButtonToggleGroup;
import com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.internal.TextWatcherAdapter;
import com.google.android.material.internal.ViewUtils;
Expand Down Expand Up @@ -194,15 +193,15 @@ private void setTime(TimeModel time) {
private void setupPeriodToggle() {
toggle = timePickerView.findViewById(R.id.material_clock_period_toggle);

toggle.addOnButtonCheckedListener(
new OnButtonCheckedListener() {
@Override
public void onButtonChecked(
MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
int period = checkedId == R.id.material_clock_period_pm_button ? PM : AM;
time.setPeriod(period);
}
});
toggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> {
if (!isChecked) {
return;
}

int period = checkedId == R.id.material_clock_period_pm_button ? PM : AM;
time.setPeriod(period);
});

toggle.setVisibility(View.VISIBLE);
updateSelection();
}
Expand Down
23 changes: 11 additions & 12 deletions lib/java/com/google/android/material/timepicker/TimePickerView.java
Expand Up @@ -41,7 +41,6 @@
import androidx.core.view.AccessibilityDelegateCompat;
import androidx.core.view.ViewCompat;
import com.google.android.material.button.MaterialButtonToggleGroup;
import com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener;
import com.google.android.material.chip.Chip;
import com.google.android.material.timepicker.ClockHandView.OnActionUpListener;
import com.google.android.material.timepicker.ClockHandView.OnRotateListener;
Expand Down Expand Up @@ -103,17 +102,17 @@ public TimePickerView(Context context, @Nullable AttributeSet attrs, int defStyl
LayoutInflater.from(context).inflate(R.layout.material_timepicker, this);
clockFace = findViewById(R.id.material_clock_face);
toggle = findViewById(R.id.material_clock_period_toggle);
toggle.addOnButtonCheckedListener(
new OnButtonCheckedListener() {
@Override
public void onButtonChecked(
MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
int period = checkedId == R.id.material_clock_period_pm_button ? PM : AM;
if (onPeriodChangeListener != null && isChecked) {
onPeriodChangeListener.onPeriodChange(period);
}
}
});

toggle.addOnButtonCheckedListener((group, checkedId, isChecked) -> {
if (!isChecked) {
return;
}

int period = checkedId == R.id.material_clock_period_pm_button ? PM : AM;
if (onPeriodChangeListener != null) {
onPeriodChangeListener.onPeriodChange(period);
}
});

minuteView = findViewById(R.id.material_minute_tv);
hourView = findViewById(R.id.material_hour_tv);
Expand Down

0 comments on commit 1dc0e6b

Please sign in to comment.