android/app/src/main/java/com/owncloud/android/ui/dialog/IndeterminateProgressDialog.kt

82 lines
3.1 KiB
Kotlin

/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2023 Alper Ozturk <alper_ozturk@proton.me>
* SPDX-FileCopyrightText: 2015 David A. Velasco <dvelasco@solidgear.es>
* SPDX-FileCopyrightText: 2015 ownCloud Inc.
* SPDX-License-Identifier: GPL-2.0-only AND AGPL-3.0-or-later
*/
@file:Suppress("DEPRECATION")
package com.owncloud.android.ui.dialog
import android.app.Dialog
import android.app.ProgressDialog
import android.content.DialogInterface
import android.os.Bundle
import android.view.KeyEvent
import android.widget.ProgressBar
import androidx.fragment.app.DialogFragment
import com.nextcloud.client.di.Injectable
import com.owncloud.android.R
import com.owncloud.android.utils.theme.ViewThemeUtils
import javax.inject.Inject
class IndeterminateProgressDialog : DialogFragment(), Injectable {
@JvmField
@Inject
var viewThemeUtils: ViewThemeUtils? = null
/**
* {@inheritDoc}
*/
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// / create indeterminate progress dialog
val progressDialog = ProgressDialog(requireActivity(), R.style.ProgressDialogTheme)
progressDialog.isIndeterminate = true
progressDialog.setOnShowListener {
val v = progressDialog.findViewById<ProgressBar>(android.R.id.progress)
viewThemeUtils?.platform?.tintDrawable(requireContext(), v.indeterminateDrawable)
}
// / set message
val messageId = requireArguments().getInt(ARG_MESSAGE_ID, R.string.placeholder_sentence)
progressDialog.setMessage(getString(messageId))
// / set cancellation behavior
val cancelable = requireArguments().getBoolean(ARG_CANCELABLE, false)
if (!cancelable) {
progressDialog.setCancelable(false)
// disable the back button
val keyListener =
DialogInterface.OnKeyListener { _, keyCode, _ -> keyCode == KeyEvent.KEYCODE_BACK }
progressDialog.setOnKeyListener(keyListener)
}
return progressDialog
}
companion object {
private val ARG_MESSAGE_ID = IndeterminateProgressDialog::class.java.canonicalName?.plus(".ARG_MESSAGE_ID")
private val ARG_CANCELABLE = IndeterminateProgressDialog::class.java.canonicalName?.plus(".ARG_CANCELABLE")
/**
* Public factory method to get dialog instances.
*
* @param messageId Resource id for a message to show in the dialog.
* @param cancelable If 'true', the dialog can be cancelled by the user input (BACK button, touch outside...)
* @return New dialog instance, ready to show.
*/
@JvmStatic
fun newInstance(messageId: Int, cancelable: Boolean): IndeterminateProgressDialog {
val fragment = IndeterminateProgressDialog()
fragment.setStyle(STYLE_NO_FRAME, R.style.ownCloud_AlertDialog)
val args = Bundle()
args.putInt(ARG_MESSAGE_ID, messageId)
args.putBoolean(ARG_CANCELABLE, cancelable)
fragment.arguments = args
return fragment
}
}
}