• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.privatespace
17 
18 import androidx.compose.foundation.layout.Arrangement
19 import androidx.compose.foundation.layout.Column
20 import androidx.compose.foundation.layout.ExperimentalLayoutApi
21 import androidx.compose.foundation.layout.FlowRow
22 import androidx.compose.foundation.layout.Spacer
23 import androidx.compose.foundation.layout.fillMaxWidth
24 import androidx.compose.foundation.layout.height
25 import androidx.compose.foundation.layout.padding
26 import androidx.compose.material3.BasicAlertDialog
27 import androidx.compose.material3.ExperimentalMaterial3Api
28 import androidx.compose.material3.MaterialTheme
29 import androidx.compose.material3.Surface
30 import androidx.compose.material3.Text
31 import androidx.compose.runtime.Composable
32 import androidx.compose.ui.Alignment
33 import androidx.compose.ui.Modifier
34 import androidx.compose.ui.text.style.TextAlign
35 import androidx.compose.ui.unit.dp
36 import androidx.compose.ui.window.DialogProperties
37 
38 /**
39  * Based on {@link androidx.compose.material3.AlertDialog} but with three buttons instead of only up
40  * to two.
41  */
42 @OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
43 @Composable
ThreeButtonAlertDialognull44 fun ThreeButtonAlertDialog(
45     onDismissRequest: () -> Unit,
46     title: String,
47     message: String,
48     primaryButton: @Composable () -> Unit,
49     secondaryButton: @Composable () -> Unit,
50     dismissButton: @Composable () -> Unit,
51 ) {
52     BasicAlertDialog(
53         onDismissRequest = { onDismissRequest() },
54         properties =
55             DialogProperties(
56                 dismissOnBackPress = true,
57                 dismissOnClickOutside = true,
58                 usePlatformDefaultWidth = false,
59             ),
60     ) {
61         Surface(
62             shape = MaterialTheme.shapes.extraLarge,
63             tonalElevation = 5.dp,
64             modifier = Modifier.padding(horizontal = 24.dp),
65         ) {
66             Column(modifier = Modifier.padding(24.dp)) {
67                 Text(
68                     text = title,
69                     style = MaterialTheme.typography.headlineSmall,
70                     modifier = Modifier.align(Alignment.CenterHorizontally),
71                 )
72                 Spacer(modifier = Modifier.height(16.dp))
73                 Text(
74                     text = message,
75                     style = MaterialTheme.typography.bodyMedium,
76                     modifier = Modifier.align(Alignment.CenterHorizontally),
77                     textAlign = TextAlign.Center,
78                 )
79                 Spacer(modifier = Modifier.height(24.dp))
80 
81                 FlowRow(
82                     modifier = Modifier.fillMaxWidth(),
83                     verticalArrangement = Arrangement.spacedBy(10.dp),
84                     horizontalArrangement = Arrangement.End,
85                 ) {
86                     dismissButton()
87                     Spacer(modifier = Modifier.weight(1.0f))
88                     secondaryButton()
89                     primaryButton()
90                 }
91             }
92         }
93     }
94 }
95