From ea73fea4a5c8e9ea4c39b9c59bd1431e1401c1a2 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Wed, 10 Dec 2025 23:13:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 21 +- EasyPlayerPro/build.gradle | 96 +- EasyPlayerPro/libs/gson-2.1.jar | Bin 180110 -> 0 bytes EasyPlayerPro/proguard-rules.pro | 25 +- .../rtsp/player/ApplicationTest.java | 13 - .../rtsp/player/CameraToMpegTest.java | 176 ++-- EasyPlayerPro/src/main/AndroidManifest.xml | 28 +- .../easydarwin/easyplayer/AboutActivity.java | 26 +- .../easyplayer/MediaFilesActivity.java | 14 +- .../easyplayer/PlayListActivity.java | 80 +- .../easyplayer/ProVideoActivity.java | 36 +- .../easydarwin/easyplayer/ScanQRActivity.java | 5 +- .../easyplayer/SettingsActivity.java | 5 +- .../easydarwin/easyplayer/SplashActivity.java | 7 +- .../fragments/LocalFileFragment.java | 23 +- .../easyplayer/views/ProVideoView.java | 33 +- .../easyplayer/views/SquareImageView.java | 3 +- .../src/main/res/layout/activity_about.xml | 74 +- .../src/main/res/layout/activity_main_pro.xml | 28 +- .../main/res/layout/activity_media_files.xml | 36 +- .../main/res/layout/activity_play_list.xml | 78 +- .../src/main/res/layout/activity_scan_qr.xml | 15 +- .../src/main/res/layout/activity_setting.xml | 4 +- .../src/main/res/layout/activity_splash.xml | 18 +- .../main/res/layout/fragment_media_file.xml | 2 +- .../src/main/res/layout/image_picker_item.xml | 4 +- .../src/main/res/layout/media_controller.xml | 85 +- .../res/layout/new_media_source_dialog.xml | 16 +- .../src/main/res/layout/video_source_item.xml | 11 +- build.gradle | 24 +- gradle.properties | 23 + gradle/libs.versions.toml | 30 + gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 319 ++++--- gradlew.bat | 90 +- ijkplayer-java/build.gradle | 35 +- ijkplayer-java/consumer-rules.pro | 11 + ijkplayer-java/proguard-rules.pro | 26 +- .../ijk/media/player/ApplicationTest.java | 13 - ijkplayer-java/src/main/.classpath | 10 - ijkplayer-java/src/main/.project | 33 - .../main/.settings/org.eclipse.jdt.core.prefs | 4 - ijkplayer-java/src/main/AndroidManifest.xml | 4 +- ijkplayer-java/src/main/project.properties | 15 - import-summary.txt | 203 ----- photoview/.gitignore | 1 + photoview/build.gradle | 36 + photoview/consumer-rules.pro | 0 photoview/proguard-rules.pro | 21 + .../photoview/ExampleInstrumentedTest.java | 26 + photoview/src/main/AndroidManifest.xml | 4 + .../github/chrisbanes/photoview/Compat.java | 39 + .../photoview/CustomGestureDetector.java | 214 +++++ .../photoview/OnGestureListener.java | 28 + .../photoview/OnMatrixChangedListener.java | 18 + .../photoview/OnOutsidePhotoTapListener.java | 14 + .../photoview/OnPhotoTapListener.java | 22 + .../photoview/OnScaleChangedListener.java | 17 + .../photoview/OnSingleFlingListener.java | 21 + .../photoview/OnViewDragListener.java | 16 + .../photoview/OnViewTapListener.java | 16 + .../chrisbanes/photoview/PhotoView.java | 256 ++++++ .../photoview/PhotoViewAttacher.java | 823 ++++++++++++++++++ .../com/github/chrisbanes/photoview/Util.java | 37 + .../chrisbanes/photoview/ExampleUnitTest.java | 17 + settings.gradle | 23 + 67 files changed, 2459 insertions(+), 997 deletions(-) delete mode 100644 EasyPlayerPro/libs/gson-2.1.jar delete mode 100644 EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/ApplicationTest.java create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 ijkplayer-java/consumer-rules.pro delete mode 100644 ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java delete mode 100644 ijkplayer-java/src/main/.classpath delete mode 100644 ijkplayer-java/src/main/.project delete mode 100644 ijkplayer-java/src/main/.settings/org.eclipse.jdt.core.prefs delete mode 100644 ijkplayer-java/src/main/project.properties delete mode 100644 import-summary.txt create mode 100644 photoview/.gitignore create mode 100644 photoview/build.gradle create mode 100644 photoview/consumer-rules.pro create mode 100644 photoview/proguard-rules.pro create mode 100644 photoview/src/androidTest/java/com/github/chrisbanes/photoview/ExampleInstrumentedTest.java create mode 100644 photoview/src/main/AndroidManifest.xml create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/Compat.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/CustomGestureDetector.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnGestureListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnMatrixChangedListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnOutsidePhotoTapListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnPhotoTapListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnScaleChangedListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnSingleFlingListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnViewDragListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/OnViewTapListener.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/PhotoView.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/PhotoViewAttacher.java create mode 100644 photoview/src/main/java/com/github/chrisbanes/photoview/Util.java create mode 100644 photoview/src/test/java/com/github/chrisbanes/photoview/ExampleUnitTest.java diff --git a/.gitignore b/.gitignore index 5664a63..fe3b002 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,11 @@ -/build -gen -.DS_Store -/obj -/ffmpeg_rtsp -.vscode -local.properties -gradle.properties -.gradle -.idea *.iml -/exo-library +.gradle +/local.properties +/.idea +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +/.kotlin \ No newline at end of file diff --git a/EasyPlayerPro/build.gradle b/EasyPlayerPro/build.gradle index e3f84c9..dc96c16 100644 --- a/EasyPlayerPro/build.gradle +++ b/EasyPlayerPro/build.gradle @@ -1,16 +1,22 @@ -apply plugin: 'com.android.application' +plugins { + alias(libs.plugins.android.application) +} android { - compileSdkVersion 26 - buildToolsVersion '28.0.3' + namespace "org.easydarwin.easyplayer" + compileSdk { + version = release(36) + } defaultConfig { - applicationId "org.easydarwin.easyplayer" - minSdkVersion 19 - targetSdkVersion 26 + applicationId "org.easydarwin.easyplayer.pro" + minSdk 28 + targetSdk 36 versionCode 14210703 versionName "1.4.21.0703" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + if (project.hasProperty('PLAYER_KEY')) { buildConfigField 'String', 'PLAYER_KEY', PLAYER_KEY } else { @@ -19,44 +25,27 @@ android { } ndk { - //设置支持的SO库架构 -// abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' - abiFilters 'x86', 'armeabi-v7a' + abiFilters 'armeabi-v7a'/*, 'arm64-v8a'*/ } } buildTypes { release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.debug } } - dataBinding { - enabled = true + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } - flavorDimensions "prod" - productFlavors { - pro { - applicationId "org.easydarwin.easyplayer.pro" - dimension "prod" - } - - /*fastPro { - applicationId "org.easydarwin.easyplayer.pro" - dimension "prod" - }*/ - - /*njjl { - applicationId "org.easydarwin.easyplayer.pro" - dimension "prod" - }*/ - } - - //签名配置 - signingConfigs { - + buildFeatures { + buildConfig true + viewBinding true + dataBinding true } android.applicationVariants.all { variant -> @@ -66,32 +55,19 @@ android { } } -repositories { - flatDir { - dirs 'libs' - } - - mavenCentral() -} - dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - - implementation files('libs/gson-2.1.jar') - - implementation "com.android.support:appcompat-v7:${support_version}" - implementation "com.android.support:support-v4:${support_version}" - implementation "com.android.support:preference-v7:${support_version}" - implementation "com.android.support:design:${support_version}" - implementation "com.android.support:cardview-v7:${support_version}" - -// implementation 'com.writingminds:FFmpegAndroid:0.3.2' - implementation 'com.github.bumptech.glide:glide:3.7.0' - implementation 'com.github.chrisbanes:PhotoView:1.3.0' - implementation 'com.squareup.okhttp3:okhttp:3.4.1' - implementation 'com.android.support.constraint:constraint-layout:1.0.2' - implementation 'com.budiyev.android:code-scanner:1.9.4' - - testImplementation 'junit:junit:4.12' + implementation libs.androidx.core.ktx + implementation libs.androidx.appcompat + implementation libs.androidx.constraintlayout + implementation libs.androidx.recyclerview + implementation libs.androidx.swiperefreshlayout + implementation libs.material.components + implementation libs.glide + implementation libs.code.scanner implementation project(':ijkplayer-java') + implementation project(':photoview') + + testImplementation libs.junit + androidTestImplementation libs.androidx.junit + androidTestImplementation libs.androidx.espresso.core } diff --git a/EasyPlayerPro/libs/gson-2.1.jar b/EasyPlayerPro/libs/gson-2.1.jar deleted file mode 100644 index b85f091a0d2e76b75babc21bdbe05ef118089910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180110 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
  • -UuCUewHwHK7&mZOv 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 z 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 JL;Eby{tu!-Czk*K diff --git a/EasyPlayerPro/proguard-rules.pro b/EasyPlayerPro/proguard-rules.pro index 6b1dc55..481bb43 100644 --- a/EasyPlayerPro/proguard-rules.pro +++ b/EasyPlayerPro/proguard-rules.pro @@ -1,30 +1,21 @@ # Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in D:\software\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. +# You can control the set of applied configuration files using the +# proguardFiles setting 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 *; #} -# 忽略警告 --ignorewarning --keepclassmembers class org.easydarwin.video.EasyRTSPClient { - public *; -} +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable --keepclassmembers class org.easydarwin.video.RTSPClient { - private void onRTSPSourceCallBack(int, int, int, byte[], byte[]); -} --keepclassmembers class org.easydarwin.video.RTSPClient$FrameInfo{ - *; -} \ No newline at end of file +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/ApplicationTest.java b/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/ApplicationTest.java deleted file mode 100644 index 0d8aa35..0000000 --- a/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.esaydarwin.rtsp.player; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/CameraToMpegTest.java b/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/CameraToMpegTest.java index 16089c7..3740e4f 100644 --- a/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/CameraToMpegTest.java +++ b/EasyPlayerPro/src/androidTest/java/org/esaydarwin/rtsp/player/CameraToMpegTest.java @@ -33,10 +33,14 @@ import android.opengl.GLES20; import android.opengl.Matrix; import android.os.Build; import android.os.Environment; -import android.test.AndroidTestCase; import android.util.Log; import android.view.Surface; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; @@ -66,8 +70,8 @@ import java.nio.FloatBuffer; * (This was derived from bits and pieces of CTS tests, and is packaged as such, but is not * currently part of CTS.) */ -@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) -public class CameraToMpegTest extends AndroidTestCase { +@RunWith(AndroidJUnit4.class) +public class CameraToMpegTest { private static final String TAG = "CameraToMpegTest"; private static final boolean VERBOSE = false; // lots of logging @@ -104,45 +108,41 @@ public class CameraToMpegTest extends AndroidTestCase { // allocate one of these up front so we don't need to do it every time private MediaCodec.BufferInfo mBufferInfo; - /** test entry point */ - public void testEncodeCameraToMp4() throws Throwable { - CameraToMpegWrapper.runTest(this); + /** + * Attempts to find a preview size that matches the provided width and height (which + * specify the dimensions of the encoded video). If it fails to find a match it just + * uses the default preview size. + *

    + * TODO: should do a best-fit match. + */ + private static void choosePreviewSize(Camera.Parameters parms, int width, int height) { + // We should make sure that the requested MPEG size is less than the preferred + // size, and has the same aspect ratio. + Camera.Size ppsfv = parms.getPreferredPreviewSizeForVideo(); + if (VERBOSE && ppsfv != null) { + Log.d(TAG, "Camera preferred preview size for video is " + + ppsfv.width + "x" + ppsfv.height); + } + + for (Camera.Size size : parms.getSupportedPreviewSizes()) { + if (size.width == width && size.height == height) { + parms.setPreviewSize(width, height); + return; + } + } + + Log.w(TAG, "Unable to set preview size to " + width + "x" + height); + if (ppsfv != null) { + parms.setPreviewSize(ppsfv.width, ppsfv.height); + } } /** - * Wraps encodeCameraToMpeg(). This is necessary because SurfaceTexture will try to use - * the looper in the current thread if one exists, and the CTS tests create one on the - * test thread. - * - * The wrapper propagates exceptions thrown by the worker thread back to the caller. + * test entry point */ - private static class CameraToMpegWrapper implements Runnable { - private Throwable mThrowable; - private CameraToMpegTest mTest; - - private CameraToMpegWrapper(CameraToMpegTest test) { - mTest = test; - } - - @Override - public void run() { - try { - mTest.encodeCameraToMpeg(); - } catch (Throwable th) { - mThrowable = th; - } - } - - /** Entry point. */ - public static void runTest(CameraToMpegTest obj) throws Throwable { - CameraToMpegWrapper wrapper = new CameraToMpegWrapper(obj); - Thread th = new Thread(wrapper, "codec test"); - th.start(); - th.join(); - if (wrapper.mThrowable != null) { - throw wrapper.mThrowable; - } - } + @Test + public void testEncodeCameraToMp4() throws Throwable { + CameraToMpegWrapper.runTest(this); } /** @@ -261,35 +261,6 @@ public class CameraToMpegTest extends AndroidTestCase { Log.d(TAG, "Camera preview size is " + size.width + "x" + size.height); } - /** - * Attempts to find a preview size that matches the provided width and height (which - * specify the dimensions of the encoded video). If it fails to find a match it just - * uses the default preview size. - *

    - * TODO: should do a best-fit match. - */ - private static void choosePreviewSize(Camera.Parameters parms, int width, int height) { - // We should make sure that the requested MPEG size is less than the preferred - // size, and has the same aspect ratio. - Camera.Size ppsfv = parms.getPreferredPreviewSizeForVideo(); - if (VERBOSE && ppsfv != null) { - Log.d(TAG, "Camera preferred preview size for video is " + - ppsfv.width + "x" + ppsfv.height); - } - - for (Camera.Size size : parms.getSupportedPreviewSizes()) { - if (size.width == width && size.height == height) { - parms.setPreviewSize(width, height); - return; - } - } - - Log.w(TAG, "Unable to set preview size to " + width + "x" + height); - if (ppsfv != null) { - parms.setPreviewSize(ppsfv.width, ppsfv.height); - } - } - /** * Stops camera preview, and releases the camera to the system. */ @@ -497,6 +468,43 @@ public class CameraToMpegTest extends AndroidTestCase { } } + /** + * Wraps encodeCameraToMpeg(). This is necessary because SurfaceTexture will try to use + * the looper in the current thread if one exists, and the CTS tests create one on the + * test thread. + *

    + * The wrapper propagates exceptions thrown by the worker thread back to the caller. + */ + private static class CameraToMpegWrapper implements Runnable { + private Throwable mThrowable; + private CameraToMpegTest mTest; + + private CameraToMpegWrapper(CameraToMpegTest test) { + mTest = test; + } + + /** + * Entry point. + */ + public static void runTest(CameraToMpegTest obj) throws Throwable { + CameraToMpegWrapper wrapper = new CameraToMpegWrapper(obj); + Thread th = new Thread(wrapper, "codec test"); + th.start(); + th.join(); + if (wrapper.mThrowable != null) { + throw wrapper.mThrowable; + } + } + + @Override + public void run() { + try { + mTest.encodeCameraToMpeg(); + } catch (Throwable th) { + mThrowable = th; + } + } + } /** * Holds state associated with a Surface used for MediaCodec encoder input. @@ -754,16 +762,6 @@ public class CameraToMpegTest extends AndroidTestCase { private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES; private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0; private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3; - private final float[] mTriangleVerticesData = { - // X, Y, Z, U, V - -1.0f, -1.0f, 0, 0.f, 0.f, - 1.0f, -1.0f, 0, 1.f, 0.f, - -1.0f, 1.0f, 0, 0.f, 1.f, - 1.0f, 1.0f, 0, 1.f, 1.f, - }; - - private FloatBuffer mTriangleVertices; - private static final String VERTEX_SHADER = "uniform mat4 uMVPMatrix;\n" + "uniform mat4 uSTMatrix;\n" + @@ -774,7 +772,6 @@ public class CameraToMpegTest extends AndroidTestCase { " gl_Position = uMVPMatrix * aPosition;\n" + " vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" + "}\n"; - private static final String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" + // highp here doesn't seem to matter @@ -783,7 +780,14 @@ public class CameraToMpegTest extends AndroidTestCase { "void main() {\n" + " gl_FragColor = texture2D(sTexture, vTextureCoord);\n" + "}\n"; - + private final float[] mTriangleVerticesData = { + // X, Y, Z, U, V + -1.0f, -1.0f, 0, 0.f, 0.f, + 1.0f, -1.0f, 0, 1.f, 0.f, + -1.0f, 1.0f, 0, 0.f, 1.f, + 1.0f, 1.0f, 0, 1.f, 1.f, + }; + private FloatBuffer mTriangleVertices; private float[] mMVPMatrix = new float[16]; private float[] mSTMatrix = new float[16]; @@ -796,13 +800,19 @@ public class CameraToMpegTest extends AndroidTestCase { public STextureRender() { mTriangleVertices = ByteBuffer.allocateDirect( - mTriangleVerticesData.length * FLOAT_SIZE_BYTES) + mTriangleVerticesData.length * FLOAT_SIZE_BYTES) .order(ByteOrder.nativeOrder()).asFloatBuffer(); mTriangleVertices.put(mTriangleVerticesData).position(0); Matrix.setIdentityM(mSTMatrix, 0); } + public static void checkLocation(int location, String label) { + if (location < 0) { + throw new RuntimeException("Unable to locate '" + label + "' in program"); + } + } + public int getTextureId() { return mTextureID; } @@ -952,11 +962,5 @@ public class CameraToMpegTest extends AndroidTestCase { throw new RuntimeException(op + ": glError " + error); } } - - public static void checkLocation(int location, String label) { - if (location < 0) { - throw new RuntimeException("Unable to locate '" + label + "' in program"); - } - } } } \ No newline at end of file diff --git a/EasyPlayerPro/src/main/AndroidManifest.xml b/EasyPlayerPro/src/main/AndroidManifest.xml index ed4da98..b030871 100644 --- a/EasyPlayerPro/src/main/AndroidManifest.xml +++ b/EasyPlayerPro/src/main/AndroidManifest.xml @@ -1,18 +1,25 @@ + xmlns:tools="http://schemas.android.com/tools"> + + - + - + @@ -50,15 +59,18 @@ android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/FullscreenTheme" /> - + - - - + + + diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/AboutActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/AboutActivity.java index 1a25e86..c757989 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/AboutActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/AboutActivity.java @@ -1,17 +1,18 @@ package org.easydarwin.easyplayer; import android.content.Intent; -import android.databinding.DataBindingUtil; import android.graphics.Color; import android.net.Uri; import android.os.Build; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ForegroundColorSpan; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; + import org.easydarwin.easyplayer.databinding.ActivityAboutBinding; import org.easydarwin.easyplayer.views.ProVideoView; @@ -43,7 +44,7 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList binding.version.setText("EasyPlayer Pro播放器"); binding.version.append("("); - long activeDays = ProVideoView.getActiveDays(this,BuildConfig.PLAYER_KEY); + long activeDays = ProVideoView.getActiveDays(this, BuildConfig.PLAYER_KEY); SpannableString ss; if (activeDays >= 9999) { @@ -76,20 +77,17 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList @Override public void onClick(View v) { - Intent intent= new Intent(); + Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("http://www.easydarwin.org"); - switch (v.getId()) { - case R.id.darwin_content_tv: - content_url = Uri.parse("http://www.easydarwin.org"); - break; - case R.id.dss_content_tv: - content_url = Uri.parse("http://www.easydss.com"); - break; - case R.id.nvr_content_tv: - content_url = Uri.parse("http://www.easynvr.com"); - break; + int id = v.getId(); + if (id == R.id.darwin_content_tv) { + content_url = Uri.parse("http://www.easydarwin.org"); + } else if (id == R.id.dss_content_tv) { + content_url = Uri.parse("http://www.easydss.com"); + } else if (id == R.id.nvr_content_tv) { + content_url = Uri.parse("http://www.easynvr.com"); } intent.setData(content_url); diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/MediaFilesActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/MediaFilesActivity.java index 839bbb9..234d20b 100755 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/MediaFilesActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/MediaFilesActivity.java @@ -1,13 +1,8 @@ package org.easydarwin.easyplayer; -import android.databinding.DataBindingUtil; import android.graphics.Color; import android.os.Build; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; @@ -15,12 +10,19 @@ import android.text.style.RelativeSizeSpan; import android.view.MenuItem; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentPagerAdapter; + import org.easydarwin.easyplayer.databinding.ActivityMediaFilesBinding; import org.easydarwin.easyplayer.fragments.LocalFileFragment; /** * 录像和截图 - * */ + * + */ public class MediaFilesActivity extends AppCompatActivity { private ActivityMediaFilesBinding mDataBinding; diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/PlayListActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/PlayListActivity.java index 0e8a460..099cffb 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/PlayListActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/PlayListActivity.java @@ -1,22 +1,17 @@ package org.easydarwin.easyplayer; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; + import android.Manifest; +import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.PackageManager; import android.database.Cursor; -import android.databinding.DataBindingUtil; import android.graphics.Color; import android.os.Build; import android.os.Bundle; -import android.support.v4.app.ActivityCompat; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -27,8 +22,15 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import com.bumptech.glide.Glide; -import com.bumptech.glide.signature.StringSignature; import org.easydarwin.easyplayer.data.VideoSource; import org.easydarwin.easyplayer.databinding.ActivityPlayListBinding; @@ -40,21 +42,18 @@ import org.easydarwin.easyplayer.views.ProVideoView; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.UUID; - -import static android.content.pm.PackageManager.PERMISSION_GRANTED; /** * 视频广场 - * */ + * + */ +@SuppressLint("Range") public class PlayListActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener { - private static final int REQUEST_PLAY = 1000; public static final int REQUEST_CAMERA_PERMISSION = 1001; - private static final int REQUEST_SCAN_TEXT_URL = 1003; // 扫描二维码 - public static final String EXTRA_BOOLEAN_SELECT_ITEM_TO_PLAY = "extra-boolean-select-item-to-play"; - + private static final int REQUEST_PLAY = 1000; + private static final int REQUEST_SCAN_TEXT_URL = 1003; // 扫描二维码 private int mPos; private ActivityPlayListBinding mBinding; private RecyclerView mRecyclerView; @@ -83,9 +82,7 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL mCursor = TheApp.sDB.query(VideoSource.TABLE_NAME, null, null, null, null, null, null); if (!mCursor.moveToFirst()) { List urls = new ArrayList<>(); - urls.add("rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov"); - urls.add("rtmp://live.hkstv.hk.lxdns.com/live/hks2"); - urls.add("http://www.easydarwin.org/public/video/3/video.m3u8"); + urls.add("rtsp://77.110.228.219/axis-media/media.amp"); urls.add("http://m4.pptvyun.com/pvod/e11a0/ijblO6coKRX6a8NEQgg8LDZcqPY/eyJkbCI6MTUxNjYyNTM3NSwiZXMiOjYwNDgwMCwiaWQiOiIwYTJkbnEtWG82S2VvcTZMNEsyZG9hZmhvNkNjbTY2WXB3IiwidiI6IjEuMCJ9/0a2dnq-Xo6Keoq6L4K2doafho6Ccm66Ypw.mp4"); for (String url : urls) { @@ -127,7 +124,6 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL Glide.with(PlayListActivity.this) .load(file) - .signature(new StringSignature(UUID.randomUUID().toString())) .placeholder(R.drawable.placeholder) .centerCrop() .into(plvh.mImageView); @@ -192,9 +188,10 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUEST_CAMERA_PERMISSION: { - if (grantResults.length > 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { + if (grantResults.length > 1 && grantResults[0] == PERMISSION_GRANTED && grantResults[1] == PERMISSION_GRANTED) { toScanQRActivity(); } @@ -310,9 +307,9 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL } if (url.toLowerCase().indexOf("rtsp://") != 0 && url.toLowerCase().indexOf("rtmp://") != 0 && - url.toLowerCase().indexOf("http://") != 0 && url.toLowerCase().indexOf("https://") != 0 && + url.toLowerCase().indexOf("http://") != 0 && url.toLowerCase().indexOf("https://") != 0 && url.toLowerCase().indexOf("hls://") != 0) { - Toast.makeText(PlayListActivity.this,"不是合法的地址,请重新添加.",Toast.LENGTH_SHORT).show(); + Toast.makeText(PlayListActivity.this, "不是合法的地址,请重新添加.", Toast.LENGTH_SHORT).show(); return; } @@ -361,7 +358,7 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL private void notifyAboutColorChange() { //// !!!! important to set KEY !!!! ProVideoView.setKey(BuildConfig.PLAYER_KEY); - long activeDays = ProVideoView.getActiveDays(this,BuildConfig.PLAYER_KEY); + long activeDays = ProVideoView.getActiveDays(this, BuildConfig.PLAYER_KEY); ImageView iv = findViewById(R.id.toolbar_about); @@ -379,9 +376,25 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL startActivity(i); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == REQUEST_SCAN_TEXT_URL) { + if (resultCode == RESULT_OK) { + String url = data.getStringExtra("text"); + edit.setText(url); + } + } else { +// mRecyclerView.getAdapter().notifyItemChanged(mPos); + mRecyclerView.getAdapter().notifyDataSetChanged(); + } + } + /** * 视频源的item - * */ + * + */ class PlayListViewHolder extends RecyclerView.ViewHolder { private final TextView mTextView; private final TextView mAudienceNumber; @@ -399,19 +412,4 @@ public class PlayListActivity extends AppCompatActivity implements View.OnClickL itemView.setTag(this); } } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == REQUEST_SCAN_TEXT_URL) { - if (resultCode == RESULT_OK) { - String url = data.getStringExtra("text"); - edit.setText(url); - } - } else { -// mRecyclerView.getAdapter().notifyItemChanged(mPos); - mRecyclerView.getAdapter().notifyDataSetChanged(); - } - } } diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ProVideoActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ProVideoActivity.java index 0253435..5c1e227 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ProVideoActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ProVideoActivity.java @@ -16,24 +16,19 @@ package org.easydarwin.easyplayer; * limitations under the License. */ +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; + import android.Manifest; import android.content.ContentResolver; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; -import android.databinding.DataBindingUtil; import android.graphics.Color; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.ViewConfigurationCompat; -import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.GestureDetector; @@ -45,6 +40,13 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.view.ViewCompat; +import androidx.core.view.ViewConfigurationCompat; +import androidx.databinding.DataBindingUtil; + import com.bumptech.glide.Glide; import org.easydarwin.easyplayer.databinding.ActivityMainProBinding; @@ -60,13 +62,9 @@ import java.util.Date; import tv.danmaku.ijk.media.player.IMediaPlayer; import tv.danmaku.ijk.media.player.IjkMediaPlayer; -import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; - public class ProVideoActivity extends AppCompatActivity { - private static final String TAG = "ProVideoActivity"; - public static final int REQUEST_WRITE_STORAGE = 111; - + private static final String TAG = "ProVideoActivity"; private String mVideoPath; private Uri mVideoUri; @@ -315,8 +313,8 @@ public class ProVideoActivity extends AppCompatActivity { TextView view = (TextView) findViewById(R.id.loading_speed); view.setText(String.format("%3.01fKB/s", received * 1.0f / 1024)); - if (findViewById(android.R.id.progress).getVisibility() == View.VISIBLE){ - mVideoView.postDelayed(this,1000); + if (findViewById(android.R.id.progress).getVisibility() == View.VISIBLE) { + mVideoView.postDelayed(this, 1000); } } }; @@ -368,7 +366,7 @@ public class ProVideoActivity extends AppCompatActivity { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (REQUEST_WRITE_STORAGE == requestCode){ + if (REQUEST_WRITE_STORAGE == requestCode) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { doTakePicture(); } @@ -426,11 +424,11 @@ public class ProVideoActivity extends AppCompatActivity { } /* - * 截图 - * */ + * 截图 + * */ public void onTakePicture(View view) { if (mVideoView.isInPlaybackState()) { - if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE); } else { doTakePicture(); @@ -446,7 +444,7 @@ public class ProVideoActivity extends AppCompatActivity { final String picture = mVideoView.takePicture(file.getPath()); if (!TextUtils.isEmpty(picture)) { - Toast.makeText(ProVideoActivity.this,"图片已保存", Toast.LENGTH_SHORT).show(); + Toast.makeText(ProVideoActivity.this, "图片已保存", Toast.LENGTH_SHORT).show(); if (mScanner == null) { MediaScannerConnection connection = new MediaScannerConnection(ProVideoActivity.this, new MediaScannerConnection.MediaScannerConnectionClient() { diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ScanQRActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ScanQRActivity.java index 0f33f2c..ad342e9 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ScanQRActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/ScanQRActivity.java @@ -2,11 +2,12 @@ package org.easydarwin.easyplayer; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.budiyev.android.codescanner.CodeScanner; import com.budiyev.android.codescanner.CodeScannerView; import com.budiyev.android.codescanner.DecodeCallback; diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SettingsActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SettingsActivity.java index 6a657f2..0dfd57a 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SettingsActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SettingsActivity.java @@ -1,13 +1,14 @@ package org.easydarwin.easyplayer; -import android.databinding.DataBindingUtil; import android.graphics.Color; import android.os.Build; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.CompoundButton; +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; + import org.easydarwin.easyplayer.databinding.ActivitySettingBinding; import org.easydarwin.easyplayer.util.SPUtil; diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SplashActivity.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SplashActivity.java index 94cdb7b..42c4bf1 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SplashActivity.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/SplashActivity.java @@ -4,12 +4,13 @@ import android.annotation.SuppressLint; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + /** * 启动页 */ @@ -53,7 +54,6 @@ public class SplashActivity extends AppCompatActivity { } } }; - private boolean mVisible; private final Runnable mHideRunnable = new Runnable() { @Override public void run() { @@ -74,6 +74,7 @@ public class SplashActivity extends AppCompatActivity { return false; } }; + private boolean mVisible; @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/fragments/LocalFileFragment.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/fragments/LocalFileFragment.java index 2a0988c..afe24bb 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/fragments/LocalFileFragment.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/fragments/LocalFileFragment.java @@ -2,14 +2,8 @@ package org.easydarwin.easyplayer.fragments; import android.content.ActivityNotFoundException; import android.content.Intent; -import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.SparseArray; import android.view.LayoutInflater; @@ -20,9 +14,15 @@ import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.Toast; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.bumptech.glide.Glide; -import org.easydarwin.easyplayer.PlayListActivity; import org.easydarwin.easyplayer.ProVideoActivity; import org.easydarwin.easyplayer.R; import org.easydarwin.easyplayer.databinding.FragmentMediaFileBinding; @@ -34,16 +34,13 @@ import java.io.FilenameFilter; public class LocalFileFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { public static final String KEY_IS_RECORD = "key_last_selection"; - - private boolean mShowMp4File; - private FragmentMediaFileBinding mBinding; - SparseArray mImageChecked; - - private String mSuffix; File mRoot = null; File[] mSubFiles; int mImgHeight; + private boolean mShowMp4File; + private FragmentMediaFileBinding mBinding; + private String mSuffix; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/ProVideoView.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/ProVideoView.java index 7cf2d8d..e505ad9 100644 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/ProVideoView.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/ProVideoView.java @@ -1,13 +1,16 @@ package org.easydarwin.easyplayer.views; +import static tv.danmaku.ijk.media.player.IjkMediaPlayer.native_active_days; + import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.net.Uri; -import android.support.v4.app.ActivityCompat; import android.text.TextUtils; import android.util.AttributeSet; +import androidx.core.app.ActivityCompat; + import org.easydarwin.easyplayer.ProVideoActivity; import org.easydarwin.easyplayer.util.FileUtil; @@ -18,11 +21,9 @@ import java.util.Date; import tv.danmaku.ijk.media.player.IjkMediaPlayer; import tv.danmaku.ijk.media.widget.media.IjkVideoView; -import static tv.danmaku.ijk.media.player.IjkMediaPlayer.native_active_days; - /** * 播放器 - * + *

    * Created by apple on 2017/2/11. */ public class ProVideoView extends IjkVideoView implements VideoControllerView.FullScreenAbleMediaPlayerControl { @@ -53,19 +54,21 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu return native_active_days(context, key); } - /** ================ super override ================ */ + /** + * ================ super override ================ + */ public void startRecord(String path, int seconds) { if (mMediaPlayer == null) { return; } - super.startRecord(path,seconds); + super.startRecord(path, seconds); mRecordPath = path; } public void stopRecord() { - if (mMediaPlayer == null){ + if (mMediaPlayer == null) { return; } @@ -73,7 +76,9 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu mRecordPath = null; } - /** ================ FullScreenAbleMediaPlayerControl ================ */ + /** + * ================ FullScreenAbleMediaPlayerControl ================ + */ @Override public boolean isFullScreen() { @@ -131,7 +136,7 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu @Override public void reStart() { super.reStart(); - if (mRecordPath != null){ + if (mRecordPath != null) { toggleRecord(); toggleRecord(); } @@ -142,8 +147,8 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu if (getContext() instanceof ProVideoActivity) { ProVideoActivity pro = (ProVideoActivity) getContext(); - if (ActivityCompat.checkSelfPermission(pro, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ - ActivityCompat.requestPermissions(pro, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, ProVideoActivity.REQUEST_WRITE_STORAGE +1); + if (ActivityCompat.checkSelfPermission(pro, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(pro, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, ProVideoActivity.REQUEST_WRITE_STORAGE + 1); return; } } @@ -184,8 +189,8 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu @Override public void setSpeed(float speed) { - if (mMediaPlayer == null ) { - return ; + if (mMediaPlayer == null) { + return; } if (mMediaPlayer instanceof IjkMediaPlayer) { @@ -196,7 +201,7 @@ public class ProVideoView extends IjkVideoView implements VideoControllerView.Fu @Override public void takePicture() { - if (getContext() instanceof ProVideoActivity){ + if (getContext() instanceof ProVideoActivity) { ProVideoActivity pro = (ProVideoActivity) getContext(); pro.onTakePicture(null); } diff --git a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/SquareImageView.java b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/SquareImageView.java index a30dbae..ad320dd 100755 --- a/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/SquareImageView.java +++ b/EasyPlayerPro/src/main/java/org/easydarwin/easyplayer/views/SquareImageView.java @@ -3,12 +3,11 @@ package org.easydarwin.easyplayer.views; import android.content.Context; import android.os.Build; import android.util.AttributeSet; -import android.widget.ImageView; /** * Created by John on 2014/11/11. */ -public class SquareImageView extends ImageView { +public class SquareImageView extends androidx.appcompat.widget.AppCompatImageView { public SquareImageView(Context context) { super(context); diff --git a/EasyPlayerPro/src/main/res/layout/activity_about.xml b/EasyPlayerPro/src/main/res/layout/activity_about.xml index ae76471..3b57487 100644 --- a/EasyPlayerPro/src/main/res/layout/activity_about.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_about.xml @@ -1,17 +1,15 @@ - + + android:background="@color/colorWhite" + android:orientation="vertical"> - + android:layout_centerHorizontal="true" + android:layout_marginBottom="12dp" + android:gravity="center" + android:text="版本信息" + android:textColor="#ffffff" + android:textSize="18sp" /> + android:layout_marginBottom="0dp" + android:src="@drawable/new_nav_back" /> - + - @@ -69,17 +67,17 @@ android:id="@+id/desc" android:layout_width="0dp" android:layout_height="wrap_content" - android:text="@string/about_info" - android:textSize="15sp" - android:lineSpacingExtra="5dp" - android:layout_marginTop="8dp" - app:layout_constraintTop_toBottomOf="@+id/version" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintRight_toRightOf="parent" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" + android:layout_marginTop="8dp" android:layout_marginEnd="16dp" - android:layout_marginRight="16dp" /> + android:layout_marginRight="16dp" + android:lineSpacingExtra="5dp" + android:text="@string/about_info" + android:textSize="15sp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@+id/version" /> @@ -129,8 +127,8 @@ android:layout_marginTop="5dp" android:layout_marginRight="16dp" android:text="http://www.easydss.com" - android:textSize="14sp" android:textColor="@color/colorTheme2" + android:textSize="14sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/dss_tv" /> @@ -173,18 +171,18 @@ app:layout_constraintTop_toBottomOf="@+id/nvr_content_tv" /> - + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@+id/imageView" /> + diff --git a/EasyPlayerPro/src/main/res/layout/activity_main_pro.xml b/EasyPlayerPro/src/main/res/layout/activity_main_pro.xml index e34b62b..d6164d3 100644 --- a/EasyPlayerPro/src/main/res/layout/activity_main_pro.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_main_pro.xml @@ -9,24 +9,24 @@ tools:context="org.easydarwin.easyplayer.PlayActivity"> + android:visibility="gone" /> + android:layout_height="match_parent" + android:keepScreenOn="true" /> + android:text="加载中" + android:textColor="@color/colorTheme" /> @@ -77,16 +77,16 @@ android:id="@+id/player_container" android:layout_width="match_parent" android:layout_height="200dp" - android:background="#fff" android:layout_gravity="center" + android:background="#fff" android:gravity="center" - android:visibility="gone" - android:orientation="vertical"> + android:orientation="vertical" + android:visibility="gone"> + android:src="@drawable/new_lost" /> diff --git a/EasyPlayerPro/src/main/res/layout/activity_media_files.xml b/EasyPlayerPro/src/main/res/layout/activity_media_files.xml index bf33680..1ce81bf 100755 --- a/EasyPlayerPro/src/main/res/layout/activity_media_files.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_media_files.xml @@ -6,10 +6,10 @@ + android:background="@color/colorWhite" + android:orientation="vertical"> - + android:layout_centerHorizontal="true" + android:layout_marginBottom="12dp" + android:gravity="center" + android:text="文件夹" + android:textColor="#ffffff" + android:textSize="18sp" /> + android:layout_marginBottom="0dp" + android:src="@drawable/new_nav_back" /> - + - - - + diff --git a/EasyPlayerPro/src/main/res/layout/activity_play_list.xml b/EasyPlayerPro/src/main/res/layout/activity_play_list.xml index 43b9e7b..38e26d9 100644 --- a/EasyPlayerPro/src/main/res/layout/activity_play_list.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_play_list.xml @@ -1,17 +1,15 @@ - - + android:layout_centerHorizontal="true" + android:layout_marginBottom="12dp" + android:gravity="center" + android:text="EasyPlayer Pro" + android:textColor="#ffffff" + android:textSize="18sp" /> + android:layout_marginBottom="0dp" + android:src="@drawable/new_version1" /> - + + android:text="地址" + android:textColor="@drawable/new_color_text" + android:textSize="13sp" /> + android:textSize="13sp" /> + android:text="设置" + android:textColor="@drawable/new_color_text" + android:textSize="13sp" /> - + android:layout_above="@id/bottom_ll" + android:layout_below="@id/toolbar"> - - + diff --git a/EasyPlayerPro/src/main/res/layout/activity_scan_qr.xml b/EasyPlayerPro/src/main/res/layout/activity_scan_qr.xml index 298d711..a5b8d11 100644 --- a/EasyPlayerPro/src/main/res/layout/activity_scan_qr.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_scan_qr.xml @@ -1,6 +1,5 @@ - @@ -13,19 +12,19 @@ app:autoFocusButtonVisible="false" app:flashButtonColor="@android:color/white" app:flashButtonVisible="true" + app:frameAspectRatioHeight="1" + app:frameAspectRatioWidth="1" app:frameColor="@android:color/white" app:frameCornersSize="50dp" - app:frameAspectRatioWidth="1" - app:frameAspectRatioHeight="1" app:frameSize="0.75" app:frameThickness="2dp" - app:maskColor="#66000000"/> + app:maskColor="#66000000" /> + android:padding="18dp" + android:src="@drawable/new_nav_back" /> \ No newline at end of file diff --git a/EasyPlayerPro/src/main/res/layout/activity_setting.xml b/EasyPlayerPro/src/main/res/layout/activity_setting.xml index ce05fa7..8e32a96 100644 --- a/EasyPlayerPro/src/main/res/layout/activity_setting.xml +++ b/EasyPlayerPro/src/main/res/layout/activity_setting.xml @@ -9,7 +9,7 @@ android:background="@color/colorWhite" android:orientation="vertical"> - - + + android:textSize="20sp" /> + android:textSize="12sp" /> - - + android:textSize="12sp" /> \ No newline at end of file diff --git a/EasyPlayerPro/src/main/res/layout/fragment_media_file.xml b/EasyPlayerPro/src/main/res/layout/fragment_media_file.xml index c5e856d..00a814c 100755 --- a/EasyPlayerPro/src/main/res/layout/fragment_media_file.xml +++ b/EasyPlayerPro/src/main/res/layout/fragment_media_file.xml @@ -1,7 +1,7 @@ - diff --git a/EasyPlayerPro/src/main/res/layout/image_picker_item.xml b/EasyPlayerPro/src/main/res/layout/image_picker_item.xml index 5f89470..4ebf1ec 100755 --- a/EasyPlayerPro/src/main/res/layout/image_picker_item.xml +++ b/EasyPlayerPro/src/main/res/layout/image_picker_item.xml @@ -10,8 +10,8 @@ android:layout_width="match_parent" android:layout_height="128dp" android:layout_margin="1dp" - android:background="#666" android:adjustViewBounds="true" + android:background="#666" android:scaleType="centerCrop" /> + android:src="@drawable/new_player" /> - @@ -17,26 +16,26 @@ android:id="@+id/tv_speed" style="@style/Widget.AppCompat.ActionButton" android:layout_width="0dp" - android:layout_weight="1" android:layout_height="wrap_content" - android:visibility="gone" - android:textColor="@color/white" /> + android:layout_weight="1" + android:textColor="@color/white" + android:visibility="gone" /> + android:layout_weight="1" + android:textColor="@color/white" + android:visibility="gone" /> @@ -49,38 +48,38 @@ + android:layout_weight="1" + android:contentDescription="@string/description" + android:src="@drawable/new_slow_btn" /> + android:layout_weight="1" + android:contentDescription="@string/description" + android:src="@drawable/new_moveback_btn" /> + android:layout_weight="1" + android:contentDescription="@string/description" + android:src="@drawable/new_stop_white" /> + android:layout_weight="1" + android:contentDescription="@string/description" + android:src="@drawable/new_forward_btn" /> + android:layout_weight="1" + android:contentDescription="@string/description" + android:src="@drawable/new_fast_btn" /> @@ -95,52 +94,52 @@ android:id="@+id/action_take_picture" style="@style/Widget.AppCompat.ActionButton" android:layout_width="0dp" - android:layout_weight="1" android:layout_height="wrap_content" + android:layout_weight="1" android:src="@drawable/new_snapshot_btn" /> + android:drawablePadding="5dp" + android:gravity="center" + android:text="00:00" + android:textColor="#ff0000" + android:visibility="gone" /> @@ -150,20 +149,20 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:paddingLeft="4dip" - android:paddingRight="4dip" android:paddingTop="4dip" - android:textSize="14sp" + android:paddingRight="4dip" android:textColor="@color/white" + android:textSize="14sp" android:textStyle="bold" /> + android:layout_weight="1" + android:progress="10" + android:secondaryProgress="60" /> diff --git a/EasyPlayerPro/src/main/res/layout/new_media_source_dialog.xml b/EasyPlayerPro/src/main/res/layout/new_media_source_dialog.xml index c99db64..5f13d40 100644 --- a/EasyPlayerPro/src/main/res/layout/new_media_source_dialog.xml +++ b/EasyPlayerPro/src/main/res/layout/new_media_source_dialog.xml @@ -1,8 +1,6 @@ - @@ -11,12 +9,12 @@ android:id="@+id/new_media_scan" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/new_scan_btn" - android:background="@null" - app:layout_constraintRight_toRightOf="parent" android:layout_marginRight="8dp" - app:layout_constraintTop_toTopOf="@id/new_media_source_url" - app:layout_constraintBottom_toBottomOf="@id/new_media_source_url" /> + android:background="@null" + android:src="@drawable/new_scan_btn" + app:layout_constraintBottom_toBottomOf="@id/new_media_source_url" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="@id/new_media_source_url" /> - \ No newline at end of file + \ No newline at end of file diff --git a/EasyPlayerPro/src/main/res/layout/video_source_item.xml b/EasyPlayerPro/src/main/res/layout/video_source_item.xml index 0a4edf3..1ea8045 100644 --- a/EasyPlayerPro/src/main/res/layout/video_source_item.xml +++ b/EasyPlayerPro/src/main/res/layout/video_source_item.xml @@ -1,13 +1,12 @@ - + android:layout_marginTop="@dimen/activity_vertical_margin" + android:layout_marginRight="@dimen/activity_horizontal_margin"> - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index a56062d..9c5ba57 100644 --- a/build.gradle +++ b/build.gradle @@ -1,22 +1,4 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' - } +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false } - -allprojects { - repositories { - jcenter() - maven { url "https://jitpack.io" } - google() - } -} - -ext{ - support_version='26.1.0' -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..20e2a01 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..115386a --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,30 @@ +[versions] +agp = "8.13.1" +coreKtx = "1.17.0" +junit = "4.13.2" +junitVersion = "1.3.0" +espressoCore = "3.7.0" +appcompat = "1.7.1" +constraintlayout = "2.2.1" +recyclerview = "1.4.0" +swiperefreshlayout = "1.2.0" +materialComponents = "1.13.0" +glide = "5.0.5" +code-scanner = "2.3.0" + +[libraries] +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" } +androidx-swiperefreshlayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swiperefreshlayout" } +material-components = { group = "com.google.android.material", name = "material", version.ref = "materialComponents" } +glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } +code-scanner = { group = "com.github.yuriy-budiyev", name = "code-scanner", version.ref = "code-scanner" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +android-library = { id = "com.android.library", version.ref = "agp" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 13372aef5e24af05341d49695ee84e5f9b594659..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch literal 43764 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ⅅ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 H-+%o-(+5aQ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6b319b5..d4081da 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Sat Apr 06 13:56:34 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/gradlew b/gradlew index 9d82f78..23d15a9 100644 --- a/gradlew +++ b/gradlew @@ -1,74 +1,129 @@ -#!/usr/bin/env bash +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# 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 +# +# https://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. +# +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum -warn ( ) { +warn () { echo "$*" -} +} >&2 -die ( ) { +die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null +CLASSPATH="\\\"\\\"" -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -77,84 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..db3a6ac 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,22 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -8,26 +26,30 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -35,54 +57,36 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/ijkplayer-java/build.gradle b/ijkplayer-java/build.gradle index 7bd1f43..6f687af 100644 --- a/ijkplayer-java/build.gradle +++ b/ijkplayer-java/build.gradle @@ -1,27 +1,28 @@ -apply plugin: 'com.android.library' +plugins { + alias(libs.plugins.android.library) +} android { - compileSdkVersion 26 - lintOptions { - abortOnError false + namespace "tv.danmaku.ijk.media.player" + compileSdk { + version = release(36) } + defaultConfig { - minSdkVersion 16 - targetSdkVersion 26 - consumerProguardFiles 'proguard-rules.pro' - versionCode 38 - versionName "1.1.17.1124" + minSdk 28 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" } + buildTypes { release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - buildToolsVersion '28.0.3' + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') -} - diff --git a/ijkplayer-java/consumer-rules.pro b/ijkplayer-java/consumer-rules.pro new file mode 100644 index 0000000..07b3994 --- /dev/null +++ b/ijkplayer-java/consumer-rules.pro @@ -0,0 +1,11 @@ +-keepparameternames +-keepattributes Exceptions,InnerClasses,Signature,Deprecated,EnclosingMethod +-keep class tv.danmaku.ijk.media.widget.media.IjkVideoView { + public protected *; +} +-keep class tv.danmaku.ijk.media.widget.media.IMediaController { + public protected *; +} +-keep class tv.danmaku.ijk.media.player.** { + *; +} \ No newline at end of file diff --git a/ijkplayer-java/proguard-rules.pro b/ijkplayer-java/proguard-rules.pro index 2d96c93..481bb43 100644 --- a/ijkplayer-java/proguard-rules.pro +++ b/ijkplayer-java/proguard-rules.pro @@ -1,31 +1,21 @@ # Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /opt/android/ADK/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. +# You can control the set of applied configuration files using the +# proguardFiles setting 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 *; #} --keepparameternames --renamesourcefileattribute SourceFile --keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod --keep class tv.danmaku.ijk.media.widget.media.IjkVideoView { - public protected *; -} --keep class tv.danmaku.ijk.media.widget.media.IMediaController { - public protected *; -} +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable --keep class tv.danmaku.ijk.media.player.** { - *; -} +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java b/ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java deleted file mode 100644 index 60d1d73..0000000 --- a/ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package tv.danmaku.ijk.media.player; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/ijkplayer-java/src/main/.classpath b/ijkplayer-java/src/main/.classpath deleted file mode 100644 index b3caa8c..0000000 --- a/ijkplayer-java/src/main/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/ijkplayer-java/src/main/.project b/ijkplayer-java/src/main/.project deleted file mode 100644 index 31663eb..0000000 --- a/ijkplayer-java/src/main/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - ijkplayer-java - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/ijkplayer-java/src/main/.settings/org.eclipse.jdt.core.prefs b/ijkplayer-java/src/main/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b080d2d..0000000 --- a/ijkplayer-java/src/main/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/ijkplayer-java/src/main/AndroidManifest.xml b/ijkplayer-java/src/main/AndroidManifest.xml index e45a047..a5918e6 100644 --- a/ijkplayer-java/src/main/AndroidManifest.xml +++ b/ijkplayer-java/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + + \ No newline at end of file diff --git a/ijkplayer-java/src/main/project.properties b/ijkplayer-java/src/main/project.properties deleted file mode 100644 index 362a0a3..0000000 --- a/ijkplayer-java/src/main/project.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-22 -android.library=true diff --git a/import-summary.txt b/import-summary.txt deleted file mode 100644 index f83e3ca..0000000 --- a/import-summary.txt +++ /dev/null @@ -1,203 +0,0 @@ -ECLIPSE ANDROID PROJECT IMPORT SUMMARY -====================================== - -Manifest Merging: ------------------ -Your project uses libraries that provide manifests, and your Eclipse -project did not explicitly turn on manifest merging. In Android Gradle -projects, manifests are always merged (meaning that contents from your -libraries' manifests will be merged into the app manifest. If you had -manually copied contents from library manifests into your app manifest -you may need to remove these for the app to build correctly. - -Ignored Files: --------------- -The following files were *not* copied into the new Gradle project; you -should evaluate whether these are still needed in your project and if -so manually move them: - -From MediaUploader: -* .idea\ -* .idea\.name -* .idea\MediaUploader.iml -* .idea\compiler.xml -* .idea\copyright\ -* .idea\copyright\profiles_settings.xml -* .idea\encodings.xml -* .idea\misc.xml -* .idea\modules.xml -* .idea\vcs.xml -* .idea\workspace.xml -* ic_launcher-web.png -* proguard-project.txt -From libstreaming: -* .gitignore -* LICENSE -* README.md -* build.xml -* doc\ -* doc\allclasses-frame.html -* doc\allclasses-noframe.html -* doc\constant-values.html -* doc\deprecated-list.html -* doc\help-doc.html -* doc\index-all.html -* doc\index.html -* doc\net\ -* doc\net\majorkernelpanic\ -* doc\net\majorkernelpanic\streaming\ -* doc\net\majorkernelpanic\streaming\MediaStream.html -* doc\net\majorkernelpanic\streaming\Session.Callback.html -* doc\net\majorkernelpanic\streaming\Session.html -* doc\net\majorkernelpanic\streaming\SessionBuilder.html -* doc\net\majorkernelpanic\streaming\Stream.html -* doc\net\majorkernelpanic\streaming\audio\ -* doc\net\majorkernelpanic\streaming\audio\AACStream.html -* doc\net\majorkernelpanic\streaming\audio\AMRNBStream.html -* doc\net\majorkernelpanic\streaming\audio\AudioQuality.html -* doc\net\majorkernelpanic\streaming\audio\AudioStream.html -* doc\net\majorkernelpanic\streaming\audio\package-frame.html -* doc\net\majorkernelpanic\streaming\audio\package-summary.html -* doc\net\majorkernelpanic\streaming\audio\package-tree.html -* doc\net\majorkernelpanic\streaming\exceptions\ -* doc\net\majorkernelpanic\streaming\exceptions\CameraInUseException.html -* doc\net\majorkernelpanic\streaming\exceptions\ConfNotSupportedException.html -* doc\net\majorkernelpanic\streaming\exceptions\InvalidSurfaceException.html -* doc\net\majorkernelpanic\streaming\exceptions\StorageUnavailableException.html -* doc\net\majorkernelpanic\streaming\exceptions\package-frame.html -* doc\net\majorkernelpanic\streaming\exceptions\package-summary.html -* doc\net\majorkernelpanic\streaming\exceptions\package-tree.html -* doc\net\majorkernelpanic\streaming\gl\ -* doc\net\majorkernelpanic\streaming\gl\SurfaceManager.html -* doc\net\majorkernelpanic\streaming\gl\SurfaceView.ViewAspectRatioMeasurer.html -* doc\net\majorkernelpanic\streaming\gl\SurfaceView.html -* doc\net\majorkernelpanic\streaming\gl\TextureManager.html -* doc\net\majorkernelpanic\streaming\gl\package-frame.html -* doc\net\majorkernelpanic\streaming\gl\package-summary.html -* doc\net\majorkernelpanic\streaming\gl\package-tree.html -* doc\net\majorkernelpanic\streaming\hw\ -* doc\net\majorkernelpanic\streaming\hw\CodecManager.html -* doc\net\majorkernelpanic\streaming\hw\EncoderDebugger.html -* doc\net\majorkernelpanic\streaming\hw\NV21Convertor.html -* doc\net\majorkernelpanic\streaming\hw\package-frame.html -* doc\net\majorkernelpanic\streaming\hw\package-summary.html -* doc\net\majorkernelpanic\streaming\hw\package-tree.html -* doc\net\majorkernelpanic\streaming\mp4\ -* doc\net\majorkernelpanic\streaming\mp4\MP4Config.html -* doc\net\majorkernelpanic\streaming\mp4\MP4Parser.html -* doc\net\majorkernelpanic\streaming\mp4\package-frame.html -* doc\net\majorkernelpanic\streaming\mp4\package-summary.html -* doc\net\majorkernelpanic\streaming\mp4\package-tree.html -* doc\net\majorkernelpanic\streaming\package-frame.html -* doc\net\majorkernelpanic\streaming\package-summary.html -* doc\net\majorkernelpanic\streaming\package-tree.html -* doc\net\majorkernelpanic\streaming\rtcp\ -* doc\net\majorkernelpanic\streaming\rtcp\SenderReport.html -* doc\net\majorkernelpanic\streaming\rtcp\package-frame.html -* doc\net\majorkernelpanic\streaming\rtcp\package-summary.html -* doc\net\majorkernelpanic\streaming\rtcp\package-tree.html -* doc\net\majorkernelpanic\streaming\rtp\ -* doc\net\majorkernelpanic\streaming\rtp\AACADTSPacketizer.html -* doc\net\majorkernelpanic\streaming\rtp\AACLATMPacketizer.html -* doc\net\majorkernelpanic\streaming\rtp\AMRNBPacketizer.html -* doc\net\majorkernelpanic\streaming\rtp\AbstractPacketizer.html -* doc\net\majorkernelpanic\streaming\rtp\H263Packetizer.html -* doc\net\majorkernelpanic\streaming\rtp\H264Packetizer.html -* doc\net\majorkernelpanic\streaming\rtp\MediaCodecInputStream.html -* doc\net\majorkernelpanic\streaming\rtp\RtpSocket.html -* doc\net\majorkernelpanic\streaming\rtp\package-frame.html -* doc\net\majorkernelpanic\streaming\rtp\package-summary.html -* doc\net\majorkernelpanic\streaming\rtp\package-tree.html -* doc\net\majorkernelpanic\streaming\rtsp\ -* doc\net\majorkernelpanic\streaming\rtsp\RtspClient.Callback.html -* doc\net\majorkernelpanic\streaming\rtsp\RtspClient.html -* doc\net\majorkernelpanic\streaming\rtsp\RtspServer.CallbackListener.html -* doc\net\majorkernelpanic\streaming\rtsp\RtspServer.LocalBinder.html -* doc\net\majorkernelpanic\streaming\rtsp\RtspServer.html -* doc\net\majorkernelpanic\streaming\rtsp\UriParser.html -* doc\net\majorkernelpanic\streaming\rtsp\package-frame.html -* doc\net\majorkernelpanic\streaming\rtsp\package-summary.html -* doc\net\majorkernelpanic\streaming\rtsp\package-tree.html -* doc\net\majorkernelpanic\streaming\video\ -* doc\net\majorkernelpanic\streaming\video\CodecManager.html -* doc\net\majorkernelpanic\streaming\video\H263Stream.html -* doc\net\majorkernelpanic\streaming\video\H264Stream.html -* doc\net\majorkernelpanic\streaming\video\VideoQuality.html -* doc\net\majorkernelpanic\streaming\video\VideoStream.html -* doc\net\majorkernelpanic\streaming\video\package-frame.html -* doc\net\majorkernelpanic\streaming\video\package-summary.html -* doc\net\majorkernelpanic\streaming\video\package-tree.html -* doc\overview-frame.html -* doc\overview-summary.html -* doc\overview-tree.html -* doc\package-list -* doc\resources\ -* doc\resources\background.gif -* doc\resources\tab.gif -* doc\resources\titlebar.gif -* doc\resources\titlebar_end.gif -* doc\serialized-form.html -* doc\stylesheet.css -* pom.xml -* proguard-project.txt - -Replaced Jars with Dependencies: --------------------------------- -The importer recognized the following .jar files as third party -libraries and replaced them with Gradle dependencies instead. This has -the advantage that more explicit version information is known, and the -libraries can be updated automatically. However, it is possible that -the .jar file in your project was of an older version than the -dependency we picked, which could render the project not compileable. -You can disable the jar replacement in the import wizard and try again: - -android-support-v4.jar => com.android.support:support-v4:19.1.0 -android-support-v7-appcompat.jar => com.android.support:appcompat-v7:19.1.0 -gson-2.2.2_android.jar => com.google.code.gson:gson:2.3.1 - -Replaced Libraries with Dependencies: -------------------------------------- -The importer recognized the following library projects as third party -libraries and replaced them with Gradle dependencies instead. This has -the advantage that more explicit version information is known, and the -libraries can be updated automatically. However, it is possible that -the source files in your project were of an older version than the -dependency we picked, which could render the project not compileable. -You can disable the library replacement in the import wizard and try -again: - -android-support-v7-appcompat => [com.android.support:appcompat-v7:19.1.0] - -Moved Files: ------------- -Android Gradle projects use a different directory structure than ADT -Eclipse projects. Here's how the projects were restructured: - -In libstreaming: -* AndroidManifest.xml => libstreaming\src\main\AndroidManifest.xml -* assets\ => libstreaming\src\main\assets -* libs\android-logging-log4j-1.0.3.jar => libstreaming\libs\android-logging-log4j-1.0.3.jar -* libs\log4j-1.2.17.jar => libstreaming\libs\log4j-1.2.17.jar -* res\ => libstreaming\src\main\res -* src\ => libstreaming\src\main\java\ -In MediaUploader: -* AndroidManifest.xml => mediaUploader\src\main\AndroidManifest.xml -* assets\ => mediaUploader\src\main\assets -* libs\armeabi\libUtils.so => mediaUploader\src\main\jniLibs\armeabi\libUtils.so -* res\ => mediaUploader\src\main\res\ -* src\ => mediaUploader\src\main\java\ - -Next Steps: ------------ -You can now build the project. The Gradle project needs network -connectivity to download dependencies. - -Bugs: ------ -If for some reason your project does not build, and you determine that -it is due to a bug or limitation of the Eclipse to Gradle importer, -please file a bug at http://b.android.com with category -Component-Tools. - -(This import summary is for your information only, and can be deleted -after import once you are satisfied with the results.) diff --git a/photoview/.gitignore b/photoview/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/photoview/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/photoview/build.gradle b/photoview/build.gradle new file mode 100644 index 0000000..7d1a6a8 --- /dev/null +++ b/photoview/build.gradle @@ -0,0 +1,36 @@ +plugins { + alias(libs.plugins.android.library) +} + +android { + namespace 'com.github.chrisbanes.photoview' + compileSdk { + version = release(36) + } + + defaultConfig { + minSdk 28 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation libs.androidx.appcompat + implementation libs.material.components + testImplementation libs.junit + androidTestImplementation libs.androidx.junit + androidTestImplementation libs.androidx.espresso.core +} \ No newline at end of file diff --git a/photoview/consumer-rules.pro b/photoview/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/photoview/proguard-rules.pro b/photoview/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/photoview/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/photoview/src/androidTest/java/com/github/chrisbanes/photoview/ExampleInstrumentedTest.java b/photoview/src/androidTest/java/com/github/chrisbanes/photoview/ExampleInstrumentedTest.java new file mode 100644 index 0000000..3d7592f --- /dev/null +++ b/photoview/src/androidTest/java/com/github/chrisbanes/photoview/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.github.chrisbanes.photoview; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.github.chrisbanes.photoview.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/photoview/src/main/AndroidManifest.xml b/photoview/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/photoview/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/Compat.java b/photoview/src/main/java/com/github/chrisbanes/photoview/Compat.java new file mode 100644 index 0000000..d33c31c --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/Compat.java @@ -0,0 +1,39 @@ +/* + Copyright 2011, 2012 Chris Banes. + + 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.chrisbanes.photoview; + +import android.annotation.TargetApi; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.view.View; + +class Compat { + + private static final int SIXTY_FPS_INTERVAL = 1000 / 60; + + public static void postOnAnimation(View view, Runnable runnable) { + if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { + postOnAnimationJellyBean(view, runnable); + } else { + view.postDelayed(runnable, SIXTY_FPS_INTERVAL); + } + } + + @TargetApi(16) + private static void postOnAnimationJellyBean(View view, Runnable runnable) { + view.postOnAnimation(runnable); + } +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/CustomGestureDetector.java b/photoview/src/main/java/com/github/chrisbanes/photoview/CustomGestureDetector.java new file mode 100644 index 0000000..aea97a7 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/CustomGestureDetector.java @@ -0,0 +1,214 @@ +/* + Copyright 2011, 2012 Chris Banes. +

    + 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.chrisbanes.photoview; + +import android.content.Context; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.VelocityTracker; +import android.view.ViewConfiguration; + +/** + * Does a whole lot of gesture detecting. + */ +class CustomGestureDetector { + + private static final int INVALID_POINTER_ID = -1; + + private int mActivePointerId = INVALID_POINTER_ID; + private int mActivePointerIndex = 0; + private final ScaleGestureDetector mDetector; + + private VelocityTracker mVelocityTracker; + private boolean mIsDragging; + private float mLastTouchX; + private float mLastTouchY; + private final float mTouchSlop; + private final float mMinimumVelocity; + private OnGestureListener mListener; + + CustomGestureDetector(Context context, OnGestureListener listener) { + final ViewConfiguration configuration = ViewConfiguration + .get(context); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mTouchSlop = configuration.getScaledTouchSlop(); + + mListener = listener; + ScaleGestureDetector.OnScaleGestureListener mScaleListener = new ScaleGestureDetector.OnScaleGestureListener() { + private float lastFocusX, lastFocusY = 0; + + @Override + public boolean onScale(ScaleGestureDetector detector) { + float scaleFactor = detector.getScaleFactor(); + + if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) + return false; + + if (scaleFactor >= 0) { + mListener.onScale(scaleFactor, + detector.getFocusX(), + detector.getFocusY(), + detector.getFocusX() - lastFocusX, + detector.getFocusY() - lastFocusY + ); + lastFocusX = detector.getFocusX(); + lastFocusY = detector.getFocusY(); + } + return true; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + lastFocusX = detector.getFocusX(); + lastFocusY = detector.getFocusY(); + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + // NO-OP + } + }; + mDetector = new ScaleGestureDetector(context, mScaleListener); + } + + private float getActiveX(MotionEvent ev) { + try { + return ev.getX(mActivePointerIndex); + } catch (Exception e) { + return ev.getX(); + } + } + + private float getActiveY(MotionEvent ev) { + try { + return ev.getY(mActivePointerIndex); + } catch (Exception e) { + return ev.getY(); + } + } + + public boolean isScaling() { + return mDetector.isInProgress(); + } + + public boolean isDragging() { + return mIsDragging; + } + + public boolean onTouchEvent(MotionEvent ev) { + try { + mDetector.onTouchEvent(ev); + return processTouchEvent(ev); + } catch (IllegalArgumentException e) { + // Fix for support lib bug, happening when onDestroy is called + return true; + } + } + + private boolean processTouchEvent(MotionEvent ev) { + final int action = ev.getAction(); + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + mActivePointerId = ev.getPointerId(0); + + mVelocityTracker = VelocityTracker.obtain(); + if (null != mVelocityTracker) { + mVelocityTracker.addMovement(ev); + } + + mLastTouchX = getActiveX(ev); + mLastTouchY = getActiveY(ev); + mIsDragging = false; + break; + case MotionEvent.ACTION_MOVE: + final float x = getActiveX(ev); + final float y = getActiveY(ev); + final float dx = x - mLastTouchX, dy = y - mLastTouchY; + + if (!mIsDragging) { + // Use Pythagoras to see if drag length is larger than + // touch slop + mIsDragging = Math.sqrt((dx * dx) + (dy * dy)) >= mTouchSlop; + } + + if (mIsDragging) { + mListener.onDrag(dx, dy); + mLastTouchX = x; + mLastTouchY = y; + + if (null != mVelocityTracker) { + mVelocityTracker.addMovement(ev); + } + } + break; + case MotionEvent.ACTION_CANCEL: + mActivePointerId = INVALID_POINTER_ID; + // Recycle Velocity Tracker + if (null != mVelocityTracker) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + break; + case MotionEvent.ACTION_UP: + mActivePointerId = INVALID_POINTER_ID; + if (mIsDragging) { + if (null != mVelocityTracker) { + mLastTouchX = getActiveX(ev); + mLastTouchY = getActiveY(ev); + + // Compute velocity within the last 1000ms + mVelocityTracker.addMovement(ev); + mVelocityTracker.computeCurrentVelocity(1000); + + final float vX = mVelocityTracker.getXVelocity(), vY = mVelocityTracker + .getYVelocity(); + + // If the velocity is greater than minVelocity, call + // listener + if (Math.max(Math.abs(vX), Math.abs(vY)) >= mMinimumVelocity) { + mListener.onFling(mLastTouchX, mLastTouchY, -vX, + -vY); + } + } + } + + // Recycle Velocity Tracker + if (null != mVelocityTracker) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + break; + case MotionEvent.ACTION_POINTER_UP: + final int pointerIndex = Util.getPointerIndex(ev.getAction()); + final int pointerId = ev.getPointerId(pointerIndex); + if (pointerId == mActivePointerId) { + // This was our active pointer going up. Choose a new + // active pointer and adjust accordingly. + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + mActivePointerId = ev.getPointerId(newPointerIndex); + mLastTouchX = ev.getX(newPointerIndex); + mLastTouchY = ev.getY(newPointerIndex); + } + break; + } + + mActivePointerIndex = ev + .findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId + : 0); + return true; + } +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnGestureListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnGestureListener.java new file mode 100644 index 0000000..37caf68 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnGestureListener.java @@ -0,0 +1,28 @@ +/* + Copyright 2011, 2012 Chris Banes. + + 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.chrisbanes.photoview; + +interface OnGestureListener { + + void onDrag(float dx, float dy); + + void onFling(float startX, float startY, float velocityX, + float velocityY); + + void onScale(float scaleFactor, float focusX, float focusY); + + void onScale(float scaleFactor, float focusX, float focusY, float dx, float dy); +} \ No newline at end of file diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnMatrixChangedListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnMatrixChangedListener.java new file mode 100644 index 0000000..f3031d6 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnMatrixChangedListener.java @@ -0,0 +1,18 @@ +package com.github.chrisbanes.photoview; + +import android.graphics.RectF; + +/** + * Interface definition for a callback to be invoked when the internal Matrix has changed for + * this View. + */ +public interface OnMatrixChangedListener { + + /** + * Callback for when the Matrix displaying the Drawable has changed. This could be because + * the View's bounds have changed, or the user has zoomed. + * + * @param rect - Rectangle displaying the Drawable's new bounds. + */ + void onMatrixChanged(RectF rect); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnOutsidePhotoTapListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnOutsidePhotoTapListener.java new file mode 100644 index 0000000..99fc7b4 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnOutsidePhotoTapListener.java @@ -0,0 +1,14 @@ +package com.github.chrisbanes.photoview; + +import android.widget.ImageView; + +/** + * Callback when the user tapped outside of the photo + */ +public interface OnOutsidePhotoTapListener { + + /** + * The outside of the photo has been tapped + */ + void onOutsidePhotoTap(ImageView imageView); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnPhotoTapListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnPhotoTapListener.java new file mode 100644 index 0000000..5f6f070 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnPhotoTapListener.java @@ -0,0 +1,22 @@ +package com.github.chrisbanes.photoview; + +import android.widget.ImageView; + +/** + * A callback to be invoked when the Photo is tapped with a single + * tap. + */ +public interface OnPhotoTapListener { + + /** + * A callback to receive where the user taps on a photo. You will only receive a callback if + * the user taps on the actual photo, tapping on 'whitespace' will be ignored. + * + * @param view ImageView the user tapped. + * @param x where the user tapped from the of the Drawable, as percentage of the + * Drawable width. + * @param y where the user tapped from the top of the Drawable, as percentage of the + * Drawable height. + */ + void onPhotoTap(ImageView view, float x, float y); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnScaleChangedListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnScaleChangedListener.java new file mode 100644 index 0000000..c6bb7a6 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnScaleChangedListener.java @@ -0,0 +1,17 @@ +package com.github.chrisbanes.photoview; + + +/** + * Interface definition for callback to be invoked when attached ImageView scale changes + */ +public interface OnScaleChangedListener { + + /** + * Callback for when the scale changes + * + * @param scaleFactor the scale factor (less than 1 for zoom out, greater than 1 for zoom in) + * @param focusX focal point X position + * @param focusY focal point Y position + */ + void onScaleChange(float scaleFactor, float focusX, float focusY); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnSingleFlingListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnSingleFlingListener.java new file mode 100644 index 0000000..f5dab92 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnSingleFlingListener.java @@ -0,0 +1,21 @@ +package com.github.chrisbanes.photoview; + +import android.view.MotionEvent; + +/** + * A callback to be invoked when the ImageView is flung with a single + * touch + */ +public interface OnSingleFlingListener { + + /** + * A callback to receive where the user flings on a ImageView. You will receive a callback if + * the user flings anywhere on the view. + * + * @param e1 MotionEvent the user first touch. + * @param e2 MotionEvent the user last touch. + * @param velocityX distance of user's horizontal fling. + * @param velocityY distance of user's vertical fling. + */ + boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewDragListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewDragListener.java new file mode 100644 index 0000000..66999a5 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewDragListener.java @@ -0,0 +1,16 @@ +package com.github.chrisbanes.photoview; + +/** + * Interface definition for a callback to be invoked when the photo is experiencing a drag event + */ +public interface OnViewDragListener { + + /** + * Callback for when the photo is experiencing a drag event. This cannot be invoked when the + * user is scaling. + * + * @param dx The change of the coordinates in the x-direction + * @param dy The change of the coordinates in the y-direction + */ + void onDrag(float dx, float dy); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewTapListener.java b/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewTapListener.java new file mode 100644 index 0000000..6856255 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/OnViewTapListener.java @@ -0,0 +1,16 @@ +package com.github.chrisbanes.photoview; + +import android.view.View; + +public interface OnViewTapListener { + + /** + * A callback to receive where the user taps on a ImageView. You will receive a callback if + * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored. + * + * @param view - View the user tapped. + * @param x - where the user tapped from the left of the View. + * @param y - where the user tapped from the top of the View. + */ + void onViewTap(View view, float x, float y); +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoView.java b/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoView.java new file mode 100644 index 0000000..8a8ba0a --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoView.java @@ -0,0 +1,256 @@ +/* + Copyright 2011, 2012 Chris Banes. +

    + 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.chrisbanes.photoview; + +import android.content.Context; +import android.graphics.Matrix; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.util.AttributeSet; +import android.view.GestureDetector; + +import androidx.appcompat.widget.AppCompatImageView; + +/** + * A zoomable ImageView. See {@link PhotoViewAttacher} for most of the details on how the zooming + * is accomplished + */ +@SuppressWarnings("unused") +public class PhotoView extends AppCompatImageView { + + private PhotoViewAttacher attacher; + private ScaleType pendingScaleType; + + public PhotoView(Context context) { + this(context, null); + } + + public PhotoView(Context context, AttributeSet attr) { + this(context, attr, 0); + } + + public PhotoView(Context context, AttributeSet attr, int defStyle) { + super(context, attr, defStyle); + init(); + } + + private void init() { + attacher = new PhotoViewAttacher(this); + //We always pose as a Matrix scale type, though we can change to another scale type + //via the attacher + super.setScaleType(ScaleType.MATRIX); + //apply the previously applied scale type + if (pendingScaleType != null) { + setScaleType(pendingScaleType); + pendingScaleType = null; + } + } + + /** + * Get the current {@link PhotoViewAttacher} for this view. Be wary of holding on to references + * to this attacher, as it has a reference to this view, which, if a reference is held in the + * wrong place, can cause memory leaks. + * + * @return the attacher. + */ + public PhotoViewAttacher getAttacher() { + return attacher; + } + + @Override + public ScaleType getScaleType() { + return attacher.getScaleType(); + } + + @Override + public Matrix getImageMatrix() { + return attacher.getImageMatrix(); + } + + @Override + public void setOnLongClickListener(OnLongClickListener l) { + attacher.setOnLongClickListener(l); + } + + @Override + public void setOnClickListener(OnClickListener l) { + attacher.setOnClickListener(l); + } + + @Override + public void setScaleType(ScaleType scaleType) { + if (attacher == null) { + pendingScaleType = scaleType; + } else { + attacher.setScaleType(scaleType); + } + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + // setImageBitmap calls through to this method + if (attacher != null) { + attacher.update(); + } + } + + @Override + public void setImageResource(int resId) { + super.setImageResource(resId); + if (attacher != null) { + attacher.update(); + } + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + if (attacher != null) { + attacher.update(); + } + } + + @Override + protected boolean setFrame(int l, int t, int r, int b) { + boolean changed = super.setFrame(l, t, r, b); + if (changed) { + attacher.update(); + } + return changed; + } + + public void setRotationTo(float rotationDegree) { + attacher.setRotationTo(rotationDegree); + } + + public void setRotationBy(float rotationDegree) { + attacher.setRotationBy(rotationDegree); + } + + public boolean isZoomable() { + return attacher.isZoomable(); + } + + public void setZoomable(boolean zoomable) { + attacher.setZoomable(zoomable); + } + + public RectF getDisplayRect() { + return attacher.getDisplayRect(); + } + + public void getDisplayMatrix(Matrix matrix) { + attacher.getDisplayMatrix(matrix); + } + + @SuppressWarnings("UnusedReturnValue") public boolean setDisplayMatrix(Matrix finalRectangle) { + return attacher.setDisplayMatrix(finalRectangle); + } + + public void getSuppMatrix(Matrix matrix) { + attacher.getSuppMatrix(matrix); + } + + public boolean setSuppMatrix(Matrix matrix) { + return attacher.setDisplayMatrix(matrix); + } + + public float getMinimumScale() { + return attacher.getMinimumScale(); + } + + public float getMediumScale() { + return attacher.getMediumScale(); + } + + public float getMaximumScale() { + return attacher.getMaximumScale(); + } + + public float getScale() { + return attacher.getScale(); + } + + public void setAllowParentInterceptOnEdge(boolean allow) { + attacher.setAllowParentInterceptOnEdge(allow); + } + + public void setMinimumScale(float minimumScale) { + attacher.setMinimumScale(minimumScale); + } + + public void setMediumScale(float mediumScale) { + attacher.setMediumScale(mediumScale); + } + + public void setMaximumScale(float maximumScale) { + attacher.setMaximumScale(maximumScale); + } + + public void setScaleLevels(float minimumScale, float mediumScale, float maximumScale) { + attacher.setScaleLevels(minimumScale, mediumScale, maximumScale); + } + + public void setOnMatrixChangeListener(OnMatrixChangedListener listener) { + attacher.setOnMatrixChangeListener(listener); + } + + public void setOnPhotoTapListener(OnPhotoTapListener listener) { + attacher.setOnPhotoTapListener(listener); + } + + public void setOnOutsidePhotoTapListener(OnOutsidePhotoTapListener listener) { + attacher.setOnOutsidePhotoTapListener(listener); + } + + public void setOnViewTapListener(OnViewTapListener listener) { + attacher.setOnViewTapListener(listener); + } + + public void setOnViewDragListener(OnViewDragListener listener) { + attacher.setOnViewDragListener(listener); + } + + public void setScale(float scale) { + attacher.setScale(scale); + } + + public void setScale(float scale, boolean animate) { + attacher.setScale(scale, animate); + } + + public void setScale(float scale, float focalX, float focalY, boolean animate) { + attacher.setScale(scale, focalX, focalY, animate); + } + + public void setZoomTransitionDuration(int milliseconds) { + attacher.setZoomTransitionDuration(milliseconds); + } + + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleTapListener) { + attacher.setOnDoubleTapListener(onDoubleTapListener); + } + + public void setOnScaleChangeListener(OnScaleChangedListener onScaleChangedListener) { + attacher.setOnScaleChangeListener(onScaleChangedListener); + } + + public void setOnSingleFlingListener(OnSingleFlingListener onSingleFlingListener) { + attacher.setOnSingleFlingListener(onSingleFlingListener); + } +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoViewAttacher.java b/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoViewAttacher.java new file mode 100644 index 0000000..55965b8 --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/PhotoViewAttacher.java @@ -0,0 +1,823 @@ +/* + Copyright 2011, 2012 Chris Banes. +

    + 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.chrisbanes.photoview; + +import android.content.Context; +import android.graphics.Matrix; +import android.graphics.Matrix.ScaleToFit; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnLongClickListener; +import android.view.ViewParent; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.ImageView; +import android.widget.ImageView.ScaleType; +import android.widget.OverScroller; + +/** + * The component of {@link PhotoView} which does the work allowing for zooming, scaling, panning, etc. + * It is made public in case you need to subclass something other than AppCompatImageView and still + * gain the functionality that {@link PhotoView} offers + */ +public class PhotoViewAttacher implements View.OnTouchListener, + View.OnLayoutChangeListener { + + private static float DEFAULT_MAX_SCALE = 3.0f; + private static float DEFAULT_MID_SCALE = 1.75f; + private static float DEFAULT_MIN_SCALE = 1.0f; + private static int DEFAULT_ZOOM_DURATION = 200; + + private static final int HORIZONTAL_EDGE_NONE = -1; + private static final int HORIZONTAL_EDGE_LEFT = 0; + private static final int HORIZONTAL_EDGE_RIGHT = 1; + private static final int HORIZONTAL_EDGE_BOTH = 2; + private static final int VERTICAL_EDGE_NONE = -1; + private static final int VERTICAL_EDGE_TOP = 0; + private static final int VERTICAL_EDGE_BOTTOM = 1; + private static final int VERTICAL_EDGE_BOTH = 2; + private static int SINGLE_TOUCH = 1; + + private Interpolator mInterpolator = new AccelerateDecelerateInterpolator(); + private int mZoomDuration = DEFAULT_ZOOM_DURATION; + private float mMinScale = DEFAULT_MIN_SCALE; + private float mMidScale = DEFAULT_MID_SCALE; + private float mMaxScale = DEFAULT_MAX_SCALE; + + private boolean mAllowParentInterceptOnEdge = true; + private boolean mBlockParentIntercept = false; + + private ImageView mImageView; + + // Gesture Detectors + private GestureDetector mGestureDetector; + private CustomGestureDetector mScaleDragDetector; + + // These are set so we don't keep allocating them on the heap + private final Matrix mBaseMatrix = new Matrix(); + private final Matrix mDrawMatrix = new Matrix(); + private final Matrix mSuppMatrix = new Matrix(); + private final RectF mDisplayRect = new RectF(); + private final float[] mMatrixValues = new float[9]; + + // Listeners + private OnMatrixChangedListener mMatrixChangeListener; + private OnPhotoTapListener mPhotoTapListener; + private OnOutsidePhotoTapListener mOutsidePhotoTapListener; + private OnViewTapListener mViewTapListener; + private View.OnClickListener mOnClickListener; + private OnLongClickListener mLongClickListener; + private OnScaleChangedListener mScaleChangeListener; + private OnSingleFlingListener mSingleFlingListener; + private OnViewDragListener mOnViewDragListener; + + private FlingRunnable mCurrentFlingRunnable; + private int mHorizontalScrollEdge = HORIZONTAL_EDGE_BOTH; + private int mVerticalScrollEdge = VERTICAL_EDGE_BOTH; + private float mBaseRotation; + + private boolean mZoomEnabled = true; + private ScaleType mScaleType = ScaleType.FIT_CENTER; + + private OnGestureListener onGestureListener = new OnGestureListener() { + @Override + public void onDrag(float dx, float dy) { + if (mScaleDragDetector.isScaling()) { + return; // Do not drag if we are already scaling + } + if (mOnViewDragListener != null) { + mOnViewDragListener.onDrag(dx, dy); + } + mSuppMatrix.postTranslate(dx, dy); + checkAndDisplayMatrix(); + + /* + * Here we decide whether to let the ImageView's parent to start taking + * over the touch event. + * + * First we check whether this function is enabled. We never want the + * parent to take over if we're scaling. We then check the edge we're + * on, and the direction of the scroll (i.e. if we're pulling against + * the edge, aka 'overscrolling', let the parent take over). + */ + ViewParent parent = mImageView.getParent(); + if (mAllowParentInterceptOnEdge && !mScaleDragDetector.isScaling() && !mBlockParentIntercept) { + if (mHorizontalScrollEdge == HORIZONTAL_EDGE_BOTH + || (mHorizontalScrollEdge == HORIZONTAL_EDGE_LEFT && dx >= 1f) + || (mHorizontalScrollEdge == HORIZONTAL_EDGE_RIGHT && dx <= -1f) + || (mVerticalScrollEdge == VERTICAL_EDGE_TOP && dy >= 1f) + || (mVerticalScrollEdge == VERTICAL_EDGE_BOTTOM && dy <= -1f)) { + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(false); + } + } + } else { + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + } + } + + @Override + public void onFling(float startX, float startY, float velocityX, float velocityY) { + mCurrentFlingRunnable = new FlingRunnable(mImageView.getContext()); + mCurrentFlingRunnable.fling(getImageViewWidth(mImageView), + getImageViewHeight(mImageView), (int) velocityX, (int) velocityY); + mImageView.post(mCurrentFlingRunnable); + } + + @Override + public void onScale(float scaleFactor, float focusX, float focusY) { + onScale(scaleFactor, focusX, focusY, 0, 0); + } + + @Override + public void onScale(float scaleFactor, float focusX, float focusY, float dx, float dy) { + if (getScale() < mMaxScale || scaleFactor < 1f) { + if (mScaleChangeListener != null) { + mScaleChangeListener.onScaleChange(scaleFactor, focusX, focusY); + } + mSuppMatrix.postScale(scaleFactor, scaleFactor, focusX, focusY); + mSuppMatrix.postTranslate(dx, dy); + checkAndDisplayMatrix(); + } + } + }; + + public PhotoViewAttacher(ImageView imageView) { + mImageView = imageView; + imageView.setOnTouchListener(this); + imageView.addOnLayoutChangeListener(this); + if (imageView.isInEditMode()) { + return; + } + mBaseRotation = 0.0f; + // Create Gesture Detectors... + mScaleDragDetector = new CustomGestureDetector(imageView.getContext(), onGestureListener); + mGestureDetector = new GestureDetector(imageView.getContext(), new GestureDetector.SimpleOnGestureListener() { + + // forward long click listener + @Override + public void onLongPress(MotionEvent e) { + if (mLongClickListener != null) { + mLongClickListener.onLongClick(mImageView); + } + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, + float velocityX, float velocityY) { + if (mSingleFlingListener != null) { + if (getScale() > DEFAULT_MIN_SCALE) { + return false; + } + if (e1.getPointerCount() > SINGLE_TOUCH + || e2.getPointerCount() > SINGLE_TOUCH) { + return false; + } + return mSingleFlingListener.onFling(e1, e2, velocityX, velocityY); + } + return false; + } + }); + mGestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (mOnClickListener != null) { + mOnClickListener.onClick(mImageView); + } + final RectF displayRect = getDisplayRect(); + final float x = e.getX(), y = e.getY(); + if (mViewTapListener != null) { + mViewTapListener.onViewTap(mImageView, x, y); + } + if (displayRect != null) { + // Check to see if the user tapped on the photo + if (displayRect.contains(x, y)) { + float xResult = (x - displayRect.left) + / displayRect.width(); + float yResult = (y - displayRect.top) + / displayRect.height(); + if (mPhotoTapListener != null) { + mPhotoTapListener.onPhotoTap(mImageView, xResult, yResult); + } + return true; + } else { + if (mOutsidePhotoTapListener != null) { + mOutsidePhotoTapListener.onOutsidePhotoTap(mImageView); + } + } + } + return false; + } + + @Override + public boolean onDoubleTap(MotionEvent ev) { + try { + float scale = getScale(); + float x = ev.getX(); + float y = ev.getY(); + if (scale < getMediumScale()) { + setScale(getMediumScale(), x, y, true); + } else if (scale >= getMediumScale() && scale < getMaximumScale()) { + setScale(getMaximumScale(), x, y, true); + } else { + setScale(getMinimumScale(), x, y, true); + } + } catch (ArrayIndexOutOfBoundsException e) { + // Can sometimes happen when getX() and getY() is called + } + return true; + } + + @Override + public boolean onDoubleTapEvent(MotionEvent e) { + // Wait for the confirmed onDoubleTap() instead + return false; + } + }); + } + + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) { + this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener); + } + + public void setOnScaleChangeListener(OnScaleChangedListener onScaleChangeListener) { + this.mScaleChangeListener = onScaleChangeListener; + } + + public void setOnSingleFlingListener(OnSingleFlingListener onSingleFlingListener) { + this.mSingleFlingListener = onSingleFlingListener; + } + + @Deprecated + public boolean isZoomEnabled() { + return mZoomEnabled; + } + + public RectF getDisplayRect() { + checkMatrixBounds(); + return getDisplayRect(getDrawMatrix()); + } + + public boolean setDisplayMatrix(Matrix finalMatrix) { + if (finalMatrix == null) { + throw new IllegalArgumentException("Matrix cannot be null"); + } + if (mImageView.getDrawable() == null) { + return false; + } + mSuppMatrix.set(finalMatrix); + checkAndDisplayMatrix(); + return true; + } + + public void setBaseRotation(final float degrees) { + mBaseRotation = degrees % 360; + update(); + setRotationBy(mBaseRotation); + checkAndDisplayMatrix(); + } + + public void setRotationTo(float degrees) { + mSuppMatrix.setRotate(degrees % 360); + checkAndDisplayMatrix(); + } + + public void setRotationBy(float degrees) { + mSuppMatrix.postRotate(degrees % 360); + checkAndDisplayMatrix(); + } + + public float getMinimumScale() { + return mMinScale; + } + + public float getMediumScale() { + return mMidScale; + } + + public float getMaximumScale() { + return mMaxScale; + } + + public float getScale() { + return (float) Math.sqrt((float) Math.pow(getValue(mSuppMatrix, Matrix.MSCALE_X), 2) + (float) Math.pow + (getValue(mSuppMatrix, Matrix.MSKEW_Y), 2)); + } + + public ScaleType getScaleType() { + return mScaleType; + } + + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int + oldRight, int oldBottom) { + // Update our base matrix, as the bounds have changed + if (left != oldLeft || top != oldTop || right != oldRight || bottom != oldBottom) { + updateBaseMatrix(mImageView.getDrawable()); + } + } + + @Override + public boolean onTouch(View v, MotionEvent ev) { + boolean handled = false; + if (mZoomEnabled && Util.hasDrawable((ImageView) v)) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + ViewParent parent = v.getParent(); + // First, disable the Parent from intercepting the touch + // event + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + // If we're flinging, and the user presses down, cancel + // fling + cancelFling(); + break; + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + // If the user has zoomed less than min scale, zoom back + // to min scale + if (getScale() < mMinScale) { + RectF rect = getDisplayRect(); + if (rect != null) { + v.post(new AnimatedZoomRunnable(getScale(), mMinScale, + rect.centerX(), rect.centerY())); + handled = true; + } + } else if (getScale() > mMaxScale) { + RectF rect = getDisplayRect(); + if (rect != null) { + v.post(new AnimatedZoomRunnable(getScale(), mMaxScale, + rect.centerX(), rect.centerY())); + handled = true; + } + } + break; + } + // Try the Scale/Drag detector + if (mScaleDragDetector != null) { + boolean wasScaling = mScaleDragDetector.isScaling(); + boolean wasDragging = mScaleDragDetector.isDragging(); + handled = mScaleDragDetector.onTouchEvent(ev); + boolean didntScale = !wasScaling && !mScaleDragDetector.isScaling(); + boolean didntDrag = !wasDragging && !mScaleDragDetector.isDragging(); + mBlockParentIntercept = didntScale && didntDrag; + } + // Check to see if the user double tapped + if (mGestureDetector != null && mGestureDetector.onTouchEvent(ev)) { + handled = true; + } + + } + return handled; + } + + public void setAllowParentInterceptOnEdge(boolean allow) { + mAllowParentInterceptOnEdge = allow; + } + + public void setMinimumScale(float minimumScale) { + Util.checkZoomLevels(minimumScale, mMidScale, mMaxScale); + mMinScale = minimumScale; + } + + public void setMediumScale(float mediumScale) { + Util.checkZoomLevels(mMinScale, mediumScale, mMaxScale); + mMidScale = mediumScale; + } + + public void setMaximumScale(float maximumScale) { + Util.checkZoomLevels(mMinScale, mMidScale, maximumScale); + mMaxScale = maximumScale; + } + + public void setScaleLevels(float minimumScale, float mediumScale, float maximumScale) { + Util.checkZoomLevels(minimumScale, mediumScale, maximumScale); + mMinScale = minimumScale; + mMidScale = mediumScale; + mMaxScale = maximumScale; + } + + public void setOnLongClickListener(OnLongClickListener listener) { + mLongClickListener = listener; + } + + public void setOnClickListener(View.OnClickListener listener) { + mOnClickListener = listener; + } + + public void setOnMatrixChangeListener(OnMatrixChangedListener listener) { + mMatrixChangeListener = listener; + } + + public void setOnPhotoTapListener(OnPhotoTapListener listener) { + mPhotoTapListener = listener; + } + + public void setOnOutsidePhotoTapListener(OnOutsidePhotoTapListener mOutsidePhotoTapListener) { + this.mOutsidePhotoTapListener = mOutsidePhotoTapListener; + } + + public void setOnViewTapListener(OnViewTapListener listener) { + mViewTapListener = listener; + } + + public void setOnViewDragListener(OnViewDragListener listener) { + mOnViewDragListener = listener; + } + + public void setScale(float scale) { + setScale(scale, false); + } + + public void setScale(float scale, boolean animate) { + setScale(scale, + (mImageView.getRight()) / 2, + (mImageView.getBottom()) / 2, + animate); + } + + public void setScale(float scale, float focalX, float focalY, + boolean animate) { + // Check to see if the scale is within bounds + if (scale < mMinScale || scale > mMaxScale) { + throw new IllegalArgumentException("Scale must be within the range of minScale and maxScale"); + } + if (animate) { + mImageView.post(new AnimatedZoomRunnable(getScale(), scale, + focalX, focalY)); + } else { + mSuppMatrix.setScale(scale, scale, focalX, focalY); + checkAndDisplayMatrix(); + } + } + + /** + * Set the zoom interpolator + * + * @param interpolator the zoom interpolator + */ + public void setZoomInterpolator(Interpolator interpolator) { + mInterpolator = interpolator; + } + + public void setScaleType(ScaleType scaleType) { + if (Util.isSupportedScaleType(scaleType) && scaleType != mScaleType) { + mScaleType = scaleType; + update(); + } + } + + public boolean isZoomable() { + return mZoomEnabled; + } + + public void setZoomable(boolean zoomable) { + mZoomEnabled = zoomable; + update(); + } + + public void update() { + if (mZoomEnabled) { + // Update the base matrix using the current drawable + updateBaseMatrix(mImageView.getDrawable()); + } else { + // Reset the Matrix... + resetMatrix(); + } + } + + /** + * Get the display matrix + * + * @param matrix target matrix to copy to + */ + public void getDisplayMatrix(Matrix matrix) { + matrix.set(getDrawMatrix()); + } + + /** + * Get the current support matrix + */ + public void getSuppMatrix(Matrix matrix) { + matrix.set(mSuppMatrix); + } + + private Matrix getDrawMatrix() { + mDrawMatrix.set(mBaseMatrix); + mDrawMatrix.postConcat(mSuppMatrix); + return mDrawMatrix; + } + + public Matrix getImageMatrix() { + return mDrawMatrix; + } + + public void setZoomTransitionDuration(int milliseconds) { + this.mZoomDuration = milliseconds; + } + + /** + * Helper method that 'unpacks' a Matrix and returns the required value + * + * @param matrix Matrix to unpack + * @param whichValue Which value from Matrix.M* to return + * @return returned value + */ + private float getValue(Matrix matrix, int whichValue) { + matrix.getValues(mMatrixValues); + return mMatrixValues[whichValue]; + } + + /** + * Resets the Matrix back to FIT_CENTER, and then displays its contents + */ + private void resetMatrix() { + mSuppMatrix.reset(); + setRotationBy(mBaseRotation); + setImageViewMatrix(getDrawMatrix()); + checkMatrixBounds(); + } + + private void setImageViewMatrix(Matrix matrix) { + mImageView.setImageMatrix(matrix); + // Call MatrixChangedListener if needed + if (mMatrixChangeListener != null) { + RectF displayRect = getDisplayRect(matrix); + if (displayRect != null) { + mMatrixChangeListener.onMatrixChanged(displayRect); + } + } + } + + /** + * Helper method that simply checks the Matrix, and then displays the result + */ + private void checkAndDisplayMatrix() { + if (checkMatrixBounds()) { + setImageViewMatrix(getDrawMatrix()); + } + } + + /** + * Helper method that maps the supplied Matrix to the current Drawable + * + * @param matrix - Matrix to map Drawable against + * @return RectF - Displayed Rectangle + */ + private RectF getDisplayRect(Matrix matrix) { + Drawable d = mImageView.getDrawable(); + if (d != null) { + mDisplayRect.set(0, 0, d.getIntrinsicWidth(), + d.getIntrinsicHeight()); + matrix.mapRect(mDisplayRect); + return mDisplayRect; + } + return null; + } + + /** + * Calculate Matrix for FIT_CENTER + * + * @param drawable - Drawable being displayed + */ + private void updateBaseMatrix(Drawable drawable) { + if (drawable == null) { + return; + } + final float viewWidth = getImageViewWidth(mImageView); + final float viewHeight = getImageViewHeight(mImageView); + final int drawableWidth = drawable.getIntrinsicWidth(); + final int drawableHeight = drawable.getIntrinsicHeight(); + mBaseMatrix.reset(); + final float widthScale = viewWidth / drawableWidth; + final float heightScale = viewHeight / drawableHeight; + if (mScaleType == ScaleType.CENTER) { + mBaseMatrix.postTranslate((viewWidth - drawableWidth) / 2F, + (viewHeight - drawableHeight) / 2F); + + } else if (mScaleType == ScaleType.CENTER_CROP) { + float scale = Math.max(widthScale, heightScale); + mBaseMatrix.postScale(scale, scale); + mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2F, + (viewHeight - drawableHeight * scale) / 2F); + + } else if (mScaleType == ScaleType.CENTER_INSIDE) { + float scale = Math.min(1.0f, Math.min(widthScale, heightScale)); + mBaseMatrix.postScale(scale, scale); + mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2F, + (viewHeight - drawableHeight * scale) / 2F); + + } else { + RectF mTempSrc = new RectF(0, 0, drawableWidth, drawableHeight); + RectF mTempDst = new RectF(0, 0, viewWidth, viewHeight); + if ((int) mBaseRotation % 180 != 0) { + mTempSrc = new RectF(0, 0, drawableHeight, drawableWidth); + } + switch (mScaleType) { + case FIT_CENTER: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.CENTER); + break; + case FIT_START: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.START); + break; + case FIT_END: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.END); + break; + case FIT_XY: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.FILL); + break; + default: + break; + } + } + resetMatrix(); + } + + private boolean checkMatrixBounds() { + final RectF rect = getDisplayRect(getDrawMatrix()); + if (rect == null) { + return false; + } + final float height = rect.height(), width = rect.width(); + float deltaX = 0, deltaY = 0; + final int viewHeight = getImageViewHeight(mImageView); + if (height <= viewHeight) { + switch (mScaleType) { + case FIT_START: + deltaY = -rect.top; + break; + case FIT_END: + deltaY = viewHeight - height - rect.top; + break; + default: + deltaY = (viewHeight - height) / 2 - rect.top; + break; + } + mVerticalScrollEdge = VERTICAL_EDGE_BOTH; + } else if (rect.top > 0) { + mVerticalScrollEdge = VERTICAL_EDGE_TOP; + deltaY = -rect.top; + } else if (rect.bottom < viewHeight) { + mVerticalScrollEdge = VERTICAL_EDGE_BOTTOM; + deltaY = viewHeight - rect.bottom; + } else { + mVerticalScrollEdge = VERTICAL_EDGE_NONE; + } + final int viewWidth = getImageViewWidth(mImageView); + if (width <= viewWidth) { + switch (mScaleType) { + case FIT_START: + deltaX = -rect.left; + break; + case FIT_END: + deltaX = viewWidth - width - rect.left; + break; + default: + deltaX = (viewWidth - width) / 2 - rect.left; + break; + } + mHorizontalScrollEdge = HORIZONTAL_EDGE_BOTH; + } else if (rect.left > 0) { + mHorizontalScrollEdge = HORIZONTAL_EDGE_LEFT; + deltaX = -rect.left; + } else if (rect.right < viewWidth) { + deltaX = viewWidth - rect.right; + mHorizontalScrollEdge = HORIZONTAL_EDGE_RIGHT; + } else { + mHorizontalScrollEdge = HORIZONTAL_EDGE_NONE; + } + // Finally actually translate the matrix + mSuppMatrix.postTranslate(deltaX, deltaY); + return true; + } + + private int getImageViewWidth(ImageView imageView) { + return imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); + } + + private int getImageViewHeight(ImageView imageView) { + return imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); + } + + private void cancelFling() { + if (mCurrentFlingRunnable != null) { + mCurrentFlingRunnable.cancelFling(); + mCurrentFlingRunnable = null; + } + } + + private class AnimatedZoomRunnable implements Runnable { + + private final float mFocalX, mFocalY; + private final long mStartTime; + private final float mZoomStart, mZoomEnd; + + public AnimatedZoomRunnable(final float currentZoom, final float targetZoom, + final float focalX, final float focalY) { + mFocalX = focalX; + mFocalY = focalY; + mStartTime = System.currentTimeMillis(); + mZoomStart = currentZoom; + mZoomEnd = targetZoom; + } + + @Override + public void run() { + float t = interpolate(); + float scale = mZoomStart + t * (mZoomEnd - mZoomStart); + float deltaScale = scale / getScale(); + onGestureListener.onScale(deltaScale, mFocalX, mFocalY); + // We haven't hit our target scale yet, so post ourselves again + if (t < 1f) { + Compat.postOnAnimation(mImageView, this); + } + } + + private float interpolate() { + float t = 1f * (System.currentTimeMillis() - mStartTime) / mZoomDuration; + t = Math.min(1f, t); + t = mInterpolator.getInterpolation(t); + return t; + } + } + + private class FlingRunnable implements Runnable { + + private final OverScroller mScroller; + private int mCurrentX, mCurrentY; + + public FlingRunnable(Context context) { + mScroller = new OverScroller(context); + } + + public void cancelFling() { + mScroller.forceFinished(true); + } + + public void fling(int viewWidth, int viewHeight, int velocityX, + int velocityY) { + final RectF rect = getDisplayRect(); + if (rect == null) { + return; + } + final int startX = Math.round(-rect.left); + final int minX, maxX, minY, maxY; + if (viewWidth < rect.width()) { + minX = 0; + maxX = Math.round(rect.width() - viewWidth); + } else { + minX = maxX = startX; + } + final int startY = Math.round(-rect.top); + if (viewHeight < rect.height()) { + minY = 0; + maxY = Math.round(rect.height() - viewHeight); + } else { + minY = maxY = startY; + } + mCurrentX = startX; + mCurrentY = startY; + // If we actually can move, fling the scroller + if (startX != maxX || startY != maxY) { + mScroller.fling(startX, startY, velocityX, velocityY, minX, + maxX, minY, maxY, 0, 0); + } + } + + @Override + public void run() { + if (mScroller.isFinished()) { + return; // remaining post that should not be handled + } + if (mScroller.computeScrollOffset()) { + final int newX = mScroller.getCurrX(); + final int newY = mScroller.getCurrY(); + mSuppMatrix.postTranslate(mCurrentX - newX, mCurrentY - newY); + checkAndDisplayMatrix(); + mCurrentX = newX; + mCurrentY = newY; + // Post On animation + Compat.postOnAnimation(mImageView, this); + } + } + } +} diff --git a/photoview/src/main/java/com/github/chrisbanes/photoview/Util.java b/photoview/src/main/java/com/github/chrisbanes/photoview/Util.java new file mode 100644 index 0000000..2e3e5ad --- /dev/null +++ b/photoview/src/main/java/com/github/chrisbanes/photoview/Util.java @@ -0,0 +1,37 @@ +package com.github.chrisbanes.photoview; + +import android.view.MotionEvent; +import android.widget.ImageView; + +class Util { + + static void checkZoomLevels(float minZoom, float midZoom, + float maxZoom) { + if (minZoom >= midZoom) { + throw new IllegalArgumentException( + "Minimum zoom has to be less than Medium zoom. Call setMinimumZoom() with a more appropriate value"); + } else if (midZoom >= maxZoom) { + throw new IllegalArgumentException( + "Medium zoom has to be less than Maximum zoom. Call setMaximumZoom() with a more appropriate value"); + } + } + + static boolean hasDrawable(ImageView imageView) { + return imageView.getDrawable() != null; + } + + static boolean isSupportedScaleType(final ImageView.ScaleType scaleType) { + if (scaleType == null) { + return false; + } + switch (scaleType) { + case MATRIX: + throw new IllegalStateException("Matrix scale type is not supported"); + } + return true; + } + + static int getPointerIndex(int action) { + return (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + } +} diff --git a/photoview/src/test/java/com/github/chrisbanes/photoview/ExampleUnitTest.java b/photoview/src/test/java/com/github/chrisbanes/photoview/ExampleUnitTest.java new file mode 100644 index 0000000..0dc410f --- /dev/null +++ b/photoview/src/test/java/com/github/chrisbanes/photoview/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.github.chrisbanes.photoview; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index c5a1f8a..2d6ba43 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,25 @@ +pluginManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + maven { url 'https://jitpack.io' } + } +} + include ':EasyPlayerPro' include ':ijkplayer-java' +include ':photoview'