@Override public void onUserLeaveHint() { super.onUserLeaveHint(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (prefConfig.enablePip && connected) { enterPictureInPictureMode( new PictureInPictureParams.Builder() .setAspectRatio(new Rational(prefConfig.width, prefConfig.height)) .setSourceRectHint(new Rect( streamView.getLeft(), streamView.getTop(), streamView.getRight(), streamView.getBottom())) .build()); } } }
/** Enters Picture-in-Picture mode. */ void minimize() { if (mMovieView == null) { return; } // Hide the controls in picture-in-picture mode. mMovieView.hideControls(); // Calculate the aspect ratio of the PiP screen. Rational aspectRatio = new Rational(mMovieView.getWidth(), mMovieView.getHeight()); mPictureInPictureParamsBuilder.setAspectRatio(aspectRatio).build(); enterPictureInPictureMode(mPictureInPictureParamsBuilder.build()); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pip_test); mFramePlayer = findViewById(R.id.frame_mock_player); mBtnPip = findViewById(R.id.btn_minimize); mBtnPip.setOnClickListener(view -> { if (android.os.Build.VERSION.SDK_INT >= 26) { //Trigger PiP mode try { Rational rational = new Rational(mFramePlayer.getWidth(), mFramePlayer.getHeight()); PictureInPictureParams mParams = new PictureInPictureParams.Builder() .setAspectRatio(rational) .build(); enterPictureInPictureMode(mParams); } catch (IllegalStateException e) { e.printStackTrace(); } } else { Toast.makeText(PipActivity.this, "API 26 needed to perform PiP", Toast.LENGTH_SHORT).show(); } }); }
private View.OnClickListener onPictureInPictureClick() { return view -> { if (exoPlayer != null && exoPlayer.getPlaybackState() == SimpleExoPlayer.STATE_READY) { int videoWidth = exoPlayer.getVideoFormat().width; int videoHeight = exoPlayer.getVideoFormat().height; PictureInPictureParams params = new PictureInPictureParams.Builder() .setAspectRatio(new Rational(videoWidth, videoHeight)) .build(); enterPictureInPictureMode(params); } else { Toast.makeText(PictureInPictureActivity.this, R.string.video_playback_not_ready, Toast.LENGTH_SHORT).show(); } }; }
private static String toString(ColorSpaceTransform transform) { StringBuilder str = new StringBuilder(); Rational[] rationals = new Rational[9]; transform.copyElements(rationals, 0); str.append("ColorSpaceTransform: "); str.append(Arrays.toString(rationals)); return str.toString(); }
public void onEnterIntoPIPClicked(View view) { PictureInPictureParams params = new PictureInPictureParams.Builder() .setAspectRatio(new Rational(10, 16)) // Portrait Aspect Ratio .build(); enterPictureInPictureMode(params); }
private void init() { initCapabilities(); StreamConfigurationMap configurationMap = mCharacteristics.get(SCALER_STREAM_CONFIGURATION_MAP); mSupportedPreviewSizes.addAll(Arrays.asList(configurationMap.getOutputSizes(SurfaceTexture.class))); for (int format : configurationMap.getOutputFormats()) { mSupportedPreviewFormats.add(format); } // TODO: We only support MediaRecorder video capture mSupportedVideoSizes.addAll(Arrays.asList(configurationMap.getOutputSizes(MediaRecorder.class))); // TODO: We only support JPEG image capture mSupportedPhotoSizes.addAll(Arrays.asList(configurationMap.getOutputSizes(ImageFormat.JPEG))); mSupportedPhotoFormats.addAll(mSupportedPreviewFormats); mActiveArray = mCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); buildSceneModes(mCharacteristics); buildFlashModes(mCharacteristics); buildFocusModes(mCharacteristics); buildWhiteBalances(mCharacteristics); buildAntibandingModes(mCharacteristics); buildColorEffects(mCharacteristics); // TODO: Populate mSupportedFeatures // TODO: Populate mPreferredPreviewSizeForVideo Range<Integer> ecRange = mCharacteristics.get(CONTROL_AE_COMPENSATION_RANGE); mMinExposureCompensation = ecRange.getLower(); mMaxExposureCompensation = ecRange.getUpper(); Rational ecStep = mCharacteristics.get(CONTROL_AE_COMPENSATION_STEP); mExposureCompensationStep = (float) ecStep.getNumerator() / ecStep.getDenominator(); mMaxNumOfFacesSupported = mCharacteristics.get(STATISTICS_INFO_MAX_FACE_COUNT); mMaxNumOfMeteringArea = mCharacteristics.get(CONTROL_MAX_REGIONS_AE); mMaxZoomRatio = mCharacteristics.get(SCALER_AVAILABLE_MAX_DIGITAL_ZOOM); // TODO: Populate mHorizontalViewAngle // TODO: Populate mVerticalViewAngle // TODO: Populate mZoomRatioList // TODO: Populate mMaxZoomIndex if (supports(FocusMode.AUTO)) { mMaxNumOfFocusAreas = mCharacteristics.get(CONTROL_MAX_REGIONS_AF); if (mMaxNumOfFocusAreas > 0) { mSupportedFeatures.add(Feature.FOCUS_AREA); } } if (mMaxNumOfMeteringArea > 0) { mSupportedFeatures.add(Feature.METERING_AREA); } if (mMaxZoomRatio > mCharacteristics.get(SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)) { mSupportedFeatures.add(Feature.ZOOM); } // TODO: Detect other features }
public void pipActivity(View view) { PictureInPictureParams params = new PictureInPictureParams.Builder() .setAspectRatio(new Rational(9,16)) // Portrait Aspect Ratio .build(); enterPictureInPictureMode(params); }