package com.lemenzo.messenger.data;

import android.database.ContentObserver;
import android.os.Handler;
import android.os.Looper;

/**
 * Debounced observer for the platform SMS provider.
 * Uses one main-thread Handler and initializes every final field in the constructor.
 */
public final class SmsContentObserver extends ContentObserver {
    private static final long DEBOUNCE_MS = 180L;

    private final Handler handler;
    private final Runnable callback;
    private final Runnable dispatch;

    public SmsContentObserver(Runnable callback) {
        this(new Handler(Looper.getMainLooper()), callback);
    }

    private SmsContentObserver(Handler handler, Runnable callback) {
        super(handler);
        if (callback == null) {
            throw new IllegalArgumentException("callback must not be null");
        }
        this.handler = handler;
        this.callback = callback;
        this.dispatch = this.callback;
    }

    @Override
    public void onChange(boolean selfChange) {
        handler.removeCallbacks(dispatch);
        handler.postDelayed(dispatch, DEBOUNCE_MS);
    }

    public void dispose() {
        handler.removeCallbacks(dispatch);
    }
}
