Многие операции при публикации видео, например, установка Websocket соединения, а затем собственно публикация, занимают определенное время. На это время, до перехода устройства в очередное стабильное состояние, желательно блокировать такие действия пользователя, как повторные нажатия на кнопки в приложении.
Для этого создайте в приложении методы muteButton для запрета нажатия на все используемые кнопки, например
private void muteButton() { mStartButton.setEnabled(false); mTestButton.setEnabled(false); mSwitchCameraButton.setEnabled(false); mSwitchFlashlightButton.setEnabled(false); mSwitchRendererButton.setEnabled(false); }
и unmuteButton, для разрешения нажатия на кнопки
private void unmuteButton() { mStartButton.setEnabled(true); mSwitchCameraButton.setEnabled(true); mSwitchRendererButton.setEnabled(true); if (mSendVideo.isChecked()) { mSwitchCameraButton.setEnabled(true); } if (Flashphoner.isFlashlightSupport()) { mSwitchFlashlightButton.setEnabled(true); } }
Затем эти методы следует вызывать:
- muteButton() - в начале операции
- umuteButton() - по окончании операции
Например, при переключении камеры muteButton должна быть вызвана после нажатия пользователем кнопки Switch Camera, а unmuteButton после того, как переключение камеры завершилось успехом или ошибкой
mSwitchCameraButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (publishStream != null) { turnOffFlashlight(); muteButton(); publishStream.switchCamera(new CameraSwitchHandler() { @Override public void onCameraSwitchDone(boolean var1) { runOnUiThread(new Runnable() { @Override public void run() { if (mStartButton.getTag() == null || Integer.valueOf(R.string.action_stop).equals(mStartButton.getTag())) { unmuteButton(); } } }); } @Override public void onCameraSwitchError(String var1) { runOnUiThread(new Runnable() { @Override public void run() { unmuteButton(); } }); } }); } } });