From 51890e943255e2bb10ba4b0f31e8b42dcbcbe9df Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Wed, 10 Dec 2025 23:03:26 +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 | 16 +- .../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, 2461 insertions(+), 985 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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

ql>y 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�KX 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 z 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

t)9Ec`e3S%T>Cz^StCp+fGVWip{V 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 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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 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..b278fc6 100644 --- a/ijkplayer-java/proguard-rules.pro +++ b/ijkplayer-java/proguard-rules.pro @@ -1,20 +1,24 @@ # 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 *; #} + +# 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 -keepparameternames -renamesourcefileattribute SourceFile -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 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'