Loading core/java/android/view/InputChannel.java +7 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,13 @@ public final class InputChannel implements Parcelable { return name != null ? name : "uninitialized"; } /** * @hide */ public boolean isValid() { return mPtr != 0; } /** * Disposes the input channel. * Explicitly releases the reference this object is holding on the input channel. Loading core/java/android/view/ViewRootImpl.java +2 −5 Original line number Diff line number Diff line Loading @@ -745,10 +745,7 @@ public final class ViewRootImpl implements ViewParent, // manager, to make sure we do the relayout before receiving // any other events from the system. requestLayout(); if ((mWindowAttributes.inputFeatures & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) { mInputChannel = new InputChannel(); } mForceDecorViewVisibility = (mWindowAttributes.privateFlags & PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY) != 0; try { Loading Loading @@ -838,7 +835,7 @@ public final class ViewRootImpl implements ViewParent, mInputQueueCallback = ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue(); } if (mInputChannel != null) { if (mInputChannel.isValid()) { if (mInputQueueCallback != null) { mInputQueue = new InputQueue(); mInputQueueCallback.onInputQueueCreated(mInputQueue); Loading core/java/com/android/internal/util/ScreenshotHelper.java +31 −6 Original line number Diff line number Diff line package com.android.internal.util; import static android.content.Intent.ACTION_USER_SWITCHED; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; Loading @@ -29,8 +33,21 @@ public class ScreenshotHelper { private ServiceConnection mScreenshotConnection = null; private final Context mContext; private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { synchronized (mScreenshotLock) { if (ACTION_USER_SWITCHED.equals(intent.getAction())) { resetConnection(); } } } }; public ScreenshotHelper(Context context) { mContext = context; IntentFilter filter = new IntentFilter(ACTION_USER_SWITCHED); mContext.registerReceiver(mBroadcastReceiver, filter); } /** Loading @@ -57,8 +74,8 @@ public class ScreenshotHelper { @Override public void run() { synchronized (mScreenshotLock) { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; Log.e(TAG, "Timed out before getting screenshot capture response"); resetConnection(); notifyScreenshotError(); } } Loading @@ -81,8 +98,7 @@ public class ScreenshotHelper { public void handleMessage(Message msg) { synchronized (mScreenshotLock) { if (mScreenshotConnection == myConn) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; resetConnection(); handler.removeCallbacks(mScreenshotTimeout); } } Loading @@ -103,8 +119,7 @@ public class ScreenshotHelper { public void onServiceDisconnected(ComponentName name) { synchronized (mScreenshotLock) { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; resetConnection(); handler.removeCallbacks(mScreenshotTimeout); notifyScreenshotError(); } Loading @@ -120,6 +135,16 @@ public class ScreenshotHelper { } } /** * Unbinds the current screenshot connection (if any). */ private void resetConnection() { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; } } /** * Notifies the screenshot service to show an error. */ Loading packages/CompanionDeviceManager/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/> <application android:allowClearUserData="true" Loading packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +4 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.companiondevicemanager; import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; import android.app.Activity; import android.companion.CompanionDeviceManager; Loading Loading @@ -56,6 +57,8 @@ public class DeviceChooserActivity extends Activity { Log.e(LOG_TAG, "About to show UI, but no devices to show"); } getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); if (getService().mRequest.isSingleDevice()) { setContentView(R.layout.device_confirmation); final DeviceFilterPair selectedDevice = getService().mDevicesFound.get(0); Loading Loading
core/java/android/view/InputChannel.java +7 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,13 @@ public final class InputChannel implements Parcelable { return name != null ? name : "uninitialized"; } /** * @hide */ public boolean isValid() { return mPtr != 0; } /** * Disposes the input channel. * Explicitly releases the reference this object is holding on the input channel. Loading
core/java/android/view/ViewRootImpl.java +2 −5 Original line number Diff line number Diff line Loading @@ -745,10 +745,7 @@ public final class ViewRootImpl implements ViewParent, // manager, to make sure we do the relayout before receiving // any other events from the system. requestLayout(); if ((mWindowAttributes.inputFeatures & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) { mInputChannel = new InputChannel(); } mForceDecorViewVisibility = (mWindowAttributes.privateFlags & PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY) != 0; try { Loading Loading @@ -838,7 +835,7 @@ public final class ViewRootImpl implements ViewParent, mInputQueueCallback = ((RootViewSurfaceTaker)view).willYouTakeTheInputQueue(); } if (mInputChannel != null) { if (mInputChannel.isValid()) { if (mInputQueueCallback != null) { mInputQueue = new InputQueue(); mInputQueueCallback.onInputQueueCreated(mInputQueue); Loading
core/java/com/android/internal/util/ScreenshotHelper.java +31 −6 Original line number Diff line number Diff line package com.android.internal.util; import static android.content.Intent.ACTION_USER_SWITCHED; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; Loading @@ -29,8 +33,21 @@ public class ScreenshotHelper { private ServiceConnection mScreenshotConnection = null; private final Context mContext; private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { synchronized (mScreenshotLock) { if (ACTION_USER_SWITCHED.equals(intent.getAction())) { resetConnection(); } } } }; public ScreenshotHelper(Context context) { mContext = context; IntentFilter filter = new IntentFilter(ACTION_USER_SWITCHED); mContext.registerReceiver(mBroadcastReceiver, filter); } /** Loading @@ -57,8 +74,8 @@ public class ScreenshotHelper { @Override public void run() { synchronized (mScreenshotLock) { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; Log.e(TAG, "Timed out before getting screenshot capture response"); resetConnection(); notifyScreenshotError(); } } Loading @@ -81,8 +98,7 @@ public class ScreenshotHelper { public void handleMessage(Message msg) { synchronized (mScreenshotLock) { if (mScreenshotConnection == myConn) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; resetConnection(); handler.removeCallbacks(mScreenshotTimeout); } } Loading @@ -103,8 +119,7 @@ public class ScreenshotHelper { public void onServiceDisconnected(ComponentName name) { synchronized (mScreenshotLock) { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; resetConnection(); handler.removeCallbacks(mScreenshotTimeout); notifyScreenshotError(); } Loading @@ -120,6 +135,16 @@ public class ScreenshotHelper { } } /** * Unbinds the current screenshot connection (if any). */ private void resetConnection() { if (mScreenshotConnection != null) { mContext.unbindService(mScreenshotConnection); mScreenshotConnection = null; } } /** * Notifies the screenshot service to show an error. */ Loading
packages/CompanionDeviceManager/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/> <application android:allowClearUserData="true" Loading
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +4 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.companiondevicemanager; import static android.companion.BluetoothDeviceFilterUtils.getDeviceMacAddress; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; import android.app.Activity; import android.companion.CompanionDeviceManager; Loading Loading @@ -56,6 +57,8 @@ public class DeviceChooserActivity extends Activity { Log.e(LOG_TAG, "About to show UI, but no devices to show"); } getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); if (getService().mRequest.isSingleDevice()) { setContentView(R.layout.device_confirmation); final DeviceFilterPair selectedDevice = getService().mDevicesFound.get(0); Loading