package com.example.stackmasterdetailfrag.util.pathview; import android.annotation.TargetApi; import android.content.Context; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.util.AttributeSet; import android.widget.FrameLayout; import com.example.stackmasterdetailfrag.R; import com.example.stackmasterdetailfrag.SinglePaneFragmentStateChanger; import com.example.stackmasterdetailfrag.application.IsMasterView; import com.example.stackmasterdetailfrag.paths.MasterDetailPath; import com.example.stackmasterdetailfrag.util.FragmentManagerService; import com.zhuinden.simplestack.StateChange; import com.zhuinden.simplestack.StateChanger; /** * Created by Zhuinden on 2017.02.12.. */ public class SinglePaneRoot extends FrameLayout implements HandlesBack, StateChanger { public SinglePaneRoot(Context context) { super(context); init(context); } public SinglePaneRoot(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public SinglePaneRoot(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } @TargetApi(21) public SinglePaneRoot(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); } SinglePaneFragmentStateChanger singlePaneFragmentStateChanger; private void init(Context context) { if(!isInEditMode()) { singlePaneFragmentStateChanger = new SinglePaneFragmentStateChanger(FragmentManagerService.get(context), R.id.fragment_container); } } @Override public boolean onBackPressed() { FragmentManager fragmentManager = FragmentManagerService.get(getContext()); Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container); if(fragment != null && fragment.getView() != null) { return BackSupport.onBackPressed(fragment.getView()); } return false; } @Override public void handleStateChange(StateChange stateChange, Callback completionCallback) { singlePaneFragmentStateChanger.handleStateChange(stateChange); FragmentManager fragmentManager = FragmentManagerService.get(getContext()); Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container); if(fragment != null && fragment.getView() != null && fragment.getView() instanceof IsMasterView) { ((IsMasterView) fragment.getView()).updateSelection(stateChange.<MasterDetailPath>topNewState()); } completionCallback.stateChangeComplete(); } }