0

I'm trying to build this app which checks a folder size on an interval, and if the folder size is bigger than whatever user have set, a notification appears. The problem is when user disables the notification, it still keeps on notifying ("ShowNotif" is called), what am I doing wrong?

ScheduleFragment.java

public class ScheduleFragment extends Fragment {

SharedPreferences.Editor editor;
AlarmManager manager;
PendingIntent pendingIntent;
SharedPreferences share;
EditText telegSizeText;
CheckBox telegramSize;
private boolean telegramSizeIsSet = false;
CheckBox notif;

public ScheduleFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_schedule, container, false);

    telegramSize = (CheckBox)view.findViewById(R.id.telegramSize);
    telegSizeText = (EditText)view.findViewById(R.id.telegSizeText);
    notif = (CheckBox) view.findViewById(R.id.notif);

    share = getActivity().getSharedPreferences("setting", 0);
    editor = this.share.edit();

    telegramSize.setChecked(share.getBoolean("telegram_selected", false));
    telegramSizeIsSet = true;
    int var2 = share.getInt("telegram_size", -1);
    if(var2 != -1) {
        telegSizeText.setText(String.valueOf(var2));
    } else {
        telegSizeText.setText("");
    }


    this.telegramSize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton var1, boolean var2) {
            if (telegramSizeIsSet) {
                if(!var2) {
                    manager = (AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE);
                    Intent var11 = new Intent(getActivity(), ShowNotif.class);
                    pendingIntent = PendingIntent.getBroadcast(getActivity(), 1,var11,PendingIntent.FLAG_UPDATE_CURRENT);
                    PendingIntent pendingIntentNoti =  PendingIntent.getBroadcast(getActivity(), 1, var11,PendingIntent.FLAG_UPDATE_CURRENT);
                    manager.cancel(pendingIntent);
                    manager.cancel(pendingIntentNoti);
                    Toast.makeText(getContext(), "Disabled!", Toast.LENGTH_SHORT).show();
                    editor.putBoolean("telegram_selected", false);
                    editor.putInt("telegram_size", -1);
                    telegSizeText.setText("");
                    editor.commit();
                    return;
                }

                if(telegSizeText.getText().toString() == null || telegSizeText.getText().toString().equals("")) {
                    Toast.makeText(getContext(), "Can't be empty", Toast.LENGTH_SHORT).show();
                    telegramSizeIsSet = false;
                    telegramSize.setChecked(false);
                    telegramSizeIsSet = true;
                    return;
                }

                Intent var9 = new Intent(getActivity(), CheckTelegramSizeReceiver.class);
                pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, var9, 0);
                manager = (AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE);
                manager.cancel(pendingIntent);
                editor.putInt("telegram_size", Integer.valueOf(telegSizeText.getText().toString()).intValue());
                editor.putBoolean("telegram_selected", true);
                editor.commit();
                manager = (AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE);
                manager.setRepeating(0, System.currentTimeMillis(), (long) 10000, pendingIntent); //check every 10 seconds
                Toast.makeText(getContext(), "Enabled!", Toast.LENGTH_SHORT).show();
            }

        }
    });

    return view;
}}

CheckTelegramSizeReceiver.java

public class CheckTelegramSizeReceiver extends BroadcastReceiver {

private AlarmManager manager;
private AlarmManager manager2;
private AlarmManager manager3;
private boolean notificationCanceled;
boolean notificationCreated = false;
String path;
private PendingIntent pendingIntent;
private PendingIntent pendingIntent2;
long totalSizes = 0L;
int userSelectedSize = 0;


private long getFileSize(String var1) {
    long var2 = 0L;
    File[] var4 = (new File(var1)).listFiles();
    if (var4 != null) {
        for (int var5 = 0; var5 < var4.length; ++var5) {
            File var6 = var4[var5];
            if (var6.isDirectory()) {
                var2 += this.getFileSize(var6.getPath());
            } else {
                var2 += var6.length();
            }
        }
    }

    return var2;
}

public void onReceive(final Context var1, Intent var2) {
    File var3 = Environment.getExternalStorageDirectory();
    this.path = var3 + "/Telegram";
    (new AsyncTask<Void, Integer, Integer>() {
        protected Integer doInBackground(Void... var1x) {
            totalSizes = getFileSize(path) / 1048576L;
            //
            SharedPreferences var2 = var1.getSharedPreferences("setting", 0);
            userSelectedSize = var2.getInt("telegram_size", -1);
            return 1;
        }

        protected void onPostExecute(Integer var1x) {
            SharedPreferences var2 = var1.getSharedPreferences("setting", 0);
            Editor var3 = var2.edit();
            CheckTelegramSizeReceiver.this.userSelectedSize = var2.getInt("telegram_size", -1);
            CheckTelegramSizeReceiver.this.notificationCreated = var2.getBoolean("notificationIsShowing", false);
            CheckTelegramSizeReceiver.this.notificationCanceled = var2.getBoolean("notificationIsShowingCanceled", false);
            if ((int) CheckTelegramSizeReceiver.this.totalSizes > CheckTelegramSizeReceiver.this.userSelectedSize && !CheckTelegramSizeReceiver.this.notificationCreated) {
                Intent var11 = new Intent(var1, ShowNotif.class);
                CheckTelegramSizeReceiver.this.pendingIntent = PendingIntent.getBroadcast(var1, 1, var11, 0);
                CheckTelegramSizeReceiver.this.manager2 = (AlarmManager) var1.getSystemService(Context.ALARM_SERVICE);
                CheckTelegramSizeReceiver.this.manager2.setRepeating(0, System.currentTimeMillis(), (long) 28800000, CheckTelegramSizeReceiver.this.pendingIntent);
                var3.putBoolean("notificationIsShowing", true).commit();
                var3.putBoolean("notificationIsShowingCanceled", false).commit();
                CheckTelegramSizeReceiver.this.notificationCreated = true;
                CheckTelegramSizeReceiver.this.notificationCanceled = false;
            }

            if ((int) CheckTelegramSizeReceiver.this.totalSizes < CheckTelegramSizeReceiver.this.userSelectedSize && CheckTelegramSizeReceiver.this.notificationCreated && !CheckTelegramSizeReceiver.this.notificationCanceled) {
                System.out.println("test");
                Intent var5 = new Intent(var1, ShowNotif.class);
                CheckTelegramSizeReceiver.this.pendingIntent = PendingIntent.getBroadcast(var1, 1, var5, 0);
                CheckTelegramSizeReceiver.this.manager2 = (AlarmManager) var1.getSystemService(Context.ALARM_SERVICE);
                CheckTelegramSizeReceiver.this.manager2.cancel(CheckTelegramSizeReceiver.this.pendingIntent);
                CheckTelegramSizeReceiver.this.notificationCreated = false;
                CheckTelegramSizeReceiver.this.notificationCanceled = true;
                var3.putBoolean("notificationIsShowingCanceled", true).commit();
                var3.putBoolean("notificationIsShowing", false).commit();
            }

        }

    }).execute(null, null, null);
}}

ShowNotif.java

public class ShowNotif extends BroadcastReceiver {

public void onReceive(Context var1, Intent var2) {
    int var3 = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
    if (var3 <= 22 && var3 >= 10) {
        Uri var4 = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Bitmap var5 = BitmapFactory.decodeResource(var1.getResources(), R.drawable.icon_notif);
        NotificationCompat.Builder var6 = (new NotificationCompat.Builder(var1)).setSmallIcon(R.drawable.icon_notif).setLargeIcon(var5).setContentTitle("My App").setContentText("Notification Text").setSound(var4).setAutoCancel(true);
        var6.setContentIntent(PendingIntent.getActivity(var1, 0, new Intent(var1, MainActivity.class), 0));
        ((NotificationManager) var1.getSystemService(Context.NOTIFICATION_SERVICE)).notify(0, var6.build());
    }

}}

Thanks in advance.

Jay
  • 21
  • 7

1 Answers1

0
if (telegramSizeIsSet) {
            if(!var2) {
                Intent var3 = new Intent(getActivity(), CheckTelegramSizeReceiver.class);

                manager = (AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE);

                pendingIntent = PendingIntent.getBroadcast(var1, 1,var11,PendingIntent.FLAG_UPDATE_CURRENT);
                pendingIntentNoti =  PendingIntent.getBroadcast(var1, 1, var11,PendingIntent.FLAG_UPDATE_CURRENT);
                manager.cancel(pendingIntent);
                manager.cancel(pendingIntentNoti);
                Toast.makeText(getContext(), "Disabled!", Toast.LENGTH_SHORT).show();
                editor.putBoolean("telegram_selected", false);
                editor.putInt("telegram_size", -1);
                telegSizeText.setText("");
                editor.commit();
                return;
            }   

Basically you just cancel the Alarm for CheckTelegramSizeReceiver receiver. but you forget to cancel the alarm set up by CheckTelegramSizeReceiver receiver that is ShowNoti Receiver. So ShowNoti receiver shows the notification again and again so you need to cancel the ShowNoti alaram too and use FLAG_UPDATE_CURRENT instead of 0. Thanks It may help you!

Nitin Jain
  • 1,314
  • 11
  • 15
  • Thank you, it seems right, but where should I put this? I mean when I uncheck the checkbox or inside CheckTelegramSizeReceiver onReceive? – Jay May 19 '16 at 12:13
  • I edit the answer. basically, this code you need to put in when to uncheck and check again as u do before. and It works for you :) – Nitin Jain May 19 '16 at 12:28
  • Thank you, it works fine, but now the problem is after unchecking the box, when I recheck it, notifications won't appear! – Jay May 19 '16 at 12:34
  • please update the code and I assumed you didn't change In CheckTelegramSizeReceiver receiver class.! because change is not required in this class. – Nitin Jain May 19 '16 at 12:41