/* * Copyright (C) 2015 iChano incorporation's Open Source Project * * 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.zhongyun.viewer; import java.io.File; import java.util.ArrayList; import java.util.List; import com.ichano.rvs.viewer.ui.GLMediaView; import com.ichano.rvs.viewer.ui.GLMediaView.LinkCameraStatusListener; import com.ichano.rvs.viewer.ui.GLMediaView.SwitchFrontRearCameraResultCallback; import com.ichano.rvs.viewer.ui.GLMediaView.ToggleCameraFlashResultCallback; import com.umeng.analytics.MobclickAgent; import com.zhongyun.viewer.setting.BaseSettingFragment; import com.zhongyun.viewer.utils.Constants; import com.zhongyun.viewer.utils.ZYDateUtils; import com.zhongyun.viewer.utils.FileUtils; import com.zhongyun.viewer.video.RecordingVideoTypeList; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.DialogInterface.OnKeyListener; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.view.Window; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import android.view.View; public class WatchActivity extends BaseActivity implements View.OnClickListener,OnPageChangeListener{ private static final String TIME_UP_ERROR = "TIME_UP"; private static final int DEFAULT_CAMERA_INDEX = 0; // private Toolbar mToolbar; private GLMediaView mGLMediaView; private long mCid; private Handler mHandler = new Handler(); private Dialog mLinkFailDlg; private Dialog mExitDialog; private ProgressDialog mWaitingDialog; private LinearLayout mSoundSwitcherView; private ImageView mSoundSwitcherIconView; private TextView mSoundSwitcherNameView; private LinearLayout mRecordVideoView; private ImageView mRecordVideoIconView; private TextView mRecordVideoNameView; private String mRecordVideoPath,mCaptureImgPath; private LinearLayout mHoldTalkView; private ImageView mHoldTalkIconView; ViewPager viewPager; View view1, view2,view3; ArrayList<View> mViews; private int currentIndex; private ImageView mCaptureImgIconView; private ImageView mSwitchCamareIconView; private ImageView mFlashIconView; RelativeLayout bottom_arrow_left_layout, bottom_arrow_right_layout; ImageView titlebar_opt_image,titlebar_back_image; TextView opt,titlebar_back_text; private String command = "{\"msgname\":\"upgradeReq\",\"requestid\":\"\",\"param\":{\"startUpgrade\":\"yes\"}}"; private FrameLayout ContainView; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_watch); initOperateView(); initViewPager(); // mToolbar = (Toolbar) findViewById(R.id.toolbar); // mGLMediaView = (GLMediaView) findViewById(R.id.media_view); mCid = getIntent().getLongExtra(Constants.INTENT_CID, 0); // String title = getIntent().getStringExtra(Constants.INTENT_CAMERA_NAME); // mToolbar.setTitle(title); //// setSupportActionBar(mToolbar); // mToolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() { // // @Override // public boolean onMenuItemClick(MenuItem arg0) { // int id = arg0.getItemId(); // // if (id == R.id.video) { // startActivity(new Intent(WatchActivity.this, RecordingVideoTypeList.class).putExtra(Constants.INTENT_CID, String.valueOf(mCid))); // return true; // } // return false; // } // }); // mGLMediaView.bindCid(mCid, DEFAULT_CAMERA_INDEX); // mGLMediaView.openAudio(true); // open audio capture device銆� // mGLMediaView.setOnLinkCameraStatusListener(new LinkCameraStatusListener() { // // @Override // public void startToLink() { // mWaitingDialog.show(); // } // // @Override // public void linkSucces() { // mWaitingDialog.dismiss(); // } // // @Override // public void linkFailed(String msg) { // if(TIME_UP_ERROR.equals(msg)){ // mHandler.post(new Runnable() { // // @Override // public void run() { // Toast.makeText(WatchActivity.this, R.string.time_up_error, Toast.LENGTH_LONG).show(); // } // }); // }else{ // mHandler.post(new Runnable() { // // @Override // public void run() { // mWaitingDialog.dismiss(); // showLinkFailDlg(); // } // }); // } // } // }); mWaitingDialog = new ProgressDialog(this); mWaitingDialog.setMessage(getString(R.string.waiting)); mWaitingDialog.setIndeterminate(true); mWaitingDialog.setCancelable(true); } private void initOperateView(){ mRecordVideoPath = FileUtils.mkdirsOnSDCard(Constants.RECORD_VIDEO_PATH).getAbsolutePath(); mCaptureImgPath = FileUtils.mkdirsOnSDCard(Constants.CAPTURE_IAMGE_PATH).getAbsolutePath(); bottom_arrow_left_layout = (RelativeLayout) findViewById(R.id.bottom_arrow_left_layout); bottom_arrow_left_layout.setOnClickListener(this); bottom_arrow_right_layout = (RelativeLayout) findViewById(R.id.bottom_arrow_right_layout); bottom_arrow_right_layout.setOnClickListener(this); findViewById(R.id.opt_linlayout).setOnClickListener(this); findViewById(R.id.titlebar_opt_image).setBackgroundResource(R.drawable.video_img); findViewById(R.id.back_linlayout).setClickable(false); titlebar_back_text = (TextView) findViewById(R.id.titlebar_back_text); String title = getIntent().getStringExtra(Constants.INTENT_CAMERA_NAME); titlebar_back_text.setText(title); } private void initViewPager() { viewPager = (ViewPager) findViewById(R.id.setPager); LayoutInflater lf = getLayoutInflater().from(this); view1 = lf.inflate(R.layout.setcamerapager1, null); mSoundSwitcherIconView = (ImageView) view1 .findViewById(R.id.sound_switcher_icon); mSoundSwitcherNameView = (TextView) view1 .findViewById(R.id.sound_switcher_name); mRecordVideoIconView = (ImageView) view1 .findViewById(R.id.record_video_icon); mRecordVideoNameView = (TextView) view1 .findViewById(R.id.record_video_name); mHoldTalkIconView = (ImageView) view1.findViewById(R.id.hold_talk); mSoundSwitcherIconView.setOnClickListener(this); mRecordVideoIconView.setOnClickListener(this); mHoldTalkIconView.setOnClickListener(this); view2 = lf.inflate(R.layout.setcamerapager3, null); mCaptureImgIconView = (ImageView) view2.findViewById(R.id.capture_img); mCaptureImgIconView.setOnClickListener(this); mSwitchCamareIconView = (ImageView) view2.findViewById(R.id.switch_img); mSwitchCamareIconView.setOnClickListener(this); mFlashIconView = (ImageView) view2.findViewById(R.id.flash_img); mFlashIconView.setOnClickListener(this); mViews = new ArrayList<View>(); mViews.add(view1); mViews.add(view2); viewPager.setAdapter(new MyPagerAdapter(mViews)); viewPager.setOnPageChangeListener(this); viewPager.setCurrentItem(0); ContainView = (FrameLayout)findViewById(R.id.surface_contain); } private void showLinkFailDlg(){ if(null != mLinkFailDlg){ mLinkFailDlg.show(); }else{ mLinkFailDlg = new AlertDialog.Builder(WatchActivity.this) .setTitle(R.string.camera_link_fail) .setPositiveButton(R.string.exit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { WatchActivity.this.finish(); } }) .setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if(KeyEvent.KEYCODE_BACK == keyCode){ return true; } return false; } }) .create(); mLinkFailDlg.show(); } } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); mHandler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub if(ContainView.getChildCount()==0&&mGLMediaView==null){ Log.i("MartinSurface","onStart add"); mGLMediaView = new GLMediaView(WatchActivity.this); ContainView.addView(mGLMediaView); mGLMediaView.bindCid(mCid, DEFAULT_CAMERA_INDEX); mGLMediaView.openAudio(true); // open audio capture device銆� mGLMediaView.setOnLinkCameraStatusListener(new LinkCameraStatusListener() { @Override public void startToLink() { mWaitingDialog.show(); } @Override public void linkSucces() { mWaitingDialog.dismiss(); } @Override public void linkFailed(String msg) { Log.i("MartinSurface","failed:"+msg); if(TIME_UP_ERROR.equals(msg)){ mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(WatchActivity.this, R.string.time_up_error, Toast.LENGTH_LONG).show(); } }); }else{ mHandler.post(new Runnable() { @Override public void run() { mWaitingDialog.dismiss(); showLinkFailDlg(); } }); } } }); } } },300); } @Override protected void onStop() { super.onStop(); if(ContainView.getChildCount()>0){ ContainView.removeView(mGLMediaView); mGLMediaView = null; } } private void showExitDlg(){ if(null != mExitDialog){ mExitDialog.show(); }else{ mExitDialog = new AlertDialog.Builder(WatchActivity.this) .setTitle(R.string.exit_camera) .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { WatchActivity.this.finish(); } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .create(); mExitDialog.show(); } } public void onResume() { super.onResume(); MobclickAgent.onResume(this); } public void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override public void onBackPressed() { // super.onBackPressed(); showExitDlg(); } @Override public void onClick(View v) { int id = v.getId(); switch(id){ case R.id.sound_switcher_icon: if(mGLMediaView.isSoundOn()){ mGLMediaView.soundOff(); mSoundSwitcherIconView.setImageResource(R.drawable.sound_on); mSoundSwitcherNameView.setText(R.string.sound_on); }else{ mGLMediaView.soundOn(); mSoundSwitcherIconView.setImageResource(R.drawable.sound_off); mSoundSwitcherNameView.setText(R.string.sound_off); } break; case R.id.record_video_icon: if(mGLMediaView.isRecordingVideo()){ boolean ret = mGLMediaView.stopRecordVideo(); mRecordVideoIconView.setImageResource(R.drawable.record_off); mRecordVideoNameView.setText(R.string.record); if(ret){ String toastStr = getResources().getString(R.string.recording_saved, mRecordVideoPath); Toast.makeText(this, toastStr, Toast.LENGTH_LONG).show(); }else{ Toast.makeText(this, R.string.record_failed, Toast.LENGTH_LONG).show(); } }else{ if(FileUtils.hasSDCard()){ String path = mRecordVideoPath + "/" + ZYDateUtils.getTime() + Constants.VIDEO_MP4; mGLMediaView.startRecordVideo(path); mRecordVideoIconView.setImageResource(R.drawable.record_on); mRecordVideoNameView.setText(R.string.recording); } } break; case R.id.hold_talk: if(mGLMediaView.isSendRevAudio()){ mGLMediaView.stopSendRevAudio(); mHoldTalkIconView.setImageResource(R.drawable.hold_talk); }else{ mGLMediaView.startSendRevAudio(); mHoldTalkIconView.setImageResource(R.drawable.hold_talk_pressed); } break; case R.id.capture_img: if(FileUtils.hasSDCard()){ String path = mCaptureImgPath + "/" + ZYDateUtils.getTime() + Constants.IMG_JPG; if(mGLMediaView.takeCapture(path)){ showToast(R.string.savepic_succ); }else{ showToast(R.string.warnning_save_photo_failed); } } break; case R.id.switch_img: mSwitchCamareIconView.setImageResource(R.drawable.switch_camera_pressed); mSwitchCamareIconView.setClickable(false); mGLMediaView.switchFrontRearCamera(new SwitchFrontRearCameraResultCallback() { @Override public void onResult(int arg0) { if(arg0==0){//success mSwitchCamareIconView.setImageResource(R.drawable.switch_camera); }else{ } mSwitchCamareIconView.setClickable(true); } }); break; case R.id.flash_img: mFlashIconView.setImageResource(R.drawable.flash_pressed); mFlashIconView.setClickable(false); mGLMediaView.toggleCameraFlash(new ToggleCameraFlashResultCallback() { @Override public void onResult(int arg0) { mFlashIconView.setImageResource(R.drawable.flash_image); mFlashIconView.setClickable(true); } }); break; case R.id.bottom_arrow_left_layout: viewPager.setCurrentItem(currentIndex - 1); break; case R.id.bottom_arrow_right_layout: viewPager.setCurrentItem(currentIndex + 1); break; case R.id.opt_linlayout: startActivity(new Intent(WatchActivity.this, RecordingVideoTypeList.class).putExtra(Constants.INTENT_CID, String.valueOf(mCid))); default: break; } } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int arg0) { currentIndex = arg0; if (arg0 == 0) { bottom_arrow_left_layout.setVisibility(View.GONE); bottom_arrow_right_layout.setVisibility(View.VISIBLE); } else if (arg0 == mViews.size() - 1) { bottom_arrow_left_layout.setVisibility(View.VISIBLE); bottom_arrow_right_layout.setVisibility(View.GONE); } else { bottom_arrow_left_layout.setVisibility(View.VISIBLE); bottom_arrow_right_layout.setVisibility(View.VISIBLE); } } public void showToast(int messageId) { Toast.makeText(this, messageId, Toast.LENGTH_SHORT).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_video, menu); return super.onCreateOptionsMenu(menu); } public class MyPagerAdapter extends PagerAdapter{ public List<View> mListViews; public MyPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(mListViews.get(arg1), 0); return mListViews.get(arg1); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mListViews.get(position)); } } }