package io.kaif.mobile.view;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.io.Serializable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.kaif.mobile.KaifApplication;
import io.kaif.mobile.R;
import io.kaif.mobile.app.BaseActivity;
import io.kaif.mobile.model.Article;
import io.kaif.mobile.view.daemon.ArticleDaemon;
import io.kaif.mobile.view.viewmodel.ArticleViewModel;
import io.kaif.mobile.view.viewmodel.DebateViewModel;
public class DebatesActivity extends BaseActivity {
static class DebatesActivityIntent {
private static final String ARTICLE = "ARTICLE";
private static final String ARTICLE_ID = "ARTICLE_ID";
private static final String DEBATE_ID = "DEBATE_ID";
public static Intent create(Context context, ArticleViewModel article) {
final Intent intent = new Intent(context, DebatesActivity.class);
intent.putExtra(ARTICLE, article);
return intent;
}
public static ArticleViewModel getArticle(Bundle bundle) {
Serializable serializable = bundle.getSerializable(ARTICLE);
return (ArticleViewModel) serializable;
}
public static Intent create(Context context, DebateViewModel debateViewModel) {
final Intent intent = new Intent(context, DebatesActivity.class);
intent.putExtra(ARTICLE_ID, debateViewModel.getArticleId());
intent.putExtra(DEBATE_ID, debateViewModel.getDebateId());
return intent;
}
public static String getArticleId(Bundle bundle) {
return bundle.getString(ARTICLE_ID);
}
public static String getDebateId(Bundle bundle) {
return bundle.getString(DEBATE_ID);
}
}
public static final String ARTICLE_KEY = "ARTICLE";
@BindView(R.id.tool_bar)
Toolbar toolbar;
private ArticleViewModel article;
@Inject
ArticleDaemon articleDaemon;
@BindView(R.id.loading)
ProgressBar loading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_debates);
ButterKnife.bind(this);
KaifApplication.getInstance().beans().inject(this);
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState != null) {
article = (ArticleViewModel) savedInstanceState.getSerializable(ARTICLE_KEY);
if (article != null) {
createDebatesFragment(false);
return;
}
}
article = DebatesActivityIntent.getArticle(getIntent().getExtras());
if (article != null) {
createDebatesFragment(true);
return;
}
final String articleId = DebatesActivityIntent.getArticleId(getIntent().getExtras());
loading.setVisibility(View.VISIBLE);
setTitle(R.string.loading);
bind(articleDaemon.loadArticle(articleId)).subscribe(articleViewModel -> {
article = articleViewModel;
createDebatesFragment(true);
}, throwable -> {
Toast.makeText(this, throwable.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
finish();
}, () -> loading.setVisibility(View.GONE));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable(ARTICLE_KEY, article);
super.onSaveInstanceState(outState);
}
private void createDebatesFragment(boolean recreateFragment) {
if (article.getArticleType() == Article.ArticleType.EXTERNAL_LINK) {
setTitle(R.string.external_link);
} else {
setTitle(R.string.speak);
}
if (recreateFragment) {
final String debateId = DebatesActivityIntent.getDebateId(getIntent().getExtras());
DebatesFragment debatesFragment = DebatesFragment.newInstance(article, debateId);
getSupportFragmentManager().beginTransaction()
.replace(R.id.content, debatesFragment, DebatesFragment.class.getSimpleName())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_debates, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
} else {
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);
}
return true;
case R.id.action_open_link:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(article.getPermaLink());
intent.addCategory(Intent.CATEGORY_BROWSABLE);
this.startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
}