Source code
Revision control
Copy as Markdown
Other Tools
/*
* 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;
}
}