diff --git a/app/CoolWallpaper.jks b/app/CoolWallpaper.jks
new file mode 100644
index 0000000..f26c38a
Binary files /dev/null and b/app/CoolWallpaper.jks differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index fb0860a..c3d332b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,13 +23,13 @@
android:name=".activity.DetailActivity"
android:exported="false" />
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/activity/DetailActivity.java b/app/src/main/java/com/wallpaper/coolwallpaper/activity/DetailActivity.java
index 78db399..2ab8673 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/activity/DetailActivity.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/activity/DetailActivity.java
@@ -6,6 +6,7 @@ import android.app.WallpaperManager;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -27,6 +28,7 @@ import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.wallpaper.coolwallpaper.R;
+import com.wallpaper.coolwallpaper.callback.DownloadCallback;
import com.wallpaper.coolwallpaper.database.CoolEntity;
import com.wallpaper.coolwallpaper.databinding.ActivityDetailBinding;
import com.wallpaper.coolwallpaper.util.SetAndDownloadUtils;
@@ -36,7 +38,7 @@ import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-public class DetailActivity extends AppCompatActivity {
+public class DetailActivity extends AppCompatActivity implements DownloadCallback {
private ActivityDetailBinding binding;
private String original;
private String source;
@@ -71,15 +73,17 @@ public class DetailActivity extends AppCompatActivity {
source = coolEntity.getSource();
name = coolEntity.getName();
} else {
+ Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
finish();
}
+ setAndDownloadUtils = new SetAndDownloadUtils();
+
roomUtils = new RoomUtils(this);
handler = new Handler(Looper.getMainLooper());
executorService = Executors.newSingleThreadExecutor();
- setAndDownloadUtils = new SetAndDownloadUtils( binding.progressBar, binding.view);
}
private void initEvent() {
@@ -93,11 +97,11 @@ public class DetailActivity extends AppCompatActivity {
executorService.submit(() -> roomUtils.update(coolEntity));
});
- binding.set.setOnClickListener(v -> showCustomBottomSheetDialog());
+ binding.set.setOnClickListener(v -> showCustomBottomSheet());
- binding.downPicture.setOnClickListener(v -> {
+ binding.down.setOnClickListener(v -> {
showProgress();
- setAndDownloadUtils.setAsWallpaper(DetailActivity.this, source);
+ setAndDownloadUtils.setAsWallpaper(this, source,this);
});
loadImage();
@@ -109,67 +113,77 @@ public class DetailActivity extends AppCompatActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- setAndDownloadUtils.setAsWallpaper(this, source);
+ setAndDownloadUtils.setAsWallpaper(this, source,this);
} else {
- Toast.makeText(this, "Write permission to external storage is denied", Toast.LENGTH_SHORT).show();
+ Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
- private void showCustomBottomSheetDialog() {
+ private void showCustomBottomSheet() {
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this);
- View dialogView = LayoutInflater.from(this).inflate(R.layout.detail_dialog, null);
+ View bottomSheetView = LayoutInflater.from(this).inflate(R.layout.detail_dialog, null);
- dialogView.findViewById(R.id.both).setOnClickListener(v -> {
- handleWallpaperAction(bitmap, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
+ bottomSheetView.findViewById(R.id.both).setOnClickListener(v -> {
+ disableButtons(bottomSheetView);
+ applyWallpaper(bitmap, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK, bottomSheetDialog);
bottomSheetDialog.dismiss();
});
- dialogView.findViewById(R.id.lock).setOnClickListener(v -> {
- handleWallpaperAction(bitmap, WallpaperManager.FLAG_LOCK);
+ bottomSheetView.findViewById(R.id.lock).setOnClickListener(v -> {
+ disableButtons(bottomSheetView);
+ applyWallpaper(bitmap, WallpaperManager.FLAG_LOCK, bottomSheetDialog);
bottomSheetDialog.dismiss();
});
- dialogView.findViewById(R.id.desktop).setOnClickListener(v -> {
- handleWallpaperAction(bitmap, WallpaperManager.FLAG_SYSTEM);
+ bottomSheetView.findViewById(R.id.desktop).setOnClickListener(v -> {
+ disableButtons(bottomSheetView);
+ applyWallpaper(bitmap, WallpaperManager.FLAG_SYSTEM, bottomSheetDialog);
bottomSheetDialog.dismiss();
});
- bottomSheetDialog.setContentView(dialogView);
+ bottomSheetDialog.setContentView(bottomSheetView);
bottomSheetDialog.show();
}
- private void handleWallpaperAction(Bitmap bitmap, int flag) {
+ private void disableButtons(View bottomSheetView) {
+ bottomSheetView.findViewById(R.id.both).setEnabled(false);
+ bottomSheetView.findViewById(R.id.lock).setEnabled(false);
+ bottomSheetView.findViewById(R.id.desktop).setEnabled(false);
+ }
+
+ private void applyWallpaper(Bitmap bitmap, int flag, BottomSheetDialog bottomSheetDialog) {
showProgress();
+
executorService.submit(() -> {
- boolean isSuccess = false;
+ boolean success = false;
try {
- isSuccess = setWallpaper(bitmap, flag);
+ success = setWallpaperImage(bitmap, flag);
} catch (Exception e) {
e.printStackTrace();
} finally {
- boolean finalIsSuccess = isSuccess;
+ boolean finalSuccess = success;
handler.post(() -> {
hideProgress();
- binding.set.setEnabled(true);
- if (finalIsSuccess) {
- Toast.makeText(getApplicationContext(), "Wallpaper setting is successful", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(getApplicationContext(), "Wallpaper setting failed", Toast.LENGTH_SHORT).show();
- }
+ bottomSheetDialog.findViewById(R.id.both).setEnabled(true);
+ bottomSheetDialog.findViewById(R.id.lock).setEnabled(true);
+ bottomSheetDialog.findViewById(R.id.desktop).setEnabled(true);
+
+ String message = finalSuccess ? "Wallpaper set successfully" : "Failed to set wallpaper";
+ Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
});
}
});
}
- private boolean setWallpaper(Bitmap bitmap, int flag) {
- WallpaperManager wm = WallpaperManager.getInstance(getApplicationContext());
+ private boolean setWallpaperImage(Bitmap bitmap, int flag) {
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
binding.imageView.setDrawingCacheEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- wm.setBitmap(bitmap, null, true, flag);
+ wallpaperManager.setBitmap(bitmap, null, true, flag);
} else {
- wm.setBitmap(bitmap);
+ wallpaperManager.setBitmap(bitmap);
}
return true;
} catch (IOException e) {
@@ -180,6 +194,7 @@ public class DetailActivity extends AppCompatActivity {
}
}
+
private void loadImage() {
Glide.with(this)
.asBitmap()
@@ -223,8 +238,10 @@ public class DetailActivity extends AppCompatActivity {
}
private void hideProgress() {
- binding.progressBar.setVisibility(View.GONE);
- binding.view.setVisibility(View.GONE);
+ if (binding != null) {
+ binding.progressBar.setVisibility(View.GONE);
+ binding.view.setVisibility(View.GONE);
+ }
}
private void showProgress() {
@@ -232,6 +249,21 @@ public class DetailActivity extends AppCompatActivity {
binding.view.setVisibility(View.VISIBLE);
}
+ @Override
+ public void onDownloadStart() {
+ showProgress();
+ }
+
+ @Override
+ public void onDownloadComplete(Uri uri) {
+ hideProgress();
+ }
+
+ @Override
+ public void onDownloadFailed() {
+ hideProgress();
+ }
+
@Override
protected void onDestroy() {
super.onDestroy();
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/activity/MainActivity.java b/app/src/main/java/com/wallpaper/coolwallpaper/activity/MainActivity.java
index 70652c0..fa83f0d 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/activity/MainActivity.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/activity/MainActivity.java
@@ -82,7 +82,7 @@ public class MainActivity extends AppCompatActivity {
private void setTab(TabLayoutBinding tabLayoutBinding, int position) {
int iconResId = getIconResource(position, false);
- int textColorResId = R.color.gray;
+ int textColorResId = R.color.black;
switch (position) {
case 0:
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/activity/WelcomeActivity.java b/app/src/main/java/com/wallpaper/coolwallpaper/activity/WelcomeActivity.java
index 064760f..bb56bdf 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/activity/WelcomeActivity.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/activity/WelcomeActivity.java
@@ -17,9 +17,8 @@ import com.wallpaper.coolwallpaper.R;
import com.wallpaper.coolwallpaper.databinding.ActivityWelcomeBinding;
public class WelcomeActivity extends AppCompatActivity {
-
private ActivityWelcomeBinding binding;
- private static final long TOTAL_TIME = 1000;
+ private static final long TOTAL_TIME = 3000;
private CountDownTimer countDownTimer;
@Override
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/adapter/SubListAdapter.java b/app/src/main/java/com/wallpaper/coolwallpaper/adapter/SubListAdapter.java
index c755ac3..08b6b81 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/adapter/SubListAdapter.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/adapter/SubListAdapter.java
@@ -46,7 +46,7 @@ public class SubListAdapter extends RecyclerView.Adapter {
- Intent intent = new Intent(activity, SubListActivity.class);
+ private void setItemClickListener(final CoolEntity coolEntity) {
+ itemImage.setOnClickListener(v -> {
+ Intent intent = new Intent(v.getContext(), SubListActivity.class);
intent.putExtra("name", coolEntity.getName());
- activity.startActivity(intent);
+ v.getContext().startActivity(intent);
});
}
-
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/adapter/WallpaperAdapter.java b/app/src/main/java/com/wallpaper/coolwallpaper/adapter/WallpaperAdapter.java
index 90819aa..3c8895d 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/adapter/WallpaperAdapter.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/adapter/WallpaperAdapter.java
@@ -15,7 +15,6 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.wallpaper.coolwallpaper.R;
import com.wallpaper.coolwallpaper.activity.DetailActivity;
-import com.wallpaper.coolwallpaper.activity.SubListActivity;
import com.wallpaper.coolwallpaper.database.AppDatabase;
import com.wallpaper.coolwallpaper.database.CoolEntity;
@@ -50,7 +49,7 @@ public class WallpaperAdapter extends RecyclerView.Adapter {
- Intent intent = new Intent(activity, DetailActivity.class);
+ private void setupItemClickListeners(CoolEntity coolEntity) {
+ itemImageView.setOnClickListener(v -> {
+ Intent intent = new Intent(v.getContext(), DetailActivity.class);
intent.putExtra("cool", coolEntity);
- activity.startActivity(intent);
+ v.getContext().startActivity(intent);
});
- favoriteButton.setOnClickListener(v -> toggleFavorite(coolEntity));
+ likeButton.setOnClickListener(v -> handleFavoriteToggle(coolEntity));
}
- private void toggleFavorite(CoolEntity coolEntity) {
- boolean newStatus = !coolEntity.getLike();
- coolEntity.setLike(newStatus);
+ private void handleFavoriteToggle(CoolEntity coolEntity) {
+ boolean updatedStatus = !coolEntity.getLike();
+ coolEntity.setLike(updatedStatus);
- updateImageInDatabase(coolEntity);
+ saveImageDataToDatabase(coolEntity);
notifyItemChanged(getAdapterPosition());
}
- private void updateImageInDatabase(CoolEntity coolEntity) {
+ private void saveImageDataToDatabase(CoolEntity coolEntity) {
executor.execute(() -> {
- AppDatabase.getInstance(context)
+ AppDatabase.getInstance(itemImageView.getContext())
.imageEntryDao()
.update(coolEntity);
});
}
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/callback/DownloadCallback.java b/app/src/main/java/com/wallpaper/coolwallpaper/callback/DownloadCallback.java
new file mode 100644
index 0000000..3dc0648
--- /dev/null
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/callback/DownloadCallback.java
@@ -0,0 +1,9 @@
+package com.wallpaper.coolwallpaper.callback;
+
+import android.net.Uri;
+
+public interface DownloadCallback {
+ void onDownloadStart();
+ void onDownloadComplete(Uri uri);
+ void onDownloadFailed();
+}
diff --git a/app/src/main/java/com/wallpaper/coolwallpaper/util/SetAndDownloadUtils.java b/app/src/main/java/com/wallpaper/coolwallpaper/util/SetAndDownloadUtils.java
index 76b852d..88b7bb7 100644
--- a/app/src/main/java/com/wallpaper/coolwallpaper/util/SetAndDownloadUtils.java
+++ b/app/src/main/java/com/wallpaper/coolwallpaper/util/SetAndDownloadUtils.java
@@ -14,9 +14,12 @@ import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
+import com.wallpaper.coolwallpaper.callback.DownloadCallback;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -26,18 +29,11 @@ import okhttp3.Response;
public class SetAndDownloadUtils {
public static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 111;
- private final ProgressBar progressBar;
- private final ImageView overlayView;
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
- public SetAndDownloadUtils(ProgressBar progressBar, ImageView overlayView) {
- this.progressBar = progressBar;
- this.overlayView = overlayView;
- }
-
- public void setAsWallpaper(Activity activity, String imageUrl) {
+ public void setAsWallpaper(Activity activity, String imageUrl,DownloadCallback callback) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- startDownload(activity, imageUrl);
+ startDownload(activity, imageUrl,callback);
} else {
if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
@@ -45,32 +41,29 @@ public class SetAndDownloadUtils {
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
} else {
- startDownload(activity, imageUrl);
+ startDownload(activity, imageUrl,callback);
}
}
}
- private void startDownload(Activity activity, String imageUrl) {
- progressBar.setVisibility(View.VISIBLE);
- overlayView.setVisibility(View.VISIBLE);
+ private void startDownload(Activity activity, String imageUrl, DownloadCallback callback) {
+ callback.onDownloadStart();
executorService.submit(() -> {
Uri uri = downloadImage(activity, imageUrl);
- activity.runOnUiThread(() -> {
- progressBar.setVisibility(View.GONE);
- overlayView.setVisibility(View.GONE);
+ activity.runOnUiThread(() -> {
if (uri != null) {
- Toast.makeText(activity, "Wallpaper downloaded", Toast.LENGTH_SHORT).show();
+ callback.onDownloadComplete(uri);
} else {
- Toast.makeText(activity, "Wallpaper download failure", Toast.LENGTH_SHORT).show();
+ callback.onDownloadFailed();
}
});
});
}
private Uri downloadImage(Activity activity, String imageUrl) {
- String displayName = System.currentTimeMillis() + ".jpg";
+ String displayName = UUID.randomUUID().toString() + ".jpg";
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, displayName);
contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
diff --git a/app/src/main/res/drawable/back.xml b/app/src/main/res/drawable/back.xml
index cb571eb..f2361d3 100644
--- a/app/src/main/res/drawable/back.xml
+++ b/app/src/main/res/drawable/back.xml
@@ -5,5 +5,5 @@
android:viewportHeight="1024">
+ android:fillColor="@color/white"/>
diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml
index 5ce94cb..aba15d6 100644
--- a/app/src/main/res/layout/activity_detail.xml
+++ b/app/src/main/res/layout/activity_detail.xml
@@ -18,15 +18,15 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginStart="32dp"
- android:layout_marginTop="32dp"
+ android:layout_marginTop="64dp"
android:src="@drawable/back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml
index 69c6d12..06d1659 100644
--- a/app/src/main/res/layout/activity_welcome.xml
+++ b/app/src/main/res/layout/activity_welcome.xml
@@ -5,6 +5,7 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/blue_black"
tools:context=".activity.WelcomeActivity">
diff --git a/app/src/main/res/layout/detail_dialog.xml b/app/src/main/res/layout/detail_dialog.xml
index 1df02bf..ffe4503 100644
--- a/app/src/main/res/layout/detail_dialog.xml
+++ b/app/src/main/res/layout/detail_dialog.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..69d30f6
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
deleted file mode 100644
index c209e78..0000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..d3c2339
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
deleted file mode 100644
index 4f0f1d6..0000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..95396d3
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
deleted file mode 100644
index 948a307..0000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..09d28bf
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
deleted file mode 100644
index 28d4b77..0000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b19dc6d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
deleted file mode 100644
index aa7d642..0000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/placeholder.png b/app/src/main/res/mipmap-xxxhdpi/placeholder.png
index 8a76492..8617ac3 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/placeholder.png and b/app/src/main/res/mipmap-xxxhdpi/placeholder.png differ
diff --git a/keystore.properties b/keystore.properties
new file mode 100644
index 0000000..9026b81
--- /dev/null
+++ b/keystore.properties
@@ -0,0 +1,6 @@
+app_name=Cool Wallpaper
+package_name=com.wallpaper.coolwallpaper
+keystoreFile=app/CoolWallpaper.jks
+key_alias=CoolWallpaperkey0
+key_store_password=CoolWallpaper
+key_password=CoolWallpaper
\ No newline at end of file