package com.nilhcem.bblfr.ui.locations; import android.content.Context; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.model.Marker; import com.nilhcem.bblfr.R; import com.nilhcem.bblfr.core.utils.CompatibilityUtils; import com.nilhcem.bblfr.core.utils.StringUtils; import com.nilhcem.bblfr.model.locations.Audience; import com.nilhcem.bblfr.model.locations.Interest; import com.nilhcem.bblfr.model.locations.Location; import java.util.ArrayList; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; public class LocationsInfoWindowAdapter implements GoogleMap.InfoWindowAdapter { @BindView(R.id.info_window_name) TextView mName; @BindView(R.id.info_window_address) TextView mAddress; @BindView(R.id.info_window_contact) TextView mContact; @BindView(R.id.info_window_audience) TextView mAudience; @BindView(R.id.info_window_interests) TextView mInterests; private View mLayout; private Context mContext; private Map<Marker, Location> mLocations; public LocationsInfoWindowAdapter(Context context, Map<Marker, Location> markerLocations) { mContext = context; mLocations = markerLocations; mLayout = LayoutInflater.from(context).inflate(R.layout.map_locations_info_window, null); ButterKnife.bind(this, mLayout); } @Override public View getInfoWindow(Marker marker) { // Use default InfoWindow frame. return null; } @Override public View getInfoContents(Marker marker) { Location data = getLocationForMarker(marker); setHtmlTextIfNotEmpty(mName, mContext.getString(R.string.location_name, data.name)); setHtmlTextIfNotEmpty(mAddress, data.address); setHtmlTextIfNotEmpty(mContact, mContext.getString(R.string.location_contact, data.contact)); setHtmlTextIfNotEmpty(mAudience, formatAudienceText(data.audience)); setHtmlTextIfNotEmpty(mInterests, formatInterestsText(data.interests)); return mLayout; } void setHtmlTextIfNotEmpty(TextView textView, String text) { if (TextUtils.isEmpty(text)) { textView.setVisibility(View.GONE); } else { textView.setVisibility(View.VISIBLE); textView.setText(CompatibilityUtils.fromHtml(text)); } } private String formatAudienceText(@NonNull Audience audience) { String audienceStr = StringUtils.appendOptional(audience.profiles, audience.number, StringUtils.HTML_LINE_SEPARATOR); return mContext.getString(R.string.location_audience, audienceStr); } private String formatInterestsText(@NonNull List<Interest> interests) { List<String> interestsNames = new ArrayList<>(); for (Interest interest : interests) { interestsNames.add(interest.name); } String interestsStr = StringUtils.strJoin(interestsNames, StringUtils.COMMA_SEPARATOR); return mContext.getString(R.string.location_interests, interestsStr); } public Location getLocationForMarker(@NonNull Marker marker) { return mLocations.get(marker); } }