diff options
| author | Harsh Shandilya <me@msfjarvis.dev> | 2020-04-19 13:16:25 +0530 |
|---|---|---|
| committer | Harsh Shandilya <me@msfjarvis.dev> | 2020-04-19 14:11:19 +0530 |
| commit | 17385892cbe4e0359c45a6221036dd5d6c9cb283 (patch) | |
| tree | c0d1b8d3f8f7a7104bd897be08b6ae8a2ffbe54f /app/src/main/java/com/zeapo/pwdstore/ui/dialogs | |
| parent | eb5a30c3a9f1474e452d28032c238cc3738eb3d8 (diff) | |
| download | HardenedPass-17385892cbe4e0359c45a6221036dd5d6c9cb283.tar.gz HardenedPass-17385892cbe4e0359c45a6221036dd5d6c9cb283.zip | |
PasswordFragment: Replace fab options with descriptive bottom sheet
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/ui/dialogs')
| -rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/ui/dialogs/ItemCreationBottomSheet.kt | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/ItemCreationBottomSheet.kt b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/ItemCreationBottomSheet.kt new file mode 100644 index 00000000..55a767d8 --- /dev/null +++ b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/ItemCreationBottomSheet.kt @@ -0,0 +1,76 @@ +/* + * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ +package com.zeapo.pwdstore.ui.dialogs + +import android.graphics.drawable.GradientDrawable +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.ViewTreeObserver +import android.widget.FrameLayout +import androidx.fragment.app.Fragment +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.zeapo.pwdstore.PasswordFragment +import com.zeapo.pwdstore.R +import com.zeapo.pwdstore.utils.resolveAttribute + +class ItemCreationBottomSheet : BottomSheetDialogFragment() { + private var behavior: BottomSheetBehavior<FrameLayout>? = null + private val bottomSheetCallback = object : BottomSheetBehavior.BottomSheetCallback() { + override fun onSlide(bottomSheet: View, slideOffset: Float) { + } + + override fun onStateChanged(bottomSheet: View, newState: Int) { + if (newState == BottomSheetBehavior.STATE_COLLAPSED) { + dismiss() + } + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + if (savedInstanceState != null) dismiss() + return inflater.inflate(R.layout.item_create_sheet, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + view.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { + override fun onGlobalLayout() { + view.viewTreeObserver.removeOnGlobalLayoutListener(this) + val dialog = dialog as BottomSheetDialog? ?: return + behavior = dialog.behavior + behavior?.apply { + state = BottomSheetBehavior.STATE_EXPANDED + peekHeight = 0 + addBottomSheetCallback(bottomSheetCallback) + } + dialog.findViewById<View>(R.id.create_folder)?.setOnClickListener { + (requireTargetFragment() as PasswordFragment).createFolder() + dismiss() + } + dialog.findViewById<View>(R.id.create_password)?.setOnClickListener { + (requireTargetFragment() as PasswordFragment).createPassword() + dismiss() + } + } + }) + val gradientDrawable = GradientDrawable().apply { + setColor(requireContext().resolveAttribute(android.R.attr.windowBackground)) + } + view.background = gradientDrawable + } + + override fun dismiss() { + super.dismiss() + behavior?.removeBottomSheetCallback(bottomSheetCallback) + } + + private fun requireTargetFragment(): Fragment = requireNotNull(targetFragment) { + "A target fragment must be set for $this" + } +} |
