From 2f9d18182204088699d08917de373bc3ace7e42a Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 31 Jan 2020 14:31:33 +0100 Subject: [PATCH] remove FullscreenVideoViewer --- libs/fullscreenvideoview/.gitignore | 1 - libs/fullscreenvideoview/build.gradle | 27 - libs/fullscreenvideoview/gradle.properties | 3 - libs/fullscreenvideoview/proguard-rules.pro | 17 - .../src/main/AndroidManifest.xml | 4 - .../view/video/FullscreenVideoLayout.java | 336 ------ .../view/video/FullscreenVideoView.java | 1014 ----------------- .../drawable-xxhdpi/fvl_control_disabled.png | Bin 1406 -> 0 bytes .../drawable-xxhdpi/fvl_control_focused.png | Bin 2085 -> 0 bytes .../drawable-xxhdpi/fvl_control_normal.png | Bin 2537 -> 0 bytes .../drawable-xxhdpi/fvl_control_pressed.png | Bin 2667 -> 0 bytes .../drawable-xxhdpi/fvl_fullscreen_reader.png | Bin 5035 -> 0 bytes .../fvl_fullscreen_reader_white.png | Bin 4355 -> 0 bytes .../res/drawable-xxhdpi/fvl_pause_reader.png | Bin 4363 -> 0 bytes .../fvl_pause_reader_white.png | Bin 3673 -> 0 bytes .../res/drawable-xxhdpi/fvl_play_reader.png | Bin 5354 -> 0 bytes .../drawable-xxhdpi/fvl_play_reader_white.png | Bin 4552 -> 0 bytes .../res/drawable-xxhdpi/fvl_primary.9.png | Bin 153 -> 0 bytes .../res/drawable-xxhdpi/fvl_secondary.9.png | Bin 154 -> 0 bytes .../main/res/drawable-xxhdpi/fvl_track.9.png | Bin 1094 -> 0 bytes .../src/main/res/drawable/fvl_progress.xml | 27 - .../res/drawable/fvl_selector_fullscreen.xml | 5 - .../main/res/drawable/fvl_selector_pause.xml | 5 - .../main/res/drawable/fvl_selector_play.xml | 5 - .../main/res/layout/view_videocontrols.xml | 82 -- .../src/main/res/values/strings.xml | 6 - settings.gradle | 1 - 27 files changed, 1533 deletions(-) delete mode 100644 libs/fullscreenvideoview/.gitignore delete mode 100644 libs/fullscreenvideoview/build.gradle delete mode 100644 libs/fullscreenvideoview/gradle.properties delete mode 100644 libs/fullscreenvideoview/proguard-rules.pro delete mode 100644 libs/fullscreenvideoview/src/main/AndroidManifest.xml delete mode 100644 libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoLayout.java delete mode 100644 libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoView.java delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_disabled.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_focused.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_normal.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_pressed.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_fullscreen_reader.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_fullscreen_reader_white.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_pause_reader.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_pause_reader_white.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader_white.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_primary.9.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_secondary.9.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_track.9.png delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable/fvl_progress.xml delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_fullscreen.xml delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_pause.xml delete mode 100644 libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_play.xml delete mode 100644 libs/fullscreenvideoview/src/main/res/layout/view_videocontrols.xml delete mode 100644 libs/fullscreenvideoview/src/main/res/values/strings.xml diff --git a/libs/fullscreenvideoview/.gitignore b/libs/fullscreenvideoview/.gitignore deleted file mode 100644 index 796b96d1c..000000000 --- a/libs/fullscreenvideoview/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/libs/fullscreenvideoview/build.gradle b/libs/fullscreenvideoview/build.gradle deleted file mode 100644 index 1201cea57..000000000 --- a/libs/fullscreenvideoview/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -apply plugin: 'com.android.library' - -android { - lintOptions { - abortOnError false - } - compileSdkVersion 28 - - defaultConfig { - minSdkVersion 14 - targetSdkVersion 28 - versionCode 11 - versionName "1.1.3" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) -} - -//apply from: '../maven_push.gradle' \ No newline at end of file diff --git a/libs/fullscreenvideoview/gradle.properties b/libs/fullscreenvideoview/gradle.properties deleted file mode 100644 index 878a8d0ed..000000000 --- a/libs/fullscreenvideoview/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -POM_NAME=FullscreenVideoView Library -POM_ARTIFACT_ID=fullscreenvideoview -POM_PACKAGING=aar \ No newline at end of file diff --git a/libs/fullscreenvideoview/proguard-rules.pro b/libs/fullscreenvideoview/proguard-rules.pro deleted file mode 100644 index c7928bcb5..000000000 --- a/libs/fullscreenvideoview/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Applications/ADT/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/libs/fullscreenvideoview/src/main/AndroidManifest.xml b/libs/fullscreenvideoview/src/main/AndroidManifest.xml deleted file mode 100644 index 5b5b2ace5..000000000 --- a/libs/fullscreenvideoview/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoLayout.java b/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoLayout.java deleted file mode 100644 index f4113ce48..000000000 --- a/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoLayout.java +++ /dev/null @@ -1,336 +0,0 @@ -/** - * Copyright (C) 2016 Toshiro Sugii - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.github.rtoshiro.view.video; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.media.MediaPlayer; -import android.os.Handler; -import android.util.AttributeSet; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageButton; -import android.widget.RelativeLayout; -import android.widget.SeekBar; -import android.widget.TextView; - -import java.util.Locale; - -public class FullscreenVideoLayout extends FullscreenVideoView implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, MediaPlayer.OnPreparedListener { - - /** - * Log cat TAG name - */ - private final static String TAG = "FullscreenVideoLayout"; - - /** - * RelativeLayout that contains all control related views - */ - public View videoControlsView; - - /** - * SeekBar reference (from videoControlsView) - */ - protected SeekBar seekBar; - - /** - * Reference to ImageButton play - */ - protected ImageButton imgplay; - - /** - * Reference to ImageButton fullscreen - */ - protected ImageButton imgfullscreen; - - /** - * Reference to TextView for elapsed time and total time - */ - protected TextView textTotal, textElapsed; - - /** - * Handler and Runnable to keep tracking on elapsed time - */ - protected static final Handler TIME_THREAD = new Handler(); - protected Runnable updateTimeRunnable = new Runnable() { - public void run() { - updateCounter(); - - TIME_THREAD.postDelayed(this, 200); - } - }; - - public FullscreenVideoLayout(Context context) { - super(context); - } - - public FullscreenVideoLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public FullscreenVideoLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void release() { - super.release(); - } - - @Override - protected void initObjects() { - super.initObjects(); - - if (this.videoControlsView == null) { - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - this.videoControlsView = inflater.inflate(R.layout.view_videocontrols, this, false); - } - - if (videoControlsView != null) { - RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - params.addRule(ALIGN_PARENT_BOTTOM); - addView(videoControlsView, params); - - this.seekBar = this.videoControlsView.findViewById(R.id.vcv_seekbar); - this.imgfullscreen = this.videoControlsView.findViewById(R.id.vcv_img_fullscreen); - this.imgplay = this.videoControlsView.findViewById(R.id.vcv_img_play); - this.textTotal = this.videoControlsView.findViewById(R.id.vcv_txt_total); - this.textElapsed = this.videoControlsView.findViewById(R.id.vcv_txt_elapsed); - } - - if (this.imgplay != null) - this.imgplay.setOnClickListener(this); - if (this.imgfullscreen != null) - this.imgfullscreen.setOnClickListener(this); - if (this.seekBar != null) - this.seekBar.setOnSeekBarChangeListener(this); - - // Start controls invisible. Make it visible when it is prepared - if (this.videoControlsView != null) - this.videoControlsView.setVisibility(View.INVISIBLE); - } - - @Override - protected void releaseObjects() { - super.releaseObjects(); - - if (this.videoControlsView != null) - removeView(this.videoControlsView); - } - - protected void startCounter() { - Log.d(TAG, "startCounter"); - - TIME_THREAD.postDelayed(updateTimeRunnable, 200); - } - - protected void stopCounter() { - Log.d(TAG, "stopCounter"); - - TIME_THREAD.removeCallbacks(updateTimeRunnable); - } - - protected void updateCounter() { - if (this.textElapsed == null) - return; - - int elapsed = getCurrentPosition(); - // getCurrentPosition is a little bit buggy :( - if (elapsed > 0 && elapsed < getDuration()) { - seekBar.setProgress(elapsed); - - elapsed = Math.round(elapsed / 1000.f); - long s = elapsed % 60; - long m = (elapsed / 60) % 60; - long h = (elapsed / (60 * 60)) % 24; - - if (h > 0) - textElapsed.setText(String.format(Locale.US, "%d:%02d:%02d", h, m, s)); - else - textElapsed.setText(String.format(Locale.US, "%02d:%02d", m, s)); - } - } - - @Override - public void onCompletion(MediaPlayer mp) { - Log.d(TAG, "onCompletion"); - - super.onCompletion(mp); - stopCounter(); - updateControls(); - if (currentState != State.ERROR) - updateCounter(); - } - - @Override - public boolean onError(MediaPlayer mp, int what, int extra) { - boolean result = super.onError(mp, what, extra); - stopCounter(); - updateControls(); - return result; - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (getCurrentState() == State.END) { - Log.d(TAG, "onDetachedFromWindow END"); - stopCounter(); - } - } - - @Override - protected void tryToPrepare() { - Log.d(TAG, "tryToPrepare"); - super.tryToPrepare(); - - if (getCurrentState() == State.PREPARED || getCurrentState() == State.STARTED) { - if (textElapsed != null && textTotal != null) { - int total = getDuration(); - if (total > 0) { - seekBar.setMax(total); - seekBar.setProgress(0); - - total = total / 1000; - long s = total % 60; - long m = (total / 60) % 60; - long h = (total / (60 * 60)) % 24; - if (h > 0) { - textElapsed.setText("00:00:00"); - textTotal.setText(String.format(Locale.US, "%d:%02d:%02d", h, m, s)); - } else { - textElapsed.setText("00:00"); - textTotal.setText(String.format(Locale.US, "%02d:%02d", m, s)); - } - } - } - - if (videoControlsView != null) - videoControlsView.setVisibility(View.VISIBLE); - } - } - - @Override - public void start() throws IllegalStateException { - Log.d(TAG, "start"); - - if (!isPlaying()) { - super.start(); - startCounter(); - updateControls(); - } - } - - @Override - public void pause() throws IllegalStateException { - Log.d(TAG, "pause"); - - if (isPlaying()) { - stopCounter(); - super.pause(); - updateControls(); - } - } - - @Override - public void reset() { - Log.d(TAG, "reset"); - - super.reset(); - - stopCounter(); - updateControls(); - } - - @Override - public void stop() throws IllegalStateException { - Log.d(TAG, "stop"); - - super.stop(); - stopCounter(); - updateControls(); - } - - protected void updateControls() { - if (imgplay == null) return; - - Drawable icon; - if (getCurrentState() == State.STARTED) { - icon = context.getResources().getDrawable(R.drawable.fvl_selector_pause); - } else { - icon = context.getResources().getDrawable(R.drawable.fvl_selector_play); - } - imgplay.setBackgroundDrawable(icon); - } - - public void hideControls() { - Log.d(TAG, "hideControls"); - if (videoControlsView != null) { - videoControlsView.setVisibility(View.INVISIBLE); - } - } - - public void showControls() { - Log.d(TAG, "showControls"); - if (videoControlsView != null) { - videoControlsView.setVisibility(View.VISIBLE); - } - } - - /** - * Onclick action - * Controls play button and fullscreen button. - * - * @param v View defined in XML - */ - @Override - public void onClick(View v) { - if (v.getId() == R.id.vcv_img_play) { - if (isPlaying()) { - pause(); - } else { - start(); - } - } else { - setFullscreen(!isFullscreen()); - } - } - - /** - * SeekBar Listener - */ - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - Log.d(TAG, "onProgressChanged " + progress); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - stopCounter(); - Log.d(TAG, "onStartTrackingTouch"); - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - int progress = seekBar.getProgress(); - seekTo(progress); - Log.d(TAG, "onStopTrackingTouch"); - - } -} diff --git a/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoView.java b/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoView.java deleted file mode 100644 index f068a468b..000000000 --- a/libs/fullscreenvideoview/src/main/java/com/github/rtoshiro/view/video/FullscreenVideoView.java +++ /dev/null @@ -1,1014 +0,0 @@ -/** - * Copyright (C) 2016 Toshiro Sugii - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.github.rtoshiro.view.video; - -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.graphics.Color; -import android.graphics.SurfaceTexture; -import android.media.AudioManager; -import android.media.MediaPlayer; -import android.media.MediaPlayer.OnBufferingUpdateListener; -import android.media.MediaPlayer.OnCompletionListener; -import android.media.MediaPlayer.OnErrorListener; -import android.media.MediaPlayer.OnInfoListener; -import android.media.MediaPlayer.OnPreparedListener; -import android.media.MediaPlayer.OnSeekCompleteListener; -import android.media.MediaPlayer.OnVideoSizeChangedListener; -import android.net.Uri; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.util.Log; -import android.view.Surface; -import android.view.SurfaceHolder; -import android.view.SurfaceView; -import android.view.TextureView; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewParent; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; - -import java.io.IOException; - -/** - * Acts like a android.widget.VideoView with fullscreen functionality - * - * @author rtoshiro - * @version 2015.0527 - * @since 1.0 - */ -@SuppressLint("NewApi") -public class FullscreenVideoView extends RelativeLayout implements SurfaceHolder.Callback, OnPreparedListener, OnErrorListener, OnSeekCompleteListener, OnCompletionListener, OnInfoListener, OnVideoSizeChangedListener, OnBufferingUpdateListener, TextureView.SurfaceTextureListener { - - /** - * Debug Tag for use logging debug output to LogCat - */ - private final static String TAG = "FullscreenVideoView"; - - protected Context context; - protected Activity activity; // Used when orientation changes is not static - - protected MediaPlayer mediaPlayer; - protected SurfaceHolder surfaceHolder; - protected SurfaceView surfaceView; - protected boolean videoIsReady, surfaceIsReady; - protected boolean detachedByFullscreen; - protected State currentState; - protected State lastState; // Tells onSeekCompletion what to do - - protected View onProgressView; - - protected ViewGroup parentView; // Controls fullscreen container - protected ViewGroup.LayoutParams currentLayoutParams; - - protected boolean fullscreen; - protected boolean shouldAutoplay; - protected int initialConfigOrientation; - protected int initialMovieWidth, initialMovieHeight; - protected String videoPath; - protected Uri videoUri; - - protected OnBufferingUpdateListener bufferingUpdateListener; - protected OnCompletionListener completionListener; - protected OnErrorListener errorListener; - protected OnInfoListener infoListener; - protected OnPreparedListener preparedListener; - protected OnSeekCompleteListener seekCompleteListener; - protected OnVideoSizeChangedListener videoSizeChangedListener; - - protected TextureView textureView; - - /** - * States of MediaPlayer - * - * @see MediaPlayer - */ - public enum State { - IDLE, - INITIALIZED, - PREPARED, - PREPARING, - STARTED, - STOPPED, - PAUSED, - PLAYBACKCOMPLETED, - ERROR, - END - } - - public FullscreenVideoView(Context context) { - super(context); - this.context = context; - - init(); - } - - public FullscreenVideoView(Context context, AttributeSet attrs) { - super(context, attrs); - this.context = context; - - init(); - } - - public FullscreenVideoView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - this.context = context; - - init(); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - Log.d(TAG, "onSizeChanged - w = " + w + " - h: " + h + " - oldw: " + oldw + " - oldh:" + oldw); - super.onSizeChanged(w, h, oldw, oldh); - resize(); - } - - @Override - public Parcelable onSaveInstanceState() { - Log.d(TAG, "onSaveInstanceState"); - Parcelable p = super.onSaveInstanceState(); - return p; - } - - @Override - public void onRestoreInstanceState(Parcelable state) { - Log.d(TAG, "onRestoreInstanceState"); - super.onRestoreInstanceState(state); - } - - @Override - protected void onDetachedFromWindow() { - Log.d(TAG, "onDetachedFromWindow - detachedByFullscreen: " + detachedByFullscreen); - - super.onDetachedFromWindow(); - - if (!this.detachedByFullscreen) { - release(); - } - - this.detachedByFullscreen = false; - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - Log.d(TAG, "onAttachedToWindow"); - - // If Object still exists, reload the video - if (this.mediaPlayer == null && - this.currentState == State.END) { - initObjects(); - try { - if (this.videoPath != null) - setVideoPath(this.videoPath); - else if (this.videoUri != null) - setVideoURI(this.videoUri); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - // TextureView - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - @Override - public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { - Log.d(TAG, "onSurfaceTextureAvailable - state: " + this.currentState); - - Surface surface = new Surface(surfaceTexture); - if (this.mediaPlayer != null) { - this.mediaPlayer.setSurface(surface); - - // If is not prepared yet - tryToPrepare() - if (!this.surfaceIsReady) { - this.surfaceIsReady = true; - if (this.currentState == State.INITIALIZED || - this.currentState == State.PREPARING) - tryToPrepare(); - } - } - } - - @Override - public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { - Log.d(TAG, "onSurfaceTextureSizeChanged - width: " + width + " - height: " + height); - resize(); - } - - @Override - public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { - Log.d(TAG, "onSurfaceTextureDestroyed"); - if (mediaPlayer != null && mediaPlayer.isPlaying()) - mediaPlayer.pause(); - - surfaceIsReady = false; - - return true; - } - - @Override - public void onSurfaceTextureUpdated(SurfaceTexture surface) { - Log.d(TAG, "onSurfaceTextureUpdated"); - } - - // SurfaceView methods - @Override - synchronized public void surfaceCreated(SurfaceHolder holder) { - Log.d(TAG, "surfaceCreated called = " + currentState); - - if (this.mediaPlayer != null) { - this.mediaPlayer.setDisplay(surfaceHolder); - - // If is not prepared yet - tryToPrepare() - if (!this.surfaceIsReady) { - this.surfaceIsReady = true; - if (this.currentState == State.INITIALIZED || - this.currentState == State.PREPARING) - tryToPrepare(); - } - } - } - - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - Log.d(TAG, "surfaceChanged called"); - resize(); - } - - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - Log.d(TAG, "surfaceDestroyed called"); - if (mediaPlayer != null && mediaPlayer.isPlaying()) - mediaPlayer.pause(); - - surfaceIsReady = false; - } - - @Override - synchronized public void onPrepared(MediaPlayer mp) { - Log.d(TAG, "onPrepared called"); - videoIsReady = true; - tryToPrepare(); - } - - /** - * Restore the last State before seekTo() - * - * @param mp the MediaPlayer that issued the seek operation - */ - @Override - public void onSeekComplete(MediaPlayer mp) { - Log.d(TAG, "onSeekComplete"); - - stopLoading(); - if (lastState != null) { - switch (lastState) { - case STARTED: { - start(); - break; - } - case PLAYBACKCOMPLETED: { - currentState = State.PLAYBACKCOMPLETED; - break; - } - case PREPARED: { - currentState = State.PREPARED; - break; - } - } - } - - if (this.seekCompleteListener != null) - this.seekCompleteListener.onSeekComplete(mp); - } - - @Override - public void onCompletion(MediaPlayer mp) { - if (this.mediaPlayer != null) { - if (this.currentState != State.ERROR) { - Log.d(TAG, "onCompletion"); - if (!this.mediaPlayer.isLooping()) - this.currentState = State.PLAYBACKCOMPLETED; - else - start(); - } - } - - if (this.completionListener != null) - this.completionListener.onCompletion(mp); - } - - @Override - public boolean onInfo(MediaPlayer mediaPlayer, int what, int extra) { - Log.d(TAG, "onInfo " + what); - - if (this.infoListener != null) - return this.infoListener.onInfo(mediaPlayer, what, extra); - - return false; - } - - @Override - public boolean onError(MediaPlayer mp, int what, int extra) { - Log.d(TAG, "onError called - " + what + " - " + extra); - - stopLoading(); - this.currentState = State.ERROR; - - if (this.errorListener != null) - return this.errorListener.onError(mp, what, extra); - return false; - } - - @Override - public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { - Log.d(TAG, "onVideoSizeChanged = " + width + " - " + height); - - if (this.initialMovieWidth == -1 && - this.initialMovieHeight == -1 && - width != 0 && - height != 0) { - initialMovieWidth = width; - initialMovieHeight = height; - resize(); - } - - if (this.videoSizeChangedListener != null) - this.videoSizeChangedListener.onVideoSizeChanged(mp, width, height); - } - - @Override - public void onBufferingUpdate(MediaPlayer mp, int percent) { -// Log.d(TAG, "onBufferingUpdate = " + percent); - - if (this.bufferingUpdateListener != null) - this.bufferingUpdateListener.onBufferingUpdate(mp, percent); - } - - /** - * Initializes the default configuration - */ - protected void init() { - Log.d(TAG, "init"); - - if (isInEditMode()) - return; - - this.mediaPlayer = null; - this.shouldAutoplay = false; - this.fullscreen = false; - this.initialConfigOrientation = -1; - this.videoIsReady = false; - this.surfaceIsReady = false; - this.initialMovieHeight = -1; - this.initialMovieWidth = -1; - this.setBackgroundColor(Color.BLACK); - - initObjects(); - } - - /** - * Releases and ends the current Object - */ - protected void release() { - Log.d(TAG, "release"); - releaseObjects(); - - if (this.mediaPlayer != null) { - this.mediaPlayer.setOnBufferingUpdateListener(null); - this.mediaPlayer.setOnPreparedListener(null); - this.mediaPlayer.setOnErrorListener(null); - this.mediaPlayer.setOnSeekCompleteListener(null); - this.mediaPlayer.setOnCompletionListener(null); - this.mediaPlayer.setOnInfoListener(null); - this.mediaPlayer.setOnVideoSizeChangedListener(null); - this.mediaPlayer.release(); - this.mediaPlayer = null; - } - - this.currentState = State.END; - } - - /** - * Initializes all objects FullscreenVideoView depends on - * It does not interfere with configuration properties - * because it is supposed to be called when this Object - * still exists - */ - protected void initObjects() { - Log.d(TAG, "initObjects"); - - if (this.mediaPlayer == null) { - this.mediaPlayer = new MediaPlayer(); - this.mediaPlayer.setOnInfoListener(this); - this.mediaPlayer.setOnErrorListener(this); - this.mediaPlayer.setOnPreparedListener(this); - this.mediaPlayer.setOnCompletionListener(this); - this.mediaPlayer.setOnSeekCompleteListener(this); - this.mediaPlayer.setOnBufferingUpdateListener(this); - this.mediaPlayer.setOnVideoSizeChangedListener(this); - this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - } - - RelativeLayout.LayoutParams layoutParams; - View view; - - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - if (this.textureView == null) { - this.textureView = new TextureView(this.context); - this.textureView.setSurfaceTextureListener(this); - } - view = this.textureView; - - } else { - if (this.surfaceView == null) { - this.surfaceView = new SurfaceView(context); - } - view = this.surfaceView; - - if (this.surfaceHolder == null) { - this.surfaceHolder = this.surfaceView.getHolder(); - //noinspection deprecation - this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); - this.surfaceHolder.addCallback(this); - } - } - - layoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - layoutParams.addRule(CENTER_IN_PARENT); - view.setLayoutParams(layoutParams); - addView(view); - - // Try not reset onProgressView - if (this.onProgressView == null) - this.onProgressView = new ProgressBar(context); - - layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - layoutParams.addRule(CENTER_IN_PARENT); - this.onProgressView.setLayoutParams(layoutParams); - addView(this.onProgressView); - - stopLoading(); - this.currentState = State.IDLE; - } - - /** - * Releases all objects FullscreenVideoView depends on - * It does not interfere with configuration properties - * because it is supposed to be called when this Object - * still exists - */ - protected void releaseObjects() { - Log.d(TAG, "releaseObjects"); - if (this.mediaPlayer != null) { - this.mediaPlayer.setSurface(null); - this.mediaPlayer.reset(); - } - - this.videoIsReady = false; - this.surfaceIsReady = false; - this.initialMovieHeight = -1; - this.initialMovieWidth = -1; - - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - if (this.textureView != null) { - this.textureView.setSurfaceTextureListener(null); - removeView(this.textureView); - this.textureView = null; - } - } else { - if (this.surfaceHolder != null) { - this.surfaceHolder.removeCallback(this); - this.surfaceHolder = null; - } - if (this.surfaceView != null) { - removeView(this.surfaceView); - this.surfaceView = null; - } - } - - if (this.onProgressView != null) { - removeView(this.onProgressView); - } - } - - /** - * Calls prepare() method of MediaPlayer - */ - - protected void prepare() throws IllegalStateException { - Log.d(TAG, "prepare"); - startLoading(); - - this.currentState = State.PREPARING; - this.mediaPlayer.prepareAsync(); - } - - /** - * Try to call state PREPARED - * Only if SurfaceView is already created and MediaPlayer is prepared - * Video is loaded and is ok to play. - */ - protected void tryToPrepare() { - Log.d(TAG, "tryToPrepare"); - if (this.surfaceIsReady && this.videoIsReady) { - if (this.mediaPlayer != null && - this.mediaPlayer.getVideoWidth() != 0 && - this.mediaPlayer.getVideoHeight() != 0) { - this.initialMovieWidth = this.mediaPlayer.getVideoWidth(); - this.initialMovieHeight = this.mediaPlayer.getVideoHeight(); - } - - resize(); - stopLoading(); - currentState = State.PREPARED; - - if (shouldAutoplay) - start(); - - if (this.preparedListener != null) - this.preparedListener.onPrepared(mediaPlayer); - } - } - - protected void startLoading() { - if (this.onProgressView != null) - this.onProgressView.setVisibility(View.VISIBLE); - } - - protected void stopLoading() { - if (this.onProgressView != null) - this.onProgressView.setVisibility(View.GONE); - } - - /** - * Get the current {@link FullscreenVideoView.State}. - * - * @return Current {@link FullscreenVideoView.State} - */ - synchronized public State getCurrentState() { - return currentState; - } - - /** - * Returns if VideoView is in fullscreen mode - * - * @return true if is in fullscreen mode otherwise false - * @since 1.1 - */ - public boolean isFullscreen() { - return fullscreen; - } - - /** - * Turn VideoView fulllscreen mode on or off. - * - * @param fullscreen true to turn on fullscreen mode or false to turn off - * @throws RuntimeException In case of mediaPlayer doesn't exist or illegal state exception - * @since 1.1 - */ - public void setFullscreen(final boolean fullscreen) throws RuntimeException { - - if (mediaPlayer == null) - throw new RuntimeException("Media Player is not initialized"); - - if (this.currentState != State.ERROR) { - if (FullscreenVideoView.this.fullscreen == fullscreen) return; - FullscreenVideoView.this.fullscreen = fullscreen; - - final boolean wasPlaying = mediaPlayer.isPlaying(); - if (wasPlaying) - pause(); - - if (FullscreenVideoView.this.fullscreen) { - if (activity != null) - activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - - View rootView = getRootView(); - View v = rootView.findViewById(android.R.id.content); - ViewParent viewParent = getParent(); - if (viewParent instanceof ViewGroup) { - if (parentView == null) - parentView = (ViewGroup) viewParent; - - // Prevents MediaPlayer to became invalidated and released - detachedByFullscreen = true; - - // Saves the last state (LayoutParams) of view to restore after - currentLayoutParams = FullscreenVideoView.this.getLayoutParams(); - - parentView.removeView(FullscreenVideoView.this); - } else - Log.e(TAG, "Parent View is not a ViewGroup"); - - if (v instanceof ViewGroup) { - ((ViewGroup) v).addView(FullscreenVideoView.this); - } else - Log.e(TAG, "RootView is not a ViewGroup"); - } else { - if (activity != null) - activity.setRequestedOrientation(initialConfigOrientation); - - ViewParent viewParent = getParent(); - if (viewParent instanceof ViewGroup) { - // Check if parent view is still available - boolean parentHasParent = false; - if (parentView != null && parentView.getParent() != null) { - parentHasParent = true; - detachedByFullscreen = true; - } - - ((ViewGroup) viewParent).removeView(FullscreenVideoView.this); - if (parentHasParent) { - parentView.addView(FullscreenVideoView.this); - FullscreenVideoView.this.setLayoutParams(currentLayoutParams); - } - } - } - - resize(); - - Handler handler = new Handler(Looper.getMainLooper()); - handler.post(new Runnable() { - @Override - public void run() { - if (wasPlaying && mediaPlayer != null) - start(); - } - }); - } - } - - /** - * Binds an Activity to VideoView. This is necessary to keep tracking on orientation changes - * - * @param activity The activity that VideoView is related to - */ - public void setActivity(Activity activity) { - this.activity = activity; - this.initialConfigOrientation = activity.getRequestedOrientation(); - } - - public void resize() { - if (initialMovieHeight == -1 || initialMovieWidth == -1 || (surfaceView == null && this.textureView == null)) - return; - - Handler handler = new Handler(Looper.getMainLooper()); - handler.post(new Runnable() { - @Override - public void run() { - - View currentParent = (View) getParent(); - if (currentParent != null) { - float videoProportion = (float) initialMovieWidth / (float) initialMovieHeight; - - int screenWidth = currentParent.getWidth(); - int screenHeight = currentParent.getHeight(); - float screenProportion = (float) screenWidth / (float) screenHeight; - - int newWidth, newHeight; - if (videoProportion > screenProportion) { - newWidth = screenWidth; - newHeight = (int) ((float) screenWidth / videoProportion); - } else { - newWidth = (int) (videoProportion * (float) screenHeight); - newHeight = screenHeight; - } - - View currentView = null; - RelativeLayout.LayoutParams lp; - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - currentView = textureView; - } else { - currentView = surfaceView; - } - - if (currentView != null) { - lp = (RelativeLayout.LayoutParams) currentView.getLayoutParams(); - lp.addRule(CENTER_IN_PARENT); - lp.width = newWidth; - lp.height = newHeight; - currentView.setLayoutParams(lp); - } - - Log.d(TAG, "Resizing: initialMovieWidth: " + initialMovieWidth + " - initialMovieHeight: " + initialMovieHeight); - Log.d(TAG, "Resizing: screenWidth: " + screenWidth + " - screenHeight: " + screenHeight); - Log.d(TAG, "Resizing To: newWidth: " + newWidth + " - newHeight: " + newHeight); - } - } - }); - } - - /** - * Tells if application should autoplay videos as soon as it is prepared - * - * @return true if application are going to play videos as soon as it is prepared - */ - public boolean isShouldAutoplay() { - return shouldAutoplay; - } - - /** - * Tells application that it should begin playing as soon as buffering - * is ok - * - * @param shouldAutoplay If true, call start() method when getCurrentState() == PREPARED. Default is false. - */ - public void setShouldAutoplay(boolean shouldAutoplay) { - this.shouldAutoplay = shouldAutoplay; - } - - /** - * Toggles view to fullscreen mode - * It saves currentState and calls pause() method. - * When fullscreen is finished, it calls the saved currentState before pause() - * In practice, it only affects STARTED state. - * If currenteState was STARTED when fullscreen() is called, it calls start() method - * after fullscreen() has ended. - * - * @deprecated As of release 1.1.0, replaced by {@link #setFullscreen(boolean)} - */ - @Deprecated - public void fullscreen() throws IllegalStateException { - setFullscreen(!fullscreen); - } - - /** - * MediaPlayer method (getCurrentPosition) - * - * @see getCurrentPosition - */ - public int getCurrentPosition() { - if (mediaPlayer != null) - return mediaPlayer.getCurrentPosition(); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (getDuration) - * - * @see getDuration - */ - public int getDuration() { - if (mediaPlayer != null) - return mediaPlayer.getDuration(); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (getVideoHeight) - * - * @see getVideoHeight - */ - public int getVideoHeight() { - if (mediaPlayer != null) - return mediaPlayer.getVideoHeight(); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (getVideoWidth) - * - * @see getVideoWidth - */ - public int getVideoWidth() { - if (mediaPlayer != null) - return mediaPlayer.getVideoWidth(); - else throw new RuntimeException("Media Player is not initialized"); - } - - - /** - * MediaPlayer method (isLooping) - * - * @see isLooping - */ - public boolean isLooping() { - if (mediaPlayer != null) - return mediaPlayer.isLooping(); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (isPlaying) - * - * @see isPlaying - */ - public boolean isPlaying() throws IllegalStateException { - if (mediaPlayer != null) - return mediaPlayer.isPlaying(); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (pause) - * - * @see pause - */ - public void pause() throws IllegalStateException { - Log.d(TAG, "pause"); - if (mediaPlayer != null) { - currentState = State.PAUSED; - mediaPlayer.pause(); - } else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * Due to a lack of access of SurfaceView, it rebuilds mediaPlayer and all - * views to update SurfaceView canvas - */ - public void reset() { - Log.d(TAG, "reset"); - - releaseObjects(); - initObjects(); - } - - /** - * MediaPlayer method (start) - * - * @see start - */ - public void start() throws IllegalStateException { - Log.d(TAG, "start"); - - if (mediaPlayer != null) { - currentState = State.STARTED; - mediaPlayer.setOnCompletionListener(this); - mediaPlayer.start(); - } else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (stop) - * - * @see stop - */ - public void stop() throws IllegalStateException { - Log.d(TAG, "stop"); - - if (mediaPlayer != null) { - currentState = State.STOPPED; - mediaPlayer.stop(); - } else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * MediaPlayer method (seekTo) - * It calls pause() method before calling MediaPlayer.seekTo() - * - * @param msec the offset in milliseconds from the start to seek to - * @throws IllegalStateException if the internal player engine has not been initialized - * @see seekTo - */ - public void seekTo(int msec) throws IllegalStateException { - Log.d(TAG, "seekTo = " + msec); - - if (mediaPlayer != null) { - // No live streaming - if (mediaPlayer.getDuration() > -1 && msec <= mediaPlayer.getDuration()) { - lastState = currentState; - pause(); - mediaPlayer.seekTo(msec); - - startLoading(); - } - } else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnCompletionListener(OnCompletionListener l) { - if (mediaPlayer != null) - this.completionListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnErrorListener(OnErrorListener l) { - if (mediaPlayer != null) - errorListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnBufferingUpdateListener(OnBufferingUpdateListener l) { - if (mediaPlayer != null) { - this.bufferingUpdateListener = l; - this.mediaPlayer.setOnBufferingUpdateListener(this); - } else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnInfoListener(OnInfoListener l) { - if (mediaPlayer != null) - this.infoListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnSeekCompleteListener(OnSeekCompleteListener l) { - if (mediaPlayer != null) - this.seekCompleteListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnVideoSizeChangedListener(OnVideoSizeChangedListener l) { - if (mediaPlayer != null) - this.videoSizeChangedListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setOnPreparedListener(OnPreparedListener l) { - if (mediaPlayer != null) - this.preparedListener = l; - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setLooping(boolean looping) { - if (mediaPlayer != null) - mediaPlayer.setLooping(looping); - else throw new RuntimeException("Media Player is not initialized"); - } - - public void setVolume(float leftVolume, float rightVolume) { - if (mediaPlayer != null) - mediaPlayer.setVolume(leftVolume, rightVolume); - else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * VideoView method (setVideoPath) - */ - public void setVideoPath(String path) throws IOException, IllegalStateException, SecurityException, IllegalArgumentException, RuntimeException { - Log.d(TAG, "setVideoPath"); - if (mediaPlayer != null) { - if (currentState != State.IDLE) - throw new IllegalStateException("FullscreenVideoView Invalid State: " + currentState); - - this.videoPath = path; - this.videoUri = null; - this.mediaPlayer.setDataSource(path); - - this.currentState = State.INITIALIZED; - prepare(); - } else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * VideoView method (setVideoURI) - */ - public void setVideoURI(Uri uri) throws IOException, IllegalStateException, SecurityException, IllegalArgumentException, RuntimeException { - Log.d(TAG, "setVideoURI"); - if (mediaPlayer != null) { - if (currentState != State.IDLE) - throw new IllegalStateException("FullscreenVideoView Invalid State: " + currentState); - - this.videoUri = uri; - this.videoPath = null; - this.mediaPlayer.setDataSource(context, uri); - - this.currentState = State.INITIALIZED; - prepare(); - } else throw new RuntimeException("Media Player is not initialized"); - } - - /** - * Overwrite the default ProgressView to represent loading progress state - * It is controlled by stopLoading and startLoading methods, that only sets it to VISIBLE and GONE - *

- * Remember to set RelativeLayout.LayoutParams before setting the view. - * - * @param v The custom View that will be used as progress view. - * Set it to null to remove the default one - */ - public void setOnProgressView(View v) { - int progressViewVisibility = -1; - if (this.onProgressView != null) { - progressViewVisibility = this.onProgressView.getVisibility(); - removeView(this.onProgressView); - } - - this.onProgressView = v; - if (this.onProgressView != null) { - addView(this.onProgressView); - if (progressViewVisibility != -1) - this.onProgressView.setVisibility(progressViewVisibility); - } - } -} diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_disabled.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_disabled.png deleted file mode 100644 index df0552fdcba53b478e0c282b6ed2b189a86dd8f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmV-^1%djBP) zy=$9C9LGPkgR9ZIt#QzlLIpO7`{Z6Vt&9lB@hrcFcXlrAY9 zLNK8X!Wa{b3C09tjABeJWYghJtqHN@dwcGA9^D57etDjI`F-zxy60Yg40)`1Mh?o z$602YnE=|)w}56=d0Mgu^s@SX$V31sgokA0_f?5rjN7=LQ~h-8D{}>cU<>SmZGul!xj1H0V_<0>-n4oRNb9$ z5e0-+k5sX#Y3Ot$)Od%XfiG52%y zivY_G_m&N7TUZI8w~lz97b!3`Z4+Z`d%%+AePzbV4cQ8C*YdtHW91QS1qi))s)$(G z#8?0+sbwv7=sJzyHA9d3%TZERZdyv04<7|hO9x~3RY;2pt2r!tP ztGsGHdd~P6$i}PYqvwO!xme#(nFtVN`a!#$#tklQbX%M4(B-)XS^kO<@E8So(Bu)b4ej0xy7fSN^pPylD42PnSL&1U*nO0b|?PjOnAEJg;7y z4}bjomo5;?&5Xm?Ha0yV*GK;&6J7uvdm-kGV_q5B#HFx(sEX-l^NN*Ck^uh5RDf7d znt8^`CRPFnAqK#q&Alb%P}{^9mx;9x4)>M~Yg@Po@DUaAW!f2_Y+;4906LgOln^gD zAq~ z!b_dK2%zUcOqL9b&aSU`q}~?Tg%I1QkdS5PSl87HzIQmhq1>aQ0kGvWL9YVn$MM(1 zTeuI&CGgsJd9u64USMt~7I1lV2Fh^dCVi#kJ%YL0-9F<)2mC2}Xg z=jbpnS6^c_&-FcIh;l7gUt^W4w^8f$< diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_focused.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_focused.png deleted file mode 100644 index 59ebe18c711d538f5eddcb966ca6a89db8e726ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2085 zcmV+=2-^3FP) zv1=Sh6vlr(gb+p;A%qda2osDk#)XNC5JJi{u2Tk5x=az$C8P==1d}>lNRi|(aGT17 z3xf$p7-NJH<}kttVZhoA)_rK8YiGa@Js6Kf4&T?0?XMUbzbp`KF-c3z&JaO zfKm20A;AAUQT1w^h{g!;OpO-2K9+HUUB?OjGWDIWPl#ZGBVhy_;D{QN6QK#=>7!wz zrl}DERI4u&ycYU8)q;%00H;B#z*QUp2UL?Grl}EaFeRYG+-RYT;I9H3)NkqYVg=X& zHi37*J~D$0<906?vgoEtfx3jveW_4R3_ca4x;Kd`!E0G*C zgnt#dMSFtxAw)=>8YLmQ04jtpt^Rs;ET_J20xXl)Pqe|Dgro#`!q=^S4Y-MOvR%hI zuC8kowZVjhWCSST`%ZQPxIy~fjU`rab>1K+;8Yt@l8}Ue60;*Me-o$DU9k0`7~tx@ zNv;XW&C%R~DKR_J^0$C%^OoNMT*Ez!)`Vmv%tgSI-p*BA%UKj`;+`pa?`YmYtW5YD zEJn-saSa!sy(1s=JIT(I(kp5pS_8bX9kKgYa6!$YVjK62+8_9dqaZ{PFvaw2$Ci0c zFu*-yGE+2uk=*%B_T`E0Y&}%Lk~}9gQ(Ts{z-=;5%%(w^y>Vt)OLNYJx0BJf(|ih1RvKWM4+vs50!=1$tY&Ql%cx5laK)(HGFSzYwi&S==@CkRUiO(9BcpPgyjQSn zLJ07ef~JPuGL+`-<*!Yii5L@PMZim=a?7w|RIZr@XlBQuH>ruHk|zL9jmjMps0A@T zz>0tuG?Pjk;u19$5CUqW4gvo1ek%e1{xB?C@DFxo)YpKS_X%~vvg+IlPq4Gk0Iz_5 z4a*;4m8^2HA+FadtXwyS%L z+H(Tx?Kcr)f=+NuTVe;7LOe`R))6kn`Co#vX5FW-@kbrRn4k%11TzcIfp2lWqgd=_ zWjsq#qv<#x&;di(ydbRsvi*zo+@O729``fgE9#G8z6Jim*5PW1JoKhewNQ(Id-u0a zcMc&}vqPGj8TU9luHzCncX7!N$sz3Gx`5AcJ*ig>)k|=QXMXDLuo9yILc#%VW^j}9 zLtkgd-wob#7DN{QmT0vQ6A25`vhmSH$02zSD98ar00By+goH89Mq9=NUB?9HZ)BsV z;O)+0^8vjUILNkVh3(El3J4;gLJNl2jt_Me`q`seKg8z)Gy%snn@s5nh7>pbi^>)T z6Ob|NlW;&Y!C6;uhn$;ZfzN@0VNLk7&nZ(7hC2zz#i@y3nQQN>?=BN6zlJsGr;Yqv&7=<88pN_+uV*< zW3Gu=Q%uo5EeerbjUM%(y8e3~6?~t`*);(dA6BrE!v}iHZarA&+pa<~8Tj zF^j`}OTPa1G~!LQpLDXhp&kjc5%w|8ZocAtby1ITb@pw3QsG15$+@065&}lJz~v?9 zBUsaQ)hpkV3m*(-M_2fS5iV!Ci&N_^jvbA0b=xI>^G0%;@55wz`V_}J!u60|(4C>| z3B@{{Y4sQh9}L$A%pl>KhY27^f431hryZ2QPlyVD$?CrM-Cz5Oed1r@Qw5n$S?47_r;+VKy~GFd2a>lGQPc$4j$IxXyLtOO-yNo&Rl#a&qj@j0gwy%#QW|Gei{LCp3L}uabIO9(8Jm#WWa2}`zRx#@V~Z&uF*OH8eWb; z&&Gqe861AOox{vc`+C@-U#Q(OdIDNTPe9A)31}HT0WG5^pk?#~w2c1&Lk9@?L;U>N P00000NkvXXu0mjfMJeC+ diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_normal.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_normal.png deleted file mode 100644 index f9c26fc5b76052005b71aa41dc33545e3bf24982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2537 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 diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_pressed.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_control_pressed.png deleted file mode 100644 index 239ffc54189387944ab573bd741fa7db1143da76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667 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 E009gT!~g&Q diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_fullscreen_reader_white.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_fullscreen_reader_white.png deleted file mode 100644 index 969056d24dc16bfcbb9e828986c5fc10120593ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4355 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 LIj$0OA@Y9!Z#}{% diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_pause_reader_white.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_pause_reader_white.png deleted file mode 100644 index 2c386c24d3feded34053df74d93b227a2fd95ab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3673 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 diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader.png deleted file mode 100644 index 9df16013b46dc16f4da40dbda3faeca3cd8e75c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5354 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 diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader_white.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_play_reader_white.png deleted file mode 100644 index b5bc9a96cd8f0b2dc27ec08d621c7df05d485923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4552 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 diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_primary.9.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_primary.9.png deleted file mode 100644 index ed4171531cc3759ad55527c07e6e5fc04033c873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!3HFkD$jfgq!K(`977^n-`+ULdq9DQ<)CS9 z09)#kds8MF1+m*KXz!k~m*2l%M^UAsJcyPbLD*esmEXM8_Zo8PfQ@#Q1V(@hJb6Mw<&;$Tc C$1-OC diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_secondary.9.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_secondary.9.png deleted file mode 100644 index 0f2de4d9514f36e49cbfda92b50495131ba26611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!3HFkD$jfgq!K+{977^n-`+UL+n^xea&i9= zJ)OfwOJYwi;CXeR`I~{-znukhru%wCbg6gyXhrgEh}s~-z{qszqZo(40k(pe&FZI) z?|iPV;LyOp`0|H>phAONnf1S8EG&Pd1KvyiUb2hP{ts85b;`TtK+70BUHx3vIVCg! E0OfBs{Qv*} diff --git a/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_track.9.png b/libs/fullscreenvideoview/src/main/res/drawable-xxhdpi/fvl_track.9.png deleted file mode 100644 index 4014860d6c2f5cb2931d2b3eefaa5bfb935de9a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1094 zcmbVLOK8(z9M4ol$2L5;!#vE8`9f^-eM#FiVcl$-b}QOFx{AF_mL*@;u;pR$txX5w z^rW5?MA#1E#gpJ=m&rgc3W^um5M&oc#0NO%!HXc`mp-P4v4epx-{b%P{r>OkBSQo2 zt%q7EifYdc$~m&rWF6bLm;CSdEPNqb7fu!Mm{r6T#X(eDvnCOpF_bBkLyA_t_yYA( z)b665FW^Gx|r(;arsX}&yPFfD4 z!$A;GK?Kkd7=(OC5QI}S2OwYp$3iXu1&QY*0O-cY5NnQBlyY*qVT;^iObKIKV%bWi z60Gn+%b8-KD2hG@#|4N+z^$5C@dBpX(`1m5t2(-kb<3oEMrG2P#W99>S`Wdnv)L_T z(`_V*q>S|xn}tEZ8ipTNP20se^w*7TwcUKxMr;nb)~utFdK7z_V3NC?4f%@18)?|l zNl}y;*-~c>Wa5k*V~8ZE>6(;+$!I8)6a<+Aktl>w0jA?J6d=d(92er69NS^VbTY!h zP)g*&DF{K$z5~iOrZUR!kK&?drsC11s-{m68rpu;t_}Yo^%&BP9!4 zZppIgBV^z+`@w~VG^^Mpu z58C9>;iu!5+LnJFI3nFyO}}3mym7GV+ddg>JnZ|J}LK zMS*W+>I@;8UwwIkzkK(~(%a{!*M2=Xd7+PG8MlK-?j3$rSX|meJ#HEKbo}+`!sf0v Xs&l=YT3$T*gNUh2YDj*Vn7H}}X{TBo diff --git a/libs/fullscreenvideoview/src/main/res/drawable/fvl_progress.xml b/libs/fullscreenvideoview/src/main/res/drawable/fvl_progress.xml deleted file mode 100644 index 0a8173737..000000000 --- a/libs/fullscreenvideoview/src/main/res/drawable/fvl_progress.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - diff --git a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_fullscreen.xml b/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_fullscreen.xml deleted file mode 100644 index 9cce2d136..000000000 --- a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_fullscreen.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_pause.xml b/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_pause.xml deleted file mode 100644 index ed0d8a9a6..000000000 --- a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_pause.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_play.xml b/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_play.xml deleted file mode 100644 index 9511e6538..000000000 --- a/libs/fullscreenvideoview/src/main/res/drawable/fvl_selector_play.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/fullscreenvideoview/src/main/res/layout/view_videocontrols.xml b/libs/fullscreenvideoview/src/main/res/layout/view_videocontrols.xml deleted file mode 100644 index 8c8b53edf..000000000 --- a/libs/fullscreenvideoview/src/main/res/layout/view_videocontrols.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/fullscreenvideoview/src/main/res/values/strings.xml b/libs/fullscreenvideoview/src/main/res/values/strings.xml deleted file mode 100644 index 92951c27a..000000000 --- a/libs/fullscreenvideoview/src/main/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - VideoLayout - - Hello world! - Settings - diff --git a/settings.gradle b/settings.gradle index 591d3e182..333bfa6bc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,3 @@ include ':libs:android-transcoder' include ':libs:xmpp-addr' -include ':libs:fullscreenvideoview' rootProject.name = 'PixArtMessenger'