content: /*
   * Copyright (C) 2014 AChep@xda <artemchep@gmail.com>
   *
   * 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 2
   * 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, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
   * MA  02110-1301, USA.
   */
  package com.achep.acdisplay.ui.preferences;
  
  import android.app.TimePickerDialog;
  import android.content.Context;
  import androidx.annotation.NonNull;
  import android.text.Html;
  import android.util.AttributeSet;
  import android.view.View;
  import android.widget.CheckBox;
  import android.widget.TextView;
  import android.widget.TimePicker;
  
  import com.achep.acdisplay.Config;
  import com.achep.acdisplay.R;
  import com.achep.base.ui.preferences.MaterialDialogPreference;
  import com.achep.base.utils.DateUtils;
  import com.afollestad.materialdialogs.MaterialDialog;
  
  /**
   * Preference to configure timeouts.
   *
   * @author Artem Chepurnoy
   */
  public class InactiveTimePreference extends MaterialDialogPreference implements View.OnClickListener {
  
      private static final String TAG = "InactiveHoursPreference";
  
      private CheckBox mEnabled;
  
      private Data mFrom = new Data();
      private Data mTo = new Data();
  
      public static class Data {
          public int hours;
          public int minutes;
          public String labelSource;
          public TextView labelTextView;
  
          public void setTime(Context context, int timeInMinutes) {
              setTime(context, timeInMinutes / 60, timeInMinutes % 60);
          }
  
          public void setTime(Context context, int hours, int minutes) {
              this.hours = hours;
              this.minutes = minutes;
  
              String labelTime = DateUtils.formatTime(context, hours, minutes);
              labelTextView.setText(Html.fromHtml(String.format(labelSource, labelTime)));
          }
      }
  
      public InactiveTimePreference(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
  
      @NonNull
      @Override
      public MaterialDialog onBuildDialog(@NonNull MaterialDialog.Builder builder) {
          Context context = getContext();
          MaterialDialog md = builder
                  .customView(R.layout.preference_dialog_inactive_hours, false)
                  .build();
  
          View root = md.getCustomView();
          assert root != null;
          TextView fromTextView = (TextView) root.findViewById(R.id.from);
          TextView toTextView = (TextView) root.findViewById(R.id.to);
          mEnabled = (CheckBox) root.findViewById(R.id.checkbox);
  
          fromTextView.setOnClickListener(this);
          toTextView.setOnClickListener(this);
  
          mFrom.labelTextView = fromTextView;
          mFrom.labelSource = context.getString(R.string.preference_inactive_hours_from);
          mTo.labelTextView = toTextView;
          mTo.labelSource = context.getString(R.string.preference_inactive_hours_to);
  
          Config config = Config.getInstance();
          mFrom.setTime(context, config.getInactiveTimeFrom());
          mTo.setTime(context, config.getInactiveTimeTo());
          mEnabled.setChecked(config.isInactiveTimeEnabled());
          return md;
      }
  
      @Override
      protected void onDialogClosed(boolean positiveResult) {
          super.onDialogClosed(positiveResult);
  
          if (!positiveResult) {
              return;
          }
  
          Context context = getContext();
          Config config = Config.getInstance();
          config.setInactiveTimeFrom(context, mFrom.hours * 60 + mFrom.minutes, null);
          config.setInactiveTimeTo(context, mTo.hours * 60 + mTo.minutes, null);
          config.setInactiveTimeEnabled(context, mEnabled.isChecked(), null);
      }
  
      @Override
      public void onClick(View v) {
          final Data data = v == mFrom.labelTextView ? mFrom : mTo;
  
          TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(),
                  new TimePickerDialog.OnTimeSetListener() {
                      @Override
                      public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                          data.setTime(getContext(), selectedHour, selectedMinute);
                      }
                  }, data.hours, data.minutes, true
          );
          timePickerDialog.show();
      }
  }
  