1 /*
2  *  Copyright 2015 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.appspot.apprtc;
12 
13 import android.app.Activity;
14 import android.app.Fragment;
15 import android.os.Bundle;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.widget.ImageButton;
20 import android.widget.SeekBar;
21 import android.widget.TextView;
22 
23 import org.webrtc.RendererCommon.ScalingType;
24 
25 /**
26  * Fragment for call control.
27  */
28 public class CallFragment extends Fragment {
29   private View controlView;
30   private TextView contactView;
31   private ImageButton disconnectButton;
32   private ImageButton cameraSwitchButton;
33   private ImageButton videoScalingButton;
34   private TextView captureFormatText;
35   private SeekBar captureFormatSlider;
36   private OnCallEvents callEvents;
37   private ScalingType scalingType;
38   private boolean videoCallEnabled = true;
39 
40   /**
41    * Call control interface for container activity.
42    */
43   public interface OnCallEvents {
onCallHangUp()44     public void onCallHangUp();
onCameraSwitch()45     public void onCameraSwitch();
onVideoScalingSwitch(ScalingType scalingType)46     public void onVideoScalingSwitch(ScalingType scalingType);
onCaptureFormatChange(int width, int height, int framerate)47     public void onCaptureFormatChange(int width, int height, int framerate);
48   }
49 
50   @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)51   public View onCreateView(LayoutInflater inflater, ViewGroup container,
52       Bundle savedInstanceState) {
53     controlView =
54         inflater.inflate(R.layout.fragment_call, container, false);
55 
56     // Create UI controls.
57     contactView =
58         (TextView) controlView.findViewById(R.id.contact_name_call);
59     disconnectButton =
60         (ImageButton) controlView.findViewById(R.id.button_call_disconnect);
61     cameraSwitchButton =
62         (ImageButton) controlView.findViewById(R.id.button_call_switch_camera);
63     videoScalingButton =
64         (ImageButton) controlView.findViewById(R.id.button_call_scaling_mode);
65     captureFormatText =
66         (TextView) controlView.findViewById(R.id.capture_format_text_call);
67     captureFormatSlider =
68         (SeekBar) controlView.findViewById(R.id.capture_format_slider_call);
69 
70     // Add buttons click events.
71     disconnectButton.setOnClickListener(new View.OnClickListener() {
72       @Override
73       public void onClick(View view) {
74         callEvents.onCallHangUp();
75       }
76     });
77 
78     cameraSwitchButton.setOnClickListener(new View.OnClickListener() {
79       @Override
80       public void onClick(View view) {
81         callEvents.onCameraSwitch();
82       }
83     });
84 
85     videoScalingButton.setOnClickListener(new View.OnClickListener() {
86       @Override
87       public void onClick(View view) {
88         if (scalingType == ScalingType.SCALE_ASPECT_FILL) {
89           videoScalingButton.setBackgroundResource(
90               R.drawable.ic_action_full_screen);
91           scalingType = ScalingType.SCALE_ASPECT_FIT;
92         } else {
93           videoScalingButton.setBackgroundResource(
94               R.drawable.ic_action_return_from_full_screen);
95           scalingType = ScalingType.SCALE_ASPECT_FILL;
96         }
97         callEvents.onVideoScalingSwitch(scalingType);
98       }
99     });
100     scalingType = ScalingType.SCALE_ASPECT_FILL;
101 
102     return controlView;
103   }
104 
105   @Override
onStart()106   public void onStart() {
107     super.onStart();
108 
109     boolean captureSliderEnabled = false;
110     Bundle args = getArguments();
111     if (args != null) {
112       String contactName = args.getString(CallActivity.EXTRA_ROOMID);
113       contactView.setText(contactName);
114       videoCallEnabled = args.getBoolean(CallActivity.EXTRA_VIDEO_CALL, true);
115       captureSliderEnabled = videoCallEnabled
116           && args.getBoolean(CallActivity.EXTRA_VIDEO_CAPTUREQUALITYSLIDER_ENABLED, false);
117     }
118     if (!videoCallEnabled) {
119       cameraSwitchButton.setVisibility(View.INVISIBLE);
120     }
121     if (captureSliderEnabled) {
122       captureFormatSlider.setOnSeekBarChangeListener(
123           new CaptureQualityController(captureFormatText, callEvents));
124     } else {
125       captureFormatText.setVisibility(View.GONE);
126       captureFormatSlider.setVisibility(View.GONE);
127     }
128   }
129 
130   @Override
onAttach(Activity activity)131   public void onAttach(Activity activity) {
132     super.onAttach(activity);
133     callEvents = (OnCallEvents) activity;
134   }
135 
136 }
137