diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 9e69b5d..d9cebe6 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -12,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b7b2f59..03572dc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,7 +16,7 @@ android {
defaultConfig {
applicationId "com.capstone.foodify"
minSdk 26
- targetSdk 32
+ targetSdk 31
versionCode 1
versionName "1.0"
@@ -58,6 +58,8 @@ dependencies {
implementation 'com.google.android.gms:play-services-location:21.0.1'
implementation files('libs/zpdk-release-v3.1.aar')
implementation 'com.google.firebase:firebase-database-ktx:20.1.0'
+ implementation 'com.google.firebase:firebase-messaging'
+ implementation 'com.google.firebase:firebase-analytics'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
diff --git a/app/google-services.json b/app/google-services.json
index c939e78..daa9a05 100644
--- a/app/google-services.json
+++ b/app/google-services.json
@@ -13,6 +13,72 @@
"package_name": "com.capstone.foodify"
}
},
+ "oauth_client": [
+ {
+ "client_id": "213676556381-bu8t1g75ma9l38e360ikreg2rchlciv1.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.capstone.foodify",
+ "certificate_hash": "e0920906e0bbcc37124d669e6f5095a2f7e08ebf"
+ }
+ },
+ {
+ "client_id": "213676556381-jmh1dva918r6juc331d1jclgjeinqor1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBBboME-vz27_Rgg98ftivvSvMVoH9lV1A"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "213676556381-jmh1dva918r6juc331d1jclgjeinqor1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:213676556381:android:cebb0c6035fa9e05e88db4",
+ "android_client_info": {
+ "package_name": "com.capstone.foodify.shipper"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "213676556381-jmh1dva918r6juc331d1jclgjeinqor1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBBboME-vz27_Rgg98ftivvSvMVoH9lV1A"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "213676556381-jmh1dva918r6juc331d1jclgjeinqor1.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:213676556381:android:d951cc73dfe7438ee88db4",
+ "android_client_info": {
+ "package_name": "com.capstone.foodify.testapplication"
+ }
+ },
"oauth_client": [
{
"client_id": "213676556381-jmh1dva918r6juc331d1jclgjeinqor1.apps.googleusercontent.com",
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b256a4c..932632c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,6 +16,7 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..1d17425
Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ
diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
index 784f591..a015642 100644
--- a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
+++ b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
@@ -94,9 +94,9 @@ public interface FoodApiToken {
@GET("users/{userId}/orders/status/{status}")
Call getOrderUser(@Path("userId") int userId, @Path("status") String status, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir);
- @DELETE("users/{userId}/orders/{orderId}")
- Call deleteOrder(@Path("userId") int userId, @Path("orderId") int orderId);
-
@PUT("users/{userId}/orders/{orderId}/status")
Call updateOrderStatus(@Path("userId") int userId, @Path("orderId") int orderId, @Query("status") String status);
+
+ @PUT("users/{userId}/update/fcm")
+ Call updateFCMToken(@Path("userId") int userId, @Body String token);
}
diff --git a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
index d4bc0cf..9ae83ad 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
@@ -2,12 +2,18 @@ package com.capstone.foodify.Activity;
import android.Manifest;
import android.annotation.SuppressLint;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.ColorStateList;
import android.location.Location;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -19,8 +25,10 @@ import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDelegate;
+import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.app.ActivityCompat;
+import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.core.splashscreen.SplashScreen;
@@ -32,6 +40,7 @@ import com.capstone.foodify.API.FoodApiToken;
import com.capstone.foodify.BuildConfig;
import com.capstone.foodify.Common;
import com.capstone.foodify.Fragment.HomeFragment;
+import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.User;
import com.capstone.foodify.R;
import com.capstone.foodify.ViewPagerAdapter;
@@ -57,9 +66,13 @@ import com.google.android.material.navigation.NavigationBarView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GetTokenResult;
+import com.google.firebase.messaging.FirebaseMessaging;
import org.objectweb.asm.Handle;
+import java.util.Arrays;
+import java.util.List;
+
import io.paperdb.Paper;
import retrofit2.Call;
import retrofit2.Callback;
@@ -79,7 +92,7 @@ public class MainActivity extends AppCompatActivity {
private static final long UPDATE_INTERVAL_IN_MILLISECONDS = 1000;
private static final long MAX_WAIT_TIME_IN_MILLISECONDS = 1000;
private static final int LOCATION_REQUEST_CODE = 100;
- private static final String TAG = MainActivity.class.getSimpleName();
+ private static final String TAG = "MainActivity";
private FusedLocationProviderClient mFusedLocationClient;
private SettingsClient mSettingsClient;
@@ -117,6 +130,8 @@ public class MainActivity extends AppCompatActivity {
Common.CURRENT_USER = userData;
HomeFragment.setNameUser();
+ getTokenFCM();
+
progressLayout.setVisibility(View.GONE);
}
}
@@ -150,6 +165,12 @@ public class MainActivity extends AppCompatActivity {
bottomNavigation();
+ startPowerSaverIntent(this);
+ checkNotificationPermission();
+
+ if(Common.CURRENT_USER != null)
+ getTokenFCM();
+
if (Common.CURRENT_LOCATION == null) {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
@@ -189,9 +210,40 @@ public class MainActivity extends AppCompatActivity {
}
}
- }, 3000);
+ }, 5000);
}
+
+ private void getTokenFCM(){
+ FirebaseMessaging.getInstance().getToken()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if(!task.isSuccessful()){
+ Log.d(TAG, "Failed to registration token!");
+
+ return;
+ }
+
+ String token = task.getResult();
+
+ FoodApiToken.apiService.updateFCMToken(Common.CURRENT_USER.getId(), token).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if(response.code() != 200)
+ Toast.makeText(MainActivity.this, "Không thể cập nhật FCM Token. Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(MainActivity.this, "Đã có lỗi khi kết nối đến hệ thống!", Toast.LENGTH_SHORT).show();
+ }
+ });
+
+ Log.d(TAG, "Token: " + token);
+ }
+ });
+ }
private void initComponent() {
bottomNavigationView = findViewById(R.id.bottom_nav);
viewPager2 = findViewById(R.id.viewPager);
@@ -256,6 +308,13 @@ public class MainActivity extends AppCompatActivity {
});
}
+ //myringtone permission
+ private void checkNotificationPermission(){
+ if(!NotificationManagerCompat.from(this).areNotificationsEnabled()){
+ showDialogPermission("Hãy bật quyền thông báo trên thiết bị của bạn để chúng thôi có thể cung cấp thông tin cho bạn một cách nhanh nhất!");
+ }
+ }
+
//Location
private void checkLocationPermission(){
@@ -283,15 +342,15 @@ public class MainActivity extends AppCompatActivity {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Đã cấp quyền thành công!", Toast.LENGTH_SHORT).show();
} else {
- showDialogPermission();
+ showDialogPermission("Hãy cho ứng dụng truy cập vào vị trí của bạn để trải nghiệm tốt hơn!");
}
}
}
- private void showDialogPermission() {
+ private void showDialogPermission(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage("Hãy cho ứng dụng truy cập vào vị trí của bạn để trải nghiệm tốt hơn!")
+ builder.setMessage(message)
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
@@ -382,6 +441,66 @@ public class MainActivity extends AppCompatActivity {
Common.CURRENT_LOCATION = mCurrentLocation;
}
}
+
+ if(Common.CURRENT_USER != null)
+ getTokenFCM();
+ }
+
+ //Check auto start permission
+ public static List POWER_MANAGER_INTENTS = Arrays.asList(
+ new Intent().setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")),
+ new Intent().setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")),
+ new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")),
+ new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
+ new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")),
+ new Intent().setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")),
+ new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")),
+ new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")),
+ new Intent().setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")),
+ new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.entry.FunctionActivity")).setData(android.net.Uri.parse("mobilemanager://function/entry/AutoStart"))
+ );
+
+
+ public void startPowerSaverIntent(Context context) {
+ SharedPreferences settings = context.getSharedPreferences("ProtectedApps", Context.MODE_PRIVATE);
+ boolean skipMessage = settings.getBoolean("skipProtectedAppCheck", false);
+ if (!skipMessage) {
+ final SharedPreferences.Editor editor = settings.edit();
+ boolean foundCorrectIntent = false;
+ for (Intent intent : POWER_MANAGER_INTENTS) {
+ if (isCallable(context, intent)) {
+ foundCorrectIntent = true;
+ final AppCompatCheckBox dontShowAgain = new AppCompatCheckBox(context);
+ dontShowAgain.setText("Không hiện hộp thoại này nữa!");
+ dontShowAgain.setButtonTintList(ColorStateList.valueOf(getResources().getColor(R.color.primaryColor, null)));
+ dontShowAgain.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ editor.putBoolean("skipProtectedAppCheck", isChecked);
+ editor.apply();
+ });
+
+ new AlertDialog.Builder(context)
+ .setTitle("Phát hiện máy " + Build.MANUFACTURER + "!")
+ .setMessage(String.format("Vì một số dòng máy Trung Quốc tự động tắt chế độ chạy nền của app %s, nên cần bạn " +
+ "cho phép ứng dụng luôn tự khởi chạy ở cài đặt ứng dụng để có thể không bỏ lỡ bất kỳ thông báo nào!%n", context.getString(R.string.app_name)))
+ .setView(dontShowAgain)
+ .setPositiveButton("Đi đến cài đặt", (dialog, which) -> context.startActivity(intent))
+ .setNegativeButton("Đóng", null)
+ .show();
+ break;
+ }
+ }
+ if (!foundCorrectIntent) {
+ editor.putBoolean("skipProtectedAppCheck", true);
+ editor.apply();
+ }
+ }
+ }
+
+
+ private static boolean isCallable(Context context, Intent intent) {
+ List list = context.getPackageManager().queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ return list.size() > 0;
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/capstone/foodify/Activity/TrackingOrderActivity.java b/app/src/main/java/com/capstone/foodify/Activity/TrackingOrderActivity.java
index 8d0a4f3..10f685c 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/TrackingOrderActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/TrackingOrderActivity.java
@@ -3,6 +3,7 @@ package com.capstone.foodify.Activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
@@ -146,7 +147,7 @@ public class TrackingOrderActivity extends FragmentActivity implements OnMapRead
shippingMarker = mMap.addMarker(new MarkerOptions()
.position(latLng)
.title("Người giao")
- .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.shipper)));
} else {
shippingMarker.setPosition(latLng);
}
@@ -247,6 +248,13 @@ public class TrackingOrderActivity extends FragmentActivity implements OnMapRead
}
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ orderDatabase.addValueEventListener(this);
+ }
+
@Override
protected void onStop() {
orderDatabase.removeEventListener(this);
diff --git a/app/src/main/java/com/capstone/foodify/NotificationService.java b/app/src/main/java/com/capstone/foodify/NotificationService.java
new file mode 100644
index 0000000..413c968
--- /dev/null
+++ b/app/src/main/java/com/capstone/foodify/NotificationService.java
@@ -0,0 +1,114 @@
+package com.capstone.foodify;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioAttributes;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+
+import com.capstone.foodify.API.FoodApiToken;
+import com.capstone.foodify.Activity.MainActivity;
+import com.capstone.foodify.Model.Response.CustomResponse;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class NotificationService extends FirebaseMessagingService {
+
+ private static final String TAG = "NotificationService";
+ public static final String channelId = "foodify-notification";
+
+ @Override
+ public void onMessageReceived(RemoteMessage remoteMessage) {
+ // TODO(developer): Handle FCM messages here.
+ // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
+ Log.d(TAG, "From: " + remoteMessage.getFrom());
+
+ // Check if message contains a notification payload.
+ if (remoteMessage.getNotification() != null) {
+ Log.d(TAG, "Message notification Body: " + remoteMessage.getNotification().getBody());
+ }
+
+ // Also if you intend on generating your own notifications as a result of a received FCM
+ // message, here is where that should be initiated. See sendNotification method below.
+
+ sendNotification(remoteMessage.getNotification().getTitle() , remoteMessage.getNotification().getBody());
+ }
+
+ private void sendNotification(String title, String messageBody) {
+ Intent intent = new Intent(this, MainActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
+ PendingIntent.FLAG_IMMUTABLE);
+
+ Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ NotificationCompat.Builder notificationBuilder =
+ new NotificationCompat.Builder(this, channelId)
+ .setSmallIcon(R.mipmap.ic_launcher)
+ .setContentTitle(title)
+ .setContentText(messageBody)
+ .setAutoCancel(true)
+ .setSound(defaultSoundUri)
+ .setContentIntent(pendingIntent);
+
+ NotificationManager notificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ createNotificationChannel(notificationManager);
+
+ notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
+ }
+
+ private void createNotificationChannel(NotificationManager notificationManager) {
+ Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + this.getPackageName() + "/" + R.raw.notificationsound); //Here is FILE_NAME is the name of file that you want to play
+ // Create the NotificationChannel, but only on API 26+ because
+ // the NotificationChannel class is new and not in the support library
+ CharSequence name = "Notification";
+ String description = "testing";
+ int importance = NotificationManager.IMPORTANCE_HIGH;
+ AudioAttributes audioAttributes = new AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .setUsage(AudioAttributes.USAGE_ALARM)
+ .build();
+ NotificationChannel channel = new NotificationChannel(channelId, name, importance);
+ channel.setDescription(description);
+ channel.enableLights(true); channel.enableVibration(true);
+ channel.setSound(sound, audioAttributes);
+ notificationManager.createNotificationChannel(channel);
+ }
+
+
+ @Override
+ public void onNewToken(@NonNull String token) {
+ super.onNewToken(token);
+
+ if(Common.CURRENT_USER != null){
+ FoodApiToken.apiService.updateFCMToken(Common.CURRENT_USER.getId(), token).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if(response.code() != 200)
+ Toast.makeText(NotificationService.this, "Không thể cập nhật FCM Token. Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(NotificationService.this, "Đã có lỗi khi kết nối đến hệ thống!", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ Log.d(TAG, "Renew token: " + token);
+ }
+}
diff --git a/app/src/main/res/drawable/baseline_notifications_24.xml b/app/src/main/res/drawable/baseline_notifications_24.xml
new file mode 100644
index 0000000..1d038a4
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_notifications_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/shipper.png b/app/src/main/res/drawable/shipper.png
new file mode 100644
index 0000000..12a8272
Binary files /dev/null and b/app/src/main/res/drawable/shipper.png differ
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index eca70cf..036d09b 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index eca70cf..036d09b 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml
deleted file mode 100644
index 6f3b755..0000000
--- a/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ 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..ec123c1
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-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..763cd72
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..70ef562
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
deleted file mode 100644
index b2dfe3d..0000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.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..6776e2f
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-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..8926ecd
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..17f0409
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
deleted file mode 100644
index 62b611d..0000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.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..2eda3db
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-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..88ae086
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..781b358
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
deleted file mode 100644
index 1b9a695..0000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.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..7760cac
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-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..ce068c1
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db1a27c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9287f50..0000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.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..b6534fe
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/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..70d34b9
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..bad4071
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9126ae3..0000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/app/src/main/res/raw/notificationsound.mp3 b/app/src/main/res/raw/notificationsound.mp3
new file mode 100644
index 0000000..1f2bacb
Binary files /dev/null and b/app/src/main/res/raw/notificationsound.mp3 differ
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000..18fa3f2
--- /dev/null
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #EB8085
+
\ No newline at end of file