1e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn/* 2e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Copyright (C) 2006 The Android Open Source Project 3e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * 4e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * you may not use this file except in compliance with the License. 6e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * You may obtain a copy of the License at 7e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * 8e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * 10e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * See the License for the specific language governing permissions and 14e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * limitations under the License. 15e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 16e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 17e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornpackage android.view; 18e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 19e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.Handler; 20e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.IBinder; 21e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.Message; 22e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.Parcel; 23e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.Parcelable; 24e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.RemoteException; 25e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 26e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport java.util.HashMap; 27e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 28e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn/** 29e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Safe identifier for a window. This currently allows you to retrieve and observe 30e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * the input focus state of the window. Most applications will 31e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * not use this, instead relying on the simpler (and more efficient) methods available 32e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * on {@link View}. This classes is useful when window input interactions need to be 33e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * done across processes: the class itself is a Parcelable that can be passed to other 34e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * processes for them to interact with your window, and it provides a limited safe API 35e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * that doesn't allow the other process to negatively harm your window. 36e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 37e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornpublic class WindowId implements Parcelable { 38e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn private final IWindowId mToken; 39e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 40e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 41e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Subclass for observing changes to the focus state of an {@link WindowId}. 42e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * You should use the same instance of this class for observing multiple 43e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * {@link WindowId} objects, since this class is fairly heavy-weight -- the 44e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * base class includes all of the mechanisms for connecting to and receiving updates 45e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * from the window. 46e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 47e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public static abstract class FocusObserver { 48e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn final IWindowFocusObserver.Stub mIObserver = new IWindowFocusObserver.Stub() { 49e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 50e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 51e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void focusGained(IBinder inputToken) { 52e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn WindowId token; 53e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized (mRegistrations) { 54e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn token = mRegistrations.get(inputToken); 55e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 56e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (mHandler != null) { 57e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mHandler.sendMessage(mHandler.obtainMessage(1, token)); 58e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } else { 59e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn onFocusGained(token); 60e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 61e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 62e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 63e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 64e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void focusLost(IBinder inputToken) { 65e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn WindowId token; 66e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized (mRegistrations) { 67e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn token = mRegistrations.get(inputToken); 68e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 69e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (mHandler != null) { 70e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mHandler.sendMessage(mHandler.obtainMessage(2, token)); 71e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } else { 72e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn onFocusLost(token); 73e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 74e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 75e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn }; 76e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 77e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn final HashMap<IBinder, WindowId> mRegistrations 78e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn = new HashMap<IBinder, WindowId>(); 79e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 80e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn class H extends Handler { 81e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 82e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void handleMessage(Message msg) { 83e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn switch (msg.what) { 84e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn case 1: 85e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn onFocusGained((WindowId)msg.obj); 86e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn break; 87e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn case 2: 88e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn onFocusLost((WindowId)msg.obj); 89e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn break; 90e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn default: 91e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn super.handleMessage(msg); 92e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 93e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 94e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 95e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 96e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn final Handler mHandler; 97e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 98e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 99e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Construct a new observer. This observer will be configured so that all 100e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * of its callbacks are dispatched on the current calling thread. 101e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 102e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public FocusObserver() { 103e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mHandler = new H(); 104e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 105e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 106e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 107e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Called when one of the monitored windows gains input focus. 108e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 109e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public abstract void onFocusGained(WindowId token); 110e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 111e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 112e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Called when one of the monitored windows loses input focus. 113e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 114e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public abstract void onFocusLost(WindowId token); 115e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 116e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 117e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 118e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Retrieve the current focus state of the associated window. 119e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 120e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public boolean isFocused() { 121e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn try { 122e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return mToken.isFocused(); 123e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } catch (RemoteException e) { 124e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return false; 125e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 126e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 127e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 128e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 129e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Start monitoring for changes in the focus state of the window. 130e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 131e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void registerFocusObserver(FocusObserver observer) { 132e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized (observer.mRegistrations) { 133e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (observer.mRegistrations.containsKey(mToken.asBinder())) { 134e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn throw new IllegalStateException( 135e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn "Focus observer already registered with input token"); 136e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 137e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn observer.mRegistrations.put(mToken.asBinder(), this); 138e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn try { 139e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mToken.registerFocusObserver(observer.mIObserver); 140e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } catch (RemoteException e) { 141e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 142e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 143e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 144e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 145e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 146e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Stop monitoring changes in the focus state of the window. 147e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 148e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void unregisterFocusObserver(FocusObserver observer) { 149e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized (observer.mRegistrations) { 150e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (observer.mRegistrations.remove(mToken.asBinder()) == null) { 151e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn throw new IllegalStateException("Focus observer not registered with input token"); 152e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 153e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn try { 154e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mToken.unregisterFocusObserver(observer.mIObserver); 155e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } catch (RemoteException e) { 156e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 157e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 158e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 159e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 160e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 161e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Comparison operator on two IntentSender objects, such that true 162e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * is returned then they both represent the same operation from the 163e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * same package. 164e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 165e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 166e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public boolean equals(Object otherObj) { 167e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (otherObj instanceof WindowId) { 168e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return mToken.asBinder().equals(((WindowId) otherObj) 169e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn .mToken.asBinder()); 170e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 171e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return false; 172e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 173e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 174e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 175e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public int hashCode() { 176e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return mToken.asBinder().hashCode(); 177e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 178e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 179e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 180e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public String toString() { 181e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn StringBuilder sb = new StringBuilder(128); 182e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn sb.append("IntentSender{"); 183e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 184e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn sb.append(": "); 185e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn sb.append(mToken != null ? mToken.asBinder() : null); 186e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn sb.append('}'); 187e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return sb.toString(); 188e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 189e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 190e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public int describeContents() { 191e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return 0; 192e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 193e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 194e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void writeToParcel(Parcel out, int flags) { 195e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn out.writeStrongBinder(mToken.asBinder()); 196e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 197e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 198e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public static final Parcelable.Creator<WindowId> CREATOR 199e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn = new Parcelable.Creator<WindowId>() { 200e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public WindowId createFromParcel(Parcel in) { 201e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn IBinder target = in.readStrongBinder(); 202e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return target != null ? new WindowId(target) : null; 203e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 204e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 205e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public WindowId[] newArray(int size) { 206e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return new WindowId[size]; 207e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 208e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn }; 209e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 210e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** @hide */ 211e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public IWindowId getTarget() { 212e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return mToken; 213e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 214e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 215e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** @hide */ 216e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public WindowId(IWindowId target) { 217e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mToken = target; 218e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 219e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 220e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** @hide */ 221e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public WindowId(IBinder target) { 222e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mToken = IWindowId.Stub.asInterface(target); 223e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 224e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn} 225