From 1ee58cf17441e4073a320efb7970f91591547ecb Mon Sep 17 00:00:00 2001 From: gongyongfeng2 Date: Fri, 20 Dec 2019 23:08:03 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../svgaplayer/SVGADynamicEntity.kt | 36 +++--- .../svgaplayer/SVGAExecutorService.kt | 29 +++++ .../opensource/svgaplayer/SVGAImageView.kt | 61 ++++++---- .../com/opensource/svgaplayer/SVGAParser.kt | 111 +++++++++++------- 4 files changed, 154 insertions(+), 83 deletions(-) create mode 100644 library/src/main/java/com/opensource/svgaplayer/SVGAExecutorService.kt diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGADynamicEntity.kt b/library/src/main/java/com/opensource/svgaplayer/SVGADynamicEntity.kt index 4b5ac5e4..d89a377c 100644 --- a/library/src/main/java/com/opensource/svgaplayer/SVGADynamicEntity.kt +++ b/library/src/main/java/com/opensource/svgaplayer/SVGADynamicEntity.kt @@ -27,15 +27,16 @@ class SVGADynamicEntity { internal var dynamicBoringLayoutText: HashMap = hashMapOf() - internal var dynamicDrawer: HashMap Boolean> = hashMapOf() - + internal var dynamicDrawer: HashMap Boolean> = + hashMapOf() //点击事件回调map - internal var mClickMap : HashMap = hashMapOf() + internal var mClickMap: HashMap = hashMapOf() internal var dynamicIClickArea: HashMap = hashMapOf() - internal var dynamicDrawerSized: HashMap Boolean> = hashMapOf() + internal var dynamicDrawerSized: HashMap Boolean> = + hashMapOf() internal var isTextDirty = false @@ -50,7 +51,7 @@ class SVGADynamicEntity { fun setDynamicImage(url: String, forKey: String) { val handler = android.os.Handler() - SVGAParser.threadPoolExecutor.execute { + SVGAExecutorService.executorTask(Runnable { (URL(url).openConnection() as? HttpURLConnection)?.let { try { it.connectTimeout = 20 * 1000 @@ -71,7 +72,11 @@ class SVGADynamicEntity { } } } - } + + }) +// SVGAParser.threadPoolExecutor.execute { +// +// } } fun setDynamicText(text: String, textPaint: TextPaint, forKey: String) { @@ -87,8 +92,8 @@ class SVGADynamicEntity { fun setDynamicText(layoutText: BoringLayout, forKey: String) { this.isTextDirty = true - BoringLayout.isBoring(layoutText.text,layoutText.paint)?.let { - this.dynamicBoringLayoutText.put(forKey,layoutText) + BoringLayout.isBoring(layoutText.text, layoutText.paint)?.let { + this.dynamicBoringLayoutText.put(forKey, layoutText) } } @@ -97,13 +102,13 @@ class SVGADynamicEntity { } fun setClickArea(clickKey: List) { - for(itemKey in clickKey){ - dynamicIClickArea.put(itemKey,object : IClickAreaListener{ + for (itemKey in clickKey) { + dynamicIClickArea.put(itemKey, object : IClickAreaListener { override fun onResponseArea(key: String, x0: Int, y0: Int, x1: Int, y1: Int) { mClickMap.let { - if(it.get(key) == null){ - it.put(key, intArrayOf(x0,y0,x1,y1)) - }else{ + if (it.get(key) == null) { + it.put(key, intArrayOf(x0, y0, x1, y1)) + } else { it.get(key)?.let { it[0] = x0 it[1] = y0 @@ -136,7 +141,10 @@ class SVGADynamicEntity { }) } - fun setDynamicDrawerSized(drawer: (canvas: Canvas, frameIndex: Int, width: Int, height: Int) -> Boolean, forKey: String) { + fun setDynamicDrawerSized( + drawer: (canvas: Canvas, frameIndex: Int, width: Int, height: Int) -> Boolean, + forKey: String + ) { this.dynamicDrawerSized.put(forKey, drawer) } diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGAExecutorService.kt b/library/src/main/java/com/opensource/svgaplayer/SVGAExecutorService.kt new file mode 100644 index 00000000..e69b4fb8 --- /dev/null +++ b/library/src/main/java/com/opensource/svgaplayer/SVGAExecutorService.kt @@ -0,0 +1,29 @@ +package com.opensource.svgaplayer + +import java.util.concurrent.Executor + +/** + * Created by huangzhilong on 2019-07-23. + * 设置线程池,没设置则new thread(原来逻辑) + */ + +class SVGAExecutorService { + + companion object { + + private var mExecutorService: Executor? = null + + fun setExecutorService(executorService: Executor?) { + mExecutorService = executorService + } + + fun executorTask(runnable: Runnable) { + if (mExecutorService != null) { + mExecutorService?.execute(runnable) + } else { + var thread = Thread(runnable) + thread.start() + } + } + } +} \ No newline at end of file diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt b/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt index cca4c26d..357b84a1 100644 --- a/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt +++ b/library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt @@ -40,7 +40,7 @@ open class SVGAImageView : ImageView { private var animator: ValueAnimator? = null - private var mItemClickAreaListener : SVGAClickAreaListener? = null + private var mItemClickAreaListener: SVGAClickAreaListener? = null constructor(context: Context?) : super(context) { setSoftwareLayerType() @@ -51,12 +51,15 @@ open class SVGAImageView : ImageView { attrs?.let { loadAttrs(it) } } - constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, + defStyleAttr) { setSoftwareLayerType() attrs?.let { loadAttrs(it) } } - constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) { + constructor( + context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) { setSoftwareLayerType() attrs?.let { loadAttrs(it) } } @@ -75,7 +78,8 @@ open class SVGAImageView : ImageView { } private fun loadAttrs(attrs: AttributeSet) { - val typedArray = context.theme.obtainStyledAttributes(attrs, R.styleable.SVGAImageView, 0, 0) + val typedArray = + context.theme.obtainStyledAttributes(attrs, R.styleable.SVGAImageView, 0, 0) loops = typedArray.getInt(R.styleable.SVGAImageView_loopCount, 0) clearsAfterStop = typedArray.getBoolean(R.styleable.SVGAImageView_clearsAfterStop, true) val antiAlias = typedArray.getBoolean(R.styleable.SVGAImageView_antiAlias, true) @@ -83,14 +87,13 @@ open class SVGAImageView : ImageView { typedArray.getString(R.styleable.SVGAImageView_fillMode)?.let { if (it == "0") { fillMode = FillMode.Backward - } - else if (it == "1") { + } else if (it == "1") { fillMode = FillMode.Forward } } typedArray.getString(R.styleable.SVGAImageView_source)?.let { val parser = SVGAParser(context) - Thread { + SVGAExecutorService.executorTask(Runnable { val callback: SVGAParser.ParseCompletion = object : SVGAParser.ParseCompletion { override fun onComplete(videoItem: SVGAVideoEntity) { this@SVGAImageView.post { @@ -105,12 +108,15 @@ open class SVGAImageView : ImageView { override fun onError() {} } - if(it.startsWith("http://") || it.startsWith("https://")) { + if (it.startsWith("http://") || it.startsWith("https://")) { parser.parse(URL(it), callback) } else { parser.parse(it, callback) } - }.start() + }) +// Thread { +// +// }.start() } typedArray.recycle() } @@ -127,7 +133,8 @@ open class SVGAImageView : ImageView { drawable.videoItem.let { var durationScale = 1.0 val startFrame = Math.max(0, range?.location ?: 0) - val endFrame = Math.min(it.frames - 1, ((range?.location ?: 0) + (range?.length ?: Int.MAX_VALUE) - 1)) + val endFrame = Math.min(it.frames - 1, + ((range?.location ?: 0) + (range?.length ?: Int.MAX_VALUE) - 1)) val animator = ValueAnimator.ofInt(startFrame, endFrame) try { val animatorClass = Class.forName("android.animation.ValueAnimator") @@ -140,46 +147,51 @@ open class SVGAImageView : ImageView { if (durationScale == 0.0) { it.setFloat(animatorClass, 1.0f) durationScale = 1.0 - Log.e("SVGAPlayer", "The animation duration scale has been reset to 1.0x, because you closed it on developer options.") + Log.e("SVGAPlayer", + "The animation duration scale has been reset to 1.0x, because you closed it on developer options.") } } } - } catch (e: Exception) {} + } catch (e: Exception) { + } animator.interpolator = LinearInterpolator() - animator.duration = ((endFrame - startFrame + 1) * (1000 / it.FPS) / durationScale).toLong() + animator.duration = + ((endFrame - startFrame + 1) * (1000 / it.FPS) / durationScale).toLong() animator.repeatCount = if (loops <= 0) 99999 else loops - 1 animator.addUpdateListener { drawable.currentFrame = animator.animatedValue as Int - callback?.onStep(drawable.currentFrame, ((drawable.currentFrame + 1).toDouble() / drawable.videoItem.frames.toDouble())) + callback?.onStep(drawable.currentFrame, + ((drawable.currentFrame + 1).toDouble() / drawable.videoItem.frames.toDouble())) } animator.addListener(object : Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) { callback?.onRepeat() } + override fun onAnimationEnd(animation: Animator?) { isAnimating = false stopAnimation() if (!clearsAfterStop) { if (fillMode == FillMode.Backward) { drawable.currentFrame = startFrame - } - else if (fillMode == FillMode.Forward) { + } else if (fillMode == FillMode.Forward) { drawable.currentFrame = endFrame } } callback?.onFinished() } + override fun onAnimationCancel(animation: Animator?) { isAnimating = false } + override fun onAnimationStart(animation: Animator?) { isAnimating = true } }) if (reverse) { animator.reverse() - } - else { + } else { animator.start() } this.animator = animator @@ -225,7 +237,8 @@ open class SVGAImageView : ImageView { if (andPlay) { startAnimation() animator?.let { - it.currentPlayTime = (Math.max(0.0f, Math.min(1.0f, (frame.toFloat() / drawable.videoItem.frames.toFloat()))) * it.duration).toLong() + it.currentPlayTime = (Math.max(0.0f, Math.min(1.0f, + (frame.toFloat() / drawable.videoItem.frames.toFloat()))) * it.duration).toLong() } } } @@ -239,16 +252,16 @@ open class SVGAImageView : ImageView { stepToFrame(frame, andPlay) } - fun setOnAnimKeyClickListener(clickListener : SVGAClickAreaListener){ + fun setOnAnimKeyClickListener(clickListener: SVGAClickAreaListener) { mItemClickAreaListener = clickListener } @SuppressLint("ClickableViewAccessibility") override fun onTouchEvent(event: MotionEvent?): Boolean { event?.let { - if(event.action == MotionEvent.ACTION_DOWN){ + if (event.action == MotionEvent.ACTION_DOWN) { val drawable = drawable as? SVGADrawable ?: return false - for((key,value) in drawable.dynamicItem.mClickMap){ + for ((key, value) in drawable.dynamicItem.mClickMap) { if (event.x >= value[0] && event.x <= value[2] && event.y >= value[1] && event.y <= value[3]) { mItemClickAreaListener?.let { it.onClick(key) @@ -256,13 +269,9 @@ open class SVGAImageView : ImageView { } } } - - - } } return super.onTouchEvent(event) } - } diff --git a/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt b/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt index caef9192..3cda10f6 100644 --- a/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt +++ b/library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt @@ -6,13 +6,16 @@ import android.os.Handler import android.util.Log import com.opensource.svgaplayer.proto.MovieEntity import org.json.JSONObject -import java.io.* +import java.io.BufferedInputStream +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.InputStream import java.net.HttpURLConnection import java.net.URL import java.security.MessageDigest -import java.util.concurrent.LinkedBlockingQueue -import java.util.concurrent.ThreadPoolExecutor -import java.util.concurrent.TimeUnit import java.util.zip.Inflater import java.util.zip.ZipInputStream @@ -28,23 +31,27 @@ class SVGAParser(private val context: Context) { fun onComplete(videoItem: SVGAVideoEntity) fun onError() - } open class FileDownloader { var noCache = false - open fun resume(url: URL, complete: (inputStream: InputStream) -> Unit, failure: (e: Exception) -> Unit): () -> Unit { + open fun resume( + url: URL, complete: (inputStream: InputStream) -> Unit, failure: (e: Exception) -> Unit + ): () -> Unit { var cancelled = false val cancelBlock = { cancelled = true } - threadPoolExecutor.execute { + + SVGAExecutorService.executorTask(Runnable { try { if (HttpResponseCache.getInstalled() == null && !noCache) { - Log.e("SVGAParser", "SVGAParser can not handle cache before install HttpResponseCache. see https://github.com/yyued/SVGAPlayer-Android#cache") - Log.e("SVGAParser", "在配置 HttpResponseCache 前 SVGAParser 无法缓存. 查看 https://github.com/yyued/SVGAPlayer-Android#cache ") + Log.e("SVGAParser", + "SVGAParser can not handle cache before install HttpResponseCache. see https://github.com/yyued/SVGAPlayer-Android#cache") + Log.e("SVGAParser", + "在配置 HttpResponseCache 前 SVGAParser 无法缓存. 查看 https://github.com/yyued/SVGAPlayer-Android#cache ") } (url.openConnection() as? HttpURLConnection)?.let { it.connectTimeout = 20 * 1000 @@ -65,7 +72,7 @@ class SVGAParser(private val context: Context) { outputStream.write(buffer, 0, count) } if (cancelled) { - return@execute + return@Runnable } ByteArrayInputStream(outputStream.toByteArray()).use { complete(it) @@ -77,41 +84,45 @@ class SVGAParser(private val context: Context) { e.printStackTrace() failure(e) } - } + }) +// threadPoolExecutor.execute { +// +// } return cancelBlock } - } var fileDownloader = FileDownloader() - companion object { - private val threadPoolBlockingQueue = LinkedBlockingQueue() - internal var threadPoolExecutor = ThreadPoolExecutor(3, 10, 60000, TimeUnit.MILLISECONDS, threadPoolBlockingQueue) - fun setThreadPoolExecutor(executor: ThreadPoolExecutor) { - threadPoolExecutor = executor - } - } +// companion object { +// private val threadPoolBlockingQueue = LinkedBlockingQueue() +// internal var threadPoolExecutor = +// ThreadPoolExecutor(3, 10, 60000, TimeUnit.MILLISECONDS, threadPoolBlockingQueue) +// +// fun setThreadPoolExecutor(executor: ThreadPoolExecutor) { +// threadPoolExecutor = executor +// } +// } fun decodeFromAssets(name: String, callback: ParseCompletion?) { try { context.assets.open(name)?.let { - this.decodeFromInputStream(it, buildCacheKey("file:///assets/$name"), callback, true) + this.decodeFromInputStream(it, buildCacheKey("file:///assets/$name"), callback, + true) } - } - catch (e: java.lang.Exception) { + } catch (e: java.lang.Exception) { this.invokeErrorCallback(e, callback) } } fun decodeFromURL(url: URL, callback: ParseCompletion?): (() -> Unit)? { if (this.isCached(buildCacheKey(url))) { - threadPoolExecutor.execute { + SVGAExecutorService.executorTask(Runnable { this.decodeFromCacheKey(buildCacheKey(url), callback) - } + }) + return null - } - else { + } else { return fileDownloader.resume(url, { this.decodeFromInputStream(it, this.buildCacheKey(url), callback) }, { @@ -120,8 +131,12 @@ class SVGAParser(private val context: Context) { } } - fun decodeFromInputStream(inputStream: InputStream, cacheKey: String, callback: ParseCompletion?, closeInputStream: Boolean = false) { - threadPoolExecutor.execute { + fun decodeFromInputStream( + inputStream: InputStream, cacheKey: String, callback: ParseCompletion?, + closeInputStream: Boolean = false + ) { + + SVGAExecutorService.executorTask(Runnable { try { readAsBytes(inputStream)?.let { bytes -> if (bytes.size > 4 && bytes[0].toInt() == 80 && bytes[1].toInt() == 75 && bytes[2].toInt() == 3 && bytes[3].toInt() == 4) { @@ -131,10 +146,10 @@ class SVGAParser(private val context: Context) { } } this.decodeFromCacheKey(cacheKey, callback) - } - else { + } else { inflate(bytes)?.let { - val videoItem = SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), File(cacheKey)) + val videoItem = + SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), File(cacheKey)) videoItem.prepare { this.invokeCompleteCallback(videoItem, callback) } @@ -148,13 +163,17 @@ class SVGAParser(private val context: Context) { inputStream.close() } } - } + }) +// threadPoolExecutor.execute { +// +// } } /** * @deprecated from 2.4.0 */ - @Deprecated("This method has been deprecated from 2.4.0.", ReplaceWith("this.decodeFromAssets(assetsName, callback)")) + @Deprecated("This method has been deprecated from 2.4.0.", + ReplaceWith("this.decodeFromAssets(assetsName, callback)")) fun parse(assetsName: String, callback: ParseCompletion?) { this.decodeFromAssets(assetsName, callback) } @@ -162,7 +181,8 @@ class SVGAParser(private val context: Context) { /** * @deprecated from 2.4.0 */ - @Deprecated("This method has been deprecated from 2.4.0.", ReplaceWith("this.decodeFromURL(url, callback)")) + @Deprecated("This method has been deprecated from 2.4.0.", + ReplaceWith("this.decodeFromURL(url, callback)")) fun parse(url: URL, callback: ParseCompletion?) { this.decodeFromURL(url, callback) } @@ -170,8 +190,12 @@ class SVGAParser(private val context: Context) { /** * @deprecated from 2.4.0 */ - @Deprecated("This method has been deprecated from 2.4.0.", ReplaceWith("this.decodeFromInputStream(inputStream, cacheKey, callback, closeInputStream)")) - fun parse(inputStream: InputStream, cacheKey: String, callback: ParseCompletion?, closeInputStream: Boolean = false) { + @Deprecated("This method has been deprecated from 2.4.0.", ReplaceWith( + "this.decodeFromInputStream(inputStream, cacheKey, callback, closeInputStream)")) + fun parse( + inputStream: InputStream, cacheKey: String, callback: ParseCompletion?, + closeInputStream: Boolean = false + ) { this.decodeFromInputStream(inputStream, cacheKey, callback, closeInputStream) } @@ -198,7 +222,8 @@ class SVGAParser(private val context: Context) { File(cacheDir, "movie.binary").takeIf { it.isFile }?.let { binaryFile -> try { FileInputStream(binaryFile).use { - this.invokeCompleteCallback(SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), cacheDir), callback) + this.invokeCompleteCallback( + SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), cacheDir), callback) } } catch (e: Exception) { cacheDir.delete() @@ -220,7 +245,8 @@ class SVGAParser(private val context: Context) { } byteArrayOutputStream.toString().let { JSONObject(it).let { - this.invokeCompleteCallback(SVGAVideoEntity(it, cacheDir), callback) + this.invokeCompleteCallback(SVGAVideoEntity(it, cacheDir), + callback) } } } @@ -249,7 +275,8 @@ class SVGAParser(private val context: Context) { private fun buildCacheKey(url: URL): String = buildCacheKey(url.toString()) - private fun buildCacheDir(cacheKey: String): File = File(context.cacheDir.absolutePath + "/" + cacheKey + "/") + private fun buildCacheDir(cacheKey: String): File = + File(context.cacheDir.absolutePath + "/" + cacheKey + "/") private fun readAsBytes(inputStream: InputStream): ByteArray? { ByteArrayOutputStream().use { byteArrayOutputStream -> @@ -258,8 +285,7 @@ class SVGAParser(private val context: Context) { val count = inputStream.read(byteArray, 0, 2048) if (count <= 0) { break - } - else { + } else { byteArrayOutputStream.write(byteArray, 0, count) } } @@ -276,8 +302,7 @@ class SVGAParser(private val context: Context) { val count = inflater.inflate(inflatedBytes, 0, 2048) if (count <= 0) { break - } - else { + } else { inflatedOutputStream.write(inflatedBytes, 0, count) } } From cafe5dcfa376689c4b83e265071e2edeaf6f605f Mon Sep 17 00:00:00 2001 From: chenrenzhan Date: Sat, 21 Dec 2019 09:26:38 +0800 Subject: [PATCH 2/3] wire # --- .../ponycui_home/svgaplayer/MainActivity.java | 264 ++++++---- library/build.gradle | 3 +- .../libs/wire-runtime-jvm-3.0.0-alpha02.jar | Bin 0 -> 100416 bytes .../com/opensource/svgaplayer/SVGAParser.kt | 8 +- .../svgaplayer/proto/AudioEntity.java | 92 +--- .../svgaplayer/proto/FrameEntity.java | 96 +--- .../opensource/svgaplayer/proto/Layout.java | 82 +-- .../svgaplayer/proto/MovieEntity.java | 97 +--- .../svgaplayer/proto/MovieParams.java | 86 +-- .../svgaplayer/proto/ShapeEntity.java | 492 ++---------------- .../svgaplayer/proto/SpriteEntity.java | 82 +-- .../svgaplayer/proto/Transform.java | 93 +--- 12 files changed, 276 insertions(+), 1119 deletions(-) create mode 100644 library/libs/wire-runtime-jvm-3.0.0-alpha02.jar diff --git a/app/src/main/java/com/example/ponycui_home/svgaplayer/MainActivity.java b/app/src/main/java/com/example/ponycui_home/svgaplayer/MainActivity.java index d778582a..8b6d35f2 100644 --- a/app/src/main/java/com/example/ponycui_home/svgaplayer/MainActivity.java +++ b/app/src/main/java/com/example/ponycui_home/svgaplayer/MainActivity.java @@ -1,8 +1,6 @@ package com.example.ponycui_home.svgaplayer; -import android.app.Activity; -import android.content.Intent; -import android.database.DataSetObserver; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -15,146 +13,184 @@ import android.text.StaticLayout; import android.text.TextPaint; import android.text.style.ForegroundColorSpan; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.TextView; +import android.util.Log; +import com.opensource.svgaplayer.SVGACallback; import com.opensource.svgaplayer.SVGADrawable; import com.opensource.svgaplayer.SVGADynamicEntity; import com.opensource.svgaplayer.SVGAImageView; import com.opensource.svgaplayer.SVGAParser; -import com.opensource.svgaplayer.SVGAPlayer; import com.opensource.svgaplayer.SVGAVideoEntity; import org.jetbrains.annotations.NotNull; -import java.io.IOException; -import java.io.InputStream; import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import kotlin.Unit; -import kotlin.jvm.functions.Function1; import kotlin.jvm.functions.Function2; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -class SampleItem { - - String title; - Intent intent; - - public SampleItem(String title, Intent intent) { - this.title = title; - this.intent = intent; - } - -} +/** + * Created by cuiminghui on 2017/3/30. + * 这是最复杂的一个 Sample, 演示了从网络加载动画,并播放动画。 + * 更多的 Sample 可以在这里找到 https://github.com/yyued/SVGA-Samples + */ public class MainActivity extends AppCompatActivity { - ListView listView; - ArrayList items = new ArrayList(); + SVGAImageView testView = null; + SVGADynamicEntity dynamicItem = new SVGADynamicEntity(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { +// StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() +// .detectDiskReads() +// .detectDiskWrites() +// .penaltyDialog() +// .detectAll() +// .penaltyLog() +// .build()); +// StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() +// .detectLeakedSqlLiteObjects() +// .detectLeakedClosableObjects() +// .penaltyLog() +// .penaltyDeath() +// .build()); super.onCreate(savedInstanceState); - this.setupData(); - this.setupListView(); - setContentView(listView); + testView = new SVGAImageView(this); + testView.setBackgroundColor(Color.GRAY); + loadAnimation(); + setContentView(testView); } - void setupData() { - this.items.add(new SampleItem("Animation From Assets", new Intent(this, AnimationFromAssetsActivity.class))); - this.items.add(new SampleItem("Animation From Network", new Intent(this, AnimationFromNetworkActivity.class))); - this.items.add(new SampleItem("Animation From Layout XML", new Intent(this, AnimationFromLayoutActivity.class))); - this.items.add(new SampleItem("Animation With Dynamic Image", new Intent(this, AnimationWithDynamicImageActivity.class))); - this.items.add(new SampleItem("Animation With Dynamic Click", new Intent(this, AnimationFromClickActivity.class))); + private void loadAnimation() { + SVGAParser parser = new SVGAParser(this); + // resetDownloader(parser); + try { + parser.parse( + new URL("https://github.com/yyued/SVGA-Samples/blob/master/kingset.svga?raw=true"), + new SVGAParser.ParseCompletion() { + @Override + public void onComplete(@NotNull SVGAVideoEntity videoItem) { + SVGADrawable drawable = new SVGADrawable(videoItem, + requestDynamicItemWithSpannableText()); + testView.setImageDrawable(drawable); + testView.setDrawingCacheEnabled(true); + testView.setLoops(1); + testView.startAnimation(); + testView.setCallback(new SVGACallback() { + @Override + public void onPause() { + + } + + @Override + public void onFinished() { + + } + + @Override + public void onRepeat() { + + } + + @Override + public void onStep(int frame, double percentage) { + if (percentage == 1.0) { + Bitmap bitmap = + Bitmap.createBitmap(testView.getDrawingCache()); + Log.d("GYF", bitmap.toString()); + } + } + }); + } + + @Override + public void onError() { + + } + }); + } catch (Exception e) { + System.out.print(true); + } } - void setupListView() { - this.listView = new ListView(this); - this.listView.setAdapter(new ListAdapter() { - @Override - public boolean areAllItemsEnabled() { - return false; - } - - @Override - public boolean isEnabled(int i) { - return false; - } - - @Override - public void registerDataSetObserver(DataSetObserver dataSetObserver) { - - } - - @Override - public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { - - } - - @Override - public int getCount() { - return MainActivity.this.items.size(); - } - - @Override - public Object getItem(int i) { - return null; - } - - @Override - public long getItemId(int i) { - return i; - } - - @Override - public boolean hasStableIds() { - return false; - } - - @Override - public View getView(final int i, View view, ViewGroup viewGroup) { - LinearLayout linearLayout = new LinearLayout(MainActivity.this); - TextView textView = new TextView(MainActivity.this); - textView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - MainActivity.this.startActivity(MainActivity.this.items.get(i).intent); - } - }); - textView.setText(MainActivity.this.items.get(i).title); - textView.setTextSize(24); - textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); - linearLayout.addView(textView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (55 * getResources().getDisplayMetrics().density))); - return linearLayout; - } - - @Override - public int getItemViewType(int i) { - return 1; - } - - @Override - public int getViewTypeCount() { - return 1; - } + /** + * 进行简单的文本替换 + * + * @return + */ + private SVGADynamicEntity requestDynamicItem() { + SVGADynamicEntity dynamicEntity = new SVGADynamicEntity(); + TextPaint textPaint = new TextPaint(); + textPaint.setColor(Color.WHITE); + textPaint.setTextSize(28); + dynamicEntity.setDynamicText("Pony 送了一打风油精给主播", textPaint, "banner"); + return dynamicEntity; + } + /** + * 你可以设置富文本到 ImageKey 相关的元素上 + * 富文本是会自动换行的,不要设置过长的文本 + * + * @return + */ + private SVGADynamicEntity requestDynamicItemWithSpannableText() { + SVGADynamicEntity dynamicEntity = new SVGADynamicEntity(); + SpannableStringBuilder spannableStringBuilder = + new SpannableStringBuilder("Pony 送了一打风油精给主播"); + spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.YELLOW), 0, 4, + Spannable.SPAN_INCLUSIVE_INCLUSIVE); + TextPaint textPaint = new TextPaint(); + textPaint.setColor(Color.WHITE); + textPaint.setTextSize(28); + dynamicEntity.setDynamicText(new StaticLayout( + spannableStringBuilder, + 0, + spannableStringBuilder.length(), + textPaint, + 0, + Layout.Alignment.ALIGN_CENTER, + 1.0f, + 0.0f, + false + ), "banner"); + dynamicEntity.setDynamicDrawer(new Function2() { @Override - public boolean isEmpty() { + public Boolean invoke(Canvas canvas, Integer frameIndex) { + Paint aPaint = new Paint(); + aPaint.setColor(Color.WHITE); + canvas.drawCircle(50, 54, frameIndex % 5, aPaint); return false; } - }); - this.listView.setBackgroundColor(Color.WHITE); + }, "banner"); + return dynamicEntity; } + /** + * 设置下载器,这是一个可选的配置项。 + * + * @param parser + */ + // private void resetDownloader(SVGAParser parser) { + // parser.setFileDownloader(new SVGAParser.FileDownloader() { + // @Override + // public void resume(final URL url, final Function1 complete, + // final Function1 failure) { + // new Thread(new Runnable() { + // @Override + // public void run() { + // OkHttpClient client = new OkHttpClient(); + // Request request = new Request.Builder().url(url).get().build(); + // try { + // Response response = client.newCall(request).execute(); + // complete.invoke(response.body().byteStream()); + // } catch (IOException e) { + // e.printStackTrace(); + // failure.invoke(e); + // } + // } + // }).start(); + // } + // }); + // } } diff --git a/library/build.gradle b/library/build.gradle index 793d0c5d..5d33ecb8 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -30,8 +30,9 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.squareup.wire:wire-runtime:2.3.0-RC1' +// implementation 'com.squareup.wire:wire-runtime:2.3.0-RC1' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'com.squareup.okio:okio:2.4.2' } repositories { mavenCentral() diff --git a/library/libs/wire-runtime-jvm-3.0.0-alpha02.jar b/library/libs/wire-runtime-jvm-3.0.0-alpha02.jar new file mode 100644 index 0000000000000000000000000000000000000000..83a0ce213048dbeea9707b4940acd5ccf6eac306 GIT binary patch literal 100416 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 try { - FileInputStream(binaryFile).use { - this.invokeCompleteCallback( - SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), cacheDir), callback) + FileInputStream(binaryFile).use { fs -> + readAsBytes(fs)?.let { + this.invokeCompleteCallback( + SVGAVideoEntity(MovieEntity.ADAPTER.decode(it), cacheDir), callback) + } } } catch (e: Exception) { cacheDir.delete() diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/AudioEntity.java b/library/src/main/java/com/opensource/svgaplayer/proto/AudioEntity.java index d09adce9..6c0e7790 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/AudioEntity.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/AudioEntity.java @@ -1,24 +1,20 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 19:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Integer; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import okio.ByteString; -public final class AudioEntity extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_AudioEntity(); +public final class AudioEntity extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(AudioEntity.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -77,11 +73,13 @@ public final class AudioEntity extends Message ) public final Integer totalTime; - public AudioEntity(String audioKey, Integer startFrame, Integer endFrame, Integer startTime, Integer totalTime) { + public AudioEntity(String audioKey, Integer startFrame, Integer endFrame, Integer startTime, + Integer totalTime) { this(audioKey, startFrame, endFrame, startTime, totalTime, ByteString.EMPTY); } - public AudioEntity(String audioKey, Integer startFrame, Integer endFrame, Integer startTime, Integer totalTime, ByteString unknownFields) { + public AudioEntity(String audioKey, Integer startFrame, Integer endFrame, Integer startTime, + Integer totalTime, ByteString unknownFields) { super(ADAPTER, unknownFields); this.audioKey = audioKey; this.startFrame = startFrame; @@ -130,17 +128,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (audioKey != null) builder.append(", audioKey=").append(audioKey); - if (startFrame != null) builder.append(", startFrame=").append(startFrame); - if (endFrame != null) builder.append(", endFrame=").append(endFrame); - if (startTime != null) builder.append(", startTime=").append(startTime); - if (totalTime != null) builder.append(", totalTime=").append(totalTime); - return builder.replace(0, 2, "AudioEntity{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public String audioKey; @@ -200,59 +187,4 @@ public AudioEntity build() { return new AudioEntity(audioKey, startFrame, endFrame, startTime, totalTime, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_AudioEntity extends ProtoAdapter { - ProtoAdapter_AudioEntity() { - super(FieldEncoding.LENGTH_DELIMITED, AudioEntity.class); - } - - @Override - public int encodedSize(AudioEntity value) { - return (value.audioKey != null ? ProtoAdapter.STRING.encodedSizeWithTag(1, value.audioKey) : 0) - + (value.startFrame != null ? ProtoAdapter.INT32.encodedSizeWithTag(2, value.startFrame) : 0) - + (value.endFrame != null ? ProtoAdapter.INT32.encodedSizeWithTag(3, value.endFrame) : 0) - + (value.startTime != null ? ProtoAdapter.INT32.encodedSizeWithTag(4, value.startTime) : 0) - + (value.totalTime != null ? ProtoAdapter.INT32.encodedSizeWithTag(5, value.totalTime) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, AudioEntity value) throws IOException { - if (value.audioKey != null) ProtoAdapter.STRING.encodeWithTag(writer, 1, value.audioKey); - if (value.startFrame != null) ProtoAdapter.INT32.encodeWithTag(writer, 2, value.startFrame); - if (value.endFrame != null) ProtoAdapter.INT32.encodeWithTag(writer, 3, value.endFrame); - if (value.startTime != null) ProtoAdapter.INT32.encodeWithTag(writer, 4, value.startTime); - if (value.totalTime != null) ProtoAdapter.INT32.encodeWithTag(writer, 5, value.totalTime); - writer.writeBytes(value.unknownFields()); - } - - @Override - public AudioEntity decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.audioKey(ProtoAdapter.STRING.decode(reader)); break; - case 2: builder.startFrame(ProtoAdapter.INT32.decode(reader)); break; - case 3: builder.endFrame(ProtoAdapter.INT32.decode(reader)); break; - case 4: builder.startTime(ProtoAdapter.INT32.decode(reader)); break; - case 5: builder.totalTime(ProtoAdapter.INT32.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public AudioEntity redact(AudioEntity value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/FrameEntity.java b/library/src/main/java/com/opensource/svgaplayer/proto/FrameEntity.java index ac701bb4..30300c36 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/FrameEntity.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/FrameEntity.java @@ -1,25 +1,22 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 115:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Float; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import java.util.List; + import okio.ByteString; -public final class FrameEntity extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_FrameEntity(); +public final class FrameEntity extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(FrameEntity.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -73,11 +70,13 @@ public final class FrameEntity extends Message ) public final List shapes; - public FrameEntity(Float alpha, Layout layout, Transform transform, String clipPath, List shapes) { + public FrameEntity(Float alpha, Layout layout, Transform transform, String clipPath, + List shapes) { this(alpha, layout, transform, clipPath, shapes, ByteString.EMPTY); } - public FrameEntity(Float alpha, Layout layout, Transform transform, String clipPath, List shapes, ByteString unknownFields) { + public FrameEntity(Float alpha, Layout layout, Transform transform, String clipPath, + List shapes, ByteString unknownFields) { super(ADAPTER, unknownFields); this.alpha = alpha; this.layout = layout; @@ -126,17 +125,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (alpha != null) builder.append(", alpha=").append(alpha); - if (layout != null) builder.append(", layout=").append(layout); - if (transform != null) builder.append(", transform=").append(transform); - if (clipPath != null) builder.append(", clipPath=").append(clipPath); - if (!shapes.isEmpty()) builder.append(", shapes=").append(shapes); - return builder.replace(0, 2, "FrameEntity{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float alpha; @@ -198,62 +186,4 @@ public FrameEntity build() { return new FrameEntity(alpha, layout, transform, clipPath, shapes, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_FrameEntity extends ProtoAdapter { - ProtoAdapter_FrameEntity() { - super(FieldEncoding.LENGTH_DELIMITED, FrameEntity.class); - } - - @Override - public int encodedSize(FrameEntity value) { - return (value.alpha != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.alpha) : 0) - + (value.layout != null ? Layout.ADAPTER.encodedSizeWithTag(2, value.layout) : 0) - + (value.transform != null ? Transform.ADAPTER.encodedSizeWithTag(3, value.transform) : 0) - + (value.clipPath != null ? ProtoAdapter.STRING.encodedSizeWithTag(4, value.clipPath) : 0) - + ShapeEntity.ADAPTER.asRepeated().encodedSizeWithTag(5, value.shapes) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, FrameEntity value) throws IOException { - if (value.alpha != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.alpha); - if (value.layout != null) Layout.ADAPTER.encodeWithTag(writer, 2, value.layout); - if (value.transform != null) Transform.ADAPTER.encodeWithTag(writer, 3, value.transform); - if (value.clipPath != null) ProtoAdapter.STRING.encodeWithTag(writer, 4, value.clipPath); - ShapeEntity.ADAPTER.asRepeated().encodeWithTag(writer, 5, value.shapes); - writer.writeBytes(value.unknownFields()); - } - - @Override - public FrameEntity decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.alpha(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.layout(Layout.ADAPTER.decode(reader)); break; - case 3: builder.transform(Transform.ADAPTER.decode(reader)); break; - case 4: builder.clipPath(ProtoAdapter.STRING.decode(reader)); break; - case 5: builder.shapes.add(ShapeEntity.ADAPTER.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public FrameEntity redact(FrameEntity value) { - Builder builder = value.newBuilder(); - if (builder.layout != null) builder.layout = Layout.ADAPTER.redact(builder.layout); - if (builder.transform != null) builder.transform = Transform.ADAPTER.redact(builder.transform); - Internal.redactElements(builder.shapes, ShapeEntity.ADAPTER); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/Layout.java b/library/src/main/java/com/opensource/svgaplayer/proto/Layout.java index 6ea7edb6..6f2210fc 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/Layout.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/Layout.java @@ -1,24 +1,20 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 27:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Float; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import okio.ByteString; -public final class Layout extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_Layout(); +public final class Layout extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(Layout.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -103,16 +99,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (x != null) builder.append(", x=").append(x); - if (y != null) builder.append(", y=").append(y); - if (width != null) builder.append(", width=").append(width); - if (height != null) builder.append(", height=").append(height); - return builder.replace(0, 2, "Layout{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float x; @@ -150,56 +136,4 @@ public Layout build() { return new Layout(x, y, width, height, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_Layout extends ProtoAdapter { - ProtoAdapter_Layout() { - super(FieldEncoding.LENGTH_DELIMITED, Layout.class); - } - - @Override - public int encodedSize(Layout value) { - return (value.x != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.x) : 0) - + (value.y != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.y) : 0) - + (value.width != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.width) : 0) - + (value.height != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(4, value.height) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, Layout value) throws IOException { - if (value.x != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.x); - if (value.y != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.y); - if (value.width != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.width); - if (value.height != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 4, value.height); - writer.writeBytes(value.unknownFields()); - } - - @Override - public Layout decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.x(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.y(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.width(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: builder.height(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public Layout redact(Layout value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/MovieEntity.java b/library/src/main/java/com/opensource/svgaplayer/proto/MovieEntity.java index 6b720af4..df4a66a2 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/MovieEntity.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/MovieEntity.java @@ -1,25 +1,23 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 123:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import java.util.List; import java.util.Map; + import okio.ByteString; -public final class MovieEntity extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_MovieEntity(); +public final class MovieEntity extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(MovieEntity.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -73,11 +71,13 @@ public final class MovieEntity extends Message ) public final List audios; - public MovieEntity(String version, MovieParams params, Map images, List sprites, List audios) { + public MovieEntity(String version, MovieParams params, Map images, + List sprites, List audios) { this(version, params, images, sprites, audios, ByteString.EMPTY); } - public MovieEntity(String version, MovieParams params, Map images, List sprites, List audios, ByteString unknownFields) { + public MovieEntity(String version, MovieParams params, Map images, + List sprites, List audios, ByteString unknownFields) { super(ADAPTER, unknownFields); this.version = version; this.params = params; @@ -126,17 +126,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (version != null) builder.append(", version=").append(version); - if (params != null) builder.append(", params=").append(params); - if (!images.isEmpty()) builder.append(", images=").append(images); - if (!sprites.isEmpty()) builder.append(", sprites=").append(sprites); - if (!audios.isEmpty()) builder.append(", audios=").append(audios); - return builder.replace(0, 2, "MovieEntity{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public String version; @@ -202,64 +191,4 @@ public MovieEntity build() { return new MovieEntity(version, params, images, sprites, audios, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_MovieEntity extends ProtoAdapter { - private final ProtoAdapter> images = ProtoAdapter.newMapAdapter(ProtoAdapter.STRING, ProtoAdapter.BYTES); - - ProtoAdapter_MovieEntity() { - super(FieldEncoding.LENGTH_DELIMITED, MovieEntity.class); - } - - @Override - public int encodedSize(MovieEntity value) { - return (value.version != null ? ProtoAdapter.STRING.encodedSizeWithTag(1, value.version) : 0) - + (value.params != null ? MovieParams.ADAPTER.encodedSizeWithTag(2, value.params) : 0) - + images.encodedSizeWithTag(3, value.images) - + SpriteEntity.ADAPTER.asRepeated().encodedSizeWithTag(4, value.sprites) - + AudioEntity.ADAPTER.asRepeated().encodedSizeWithTag(5, value.audios) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, MovieEntity value) throws IOException { - if (value.version != null) ProtoAdapter.STRING.encodeWithTag(writer, 1, value.version); - if (value.params != null) MovieParams.ADAPTER.encodeWithTag(writer, 2, value.params); - images.encodeWithTag(writer, 3, value.images); - SpriteEntity.ADAPTER.asRepeated().encodeWithTag(writer, 4, value.sprites); - AudioEntity.ADAPTER.asRepeated().encodeWithTag(writer, 5, value.audios); - writer.writeBytes(value.unknownFields()); - } - - @Override - public MovieEntity decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.version(ProtoAdapter.STRING.decode(reader)); break; - case 2: builder.params(MovieParams.ADAPTER.decode(reader)); break; - case 3: builder.images.putAll(images.decode(reader)); break; - case 4: builder.sprites.add(SpriteEntity.ADAPTER.decode(reader)); break; - case 5: builder.audios.add(AudioEntity.ADAPTER.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public MovieEntity redact(MovieEntity value) { - Builder builder = value.newBuilder(); - if (builder.params != null) builder.params = MovieParams.ADAPTER.redact(builder.params); - Internal.redactElements(builder.sprites, SpriteEntity.ADAPTER); - Internal.redactElements(builder.audios, AudioEntity.ADAPTER); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/MovieParams.java b/library/src/main/java/com/opensource/svgaplayer/proto/MovieParams.java index e8a3a98b..4529338e 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/MovieParams.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/MovieParams.java @@ -1,25 +1,20 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 6:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Float; -import java.lang.Integer; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import okio.ByteString; -public final class MovieParams extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_MovieParams(); +public final class MovieParams extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(MovieParams.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -71,7 +66,8 @@ public MovieParams(Float viewBoxWidth, Float viewBoxHeight, Integer fps, Integer this(viewBoxWidth, viewBoxHeight, fps, frames, ByteString.EMPTY); } - public MovieParams(Float viewBoxWidth, Float viewBoxHeight, Integer fps, Integer frames, ByteString unknownFields) { + public MovieParams(Float viewBoxWidth, Float viewBoxHeight, Integer fps, Integer frames, + ByteString unknownFields) { super(ADAPTER, unknownFields); this.viewBoxWidth = viewBoxWidth; this.viewBoxHeight = viewBoxHeight; @@ -116,16 +112,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (viewBoxWidth != null) builder.append(", viewBoxWidth=").append(viewBoxWidth); - if (viewBoxHeight != null) builder.append(", viewBoxHeight=").append(viewBoxHeight); - if (fps != null) builder.append(", fps=").append(fps); - if (frames != null) builder.append(", frames=").append(frames); - return builder.replace(0, 2, "MovieParams{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float viewBoxWidth; @@ -175,56 +161,4 @@ public MovieParams build() { return new MovieParams(viewBoxWidth, viewBoxHeight, fps, frames, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_MovieParams extends ProtoAdapter { - ProtoAdapter_MovieParams() { - super(FieldEncoding.LENGTH_DELIMITED, MovieParams.class); - } - - @Override - public int encodedSize(MovieParams value) { - return (value.viewBoxWidth != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.viewBoxWidth) : 0) - + (value.viewBoxHeight != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.viewBoxHeight) : 0) - + (value.fps != null ? ProtoAdapter.INT32.encodedSizeWithTag(3, value.fps) : 0) - + (value.frames != null ? ProtoAdapter.INT32.encodedSizeWithTag(4, value.frames) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, MovieParams value) throws IOException { - if (value.viewBoxWidth != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.viewBoxWidth); - if (value.viewBoxHeight != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.viewBoxHeight); - if (value.fps != null) ProtoAdapter.INT32.encodeWithTag(writer, 3, value.fps); - if (value.frames != null) ProtoAdapter.INT32.encodeWithTag(writer, 4, value.frames); - writer.writeBytes(value.unknownFields()); - } - - @Override - public MovieParams decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.viewBoxWidth(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.viewBoxHeight(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.fps(ProtoAdapter.INT32.decode(reader)); break; - case 4: builder.frames(ProtoAdapter.INT32.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public MovieParams redact(MovieParams value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/ShapeEntity.java b/library/src/main/java/com/opensource/svgaplayer/proto/ShapeEntity.java index 024faace..03680894 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/ShapeEntity.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/ShapeEntity.java @@ -1,25 +1,21 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 43:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireEnum; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Float; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import okio.ByteString; -public final class ShapeEntity extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_ShapeEntity(); +public final class ShapeEntity extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(ShapeEntity.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -71,11 +67,13 @@ public final class ShapeEntity extends Message ) public final EllipseArgs ellipse; - public ShapeEntity(ShapeType type, ShapeStyle styles, Transform transform, ShapeArgs shape, RectArgs rect, EllipseArgs ellipse) { + public ShapeEntity(ShapeType type, ShapeStyle styles, Transform transform, ShapeArgs shape, + RectArgs rect, EllipseArgs ellipse) { this(type, styles, transform, shape, rect, ellipse, ByteString.EMPTY); } - public ShapeEntity(ShapeType type, ShapeStyle styles, Transform transform, ShapeArgs shape, RectArgs rect, EllipseArgs ellipse, ByteString unknownFields) { + public ShapeEntity(ShapeType type, ShapeStyle styles, Transform transform, ShapeArgs shape, + RectArgs rect, EllipseArgs ellipse, ByteString unknownFields) { super(ADAPTER, unknownFields); if (Internal.countNonNull(shape, rect, ellipse) > 1) { throw new IllegalArgumentException("at most one of shape, rect, ellipse may be non-null"); @@ -131,18 +129,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (type != null) builder.append(", type=").append(type); - if (styles != null) builder.append(", styles=").append(styles); - if (transform != null) builder.append(", transform=").append(transform); - if (shape != null) builder.append(", shape=").append(shape); - if (rect != null) builder.append(", rect=").append(rect); - if (ellipse != null) builder.append(", ellipse=").append(ellipse); - return builder.replace(0, 2, "ShapeEntity{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public ShapeType type; @@ -232,7 +218,7 @@ public enum ShapeType implements WireEnum { */ KEEP(3); - public static final ProtoAdapter ADAPTER = ProtoAdapter.newEnumAdapter(ShapeType.class); + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newEnumAdapter(ShapeType.class); private final int value; @@ -259,8 +245,10 @@ public int getValue() { } } - public static final class ShapeArgs extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_ShapeArgs(); + public static final class ShapeArgs extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(ShapeArgs.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -312,13 +300,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (d != null) builder.append(", d=").append(d); - return builder.replace(0, 2, "ShapeArgs{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public String d; @@ -338,53 +319,12 @@ public ShapeArgs build() { return new ShapeArgs(d, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_ShapeArgs extends ProtoAdapter { - ProtoAdapter_ShapeArgs() { - super(FieldEncoding.LENGTH_DELIMITED, ShapeArgs.class); - } - - @Override - public int encodedSize(ShapeArgs value) { - return (value.d != null ? ProtoAdapter.STRING.encodedSizeWithTag(1, value.d) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, ShapeArgs value) throws IOException { - if (value.d != null) ProtoAdapter.STRING.encodeWithTag(writer, 1, value.d); - writer.writeBytes(value.unknownFields()); - } - - @Override - public ShapeArgs decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.d(ProtoAdapter.STRING.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public ShapeArgs redact(ShapeArgs value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } - public static final class RectArgs extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_RectArgs(); + public static final class RectArgs extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(RectArgs.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -435,7 +375,8 @@ public RectArgs(Float x, Float y, Float width, Float height, Float cornerRadius) this(x, y, width, height, cornerRadius, ByteString.EMPTY); } - public RectArgs(Float x, Float y, Float width, Float height, Float cornerRadius, ByteString unknownFields) { + public RectArgs(Float x, Float y, Float width, Float height, Float cornerRadius, + ByteString unknownFields) { super(ADAPTER, unknownFields); this.x = x; this.y = y; @@ -484,17 +425,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (x != null) builder.append(", x=").append(x); - if (y != null) builder.append(", y=").append(y); - if (width != null) builder.append(", width=").append(width); - if (height != null) builder.append(", height=").append(height); - if (cornerRadius != null) builder.append(", cornerRadius=").append(cornerRadius); - return builder.replace(0, 2, "RectArgs{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float x; @@ -542,65 +472,12 @@ public RectArgs build() { return new RectArgs(x, y, width, height, cornerRadius, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_RectArgs extends ProtoAdapter { - ProtoAdapter_RectArgs() { - super(FieldEncoding.LENGTH_DELIMITED, RectArgs.class); - } - - @Override - public int encodedSize(RectArgs value) { - return (value.x != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.x) : 0) - + (value.y != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.y) : 0) - + (value.width != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.width) : 0) - + (value.height != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(4, value.height) : 0) - + (value.cornerRadius != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(5, value.cornerRadius) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, RectArgs value) throws IOException { - if (value.x != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.x); - if (value.y != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.y); - if (value.width != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.width); - if (value.height != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 4, value.height); - if (value.cornerRadius != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 5, value.cornerRadius); - writer.writeBytes(value.unknownFields()); - } - - @Override - public RectArgs decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.x(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.y(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.width(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: builder.height(ProtoAdapter.FLOAT.decode(reader)); break; - case 5: builder.cornerRadius(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public RectArgs redact(RectArgs value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } - public static final class EllipseArgs extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_EllipseArgs(); + public static final class EllipseArgs extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(EllipseArgs.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -697,16 +574,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (x != null) builder.append(", x=").append(x); - if (y != null) builder.append(", y=").append(y); - if (radiusX != null) builder.append(", radiusX=").append(radiusX); - if (radiusY != null) builder.append(", radiusY=").append(radiusY); - return builder.replace(0, 2, "EllipseArgs{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float x; @@ -756,62 +623,12 @@ public EllipseArgs build() { return new EllipseArgs(x, y, radiusX, radiusY, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_EllipseArgs extends ProtoAdapter { - ProtoAdapter_EllipseArgs() { - super(FieldEncoding.LENGTH_DELIMITED, EllipseArgs.class); - } - - @Override - public int encodedSize(EllipseArgs value) { - return (value.x != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.x) : 0) - + (value.y != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.y) : 0) - + (value.radiusX != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.radiusX) : 0) - + (value.radiusY != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(4, value.radiusY) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, EllipseArgs value) throws IOException { - if (value.x != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.x); - if (value.y != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.y); - if (value.radiusX != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.radiusX); - if (value.radiusY != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 4, value.radiusY); - writer.writeBytes(value.unknownFields()); - } - - @Override - public EllipseArgs decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.x(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.y(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.radiusX(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: builder.radiusY(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public EllipseArgs redact(EllipseArgs value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } - public static final class ShapeStyle extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_ShapeStyle(); + public static final class ShapeStyle extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(ShapeStyle.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -910,11 +727,14 @@ public static final class ShapeStyle extends Message { public RGBAColor fill; @@ -1094,8 +899,10 @@ public ShapeStyle build() { } } - public static final class RGBAColor extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_RGBAColor(); + public static final class RGBAColor extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(RGBAColor.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -1180,16 +987,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (r != null) builder.append(", r=").append(r); - if (g != null) builder.append(", g=").append(g); - if (b != null) builder.append(", b=").append(b); - if (a != null) builder.append(", a=").append(a); - return builder.replace(0, 2, "RGBAColor{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float r; @@ -1227,58 +1024,6 @@ public RGBAColor build() { return new RGBAColor(r, g, b, a, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_RGBAColor extends ProtoAdapter { - ProtoAdapter_RGBAColor() { - super(FieldEncoding.LENGTH_DELIMITED, RGBAColor.class); - } - - @Override - public int encodedSize(RGBAColor value) { - return (value.r != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.r) : 0) - + (value.g != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.g) : 0) - + (value.b != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.b) : 0) - + (value.a != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(4, value.a) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, RGBAColor value) throws IOException { - if (value.r != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.r); - if (value.g != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.g); - if (value.b != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.b); - if (value.a != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 4, value.a); - writer.writeBytes(value.unknownFields()); - } - - @Override - public RGBAColor decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.r(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.g(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.b(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: builder.a(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public RGBAColor redact(RGBAColor value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } public enum LineCap implements WireEnum { @@ -1288,7 +1033,7 @@ public enum LineCap implements WireEnum { LineCap_SQUARE(2); - public static final ProtoAdapter ADAPTER = ProtoAdapter.newEnumAdapter(LineCap.class); + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newEnumAdapter(LineCap.class); private final int value; @@ -1321,7 +1066,7 @@ public enum LineJoin implements WireEnum { LineJoin_BEVEL(2); - public static final ProtoAdapter ADAPTER = ProtoAdapter.newEnumAdapter(LineJoin.class); + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newEnumAdapter(LineJoin.class); private final int value; @@ -1346,158 +1091,5 @@ public int getValue() { return value; } } - - private static final class ProtoAdapter_ShapeStyle extends ProtoAdapter { - ProtoAdapter_ShapeStyle() { - super(FieldEncoding.LENGTH_DELIMITED, ShapeStyle.class); - } - - @Override - public int encodedSize(ShapeStyle value) { - return (value.fill != null ? RGBAColor.ADAPTER.encodedSizeWithTag(1, value.fill) : 0) - + (value.stroke != null ? RGBAColor.ADAPTER.encodedSizeWithTag(2, value.stroke) : 0) - + (value.strokeWidth != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.strokeWidth) : 0) - + (value.lineCap != null ? LineCap.ADAPTER.encodedSizeWithTag(4, value.lineCap) : 0) - + (value.lineJoin != null ? LineJoin.ADAPTER.encodedSizeWithTag(5, value.lineJoin) : 0) - + (value.miterLimit != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(6, value.miterLimit) : 0) - + (value.lineDashI != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(7, value.lineDashI) : 0) - + (value.lineDashII != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(8, value.lineDashII) : 0) - + (value.lineDashIII != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(9, value.lineDashIII) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, ShapeStyle value) throws IOException { - if (value.fill != null) RGBAColor.ADAPTER.encodeWithTag(writer, 1, value.fill); - if (value.stroke != null) RGBAColor.ADAPTER.encodeWithTag(writer, 2, value.stroke); - if (value.strokeWidth != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.strokeWidth); - if (value.lineCap != null) LineCap.ADAPTER.encodeWithTag(writer, 4, value.lineCap); - if (value.lineJoin != null) LineJoin.ADAPTER.encodeWithTag(writer, 5, value.lineJoin); - if (value.miterLimit != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 6, value.miterLimit); - if (value.lineDashI != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 7, value.lineDashI); - if (value.lineDashII != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 8, value.lineDashII); - if (value.lineDashIII != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 9, value.lineDashIII); - writer.writeBytes(value.unknownFields()); - } - - @Override - public ShapeStyle decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.fill(RGBAColor.ADAPTER.decode(reader)); break; - case 2: builder.stroke(RGBAColor.ADAPTER.decode(reader)); break; - case 3: builder.strokeWidth(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: { - try { - builder.lineCap(LineCap.ADAPTER.decode(reader)); - } catch (ProtoAdapter.EnumConstantNotFoundException e) { - builder.addUnknownField(tag, FieldEncoding.VARINT, (long) e.value); - } - break; - } - case 5: { - try { - builder.lineJoin(LineJoin.ADAPTER.decode(reader)); - } catch (ProtoAdapter.EnumConstantNotFoundException e) { - builder.addUnknownField(tag, FieldEncoding.VARINT, (long) e.value); - } - break; - } - case 6: builder.miterLimit(ProtoAdapter.FLOAT.decode(reader)); break; - case 7: builder.lineDashI(ProtoAdapter.FLOAT.decode(reader)); break; - case 8: builder.lineDashII(ProtoAdapter.FLOAT.decode(reader)); break; - case 9: builder.lineDashIII(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public ShapeStyle redact(ShapeStyle value) { - Builder builder = value.newBuilder(); - if (builder.fill != null) builder.fill = RGBAColor.ADAPTER.redact(builder.fill); - if (builder.stroke != null) builder.stroke = RGBAColor.ADAPTER.redact(builder.stroke); - builder.clearUnknownFields(); - return builder.build(); - } - } - } - - private static final class ProtoAdapter_ShapeEntity extends ProtoAdapter { - ProtoAdapter_ShapeEntity() { - super(FieldEncoding.LENGTH_DELIMITED, ShapeEntity.class); - } - - @Override - public int encodedSize(ShapeEntity value) { - return (value.type != null ? ShapeType.ADAPTER.encodedSizeWithTag(1, value.type) : 0) - + (value.styles != null ? ShapeStyle.ADAPTER.encodedSizeWithTag(10, value.styles) : 0) - + (value.transform != null ? Transform.ADAPTER.encodedSizeWithTag(11, value.transform) : 0) - + (value.shape != null ? ShapeArgs.ADAPTER.encodedSizeWithTag(2, value.shape) : 0) - + (value.rect != null ? RectArgs.ADAPTER.encodedSizeWithTag(3, value.rect) : 0) - + (value.ellipse != null ? EllipseArgs.ADAPTER.encodedSizeWithTag(4, value.ellipse) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, ShapeEntity value) throws IOException { - if (value.type != null) ShapeType.ADAPTER.encodeWithTag(writer, 1, value.type); - if (value.styles != null) ShapeStyle.ADAPTER.encodeWithTag(writer, 10, value.styles); - if (value.transform != null) Transform.ADAPTER.encodeWithTag(writer, 11, value.transform); - if (value.shape != null) ShapeArgs.ADAPTER.encodeWithTag(writer, 2, value.shape); - if (value.rect != null) RectArgs.ADAPTER.encodeWithTag(writer, 3, value.rect); - if (value.ellipse != null) EllipseArgs.ADAPTER.encodeWithTag(writer, 4, value.ellipse); - writer.writeBytes(value.unknownFields()); - } - - @Override - public ShapeEntity decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: { - try { - builder.type(ShapeType.ADAPTER.decode(reader)); - } catch (ProtoAdapter.EnumConstantNotFoundException e) { - builder.addUnknownField(tag, FieldEncoding.VARINT, (long) e.value); - } - break; - } - case 10: builder.styles(ShapeStyle.ADAPTER.decode(reader)); break; - case 11: builder.transform(Transform.ADAPTER.decode(reader)); break; - case 2: builder.shape(ShapeArgs.ADAPTER.decode(reader)); break; - case 3: builder.rect(RectArgs.ADAPTER.decode(reader)); break; - case 4: builder.ellipse(EllipseArgs.ADAPTER.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public ShapeEntity redact(ShapeEntity value) { - Builder builder = value.newBuilder(); - if (builder.styles != null) builder.styles = ShapeStyle.ADAPTER.redact(builder.styles); - if (builder.transform != null) builder.transform = Transform.ADAPTER.redact(builder.transform); - if (builder.shape != null) builder.shape = ShapeArgs.ADAPTER.redact(builder.shape); - if (builder.rect != null) builder.rect = RectArgs.ADAPTER.redact(builder.rect); - if (builder.ellipse != null) builder.ellipse = EllipseArgs.ADAPTER.redact(builder.ellipse); - builder.clearUnknownFields(); - return builder.build(); - } } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/SpriteEntity.java b/library/src/main/java/com/opensource/svgaplayer/proto/SpriteEntity.java index bc9120b5..301fd1af 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/SpriteEntity.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/SpriteEntity.java @@ -1,24 +1,22 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 13:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import java.util.List; + import okio.ByteString; -public final class SpriteEntity extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_SpriteEntity(); +public final class SpriteEntity extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(SpriteEntity.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -58,7 +56,8 @@ public SpriteEntity(String imageKey, List frames, String matteKey) this(imageKey, frames, matteKey, ByteString.EMPTY); } - public SpriteEntity(String imageKey, List frames, String matteKey, ByteString unknownFields) { + public SpriteEntity(String imageKey, List frames, String matteKey, + ByteString unknownFields) { super(ADAPTER, unknownFields); this.imageKey = imageKey; this.frames = Internal.immutableCopyOf("frames", frames); @@ -99,15 +98,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (imageKey != null) builder.append(", imageKey=").append(imageKey); - if (!frames.isEmpty()) builder.append(", frames=").append(frames); - if (matteKey != null) builder.append(", matteKey=").append(matteKey); - return builder.replace(0, 2, "SpriteEntity{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public String imageKey; @@ -149,54 +139,4 @@ public SpriteEntity build() { return new SpriteEntity(imageKey, frames, matteKey, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_SpriteEntity extends ProtoAdapter { - ProtoAdapter_SpriteEntity() { - super(FieldEncoding.LENGTH_DELIMITED, SpriteEntity.class); - } - - @Override - public int encodedSize(SpriteEntity value) { - return (value.imageKey != null ? ProtoAdapter.STRING.encodedSizeWithTag(1, value.imageKey) : 0) - + FrameEntity.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames) - + (value.matteKey != null ? ProtoAdapter.STRING.encodedSizeWithTag(3, value.matteKey) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, SpriteEntity value) throws IOException { - if (value.imageKey != null) ProtoAdapter.STRING.encodeWithTag(writer, 1, value.imageKey); - FrameEntity.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames); - if (value.matteKey != null) ProtoAdapter.STRING.encodeWithTag(writer, 3, value.matteKey); - writer.writeBytes(value.unknownFields()); - } - - @Override - public SpriteEntity decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.imageKey(ProtoAdapter.STRING.decode(reader)); break; - case 2: builder.frames.add(FrameEntity.ADAPTER.decode(reader)); break; - case 3: builder.matteKey(ProtoAdapter.STRING.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public SpriteEntity redact(SpriteEntity value) { - Builder builder = value.newBuilder(); - Internal.redactElements(builder.frames, FrameEntity.ADAPTER); - builder.clearUnknownFields(); - return builder.build(); - } - } } diff --git a/library/src/main/java/com/opensource/svgaplayer/proto/Transform.java b/library/src/main/java/com/opensource/svgaplayer/proto/Transform.java index c4c4941d..4cb0f0d9 100644 --- a/library/src/main/java/com/opensource/svgaplayer/proto/Transform.java +++ b/library/src/main/java/com/opensource/svgaplayer/proto/Transform.java @@ -1,24 +1,20 @@ // Code generated by Wire protocol buffer compiler, do not edit. -// Source file: svga.proto at 34:1 +// Source file: svga.proto package com.opensource.svgaplayer.proto; -import com.squareup.wire.FieldEncoding; +import com.squareup.wire.AndroidMessage; import com.squareup.wire.Message; import com.squareup.wire.ProtoAdapter; -import com.squareup.wire.ProtoReader; -import com.squareup.wire.ProtoWriter; +import com.squareup.wire.ProtoAdapterJvm; import com.squareup.wire.WireField; import com.squareup.wire.internal.Internal; -import java.io.IOException; -import java.lang.Float; -import java.lang.Object; -import java.lang.Override; -import java.lang.String; -import java.lang.StringBuilder; + import okio.ByteString; -public final class Transform extends Message { - public static final ProtoAdapter ADAPTER = new ProtoAdapter_Transform(); +public final class Transform extends AndroidMessage { + public static final ProtoAdapter ADAPTER = ProtoAdapterJvm.newMessageAdapter(Transform.class); + + public static final Creator CREATOR = AndroidMessage.newCreator(ADAPTER); private static final long serialVersionUID = 0L; @@ -74,7 +70,8 @@ public Transform(Float a, Float b, Float c, Float d, Float tx, Float ty) { this(a, b, c, d, tx, ty, ByteString.EMPTY); } - public Transform(Float a, Float b, Float c, Float d, Float tx, Float ty, ByteString unknownFields) { + public Transform(Float a, Float b, Float c, Float d, Float tx, Float ty, + ByteString unknownFields) { super(ADAPTER, unknownFields); this.a = a; this.b = b; @@ -127,18 +124,6 @@ public int hashCode() { return result; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (a != null) builder.append(", a=").append(a); - if (b != null) builder.append(", b=").append(b); - if (c != null) builder.append(", c=").append(c); - if (d != null) builder.append(", d=").append(d); - if (tx != null) builder.append(", tx=").append(tx); - if (ty != null) builder.append(", ty=").append(ty); - return builder.replace(0, 2, "Transform{").append('}').toString(); - } - public static final class Builder extends Message.Builder { public Float a; @@ -190,62 +175,4 @@ public Transform build() { return new Transform(a, b, c, d, tx, ty, super.buildUnknownFields()); } } - - private static final class ProtoAdapter_Transform extends ProtoAdapter { - ProtoAdapter_Transform() { - super(FieldEncoding.LENGTH_DELIMITED, Transform.class); - } - - @Override - public int encodedSize(Transform value) { - return (value.a != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(1, value.a) : 0) - + (value.b != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(2, value.b) : 0) - + (value.c != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(3, value.c) : 0) - + (value.d != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(4, value.d) : 0) - + (value.tx != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(5, value.tx) : 0) - + (value.ty != null ? ProtoAdapter.FLOAT.encodedSizeWithTag(6, value.ty) : 0) - + value.unknownFields().size(); - } - - @Override - public void encode(ProtoWriter writer, Transform value) throws IOException { - if (value.a != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 1, value.a); - if (value.b != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 2, value.b); - if (value.c != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 3, value.c); - if (value.d != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 4, value.d); - if (value.tx != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 5, value.tx); - if (value.ty != null) ProtoAdapter.FLOAT.encodeWithTag(writer, 6, value.ty); - writer.writeBytes(value.unknownFields()); - } - - @Override - public Transform decode(ProtoReader reader) throws IOException { - Builder builder = new Builder(); - long token = reader.beginMessage(); - for (int tag; (tag = reader.nextTag()) != -1;) { - switch (tag) { - case 1: builder.a(ProtoAdapter.FLOAT.decode(reader)); break; - case 2: builder.b(ProtoAdapter.FLOAT.decode(reader)); break; - case 3: builder.c(ProtoAdapter.FLOAT.decode(reader)); break; - case 4: builder.d(ProtoAdapter.FLOAT.decode(reader)); break; - case 5: builder.tx(ProtoAdapter.FLOAT.decode(reader)); break; - case 6: builder.ty(ProtoAdapter.FLOAT.decode(reader)); break; - default: { - FieldEncoding fieldEncoding = reader.peekFieldEncoding(); - Object value = fieldEncoding.rawProtoAdapter().decode(reader); - builder.addUnknownField(tag, fieldEncoding, value); - } - } - } - reader.endMessage(token); - return builder.build(); - } - - @Override - public Transform redact(Transform value) { - Builder builder = value.newBuilder(); - builder.clearUnknownFields(); - return builder.build(); - } - } } From 2b0ebb60c939f0e002f00cbe48780cc140b6bd89 Mon Sep 17 00:00:00 2001 From: chenrenzhan Date: Sat, 21 Dec 2019 10:03:13 +0800 Subject: [PATCH 3/3] wire library compileOnly --- library/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/build.gradle b/library/build.gradle index 5d33ecb8..dbd87ef3 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -29,7 +29,7 @@ android { } dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') + compileOnly fileTree(include: ['*.jar'], dir: 'libs') // implementation 'com.squareup.wire:wire-runtime:2.3.0-RC1' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.squareup.okio:okio:2.4.2'