content: /*
  * Copyright 2016 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
  
  package com.example.android.directboot.alarms;
  
  import com.example.android.directboot.R;
  
  import android.annotation.SuppressLint;
  import android.content.Context;
  import android.graphics.Canvas;
  import android.graphics.drawable.Drawable;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import androidx.recyclerview.widget.RecyclerView;
  import androidx.recyclerview.widget.SortedList;
  
  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import java.util.Locale;
  import java.util.Set;
  
  /**
   * Adapter responsible for interactions between the {@link RecyclerView} and the
   * scheduled alarms.
   */
  public class AlarmAdapter extends RecyclerView.Adapter<AlarmAdapter.AlarmViewHolder> {
  
      private SortedList<Alarm> mAlarmList;
      private AlarmStorage mAlarmStorage;
      private AlarmUtil mAlarmUtil;
      private DateFormat mDateFormat;
      private DateFormat mTimeFormat;
      private Context mContext;
  
      public AlarmAdapter(Context context, Set<Alarm> alarms) {
          mAlarmList = new SortedList<>(Alarm.class, new SortedListCallback());
          mAlarmList.addAll(alarms);
          mAlarmStorage = new AlarmStorage(context);
          mContext = context;
          mAlarmUtil = new AlarmUtil(context);
          mDateFormat = new SimpleDateFormat("MMM dd", Locale.getDefault());
          mTimeFormat = new SimpleDateFormat("kk:mm", Locale.getDefault());
      }
  
      @Override
      public AlarmViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          View v = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.alarm_row, parent, false);
          return new AlarmViewHolder(v);
      }
  
      @Override
      public void onBindViewHolder(final AlarmViewHolder holder, final int position) {
          Alarm alarm = mAlarmList.get(position);
          Calendar alarmTime = Calendar.getInstance();
          alarmTime.set(Calendar.MONTH, alarm.month);
          alarmTime.set(Calendar.DATE, alarm.date);
          alarmTime.set(Calendar.HOUR_OF_DAY, alarm.hour);
          alarmTime.set(Calendar.MINUTE, alarm.minute);
          holder.mAlarmTimeTextView
                  .setText(mTimeFormat.format(alarmTime.getTime()));
          holder.mAlarmDateTextView
                  .setText(mDateFormat.format(alarmTime.getTime()));
  
          holder.mDeleteImageView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  final int lastPosition = holder.getAdapterPosition();
                  Alarm toBeDeleted = mAlarmList.get(lastPosition);
                  mAlarmList.removeItemAt(lastPosition);
                  mAlarmStorage.deleteAlarm(toBeDeleted);
                  mAlarmUtil.cancelAlarm(toBeDeleted);
                  notifyDataSetChanged();
                  Toast.makeText(mContext, mContext.getString(R.string.alarm_deleted,
                          toBeDeleted.hour, toBeDeleted.minute), Toast.LENGTH_SHORT).show();
              }
          });
      }
  
      @Override
      public int getItemCount() {
          return mAlarmList.size();
      }
  
      public void addAlarm(Alarm alarm) {
          mAlarmList.add(alarm);
          notifyDataSetChanged();
      }
  
      public void deleteAlarm(Alarm alarm) {
          mAlarmList.remove(alarm);
          notifyDataSetChanged();
      }
  
      public static class AlarmViewHolder extends RecyclerView.ViewHolder {
  
          private TextView mAlarmTimeTextView;
          private TextView mAlarmDateTextView;
          private ImageView mDeleteImageView;
  
          public AlarmViewHolder(View itemView) {
              super(itemView);
              mAlarmTimeTextView = (TextView) itemView.findViewById(R.id.text_alarm_time);
              mAlarmDateTextView = (TextView) itemView.findViewById(R.id.text_alarm_date);
              mDeleteImageView = (ImageView) itemView.findViewById(R.id.image_delete_alarm);
          }
      }
  
  
      private static class SortedListCallback extends SortedList.Callback<Alarm> {
  
          @Override
          public int compare(Alarm o1, Alarm o2) {
              return o1.compareTo(o2);
          }
  
          @Override
          public void onInserted(int position, int count) {
              //No op
          }
  
          @Override
          public void onRemoved(int position, int count) {
              //No op
          }
  
          @Override
          public void onMoved(int fromPosition, int toPosition) {
              //No op
          }
  
          @Override
          public void onChanged(int position, int count) {
              //No op
          }
  
          @Override
          public boolean areContentsTheSame(Alarm oldItem, Alarm newItem) {
              return oldItem.equals(newItem);
          }
  
          @Override
          public boolean areItemsTheSame(Alarm item1, Alarm item2) {
              return item1.equals(item2);
          }
      }
  
      /**
       * ItemDecoration that draws an divider between items in a RecyclerView.
       */
      public static class DividerItemDecoration extends RecyclerView.ItemDecoration {
  
          private Drawable mDivider;
  
          public DividerItemDecoration(Context context) {
              mDivider = context.getDrawable(R.drawable.divider);
          }
  
          @Override
          public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
              int left = parent.getPaddingLeft();
              int right = parent.getWidth() - parent.getPaddingRight();
              for (int i = 0; i < parent.getChildCount(); i++) {
                  View child = parent.getChildAt(i);
                  RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                          .getLayoutParams();
                  int top = child.getBottom() + params.bottomMargin;
                  int bottom = top + mDivider.getIntrinsicHeight();
                  mDivider.setBounds(left, top, right, bottom);
                  mDivider.draw(c);
              }
          }
      }
  }
  