package starter.kit.rx.app.feature.main;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.View;
import butterknife.BindView;
import com.mikepenz.fontawesome_typeface_library.FontAwesome;
import com.mikepenz.materialdrawer.AccountHeader;
import com.mikepenz.materialdrawer.AccountHeaderBuilder;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
import java.util.ArrayList;
import java.util.List;
import starter.kit.feature.rx.RxStarterActivity;
import starter.kit.rx.app.R;
import starter.kit.rx.app.RxApp;
import starter.kit.rx.app.feature.auth.LoginActivity;
import starter.kit.rx.app.feature.content.ContentActivity;
import starter.kit.rx.app.feature.feed.IdFeedFragment;
import starter.kit.rx.app.feature.feed.NoPageFeedFragment;
import starter.kit.rx.app.feature.feed.PageFeedFragment;
import starter.kit.rx.app.feature.util.SimpleHudActivity;
public class MainActivity extends RxStarterActivity implements Drawer.OnDrawerItemClickListener {
//save our header or result
private AccountHeader headerResult = null;
private Drawer result = null;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.viewPager) ViewPager mViewPager;
@BindView(R.id.tabLayout) TabLayout mTabLayout;
@BindView(R.id.collapsingToolbarLayout) CollapsingToolbarLayout mCollapsingToolbarLayout;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupToolbar();
setupDrawer(savedInstanceState);
setupViewPager();
setupTabLayout();
setupCollapsingToolbar();
}
private void setupCollapsingToolbar() {
mCollapsingToolbarLayout.setTitleEnabled(false);
}
private void setupTabLayout() {
mTabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager() {
SimplePagerAdapter adapter = new SimplePagerAdapter(getSupportFragmentManager());
adapter.addFrag(IdFeedFragment.create(), "RxIdentifier");
adapter.addFrag(PageFeedFragment.create(), "RxPager");
adapter.addFrag(NoPageFeedFragment.create(), "No Page");
mViewPager.setAdapter(adapter);
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, RxApp.appResources().getDisplayMetrics());
mViewPager.setPageMargin(pageMargin);
}
private void setupToolbar() {
setSupportActionBar(mToolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.app_name);
}
}
private void setupDrawer(Bundle savedInstanceState) {
// Create a few sample profile
// NOTE you have to define the loader logic too. See the CustomApplication for more details
final IProfile profile = new ProfileDrawerItem().withName("Smartydroid")
.withEmail("smartydroid@gmail.com")
.withIcon("https://avatars2.githubusercontent.com/u/13810934?v=3&s=460");
// Create the AccountHeader
headerResult = new AccountHeaderBuilder().withActivity(this)
.withHeaderBackground(R.drawable.header)
.addProfiles(profile)
.withSavedInstance(savedInstanceState)
.build();
//Create the drawer
result = new DrawerBuilder().withActivity(this)
.withToolbar(mToolbar)
.withHasStableIds(true)
.withAccountHeader(headerResult) //set the AccountHeader we created earlier for the header
.addDrawerItems(
new PrimaryDrawerItem().withName("Feeds").withIcon(FontAwesome.Icon.faw_android).withTag(TAG_FEEDS),
new PrimaryDrawerItem().withName("Login").withIcon(FontAwesome.Icon.faw_adjust).withTag(TAG_LOGIN),
new PrimaryDrawerItem().withName("SimpleHud").withIcon(FontAwesome.Icon.faw_adjust).withTag(TAG_SIMPLE_HUD),
new PrimaryDrawerItem().withName("Content").withIcon(FontAwesome.Icon.faw_connectdevelop).withTag(TAG_CONTENT)
)
.addStickyDrawerItems(
new PrimaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),
new PrimaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesome.Icon.faw_github)
)
.withOnDrawerItemClickListener(this)
.withSavedInstance(savedInstanceState)
.withShowDrawerOnFirstLaunch(true)
.build();
}
private static final String TAG_FEEDS = "feeds";
private static final String TAG_LOGIN = "login";
private static final String TAG_SIMPLE_HUD = "SimpleHud";
private static final String TAG_CONTENT = "ContentDemo";
@Override public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
if (TAG_LOGIN.equals(drawerItem.getTag())) {
startActivity(new Intent(MainActivity.this, LoginActivity.class));
return true;
}
if (TAG_SIMPLE_HUD.equals(drawerItem.getTag())) {
startActivity(new Intent(MainActivity.this, SimpleHudActivity.class));
return true;
}
if (TAG_CONTENT.equals(drawerItem.getTag())) {
startActivity(new Intent(MainActivity.this, ContentActivity.class));
return true;
}
return false;
}
@Override protected void onSaveInstanceState(Bundle outState) {
//add the values which need to be saved from the drawer to the bundle
outState = result.saveInstanceState(outState);
//add the values which need to be saved from the accountHeader to the bundle
outState = headerResult.saveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override public void onBackPressed() {
//handle the back press :D close the drawer first and if the drawer is closed close the activity
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
} else {
super.onBackPressed();
}
}
static class SimplePagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragments = new ArrayList<>();
private final List<String> mFragmentTitles = new ArrayList<>();
public SimplePagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
public void addFrag(Fragment fragment, String title) {
mFragments.add(fragment);
mFragmentTitles.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitles.get(position);
}
}
}