Skip to content

Instantly share code, notes, and snippets.

@HanCheng
Last active August 29, 2015 14:08
Show Gist options
  • Select an option

  • Save HanCheng/f6aacc14b1bb9b91f3c7 to your computer and use it in GitHub Desktop.

Select an option

Save HanCheng/f6aacc14b1bb9b91f3c7 to your computer and use it in GitHub Desktop.
Testing Code:
in FlightSearchResultsActivityTest.java file:
- change the method in line 2404 to testToVerifyOnSelectingQuickestOutboundSegmentWeShowLowestOnReturnAndNotQuickest()
- if user apply non-stop, and choose one sort, tap an itinerary and press back, the outbound view should show what he/she selected
- default, user do not choose any sort, so it's now in lowest price
create the method called testToVerifyOnApplyingNonStopFilterTapingItineraryAndReturnWillShowLowest()
- if user choose the quickest, then when tab back from return to outbound, it should show quickest
create the method called testToVerifyOnApplyingNonStopFilterAndSelectingQuickestTapingItineraryAndReturnWilShowQuickest()
testToVerifySelectingQuickestPersonaDoesNotPreselectNonStopInTheStopsFilter
testToVerifyNavigationBetweenSearchResultsAndReturnStopsFilterAndBack
testToVerifyThatSelectingOneOrMoreStopFiltersWillKeepCurrentPersonaWhenBackToOutbound
testToVerifyThatSelectingOneOrMoreAirelineFiltersWillKeepCurrentPersonaWhenBackToOutbound
testThatOpeningStopsFilterAndReturningToResultScreenWithoutChangingAnyFiltersShowSameResults
testToVerifyLowestPersonaIsAlwaysSelectedOnReturnView
===========================
Source Code:
change CalculatePersonaValuesSegmentAndPriceListTask.java to UpdatePersonaValuesSegmentAndTitlesTask
public class UpdatePersonaValuesSegmentAndTitlesTask extends AsyncTask<Void, Void, PersonaSummary> {
private Context mContext;
private Bus mBus;
private boolean mIsShowingReturnSegment;
private FlightSearch mFlightSearch;
private static Segment sSelectedOutboundSegment;
private ItinerarySet mResult;
public static void setSelectedOutboundSegment(Segment selectedOutboundSegment) {
sSelectedOutboundSegment = selectedOutboundSegment;
}
public UpdatePersonaValuesSegmentAndTitlesTask(Context context, Bus bus, boolean isShowingReturnSegment,
FlightSearch flightSearch, ItinerarySet itinerarySet) {
mContext = context;
mBus = bus;
mIsShowingReturnSegment = isShowingReturnSegment;
mFlightSearch = flightSearch;
mResult = itinerarySet;
}
@Override
protected PersonaSummary doInBackground(Void... params) {
PersonaSummary personaSummary = new PersonaSummary();
if (mIsShowingReturnSegment) {
personaSummary.personaTitles = getPersonaTitle();
createListsOfSegments(personaSummary, RETURN);
} else {
personaSummary.personaTitles = getPersonaTitle();
createListsOfSegments(personaSummary, OUTBOUND);
}
return personaSummary;
}
private List<String> getPersonaTitle() {
List<String> personaValues = new ArrayList<String>();
personaValues.add(format("%s", mContext.getString(R.string.flights_app_lowest_price_cbd).toUpperCase(US)));
personaValues.add(format("%s", mContext.getString(R.string.flights_app_quickest_1436).toUpperCase(US)));
return personaValues;
}
private void createListsOfSegments(PersonaSummary personaSummary, FlightFilterType flightFilterType) {
personaSummary.listsOfSegments.clear();
List<Persona> personas = getPersonas(flightFilterType);
for (Persona persona : personas) {
mResult.setPersona(persona);
if (flightFilterType == OUTBOUND) {
personaSummary.listsOfSegments.add(mResult.filteredOutboundSegments());
} else {
personaSummary.listsOfSegments.add(
mResult.filteredReturnSegmentsWithOutboundSegmentID(
sSelectedOutboundSegment.getSegmentID())
);
}
}
}
private List<Persona> getPersonas(FlightFilterType flightFilterType) {
List<Persona> personas = new ArrayList<Persona>();
personas.add(Persona.personaFromType(ALL_FLIGHTS, mFlightSearch.getFlightSearchMode(), flightFilterType));
personas.add(Persona.personaFromType(QUICKEST, mFlightSearch.getFlightSearchMode(), flightFilterType));
return personas;
}
@Override
protected void onPostExecute(PersonaSummary personaSummary) {
super.onPostExecute(personaSummary);
mBus.post(personaSummary);
}
}
public enum PersonaType {
ALL_FLIGHTS,
QUICKEST
}
in StopsLimitFragment:
LINE 124
@Override
public void onPause() {
super.onPause();
mBus.unregister(this);
// KLT: This was added because somewhere in the app, when this filter is opened, it deletes the persona from the itinerary set.
// I spent a long time trying to find where that happened, but could not find it.
// if (mStopsFilter.contains(NONSTOP) && (!mStopsFilter.contains(ONE) && !mStopsFilter
// .contains(TWO_OR_MORE)) && ItinerarySet.getInstance() != null) {
// Persona persona = Persona.personaFromType(PersonaType.NONSTOP, ItinerarySet.getInstance().getPersona().getFlightSearchMode(), mFlightFilterType);
// ItinerarySet.getInstance().setPersona(persona);
// }
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox checkBox = (CheckBox) view.findViewById(R.id.check_box);
checkBox.setChecked(!checkBox.isChecked());
StopsLimit stopsLimit = stopsLimitAtPosition(position);
if (checkBox.isChecked()) {
mStopsFilter.addStopsLimit(stopsLimit);
} else {
mStopsFilter.removeStopsLimit(stopsLimit);
}
Set<ItineraryFilter> itineraryFilters = ItinerarySet.getInstance()
.getUserItineraryFilters();
if (mStopsFilter.isActive()) {
itineraryFilters.add(mStopsFilter);
} else {
itineraryFilters.remove(mStopsFilter);
}
if (ItinerarySet.getInstance() != null) {
ItinerarySet.getInstance().setUserItineraryFilters(itineraryFilters, mFlightFilterType);
// if (stopsLimit.equals(NONSTOP) && checkBox.isChecked() && !mStopsFilter.contains(ONE) && !mStopsFilter.contains(TWO_OR_MORE)) {
// ItinerarySet.getInstance().setPersona(Persona.personaFromType(PersonaType.NONSTOP,
// ItinerarySet.getInstance().getFlightSearch().getFlightSearchMode(), mFlightFilterType));
// } else {
// // reset to ALL_FLIGHTS persona if Nonstop not checked.
// ItinerarySet.getInstance().setPersona(Persona.personaFromType(PersonaType.ALL_FLIGHTS,
// ItinerarySet.getInstance().getFlightSearch().getFlightSearchMode(), mFlightFilterType));
// }
if (mSegmentSetSummaryTask != null) {
mSegmentSetSummaryTask.cancel(true);
mListener.onProgressUpdate(false);
}
if (mFlightFilterType == OUTBOUND) {
mSegmentSetSummaryTask = new SegmentSetSummaryTask(mBus, mFlightFilterType);
} else {
mSegmentSetSummaryTask = new SegmentSetSummaryTask(mBus, mFlightFilterType, ((FiltersActivity) getActivity()).getSelectedOutboundSegment().getSegmentID());
}
mSegmentSetSummaryTask.execute(ItinerarySet.getInstance());
mListener.onProgressUpdate(true);
}
}
in FlightSearchResultsActivity:
mOutboundViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mItinerarySummaryTextView.setVisibility(View.INVISIBLE);
if (position == 1) { // position == 1 show quickest, IF WE APPLY FILTERS, DO CHANGES
sendQuickestPersonaStats();
if (ItinerarySet.getInstance() != null) {
ItinerarySet.getInstance().setPersona(Persona.personaFromType(QUICKEST, mFlightSearch.getFlightSearchMode(), OUTBOUND));
}
} else { // position == 0 show lowest price, IF WE APPLY FILTERS, DO CHANGES
ItinerarySet.getInstance().setPersona(Persona.personaFromType(ALL_FLIGHTS, mFlightSearch.getFlightSearchMode(), OUTBOUND));
// if (STOPS_FILTER.contains(StopsLimit.NONSTOP) && STOPS_FILTER.getStopsLimit()
// .size() == 1) {
// STOPS_FILTER.removeStopsLimit(StopsLimit.NONSTOP);
// }
}
mOutboundTabPageIndicator.setCurrentItem(position);
mSelectedIndex = position;
if (mSearchHasCompleted) {
updateItinerarySummaryText(ItinerarySet.getInstance());
} else if (mPartialresults != null) {
updateItinerarySummaryText(mPartialresults);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
mReturnViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mItinerarySummaryTextView.setVisibility(View.INVISIBLE);
if (position == 1) {
sendQuickestPersonaStats();
if (ItinerarySet.getInstance() != null) {
ItinerarySet.getInstance().setPersona(Persona.personaFromType(QUICKEST, mFlightSearch.getFlightSearchMode(), RETURN));
}
} else {
ItinerarySet.getInstance().setPersona(Persona.personaFromType(ALL_FLIGHTS, mFlightSearch.getFlightSearchMode(), RETURN));
// if (STOPS_FILTER.contains(StopsLimit.NONSTOP) && STOPS_FILTER.getStopsLimit()
// .size() == 1) {
// STOPS_FILTER.removeStopsLimit(StopsLimit.NONSTOP);
// }
}
mReturnTabPageIndicator.setCurrentItem(position);
mSelectedIndex = position;
if (mSearchHasCompleted) {
updateItinerarySummaryText(ItinerarySet.getInstance());
} else if (mPartialresults != null) {
updateItinerarySummaryText(mPartialresults);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
LINE: 276
List<String> defaultInitialTitles = Arrays.asList(
format("%s ---", getString(R.string.flights_app_lowest_price_cbd).toUpperCase(US)),
format("%s ---", getString(R.string.flights_app_quickest_1436).toUpperCase(US)));
LINE 674:
@Override
public void onResume() {
super.onResume();
mBus.register(this);
// KLT: This is set true so list updates after coming back from filter screen.
if (mSearchHasCompleted) {
updateItinerarySummaryText(ItinerarySet.getInstance());
} else if (mPartialresults != null) {
updateItinerarySummaryText(mPartialresults);
}
if (ItinerarySet.getInstance() != null && ItinerarySet.getInstance().isComplete()) {
if (ItinerarySet.getInstance().getPersona().getPersonaType() == QUICKEST) {
if (mIsShowingReturnSegment) {
mReturnTabPageIndicator.setCurrentItem(1);
} else {
mOutboundTabPageIndicator.setCurrentItem(1);
}
} else if (ItinerarySet.getInstance().getPersona().getPersonaType() == ALL_FLIGHTS) {
if (mIsShowingReturnSegment) {
mReturnTabPageIndicator.setCurrentItem(0);
} else {
mOutboundTabPageIndicator.setCurrentItem(0);
}
}
onSearchComplete(ItinerarySet.getInstance());
}
}
delete line 768
line 858:
mReturnViewPager.setCurrentItem(0);
in ItinerarySet:
Line 692:
public void setUserItineraryFilters(Set<ItineraryFilter> userItineraryFilters, FlightFilterType flightFilterType) {
if (!itineraryFilters().equals(userItineraryFilters)) {
mUserItineraryFilters.clear();
if (!userItineraryFilters.containsAll(mPersona.getItineraryFilters())
&& mPersona.getPersonaType() != NONSTOP) {
// if current persona is NONSTOP, do not reset it while applying other filters
mPersona = Persona.personaFromType(PersonaType
.ALL_FLIGHTS, mFlightSearch.getFlightSearchMode(), flightFilterType);
mUserItineraryFilters.addAll(userItineraryFilters);
} else {
Set<ItineraryFilter> itineraryFilters = new HashSet<ItineraryFilter>(userItineraryFilters);
itineraryFilters.removeAll(mPersona.getItineraryFilters());
mUserItineraryFilters.addAll(itineraryFilters);
}
}
clearItineraryCaches();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment