package com.quinn.githubknife.ui.activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.quinn.githubknife.GithubApplication;
import com.quinn.githubknife.R;
import com.quinn.githubknife.presenter.AuthPresenter;
import com.quinn.githubknife.presenter.AuthPresenterImpl;
import com.quinn.githubknife.ui.BaseActivity;
import com.quinn.githubknife.ui.adapter.FragmentPagerAdapter;
import com.quinn.githubknife.ui.fragments.FollowerFragment;
import com.quinn.githubknife.ui.fragments.FollowingFragment;
import com.quinn.githubknife.ui.fragments.ReceivedEventFragment;
import com.quinn.githubknife.ui.fragments.StarredRepoFragment;
import com.quinn.githubknife.ui.fragments.UserRepoFragment;
import com.quinn.githubknife.ui.widget.AnimateFirstDisplayListener;
import com.quinn.githubknife.utils.L;
import com.quinn.githubknife.view.MainAuthView;
import com.quinn.httpknife.github.User;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import de.hdodenhof.circleimageview.CircleImageView;
public class MainActivity extends BaseActivity implements MainAuthView, NavigationView.OnNavigationItemSelectedListener, View.OnClickListener {
private final static String TAG = MainActivity.class.getSimpleName();
//UI
@Bind(R.id.toolbar_main)
Toolbar toolbar;
@Bind(R.id.nav_view)
NavigationView navigationView;
@Bind(R.id.drawer_layout)
DrawerLayout mDrawerLayout;
@Bind(R.id.viewpager)
ViewPager viewpager;
@Bind(R.id.tabs)
TabLayout tab;
private MaterialDialog progressDialog;
private MaterialDialog.Builder builder;
private View headerView;
private TextView txt_user;
private CircleImageView img_avatar;
private FragmentPagerAdapter adapter;
private ImageLoader imageLoader;
private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
private DisplayImageOptions option;
//Logic
private boolean doneAuth = false;
private AuthPresenter presenter;
private String loginUser;
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//UI
headerView = navigationView.inflateHeaderView(R.layout.nav_header);
img_avatar = (CircleImageView) headerView.findViewById(R.id.avatar);
txt_user = (TextView) headerView.findViewById(R.id.headerText);
imageLoader = ImageLoader.getInstance();
option = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true)
.considerExifParams(true).build();
toolbar.setTitle("Github");
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,
mDrawerLayout, toolbar, R.string.app_name,
R.string.app_name);
toggle.syncState();
mDrawerLayout.setDrawerListener(toggle);
navigationView.setNavigationItemSelectedListener(this);
adapter = new FragmentPagerAdapter(getSupportFragmentManager());
viewpager.setAdapter(adapter);
builder = new MaterialDialog.Builder(this)
.content(R.string.initial)
.cancelable(false)
.progress(true, 0);
//logic
presenter = new AuthPresenterImpl(this, this);
presenter.auth();
headerView.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if (doneAuth) {
mDrawerLayout.closeDrawers();
setUpTab(menuItem.getItemId());
if (menuItem.getItemId() == R.id.nav_home || menuItem.getItemId() == R.id.nav_friends)
menuItem.setChecked(true);
}
return true;
}
public void setUpTab(int id) {
switch (id) {
case R.id.nav_home:
adapter.clear();
viewpager.setOffscreenPageLimit(3);
adapter.addFragment(ReceivedEventFragment.getInstance(loginUser), "Events");
adapter.addFragment(StarredRepoFragment.getInstance(loginUser), "Starred");
adapter.addFragment(UserRepoFragment.getInstance(loginUser), "Repository");
adapter.notifyDataSetChanged();
tab.setupWithViewPager(viewpager);
break;
case R.id.nav_friends:
adapter.clear();
viewpager.setOffscreenPageLimit(2);
adapter.addFragment(FollowerFragment.getInstance(loginUser), "Follower");
adapter.addFragment(FollowingFragment.getInstance(loginUser), "Following");
adapter.notifyDataSetChanged();
tab.setupWithViewPager(viewpager);
break;
case R.id.nav_search: {
Intent intent = new Intent(this, SearchActivity.class);
this.startActivity(intent);
break;
}
case R.id.nav_trending: {
Intent intent = TrendingActivity.createIntent(this);
this.startActivity(intent);
break;
}
case R.id.nav_setting:
SettingActivity.launch(this);
return;
case R.id.nav_about:
Intent intent = new Intent(this, AboutActivity.class);
this.startActivity(intent);
break;
}
}
@Override
public void doneAuth(User user) {
this.user = user;
loginUser = user.getLogin();
txt_user.setText(loginUser);
imageLoader.displayImage(this.user.getAvatar_url(), img_avatar, option, animateFirstListener);
tab.setupWithViewPager(viewpager);
setUpTab(R.id.nav_home);
doneAuth = true;
((GithubApplication)getApplication()).setUser(user);
}
@Override
public void onClick(View v) {
if (doneAuth) {
Bundle bundle = new Bundle();
bundle.putSerializable("user", user);
UserInfoActivity.launch(this, bundle);
}
}
@Override
public void onError(String msg) {
L.i(TAG,"show error dialog ");
AlertDialog.Builder builder =
new AlertDialog.Builder(this);
builder.setTitle(R.string.fail_init_warning);
builder.setMessage(msg);
builder.setPositiveButton(R.string.try_again, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
presenter.auth();
}
});
builder.setCancelable(false);
builder.show();
}
@Override
public void showProgress() {
progressDialog = builder.show();
}
@Override
public void hideProgress() {
progressDialog.dismiss();
}
}