Advertisement
FutureDreams

Untitled

Nov 4th, 2019
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.30 KB | None | 0 0
  1. package fd.ukkix_beta;
  2.  
  3. import android.app.Notification;
  4. import android.app.NotificationChannel;
  5. import android.app.NotificationManager;
  6. import android.app.PendingIntent;
  7. import android.app.TaskStackBuilder;
  8. import android.content.Context;
  9. import android.content.Intent;
  10. import android.media.AudioAttributes;
  11. import android.media.RingtoneManager;
  12. import android.net.Uri;
  13. import android.os.Build;
  14. import android.support.annotation.RequiresApi;
  15. import android.support.v4.app.NotificationCompat;
  16. import android.util.Log;
  17. import android.view.MenuItem;
  18. import com.google.gson.Gson;
  19. import com.google.gson.reflect.TypeToken;
  20. import java.lang.reflect.Type;
  21. import java.util.ArrayList;
  22. import fd.ukkix_beta.models.NotificationItem;
  23. import fd.ukkix_beta.models.SettingsModel;
  24. import fd.ukkix_beta.tools.FileWorker;
  25. import fd.ukkix_beta.tools.Language;
  26. import static android.content.Context.NOTIFICATION_SERVICE;
  27.  
  28. public class Notifier {
  29.  
  30.     NotificationCompat.Builder notiBuild;
  31.     FileWorker fw = new FileWorker();
  32.     Gson gson = new Gson();
  33.     Context cont;
  34.     MenuItem mi;
  35.     String TAG = "mylog: Notifier";
  36.     Language language;
  37.     final SettingsModel settingsModel = new SettingsModel();
  38.  
  39.     public Notifier(Context cont) {
  40.         // Initiate settings
  41.         language = new Language(cont);
  42.         final String settings_string = fw.read("settings");
  43.         if (settings_string != null){
  44.             settingsModel.setAll(gson.fromJson(settings_string, SettingsModel.class));
  45.         } else {
  46.             settingsModel.setSound(true);
  47.             settingsModel.setVibration(true);
  48.             if (language.get().equals("ru")) settingsModel.setLanguage("ru");
  49.             else settingsModel.setLanguage("uz");
  50.         }
  51.         language.change(settingsModel.getLanguage());
  52.  
  53.         // Bro, just skip those lines, I won't explain them,
  54.         // 'cause I just copied them from stackoverflow
  55.         // If those lines don't work, you know whom to blame
  56.  
  57.         Intent resultIntent = new Intent(cont, Notifications.class);
  58.         TaskStackBuilder stackBuilder = TaskStackBuilder.create(cont);
  59.         stackBuilder.addNextIntentWithParentStack(resultIntent);
  60.         PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
  61.  
  62.         NotificationCompat.Builder mBuilder =
  63.                 (NotificationCompat.Builder) new NotificationCompat.Builder(cont)
  64.                         .setSmallIcon(R.drawable.ic_notification)
  65.                         .setAutoCancel(true)
  66.                         .setPriority(Notification.PRIORITY_MAX)
  67.                         .setContentIntent(resultPendingIntent);
  68.         mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
  69.         // here's our vibration pattern, I made it myself (the only thing I did)
  70.         long[] vibration_pattern = {500, 500, 300, 700, 2400, 600, 300, 500};
  71.         mBuilder.setVibrate(vibration_pattern);
  72.         this.notiBuild = mBuilder;
  73.         this.cont = cont;
  74.     }
  75.  
  76.     public Notifier(Context cont, MenuItem mi) {
  77.  
  78.         // Bro, just skip those lines, I won't explain them,
  79.         // 'cause I just copied them from stackoverflow
  80.         // If those lines don't work, you know whom to blame
  81.  
  82.         Intent resultIntent = new Intent(cont, Notifications.class);
  83.         TaskStackBuilder stackBuilder = TaskStackBuilder.create(cont);
  84.         stackBuilder.addNextIntentWithParentStack(resultIntent);
  85.         PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
  86.  
  87.         NotificationCompat.Builder mBuilder =
  88.                 (NotificationCompat.Builder) new NotificationCompat.Builder(cont)
  89.                         .setSmallIcon(R.drawable.ic_notification)
  90.                         //.setSubText("Subdata bla blaa")
  91.                         .setAutoCancel(true)
  92.                         .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
  93.                         .setPriority(Notification.PRIORITY_MAX)
  94.                         .setContentIntent(resultPendingIntent);
  95.         //mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
  96.         // here's our vibration pattern, I made it myself (the only thing I did)
  97.         long[] vibration_pattern = {500, 500, 300, 700, 2400, 600, 300, 500};
  98.         if (settingsModel.isVibration()) mBuilder.setVibrate(vibration_pattern);
  99.         this.notiBuild = mBuilder;
  100.         this.cont = cont;
  101.         this.mi = mi;
  102.     }
  103.  
  104.  
  105.     // Bro, you are right in the heart of our app
  106.     // Keep your eyes widely open
  107.     // And please, DO NOT TOUCH ANYTHING here
  108.     // Honestly, if you change anything, I'll stab a fork into your forehead
  109.     // Not joking, touch => fork in your forehead
  110.  
  111.     public void push(NotificationItem ni) {
  112.         if (shouldPush(ni)){
  113.             String CHANNEL_ID = "1";
  114.             //Uri soundUri = Uri.parse("android.resource://" + cont.getPackageName() + "/" + R.raw.notify);
  115.             Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
  116.             NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(cont, CHANNEL_ID)
  117.                     .setSmallIcon(R.drawable.ic_notification)
  118.                     .setContentTitle(ni.getTitle())
  119.                     .setContentText(ni.getData())
  120.                     .setAutoCancel(true)
  121.                     .setShowWhen(true)
  122.                     .setChannelId(CHANNEL_ID)
  123.                     .setNumber(1);// number count of new notifications
  124.  
  125.             notificationBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
  126.             notificationBuilder.setDefaults(Notification.DEFAULT_SOUND);
  127.             //notificationBuilder.setSound(soundUri);
  128.  
  129.             Intent intent = new Intent(cont, Notifications.class);
  130.             intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
  131.             PendingIntent contentIntent = PendingIntent.getActivity(cont, 0,
  132.                     intent, PendingIntent.FLAG_UPDATE_CURRENT);
  133.  
  134.             notificationBuilder.setContentIntent(contentIntent);
  135.  
  136.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  137.                 makeNotificationChannel(CHANNEL_ID, "Ukki Channel name", NotificationManager.IMPORTANCE_HIGH, soundUri);
  138.             }
  139.             NotificationManager notificationManager = (NotificationManager) cont.getSystemService(NOTIFICATION_SERVICE);
  140.             notificationManager.notify((int) System.currentTimeMillis(), notificationBuilder.build());
  141.         }
  142.     }
  143.  
  144.     // For API 26+
  145.     @RequiresApi(api = Build.VERSION_CODES.O)
  146.     private void makeNotificationChannel(String id, String name, int importance, Uri soundUri) {
  147.         NotificationChannel channel = new NotificationChannel(id, name, importance);
  148.         // Shows badge in app icon
  149.         channel.setShowBadge(true);
  150.  
  151.         AudioAttributes audioAttributes = new AudioAttributes.Builder()
  152.                 .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
  153.                 .setUsage(AudioAttributes.USAGE_ALARM)
  154.                 .build();
  155.  
  156.         channel.enableVibration(true);
  157.         channel.setSound(soundUri, audioAttributes);
  158.         NotificationManager notificationManager = (NotificationManager) cont.getSystemService(NOTIFICATION_SERVICE);
  159.         notificationManager.createNotificationChannel(channel);
  160.     }
  161.  
  162.     private boolean shouldPush(NotificationItem ni){
  163.         String local_notifications = fw.read("notifications");
  164.         // now we convert string to array of notification item objects
  165.         Type listType = new TypeToken<ArrayList<NotificationItem>>() {
  166.         }.getType();
  167.         ArrayList<NotificationItem> nm = gson.fromJson(local_notifications, listType);
  168.         boolean is_new = true;
  169.         if (nm != null) {
  170.             ArrayList<NotificationItem> nis = nm; //.getData();
  171.             Log.d(TAG, "Comparing with locals");
  172.  
  173.             for (int i = 0; i < nis.size(); i++) { // here we are comparing each id
  174.                 if (nis.get(i).getId().equals(ni.getId())) { // if notification already exists
  175.                     is_new = false;
  176.                 }
  177.             }
  178.             if (is_new) { // if notification is new, we'll kick it!
  179.                 // first of all, we'll save it
  180.                 nis.add(ni);
  181.                 fw.write("notifications", gson.toJson(nis));
  182.                 Log.d(TAG, "Done");
  183.                 // Yeah! Get your new notification!
  184.             }
  185.  
  186.             Log.d(TAG, "Comparing completed");
  187.  
  188.         } else {
  189.             Log.d(TAG, "Creating new notifications file");
  190.             ArrayList<NotificationItem> nis_new = new ArrayList<>();
  191.             nis_new.add(ni);
  192.             fw.write("notifications", gson.toJson(nis_new));
  193.             Log.d(TAG, "Done");
  194.         }
  195.  
  196.         if (is_new) {
  197.             String unread_string = fw.read("unread");
  198.             ArrayList<String> unread = new ArrayList<>();
  199.             if (unread_string != null) {
  200.                 Type notiType = new TypeToken<ArrayList<String>>() {
  201.                 }.getType();
  202.                 unread = gson.fromJson(unread_string, notiType);
  203.             }
  204.             unread.add(ni.getId());
  205.             fw.write("unread", gson.toJson(unread));
  206.         }
  207.         return is_new;
  208.     }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement