package com.boardgamegeek.ui;
import android.support.annotation.MenuRes;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import com.boardgamegeek.R;
import com.boardgamegeek.events.UpdateErrorEvent;
import com.boardgamegeek.service.SyncService;
import com.boardgamegeek.util.UIUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import hugo.weaving.DebugLog;
/**
* Registers/unregisters a sticky event bus, with a default error handler (toast)
* Provides common menu functions:
* 1. Cancel sync
* 2. Toggling navigation drawer
* 3. Inflation helper.
* Subtitle setter
*/
public abstract class BaseActivity extends AppCompatActivity {
@DebugLog
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@DebugLog
@Override
protected void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@SuppressWarnings("unused")
@DebugLog
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(UpdateErrorEvent event) {
Toast.makeText(this, event.getMessage(), Toast.LENGTH_LONG).show();
}
@MenuRes
protected int getOptionsMenuId() {
return 0;
}
@DebugLog
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.base, menu);
if (getOptionsMenuId() != 0) {
menuInflater.inflate(getOptionsMenuId(), menu);
}
return true;
}
@DebugLog
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
UIUtils.showMenuItem(menu, R.id.menu_cancel_sync, SyncService.isActiveOrPending(this));
return super.onPrepareOptionsMenu(menu);
}
@DebugLog
protected void setSubtitle(String text) {
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setSubtitle(text);
}
}
@DebugLog
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (this instanceof TopLevelActivity) {
// bug in ActionBarDrawerToggle
return false;
}
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.menu_cancel_sync:
SyncService.cancelSync(this);
return true;
}
return super.onOptionsItemSelected(item);
}
}