package com.lh.fly.ui.activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import com.lh.fly.App;
import com.lh.fly.R;
import com.lh.fly.api.AccessTokenKeeper;
import com.lh.fly.common.assist.Toastor;
import com.lh.fly.common.log.Log;
import com.lh.fly.data.statuses.AccessStatusesService;
import com.lh.fly.model.HomeTimeLine;
import com.lh.fly.ui.adapter.HomeStatusesAdapter;
import com.lh.fly.ui.adapter.SimpleDividerItemDecoration;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.accountswitcher.AccountHeader;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
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.IProfile;
import com.sina.weibo.sdk.openapi.models.Status;
import java.util.ArrayList;
import java.util.List;
import butterknife.InjectView;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class HomeActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener {
private static final int DEFAULT_LOAD_COUNT = 20;
@InjectView(R.id.swipe_refresh)
SwipeRefreshLayout swipeRefresh;
@InjectView(R.id.rv_home_statuses)
RecyclerView rcHomeStatuses;
private HomeStatusesAdapter mHomeStatusesAdapter;
private LinearLayoutManager mllManager;
/** Drawer */
private AccountHeader.Result mHeaderResult = null;
private Drawer.Result mDrawerResult = null;
private int previousTotal = 0; // The total number of items in the dataset after the last load
private boolean loading = false; // True if we are still waiting for the last set of data to load.
private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more.
int firstVisibleItem, visibleItemCount, totalItemCount;
private long sinceId = 0;
private IProfile profile = new ProfileDrawerItem().withName("我这个疯子啊").withEmail("464538715@qq.com").withIcon("https://avatars3.githubusercontent.com/u/1476232?v=3&s=460");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
init();
}
@Override
protected void init() {
super.init();
// init view
mToolbar.setTitle(getResources().getString(R.string.app_name));
// 设置刷新颜色
swipeRefresh.setColorSchemeColors(getResources().getIntArray(R.array.color_scheme_colors));
swipeRefresh.setOnRefreshListener(this);
// 设置divider
rcHomeStatuses.addItemDecoration(
new SimpleDividerItemDecoration(getResources().getDrawable(R.drawable.rv_divider)));
// setLayoutManager
mllManager = new LinearLayoutManager(getApplicationContext());
rcHomeStatuses.setLayoutManager(mllManager);
mHomeStatusesAdapter = new HomeStatusesAdapter(this);
rcHomeStatuses.setAdapter(mHomeStatusesAdapter);
rcHomeStatuses.setHasFixedSize(true);
rcHomeStatuses.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int end = recyclerView.getChildCount() + mllManager.findFirstVisibleItemPosition();
int totalItemCount = mllManager.getItemCount();
// 到达底部进行加载更多
if (end == totalItemCount && !loading) {
// 只调用一次
onLoadMore();
}
// visibleItemCount = recyclerView.getChildCount();
// totalItemCount = mllManager.getItemCount();
// firstVisibleItem = mllManager.findFirstVisibleItemPosition();
//
// if (loading) {
// if (totalItemCount > previousTotal) {
// loading = false;
// previousTotal = totalItemCount;
// }
// }
// if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// onLoadMore();
// loading = true;
// }
}
});
// Create the AccountHeader
mHeaderResult = new AccountHeader()
.withActivity(this)
.withHeaderBackground(new ColorDrawable(Color.DKGRAY))
.addProfiles(
profile,
//don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)
new ProfileSettingDrawerItem().withName("添加账户").withIcon(new IconicsDrawable(this, GoogleMaterial.Icon.gmd_add).actionBarSize().paddingDp(5).colorRes(R.color.material_drawer_primary_text)).withIdentifier(1),
new ProfileSettingDrawerItem().withName("管理账户").withIcon(GoogleMaterial.Icon.gmd_settings)
).build();
mDrawerResult = new Drawer()
.withActivity(this)
.withToolbar(mToolbar)
.withAccountHeader(mHeaderResult)
.addDrawerItems(
new DividerDrawerItem(),
new SecondaryDrawerItem().withName("设置")
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) {
// do something with the clicked item :D
}
})
.build();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
swipeRefresh.setRefreshing(true);
loadData();
}
}, 100);
}
/**
* 监听刷新 加载数据
*/
@Override
public void onRefresh() {
sinceId = 0;
loadData();
}
private void onLoadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loading = true;
loadData();
}
}, 2000);
}
private void loadData() {
AccessStatusesService accessStatusesService = App.getService(AccessStatusesService.class);
accessStatusesService.getDefaultHomeTimeLine(
AccessTokenKeeper.readAccessToken(getApplicationContext()).getToken(),
sinceId,
DEFAULT_LOAD_COUNT,
new Callback<HomeTimeLine>() {
@Override
public void success(HomeTimeLine homeTimeLine, Response response) {
Toast.makeText(getApplicationContext(), "成 功", Toast.LENGTH_SHORT).show();
loading = false;
mHomeStatusesAdapter.update(homeTimeLine.statuses);
sinceId = homeTimeLine.since_id;
closeRefresh();
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(getApplicationContext(), "失 败", Toast.LENGTH_SHORT).show();
closeRefresh();
}
});
}
private void closeRefresh() {
if (null != swipeRefresh && swipeRefresh.isRefreshing()) {
swipeRefresh.setRefreshing(false);
}
}
}