/*
* Copyright 2015. Appsi Mobile
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.appsimobile.appsii.firstrun;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.appsimobile.appsii.R;
/**
* Created by nick on 10/06/15.
*/
public final class FirstRunFragment extends Fragment
implements FirstRunWelcomeFragment.OnWelcomeCompletedListener,
FirstRunSettingsFragment.OnSettingsCompletedListener,
FirstRunLocationFragment.OnLocationCompletedListener,
FirstRunDoneFragment.OnDoneCompletedListener {
boolean mFragmentAdded;
private OnFirstRunCompletedListener mOnFirstRunCompletedListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// set the listener here to prevent it from not being
// set due to backstack-rotation reasons
if (mOnFirstRunCompletedListener == null) {
mOnFirstRunCompletedListener = (OnFirstRunCompletedListener) getActivity();
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(com.appsimobile.appsii.R.layout.fragment_first_run, container,
false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
mFragmentAdded = savedInstanceState.getBoolean("fragment_added");
}
if (!mFragmentAdded) {
mFragmentAdded = true;
getFragmentManager().
beginTransaction().
add(R.id.first_run_contents, new FirstRunWelcomeFragment(), "welcome").
commit();
}
}
@Override
public void onResume() {
super.onResume();
FirstRunWelcomeFragment welcomeFragment =
(FirstRunWelcomeFragment) getFragmentManager().findFragmentByTag("welcome");
FirstRunSettingsFragment initialSettingsFragment =
(FirstRunSettingsFragment) getFragmentManager().findFragmentByTag("settings");
FirstRunLocationFragment locationFragment =
(FirstRunLocationFragment) getFragmentManager().findFragmentByTag("location");
FirstRunDoneFragment doneFragment =
(FirstRunDoneFragment) getFragmentManager().findFragmentByTag("done");
if (welcomeFragment != null) {
welcomeFragment.setOnFirstRunCompletedListener(this);
}
if (initialSettingsFragment != null) {
initialSettingsFragment.setOnSettingsCompletedListener(this);
}
if (locationFragment != null) {
locationFragment.setOnLocationCompletedListener(this);
}
if (doneFragment != null) {
doneFragment.setDoneCompletedListener(this);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("fragment_added", mFragmentAdded);
}
@Override
public void onWelcomeCompleted() {
FirstRunSettingsFragment fragment = new FirstRunSettingsFragment();
fragment.setOnSettingsCompletedListener(this);
getFragmentManager().beginTransaction().
replace(R.id.first_run_contents, fragment, "settings").
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).
commit();
}
@Override
public void onSettingsCompleted() {
FirstRunLocationFragment fragment = new FirstRunLocationFragment();
fragment.setOnLocationCompletedListener(this);
getFragmentManager().beginTransaction().
replace(R.id.first_run_contents, fragment, "location").
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).
commit();
}
@Override
public void onSettingsFatalError() {
mOnFirstRunCompletedListener.onFatalError();
}
@Override
public void onLocationCompleted() {
showDoneFragment();
}
private void showDoneFragment() {
FirstRunDoneFragment fragment = new FirstRunDoneFragment();
fragment.setDoneCompletedListener(this);
getFragmentManager().beginTransaction().
replace(R.id.first_run_contents, fragment, "done").
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).
commit();
}
@Override
public void onDoneCompleted() {
mOnFirstRunCompletedListener.onFirstRunCompleted();
}
public interface OnFirstRunCompletedListener {
void onFirstRunCompleted();
void onFatalError();
}
}