Java tutorial
/* * Copyright (C) 2015 brayanarias.com ing.brayanarias@gmail.com * * 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.brayanarias.alarmproject.adapter; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.widget.DrawerLayout; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.brayanarias.alarmproject.R; import com.brayanarias.alarmproject.activity.AddAlarmActivity; import com.brayanarias.alarmproject.activity.MainActivity; import com.brayanarias.alarmproject.database.AlarmDataBase; import com.brayanarias.alarmproject.database.DataBaseManager; import com.brayanarias.alarmproject.fragment.AlarmEmptyFragment; import com.brayanarias.alarmproject.model.Alarm; import com.brayanarias.alarmproject.receiver.AlarmReceiver; import com.brayanarias.alarmproject.util.AlarmUtilities; import com.brayanarias.alarmproject.util.Constant; import com.brayanarias.alarmproject.util.Vibration; import java.util.List; public class AlarmListAdapter extends RecyclerView.Adapter<AlarmListAdapter.ViewHolderAlarm> { List<Alarm> alarmList; MainActivity mainActivity; private LayoutInflater inflater; public AlarmListAdapter(List<Alarm> alarmList, MainActivity mainActivity) { this.alarmList = alarmList; this.mainActivity = mainActivity; this.inflater = LayoutInflater.from(this.mainActivity); } @Override public ViewHolderAlarm onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = this.inflater.inflate(R.layout.alarm_list_row, viewGroup, false); ViewHolderAlarm viewHolderAlarm = new ViewHolderAlarm(view); return viewHolderAlarm; } @Override public void onBindViewHolder(ViewHolderAlarm viewHolderAlarm, int position) { Alarm alarm = this.alarmList.get(position); viewHolderAlarm.ivAlarmIcon.setImageResource(R.drawable.ic_alarm_list_icon); viewHolderAlarm.tvAlarmHour.setText(alarm.getHourFormatted()); viewHolderAlarm.tvAMPM.setText(alarm.getAmPm().toUpperCase()); viewHolderAlarm.tvAlarmDays.setText(AlarmUtilities.getDaysForBinary(alarm.getDaysOfAlamr(), mainActivity)); viewHolderAlarm.swAlarm.setChecked(alarm.getActivated() == 1); viewHolderAlarm.swAlarm.setOnCheckedChangeListener(viewHolderAlarm); viewHolderAlarm.ivAlarmDelete.setImageResource(R.drawable.ic_trash_icon); viewHolderAlarm.ivAlarmDelete.setOnClickListener(viewHolderAlarm); if (viewHolderAlarm.tvAlarmName != null) { viewHolderAlarm.tvAlarmName.setText(alarm.getName()); } } @Override public int getItemCount() { return alarmList.size(); } class ViewHolderAlarm extends RecyclerView.ViewHolder implements View.OnClickListener, SwitchCompat.OnCheckedChangeListener, View.OnLongClickListener { ImageView ivAlarmIcon; TextView tvAlarmHour; TextView tvAMPM; TextView tvAlarmDays; SwitchCompat swAlarm; ImageView ivAlarmDelete; TextView tvAlarmName; public ViewHolderAlarm(View itemView) { super(itemView); itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); ivAlarmIcon = (ImageView) itemView.findViewById(R.id.ivAlarmIcon); tvAlarmHour = (TextView) itemView.findViewById(R.id.tvAlarmHour); tvAMPM = (TextView) itemView.findViewById(R.id.tvAMPM); tvAlarmDays = (TextView) itemView.findViewById(R.id.tvAlarmDays); swAlarm = (SwitchCompat) itemView.findViewById(R.id.swAlarm); ivAlarmDelete = (ImageView) itemView.findViewById(R.id.ivAlarmDelete); tvAlarmName = (TextView) itemView.findViewById(R.id.tvAlarmName); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ivAlarmDelete: showDeleteAlarmPopup(getAdapterPosition()); break; default: startAddAlarmActivity(getAdapterPosition()); } } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Vibration.singleVibrate(50, buttonView.getContext()); Alarm alarm = alarmList.get(getLayoutPosition()); alarm.setActivated(isChecked ? 1 : 0); DataBaseManager dataBaseManager = DataBaseManager.getInstance(buttonView.getContext()); AlarmDataBase.updateAlarm(alarm, dataBaseManager); if (isChecked) { Resources resources = buttonView.getResources(); String messageRemaining = AlarmUtilities.getMessageRemaining(alarm, resources); Toast.makeText(mainActivity, messageRemaining, Toast.LENGTH_SHORT).show(); } AlarmReceiver.setAlarms(buttonView.getContext()); } @Override public boolean onLongClick(View v) { Vibration.singleVibrate(50, v.getContext()); showDeleteAlarmPopup(getAdapterPosition()); return true; } } private void showDeleteAlarmPopup(final int position) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(mainActivity) .setMessage(R.string.txt_delete_alarm).setCancelable(false) .setPositiveButton(R.string.txt_button_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Alarm alarm = alarmList.get(position); DataBaseManager dataBaseManager = DataBaseManager.getInstance(mainActivity); AlarmDataBase.deleteAlarm(alarm.getId(), dataBaseManager); alarmList.remove(position); if (alarmList.isEmpty()) { Fragment fragmentToShow = new AlarmEmptyFragment(); FragmentManager fragmentManager = mainActivity.getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.contentFrame, fragmentToShow, fragmentToShow.getClass().getName()) .commit(); CharSequence newTitle = mainActivity.getResources() .getStringArray(R.array.drawer_list_text_array)[0]; mainActivity.setTitle(newTitle); } else { notifyDataSetChanged(); } } }).setNegativeButton(R.string.txt_button_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); } private void startAddAlarmActivity(int position) { Alarm alarm = this.alarmList.get(position); Intent intent = new Intent(mainActivity, AddAlarmActivity.class); intent.putExtra(Constant.actionAlarmKey, Constant.editAlarm); intent.putExtra(Constant.alarmSerializableKey, alarm); mainActivity.startActivity(intent); } public void setAlarmList(List<Alarm> alarmList) { this.alarmList = alarmList; } }