package com.arcao.trackables.ui; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import com.arcao.geocaching.api.data.type.MemberType; import com.arcao.trackables.R; import com.arcao.trackables.data.service.AccountService; import com.arcao.trackables.internal.di.HasComponent; import com.arcao.trackables.internal.di.component.MainActivityComponent; import com.arcao.trackables.ui.fragment.TrackableListFragment; import com.mikepenz.iconics.typeface.FontAwesome; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; import com.mikepenz.materialdrawer.accountswitcher.AccountHeader; import com.mikepenz.materialdrawer.accountswitcher.AccountHeaderBuilder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem; import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.Nameable; import com.mikepenz.materialdrawer.util.KeyboardUtil; import javax.inject.Inject; import butterknife.ButterKnife; import butterknife.InjectView; import timber.log.Timber; public class MainActivity extends AppCompatActivity implements HasComponent<MainActivityComponent> { private static final int ID_MY = 0; private static final int ID_FAVORITE = 1; private static final int ID_SETTINGS = -1; @Inject protected AccountService accountService; @InjectView(R.id.toolbar) protected Toolbar toolbar; private AccountHeader accountHeader = null; private Drawer drawer = null; private MainActivityComponent component; public MainActivityComponent component() { if (component == null) component = MainActivityComponent.Initializer.init(this); return component; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); component().inject(this); setContentView(R.layout.activity_main); ButterKnife.inject(this); setSupportActionBar(toolbar); // Create the AccountHeader accountHeader = new AccountHeaderBuilder() .withActivity(this) .withHeaderBackground(R.drawable.header) .withSelectionListEnabledForSingleProfile(false) .withCompactStyle(true) .withOnAccountHeaderListener((view, profile1, current) -> { if (profile1 instanceof ProfileSettingDrawerItem) { return false; } return false; }) .withSavedInstance(savedInstanceState) .build(); //Create the drawer drawer = new DrawerBuilder() .withActivity(this) .withToolbar(toolbar) .withAccountHeader(accountHeader) .addDrawerItems( new PrimaryDrawerItem().withName(R.string.drawer_item_own).withIdentifier(ID_MY).withIcon(FontAwesome.Icon.faw_heart), new PrimaryDrawerItem().withName(R.string.drawer_item_favorited).withIdentifier(ID_FAVORITE).withIcon(FontAwesome.Icon.faw_star) ) // add the items we want to use with our Drawer .withOnDrawerItemClickListener((parent, view, position, id, drawerItem) -> drawerItem != null && drawerItem instanceof Nameable && onClickDrawerItem(drawerItem)) .withOnDrawerListener(new Drawer.OnDrawerListener() { @Override public void onDrawerOpened(View drawerView) { KeyboardUtil.hideKeyboard(MainActivity.this); } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerSlide(View view, float v) { } }) .addStickyDrawerItems( new SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIdentifier(ID_SETTINGS).withIcon(FontAwesome.Icon.faw_cog).withCheckable(false) ) .withFireOnInitialOnClick(true) .withAnimateDrawerItems(true) .withCloseOnClick(true) .withSavedInstance(savedInstanceState) .build(); //react on the keyboard drawer.keyboardSupportEnabled(this, true); getFragmentManager().beginTransaction().replace(R.id.fragment_container, new TrackableListFragment()).commit(); } private boolean onClickDrawerItem(IDrawerItem drawerItem) { switch (drawerItem.getIdentifier()) { case ID_SETTINGS: // show settings return true; default: setTitle(((Nameable)drawerItem).getNameRes()); return true; } } @Override protected void onResume() { super.onResume(); accountHeader.clear(); accountHeader.addProfiles(createProfile()); if (!accountService.isAccount()) { startActivity(new Intent(this, WelcomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)); finish(); } } private ProfileDrawerItem createProfile() { if (accountService.isAccount()) { Timber.d(accountService.getAvatarUrl()); return new ProfileDrawerItem() .withName(accountService.getUserName()) .withEmail(accountService.getMemberType() == MemberType.Premium ? getString(R.string.member_premium) : getString(R.string.member_basic)) .withIcon(accountService.getAvatarUrl()); } else { return new ProfileDrawerItem(); } } @Override protected void onSaveInstanceState(Bundle outState) { outState = drawer.saveInstanceState(outState); outState = accountHeader.saveInstanceState(outState); super.onSaveInstanceState(outState); } @Override public void onBackPressed() { if (drawer != null && drawer.isDrawerOpen()) { drawer.closeDrawer(); } else { super.onBackPressed(); } } }