com.brayanarias.alarmproject.adapter.AlarmListAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.brayanarias.alarmproject.adapter.AlarmListAdapter.java

Source

/*
 * 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;
    }
}