/* * Copyright 2015 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ package org.appspot.apprtc; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import org.webrtc.RendererCommon.ScalingType; /** * Fragment for call control. */ public class CallFragment extends Fragment { private TextView contactView; private ImageButton cameraSwitchButton; private ImageButton videoScalingButton; private ImageButton toggleMuteButton; private TextView captureFormatText; private SeekBar captureFormatSlider; private OnCallEvents callEvents; private ScalingType scalingType; private boolean videoCallEnabled = true; /** * Call control interface for container activity. */ public interface OnCallEvents { void onCallHangUp(); void onCameraSwitch(); void onVideoScalingSwitch(ScalingType scalingType); void onCaptureFormatChange(int width, int height, int framerate); boolean onToggleMic(); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View controlView = inflater.inflate(R.layout.fragment_call, container, false); // Create UI controls. contactView = controlView.findViewById(R.id.contact_name_call); ImageButton disconnectButton = controlView.findViewById(R.id.button_call_disconnect); cameraSwitchButton = controlView.findViewById(R.id.button_call_switch_camera); videoScalingButton = controlView.findViewById(R.id.button_call_scaling_mode); toggleMuteButton = controlView.findViewById(R.id.button_call_toggle_mic); captureFormatText = controlView.findViewById(R.id.capture_format_text_call); captureFormatSlider = controlView.findViewById(R.id.capture_format_slider_call); // Add buttons click events. disconnectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callEvents.onCallHangUp(); } }); cameraSwitchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { callEvents.onCameraSwitch(); } }); videoScalingButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (scalingType == ScalingType.SCALE_ASPECT_FILL) { videoScalingButton.setBackgroundResource(R.drawable.ic_action_full_screen); scalingType = ScalingType.SCALE_ASPECT_FIT; } else { videoScalingButton.setBackgroundResource(R.drawable.ic_action_return_from_full_screen); scalingType = ScalingType.SCALE_ASPECT_FILL; } callEvents.onVideoScalingSwitch(scalingType); } }); scalingType = ScalingType.SCALE_ASPECT_FILL; toggleMuteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean enabled = callEvents.onToggleMic(); toggleMuteButton.setAlpha(enabled ? 1.0f : 0.3f); } }); return controlView; } @Override public void onStart() { super.onStart(); boolean captureSliderEnabled = false; Bundle args = getArguments(); if (args != null) { String contactName = args.getString(CallActivity.EXTRA_ROOMID); contactView.setText(contactName); videoCallEnabled = args.getBoolean(CallActivity.EXTRA_VIDEO_CALL, true); captureSliderEnabled = videoCallEnabled && args.getBoolean(CallActivity.EXTRA_VIDEO_CAPTUREQUALITYSLIDER_ENABLED, false); } if (!videoCallEnabled) { cameraSwitchButton.setVisibility(View.INVISIBLE); } if (captureSliderEnabled) { captureFormatSlider.setOnSeekBarChangeListener( new CaptureQualityController(captureFormatText, callEvents)); } else { captureFormatText.setVisibility(View.GONE); captureFormatSlider.setVisibility(View.GONE); } } // TODO(sakal): Replace with onAttach(Context) once we only support API level 23+. @SuppressWarnings("deprecation") @Override public void onAttach(Activity activity) { super.onAttach(activity); callEvents = (OnCallEvents) activity; } }