diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java index 1577ce42..584ac07d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ConfigureAlarms.java @@ -19,8 +19,9 @@ package nodomain.freeyourgadget.gadgetbridge.activities; import android.content.Intent; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.MenuItem; -import android.widget.ListView; import java.util.Arrays; import java.util.HashSet; @@ -64,8 +65,10 @@ public class ConfigureAlarms extends GBActivity { mGBAlarmListAdapter = new GBAlarmListAdapter(this, preferencesAlarmListSet); - ListView listView = (ListView) findViewById(R.id.alarm_list); - listView.setAdapter(mGBAlarmListAdapter); + RecyclerView alarmsRecyclerView = (RecyclerView) findViewById(R.id.alarm_list); + alarmsRecyclerView.setHasFixedSize(true); + alarmsRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + alarmsRecyclerView.setAdapter(mGBAlarmListAdapter); updateAlarmsFromPrefs(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java index 129033ec..a63606d1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBAlarmListAdapter.java @@ -19,20 +19,21 @@ package nodomain.freeyourgadget.gadgetbridge.adapter; import android.content.Context; -import android.graphics.Color; +import android.support.v7.widget.CardView; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; +import android.widget.CheckedTextView; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.Set; -import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.ConfigureAlarms; import nodomain.freeyourgadget.gadgetbridge.impl.GBAlarm; @@ -41,22 +42,18 @@ import nodomain.freeyourgadget.gadgetbridge.model.Alarm; /** * Adapter for displaying GBAlarm instances. */ -public class GBAlarmListAdapter extends ArrayAdapter { +public class GBAlarmListAdapter extends RecyclerView.Adapter { private final Context mContext; - private ArrayList alarmList; - - public GBAlarmListAdapter(Context context, ArrayList alarmList) { - super(context, 0, alarmList); + private List alarmList; + public GBAlarmListAdapter(Context context, List alarmList) { this.mContext = context; this.alarmList = alarmList; } public GBAlarmListAdapter(Context context, Set preferencesAlarmListSet) { - super(context, 0, new ArrayList()); - this.mContext = context; alarmList = new ArrayList<>(); @@ -81,7 +78,7 @@ public class GBAlarmListAdapter extends ArrayAdapter { } public ArrayList getAlarmList() { - return alarmList; + return (ArrayList) alarmList; } @@ -95,53 +92,26 @@ public class GBAlarmListAdapter extends ArrayAdapter { } @Override - public int getCount() { - if (alarmList != null) { - return alarmList.size(); - } - return 0; + public GBAlarmListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.alarm_item, parent, false); + ViewHolder vh = new ViewHolder(view); + return vh; } @Override - public GBAlarm getItem(int position) { - if (alarmList != null) { - return alarmList.get(position); - } - return null; - } + public void onBindViewHolder(ViewHolder holder, final int position) { - @Override - public long getItemId(int position) { - if (alarmList != null) { - return alarmList.get(position).getIndex(); - } - return 0; - } + final GBAlarm alarm = alarmList.get(position); - @Override - public View getView(int position, View view, ViewGroup parent) { + holder.alarmDayMonday.setChecked(alarm.getRepetition(Alarm.ALARM_MON)); + holder.alarmDayTuesday.setChecked(alarm.getRepetition(Alarm.ALARM_TUE)); + holder.alarmDayWednesday.setChecked(alarm.getRepetition(Alarm.ALARM_WED)); + holder.alarmDayThursday.setChecked(alarm.getRepetition(Alarm.ALARM_THU)); + holder.alarmDayFriday.setChecked(alarm.getRepetition(Alarm.ALARM_FRI)); + holder.alarmDaySaturday.setChecked(alarm.getRepetition(Alarm.ALARM_SAT)); + holder.alarmDaySunday.setChecked(alarm.getRepetition(Alarm.ALARM_SUN)); - final GBAlarm alarm = getItem(position); - - if (view == null) { - LayoutInflater inflater = (LayoutInflater) mContext - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = inflater.inflate(R.layout.alarm_item, parent, false); - } - - TextView alarmTime = (TextView) view.findViewById(R.id.alarm_item_time); - Switch isEnabled = (Switch) view.findViewById(R.id.alarm_item_toggle); - TextView isSmartWakeup = (TextView) view.findViewById(R.id.alarm_smart_wakeup); - - highlightDay((TextView) view.findViewById(R.id.alarm_item_sunday), alarm.getRepetition(Alarm.ALARM_SUN)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_monday), alarm.getRepetition(Alarm.ALARM_MON)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_tuesday), alarm.getRepetition(Alarm.ALARM_TUE)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_wednesday), alarm.getRepetition(Alarm.ALARM_WED)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_thursday), alarm.getRepetition(Alarm.ALARM_THU)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_friday), alarm.getRepetition(Alarm.ALARM_FRI)); - highlightDay((TextView) view.findViewById(R.id.alarm_item_saturday), alarm.getRepetition(Alarm.ALARM_SAT)); - - isEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + holder.isEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { alarm.setEnabled(isChecked); @@ -149,28 +119,62 @@ public class GBAlarmListAdapter extends ArrayAdapter { } }); - view.setOnClickListener(new View.OnClickListener() { + holder.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((ConfigureAlarms) mContext).configureAlarm(alarm); } }); - alarmTime.setText(alarm.getTime()); - isEnabled.setChecked(alarm.isEnabled()); + holder.alarmTime.setText(alarm.getTime()); + holder.isEnabled.setChecked(alarm.isEnabled()); if (alarm.isSmartWakeup()) { - isSmartWakeup.setVisibility(TextView.VISIBLE); + holder.isSmartWakeup.setVisibility(TextView.VISIBLE); } else { - isSmartWakeup.setVisibility(TextView.GONE); - } - - return view; - } - - private void highlightDay(TextView view, boolean isOn) { - if (isOn) { - view.setTextColor(Color.BLUE); - } else { - view.setTextColor(GBApplication.getTextColor(mContext)); + holder.isSmartWakeup.setVisibility(TextView.GONE); } } + + + @Override + public int getItemCount() { + return alarmList.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + + CardView container; + + TextView alarmTime; + Switch isEnabled; + TextView isSmartWakeup; + + CheckedTextView alarmDayMonday; + CheckedTextView alarmDayTuesday; + CheckedTextView alarmDayWednesday; + CheckedTextView alarmDayThursday; + CheckedTextView alarmDayFriday; + CheckedTextView alarmDaySaturday; + CheckedTextView alarmDaySunday; + + ViewHolder(View view) { + super(view); + + container = (CardView) view.findViewById(R.id.card_view); + + alarmTime = (TextView) view.findViewById(R.id.alarm_item_time); + isEnabled = (Switch) view.findViewById(R.id.alarm_item_toggle); + isSmartWakeup = (TextView) view.findViewById(R.id.alarm_smart_wakeup); + + alarmDayMonday = (CheckedTextView) view.findViewById(R.id.alarm_item_monday); + alarmDayTuesday = (CheckedTextView) view.findViewById(R.id.alarm_item_tuesday); + alarmDayWednesday = (CheckedTextView) view.findViewById(R.id.alarm_item_wednesday); + alarmDayThursday = (CheckedTextView) view.findViewById(R.id.alarm_item_thursday); + alarmDayFriday = (CheckedTextView) view.findViewById(R.id.alarm_item_friday); + alarmDaySaturday = (CheckedTextView) view.findViewById(R.id.alarm_item_saturday); + alarmDaySunday = (CheckedTextView) view.findViewById(R.id.alarm_item_sunday); + + + } + } + } diff --git a/app/src/main/res/layout/activity_configure_alarms.xml b/app/src/main/res/layout/activity_configure_alarms.xml index 10cd04bd..fbcdf6c5 100644 --- a/app/src/main/res/layout/activity_configure_alarms.xml +++ b/app/src/main/res/layout/activity_configure_alarms.xml @@ -1,16 +1,17 @@ - - - + diff --git a/app/src/main/res/layout/alarm_item.xml b/app/src/main/res/layout/alarm_item.xml index a4d887fe..470abf95 100644 --- a/app/src/main/res/layout/alarm_item.xml +++ b/app/src/main/res/layout/alarm_item.xml @@ -1,110 +1,145 @@ - - + android:layout_margin="8dp" + android:foreground="?android:attr/selectableItemBackground" + card_view:cardCornerRadius="4dp" + card_view:cardElevation="4dp" + card_view:contentPadding="8dp"> - + android:layout_margin="16dp"> - + - + - + - + - + - + - + - + - + - + + - \ No newline at end of file + + + + + + \ No newline at end of file