package net.osmand.plus.dashboard.tools;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.dashboard.DashBaseFragment;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* Created by GaidamakUA on 8/6/15.
*/
public final class TransactionBuilder {
private static final String TAG = "TransactionBuilder";
private FragmentManager manager;
private final List<DashFragmentData> fragments;
private OsmandSettings settings;
private MapActivity mapActivity;
public TransactionBuilder(FragmentManager manager, OsmandSettings settings,
MapActivity mapActivity) {
this.manager = manager;
this.settings = settings;
this.mapActivity = mapActivity;
fragments = new ArrayList<>();
}
public TransactionBuilder addFragmentsData(DashFragmentData... dashFragmentsData) {
fragments.addAll(Arrays.asList(dashFragmentsData));
return this;
}
public TransactionBuilder addFragmentsData(Collection<DashFragmentData> dashFragmentsData) {
fragments.addAll(dashFragmentsData);
return this;
}
public TransactionBuilder addFragment(DashFragmentData fragmentData) {
fragments.add(fragmentData);
return this;
}
public FragmentTransaction getFragmentTransaction() {
FragmentTransaction fragmentTransaction = manager.beginTransaction();
Collections.sort(fragments);
for (DashFragmentData dashFragmentData : fragments) {
DashBaseFragment fragment =
(DashBaseFragment) manager.findFragmentByTag(dashFragmentData.tag);
if (manager.findFragmentByTag(dashFragmentData.tag) == null) {
if (dashFragmentData.shouldShowFunction.shouldShow(settings, mapActivity, dashFragmentData.tag)) {
DashBaseFragment newInstance = null;
try {
newInstance = dashFragmentData.fragmentClass.newInstance();
// XXX hardcoded value
fragmentTransaction.add(R.id.content, newInstance, dashFragmentData.tag);
} catch (InstantiationException e) {
Log.v(TAG, "");
mapActivity.getMyApplication()
.showToastMessage("Error showing dashboard " + dashFragmentData.tag);
} catch (IllegalAccessException e) {
Log.v(TAG, "");
mapActivity.getMyApplication()
.showToastMessage("Error showing dashboard " + dashFragmentData.tag);
}
}
} else {
if (!dashFragmentData.shouldShowFunction.shouldShow(settings, mapActivity, dashFragmentData.tag)) {
fragmentTransaction.remove(manager.findFragmentByTag(dashFragmentData.tag));
} else if (fragment.getView() != null) {
if (fragment.isHidden()) {
fragmentTransaction.show(fragment);
}
fragment.onOpenDash();
}
}
}
return fragmentTransaction;
}
}