package org.wordpress.android.ui.prefs;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.wordpress.android.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.fluxc.Dispatcher;
import org.wordpress.android.fluxc.model.SiteModel;
import org.wordpress.android.fluxc.store.AccountStore;
import org.wordpress.android.fluxc.store.SiteStore;
import org.wordpress.android.fluxc.store.SiteStore.OnSiteDeleted;
import org.wordpress.android.networking.ConnectionChangeReceiver;
import org.wordpress.android.util.SiteUtils;
import org.wordpress.android.util.StringUtils;
import org.wordpress.android.util.ToastUtils;
import javax.inject.Inject;
import de.greenrobot.event.EventBus;
/**
* Activity for configuring blog specific settings.
*/
public class BlogPreferencesActivity extends AppCompatActivity {
public static final int RESULT_BLOG_REMOVED = RESULT_FIRST_USER;
private static final String KEY_SETTINGS_FRAGMENT = "settings-fragment";
@Inject AccountStore mAccountStore;
@Inject SiteStore mSiteStore;
@Inject Dispatcher mDispatcher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((WordPress) getApplication()).component().inject(this);
final SiteModel site;
if (savedInstanceState == null) {
site = (SiteModel) getIntent().getSerializableExtra(WordPress.SITE);
} else {
site = (SiteModel) savedInstanceState.getSerializable(WordPress.SITE);
}
if (site == null) {
ToastUtils.showToast(this, R.string.blog_not_found, ToastUtils.Duration.SHORT);
finish();
return;
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(StringUtils.unescapeHTML(SiteUtils.getSiteNameOrHomeURL(site)));
}
FragmentManager fragmentManager = getFragmentManager();
Fragment siteSettingsFragment = fragmentManager.findFragmentByTag(KEY_SETTINGS_FRAGMENT);
if (siteSettingsFragment == null) {
siteSettingsFragment = new SiteSettingsFragment();
siteSettingsFragment.setArguments(getIntent().getExtras());
fragmentManager.beginTransaction()
.replace(android.R.id.content, siteSettingsFragment, KEY_SETTINGS_FRAGMENT)
.commit();
}
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
mDispatcher.register(this);
}
@Override
protected void onStop() {
mDispatcher.unregister(this);
EventBus.getDefault().unregister(this);
super.onStop();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemID = item.getItemId();
if (itemID == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("unused")
public void onEventMainThread(ConnectionChangeReceiver.ConnectionChangeEvent event) {
SiteSettingsFragment siteSettingsFragment = getSettingsFragment();
if (siteSettingsFragment != null) {
if (!event.isConnected()) {
ToastUtils.showToast(this, getString(R.string.site_settings_disconnected_toast));
}
siteSettingsFragment.setEditingEnabled(event.isConnected());
// TODO: add this back when delete blog is back
//https://github.com/wordpress-mobile/WordPress-Android/commit/6a90e3fe46e24ee40abdc4a7f8f0db06f157900c
// Checks for stats widgets that were synched with a blog that could be gone now.
// StatsWidgetProvider.updateWidgetsOnLogout(this);
}
}
@SuppressWarnings("unused")
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSiteDeleted(OnSiteDeleted event) {
SiteSettingsFragment siteSettingsFragment = getSettingsFragment();
if (siteSettingsFragment != null) {
if (event.isError()) {
siteSettingsFragment.handleDeleteSiteError(event.error);
return;
}
siteSettingsFragment.handleSiteDeleted();
setResult(RESULT_BLOG_REMOVED);
finish();
}
}
private SiteSettingsFragment getSettingsFragment() {
FragmentManager fragmentManager = getFragmentManager();
return (SiteSettingsFragment) fragmentManager.findFragmentByTag(KEY_SETTINGS_FRAGMENT);
}
}