diff --git a/wear/src/main/java/ch/liip/timeforcoffee/adapter/DepartureListAdapter.java b/wear/src/main/java/ch/liip/timeforcoffee/adapter/DepartureListAdapter.java index eacdcc9..bee8604 100755 --- a/wear/src/main/java/ch/liip/timeforcoffee/adapter/DepartureListAdapter.java +++ b/wear/src/main/java/ch/liip/timeforcoffee/adapter/DepartureListAdapter.java @@ -5,6 +5,8 @@ import android.graphics.Paint; import android.graphics.Typeface; import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,109 +15,104 @@ import ch.liip.timeforcoffee.R; import ch.liip.timeforcoffee.api.models.Departure; +import ch.liip.timeforcoffee.api.models.Station; import ch.liip.timeforcoffee.common.Typefaces; import java.util.Arrays; import java.util.List; -public class DepartureListAdapter extends ArrayAdapter { +public class DepartureListAdapter extends RecyclerView.Adapter { - private List mDepartures; - private Context mContext; + private final List mDepartures; private static final String[] linesWithSymbol = {"ICN", "EN", "ICN", "TGV", "RX", "EC", "IC", "SC", "CNL", "ICE", "IR"}; - private static class DepartureViewHolder { - TextView lineNameTextView; - TextView toTextView; - TextView departureTextView; - TextView scheduledTimeTextView; - TextView realtimeTextView; - TextView platformTextView; + public DepartureListAdapter(List departures) { + mDepartures = departures; } - public DepartureListAdapter(Context context, List departures) { - super(context, R.layout.departure_list_row, departures); + @Override + public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.departure_list_row, viewGroup, false); + return new ViewHolder(view); + } - mDepartures = departures; - mContext = context; + @Override + public void onBindViewHolder(ViewHolder viewHolder, final int position) { + viewHolder.bind(mDepartures.get(position)); } - @NonNull - public View getView(int position, View convertView, @NonNull ViewGroup parent) { - Departure departure = this.mDepartures.get(position); - DepartureViewHolder viewHolder; + @Override + public int getItemCount() { + return mDepartures.size(); + } - if (convertView == null) { - LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - convertView = inflater.inflate(R.layout.departure_list_row, parent, false); + public void setDepartures(List departures) { + mDepartures.clear(); + mDepartures.addAll(departures); + notifyDataSetChanged(); + } - viewHolder = new DepartureViewHolder(); - viewHolder.lineNameTextView = convertView.findViewById(R.id.name); - viewHolder.toTextView = convertView.findViewById(R.id.to); - viewHolder.departureTextView = convertView.findViewById(R.id.departure); - viewHolder.scheduledTimeTextView = convertView.findViewById(R.id.scheduledtime); - viewHolder.realtimeTextView = convertView.findViewById(R.id.realtime); - viewHolder.platformTextView = convertView.findViewById(R.id.platform); + public static class ViewHolder extends RecyclerView.ViewHolder { + TextView lineNameTextView; + TextView toTextView; + TextView departureTextView; + TextView scheduledTimeTextView; + TextView realtimeTextView; + TextView platformTextView; - convertView.setTag(viewHolder); - } - else { - viewHolder = (DepartureViewHolder) convertView.getTag(); + public ViewHolder(View view) { + super(view); + lineNameTextView = view.findViewById(R.id.name); + toTextView = view.findViewById(R.id.to); + departureTextView = view.findViewById(R.id.departure); + scheduledTimeTextView = view.findViewById(R.id.scheduledtime); + realtimeTextView = view.findViewById(R.id.realtime); + platformTextView = view.findViewById(R.id.platform); } - setLineName(viewHolder.lineNameTextView, departure); - viewHolder.toTextView.setText(departure.getDestinationName()); - viewHolder.departureTextView.setText(departure.departureInMinutes()); - - if (departure.isLate()) { - viewHolder.realtimeTextView.setVisibility(View.VISIBLE); - viewHolder.realtimeTextView.setText(departure.getDepartureRealtimeStr()); - viewHolder.scheduledTimeTextView.setText(departure.getDepartureScheduledStr()); - viewHolder.scheduledTimeTextView.setPaintFlags(viewHolder.scheduledTimeTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - } - else { - viewHolder.realtimeTextView.setVisibility(View.GONE); - viewHolder.scheduledTimeTextView.setText(departure.getDepartureScheduledStr()); - viewHolder.scheduledTimeTextView.setPaintFlags(viewHolder.scheduledTimeTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); - } + public void bind(Departure departure) { + setLineName(lineNameTextView, departure); + toTextView.setText(departure.getDestinationName()); + departureTextView.setText(departure.departureInMinutes()); + + if (departure.isLate()) { + realtimeTextView.setVisibility(View.VISIBLE); + realtimeTextView.setText(departure.getDepartureRealtimeStr()); + scheduledTimeTextView.setText(departure.getDepartureScheduledStr()); + scheduledTimeTextView.setPaintFlags(scheduledTimeTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + realtimeTextView.setVisibility(View.GONE); + scheduledTimeTextView.setText(departure.getDepartureScheduledStr()); + scheduledTimeTextView.setPaintFlags(scheduledTimeTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); + } - if (departure.getPlatform() != null) { - viewHolder.platformTextView.setVisibility(View.VISIBLE); - viewHolder.platformTextView.setText(String.format(getContext().getString(R.string.platform), departure.getPlatform())); - } - else { - viewHolder.platformTextView.setVisibility(View.GONE); + if (departure.getPlatform() != null) { + platformTextView.setVisibility(View.VISIBLE); + platformTextView.setText(String.format(platformTextView.getContext().getString(R.string.platform), departure.getPlatform())); + } else { + platformTextView.setVisibility(View.GONE); + } } - return convertView; - } - - private void setLineName(TextView textView, Departure departure) { - String name = departure.getLine(); - textView.setText(name); - - try { - if (Arrays.asList(linesWithSymbol).contains(name)) { - Typeface type = Typefaces.get(mContext, "trainsymbol"); - textView.setTypeface(type); - textView.setTextColor(Color.WHITE); - textView.setBackgroundColor(Color.RED); - } - else { - textView.setTypeface(Typeface.DEFAULT_BOLD); - textView.setTextColor(name.equals("RE") ? Color.RED : departure.getColorFg()); - textView.setBackgroundColor(departure.getColorBg() == Color.WHITE ? mContext.getResources().getColor(R.color.gray) : departure.getColorBg()); + private void setLineName(TextView textView, Departure departure) { + String name = departure.getLine(); + textView.setText(name); + + try { + if (Arrays.asList(linesWithSymbol).contains(name)) { + Typeface type = Typefaces.get(textView.getContext(), "trainsymbol"); + textView.setTypeface(type); + textView.setTextColor(Color.WHITE); + textView.setBackgroundColor(Color.RED); + } else { + textView.setTypeface(Typeface.DEFAULT_BOLD); + textView.setTextColor(name.equals("RE") ? Color.RED : departure.getColorFg()); + textView.setBackgroundColor(departure.getColorBg() == Color.WHITE ? textView.getContext().getResources().getColor(R.color.gray) : departure.getColorBg()); + } + } catch (Exception ex) { + // Do nothing } } - catch (Exception ex) { - // Do nothing - } - } - - public void setDepartures(List departures) { - mDepartures.clear(); - mDepartures.addAll(departures); - notifyDataSetChanged(); } } diff --git a/wear/src/main/java/ch/liip/timeforcoffee/adapter/StationListAdapter.java b/wear/src/main/java/ch/liip/timeforcoffee/adapter/StationListAdapter.java index 39ed146..2994688 100644 --- a/wear/src/main/java/ch/liip/timeforcoffee/adapter/StationListAdapter.java +++ b/wear/src/main/java/ch/liip/timeforcoffee/adapter/StationListAdapter.java @@ -1,39 +1,36 @@ package ch.liip.timeforcoffee.adapter; import android.content.Context; -import android.support.wearable.view.WearableListView; +import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + import ch.liip.timeforcoffee.R; import ch.liip.timeforcoffee.api.models.Station; -import ch.liip.timeforcoffee.view.StationItemView; import java.util.List; -/** - * Created by fsantschi on 08/03/15. - */ -public class StationListAdapter extends WearableListView.Adapter { - private List mStations; - private Context mContext; +public class StationListAdapter extends RecyclerView.Adapter { + + private final List mStations; public StationListAdapter(Context context, List stations) { mStations = stations; - mContext = context; } @Override - public WearableListView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { - return new WearableListView.ViewHolder(new StationItemView(mContext)); + public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.station_item, viewGroup, false); + return new ViewHolder(view); } @Override - public void onBindViewHolder(WearableListView.ViewHolder viewHolder, final int position) { - StationItemView view = (StationItemView) viewHolder.itemView; - final Station item = mStations.get(position); - TextView textView = (TextView) view.findViewById(R.id.name); - textView.setText(item.getName()); + public void onBindViewHolder(ViewHolder viewHolder, final int position) { + viewHolder.bind(mStations.get(position)); } @Override @@ -46,4 +43,18 @@ public void setStations(List stations) { mStations.addAll(stations); notifyDataSetChanged(); } + + public static class ViewHolder extends RecyclerView.ViewHolder { + private final TextView mTextView; + + public ViewHolder(View view) { + super(view); + mTextView = (TextView) view.findViewById(R.id.name); + } + + public void bind(Station station) { + mTextView.setText(station.getName()); + } + } + } diff --git a/wear/src/main/java/ch/liip/timeforcoffee/fragment/DepartureListFragment.java b/wear/src/main/java/ch/liip/timeforcoffee/fragment/DepartureListFragment.java index d8111f5..d79c99a 100755 --- a/wear/src/main/java/ch/liip/timeforcoffee/fragment/DepartureListFragment.java +++ b/wear/src/main/java/ch/liip/timeforcoffee/fragment/DepartureListFragment.java @@ -3,15 +3,18 @@ import android.app.Fragment; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.wear.widget.WearableLinearLayoutManager; +import androidx.wear.widget.WearableRecyclerView; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import ch.liip.timeforcoffee.R; import ch.liip.timeforcoffee.adapter.DepartureListAdapter; +import ch.liip.timeforcoffee.adapter.StationListAdapter; import ch.liip.timeforcoffee.api.models.Departure; import ch.liip.timeforcoffee.api.models.Station; @@ -25,7 +28,8 @@ public class DepartureListFragment extends Fragment { private ProgressBar mProgressBar; private TextView mNoResultsTextView; private TextView mTitleTextView; - private ListView mListView; + WearableLinearLayoutManager mLinearLayoutManager; + private WearableRecyclerView mListView; private DepartureListAdapter mAdapter; private List mDepartures = new ArrayList<>(); @@ -44,7 +48,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mTitleTextView = view.findViewById(R.id.title); mListView = view.findViewById(R.id.list_view); - mAdapter = new DepartureListAdapter(getActivity(), mDepartures); + mLinearLayoutManager = new WearableLinearLayoutManager(getActivity()); + mListView.setLayoutManager(mLinearLayoutManager); + mListView.setEdgeItemsCenteringEnabled(true); + + mAdapter = new DepartureListAdapter(mDepartures); mListView.setAdapter(mAdapter); return view; diff --git a/wear/src/main/java/ch/liip/timeforcoffee/fragment/StationListFragment.java b/wear/src/main/java/ch/liip/timeforcoffee/fragment/StationListFragment.java index e1b90b3..2ec8149 100755 --- a/wear/src/main/java/ch/liip/timeforcoffee/fragment/StationListFragment.java +++ b/wear/src/main/java/ch/liip/timeforcoffee/fragment/StationListFragment.java @@ -3,6 +3,9 @@ import android.app.Fragment; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.wear.widget.WearableLinearLayoutManager; +import androidx.wear.widget.WearableRecyclerView; + import android.support.wearable.view.WearableListView; import android.view.LayoutInflater; import android.view.View; @@ -24,7 +27,8 @@ public class StationListFragment extends Fragment implements WearableListView.Cl private ProgressBar mProgressBar; private TextView mTitleTextView; - private WearableListView mListView; + WearableLinearLayoutManager mLinearLayoutManager; + private WearableRecyclerView mListView; private StationListAdapter mAdapter; private List mStations = new ArrayList<>(); @@ -44,8 +48,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mListView = view.findViewById(R.id.list_view); mAdapter = new StationListAdapter(getActivity(), mStations); + + mLinearLayoutManager = new WearableLinearLayoutManager(getActivity()); + mListView.setLayoutManager(mLinearLayoutManager); + mListView.setEdgeItemsCenteringEnabled(true); mListView.setAdapter(mAdapter); - mListView.setClickListener(this); + //mListView.setClickListener(this); return view; } diff --git a/wear/src/main/res/layout/activity_wear.xml b/wear/src/main/res/layout/activity_wear.xml index a185750..a174293 100644 --- a/wear/src/main/res/layout/activity_wear.xml +++ b/wear/src/main/res/layout/activity_wear.xml @@ -1,5 +1,6 @@ - + android:layout_height="match_parent"> - \ No newline at end of file + diff --git a/wear/src/main/res/layout/fragment_departure_list.xml b/wear/src/main/res/layout/fragment_departure_list.xml index 2e6a245..6806193 100644 --- a/wear/src/main/res/layout/fragment_departure_list.xml +++ b/wear/src/main/res/layout/fragment_departure_list.xml @@ -12,7 +12,8 @@ android:layout_gravity="center" android:indeterminate="true" android:indeterminateTint="@color/primary" - android:indeterminateTintMode="src_in" /> + android:indeterminateTintMode="src_in" + tools:visibility="gone"/> - + android:visibility="gone" /> diff --git a/wear/src/main/res/layout/fragment_station_list.xml b/wear/src/main/res/layout/fragment_station_list.xml index 79ed9ec..fb84a92 100644 --- a/wear/src/main/res/layout/fragment_station_list.xml +++ b/wear/src/main/res/layout/fragment_station_list.xml @@ -36,13 +36,12 @@ android:textSize="16sp" android:visibility="gone" /> - + android:visibility="gone" />