package com.mirhoseini.marvel.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.Settings;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;
import com.mirhoseini.marvel.ApplicationComponent;
import com.mirhoseini.marvel.MarvelApplication;
import com.mirhoseini.marvel.R;
import com.mirhoseini.marvel.base.BaseActivity;
import com.mirhoseini.marvel.character.cache.CacheFragment;
import com.mirhoseini.marvel.character.search.SearchFragment;
import com.mirhoseini.marvel.database.model.CharacterModel;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import rx.subscriptions.CompositeSubscription;
import timber.log.Timber;
/**
* Created by Mohsen on 20/10/2016.
*/
public class MainActivity extends BaseActivity {
public static final String TAG_SEARCH_FRAGMENT = "search_fragment";
public static final String TAG_CACHE_FRAGMENT = "cache_fragment";
// injecting dependencies via Dagger
@Inject
Context context;
// injecting views via ButterKnife
@BindView(R.id.toolbar)
Toolbar toolbar;
CompositeSubscription subscriptions;
private SearchFragment searchFragment;
private CacheFragment cacheFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// inject views using ButterKnife
ButterKnife.bind(this);
setupToolbar();
if (null == savedInstanceState) {
searchFragment = SearchFragment.newInstance();
cacheFragment = CacheFragment.newInstance();
attachFragments();
} else {
searchFragment = (SearchFragment) getSupportFragmentManager().findFragmentByTag(TAG_SEARCH_FRAGMENT);
cacheFragment = (CacheFragment) getSupportFragmentManager().findFragmentByTag(TAG_CACHE_FRAGMENT);
}
Timber.d("Main Activity Created");
}
@Override
protected void injectDependencies(MarvelApplication application, ApplicationComponent component) {
component.inject(this);
}
private void setupToolbar() {
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.logo);
getSupportActionBar().setTitle(R.string.main_title);
}
private void attachFragments() {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.search_fragment, searchFragment, TAG_SEARCH_FRAGMENT);
fragmentTransaction.replace(R.id.cache_fragment, cacheFragment, TAG_CACHE_FRAGMENT);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
super.onResume();
if (null == subscriptions || subscriptions.isUnsubscribed())
subscriptions = new CompositeSubscription();
subscriptions.addAll(
searchFragment.characterObservable()
.subscribe(this::showCharacter),
searchFragment.messageObservable()
.subscribe(this::showMessage),
searchFragment.offlineObservable()
.subscribe(this::showOfflineMessage),
cacheFragment.characterObservable()
.subscribe(this::showCharacter),
cacheFragment.messageObservable()
.subscribe(this::showMessage),
cacheFragment.offlineObservable()
.subscribe(this::showOfflineMessage)
);
}
public void showMessage(String message) {
Timber.d("Showing Message: %s", message);
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
public void showOfflineMessage(boolean isCritical) {
Timber.d("Showing Offline Message");
Snackbar.make(toolbar, R.string.offline_message, Snackbar.LENGTH_LONG)
.setAction(R.string.go_online, v -> startActivity(new Intent(
Settings.ACTION_WIFI_SETTINGS)))
.setActionTextColor(Color.GREEN)
.show();
}
public void showCharacter(CharacterModel character) {
startActivity(CharacterActivity.newIntent(this, character));
}
@Override
protected void onPause() {
super.onPause();
subscriptions.unsubscribe();
}
@Override
protected void releaseSubComponents(MarvelApplication application) {
application.releaseCacheSubComponent();
application.releaseSearchSubComponent();
}
}