package me.jfenn.alarmio.adapters; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeUnit; import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatCheckBox; import androidx.recyclerview.widget.RecyclerView; import me.jfenn.alarmio.R; import me.jfenn.alarmio.data.PreferenceData; public class TimeZonesAdapter extends RecyclerView.Adapter<TimeZonesAdapter.ViewHolder> { private List<String> timeZones; public TimeZonesAdapter(List<String> timeZones) { this.timeZones = timeZones; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_time_zone, parent, false)); } @Override public void onBindViewHolder(@NonNull final ViewHolder holder, int position) { TimeZone timeZone = TimeZone.getTimeZone(timeZones.get(position)); int offsetMillis = timeZone.getRawOffset(); holder.time.setText(String.format( Locale.getDefault(), "GMT%s%02d:%02d", offsetMillis >= 0 ? "+" : "", TimeUnit.MILLISECONDS.toHours(offsetMillis), TimeUnit.MILLISECONDS.toMinutes(Math.abs(offsetMillis)) % TimeUnit.HOURS.toMinutes(1) )); holder.title.setText(timeZone.getDisplayName(Locale.getDefault())); holder.itemView.setOnClickListener(v -> holder.checkBox.toggle()); holder.checkBox.setOnCheckedChangeListener(null); holder.checkBox.setChecked((boolean) PreferenceData.TIME_ZONE_ENABLED.getSpecificValue(holder.itemView.getContext(), timeZone.getID())); holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { TimeZone timeZone1 = TimeZone.getTimeZone(timeZones.get(holder.getAdapterPosition())); PreferenceData.TIME_ZONE_ENABLED.setValue(holder.itemView.getContext(), isChecked, timeZone1.getID()); }); } @Override public int getItemCount() { return timeZones.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { private TextView time; private TextView title; private AppCompatCheckBox checkBox; public ViewHolder(View v) { super(v); time = v.findViewById(R.id.time); title = v.findViewById(R.id.title); checkBox = v.findViewById(R.id.checkbox); } } }