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