tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

CallFragment.java (4717B)


      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 TextView contactView;
     30  private ImageButton cameraSwitchButton;
     31  private ImageButton videoScalingButton;
     32  private ImageButton toggleMuteButton;
     33  private TextView captureFormatText;
     34  private SeekBar captureFormatSlider;
     35  private OnCallEvents callEvents;
     36  private ScalingType scalingType;
     37  private boolean videoCallEnabled = true;
     38 
     39  /**
     40   * Call control interface for container activity.
     41   */
     42  public interface OnCallEvents {
     43    void onCallHangUp();
     44    void onCameraSwitch();
     45    void onVideoScalingSwitch(ScalingType scalingType);
     46    void onCaptureFormatChange(int width, int height, int framerate);
     47    boolean onToggleMic();
     48  }
     49 
     50  @Override
     51  public View onCreateView(
     52      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     53    View controlView = inflater.inflate(R.layout.fragment_call, container, false);
     54 
     55    // Create UI controls.
     56    contactView = controlView.findViewById(R.id.contact_name_call);
     57    ImageButton disconnectButton = controlView.findViewById(R.id.button_call_disconnect);
     58    cameraSwitchButton = controlView.findViewById(R.id.button_call_switch_camera);
     59    videoScalingButton = controlView.findViewById(R.id.button_call_scaling_mode);
     60    toggleMuteButton = controlView.findViewById(R.id.button_call_toggle_mic);
     61    captureFormatText = controlView.findViewById(R.id.capture_format_text_call);
     62    captureFormatSlider = controlView.findViewById(R.id.capture_format_slider_call);
     63 
     64    // Add buttons click events.
     65    disconnectButton.setOnClickListener(new View.OnClickListener() {
     66      @Override
     67      public void onClick(View view) {
     68        callEvents.onCallHangUp();
     69      }
     70    });
     71 
     72    cameraSwitchButton.setOnClickListener(new View.OnClickListener() {
     73      @Override
     74      public void onClick(View view) {
     75        callEvents.onCameraSwitch();
     76      }
     77    });
     78 
     79    videoScalingButton.setOnClickListener(new View.OnClickListener() {
     80      @Override
     81      public void onClick(View view) {
     82        if (scalingType == ScalingType.SCALE_ASPECT_FILL) {
     83          videoScalingButton.setBackgroundResource(R.drawable.ic_action_full_screen);
     84          scalingType = ScalingType.SCALE_ASPECT_FIT;
     85        } else {
     86          videoScalingButton.setBackgroundResource(R.drawable.ic_action_return_from_full_screen);
     87          scalingType = ScalingType.SCALE_ASPECT_FILL;
     88        }
     89        callEvents.onVideoScalingSwitch(scalingType);
     90      }
     91    });
     92    scalingType = ScalingType.SCALE_ASPECT_FILL;
     93 
     94    toggleMuteButton.setOnClickListener(new View.OnClickListener() {
     95      @Override
     96      public void onClick(View view) {
     97        boolean enabled = callEvents.onToggleMic();
     98        toggleMuteButton.setAlpha(enabled ? 1.0f : 0.3f);
     99      }
    100    });
    101 
    102    return controlView;
    103  }
    104 
    105  @Override
    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  // TODO(sakal): Replace with onAttach(Context) once we only support API level 23+.
    131  @SuppressWarnings("deprecation")
    132  @Override
    133  public void onAttach(Activity activity) {
    134    super.onAttach(activity);
    135    callEvents = (OnCallEvents) activity;
    136  }
    137 }