package org.onebrick.android.activities;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.Toast;
import com.squareup.otto.Subscribe;
import org.onebrick.android.R;
import org.onebrick.android.core.OneBrickApplication;
import org.onebrick.android.core.OneBrickRESTClient;
import org.onebrick.android.events.FetchMyEventsEvent;
import org.onebrick.android.events.Status;
import org.onebrick.android.fragments.MyPastEventsFragment;
import org.onebrick.android.fragments.MyUpcomingEventsFragment;
public class MyEventsActivity extends AppCompatActivity {
public static final String UPCOMING_EVENTS_TAG = "upcoming";
public static final String PAST_EVENTS_TAG = "past_events";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_events);
setupTabs();
if (savedInstanceState == null) {
OneBrickRESTClient.getInstance().requestMyEvents();
}
OneBrickApplication.getInstance().getBus().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
OneBrickApplication.getInstance().getBus().unregister(this);
}
private void setupTabs() {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(true);
ActionBar.Tab tab1 = actionBar
.newTab()
.setText(R.string.upcoming)
.setTabListener(new SupportFragmentTabListener<>(R.id.flMyEventsContainer, this,
UPCOMING_EVENTS_TAG, MyUpcomingEventsFragment.class));
actionBar.addTab(tab1);
actionBar.selectTab(tab1);
ActionBar.Tab tab2 = actionBar
.newTab()
.setText(R.string.past_events)
.setTabListener(new SupportFragmentTabListener<>(R.id.flMyEventsContainer, this,
PAST_EVENTS_TAG, MyPastEventsFragment.class));
actionBar.addTab(tab2);
}
@Override
public void onBackPressed() {
finish();
overridePendingTransition(R.anim.left_in, R.anim.right_out);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
public static class SupportFragmentTabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final FragmentActivity mActivity;
private final String mTag;
private final Class<T> mClass;
private final int mfragmentContainerId;
private final Bundle mfragmentArgs;
public SupportFragmentTabListener(FragmentActivity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
mfragmentContainerId = android.R.id.content;
mfragmentArgs = new Bundle();
}
public SupportFragmentTabListener(int fragmentContainerId, FragmentActivity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
mfragmentContainerId = fragmentContainerId;
mfragmentArgs = new Bundle();
}
// This version supports specifying the container to replace with fragment content and fragment args
// new SupportFragmentTabListener<SomeFragment>(R.id.flContent, this, "first", SomeFragment.class, myFragmentArgs))
public SupportFragmentTabListener(int fragmentContainerId, FragmentActivity activity,
String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mfragmentContainerId = fragmentContainerId;
mfragmentArgs = args;
}
/* The following are each of the ActionBar.TabListener callbacks */
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction sft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mfragmentArgs);
sft.add(mfragmentContainerId, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
sft.attach(mFragment);
}
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction sft) {
if (mFragment != null) {
// Detach the fragment, because another one is being attached
sft.detach(mFragment);
}
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction sft) {
// User selected the already selected tab. Usually do nothing.
}
}
@Subscribe
public void onFetchMyEventsEvent(FetchMyEventsEvent event) {
if (event.status == Status.NO_NETWORK) {
Toast.makeText(this, R.string.no_network, Toast.LENGTH_LONG).show();
} else if (event.status == Status.FAILED) {
Toast.makeText(this, R.string.failed_to_fetch_my_events, Toast.LENGTH_LONG).show();
}
}
}