package com.github.glomadrian.mvpcleanarchitecture.ui.activity; import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; import android.view.LayoutInflater; import android.view.View; import com.github.glomadrian.mvpcleanarchitecture.R; import com.github.glomadrian.mvpcleanarchitecture.app.BaseActivity; import com.github.glomadrian.mvpcleanarchitecture.domain.model.MarvelCharacter; import com.github.glomadrian.mvpcleanarchitecture.ui.fragment.CharacterInfoFragment; import com.github.glomadrian.mvpcleanarchitecture.ui.reactive.CharacterSelectedObservable; import com.github.glomadrian.mvpcleanarchitecture.ui.reactive.CharacterSelectedObserver; import org.parceler.Parcels; import javax.inject.Inject; /** * Main activity of the Application, it decide if launch a new activity or update the fragment * depending of the view inflated * <p/> * This activity is the container of one fragment if is in portrait and 2 if is in landscape * The type of the layout inflated will be checked and use for navigation * * @author glomadrian */ public class MainActivity extends BaseActivity implements CharacterSelectedObserver { public static final String TAG_PORTRAIT = "V11-portrait"; public static final String TAG_LANDSCAPE = "V11-landscape"; @Inject CharacterSelectedObservable characterSelectedObservable; //The viewTag is the key for the navigation with different sizes private String viewTag; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = LayoutInflater.from(this).inflate(R.layout.main, null); viewTag = (String) view.getTag(); setContentView(view); } @Override protected void onResume() { super.onResume(); characterSelectedObservable.register(this); } @Override protected void onPause() { super.onPause(); characterSelectedObservable.unregister(this); } /** * This method is called when a new marvel character is selected * * @param marvelCharacter */ @Override public void characterSelected(MarvelCharacter marvelCharacter) { if (viewTag.equals(TAG_PORTRAIT)) { launchCharacterInfoActivity(marvelCharacter); } if (viewTag.equals(TAG_LANDSCAPE)) { replaceCharacterInfoFragment(marvelCharacter); } } //TODO Change to navigator class with activity context private void launchCharacterInfoActivity(MarvelCharacter marvelCharacter) { Intent intent = new Intent(this, ModelInfoActivity.class); Parcelable parcelable = Parcels.wrap(marvelCharacter); intent.putExtra(ModelInfoActivity.KEY_CHARACTER, parcelable); startActivity(intent); } private void replaceCharacterInfoFragment(MarvelCharacter marvelCharacter) { CharacterInfoFragment characterInfoFragment = CharacterInfoFragment.newInstance(marvelCharacter); getFragmentManager() .beginTransaction() .replace(R.id.character_info_fragment, characterInfoFragment) .disallowAddToBackStack() .commit(); } }