14f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa/*
24f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * Copyright (C) 2011 The Android Open Source Project
34f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa *
44f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * Licensed under the Apache License, Version 2.0 (the "License");
54f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * you may not use this file except in compliance with the License.
64f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * You may obtain a copy of the License at
74f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa *
84f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa *      http://www.apache.org/licenses/LICENSE-2.0
94f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa *
104f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * Unless required by applicable law or agreed to in writing, software
114f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * distributed under the License is distributed on an "AS IS" BASIS,
124f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * See the License for the specific language governing permissions and
144f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa * limitations under the License.
154f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa */
164f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
17e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasapackage com.android.inputmethod.latin.utils;
184f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
194f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasaimport android.os.Handler;
204f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasaimport android.os.Looper;
214f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
224f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasaimport java.lang.ref.WeakReference;
234f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
242fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasapublic class LeakGuardHandlerWrapper<T> extends Handler {
252fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    private final WeakReference<T> mOwnerInstanceRef;
264f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
272fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public LeakGuardHandlerWrapper(final T ownerInstance) {
282fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        this(ownerInstance, Looper.myLooper());
294f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa    }
304f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
312fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public LeakGuardHandlerWrapper(final T ownerInstance, final Looper looper) {
324f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa        super(looper);
332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        if (ownerInstance == null) {
342fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa            throw new NullPointerException("ownerInstance is null");
3541e60bf6dd533d1641b64ebeecd3148dd396c370Tadashi G. Takaoka        }
36a91561aa58db1c43092c1caecc051a11fa5391c7Tadashi G. Takaoka        mOwnerInstanceRef = new WeakReference<>(ownerInstance);
374f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa    }
384f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa
392fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa    public T getOwnerInstance() {
402fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa        return mOwnerInstanceRef.get();
414f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa    }
424f0d290c5d112ebac434bd8de4635f7d42ea2df0Ken Wakasa}
43