Implement design on privacy dialog
* Implement margins and styles * Change tappable region to whole row * Implement a11y for whole row Also, fix a bug with background window that would show black on some devices instead of transparent. Bug: 178093014 Fixes: 178616173 Test: manual Test: atest PrivacyDialogTest Change-Id: If03fcd75970a724f8209596b75640c5618b3b9c2
This commit is contained in:
@@ -21,16 +21,16 @@
|
||||
>
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:height="28dp"
|
||||
android:width="28dp"
|
||||
android:height="@dimen/ongoing_appops_dialog_circle_size"
|
||||
android:width="@dimen/ongoing_appops_dialog_circle_size"
|
||||
/>
|
||||
<solid android:color="@color/privacy_circle_camera" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@id/icon"
|
||||
android:gravity="center"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:width="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:height="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:drawable="@*android:drawable/perm_group_camera"
|
||||
/>
|
||||
</layer-list>
|
||||
@@ -21,16 +21,16 @@
|
||||
>
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:height="28dp"
|
||||
android:width="28dp"
|
||||
android:height="@dimen/ongoing_appops_dialog_circle_size"
|
||||
android:width="@dimen/ongoing_appops_dialog_circle_size"
|
||||
/>
|
||||
<solid android:color="@color/privacy_circle_microphone_location" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@id/icon"
|
||||
android:gravity="center"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:width="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:height="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:drawable="@*android:drawable/perm_group_microphone"
|
||||
/>
|
||||
</layer-list>
|
||||
@@ -21,16 +21,16 @@
|
||||
>
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:height="28dp"
|
||||
android:width="28dp"
|
||||
android:height="@dimen/ongoing_appops_dialog_circle_size"
|
||||
android:width="@dimen/ongoing_appops_dialog_circle_size"
|
||||
/>
|
||||
<solid android:color="@color/privacy_circle_microphone_location" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@id/icon"
|
||||
android:gravity="center"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:width="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:height="@dimen/ongoing_appops_dialog_icon_size"
|
||||
android:drawable="@*android:drawable/perm_group_microphone"
|
||||
/>
|
||||
</layer-list>
|
||||
@@ -22,7 +22,13 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/ongoing_appops_dialog_side_margins"
|
||||
android:layout_marginEnd="@dimen/ongoing_appops_dialog_side_margins"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="vertical"
|
||||
android:padding = "8dp"
|
||||
android:paddingLeft="@dimen/ongoing_appops_dialog_side_padding"
|
||||
android:paddingRight="@dimen/ongoing_appops_dialog_side_padding"
|
||||
android:paddingBottom="12dp"
|
||||
android:paddingTop="8dp"
|
||||
android:background="@drawable/privacy_dialog_bg"
|
||||
/>
|
||||
/>
|
||||
<!-- 12dp padding bottom so there's 20dp total under the icon -->
|
||||
<!-- 8dp padding top, as there's 4dp margin in each row -->
|
||||
@@ -16,19 +16,22 @@
|
||||
-->
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/privacy_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="48dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:importantForAccessibility="yes"
|
||||
android:focusable="true"
|
||||
>
|
||||
<!-- 4dp marginTop makes 20dp minimum between icons -->
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_width="@dimen/ongoing_appops_dialog_circle_size"
|
||||
android:layout_height="@dimen/ongoing_appops_dialog_circle_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="12dp"
|
||||
android:layout_marginEnd="12dp"
|
||||
android:importantForAccessibility="no"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
@@ -38,25 +41,21 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:textDirection="locale"
|
||||
android:textAlignment="viewStart"
|
||||
android:gravity="start | center_vertical"
|
||||
android:textAppearance="@style/TextAppearance.QS.TileLabel"
|
||||
android:textAppearance="@style/TextAppearance.PrivacyDialog"
|
||||
android:lineHeight="20sp"
|
||||
/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/link"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
<ImageView
|
||||
android:layout_height="24dp"
|
||||
android:layout_width="24dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
>
|
||||
|
||||
<ImageView
|
||||
android:layout_height="24dp"
|
||||
android:layout_width="24dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@*android:drawable/ic_chevron_end"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
/>
|
||||
</FrameLayout>
|
||||
android:src="@*android:drawable/ic_chevron_end"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1181,6 +1181,12 @@
|
||||
|
||||
<dimen name="ongoing_appops_dialog_side_margins">@dimen/notification_shade_content_margin_horizontal</dimen>
|
||||
|
||||
<dimen name="ongoing_appops_dialog_circle_size">32dp</dimen>
|
||||
|
||||
<dimen name="ongoing_appops_dialog_icon_size">20dp</dimen>
|
||||
|
||||
<dimen name="ongoing_appops_dialog_side_padding">16dp</dimen>
|
||||
|
||||
<!-- Size of the RAT type for CellularTile -->
|
||||
<dimen name="celltile_rat_type_size">10sp</dimen>
|
||||
|
||||
|
||||
@@ -745,4 +745,9 @@
|
||||
* Title: headline, medium 20sp
|
||||
* Message: body, 16 sp -->
|
||||
<style name="Theme.ControlsRequestDialog" parent="@*android:style/Theme.DeviceDefault.Dialog.Alert"/>
|
||||
|
||||
<style name="TextAppearance.PrivacyDialog">
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -24,7 +24,6 @@ import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import android.view.WindowInsets
|
||||
import android.widget.ImageView
|
||||
@@ -66,9 +65,8 @@ class PrivacyDialog(
|
||||
super.onCreate(savedInstanceState)
|
||||
window?.apply {
|
||||
attributes.fitInsetsTypes = attributes.fitInsetsTypes or WindowInsets.Type.statusBars()
|
||||
setLayout(MATCH_PARENT, WRAP_CONTENT)
|
||||
setLayout(context.resources.getDimensionPixelSize(R.dimen.qs_panel_width), WRAP_CONTENT)
|
||||
setGravity(Gravity.TOP or Gravity.CENTER_HORIZONTAL)
|
||||
setBackgroundDrawable(null)
|
||||
}
|
||||
|
||||
setContentView(R.layout.privacy_dialog)
|
||||
@@ -130,7 +128,7 @@ class PrivacyDialog(
|
||||
)
|
||||
} ?: firstLine
|
||||
newView.requireViewById<TextView>(R.id.text).text = finalText
|
||||
newView.requireViewById<View>(R.id.link).apply {
|
||||
newView.apply {
|
||||
tag = element.type.permGroupName
|
||||
setOnClickListener(clickListener)
|
||||
}
|
||||
@@ -154,9 +152,7 @@ class PrivacyDialog(
|
||||
}
|
||||
|
||||
private val clickListener = View.OnClickListener { v ->
|
||||
if (v.id == R.id.link) {
|
||||
v.tag?.let { activityStarter(it as String) }
|
||||
}
|
||||
v.tag?.let { activityStarter(it as String) }
|
||||
}
|
||||
|
||||
/** */
|
||||
|
||||
@@ -72,7 +72,7 @@ class PrivacyDialogTest : SysuiTestCase() {
|
||||
)
|
||||
dialog = PrivacyDialog(context, list, starter)
|
||||
dialog.show()
|
||||
dialog.requireViewById<View>(R.id.link).callOnClick()
|
||||
dialog.requireViewById<View>(R.id.privacy_item).callOnClick()
|
||||
verify(starter).invoke(PrivacyType.TYPE_MICROPHONE.permGroupName)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user