Last active
August 29, 2015 14:08
-
-
Save HanCheng/f6aacc14b1bb9b91f3c7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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