/** * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. * * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, * copy, modify, and distribute this software in source code or binary form for use * in connection with the web services and APIs provided by Facebook. * * As with any software that integrates with the Facebook platform, your use of * this software is subject to the Facebook Developer Principles and Policies * [http://developers.facebook.com/policy/]. This copyright notice shall be * included in all copies or substantial portions of the software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.example.scrumptious; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; import android.os.Bundle; import com.facebook.AccessToken; import com.facebook.AccessTokenTracker; import com.facebook.appevents.AppEventsLogger; import com.facebook.CallbackManager; public class MainActivity extends Activity { private static final String USER_SKIPPED_LOGIN_KEY = "user_skipped_login"; private static final int SPLASH = 0; private static final int SELECTION = 1; private static final int SETTINGS = 2; private static final int FRAGMENT_COUNT = SETTINGS +1; private Fragment[] fragments = new Fragment[FRAGMENT_COUNT]; private boolean isResumed = false; private boolean userSkippedLogin = false; private AccessTokenTracker accessTokenTracker; private CallbackManager callbackManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { userSkippedLogin = savedInstanceState.getBoolean(USER_SKIPPED_LOGIN_KEY); } callbackManager = CallbackManager.Factory.create(); accessTokenTracker = new AccessTokenTracker() { @Override protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { if (isResumed) { FragmentManager manager = getFragmentManager(); int backStackSize = manager.getBackStackEntryCount(); for (int i = 0; i < backStackSize; i++) { manager.popBackStack(); } if (currentAccessToken != null) { showFragment(SELECTION, false); } else { showFragment(SPLASH, false); } } } }; setContentView(R.layout.main); FragmentManager fm = getFragmentManager(); SplashFragment splashFragment = (SplashFragment) fm.findFragmentById(R.id.splashFragment); fragments[SPLASH] = splashFragment; fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment); fragments[SETTINGS] = fm.findFragmentById(R.id.userSettingsFragment); FragmentTransaction transaction = fm.beginTransaction(); for(int i = 0; i < fragments.length; i++) { transaction.hide(fragments[i]); } transaction.commit(); splashFragment.setSkipLoginCallback(new SplashFragment.SkipLoginCallback() { @Override public void onSkipLoginPressed() { userSkippedLogin = true; showFragment(SELECTION, false); } }); } @Override public void onResume() { super.onResume(); isResumed = true; if (AccessToken.getCurrentAccessToken() != null) { // if the user already logged in, try to show the selection fragment showFragment(SELECTION, false); userSkippedLogin = false; } else if (userSkippedLogin) { showFragment(SELECTION, false); } else { // otherwise present the splash screen and ask the user to login, // unless the user explicitly skipped. showFragment(SPLASH, false); } } @Override public void onPause() { super.onPause(); isResumed = false; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } @Override public void onDestroy() { super.onDestroy(); accessTokenTracker.stopTracking(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(USER_SKIPPED_LOGIN_KEY, userSkippedLogin); } public void showSettingsFragment() { showFragment(SETTINGS, true); } public void showSplashFragment() { showFragment(SPLASH, true); } private void showFragment(int fragmentIndex, boolean addToBackStack) { FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); for (int i = 0; i < fragments.length; i++) { if (i == fragmentIndex) { transaction.show(fragments[i]); } else { transaction.hide(fragments[i]); } } if (addToBackStack) { transaction.addToBackStack(null); } transaction.commit(); } }