/* * Copyright (c) 2015 [1076559197@qq.com | tchen0707@gmail.com] * * Licensed under the Apache License, Version 2.0 (the "License”); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.youku.player.plugin; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.CountDownTimer; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.baseproject.utils.UIUtils; import com.youku.player.base.GoplayException; import com.youku.player.base.YoukuBasePlayerActivity; import com.youku.player.goplay.AdvInfo; import com.youku.player.goplay.VideoAdvInfo; import com.youku.player.service.DisposableHttpTask; import com.youku.player.ui.R; import com.youku.player.ui.interf.IMediaPlayerDelegate; import com.youku.player.util.DetailMessage; import com.youku.player.util.DetailUtil; public class PluginInvestigate extends PluginOverlay implements DetailMessage { LayoutInflater mLayoutInflater; View containerView; YoukuBasePlayerActivity mActivity; IMediaPlayerDelegate mediaPlayerDelegate; LinearLayout mInvestigate; RelativeLayout mAnimator; LinearLayout mClose; TextView mText; LinearLayout mArrowRight; private AdvInfo mAdvInfo; private InvestCountDownTimer mTimer; private int mSavedCount = DEFAULT_DURATION; private String mName; private String mClickURL; private boolean isOpen = false; private boolean isHide = false; private static final int DEFAULT_DURATION = 120; // s private static final String DEFAULT_NAME = "参与调研"; private static final int MARGIN_BOTTOM_VERTICAL = 50; // DP private static final int MARGIN_BOTTOM_HORIZONTAL = 90; // DP private static final int MARGIN_BOTTOM_VERTICAL_PAD = 130; // DP private static final int MARGIN_BOTTOM_HORIZONTAL_PAD = 160; // DP public PluginInvestigate(YoukuBasePlayerActivity context, IMediaPlayerDelegate mediaPlayerDelegate) { super(context, mediaPlayerDelegate); this.mediaPlayerDelegate = mediaPlayerDelegate; mActivity = context; mLayoutInflater = LayoutInflater.from(context); init(context); } private void init(Context context) { containerView = mLayoutInflater.inflate( R.layout.yp_player_investigate_youku, null); addView(containerView); mAnimator = (RelativeLayout) containerView .findViewById(R.id.yp_investigate_holder); mInvestigate = (LinearLayout) containerView .findViewById(R.id.yp_investigate); mClose = (LinearLayout) containerView .findViewById(R.id.investigate_close); mClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { close(); } }); mText = (TextView) containerView.findViewById(R.id.yp_investigate_text); mText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { release(); try { Intent intent = new Intent("com.youku.player.api.AD_PROCESS"); intent.putExtra("url", mClickURL); mActivity.startActivity(intent); } catch (Exception e) { } } }); mArrowRight = (LinearLayout) containerView .findViewById(R.id.yp_investigate_arrowright); mArrowRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { release(); try { Intent intent = new Intent("com.youku.player.api.AD_PROCESS"); intent.putExtra("url", mClickURL); mActivity.startActivity(intent); } catch (Exception e) { } } }); containerView.setVisibility(View.GONE); } @Override public void onBufferingUpdateListener(int percent) { // TODO Auto-generated method stub } @Override public void onCompletionListener() { // release(); } @Override public boolean onErrorListener(int what, int extra) { // release(); return false; } @Override public void OnPreparedListener() { // TODO Auto-generated method stub } @Override public void OnSeekCompleteListener() { // TODO Auto-generated method stub } @Override public void OnVideoSizeChangedListener(int width, int height) { // TODO Auto-generated method stub } @Override public void OnTimeoutListener() { } @Override public void OnCurrentPositionChangeListener(int currentPosition) { // TODO Auto-generated method stub } @Override public void onLoadedListener() { // containerView.setVisibility(View.GONE); } @Override public void onLoadingListener() { // hide(); } @Override public void onNotifyChangeVideoQuality() { // TODO Auto-generated method stub } @Override public void onRealVideoStarted() { // containerView.setVisibility(View.VISIBLE); } @Override public void onUp() { // TODO Auto-generated method stub } @Override public void onDown() { // TODO Auto-generated method stub } @Override public void onClearUpDownFav() { // TODO Auto-generated method stub } @Override public void onFavor() { // TODO Auto-generated method stub } @Override public void onUnFavor() { // TODO Auto-generated method stub } @Override public void newVideo() { // TODO Auto-generated method stub } @Override public void onVolumnUp() { // TODO Auto-generated method stub } @Override public void onVolumnDown() { // TODO Auto-generated method stub } @Override public void onMute(boolean mute) { // TODO Auto-generated method stub } @Override public void onStart() { // TODO Auto-generated method stub } @Override public void onPause() { hide(); } @Override public void onVideoChange() { } @Override public void onVideoInfoGetting() { hide(); } @Override public void onVideoInfoGetted() { // TODO Auto-generated method stub } @Override public void onRealVideoStart() { } @Override public void onPlayNoRightVideo(GoplayException e) { // TODO Auto-generated method stub } @Override public void onPlayReleateNoRightVideo() { // TODO Auto-generated method stub } @Override public void onADplaying() { // TODO Auto-generated method stub } @Override public void onVideoInfoGetFail(boolean needRetry) { // TODO Auto-generated method stub } @Override public void setVisible(boolean visible) { /* * if (visible && !mediaPlayerDelegate.isPause && * !mediaPlayerDelegate.isComplete) { * //containerView.setVisibility(View.VISIBLE); } else { * containerView.setVisibility(View.GONE); } */ } @Override public void back() { // TODO Auto-generated method stub } public void updateLayout() { if (isOpen) { DisplayMetrics displayMetrics = new DisplayMetrics(); mActivity.getWindowManager().getDefaultDisplay() .getMetrics(displayMetrics); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mInvestigate .getLayoutParams(); if (!mMediaPlayerDelegate.isFullScreen) { if (!UIUtils.isTablet(mActivity)) { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_VERTICAL); } else { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_VERTICAL_PAD); } } else { if (!UIUtils.isTablet(mActivity)) { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_HORIZONTAL); } else { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_HORIZONTAL_PAD); } } params.rightMargin = 0; mInvestigate.setLayoutParams(params); mInvestigate.requestLayout(); } } public synchronized void updateLayoutWithVirtualKey(boolean isVirtualKeyDisplay) { if (isOpen) { DisplayMetrics displayMetrics = new DisplayMetrics(); mActivity.getWindowManager().getDefaultDisplay() .getMetrics(displayMetrics); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mInvestigate .getLayoutParams(); params.rightMargin = 0; if (!mMediaPlayerDelegate.isFullScreen) { if (!UIUtils.isTablet(mActivity)) { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_VERTICAL); } else { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_VERTICAL_PAD); } } else { if (!UIUtils.isTablet(mActivity)) { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_HORIZONTAL); if (isVirtualKeyDisplay) { params.rightMargin = DetailUtil .getFullScreentNavigationBarHeight(mActivity); } } else { params.bottomMargin = (int) (displayMetrics.density * MARGIN_BOTTOM_HORIZONTAL_PAD); } } mInvestigate.setLayoutParams(params); mInvestigate.requestLayout(); } } public int getNavigationBarHeight(Activity context) { Resources resources = context.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { return (resources.getDimensionPixelSize(resourceId)); } return 0; } public void show() { if (!isHide && isOpen) { if (mMediaPlayerDelegate != null && !mMediaPlayerDelegate.isAdvShowFinished()) { return; } if (mActivity!= null && mActivity.isImageADShowing) { return; } if (containerView.getVisibility() == View.VISIBLE) { return; } updateLayout(); mActivity.updatePlugin(PLUGIN_SHOW_INVESTIGATE); Animation inAnimation = AnimationUtils.loadAnimation(mActivity, R.anim.yp_slide_in_from_right); mAnimator.startAnimation(inAnimation); containerView.setVisibility(View.VISIBLE); startTimer(); disposeVC(); } } public void hide() { isHide = true; if (containerView.getVisibility() == View.VISIBLE) { containerView.setVisibility(View.GONE); pauseTimer(); } } public void unHide() { isHide = false; show(); } private void close() { Animation outAnimation = AnimationUtils.loadAnimation(mActivity, R.anim.yp_slide_out_to_right); mAnimator.startAnimation(outAnimation); if (mTimer != null) { mTimer.cancel(); mTimer = null; } containerView.setVisibility(View.GONE); mSavedCount = 0; mAdvInfo = null; isOpen = false; } public void release() { if (isOpen) { isOpen = false; if (containerView.getVisibility() == View.VISIBLE) { containerView.setVisibility(View.GONE); } mSavedCount = 0; if (mTimer != null) { mTimer.cancel(); mTimer = null; } mAdvInfo = null; } } public void start(VideoAdvInfo videoAdvInfo) { if (mMediaPlayerDelegate != null && videoAdvInfo != null) { int size = videoAdvInfo.VAL.size(); if (size == 0) { return; } for (int i = 0; i < size; i++) { if (videoAdvInfo.VAL.get(i).VSC != null && !videoAdvInfo.VAL.get(i).VSC.equalsIgnoreCase("")) { mAdvInfo = videoAdvInfo.VAL.get(i); mClickURL = mAdvInfo.VSC; int duration = mAdvInfo.VP; mSavedCount = duration > 0 ? duration : DEFAULT_DURATION; String name = mAdvInfo.VN; if (name != null && !name.equalsIgnoreCase("")) { mName = name; } else { mName = DEFAULT_NAME; } mText.setText(mName); isOpen = true; isHide = false; return; } } } /* * 测试使用 mName = DEFAULT_NAME; mText.setText(mName); mSavedCount = DEFAULT_DURATION; mClickURL = "http://www.baidu.com"; isOpen = true; */ } private void disposeVC() { if (mAdvInfo != null && mAdvInfo.VT != null && (mAdvInfo.VT.equalsIgnoreCase("1") || mAdvInfo.VT .equalsIgnoreCase("2")) && mAdvInfo.VC != null && !mAdvInfo.VC.equalsIgnoreCase("")) { new DisposableHttpTask("PlayFlow", mAdvInfo.VC, "VC").start(); mAdvInfo.VC = ""; } } private void pauseTimer() { if (mTimer != null) { mTimer.cancel(); mTimer = null; } } private void startTimer() { if (mSavedCount > 0 && isOpen) { mTimer = new InvestCountDownTimer(mSavedCount * 1000, 1000); mTimer.start(); } } private class InvestCountDownTimer extends CountDownTimer { public InvestCountDownTimer(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); mSavedCount = (int) millisInFuture / 1000; } @Override public void onFinish() { mActivity.runOnUiThread(new Runnable() { @Override public void run() { close(); } }); } @Override public void onTick(long millisUntilFinished) { float time = (float) millisUntilFinished / 1000; int count = Math.round(time); if (mSavedCount != count && count > 0) { mSavedCount = count; } } } @Override public boolean isShowing() { return containerView.getVisibility() == View.VISIBLE; } }