/* * Copyright (C) 2015 OpenSilk Productions LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.opensilk.common.ui.mortarfragment; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.os.Build; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.util.Pair; import android.transition.Explode; import android.transition.Slide; import android.transition.Transition; import android.view.Gravity; import org.opensilk.common.core.dagger2.ActivityScope; import org.opensilk.common.core.util.VersionUtils; import javax.inject.Inject; import mortar.Presenter; import mortar.bundler.BundleService; import timber.log.Timber; /** * Created by drew on 3/10/15. */ @ActivityScope public class FragmentManagerOwner extends Presenter<FragmentManagerOwnerActivity> { @Inject public FragmentManagerOwner() { } @Override protected BundleService extractBundleService(FragmentManagerOwnerActivity view) { return BundleService.getBundleService(view.getScope()); } @SuppressLint("CommitTransaction") public FragmentTransaction newTrasaction() { if (hasView()) { return getView().getSupportFragmentManager().beginTransaction(); } throw new IllegalStateException("No view"); } public void showDialog(MortarDialogFragment f) { if (hasView()) { f.show(getView().getSupportFragmentManager(), f.getScopeName()); } } public void dismissDialog(String scopeName) { if (hasView()) { MortarDialogFragment f = (MortarDialogFragment) getView() .getSupportFragmentManager().findFragmentByTag(scopeName); if (f != null) { f.dismiss(); } } } public int addFragment(MortarFragment frag, boolean addToBackstack) { if (!hasView()) return -1; String tag = frag.getScopeName(); FragmentTransaction ft = getView().getSupportFragmentManager().beginTransaction(); if (!VersionUtils.hasLollipop()) { ft.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); } ft.add(frag, tag); if (addToBackstack) ft.addToBackStack(tag); return ft.commit(); } public int replaceMainContent(MortarFragment frag, boolean addToBackstack) { if (!hasView()) return -1; String tag = frag.getScopeName(); FragmentTransaction ft = getView().getSupportFragmentManager().beginTransaction(); if (!VersionUtils.hasLollipop()) { ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); } ft.replace(getView().getContainerViewId(), frag, tag); if (addToBackstack) ft.addToBackStack(tag); return ft.commit(); } public boolean goBack() { if (hasView() && getView().getSupportFragmentManager().getBackStackEntryCount() > 0) { return getView().getSupportFragmentManager().popBackStackImmediate(); } return false; } public void killBackStack() { if (hasView() && getView().getSupportFragmentManager().getBackStackEntryCount() > 0) { getView().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); } } }