I'm trying to create a test app to test some code out for my main app, which creates ImageViews inside a ViewFlipper using an On-Click Button event. Every time I press the button, the code works as expected but Android gives me a Security Threat warning. Any answers as to why this is happening? And is there a better way to create dynamic image views, if that is whats causing the malware?
Here's the warning it gives me: Malware Warning
Here's the code for my Main program, including the On-Click event:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var vfProductImages: ViewFlipper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
vfProductImages = binding.vfProductImages
val btnAddImage = binding.btnAddImage
var flip = false
btnAddImage.setOnClickListener {
val imageView = ImageView(this)
imageView.layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT,
)
vfProductImages.addView(imageView)
if (flip) imageView.setImageResource(R.drawable.ic_launcher_background)
else imageView.setImageResource(R.drawable.ic_launcher_foreground)
flip = flip.not()
}
}
}
Here's the XML Layout file:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
tools:context=".MainActivity">
<LinearLayout
android:elevation="5dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ViewFlipper
android:id="@+id/vfProductImages"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="330dp"
android:elevation="16dp"
android:flipInterval="1000">
</ViewFlipper>
<Space
android:layout_width="match_parent"
android:layout_height="20dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnAddImage"
android:layout_gravity="center"
android:text="Add Image"/>
</LinearLayout>
</RelativeLayout>
Here's the build.gradle
file:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
}
android {
namespace 'com.example.xyz'
compileSdk 33
defaultConfig {
applicationId "com.example.xyz"
minSdk 26
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
viewBinding {
enabled = true
}
}
dependencies {
def retrofit_version = "2.9.0"
def coroutines_version = "1.7.2"
def lifecycle_version = "2.6.1"
def picasso_version = "2.8"
//Picasso
implementation "com.squareup.picasso:picasso:$picasso_version"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
// Annotation processor
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
//Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
//Retrofit
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
//Okhttp3
implementation "com.squareup.okhttp3:logging-interceptor:4.10.0"
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}