diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 92cf862391..d865fffe53 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -487,7 +487,6 @@ dependencies { implementation(project(":sms-exporter")) implementation(project(":sticky-header-grid")) implementation(project(":photoview")) - implementation(project(":glide-webp")) implementation(project(":core-ui")) implementation(libs.androidx.fragment.ktx) diff --git a/glide-webp/lib/src/main/java/org/signal/glide/webp/WebpInputStreamResourceDecoder.kt b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/WebpSanDecoder.kt similarity index 58% rename from glide-webp/lib/src/main/java/org/signal/glide/webp/WebpInputStreamResourceDecoder.kt rename to app/src/main/java/org/thoughtcrime/securesms/glide/cache/WebpSanDecoder.kt index ffdb27dac9..9a3cb44728 100644 --- a/glide-webp/lib/src/main/java/org/signal/glide/webp/WebpInputStreamResourceDecoder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/glide/cache/WebpSanDecoder.kt @@ -1,25 +1,27 @@ /* - * Copyright 2023 Signal Messenger, LLC + * Copyright 2024 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.signal.glide.webp +package org.thoughtcrime.securesms.glide.cache import android.graphics.Bitmap import com.bumptech.glide.load.Options import com.bumptech.glide.load.ResourceDecoder import com.bumptech.glide.load.engine.Resource -import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool -import com.bumptech.glide.load.resource.bitmap.BitmapResource import org.signal.core.util.StreamUtil import org.signal.core.util.logging.Log +import org.signal.libsignal.media.WebpSanitizer import java.io.IOException import java.io.InputStream -class WebpInputStreamResourceDecoder(private val bitmapPool: BitmapPool) : ResourceDecoder { +/** + * Uses WebpSanitizer to check for invalid webp. + */ +class WebpSanDecoder : ResourceDecoder { companion object { - private const val TAG = "WebpResourceDecoder" // Name > 23 characters + private val TAG = Log.tag(WebpSanDecoder::class.java) private val MAGIC_NUMBER_P1 = byteArrayOf(0x52, 0x49, 0x46, 0x46) // "RIFF" private val MAGIC_NUMBER_P2 = byteArrayOf(0x57, 0x45, 0x42, 0x50) // "WEBP" @@ -34,10 +36,12 @@ class WebpInputStreamResourceDecoder(private val bitmapPool: BitmapPool) : Resou * [4-7]: File length * [8-11]: "WEBP" * - * We're not verifying the file length here, so we just need to check the first and last + * We're not verifying the file length here, so we just need to check the first and last. + * + * We then sanitize the webp and block the load if the check fails. */ override fun handles(source: InputStream, options: Options): Boolean { - return try { + try { val magicNumberP1 = ByteArray(4) StreamUtil.readFully(source, magicNumberP1) @@ -47,24 +51,27 @@ class WebpInputStreamResourceDecoder(private val bitmapPool: BitmapPool) : Resou val magicNumberP2 = ByteArray(4) StreamUtil.readFully(source, magicNumberP2) - magicNumberP1.contentEquals(MAGIC_NUMBER_P1) && magicNumberP2.contentEquals(MAGIC_NUMBER_P2) + if (magicNumberP1.contentEquals(MAGIC_NUMBER_P1) && magicNumberP2.contentEquals(MAGIC_NUMBER_P2)) { + try { + source.reset() + source.mark(MAX_WEBP_COMPRESSED_SIZE) + WebpSanitizer.sanitize(source, Long.MAX_VALUE) + source.reset() + } catch (e: Exception) { + Log.w(TAG, "Sanitize check failed or mark position invalidated by reset", e) + return true + } + } } catch (e: IOException) { Log.w(TAG, "Failed to read magic number from stream!", e) - false + return true } + + return false } override fun decode(source: InputStream, width: Int, height: Int, options: Options): Resource? { - Log.d(TAG, "decode()") - - val webp: ByteArray = try { - StreamUtil.readFully(source, MAX_WEBP_COMPRESSED_SIZE) - } catch (e: IOException) { - Log.w(TAG, "Unexpected IOException hit while reading image data", e) - throw e - } - - val bitmap: Bitmap? = WebpDecoder().nativeDecodeBitmapScaled(webp, width, height) - return BitmapResource.obtain(bitmap, bitmapPool) + Log.w(TAG, "Image did not pass sanitizer") + throw IOException("Unable to load image") } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java index 3256e0cf8a..715acba78a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideComponents.java @@ -40,6 +40,7 @@ import org.thoughtcrime.securesms.glide.cache.EncryptedBitmapResourceEncoder; import org.thoughtcrime.securesms.glide.cache.EncryptedCacheDecoder; import org.thoughtcrime.securesms.glide.cache.EncryptedCacheEncoder; import org.thoughtcrime.securesms.glide.cache.EncryptedGifDrawableResourceEncoder; +import org.thoughtcrime.securesms.glide.cache.WebpSanDecoder; import org.thoughtcrime.securesms.mms.AttachmentStreamUriLoader.AttachmentModel; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.stickers.StickerRemoteUri; @@ -64,6 +65,8 @@ public class SignalGlideComponents implements RegisterGlideComponents { registry.prepend(File.class, File.class, UnitModelLoader.Factory.getInstance()); + registry.prepend(InputStream.class, Bitmap.class, new WebpSanDecoder()); + registry.prepend(InputStream.class, new EncryptedCacheEncoder(secret, glide.getArrayPool())); registry.prepend(File.class, Bitmap.class, new EncryptedCacheDecoder<>(secret, new StreamBitmapDecoder(new Downsampler(registry.getImageHeaderParsers(), context.getResources().getDisplayMetrics(), glide.getBitmapPool(), glide.getArrayPool()), glide.getArrayPool()))); diff --git a/build.gradle.kts b/build.gradle.kts index e35a2d9c44..4347d02b1e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -100,8 +100,6 @@ task("qa") { tasks.register("clean", Delete::class) { delete(rootProject.buildDir) - // Because gradle is weird, we delete here for glide-webp/lib project so the clean tasks there doesn"t barf - delete(fileTree("glide-webp/lib/.cxx")) } task("format") { diff --git a/core-util-jvm/src/main/java/org/signal/core/util/InputStreamExtensions.kt b/core-util-jvm/src/main/java/org/signal/core/util/InputStreamExtensions.kt index e4d2f8e2ee..5a6880c835 100644 --- a/core-util-jvm/src/main/java/org/signal/core/util/InputStreamExtensions.kt +++ b/core-util-jvm/src/main/java/org/signal/core/util/InputStreamExtensions.kt @@ -70,7 +70,7 @@ fun InputStream.readNBytesOrThrow(length: Int): ByteArray { } @Throws(IOException::class) -fun InputStream.readLength(): Long? { +fun InputStream.readLength(): Long { val buffer = ByteArray(4096) var count = 0L diff --git a/glide-config/build.gradle.kts b/glide-config/build.gradle.kts index 24a8c93df7..a270e474db 100644 --- a/glide-config/build.gradle.kts +++ b/glide-config/build.gradle.kts @@ -10,6 +10,4 @@ android { dependencies { implementation(libs.glide.glide) kapt(libs.glide.compiler) - - implementation(project(":glide-webp")) } diff --git a/glide-webp/app/.gitignore b/glide-webp/app/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/glide-webp/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/glide-webp/app/build.gradle.kts b/glide-webp/app/build.gradle.kts deleted file mode 100644 index c918a7f2b2..0000000000 --- a/glide-webp/app/build.gradle.kts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -plugins { - id("signal-sample-app") - kotlin("kapt") -} - -android { - namespace = "org.signal.glide.webp.app" -} - -dependencies { - implementation(project(":glide-webp")) - - implementation(libs.androidx.fragment.ktx) - - implementation(libs.glide.glide) - kapt(libs.glide.compiler) -} diff --git a/glide-webp/app/src/main/AndroidManifest.xml b/glide-webp/app/src/main/AndroidManifest.xml deleted file mode 100644 index ad55630ca3..0000000000 --- a/glide-webp/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/assets/test_01.webp b/glide-webp/app/src/main/assets/test_01.webp deleted file mode 100644 index 122741b605..0000000000 Binary files a/glide-webp/app/src/main/assets/test_01.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_02.webp b/glide-webp/app/src/main/assets/test_02.webp deleted file mode 100644 index c833c5d4af..0000000000 Binary files a/glide-webp/app/src/main/assets/test_02.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_03.webp b/glide-webp/app/src/main/assets/test_03.webp deleted file mode 100644 index e1cf658373..0000000000 Binary files a/glide-webp/app/src/main/assets/test_03.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_04.webp b/glide-webp/app/src/main/assets/test_04.webp deleted file mode 100644 index a608fc85c2..0000000000 Binary files a/glide-webp/app/src/main/assets/test_04.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_05.webp b/glide-webp/app/src/main/assets/test_05.webp deleted file mode 100644 index 89e6075fde..0000000000 Binary files a/glide-webp/app/src/main/assets/test_05.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_06_lossless.webp b/glide-webp/app/src/main/assets/test_06_lossless.webp deleted file mode 100644 index 1953c59b3d..0000000000 Binary files a/glide-webp/app/src/main/assets/test_06_lossless.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_06_lossy.webp b/glide-webp/app/src/main/assets/test_06_lossy.webp deleted file mode 100644 index fd78f9335a..0000000000 Binary files a/glide-webp/app/src/main/assets/test_06_lossy.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_07_lossless.webp b/glide-webp/app/src/main/assets/test_07_lossless.webp deleted file mode 100644 index 7c5de80339..0000000000 Binary files a/glide-webp/app/src/main/assets/test_07_lossless.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_07_lossy.webp b/glide-webp/app/src/main/assets/test_07_lossy.webp deleted file mode 100644 index 0a8560a772..0000000000 Binary files a/glide-webp/app/src/main/assets/test_07_lossy.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_08_lossless.webp b/glide-webp/app/src/main/assets/test_08_lossless.webp deleted file mode 100644 index 32ba54bca6..0000000000 Binary files a/glide-webp/app/src/main/assets/test_08_lossless.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_08_lossy.webp b/glide-webp/app/src/main/assets/test_08_lossy.webp deleted file mode 100644 index b87117bf2f..0000000000 Binary files a/glide-webp/app/src/main/assets/test_08_lossy.webp and /dev/null differ diff --git a/glide-webp/app/src/main/assets/test_09_large.webp b/glide-webp/app/src/main/assets/test_09_large.webp deleted file mode 100644 index 32a4a82878..0000000000 Binary files a/glide-webp/app/src/main/assets/test_09_large.webp and /dev/null differ diff --git a/glide-webp/app/src/main/java/org/signal/glide/webp/app/MainActivity.kt b/glide-webp/app/src/main/java/org/signal/glide/webp/app/MainActivity.kt deleted file mode 100644 index 81c27ed6e1..0000000000 --- a/glide-webp/app/src/main/java/org/signal/glide/webp/app/MainActivity.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.glide.webp.app - -import android.net.Uri -import android.os.Bundle -import android.util.Log -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.RecyclerView.ViewHolder -import com.bumptech.glide.Glide -import com.bumptech.glide.GlideBuilder -import com.bumptech.glide.load.engine.DiskCacheStrategy -import org.signal.core.util.dp - -/** - * Main activity for this sample app. - */ -class MainActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.main_activitiy) - - Glide.init( - this, - GlideBuilder() - .setLogLevel(Log.VERBOSE) - ) - - val context = this - - findViewById(R.id.list).apply { - adapter = ImageAdapter() - layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) - } - } - - class ImageAdapter : RecyclerView.Adapter() { - - private val data: List = listOf( - "test_01.webp", - "test_02.webp", - "test_03.webp", - "test_04.webp", - "test_05.webp", - "test_06_lossless.webp", - "test_06_lossy.webp", - "test_07_lossless.webp", - "test_09_large.webp" - ) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder { - return ImageViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.image_item, parent, false)) - } - - override fun getItemCount(): Int { - return data.size - } - - override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { - holder.bind(data[position]) - } - } - - class ImageViewHolder(itemView: View) : ViewHolder(itemView) { - val image: ImageView by lazy { itemView.findViewById(R.id.image) } - - fun bind(filename: String) { - Glide.with(itemView) - .load(Uri.parse("file:///android_asset/$filename")) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .override(250.dp) - .into(image) - } - } -} diff --git a/glide-webp/app/src/main/java/org/signal/glide/webp/app/SampleAppGlideModule.kt b/glide-webp/app/src/main/java/org/signal/glide/webp/app/SampleAppGlideModule.kt deleted file mode 100644 index 83a38e13d0..0000000000 --- a/glide-webp/app/src/main/java/org/signal/glide/webp/app/SampleAppGlideModule.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.glide.webp.app - -import android.content.Context -import com.bumptech.glide.Glide -import com.bumptech.glide.Registry -import com.bumptech.glide.annotation.GlideModule -import com.bumptech.glide.module.AppGlideModule -import org.signal.core.util.logging.Log - -@GlideModule -class SampleAppGlideModule : AppGlideModule() { - companion object { - private val TAG = Log.tag(SampleAppGlideModule::class.java) - } - - override fun registerComponents(context: Context, glide: Glide, registry: Registry) { - Log.e(TAG, "AppModule - registerComponents") - } -} diff --git a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Color.kt b/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Color.kt deleted file mode 100644 index bb54725391..0000000000 --- a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Color.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.glide.webp.app.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) diff --git a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Theme.kt b/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Theme.kt deleted file mode 100644 index 31cca5ab2a..0000000000 --- a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Theme.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.glide.webp.app.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun SignalTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - window.statusBarColor = colorScheme.primary.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) -} diff --git a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Type.kt b/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Type.kt deleted file mode 100644 index fc46389f3d..0000000000 --- a/glide-webp/app/src/main/java/org/signal/glide/webp/app/theme/Type.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.glide.webp.app.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) diff --git a/glide-webp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/glide-webp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 743651fa54..0000000000 --- a/glide-webp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/drawable/ic_launcher_background.xml b/glide-webp/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 126c9713e0..0000000000 --- a/glide-webp/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/glide-webp/app/src/main/res/layout/image_item.xml b/glide-webp/app/src/main/res/layout/image_item.xml deleted file mode 100644 index 7855954f96..0000000000 --- a/glide-webp/app/src/main/res/layout/image_item.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/layout/main_activitiy.xml b/glide-webp/app/src/main/res/layout/main_activitiy.xml deleted file mode 100644 index 14c14e9249..0000000000 --- a/glide-webp/app/src/main/res/layout/main_activitiy.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 80e53a5e47..0000000000 --- a/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 80e53a5e47..0000000000 --- a/glide-webp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78ecd..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index b2dfe3d1ba..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d64e5..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 62b611da08..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a3070fe..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 1b9a6956b3..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77f9f..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9287f50836..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index aa7d6427e6..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9126ae37cb..0000000000 Binary files a/glide-webp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/glide-webp/app/src/main/res/values/colors.xml b/glide-webp/app/src/main/res/values/colors.xml deleted file mode 100644 index 38279fc979..0000000000 --- a/glide-webp/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/values/strings.xml b/glide-webp/app/src/main/res/values/strings.xml deleted file mode 100644 index 1ed18d6e79..0000000000 --- a/glide-webp/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - Glide WebP - \ No newline at end of file diff --git a/glide-webp/app/src/main/res/values/themes.xml b/glide-webp/app/src/main/res/values/themes.xml deleted file mode 100644 index 67d43ba29d..0000000000 --- a/glide-webp/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - -