package de.tum.in.tumcampusapp.cards; import android.app.Notification; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v4.app.NotificationCompat; import android.support.v7.widget.RecyclerView; import android.text.format.DateUtils; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.RemoteViews; import android.widget.TextView; import java.util.List; import de.tum.in.tumcampusapp.R; import de.tum.in.tumcampusapp.activities.TransportationDetailsActivity; import de.tum.in.tumcampusapp.auxiliary.DepartureView; import de.tum.in.tumcampusapp.cards.generic.Card; import de.tum.in.tumcampusapp.cards.generic.NotificationAwareCard; import de.tum.in.tumcampusapp.managers.TransportManager; import static de.tum.in.tumcampusapp.managers.CardManager.CARD_MVV; /** * Card that shows MVV departure times */ public class MVVCard extends NotificationAwareCard { private static final String MVV_TIME = "mvv_time"; private Pair<String, String> mStationNameIDPair; private List<TransportManager.Departure> mDepartures; public MVVCard(Context context) { super(CARD_MVV, context, "card_mvv"); } public static Card.CardViewHolder inflateViewHolder(ViewGroup parent) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false); return new Card.CardViewHolder(view); } @Override public String getTitle() { return mStationNameIDPair.first; } @Override public void updateViewHolder(RecyclerView.ViewHolder viewHolder) { super.updateViewHolder(viewHolder); mCard = viewHolder.itemView; mLinearLayout = (LinearLayout) mCard.findViewById(R.id.card_view); mTitleView = (TextView) mCard.findViewById(R.id.card_title); mTitleView.setText(mStationNameIDPair.first); mCard.findViewById(R.id.place_holder).setVisibility(View.VISIBLE); //Remove old DepartureViews for (int i = 0; i < mLinearLayout.getChildCount(); i++) { if (mLinearLayout.getChildAt(i) instanceof DepartureView) { mLinearLayout.removeViewAt(i); i--; // Check the same location again, since the childCount changed } } // Fetch transport favorites, can only be updated in the detailed view TransportManager transportManager = new TransportManager(mContext); for (int i = 0; i < mDepartures.size() && i < 5; i++) { TransportManager.Departure curr = mDepartures.get(i); DepartureView view = new DepartureView(mContext); if (transportManager.isFavorite(curr.symbol)) { view.setSymbol(curr.symbol, true); } else { view.setSymbol(curr.symbol, false); } view.setLine(curr.direction); view.setTime(curr.countDown); mLinearLayout.addView(view); } } @Override public Intent getIntent() { Intent i = new Intent(mContext, TransportationDetailsActivity.class); i.putExtra(TransportationDetailsActivity.EXTRA_STATION, mStationNameIDPair.first); i.putExtra(TransportationDetailsActivity.EXTRA_STATION_ID, mStationNameIDPair.second); return i; } @Override public int getId() { return 0; } @Override protected void discard(Editor editor) { editor.putLong(MVV_TIME, System.currentTimeMillis()); } @Override protected boolean shouldShow(SharedPreferences prefs) { final long prevDate = prefs.getLong(MVV_TIME, 0); return prevDate + DateUtils.HOUR_IN_MILLIS < System.currentTimeMillis(); } @Override protected Notification fillNotification(NotificationCompat.Builder notificationBuilder) { NotificationCompat.WearableExtender morePageNotification = new NotificationCompat.WearableExtender(); String firstContent = ""; String firstTime = ""; for (TransportManager.Departure d : mDepartures) { if (firstTime.isEmpty()) { firstTime = d.countDown + "min"; firstContent = d.servingLine + " " + d.direction; } NotificationCompat.Builder pageNotification = new NotificationCompat.Builder(mContext) .setContentTitle(d.countDown + "min") .setContentText(d.servingLine + " " + d.direction); morePageNotification.addPage(pageNotification.build()); } notificationBuilder.setContentTitle(firstTime); notificationBuilder.setContentText(firstContent); Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.wear_mvv); morePageNotification.setBackground(bm); return morePageNotification.extend(notificationBuilder).build(); } public void setStation(Pair<String, String> stationNameIDPair) { this.mStationNameIDPair = stationNameIDPair; } public void setDepartures(List<TransportManager.Departure> departures) { this.mDepartures = departures; } @Override public RemoteViews getRemoteViews(Context context) { final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.cards_widget_card); remoteViews.setTextViewText(R.id.widgetCardTextView, this.getTitle()); remoteViews.setImageViewResource(R.id.widgetCardImageView, R.drawable.ic_mvv); return remoteViews; } }