package com.lws.allenglish.controller.activities; import android.content.Intent; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; import com.lws.allenglish.Constants; import com.lws.allenglish.R; import com.lws.allenglish.adapter.WordDetailsAdapter; import com.lws.allenglish.base.BaseActivity; import com.lws.allenglish.base.BaseApplication; import com.lws.allenglish.bean.BaseWord; import com.lws.allenglish.bean.DetailedWord; import com.lws.allenglish.model.DetailedWordModel; import com.lws.allenglish.model.OnDetailedWordListener; import com.lws.allenglish.model.impl.DetailedWordModelImpl; import com.lws.allenglish.util.PlayAudio; import com.lws.allenglish.util.StringUtils; import com.lws.allenglish.util.common.NetWorkUtils; import com.lws.allenglish.util.common.ToastUtils; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class WordDetailsActivity extends BaseActivity { @BindView(R.id.back) ImageView mBack; @BindView(R.id.search) ImageView mSearch; @BindView(R.id.voa_english) TextView mWord; @BindView(R.id.collection) ImageView mCollection; @BindView(R.id.ph_en) TextView mPhen; @BindView(R.id.ph_am) TextView mPham; @BindView(R.id.phen_horn) ImageView mPhenHorn; @BindView(R.id.pham_horn) ImageView mPhamHorn; @BindView(R.id.word_details) RecyclerView mRecyclerView; private AnimationDrawable mPhenHornAnimation; private AnimationDrawable mPhamHornAnimation; private PlayAudio mPlayAudio; private WordDetailsAdapter mAdapter; private BaseWord mBaseWord; private DetailedWord mDetailedWord = new DetailedWord(); private DetailedWordModel detailedWordModel; private List<AnimationDrawable> mSentenceHornAnimations = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_word_details); ButterKnife.bind(this); mPlayAudio = new PlayAudio(); mBaseWord = (BaseWord) getIntent().getSerializableExtra(Constants.BASE_INFO); mDetailedWord.baseWord = mBaseWord; detailedWordModel = new DetailedWordModelImpl(new CustomOnDetailedWordListener(), mContext); detailedWordModel.setCollectedWord(mBaseWord.word); init(); if (!NetWorkUtils.getNetworkTypeName(BaseApplication.getInstance()).equals(NetWorkUtils.NETWORK_TYPE_DISCONNECT)) { detailedWordModel.getDetailedWord(0, mBaseWord.word); } } private void init() { initView(); initRecyclerView(); } private void initRecyclerView() { mRecyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); mRecyclerView.setLayoutManager(linearLayoutManager); mAdapter = new WordDetailsAdapter(mDetailedWord, mContext, mPlayAudio, mSentenceHornAnimations); mRecyclerView.setAdapter(mAdapter); // TODO: 还有嵌套recyclerview卡顿的问题待解决 mRecyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if (mDetailedWord.nativeADDataRef != null){ mAdapter.exposureAd(mDetailedWord.nativeADDataRef); } } }); } private void initView() { mWord.setText(mBaseWord.word); mPhen.setText(new StringBuilder().append("英 ").append(mBaseWord.ph_en)); mPham.setText(new StringBuilder().append("美 ").append(mBaseWord.ph_am)); mWord.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showFilterPopup(v); } }); mCollection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mCollection.isSelected()) { mCollection.setSelected(true); detailedWordModel.saveCollectedWord(mBaseWord); } else { mCollection.setSelected(false); detailedWordModel.cancelCollectedWord(mBaseWord.word); } } }); mPhenHorn.setBackgroundResource(R.drawable.animation_horn); mPhenHornAnimation = (AnimationDrawable) mPhenHorn.getBackground(); mSentenceHornAnimations.add(mPhenHornAnimation); mPhenHorn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mAdapter.stopAnimation(); mPhenHornAnimation.start(); mPlayAudio.play(BaseApplication.getInstance(), mWord.getText().toString(), 1); } }); mPhamHorn.setBackgroundResource(R.drawable.animation_horn); mPhamHornAnimation = (AnimationDrawable) mPhamHorn.getBackground(); mSentenceHornAnimations.add(mPhamHornAnimation); mPhamHorn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mAdapter.stopAnimation(); mPhamHornAnimation.start(); mPlayAudio.play(BaseApplication.getInstance(), mWord.getText().toString(), 2); } }); mBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); mSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, SearchWordActivity.class); startActivity(intent); } }); } private void showFilterPopup(View v) { PopupMenu popup = new PopupMenu(this, v); // Inflate the menu from xml popup.getMenuInflater().inflate(R.menu.popup_filter, popup.getMenu()); // Setup menu item selection popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.copy: StringUtils.copyToClipboard(mContext, mWord.getText().toString()); return true; // case R.id.open_bookmark: // Intent intent = new Intent(mContext, BookmarkActivity.class); // startActivity(intent); // return true; default: return false; } } }); // Handle dismissal with: popup.setOnDismissListener(...); // Show the menu popup.show(); } @Override protected void onStop() { super.onStop(); mAdapter.stopAnimation(); } @Override protected void onDestroy() { super.onDestroy(); mPlayAudio.killMediaPlayer(); mAdapter.stopAnimation(); } private class CustomOnDetailedWordListener implements OnDetailedWordListener { @Override public void onSuccess(DetailedWord detailedWord) { mDetailedWord.baesInfo = detailedWord.baesInfo; mDetailedWord.sentence = detailedWord.sentence; mDetailedWord.phrase = detailedWord.phrase; mDetailedWord.ee_mean = detailedWord.ee_mean; mDetailedWord.iflyNativeAd = detailedWord.iflyNativeAd; mDetailedWord.nativeADDataRef = detailedWord.nativeADDataRef; mAdapter.notifyDataSetChanged(); } @Override public void onError() { ToastUtils.show(mContext, R.string.bad_internet); } @Override public void onIsCollectedWord(boolean isCollected) { if (isCollected) { mCollection.setSelected(true); } } } }