package net.qiujuer.tips.view.activity; import android.annotation.SuppressLint; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.StringRes; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import net.qiujuer.genius.ui.widget.ImageView; import net.qiujuer.genius.ui.widget.Loading; import net.qiujuer.tips.R; import net.qiujuer.tips.factory.model.Model; import net.qiujuer.tips.factory.model.api.ProductVersionModel; import net.qiujuer.tips.factory.presenter.ProductPresenter; import net.qiujuer.tips.factory.presenter.SyncPresenter; import net.qiujuer.tips.factory.view.ProductView; import net.qiujuer.tips.factory.view.SyncView; import net.qiujuer.tips.view.fragment.ContactsFragment; import net.qiujuer.tips.view.fragment.QuickFragment; import net.qiujuer.tips.view.fragment.RecordsFragment; import net.qiujuer.tips.view.fragment.ZoomOutPageTransformer; import java.text.SimpleDateFormat; import uk.co.chrisjenx.calligraphy.CalligraphyTypefaceSpan; import uk.co.chrisjenx.calligraphy.TypefaceUtils; public class MainActivity extends BaseActivity implements ProductView, Toolbar.OnMenuItemClickListener, SyncView, View.OnClickListener { private Loading mLoading; private ViewPager mPager; private Toolbar mToolbar; private SyncPresenter mPresenter; private SectionsPagerAdapter mAdapter; private View mCreate; private int mCreateTranslationY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mToolbar = (Toolbar) findViewById(R.id.toolbar); mToolbar.setNavigationIcon(R.mipmap.ic_nav_main); mToolbar.setOnMenuItemClickListener(this); mToolbar.inflateMenu(R.menu.menu_main); initSyncItem(); initTitle(); mCreate = findViewById(R.id.main_img_create); mCreate.setVisibility(View.VISIBLE); mCreate.setOnClickListener(this); mAdapter = new SectionsPagerAdapter(getFragmentManager()); mPager = (ViewPager) findViewById(R.id.container); mPager.setAdapter(mAdapter); mPager.setOnPageChangeListener(mAdapter); mPager.setPageTransformer(true, new ZoomOutPageTransformer()); mPresenter = new SyncPresenter(this); // Get the Create button Translation 56+16 dp mCreateTranslationY = (int) (getResources().getDisplayMetrics().density * 72); } @Override protected void onResume() { super.onResume(); } private void initSyncItem() { MenuItem sync = mToolbar.getMenu().findItem(R.id.action_sync); View view = sync.getActionView(); if (view != null) { ImageView shareImage = (ImageView) view.findViewById(R.id.iv_action_share); Loading loading = (Loading) view.findViewById(R.id.loading_action_share); if (shareImage != null && loading != null) { mLoading = loading; view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPresenter.sync(); } }); } } } private void initTitle() { SpannableStringBuilder sBuilder = new SpannableStringBuilder(); sBuilder.append(getTitle()); // Bold this // Create the Typeface you want to apply to certain text try { CalligraphyTypefaceSpan typefaceSpan = new CalligraphyTypefaceSpan(TypefaceUtils.load(getAssets(), "fonts/Lobster.otf")); // Apply typeface to the Spannable 0 - 6 "Hello!" This can of course by dynamic. sBuilder.setSpan(typefaceSpan, 0, sBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mToolbar.setTitle(sBuilder); } catch (IllegalArgumentException e) { e.printStackTrace(); } } @Override public boolean onMenuItemClick(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_sync) { return true; } else if (id == R.id.action_search) { SearchKitActivity.show(this); return true; } else if (id == R.id.action_update) { Toast.makeText(this, R.string.toast_check_updating, Toast.LENGTH_SHORT).show(); new ProductPresenter().update(this); return true; } else if (id == R.id.action_help) { HelpActivity.show(this); return true; } else if (id == R.id.action_about) { AboutActivity.show(this); return true; } return super.onOptionsItemSelected(item); } @Override public void syncStart() { mLoading.start(); } @Override public void syncStop(@StringRes int statusRes) { mLoading.stop(); Toast.makeText(this, statusRes, Toast.LENGTH_SHORT).show(); switch (statusRes) { case R.string.status_account_login_need: case R.string.status_account_login_expire: case R.string.status_account_phone_unbind: AccountActivity.actionStart(this); break; } } @Override public Context getContext() { return this; } @Override protected void onDestroy() { super.onDestroy(); mPresenter.destroy(); } @Override public void onClick(View v) { if (mPager.getCurrentItem() == 2) ContactAddActivity.actionStart(MainActivity.this); else RecordAddActivity.actionStart(MainActivity.this); } @Override public void showIsNew() { Toast.makeText(MainActivity.this, R.string.toast_check_update_new, Toast.LENGTH_LONG).show(); } @SuppressLint("SimpleDateFormat") @Override public void showNewProduct(final ProductVersionModel model) { // 视图绑定 LayoutInflater layoutInflater = LayoutInflater.from(this); @SuppressLint("InflateParams") View viewAddEmployee = layoutInflater.inflate( R.layout.item_alert_update, null); // 控件定义绑定 final TextView update_time = (TextView) viewAddEmployee .findViewById(R.id.update_time); final TextView update_info = (TextView) viewAddEmployee .findViewById(R.id.update_info); // 控件数据初始化 String text_reported = this.getResources().getString(R.string.txt_update_title); update_time.setText(String.format(text_reported, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(model.getPublished()))); // Html update_info.setMovementMethod(LinkMovementMethod.getInstance()); update_info.setText(Html.fromHtml(model.getContent())); showDialog(this, model.getVerName(), viewAddEmployee, "暂不更新", "立刻更新", null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Uri appUri = Uri.parse(model.getAddress()); Intent intent = new Intent(Intent.ACTION_VIEW, appUri); startActivity(intent); dialog.dismiss(); } }).show(); } class SectionsPagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener { private RecordsFragment recordsFragment; private QuickFragment quickFragment; private ContactsFragment contactsFragment; public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { if (position == 1) return recordsFragment == null ? recordsFragment = new RecordsFragment() : recordsFragment; else if (position == 0) return quickFragment == null ? quickFragment = new QuickFragment() : quickFragment; else if (position == 2) return contactsFragment == null ? contactsFragment = new ContactsFragment() : contactsFragment; return null; } @Override public void destroyItem(ViewGroup container, int position, Object object) { if (position == 1) recordsFragment = null; else if (position == 0) quickFragment = null; else if (position == 2) contactsFragment = null; super.destroyItem(container, position, object); } @Override public int getCount() { return 3; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int tY = 0; if (position == 0) { tY = (int) (mCreateTranslationY - mCreateTranslationY * positionOffset); } mCreate.setTranslationY(tY); } @Override public void onPageSelected(int position) { /* if (position == 0) { mCreate.animate() .translationYBy(mCreate.getTranslationY()) .translationY(mCreateTranslationY) .setDuration(320) .start(); } else { mCreate.animate() .translationYBy(mCreate.getTranslationY()) .translationY(0) .setDuration(320) .start(); } */ } @Override public void onPageScrollStateChanged(int state) { Model.log("MAIN", "onPageScrollStateChanged: " + state); } } }