Gmail - Java Code
Gmail - Java Code
1 message
package com.codingclasses.ecoplayer2025;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.GestureDetectorCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.MediaItem;
import androidx.media3.common.PlaybackParameters;
import androidx.media3.common.Player;
import androidx.media3.common.TrackGroup;
import androidx.media3.common.TrackSelectionOverride;
import androidx.media3.common.TrackSelectionParameters;
import androidx.media3.common.Tracks;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.dash.DashMediaSource;
import androidx.media3.exoplayer.hls.HlsMediaSource;
import androidx.media3.exoplayer.rtsp.RtspMediaSource;
import androidx.media3.exoplayer.smoothstreaming.SsMediaSource;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.source.ProgressiveMediaExtractor;
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
import androidx.media3.exoplayer.source.TrackGroupArray;
import androidx.media3.exoplayer.trackselection.AdaptiveTrackSelection;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.trackselection.ExoTrackSelection;
import androidx.media3.exoplayer.trackselection.MappingTrackSelector;
import androidx.media3.ui.PlayerView;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Objects;
@UnstableApi
public class PlayerActivity extends AppCompatActivity {
PlayerView playerView;
ExoPlayer exoPlayer;
private ArrayList<String> videoQualities;
private DefaultTrackSelector defaultTrackSelector;
private int selectedQualityIndex = 0;
//--------------
DataSource.Factory dataSourceFactory;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView()).
setAppearanceLightStatusBars(false);
WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView()).
setAppearanceLightNavigationBars(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
getWindow().setNavigationBarContrastEnforced(false);
}
setContentView(R.layout.activity_player);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
String stream = getIntent().getStringExtra("url");
playerView = findViewById(R.id.player_view);
Uri uri = Uri.parse(stream);
dataSourceFactory = new DefaultHttpDataSource.Factory();
MediaSource mediaSource = buildMediaSource(uri);
exoPlayer = new ExoPlayer.Builder(this, renderersFactory)
.setTrackSelector(defaultTrackSelector)
.build();
playerView.setPlayer(exoPlayer);
exoPlayer.setMediaSource(mediaSource);
exoPlayer.prepare();
exoPlayer.setPlayWhenReady(true);
exoPlayer.play();
// ............................................................
..............................
brightnessVolumeContainer = findViewById(R.id.brightness_volume_container);
brightnessIcon = findViewById(R.id.brightness_icon);
volumeIcon = findViewById(R.id.volume_icon);
brightVolumeTV = findViewById(R.id.brightness_volume_tv);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++
/* This block of codes set the current device volume and brightness to the video on startup */
brightness = (int) (getCurrentScreenBrightness() * 100);
setVolumeVariable();
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
gestureDetectorCompat.onTouchEvent(motionEvent);
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
brightnessVolumeContainer.setVisibility(View.GONE);
if (!shouldShowController) {
playerView.setUseController(false);
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
touchPositionX = (int) motionEvent.getX();
}
return false;
});
// ..........................................................................................
// ************************************************************
******************************
gestureDetectorCompat = new GestureDetectorCompat(this, new GestureDetector.
OnGestureListener() {
@Override
public boolean onDown(@NonNull MotionEvent motionEvent) {
return false;
}
@Override
public void onShowPress(@NonNull MotionEvent motionEvent) {
@Override
public boolean onSingleTapUp(@NonNull MotionEvent motionEvent) {
return false;
}
@Override
public void onLongPress(@NonNull MotionEvent motionEvent) {
@Override
public boolean onFling(MotionEvent motionEvent, @NonNull MotionEvent motionEvent1, float
v, float v1) {
return false;
}
@Override
public boolean onScroll(MotionEvent motionEvent, @NonNull MotionEvent motionEvent1, float
distanceX, float distanceY) {
brightnessVolumeContainer.setVisibility(View.VISIBLE);
shouldShowController = false;
volumeIcon.setVisibility(View.GONE);
brightnessIcon.setVisibility(View.VISIBLE);
brightVolumeTV.setText(String.valueOf(brightness));
setScreenBrightness(brightness);
} else {
if (audioManager != null) {
volumeIcon.setVisibility(View.VISIBLE);
brightnessIcon.setVisibility(View.GONE);
brightVolumeTV.setText(String.valueOf(volume));
setVolume(volume);
}
}
}
return true;
}
});
if (mappedTrackInfo == null) {
Toast.makeText(this, "No subtitle tracks found", Toast.LENGTH_SHORT).show();
return;
}
if (selectedIndex[0] == 0) {
// Turn off subtitles
paramsBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true);
//paramsBuilder.setTrackTypeDisabled(finalRendererIndex, true);
} else {
TrackGroup selectedGroup = trackGroups.get(selectedIndex[0] -1);//-1
TrackSelectionOverride override = new TrackSelectionOverride(
selectedGroup, 0);
paramsBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, false)
.clearOverridesOfType(C.TRACK_TYPE_TEXT)
.addOverride(override);
}
defaultTrackSelector.setParameters(paramsBuilder.build());
Toast.makeText(this, "Subtitle updated"+subtitleNames[selectedIndex[0]],
Toast.LENGTH_SHORT).show();
});
builder.setNegativeButton("Cancel", null);
builder.show();
break;
}
});
defaultTrackSelector.setParameters(newParams);
Toast.makeText(this, "Switched to " +languageNames[selectedIndex[0]],
Toast.LENGTH_SHORT).show();
});
builder.setNegativeButton("Cancel", null);
builder.show();
break;
}
}
});
// ******************************************************************************************
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PlaybackParameters param = new PlaybackParameters(playerSpeed
Group[tempSelectedGroup[0]]);
exoPlayer.setPlaybackParameters(param);
selectedGroup[0] = tempSelectedGroup[0];
dialog.dismiss();
Speed_txt = groupName[selectedGroup[0]];
Toast.makeText(PlayerActivity.this, "Speed:"+groupName[selectedGroup[0]],
Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = alt_bld.create();
alert.show();
});
}
});
} else {
}
}
});
}
Objects.requireNonNull(dialog.getWindow()).setLayout(ViewGroup.LayoutParams.MATCH_
PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.show();
if (isSupportedFormat(renderTrack, rendererIndex)) {
if (trackGroupType == C.TRACK_TYPE_VIDEO) {
if (isTrackSupported) {
return videoQualities;
}
if (selectedQualityIndex == 0) {
Toast.makeText(context, context.getText(R.string.app_name) + " will choose video
resolution automatically.", Toast.LENGTH_SHORT).show();
defaultTrackSelector.setParameters(defaultTrackSelector.buildUponParameters().
setMaxVideoSizeSd());
} else {
String[] videoQualityInfo = arrayList.get(selectedQualityIndex - 1).split("x");
defaultTrackSelector.setParameters(
defaultTrackSelector
.buildUponParameters()
.setMaxVideoSize(videoWidth, videoHeight)
.setMinVideoSize(videoWidth, videoHeight)
);
}
});
builder.setNegativeButton("Cancel", (dialogInterface, i) -> dialogInterface.cancel());
builder.show();
}
//______________________________________________________________________________________________
//______________________________________________________________________________________________
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = d * brightness1;
getWindow().setAttributes(lp);
}
return brightnessValue;
}
@Override
protected void onPause() {
super.onPause();
exoPlayer.pause();
}
@Override
protected void onDestroy() {
exoPlayer.release();
super.onDestroy();
}
}