[android] Added comparing both settings' sets and pass success result if only sets are different

This commit is contained in:
Dmitry Donskoy 2019-04-05 16:47:06 +03:00 committed by Aleksandr Zatsepin
parent 347d41ee1c
commit 84bfc68b48
2 changed files with 62 additions and 1 deletions
android/src/com/mapswithme/maps

View file

@ -4,6 +4,9 @@ import android.support.annotation.NonNull;
import com.mapswithme.maps.settings.RoadType;
import java.util.HashSet;
import java.util.Set;
public class RoutingOptions
{
public static void addOption(@NonNull RoadType roadType)
@ -34,4 +37,16 @@ public class RoutingOptions
}
return false;
}
@NonNull
public static Set<RoadType> getActiveRoadTypes()
{
Set<RoadType> roadTypes = new HashSet<>();
for (RoadType each : RoadType.values())
{
if (hasOption(each))
roadTypes.add(each);
}
return roadTypes;
}
}

View file

@ -17,8 +17,20 @@ import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmToolbarFragment;
import com.mapswithme.maps.routing.RoutingOptions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
public class DrivingOptionsFragment extends BaseMwmToolbarFragment
{
public static final String BUNDLE_ROAD_TYPES = "road_types";
@NonNull
private Set<RoadType> mRoadTypes = Collections.emptySet();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@ -27,9 +39,42 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
View root = inflater.inflate(R.layout.fragment_driving_options, container, false);
initViews(root);
setHasOptionsMenu(hasBundleOptionsMenu());
mRoadTypes = savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_ROAD_TYPES)
? makeRouteTypes(savedInstanceState)
: RoutingOptions.getActiveRoadTypes();
return root;
}
@NonNull
private Set<RoadType> makeRouteTypes(@NonNull Bundle bundle)
{
Set<RoadType> result = new HashSet<>();
List<Integer> items = Objects.requireNonNull(bundle.getIntegerArrayList(BUNDLE_ROAD_TYPES));
for (Integer each : items)
{
result.add(RoadType.values()[each]);
}
return result;
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState)
{
super.onSaveInstanceState(outState);
ArrayList<Integer> savedRoadTypes = new ArrayList<>();
for (RoadType each : mRoadTypes)
{
savedRoadTypes.add(each.ordinal());
}
outState.putIntegerArrayList(BUNDLE_ROAD_TYPES, savedRoadTypes);
}
private boolean isSameSettingsBeforeAndAfter()
{
Set<RoadType> lastActiveRoadTypes = RoutingOptions.getActiveRoadTypes();
return mRoadTypes.containsAll(lastActiveRoadTypes) && lastActiveRoadTypes.containsAll(mRoadTypes);
}
private boolean hasBundleOptionsMenu()
{
Bundle arguments = getArguments();
@ -50,7 +95,8 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
{
if (item.getItemId() == R.id.done)
{
requireActivity().setResult(Activity.RESULT_OK);
requireActivity().setResult(isSameSettingsBeforeAndAfter() ? Activity.RESULT_CANCELED
: Activity.RESULT_OK);
requireActivity().finish();
return true;
}