package com.luciofm.droidcon.ifican.activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.WindowManager; import com.luciofm.droidcon.ifican.IfICan; import com.luciofm.droidcon.ifican.R; import com.luciofm.droidcon.ifican.fragment.ActivityLTransitionsCodeFragment; import com.luciofm.droidcon.ifican.fragment.ActivityTransitionsCodeFragment; import com.luciofm.droidcon.ifican.fragment.BaseFragment; import com.luciofm.droidcon.ifican.fragment.CallAtentionFragment; import com.luciofm.droidcon.ifican.fragment.CodeFragment; import com.luciofm.droidcon.ifican.fragment.CustomTransitionsCodeFragment; import com.luciofm.droidcon.ifican.fragment.FeedbackFragment; import com.luciofm.droidcon.ifican.fragment.GuideUserFragment; import com.luciofm.droidcon.ifican.fragment.HelloFragment; import com.luciofm.droidcon.ifican.fragment.IfICanFragment; import com.luciofm.droidcon.ifican.fragment.LayoutTransitionsCodeFragment; import com.luciofm.droidcon.ifican.fragment.MinSdkFragment; import com.luciofm.droidcon.ifican.fragment.MorphingButtonCodeFragment; import com.luciofm.droidcon.ifican.fragment.MyselfFragment; import com.luciofm.droidcon.ifican.fragment.QuestionsFragment; import com.luciofm.droidcon.ifican.fragment.SmoothStateChangeFragment; import com.luciofm.droidcon.ifican.fragment.TheEndFragment; import com.luciofm.droidcon.ifican.fragment.TouchFeedbackCodeFragment; import com.luciofm.droidcon.ifican.fragment.WhyFragment; import com.luciofm.droidcon.ifican.fragment.WorkFragment; import com.luciofm.droidcon.ifican.util.MessageEvent; import com.luciofm.droidcon.ifican.util.RemoteEvent; import com.squareup.otto.Subscribe; import java.util.ArrayList; import butterknife.ButterKnife; public class MainActivity extends BaseActivity { int index = 0; ArrayList<Class<? extends BaseFragment>> fragments = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); ButterKnife.inject(this); fragments.add(HelloFragment.class); fragments.add(MyselfFragment.class); fragments.add(WorkFragment.class); fragments.add(IfICanFragment.class); fragments.add(WhyFragment.class); fragments.add(SmoothStateChangeFragment.class); fragments.add(CallAtentionFragment.class); fragments.add(GuideUserFragment.class); fragments.add(FeedbackFragment.class); fragments.add(CodeFragment.class); fragments.add(LayoutTransitionsCodeFragment.class); fragments.add(TouchFeedbackCodeFragment.class); fragments.add(ActivityTransitionsCodeFragment.class); fragments.add(ActivityLTransitionsCodeFragment.class); fragments.add(MorphingButtonCodeFragment.class); fragments.add(CustomTransitionsCodeFragment.class); fragments.add(QuestionsFragment.class); fragments.add(TheEndFragment.class); fragments.add(MinSdkFragment.class); /*fragments.add(IfICanFragment.class); fragments.add(WhyFragment.class); fragments.add(SoftTransitionsFragment.class); fragments.add(TransitionsExampleFragment.class); fragments.add(ContextFragment.class); fragments.add(AtentionFragment.class); fragments.add(FeedbackFragment.class); fragments.add(CodeFragment.class); fragments.add(LayoutTransitionsCodeFragment.class); fragments.add(TouchFeedbackCodeFragment.class); fragments.add(RevealCodeFragment.class); fragments.add(AnimationListCodeFragment.class); fragments.add(ObjectAnimatorCodeFragment.class); fragments.add(ViewPropertyAnimatorCodeFragment.class); fragments.add(ActivityTransitionsCodeFragment.class); fragments.add(ActivityLTransitionsCodeFragment.class); fragments.add(MorphingButtonCodeFragment.class); fragments.add(QuestionsFragment.class); fragments.add(TheEndFragment.class); fragments.add(MinSdkFragment.class);*/ if (savedInstanceState == null) nextFragment(false); getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { index = getFragmentManager().getBackStackEntryCount() + 1; } }); } @Override protected void onResume() { super.onResume(); IfICan.getBusInstance().register(this); } @Override protected void onPause() { super.onPause(); IfICan.getBusInstance().unregister(this); } public void nextFragment() { nextFragment(null); } public void nextFragment(boolean backstack) { nextFragment(backstack, null); } public void nextFragment(Bundle args) { nextFragment(true, args); } public void nextFragment(boolean backStack, Bundle args) { if (index == fragments.size()) return; Class<? extends BaseFragment> clazz = fragments.get(index++); try { BaseFragment f = clazz.newInstance(); if (args != null) f.setArguments(args); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragmentContainer, f, "current") .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); if (backStack) ft.addToBackStack(null); ft.commit(); String message = f.getMessage(); if (message != null) IfICan.getBusInstance().post(new MessageEvent(message)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("INDEX", index); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); index = savedInstanceState.getInt("INDEX", 0); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d("IFICAN", "onKeyDown: " + keyCode + " - event: " + event.getScanCode()); BaseFragment fragment = (BaseFragment) getFragmentManager().findFragmentByTag("current"); int scanCode = event.getScanCode(); switch (scanCode) { case IfICan.BUTTON_NEXT: case 28: case 229: case 0x74: fragment.onNextPressed(); return true; case IfICan.BUTTON_PREV: case 0x79: case 57: fragment.onPrevPressed(); return true; } return super.onKeyDown(keyCode, event); } @Subscribe public void onRemoteEvent(RemoteEvent event) { BaseFragment fragment = (BaseFragment) getFragmentManager().findFragmentByTag("current"); if (event.getType() == RemoteEvent.EVENT_BACK) fragment.onPrevPressed(); else if (event.getType() == RemoteEvent.EVENT_ADVANCE) fragment.onNextPressed(); } }