package com.github.boybeak.timepaper.activity; import android.app.WallpaperManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.design.widget.CoordinatorLayout; 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.content.LocalBroadcastManager; import android.support.v4.view.ViewPager; import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.transition.Transition; import com.github.boybeak.timepaper.Finals; import com.github.boybeak.timepaper.R; import com.github.boybeak.timepaper.fragment.LatestFragment; import com.github.boybeak.timepaper.fragment.PaperFragment; import com.github.boybeak.timepaper.fragment.PopularFragment; import com.github.boybeak.timepaper.fragment.RandomFragment; import com.github.boybeak.timepaper.model.User; import com.github.boybeak.timepaper.retrofit.Auth; import com.github.boybeak.timepaper.utils.UiHelper; public class MainActivity extends BaseActivity { private static final String TAG = MainActivity.class.getSimpleName(); private View mCoverLayout; private CoordinatorLayout mCl; private AppCompatImageView mCoverIv; private Toolbar mTb; private TabLayout mTl; private ViewPager mVp; private PaperAdapter mAdapter; private PaperFragment[] mPapers = new PaperFragment[3]; private TabLayout.OnTabSelectedListener mTabListener = new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { mPapers[tab.getPosition()].scrollToTop(); } }; private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (intent.getAction()) { case Intent.ACTION_WALLPAPER_CHANGED: refreshWallpaper(); break; case Finals.ACTION_LOGOUT: break; } } }; private BroadcastReceiver mLogoutReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Finals.ACTION_LOGOUT.equals(intent.getAction())) { finish(); startActivity(new Intent(MainActivity.this, HelloActivity.class)); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCl = (CoordinatorLayout)findViewById(R.id.main_cl); mCoverIv = (AppCompatImageView)findViewById(R.id.main_tb_cover); mTb = (Toolbar)findViewById(R.id.main_tb); mTl = (TabLayout)findViewById(R.id.main_tab_layout); mVp = (ViewPager)findViewById(R.id.main_view_pager); mCoverLayout = findViewById(R.id.main_cover_layout); mTb.setNavigationIcon(R.mipmap.ic_launcher_round); setSupportActionBar(mTb); mPapers[0] = new RandomFragment(); mPapers[1] = new LatestFragment(); mPapers[2] = new PopularFragment(); mAdapter = new PaperAdapter(getSupportFragmentManager()); mVp.setAdapter(mAdapter); mVp.setOffscreenPageLimit(mPapers.length); mVp.setCurrentItem(1); mTl.setupWithViewPager(mVp); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); mTl.addOnTabSelectedListener(mTabListener); if (Auth.hasMe(this)) { showMe(Auth.getMe(this)); } Auth.syncMe(this, new Auth.UserListener() { @Override public void onUserInfo(User user) { showMe(user); } @Override public void onUserNotExist() { } }); refreshWallpaper(); registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED)); LocalBroadcastManager.getInstance(this).registerReceiver(mLogoutReceiver, new IntentFilter(Finals.ACTION_LOGOUT)); getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this); ViewGroup.LayoutParams params = mCoverLayout.getLayoutParams(); params.height = UiHelper.getStatusBarHeight(MainActivity.this) + UiHelper.getActionBarSize(MainActivity.this); mCoverLayout.setLayoutParams(params); } }); } private void refreshWallpaper () { final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); final Drawable wallpaperDrawable = wallpaperManager.getDrawable(); mCoverIv.setImageDrawable(wallpaperDrawable); } private void showMe (final User me) { int iconSize = getResources().getDimensionPixelSize(R.dimen.navigation_icon_size); Glide.with(MainActivity.this).load(me.profile_image.large) .transition(DrawableTransitionOptions.withCrossFade()) .apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.overrideOf(iconSize, iconSize)) .apply(RequestOptions.errorOf(R.mipmap.ic_launcher_round)) .into(new SimpleTarget<Drawable>() { @Override public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) { mTb.setNavigationIcon(resource); } }); mTb.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent it = new Intent(MainActivity.this, ProfileActivity.class); it.putExtra("user", me); startActivity(it); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.main_settings: startActivity(new Intent(this, SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } @Override protected void onDestroy() { super.onDestroy(); mTl.removeOnTabSelectedListener(mTabListener); unregisterReceiver(mReceiver); LocalBroadcastManager.getInstance(this).unregisterReceiver(mLogoutReceiver); } private class PaperAdapter extends FragmentStatePagerAdapter { public PaperAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: if (mPapers[0] == null) { mPapers[0] = new RandomFragment(); } break; case 1: if (mPapers[1] == null) { mPapers[1] = new LatestFragment(); } break; case 2: if (mPapers[2] == null) { mPapers[2] = new PopularFragment(); } break; } return mPapers[position]; } @Override public Object instantiateItem(ViewGroup container, int position) { Object object = super.instantiateItem(container, position); if (object instanceof PaperFragment) { PaperFragment fragment = (PaperFragment)object; mPapers[position] = fragment; } return object; } @Override public CharSequence getPageTitle(int position) { return mPapers[position].getTitle(MainActivity.this); } @Override public int getCount() { return mPapers.length; } } }