package com.forfan.bigbang.clipboard; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.text.ClipboardManager; import android.text.TextUtils; import android.util.Log; public class ClipboardManagerImpl9 extends ClipboardManagerCompat implements Runnable { /** * It's better to check clipboard data for a static thread */ private static Handler sHandler; static { sHandler = new Handler(Looper.getMainLooper()); } ClipboardManager mClipboardManager; private CharSequence mLastData; private boolean mWorking = false; public ClipboardManagerImpl9(Context context) { mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); } @Override public void addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { super.addPrimaryClipChangedListener(listener); synchronized (mPrimaryClipChangedListeners) { if (mPrimaryClipChangedListeners.size() == 1) { startListen(); } } } private void startListen() { mWorking = true; sHandler.postDelayed(this, 10000); } private void stopListen() { mWorking = false; sHandler.removeCallbacks(this); } @Override public void removePrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { super.removePrimaryClipChangedListener(listener); synchronized (mPrimaryClipChangedListeners) { if (mPrimaryClipChangedListeners.size() == 0) { stopListen(); } } } @Override public CharSequence getText() { return mClipboardManager.getText(); } @Override public void run() { if (mWorking) { CharSequence data = getText(); Log.d("uc-toast", "run: " + data); check(data); sHandler.postDelayed(this, 1000); } } private void check(CharSequence data) { if (TextUtils.isEmpty(mLastData) && TextUtils.isEmpty(data)) { return; } if (!TextUtils.isEmpty(mLastData) && mLastData.equals(data)) { return; } mLastData = data; notifyPrimaryClipChanged(); } }