package com.pennapps.labs.pennmobile.adapters; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Point; import android.os.SystemClock; import android.support.design.widget.Snackbar; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Switch; import android.widget.TextView; import com.pennapps.labs.pennmobile.LaundryBroadcastReceiver; import com.pennapps.labs.pennmobile.LaundryFragment; import com.pennapps.labs.pennmobile.MainActivity; import com.pennapps.labs.pennmobile.R; import com.pennapps.labs.pennmobile.classes.LaundryRoom; import com.pennapps.labs.pennmobile.classes.LaundryMachine; import com.squareup.picasso.Picasso; import java.util.List; import butterknife.ButterKnife; public class LaundryMachineAdapter extends ArrayAdapter<LaundryMachine> { private List<LaundryMachine> machines; private final LayoutInflater inflater; private MainActivity activity; private boolean wash; private LaundryRoom laundryRoom; public LaundryMachineAdapter(MainActivity activity, List<LaundryMachine> machines, boolean wash, LaundryRoom laundryRoom) { super(activity, R.layout.laundry_list_item, machines); this.machines = machines; inflater = LayoutInflater.from(activity); this.activity = activity; this.wash = wash; this.laundryRoom = laundryRoom; } @Override public View getView(int position, View view, ViewGroup parent) { if (view == null) { view = inflater.inflate(R.layout.laundry_machine_list_item, parent, false); } ButterKnife.bind(this, view); LinearLayout summary = (LinearLayout) view.findViewById(R.id.laundry_machine_list_summary); RelativeLayout item = (RelativeLayout) view.findViewById(R.id.laundry_machine_list_normal); StringBuilder stringBuilder = new StringBuilder(); if (position == 0) { item.setVisibility(View.GONE); summary.setVisibility(View.VISIBLE); ImageView imageView = (ImageView) view.findViewById(R.id.laundry_machine_iv); RelativeLayout summary_rl = (RelativeLayout) view.findViewById(R.id.laundry_machine_summary_rl); TextView description = (TextView) view.findViewById(R.id.laundry_building_description); description.setText(laundryRoom.name); TextView availcount = (TextView) view.findViewById(R.id.laundry_machine_summary); int avail = 0; for (LaundryMachine machine: machines) { if (machine.available) { avail++; } } String str = wash ? activity.getString(R.string.laundry_washer) : activity.getString(R.string.laundry_dryer); stringBuilder.append(avail).append(" out of ").append(machines.size()).append(" ") .append(str).append(" available"); availcount.setText(stringBuilder); Display display = activity.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x / 4; if (wash) { Picasso.with(activity).load(R.drawable.washer).resize(width, width).into(imageView); LaundryFragment.setSummary(laundryRoom.washers_available, laundryRoom.washers_in_use, 10, summary_rl, activity); } else { Picasso.with(activity).load(R.drawable.dryer).resize(width, width).into(imageView); LaundryFragment.setSummary(laundryRoom.dryers_available, laundryRoom.dryers_in_use, 10, summary_rl, activity); } } else{ summary.setVisibility(View.GONE); item.setVisibility(View.VISIBLE); TextView title = (TextView) view.findViewById(R.id.laundry_machine_title); final LaundryMachine machine = machines.get(position-1); stringBuilder.append(machine.machine_type).append(" ").append(machine.number); title.setText(stringBuilder); TextView description = (TextView) view.findViewById(R.id.laundry_machine_description); Switch mSwitch = (Switch) view.findViewById(R.id.laundry_notification_button); if (machine.available) { description.setText(R.string.laundry_available); description.setTextColor(activity.getResources().getColor(R.color.avail_color_green)); mSwitch.setVisibility(View.GONE); } else { stringBuilder = new StringBuilder(); stringBuilder.append("Busy – ").append(machine.getTimeLeft(activity)); description.setText(stringBuilder); if (machine.getTimeInMilli() > 0) { mSwitch.setVisibility(View.VISIBLE); } else { mSwitch.setVisibility(View.GONE); } setSwitchState(machine, mSwitch); description.setTextColor(activity.getResources().getColor(R.color.avail_color_red)); } } return view; } private void setSwitchState(final LaundryMachine machine, Switch mSwitch) { final Intent intent = new Intent(getContext(), LaundryBroadcastReceiver.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(activity.getString(R.string.laundry_position), laundryRoom.name.hashCode() + machine.number); intent.putExtra(activity.getString(R.string.laundry), laundryRoom); intent.putExtra(activity.getString(R.string.laundry_machine_intent), machine); PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), laundryRoom.name.hashCode() + machine.number, intent, PendingIntent.FLAG_NO_CREATE); if (alarmIntent == null) { mSwitch.setChecked(false); } else { mSwitch.setChecked(true); } mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { final AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); if (isChecked) { final PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), laundryRoom.name.hashCode() + machine.number, intent, PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + machine.getTimeInMilli(), alarmIntent); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(activity.getString(R.string.laundry_notification_snackbar_on)) .append(" ").append(machine.machine_type).append(" ") .append(machine.number); Snackbar snackbar = Snackbar.make(buttonView,stringBuilder , Snackbar.LENGTH_SHORT); View subView = snackbar.getView(); TextView snackTextView = (TextView) subView.findViewById(android.support.design.R.id.snackbar_text); snackTextView.setTextColor(activity.getResources().getColor(R.color.white)); snackbar.show(); } else { final PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), laundryRoom.name.hashCode() + machine.number, intent, PendingIntent.FLAG_NO_CREATE); if (alarmIntent != null) { alarmManager.cancel(alarmIntent); alarmIntent.cancel(); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(activity.getString(R.string.laundry_notification_snackbar_off)) .append(" ").append(machine.machine_type).append(" ") .append(machine.number); if (buttonView.getContext() == null) { return; } Snackbar snackbar = Snackbar.make(buttonView,stringBuilder, Snackbar.LENGTH_SHORT); View subView = snackbar.getView(); TextView snackTextView = (TextView) subView.findViewById(android.support.design.R.id.snackbar_text); snackTextView.setTextColor(activity.getResources().getColor(R.color.white)); snackbar.show(); } } }); } @Override public int getCount() { return machines.size() + 1; } }