19268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 39268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * 49268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 59268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * you may not use this file except in compliance with the License. 69268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * You may obtain a copy of the License at 79268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * 89268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * http://www.apache.org/licenses/LICENSE-2.0 99268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * 109268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * Unless required by applicable law or agreed to in writing, software 119268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * distributed under the License is distributed on an "AS IS" BASIS, 129268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * See the License for the specific language governing permissions and 149268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount * limitations under the License. 159268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount */ 169268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.fragment.app; 189268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 199268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mountimport android.os.Bundle; 209268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 219268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mountpublic class ReentrantFragment extends StrictFragment { 229268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount private static final String FROM_STATE = "fromState"; 239268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount private static final String TO_STATE = "toState"; 249268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount int mFromState = 0; 259268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount int mToState = 0; 269268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount boolean mIsRestored; 279268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 289268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount public static ReentrantFragment create(int fromState, int toState) { 299268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount ReentrantFragment fragment = new ReentrantFragment(); 309268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount fragment.mFromState = fromState; 319268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount fragment.mToState = toState; 329268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount fragment.mIsRestored = false; 339268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount return fragment; 349268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 359268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 369268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount @Override 379268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount public void onStateChanged(int fromState) { 389268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount super.onStateChanged(fromState); 399268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount // We execute the transaction when shutting down or after restoring 409268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount if (fromState == mFromState && mState == mToState 419268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount && (mToState < mFromState || mIsRestored)) { 429268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount executeTransaction(); 439268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 449268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 459268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 469268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount private void executeTransaction() { 479268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount getFragmentManager().beginTransaction() 489268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount .add(new StrictFragment(), "should throw") 499268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount .commitNow(); 509268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 519268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 529268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount @Override 539268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount public void onSaveInstanceState(Bundle outState) { 549268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount super.onSaveInstanceState(outState); 559268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount outState.putInt(FROM_STATE, mFromState); 569268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount outState.putInt(TO_STATE, mToState); 579268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 589268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 599268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount @Override 609268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount public void onCreate(Bundle savedInstanceState) { 619268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount if (savedInstanceState != null) { 629268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount mFromState = savedInstanceState.getInt(FROM_STATE); 639268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount mToState = savedInstanceState.getInt(TO_STATE); 649268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount mIsRestored = true; 659268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 669268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount super.onCreate(savedInstanceState); 679268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount } 689268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount} 699268ce1264c6c2919b3feb1e26eef13ded3c9ab4George Mount 70