@@ -58,13 +58,11 @@ import androidx.compose.material3.Icon
5858import androidx.compose.material3.IconButton
5959import androidx.compose.material3.MaterialTheme
6060import androidx.compose.material3.ModalBottomSheet
61- import androidx.compose.material3.OutlinedTextField
6261import androidx.compose.material3.Scaffold
6362import androidx.compose.material3.SmallFloatingActionButton
6463import androidx.compose.material3.SnackbarHost
6564import androidx.compose.material3.SnackbarHostState
6665import androidx.compose.material3.Text
67- import androidx.compose.material3.TextButton
6866import androidx.compose.material3.rememberModalBottomSheetState
6967import androidx.compose.runtime.Composable
7068import androidx.compose.runtime.LaunchedEffect
@@ -88,7 +86,6 @@ import androidx.compose.ui.semantics.clearAndSetSemantics
8886import androidx.compose.ui.semantics.contentDescription
8987import androidx.compose.ui.semantics.role
9088import androidx.compose.ui.semantics.semantics
91- import androidx.compose.ui.text.buildAnnotatedString
9289import androidx.compose.ui.unit.dp
9390import androidx.core.net.toUri
9491import com.google.ai.edge.gallery.R
@@ -99,7 +96,6 @@ import com.google.ai.edge.gallery.huggingface.extractHfUrlInfo
9996import com.google.ai.edge.gallery.proto.HfModelItemProto
10097import com.google.ai.edge.gallery.proto.ImportedModel
10198import com.google.ai.edge.gallery.ui.common.TaskIcon
102- import com.google.ai.edge.gallery.ui.common.buildTrackableUrlAnnotatedString
10399import com.google.ai.edge.gallery.ui.common.isHttpOrHttps
104100import com.google.ai.edge.gallery.ui.common.modelitem.ModelItem
105101import com.google.ai.edge.gallery.ui.common.tos.TosViewModel
@@ -551,83 +547,51 @@ fun GlobalModelManager(
551547 }
552548
553549 if (showHuggingFaceUrlDialog) {
554- AlertDialog (
555- onDismissRequest = { showHuggingFaceUrlDialog = false },
556- title = { Text (stringResource(R .string.import_from_hugging_face_title)) },
557- text = {
558- Column (verticalArrangement = Arrangement .spacedBy(8 .dp)) {
559- Text (
560- buildAnnotatedString {
561- append(stringResource(R .string.enter_hugging_face_url))
562- append(
563- buildTrackableUrlAnnotatedString(
564- url = stringResource(R .string.enter_hugging_face_url_example_link),
565- linkText = stringResource(R .string.enter_hugging_face_url_example_link),
566- )
567- )
568- }
569- )
570- OutlinedTextField (
571- value = huggingFaceUrlInput,
572- onValueChange = { huggingFaceUrlInput = it },
573- modifier = Modifier .fillMaxWidth(),
574- placeholder = { Text (stringResource(R .string.hugging_face_url_placeholder)) },
575- singleLine = true ,
576- )
577- }
578- },
579- confirmButton = {
580- Button (
581- onClick = {
582- val url = huggingFaceUrlInput.trim()
583- if (url.isNotEmpty()) {
584- showHuggingFaceUrlDialog = false
585- val urlInfo = extractHfUrlInfo(url)
586- when {
587- urlInfo.isDirectModelFile -> {
588- val fileUri =
589- if (urlInfo.modelId != null && urlInfo.fileName != null ) {
590- " https://huggingface.co/${urlInfo.modelId} /resolve/main/${urlInfo.fileName} ?download=true"
591- .toUri()
592- } else {
593- url.toUri()
594- }
595- processModelUri(fileUri, true )
550+ HuggingFaceUrlDialog (
551+ urlInput = huggingFaceUrlInput,
552+ onUrlInputChange = { huggingFaceUrlInput = it },
553+ onDismiss = { showHuggingFaceUrlDialog = false },
554+ onConfirm = {
555+ val url = huggingFaceUrlInput.trim()
556+ if (url.isNotEmpty()) {
557+ showHuggingFaceUrlDialog = false
558+ val urlInfo = extractHfUrlInfo(url)
559+ when {
560+ urlInfo.isDirectModelFile -> {
561+ val fileUri =
562+ if (urlInfo.modelId != null && urlInfo.fileName != null ) {
563+ " https://huggingface.co/${urlInfo.modelId} /resolve/main/${urlInfo.fileName} ?download=true"
564+ .toUri()
565+ } else {
566+ url.toUri()
596567 }
597- urlInfo.modelId != null -> {
598- val targetModelId = urlInfo.modelId
599- if (targetModelId != null ) {
600- isLoadingModelCardDetails = true
601- viewModel.fetchModelDetails (targetModelId) { detailedModel ->
602- isLoadingModelCardDetails = false
603- if (detailedModel != null ) {
604- selectedModelForDetails = detailedModel
605- showModelDetailsSheet = true
606- } else {
607- unsupportedModelErrorMessage =
608- getErrorMessage(
609- context,
610- R .string.could_not_fetch_model_details,
611- targetModelId ,
612- )
613- showUnsupportedModelDialog = true
614- }
615- }
568+ processModelUri(fileUri, true )
569+ }
570+ urlInfo.modelId != null -> {
571+ val targetModelId = urlInfo.modelId
572+ if (targetModelId != null ) {
573+ isLoadingModelCardDetails = true
574+ viewModel.fetchModelDetails(targetModelId ) { detailedModel ->
575+ isLoadingModelCardDetails = false
576+ if (detailedModel != null ) {
577+ selectedModelForDetails = detailedModel
578+ showModelDetailsSheet = true
579+ } else {
580+ unsupportedModelErrorMessage =
581+ getErrorMessage(
582+ context ,
583+ R .string.could_not_fetch_model_details,
584+ targetModelId,
585+ )
586+ showUnsupportedModelDialog = true
616587 }
617588 }
618- else -> {
619- processModelUri(url.toUri(), true )
620- }
621589 }
622590 }
591+ else -> {
592+ processModelUri(url.toUri(), true )
593+ }
623594 }
624- ) {
625- Text (stringResource(R .string.next))
626- }
627- },
628- dismissButton = {
629- TextButton (onClick = { showHuggingFaceUrlDialog = false }) {
630- Text (stringResource(R .string.cancel))
631595 }
632596 },
633597 )
0 commit comments