package com.example.stackmasterdetail.util.pathview; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.LinearLayout; import com.example.stackmasterdetail.R; import com.example.stackmasterdetail.application.IsMasterView; import com.example.stackmasterdetail.application.MainActivity; import com.example.stackmasterdetail.paths.MasterDetailPath; import com.example.stackmasterdetail.util.Container; import com.zhuinden.simplestack.Backstack; import com.zhuinden.simplestack.StateChange; import com.zhuinden.simplestack.StateChanger; /** * This view is shown only in landscape orientation on tablets. See * the explanation in {@link MainActivity#onCreate}. */ public class TabletMasterDetailRoot extends LinearLayout implements Container, StateChanger, HandlesBack { private FramePathContainerView masterContainer; private FramePathContainerView detailContainer; private boolean disabled; public TabletMasterDetailRoot(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return !disabled && super.dispatchTouchEvent(ev); } @Override protected void onFinishInflate() { super.onFinishInflate(); masterContainer = (FramePathContainerView) findViewById(R.id.master); detailContainer = (FramePathContainerView) findViewById(R.id.detail); } public ViewGroup getCurrentChild() { MasterDetailPath showing = Backstack.getKey(getContext()); return showing.isMaster() ? masterContainer.getCurrentChild() : detailContainer.getCurrentChild(); } @Override public ViewGroup getContainerView() { return this; } @Override public StateChanger createContainer() { return new SimpleStateChanger(this); } @Override public void handleStateChange(final StateChange stateChange, StateChanger.Callback callback) { class CountdownCallback implements StateChanger.Callback { final StateChanger.Callback wrapped; int countDown = 2; CountdownCallback(StateChanger.Callback wrapped) { this.wrapped = wrapped; } @Override public void stateChangeComplete() { countDown--; if(countDown == 0) { disabled = false; wrapped.stateChangeComplete(); ((IsMasterView) masterContainer.getCurrentChild()).updateSelection(stateChange.<MasterDetailPath>topNewState()); } } } disabled = true; callback = new CountdownCallback(callback); detailContainer.handleStateChange(stateChange, callback); masterContainer.handleStateChange(stateChange, callback); } @Override public boolean onBackPressed() { return BackSupport.onBackPressed(detailContainer); } }