From fbd6aa621e8b4c751e8cbae61514cf44d0603e05 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Tue, 12 Feb 2019 13:26:02 +0100 Subject: [PATCH 1/2] Try to improve navigation between the huge number of fragments --- .../app/ui/activities/RacingActivity.java | 57 +++++++++---------- .../app/ui/fragments/RaceListFragment.java | 6 ++ .../raceinfo/MainScheduleFragment.java | 43 +++++++------- 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java index 24cee16592b..330869448ab 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java @@ -69,6 +69,7 @@ import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment; import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment.RaceListCallbacks; import com.sap.sailing.racecommittee.app.ui.fragments.WelcomeFragment; import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment; +import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.MainScheduleFragment; import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFinishingFragment; import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFlagViewerFragment; import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceSummaryFragment; @@ -184,21 +185,14 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.racing_view_container); - if (!(fragment instanceof RaceInfoFragment || fragment instanceof WelcomeFragment)) { - if (getFragmentManager().getBackStackEntryCount() > 0) { - getFragmentManager().popBackStackImmediate(); - getFragmentManager().beginTransaction().commit(); - - // fix for filled out RaceInfoFragment - if (infoFragment != null && infoFragment.isFragmentUIActive() && mSelectedRace != null) { - ExLog.i(this, this.getClass().getCanonicalName(), "Returning to RaceInfoFragment"); - - getFragmentManager().popBackStackImmediate(); - onRaceItemClicked(mSelectedRace); - } - } - } else { + if (fragment instanceof WelcomeFragment) { logoutSession(); + } else if (fragment instanceof RaceInfoFragment || fragment instanceof MainScheduleFragment) { + loadWelcomeFragment(); + mSelectedRace = null; + mRaceList.resetSelectedRace(); + } else { + super.onBackPressed(); } } @@ -291,7 +285,8 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks private void loadWelcomeFragment() { preferences = AppPreferences.on(this); getSupportFragmentManager().beginTransaction() - .replace(R.id.racing_view_container, WelcomeFragment.newInstance()).commitAllowingStateLoss(); + .replace(R.id.racing_view_container, WelcomeFragment.newInstance()) + .commitAllowingStateLoss(); } public TimePoint getStartTime() { @@ -332,7 +327,9 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks setupActionBar(managedRace); - getSupportFragmentManager().beginTransaction().replace(R.id.racing_view_container, infoFragment).commit(); + getSupportFragmentManager().beginTransaction() + .replace(R.id.racing_view_container, infoFragment) + .commit(); } } @@ -369,17 +366,17 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.options_menu_reset: - ExLog.i(this, TAG, "Clicked RESET RACE"); - resetRace(); - return true; + case R.id.options_menu_reset: + ExLog.i(this, TAG, "Clicked RESET RACE"); + resetRace(); + return true; - case R.id.options_menu_role: - logoutSession(); - return true; + case R.id.options_menu_role: + logoutSession(); + return true; - default: - return super.onOptionsItemSelected(item); + default: + return super.onOptionsItemSelected(item); } } @@ -481,7 +478,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } public List getRacesWithStartTimeImmediatelyDependingOn(ManagedRace currentRace, - @Nullable RaceLogRaceStatus[] state) { + @Nullable RaceLogRaceStatus[] state) { StartTimeFinderResult result; SimpleRaceLogIdentifier identifier; ArrayList list = new ArrayList<>(); @@ -704,10 +701,10 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks dialog.cancel(); } }).setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); builder.create().show(); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java index 4ca9ad03790..2e941e61732 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java @@ -465,6 +465,12 @@ public class RaceListFragment extends LoggableFragment } } + public void resetSelectedRace() { + mSelectedRace = null; + mAdapter.setSelectedRace(null); + mAdapter.notifyDataSetChanged(); + } + private void unregisterOnAllRaces() { for (ManagedRace managedRace : mManagedRacesById.values()) { managedRace.getState().removeChangedListener(stateListener); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MainScheduleFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MainScheduleFragment.java index 37ca508cba5..026441a2017 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MainScheduleFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MainScheduleFragment.java @@ -1,7 +1,14 @@ package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo; -import java.util.ArrayList; -import java.util.Calendar; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.util.ViewHelper; @@ -22,7 +29,6 @@ import com.sap.sailing.racecommittee.app.domain.impl.SelectionItem; import com.sap.sailing.racecommittee.app.ui.activities.RacingActivity; import com.sap.sailing.racecommittee.app.ui.adapters.SelectionAdapter; import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment; -import com.sap.sailing.racecommittee.app.ui.fragments.chooser.RaceInfoFragmentChooser; import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources; import com.sap.sailing.racecommittee.app.utils.RaceHelper; import com.sap.sailing.racecommittee.app.utils.TimeUtils; @@ -30,15 +36,8 @@ import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.os.Handler; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; +import java.util.ArrayList; +import java.util.Calendar; public class MainScheduleFragment extends BaseFragment implements View.OnClickListener, SelectionAdapter.ItemClick { @@ -249,12 +248,12 @@ public class MainScheduleFragment extends BaseFragment implements View.OnClickLi @Override public void onClick(View v) { switch (v.getId()) { - case R.id.start_race: - startRace(); - break; + case R.id.start_race: + startRace(); + break; - default: - ExLog.i(getActivity(), TAG, "Clicked on " + v); + default: + ExLog.i(getActivity(), TAG, "Clicked on " + v); } } @@ -337,7 +336,10 @@ public class MainScheduleFragment extends BaseFragment implements View.OnClickLi args.putBoolean(RACE_GROUP, mItemRaceGroup.isChecked()); } - getFragmentManager().beginTransaction().replace(R.id.racing_view_container, fragment).commitAllowingStateLoss(); + getFragmentManager().beginTransaction() + .replace(R.id.racing_view_container, fragment) + .addToBackStack(null) + .commitAllowingStateLoss(); } @Override @@ -352,9 +354,8 @@ public class MainScheduleFragment extends BaseFragment implements View.OnClickLi @Override public void onStatusChanged(ReadonlyRaceState state) { super.onStatusChanged(state); - - openFragment( - RaceInfoFragmentChooser.on(state.getRacingProcedure().getType()).choose(getActivity(), getRace())); + RacingActivity activity = (RacingActivity) requireActivity(); + activity.onRaceItemClicked(getRace(), true); } } } From 0f8973ec01b1b2b73bff45626fe6631ab9eed464 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Tue, 12 Feb 2019 14:09:45 +0100 Subject: [PATCH 2/2] Switch to custom click listener --- .../fragments/raceinfo/RecallFlagsFragment.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java index 9c2b7e7dd35..024a7db89d5 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java @@ -1,5 +1,12 @@ package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + import com.sap.sailing.android.shared.util.ViewHelper; import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure; import com.sap.sailing.domain.common.racelog.Flags; @@ -13,12 +20,6 @@ import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout; import com.sap.sse.common.TimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; - public class RecallFlagsFragment extends RaceFragment implements RecallFlagItemClick { private final static String HEADER_TEXT = "headerText"; @@ -34,13 +35,13 @@ public class RecallFlagsFragment extends RaceFragment implements RecallFlagItemC } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.flag_list, container, false); HeaderLayout header = ViewHelper.get(layout, R.id.header); if (header != null) { header.setHeaderText(getArguments().getString(HEADER_TEXT, getString(R.string.not_available))); - header.setOnClickListener(new View.OnClickListener() { + header.setHeaderOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);