Loading packages/SystemUI/res/layout/clipboard_overlay.xml +2 −2 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <com.android.systemui.screenshot.DraggableConstraintLayout <com.android.systemui.clipboardoverlay.ClipboardOverlayView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" Loading Loading @@ -157,4 +157,4 @@ android:layout_margin="@dimen/overlay_dismiss_button_margin" android:src="@drawable/overlay_cancel"/> </FrameLayout> </com.android.systemui.screenshot.DraggableConstraintLayout> No newline at end of file </com.android.systemui.clipboardoverlay.ClipboardOverlayView> No newline at end of file packages/SystemUI/res/layout/clipboard_overlay_legacy.xml 0 → 100644 +160 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <com.android.systemui.screenshot.DraggableConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/clipboard_ui" android:theme="@style/FloatingOverlay" android:alpha="0" android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/clipboard_overlay_window_name"> <ImageView android:id="@+id/actions_container_background" android:visibility="gone" android:layout_height="0dp" android:layout_width="0dp" android:elevation="4dp" android:background="@drawable/action_chip_container_background" android:layout_marginStart="@dimen/overlay_action_container_margin_horizontal" app:layout_constraintBottom_toBottomOf="@+id/actions_container" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/actions_container" app:layout_constraintEnd_toEndOf="@+id/actions_container"/> <HorizontalScrollView android:id="@+id/actions_container" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/overlay_action_container_margin_horizontal" android:paddingEnd="@dimen/overlay_action_container_padding_right" android:paddingVertical="@dimen/overlay_action_container_padding_vertical" android:elevation="4dp" android:scrollbars="none" android:layout_marginBottom="4dp" app:layout_constraintHorizontal_bias="0" app:layout_constraintWidth_percent="1.0" app:layout_constraintWidth_max="wrap" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/preview_border" app:layout_constraintEnd_toEndOf="parent"> <LinearLayout android:id="@+id/actions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:animateLayoutChanges="true"> <include layout="@layout/overlay_action_chip" android:id="@+id/share_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/remote_copy_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/edit_chip"/> </LinearLayout> </HorizontalScrollView> <View android:id="@+id/preview_border" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="@dimen/overlay_offset_x" android:layout_marginBottom="12dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:elevation="7dp" app:layout_constraintEnd_toEndOf="@id/clipboard_preview_end" app:layout_constraintTop_toTopOf="@id/clipboard_preview_top" android:background="@drawable/overlay_border"/> <androidx.constraintlayout.widget.Barrier android:id="@+id/clipboard_preview_end" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierMargin="@dimen/overlay_border_width" app:barrierDirection="end" app:constraint_referenced_ids="clipboard_preview"/> <androidx.constraintlayout.widget.Barrier android:id="@+id/clipboard_preview_top" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="top" app:barrierMargin="@dimen/overlay_border_width_neg" app:constraint_referenced_ids="clipboard_preview"/> <FrameLayout android:id="@+id/clipboard_preview" android:elevation="7dp" android:background="@drawable/overlay_preview_background" android:clipChildren="true" android:clipToOutline="true" android:clipToPadding="true" android:layout_width="@dimen/clipboard_preview_size" android:layout_margin="@dimen/overlay_border_width" android:layout_height="wrap_content" android:layout_gravity="center" app:layout_constraintBottom_toBottomOf="@id/preview_border" app:layout_constraintStart_toStartOf="@id/preview_border" app:layout_constraintEnd_toEndOf="@id/preview_border" app:layout_constraintTop_toTopOf="@id/preview_border"> <TextView android:id="@+id/text_preview" android:textFontWeight="500" android:padding="8dp" android:gravity="center|start" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="@dimen/clipboard_overlay_min_font" android:autoSizeMaxTextSize="@dimen/clipboard_overlay_max_font" android:textColor="?attr/overlayButtonTextColor" android:textColorLink="?attr/overlayButtonTextColor" android:background="?androidprv:attr/colorAccentSecondary" android:layout_width="@dimen/clipboard_preview_size" android:layout_height="@dimen/clipboard_preview_size"/> <ImageView android:id="@+id/image_preview" android:scaleType="fitCenter" android:adjustViewBounds="true" android:contentDescription="@string/clipboard_image_preview" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/hidden_preview" android:visibility="gone" android:textFontWeight="500" android:padding="8dp" android:gravity="center" android:textSize="14sp" android:textColor="?attr/overlayButtonTextColor" android:background="?androidprv:attr/colorAccentSecondary" android:layout_width="@dimen/clipboard_preview_size" android:layout_height="@dimen/clipboard_preview_size"/> </FrameLayout> <FrameLayout android:id="@+id/dismiss_button" android:layout_width="@dimen/overlay_dismiss_button_tappable_size" android:layout_height="@dimen/overlay_dismiss_button_tappable_size" android:elevation="10dp" android:visibility="gone" android:alpha="0" app:layout_constraintStart_toEndOf="@id/clipboard_preview" app:layout_constraintEnd_toEndOf="@id/clipboard_preview" app:layout_constraintTop_toTopOf="@id/clipboard_preview" app:layout_constraintBottom_toTopOf="@id/clipboard_preview" android:contentDescription="@string/clipboard_dismiss_description"> <ImageView android:id="@+id/dismiss_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/overlay_dismiss_button_margin" android:src="@drawable/overlay_cancel"/> </FrameLayout> </com.android.systemui.screenshot.DraggableConstraintLayout> No newline at end of file packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +34 −9 Original line number Diff line number Diff line Loading @@ -31,9 +31,12 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.systemui.CoreStartable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.util.DeviceConfigProxy; import javax.inject.Inject; import javax.inject.Provider; /** * ClipboardListener brings up a clipboard overlay when something is copied to the clipboard. Loading @@ -51,20 +54,30 @@ public class ClipboardListener implements private final Context mContext; private final DeviceConfigProxy mDeviceConfig; private final ClipboardOverlayControllerFactory mOverlayFactory; private final Provider<ClipboardOverlayController> mOverlayProvider; private final ClipboardOverlayControllerLegacyFactory mOverlayFactory; private final ClipboardManager mClipboardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlayController mClipboardOverlayController; private final FeatureFlags mFeatureFlags; private boolean mUsingNewOverlay; private ClipboardOverlay mClipboardOverlay; @Inject public ClipboardListener(Context context, DeviceConfigProxy deviceConfigProxy, ClipboardOverlayControllerFactory overlayFactory, ClipboardManager clipboardManager, UiEventLogger uiEventLogger) { Provider<ClipboardOverlayController> clipboardOverlayControllerProvider, ClipboardOverlayControllerLegacyFactory overlayFactory, ClipboardManager clipboardManager, UiEventLogger uiEventLogger, FeatureFlags featureFlags) { mContext = context; mDeviceConfig = deviceConfigProxy; mOverlayProvider = clipboardOverlayControllerProvider; mOverlayFactory = overlayFactory; mClipboardManager = clipboardManager; mUiEventLogger = uiEventLogger; mFeatureFlags = featureFlags; mUsingNewOverlay = mFeatureFlags.isEnabled(Flags.CLIPBOARD_OVERLAY_REFACTOR); } @Override Loading @@ -89,16 +102,22 @@ public class ClipboardListener implements return; } if (mClipboardOverlayController == null) { mClipboardOverlayController = mOverlayFactory.create(mContext); boolean enabled = mFeatureFlags.isEnabled(Flags.CLIPBOARD_OVERLAY_REFACTOR); if (mClipboardOverlay == null || enabled != mUsingNewOverlay) { mUsingNewOverlay = enabled; if (enabled) { mClipboardOverlay = mOverlayProvider.get(); } else { mClipboardOverlay = mOverlayFactory.create(mContext); } mUiEventLogger.log(CLIPBOARD_OVERLAY_ENTERED, 0, clipSource); } else { mUiEventLogger.log(CLIPBOARD_OVERLAY_UPDATED, 0, clipSource); } mClipboardOverlayController.setClipData(clipData, clipSource); mClipboardOverlayController.setOnSessionCompleteListener(() -> { mClipboardOverlay.setClipData(clipData, clipSource); mClipboardOverlay.setOnSessionCompleteListener(() -> { // Session is complete, free memory until it's needed again. mClipboardOverlayController = null; mClipboardOverlay = null; }); } Loading @@ -120,4 +139,10 @@ public class ClipboardListener implements private static boolean isEmulator() { return SystemProperties.getBoolean("ro.boot.qemu", false); } interface ClipboardOverlay { void setClipData(ClipData clipData, String clipSource); void setOnSessionCompleteListener(Runnable runnable); } } Loading
packages/SystemUI/res/layout/clipboard_overlay.xml +2 −2 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <com.android.systemui.screenshot.DraggableConstraintLayout <com.android.systemui.clipboardoverlay.ClipboardOverlayView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" Loading Loading @@ -157,4 +157,4 @@ android:layout_margin="@dimen/overlay_dismiss_button_margin" android:src="@drawable/overlay_cancel"/> </FrameLayout> </com.android.systemui.screenshot.DraggableConstraintLayout> No newline at end of file </com.android.systemui.clipboardoverlay.ClipboardOverlayView> No newline at end of file
packages/SystemUI/res/layout/clipboard_overlay_legacy.xml 0 → 100644 +160 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ Copyright (C) 2021 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <com.android.systemui.screenshot.DraggableConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/clipboard_ui" android:theme="@style/FloatingOverlay" android:alpha="0" android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/clipboard_overlay_window_name"> <ImageView android:id="@+id/actions_container_background" android:visibility="gone" android:layout_height="0dp" android:layout_width="0dp" android:elevation="4dp" android:background="@drawable/action_chip_container_background" android:layout_marginStart="@dimen/overlay_action_container_margin_horizontal" app:layout_constraintBottom_toBottomOf="@+id/actions_container" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/actions_container" app:layout_constraintEnd_toEndOf="@+id/actions_container"/> <HorizontalScrollView android:id="@+id/actions_container" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/overlay_action_container_margin_horizontal" android:paddingEnd="@dimen/overlay_action_container_padding_right" android:paddingVertical="@dimen/overlay_action_container_padding_vertical" android:elevation="4dp" android:scrollbars="none" android:layout_marginBottom="4dp" app:layout_constraintHorizontal_bias="0" app:layout_constraintWidth_percent="1.0" app:layout_constraintWidth_max="wrap" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/preview_border" app:layout_constraintEnd_toEndOf="parent"> <LinearLayout android:id="@+id/actions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:animateLayoutChanges="true"> <include layout="@layout/overlay_action_chip" android:id="@+id/share_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/remote_copy_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/edit_chip"/> </LinearLayout> </HorizontalScrollView> <View android:id="@+id/preview_border" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="@dimen/overlay_offset_x" android:layout_marginBottom="12dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:elevation="7dp" app:layout_constraintEnd_toEndOf="@id/clipboard_preview_end" app:layout_constraintTop_toTopOf="@id/clipboard_preview_top" android:background="@drawable/overlay_border"/> <androidx.constraintlayout.widget.Barrier android:id="@+id/clipboard_preview_end" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierMargin="@dimen/overlay_border_width" app:barrierDirection="end" app:constraint_referenced_ids="clipboard_preview"/> <androidx.constraintlayout.widget.Barrier android:id="@+id/clipboard_preview_top" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="top" app:barrierMargin="@dimen/overlay_border_width_neg" app:constraint_referenced_ids="clipboard_preview"/> <FrameLayout android:id="@+id/clipboard_preview" android:elevation="7dp" android:background="@drawable/overlay_preview_background" android:clipChildren="true" android:clipToOutline="true" android:clipToPadding="true" android:layout_width="@dimen/clipboard_preview_size" android:layout_margin="@dimen/overlay_border_width" android:layout_height="wrap_content" android:layout_gravity="center" app:layout_constraintBottom_toBottomOf="@id/preview_border" app:layout_constraintStart_toStartOf="@id/preview_border" app:layout_constraintEnd_toEndOf="@id/preview_border" app:layout_constraintTop_toTopOf="@id/preview_border"> <TextView android:id="@+id/text_preview" android:textFontWeight="500" android:padding="8dp" android:gravity="center|start" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="@dimen/clipboard_overlay_min_font" android:autoSizeMaxTextSize="@dimen/clipboard_overlay_max_font" android:textColor="?attr/overlayButtonTextColor" android:textColorLink="?attr/overlayButtonTextColor" android:background="?androidprv:attr/colorAccentSecondary" android:layout_width="@dimen/clipboard_preview_size" android:layout_height="@dimen/clipboard_preview_size"/> <ImageView android:id="@+id/image_preview" android:scaleType="fitCenter" android:adjustViewBounds="true" android:contentDescription="@string/clipboard_image_preview" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/hidden_preview" android:visibility="gone" android:textFontWeight="500" android:padding="8dp" android:gravity="center" android:textSize="14sp" android:textColor="?attr/overlayButtonTextColor" android:background="?androidprv:attr/colorAccentSecondary" android:layout_width="@dimen/clipboard_preview_size" android:layout_height="@dimen/clipboard_preview_size"/> </FrameLayout> <FrameLayout android:id="@+id/dismiss_button" android:layout_width="@dimen/overlay_dismiss_button_tappable_size" android:layout_height="@dimen/overlay_dismiss_button_tappable_size" android:elevation="10dp" android:visibility="gone" android:alpha="0" app:layout_constraintStart_toEndOf="@id/clipboard_preview" app:layout_constraintEnd_toEndOf="@id/clipboard_preview" app:layout_constraintTop_toTopOf="@id/clipboard_preview" app:layout_constraintBottom_toTopOf="@id/clipboard_preview" android:contentDescription="@string/clipboard_dismiss_description"> <ImageView android:id="@+id/dismiss_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/overlay_dismiss_button_margin" android:src="@drawable/overlay_cancel"/> </FrameLayout> </com.android.systemui.screenshot.DraggableConstraintLayout> No newline at end of file
packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardListener.java +34 −9 Original line number Diff line number Diff line Loading @@ -31,9 +31,12 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEventLogger; import com.android.systemui.CoreStartable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.util.DeviceConfigProxy; import javax.inject.Inject; import javax.inject.Provider; /** * ClipboardListener brings up a clipboard overlay when something is copied to the clipboard. Loading @@ -51,20 +54,30 @@ public class ClipboardListener implements private final Context mContext; private final DeviceConfigProxy mDeviceConfig; private final ClipboardOverlayControllerFactory mOverlayFactory; private final Provider<ClipboardOverlayController> mOverlayProvider; private final ClipboardOverlayControllerLegacyFactory mOverlayFactory; private final ClipboardManager mClipboardManager; private final UiEventLogger mUiEventLogger; private ClipboardOverlayController mClipboardOverlayController; private final FeatureFlags mFeatureFlags; private boolean mUsingNewOverlay; private ClipboardOverlay mClipboardOverlay; @Inject public ClipboardListener(Context context, DeviceConfigProxy deviceConfigProxy, ClipboardOverlayControllerFactory overlayFactory, ClipboardManager clipboardManager, UiEventLogger uiEventLogger) { Provider<ClipboardOverlayController> clipboardOverlayControllerProvider, ClipboardOverlayControllerLegacyFactory overlayFactory, ClipboardManager clipboardManager, UiEventLogger uiEventLogger, FeatureFlags featureFlags) { mContext = context; mDeviceConfig = deviceConfigProxy; mOverlayProvider = clipboardOverlayControllerProvider; mOverlayFactory = overlayFactory; mClipboardManager = clipboardManager; mUiEventLogger = uiEventLogger; mFeatureFlags = featureFlags; mUsingNewOverlay = mFeatureFlags.isEnabled(Flags.CLIPBOARD_OVERLAY_REFACTOR); } @Override Loading @@ -89,16 +102,22 @@ public class ClipboardListener implements return; } if (mClipboardOverlayController == null) { mClipboardOverlayController = mOverlayFactory.create(mContext); boolean enabled = mFeatureFlags.isEnabled(Flags.CLIPBOARD_OVERLAY_REFACTOR); if (mClipboardOverlay == null || enabled != mUsingNewOverlay) { mUsingNewOverlay = enabled; if (enabled) { mClipboardOverlay = mOverlayProvider.get(); } else { mClipboardOverlay = mOverlayFactory.create(mContext); } mUiEventLogger.log(CLIPBOARD_OVERLAY_ENTERED, 0, clipSource); } else { mUiEventLogger.log(CLIPBOARD_OVERLAY_UPDATED, 0, clipSource); } mClipboardOverlayController.setClipData(clipData, clipSource); mClipboardOverlayController.setOnSessionCompleteListener(() -> { mClipboardOverlay.setClipData(clipData, clipSource); mClipboardOverlay.setOnSessionCompleteListener(() -> { // Session is complete, free memory until it's needed again. mClipboardOverlayController = null; mClipboardOverlay = null; }); } Loading @@ -120,4 +139,10 @@ public class ClipboardListener implements private static boolean isEmulator() { return SystemProperties.getBoolean("ro.boot.qemu", false); } interface ClipboardOverlay { void setClipData(ClipData clipData, String clipSource); void setOnSessionCompleteListener(Runnable runnable); } }