MainActivity.kt
MainActivity.kt
blackx_ecommerce
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.View
import android.view.Window
import android.view.WindowManager
import android.widget.Button
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.SearchView
import android.widget.TextView
import android.widget.Toast
import androidx.media3.effect.Crop
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.bumptech.glide.Glide
import com.facebook.shimmer.ShimmerFrameLayout
import com.google.android.gms.tasks.Continuation
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import com.google.firebase.storage.UploadTask
import java.io.File
auth = Firebase.auth
db = FirebaseFirestore.getInstance()
mAuth = FirebaseAuth.getInstance()
if (user != null) {
val userName = user.displayName
textView.text = userName
} else {
// Handle the case where the user is not signed in
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
finish()
}
logout.setOnClickListener {
signOutAndStartSignInActivity()
finish()
}
imageView = findViewById(R.id.profile_picture_image_view)
banner_imageview = findViewById(R.id.banner_imageview)
val latestImageRef =
storageRef.child("common_folder/latest_banner.jpg")
latestImageRef.downloadUrl
.addOnSuccessListener { imageUrl ->
// Display the latest image using Picasso
runOnUiThread {
val imageView =
findViewById<ImageView>(R.id.banner_imageview)
imageView.load("https://www.example.com/image.jpg") {
crossfade(true)
placeholder(R.drawable.placeholder)
shimmerViewContainer.stopShimmer()
shimmerViewContainer.setShimmer(null)
}
}
}
// Set up the button to open the image picker
imageView.setOnClickListener {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "image/*"
startActivityForResult(intent, PICK_IMAGE_REQUEST)
}
if (user != null) {
val db = FirebaseFirestore.getInstance()
db.collection("users").document(user.uid)
.get()
.addOnSuccessListener { document ->
if (document != null) {
val name1 = user.displayName
val name = user.displayName
val phone = document.get("phone") as String
val userInfoTextView =
findViewById<TextView>(R.id.name21)
userInfoTextView.text = "Welcome $name\n \n Your Phone
Number Is: $phone"
}
}
.addOnFailureListener { exception ->
// Failed to retrieve user data
storageRef =
FirebaseStorage.getInstance().getReference("images/$userId.jpg")
storageRef.delete().addOnSuccessListener {
val databaseRef =
FirebaseDatabase.getInstance().getReference("users/$userId")
val updates = HashMap<String, Any?>()
updates["profile_pic_url"] = null
imageView.setImageResource(R.drawable.ic_launcher_background)
Toast.makeText(this, "User profile removed
successfully", Toast.LENGTH_SHORT).show()
databaseRef.updateChildren(updates).addOnSuccessListener {
// User profile updated successfully
}.addOnFailureListener {
// Failed to update user profile
}
}.addOnFailureListener {
// Failed to delete image file
databaseReference =
FirebaseDatabase.getInstance().getReference("products")
storageReference = FirebaseStorage.getInstance().reference
productRecyclerView2 = findViewById(R.id.productRecyclerView2)
productRecyclerView3 = findViewById(R.id.productRecyclerView3)
// Set up RecyclerView
val productList: MutableList<Product> = mutableListOf()
productAdapter = ProductAdapter(productList)
productAdapter.onCartIconClickListener = this
productRecyclerView2.adapter = productAdapter
productRecyclerView3.adapter = productAdapter
productRecyclerView2.layoutManager = LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, false)
productRecyclerView3.layoutManager = LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, false)
}
})
Handler().postDelayed({
// Upload the cropped image to Firebase Storage
val file = File(this.getExternalCacheDir(),
"cropped_image.jpg")
val uploadTask = profilePicRef.putFile(Uri.fromFile(file))
uploadTask.continueWithTask(Continuation<UploadTask.TaskSnapshot, Task<Uri>> {
task ->
if (!task.isSuccessful) {
task.exception?.let {
throw it
}
}
return@Continuation profilePicRef.downloadUrl
}).addOnCompleteListener { task ->
if (task.isSuccessful) {
val downloadUri = task.result
Glide.with(this).load(downloadUri).into(imageView)
} else {
// Handle errors here
Log.d("UploadError", task.exception.toString())
}
}
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = android.graphics.Color.parseColor(color)
}
}
}
implementation(libs.canhub.android.image.cropper)
import com.canhub.cropper.CropImageView
implementation(libs.android.image.cropper)
implementation(libs.firebase.firestore.ktx)
import com.canhub.cropper.CropImage
import com.google.firebase.firestore.FirebaseFirestore
import com.bumptech.glide.Glide
implementation(libs.github.android.image.cropper)
implementation(libs.android.image.cropper.v432)
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.android.image.cropper.v432)
implementation(libs.github.glide)
implementation(libs.androidx.constraintlayout)
implementation(libs.firebase.auth)
implementation(libs.firebase.database)
implementation(libs.firebase.storage)
implementation(libs.androidx.cardview)
implementation(libs.firebase.firestore.ktx)
implementation(libs.shimmer)
implementation(libs.androidx.media3.effect)
implementation(libs.androidx.recyclerview)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)