package com.geek_alarm.android.adapters; import java.util.Date; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.text.format.DateFormat; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; import android.widget.TextView; import com.geek_alarm.android.AlarmPreference; import com.geek_alarm.android.db.AlarmPreferenceDao; import com.geek_alarm.android.R; import com.geek_alarm.android.Utils; import com.geek_alarm.android.activities.SetUpAlarmActivity; /** * Adapter for displaying alarms. */ public class AlarmPreferenceAdapter extends ArrayAdapter<AlarmPreference> { private LayoutInflater inflater; public AlarmPreferenceAdapter(Context context, List<AlarmPreference> preferences) { super(context, -1, preferences); inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.alarm, null); } AlarmPreference preference = getItem(position); fillTime(convertView, preference); fillDays(convertView, preference.getDays()); setUpCheckbox(convertView, preference); convertView.findViewById(R.id.delete).setOnClickListener(new DeleteAlarmListener(preference)); SetUpAlarmListenter listener = new SetUpAlarmListenter(position); convertView.findViewById(R.id.days).setOnClickListener(listener); convertView.findViewById(R.id.time).setOnClickListener(listener); return convertView; } private void setUpCheckbox(View convertView, AlarmPreference preference) { CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.enabled_checkbox); EnableStateListener checkBoxListener = new EnableStateListener(preference); checkBox.setOnCheckedChangeListener(checkBoxListener); checkBox.setChecked(preference.isEnabled()); } /** * Sets time to text view. * @param convertView * @param preference */ private void fillTime( View convertView, AlarmPreference preference) { java.text.DateFormat timeFormat = DateFormat.getTimeFormat(getContext()); Date date = new Date(0, 0, 0, preference.getHour(), preference.getMinute()); String time = timeFormat.format(date); ((TextView)convertView.findViewById(R.id.time)).setText(time); } /** * Adds days to view. * If day is enabled it's white, gray otherwise. * @param convertView * @param days */ private void fillDays(View convertView, int days) { LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.days); layout.removeAllViews(); for (int i = 0; i < 7; i++) { TextView textView = new TextView(getContext()); textView.setGravity(Gravity.CENTER_VERTICAL); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1F/7); textView.setText(Utils.DAYS_OF_WEEK_NAMES[i]); if ((days & (1 << i)) == 0) { textView.setTextAppearance(getContext(), R.style.Fade); } layout.addView(textView, params); } } /** * Called, when user taps on alarm. * Shows dialog with setting - SetUpAlarmActivity. */ private class SetUpAlarmListenter implements View.OnClickListener { private int position; public SetUpAlarmListenter(int position) { super(); this.position = position; } private void fillData(Intent intent) { AlarmPreference alarm = getItem(position); intent.putExtra("hour", alarm.getHour()); intent.putExtra("minute", alarm.getMinute()); intent.putExtra("days", alarm.getDays()); } @Override public void onClick(View v) { Intent intent = new Intent(getContext(), SetUpAlarmActivity.class); fillData(intent); ((Activity)getContext()).startActivityForResult(intent, position); } } /** * Called when user enables/disables alarm using checkbox. */ private class EnableStateListener implements OnCheckedChangeListener { private AlarmPreference alarm; public EnableStateListener(AlarmPreference alarm) { super(); this.alarm = alarm; } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { alarm.setEnabled(isChecked); AlarmPreferenceDao.INSTANCE.update(alarm); if (isChecked) { Utils.setAlarm(alarm); } else { Utils.cancelAlarm(alarm); } } } private class DeleteAlarmListener implements View.OnClickListener { private AlarmPreference alarm; public DeleteAlarmListener(AlarmPreference alarm) { super(); this.alarm = alarm; } @Override public void onClick(View v) { AlarmPreferenceDao.INSTANCE.delete(alarm); if (alarm.isEnabled()) { Utils.cancelAlarm(alarm); } remove(alarm); } } }