summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/CompanionDeviceManager/res/drawable/btn_positive_button.xml (renamed from packages/CompanionDeviceManager/res/drawable/btn_positive_bottom.xml)8
-rw-r--r--packages/CompanionDeviceManager/res/drawable/btn_positive_button_with_arrow.xml32
-rw-r--r--packages/CompanionDeviceManager/res/drawable/ic_downward_arrow.xml25
-rw-r--r--packages/CompanionDeviceManager/res/values/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values/styles.xml2
-rw-r--r--packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java63
6 files changed, 119 insertions, 17 deletions
diff --git a/packages/CompanionDeviceManager/res/drawable/btn_positive_bottom.xml b/packages/CompanionDeviceManager/res/drawable/btn_positive_button.xml
index 2cff4737cabf..30cf60ae0b5f 100644
--- a/packages/CompanionDeviceManager/res/drawable/btn_positive_bottom.xml
+++ b/packages/CompanionDeviceManager/res/drawable/btn_positive_button.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- ~ Copyright (C) 2022 The Android Open Source Project
+ ~ Copyright (C) 2025 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.
@@ -16,8 +16,8 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
+ android:shape="rectangle">
<solid android:color="@android:color/system_accent1_100"/>
<corners android:topLeftRadius="12dp" android:topRightRadius="12dp"
- android:bottomLeftRadius="4dp" android:bottomRightRadius="4dp"/>
-</shape>
+ android:bottomLeftRadius="4dp" android:bottomRightRadius="4dp"/>
+</shape> \ No newline at end of file
diff --git a/packages/CompanionDeviceManager/res/drawable/btn_positive_button_with_arrow.xml b/packages/CompanionDeviceManager/res/drawable/btn_positive_button_with_arrow.xml
new file mode 100644
index 000000000000..1fe4af73caa0
--- /dev/null
+++ b/packages/CompanionDeviceManager/res/drawable/btn_positive_button_with_arrow.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2025 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.
+ -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <shape android:shape="rectangle">
+ <solid android:color="@android:color/system_accent1_100" />
+ <corners
+ android:bottomLeftRadius="4dp"
+ android:bottomRightRadius="4dp"
+ android:topLeftRadius="12dp"
+ android:topRightRadius="12dp" />
+ </shape>
+ </item>
+ <item
+ android:drawable="@drawable/ic_downward_arrow"
+ android:gravity="center" />
+</layer-list> \ No newline at end of file
diff --git a/packages/CompanionDeviceManager/res/drawable/ic_downward_arrow.xml b/packages/CompanionDeviceManager/res/drawable/ic_downward_arrow.xml
new file mode 100644
index 000000000000..98fd71b4716d
--- /dev/null
+++ b/packages/CompanionDeviceManager/res/drawable/ic_downward_arrow.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ Copyright (C) 2025 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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960"
+ android:tint="?attr/colorControlNormal">
+ <path android:fillColor="@android:color/system_accent1_600"
+ android:pathData="M480,720L240,480L296,424L440,568L440,200L520,200L520,568L664,424L720,480L480,720Z"/>
+</vector> \ No newline at end of file
diff --git a/packages/CompanionDeviceManager/res/values/strings.xml b/packages/CompanionDeviceManager/res/values/strings.xml
index 20ede5ff91d3..60f209b47482 100644
--- a/packages/CompanionDeviceManager/res/values/strings.xml
+++ b/packages/CompanionDeviceManager/res/values/strings.xml
@@ -139,6 +139,12 @@
<!-- Back button for the helper consent dialog [CHAR LIMIT=30] -->
<string name="consent_back">Back</string>
+ <!-- Downward arrow button action for scroll down the permission list [CHAR LIMIT=30] -->
+ <string name="downward_arrow_action">Scroll down the list</string>
+
+ <!-- Downward arrow button [CHAR LIMIT=30] -->
+ <string name="downward_arrow">Downward arrow</string>
+
<!-- Expand permission in the list CHAR LIMIT=30] -->
<string name="permission_expand">Expand <xliff:g id="permission_type" example="Notification">%1$s</xliff:g></string>
diff --git a/packages/CompanionDeviceManager/res/values/styles.xml b/packages/CompanionDeviceManager/res/values/styles.xml
index 30813baa6e4a..814cc4d25c52 100644
--- a/packages/CompanionDeviceManager/res/values/styles.xml
+++ b/packages/CompanionDeviceManager/res/values/styles.xml
@@ -119,7 +119,7 @@
<item name="android:layout_marginEnd">32dp</item>
<item name="android:textColor">@android:color/system_neutral1_900</item>
<item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault.Medium</item>
- <item name="android:background">@drawable/btn_positive_bottom</item>
+ <item name="android:background">@drawable/btn_positive_button</item>
</style>
<style name="NegativeButton"
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
index ea40e13fdcc9..572fc3661f1c 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
@@ -176,6 +176,8 @@ public class CompanionAssociationActivity extends FragmentActivity implements
// an association to CDM.
private boolean mApproved;
private boolean mCancelled;
+ // Indicates user has completely scrolled through the permissions list.
+ private boolean mIsPermissionsListScrolledToBottom;
// A reference to the device selected by the user, to be sent back to the application via
// onActivityResult() after the association is created.
private @Nullable DeviceFilterPair<?> mSelectedDevice;
@@ -670,10 +672,30 @@ public class CompanionAssociationActivity extends FragmentActivity implements
private void onPositiveButtonClick(View v) {
Slog.d(TAG, "onPositiveButtonClick()");
+ // Scroll the permission list when a user presses the `Allow` button.
+ if (mPermissionListRecyclerView != null
+ && mPermissionListRecyclerView.isVisibleToUser()
+ && !mIsPermissionsListScrolledToBottom) {
+ LinearLayoutManager layoutManager =
+ (LinearLayoutManager) mPermissionListRecyclerView.getLayoutManager();
+ if (layoutManager == null) return;
+
+ int lastVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition();
+ int firstVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
+ int scrollOffset = lastVisibleItemPosition - firstVisibleItemPosition;
+ int numItems = mPermissionListRecyclerView.getAdapter().getItemCount();
+
+ // Calculate the next scroll position with the offset
+ int nextScrollPosition = Math.min(
+ lastVisibleItemPosition + scrollOffset + 1, numItems - 1);
+ mPermissionListRecyclerView.smoothScrollToPosition(nextScrollPosition);
+ return;
+ }
// Disable the button, to prevent more clicks.
v.setEnabled(false);
+ // Approved the association creation if the list is scrolled to the bottom.
if (mRequest.isSelfManaged()) {
onAssociationApproved(null);
} else {
@@ -774,31 +796,48 @@ public class CompanionAssociationActivity extends FragmentActivity implements
}
}
- // Disable and grey out the Allow and Don't allow buttons if the last permission in the
+ // 1. Disable and grey out the Don't allow button if the last permission in the
// permission list is not visible to the users.
+ // 2. Remove the text for Allow button.
+ // 3. Set the background that includes the downward arrow icon.
private void disableButtons() {
- mButtonAllow.setEnabled(false);
+ mButtonAllow.setText("");
+ mButtonAllow.setBackgroundResource(R.drawable.btn_positive_button_with_arrow);
+ mButtonAllow.setContentDescription("");
+ mButtonAllow.setAccessibilityDelegate(new View.AccessibilityDelegate() {
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ info.setContentDescription(getString(R.string.downward_arrow));
+ info.addAction(
+ new AccessibilityNodeInfo.AccessibilityAction(
+ AccessibilityNodeInfo.ACTION_CLICK,
+ getString(R.string.downward_arrow_action)
+ )
+ );
+ }
+ });
+
mButtonNotAllow.setEnabled(false);
- mButtonAllow.setTextColor(
- getResources().getColor(android.R.color.system_neutral1_400, null));
mButtonNotAllow.setTextColor(
getResources().getColor(android.R.color.system_neutral1_400, null));
- mButtonAllow.getBackground().setColorFilter(
- (new BlendModeColorFilter(Color.LTGRAY, BlendMode.DARKEN)));
mButtonNotAllow.getBackground().setColorFilter(
(new BlendModeColorFilter(Color.LTGRAY, BlendMode.DARKEN)));
}
- // Enable and restore the color for the Allow and Don't allow buttons if the last permission in
- // the permission list is visible to the users.
+ // 1.Enable and restore the color for the Allow and Don't allow buttons if the
+ // last permission in the permission list is visible to the users.
+ // 2. Re-set the background for the Allow button which remove the downward arrow icon.
private void enableButtons() {
- mButtonAllow.setEnabled(true);
+ mButtonAllow.setText(R.string.consent_yes);
+ mButtonAllow.setBackgroundResource(R.drawable.btn_positive_button);
+ mButtonAllow.setContentDescription(getString(R.string.consent_yes));
+ mButtonAllow.setAccessibilityDelegate(null);
+
mButtonNotAllow.setEnabled(true);
- mButtonAllow.getBackground().setColorFilter(null);
mButtonNotAllow.getBackground().setColorFilter(null);
- mButtonAllow.setTextColor(
- getResources().getColor(android.R.color.system_neutral1_900, null));
mButtonNotAllow.setTextColor(
getResources().getColor(android.R.color.system_neutral1_900, null));
+
+ mIsPermissionsListScrolledToBottom = true;
}
private final ResultReceiver mOnAssociationCreatedReceiver =