/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import android.content.Context; import android.media.AudioManager; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Binder; import android.os.RemoteException; import android.support.annotation.UiThread; import android.view.Display; class Binders { Binder b; void doTransact() throws RemoteException { b.transact(0, null, null, 0); } void doOneWayTransact() throws RemoteException { b.transact(0, null, null, 1); } // assert happens after bad call so thread status is still unknown void FN_interBad() throws RemoteException { b.transact(0, null, null, 0); forceMainThread(); } void interBad() throws RemoteException { forceMainThread(); b.transact(0, null, null, 0); } void intraBad() throws RemoteException { OurThreadUtils.assertMainThread(); doTransact(); } @UiThread void annotationBad() throws RemoteException { doTransact(); } void intraOk() throws RemoteException { b.transact(0, null, null, 0); } void interOk() throws RemoteException { doTransact(); } void oneWayOk() throws RemoteException { OurThreadUtils.assertMainThread(); doOneWayTransact(); } void forceMainThread() { OurThreadUtils.assertMainThread(); } @UiThread void getActiveNetworkInfoBad(ConnectivityManager c) { c.getActiveNetworkInfo(); } @UiThread int doGetStreamVolumeBad(AudioManager a) { return a.getStreamVolume(0); } @UiThread int doGetRingerModeBad(AudioManager a) { return a.getRingerMode(); } @UiThread int doCheckPermissionBad(Context c) { return c.checkPermission("", 0, 0); } @UiThread int doCheckSelfPermissionBad(Context c) { return c.checkSelfPermission(""); } @UiThread void doGetConnectionInfoBad(WifiManager w) { w.getConnectionInfo(); } @UiThread void doGetRealSizeBad(Display d) { d.getRealSize(null); } }