/** * 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.switchuser; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; import com.facebook.*; import com.facebook.appevents.AppEventsLogger; public class MainActivity extends ActionBarActivity { private static final String SHOWING_SETTINGS_KEY = "Showing settings"; private ProfileFragment profileFragment; private SettingsFragment settingsFragment; private boolean isShowingSettings; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); restoreFragments(savedInstanceState); if (savedInstanceState != null) { if (savedInstanceState.getBoolean(SHOWING_SETTINGS_KEY)) { showSettings(); } else { showProfile(); } } else { showProfile(); } } @Override public void onBackPressed() { if (isShowingSettings()) { // This back is from the settings fragment showProfile(); } else { // Allow the user to back out of the app as well. super.onBackPressed(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(SHOWING_SETTINGS_KEY, isShowingSettings()); FragmentManager manager = getSupportFragmentManager(); manager.putFragment(outState, SettingsFragment.TAG, settingsFragment); manager.putFragment(outState, ProfileFragment.TAG, profileFragment); } @Override protected void onResume() { super.onResume(); profileFragment.setOnOptionsItemSelectedListener(new ProfileFragment.OnOptionsItemSelectedListener() { @Override public boolean onOptionsItemSelected(MenuItem item) { return handleOptionsItemSelected(item); } }); } @Override protected void onPause() { super.onPause(); profileFragment.setOnOptionsItemSelectedListener(null); } private void restoreFragments(Bundle savedInstanceState) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (savedInstanceState != null) { profileFragment = (ProfileFragment) manager.getFragment(savedInstanceState, ProfileFragment.TAG); settingsFragment = (SettingsFragment) manager.getFragment(savedInstanceState, SettingsFragment.TAG); } if (profileFragment == null) { profileFragment = new ProfileFragment(); transaction.add(R.id.fragmentContainer, profileFragment, ProfileFragment.TAG); } if (settingsFragment == null) { settingsFragment = new SettingsFragment(); transaction.add(R.id.fragmentContainer, settingsFragment, SettingsFragment.TAG); } transaction.commit(); } private void showSettings() { isShowingSettings = true; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(profileFragment) .show(settingsFragment) .commit(); } private boolean isShowingSettings() { return isShowingSettings; } private void showProfile() { isShowingSettings = false; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(settingsFragment) .show(profileFragment) .commit(); } private boolean handleOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_item_switch) { showSettings(); return true; } else { return false; } } }