/* * 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.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.support.v7.util.SortedList; import android.support.v7.widget.RecyclerView; 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 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 { private SortedList mAlarmList; private AlarmStorage mAlarmStorage; private AlarmUtil mAlarmUtil; private DateFormat mDateFormat; private DateFormat mTimeFormat; private Context mContext; public AlarmAdapter(Context context, Set 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(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) { Alarm toBeDeleted = mAlarmList.get(position); mAlarmList.removeItemAt(position); 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 { @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); } } } }