From a71a18316061d5b3799a96da395b6b97b379fa39 Mon Sep 17 00:00:00 2001 From: Dominik Korsa Date: Sun, 27 Oct 2019 00:36:39 +0200 Subject: [PATCH] Add school quick actions (#570) --- .../school/SchoolFragment.kt | 15 +++ .../school/SchoolPresenter.kt | 14 +++ .../schoolandteachers/school/SchoolView.kt | 4 + .../wulkanowy/utils/ContextExtension.kt | 15 ++- .../res/drawable/ic_school_directions.xml | 9 ++ app/src/main/res/drawable/ic_school_phone.xml | 9 ++ app/src/main/res/layout/fragment_school.xml | 116 ++++++++++++------ app/src/main/res/values-pl/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 9 files changed, 147 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/drawable/ic_school_directions.xml create mode 100644 app/src/main/res/drawable/ic_school_phone.xml diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt index 6c17f5ed..92f74ca8 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt @@ -10,6 +10,8 @@ import io.github.wulkanowy.ui.base.BaseFragment import io.github.wulkanowy.ui.modules.main.MainView import io.github.wulkanowy.ui.modules.schoolandteachers.SchoolAndTeachersChildView import io.github.wulkanowy.ui.modules.schoolandteachers.SchoolAndTeachersFragment +import io.github.wulkanowy.utils.dialPhone +import io.github.wulkanowy.utils.openMapLocation import kotlinx.android.synthetic.main.fragment_school.* import javax.inject.Inject @@ -35,12 +37,17 @@ class SchoolFragment : BaseFragment(), SchoolView, MainView.TitledView, SchoolAn override fun initView() { schoolSwipe.setOnRefreshListener { presenter.onSwipeRefresh() } + + schoolAddressButton.setOnClickListener { presenter.onAddressSelected() } + schoolTelephoneButton.setOnClickListener { presenter.onTelephoneSelected() } } override fun updateData(data: School) { schoolName.text = data.name schoolAddress.text = data.address.ifBlank { "-" } + schoolAddressButton.visibility = if (data.address.isNotBlank()) View.VISIBLE else View.GONE schoolTelephone.text = data.contact.ifBlank { "-" } + schoolTelephoneButton.visibility = if (data.contact.isNotBlank()) View.VISIBLE else View.GONE schoolHeadmaster.text = data.headmaster schoolPedagogue.text = data.pedagogue } @@ -77,4 +84,12 @@ class SchoolFragment : BaseFragment(), SchoolView, MainView.TitledView, SchoolAn presenter.onDetachView() super.onDestroyView() } + + override fun openMapsLocation(location: String) { + context?.openMapLocation(location) + } + + override fun dialPhone(phone: String) { + context?.dialPhone(phone) + } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt index f996b165..2b0a37b1 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolPresenter.kt @@ -19,6 +19,10 @@ class SchoolPresenter @Inject constructor( private val analytics: FirebaseAnalyticsHelper ) : BasePresenter(errorHandler, studentRepository, schedulers) { + private var address: String? = null + + private var contact: String? = null + override fun onAttachView(view: SchoolView) { super.onAttachView(view) view.initView() @@ -34,6 +38,14 @@ class SchoolPresenter @Inject constructor( loadData(forceRefresh) } + fun onAddressSelected() { + address?.let{ view?.openMapsLocation(it) } + } + + fun onTelephoneSelected() { + contact?.let { view?.dialPhone(it) } + } + private fun loadData(forceRefresh: Boolean = false) { Timber.i("Loading school info started") disposable.add(studentRepository.getCurrentStudent() @@ -51,6 +63,8 @@ class SchoolPresenter @Inject constructor( }.subscribe({ Timber.i("Loading teachers result: Success") view?.run { + address = it.address.ifBlank { null } + contact = it.contact.ifBlank { null } updateData(it) showContent(true) showEmpty(false) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolView.kt index 5702278c..39e7b805 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolView.kt @@ -19,4 +19,8 @@ interface SchoolView : BaseView, SchoolAndTeachersChildView { fun showContent(show: Boolean) fun hideRefresh() + + fun openMapsLocation(location: String) + + fun dialPhone(phone: String) } diff --git a/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt b/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt index 84200b3a..5110b067 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/ContextExtension.kt @@ -9,7 +9,6 @@ import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat -import io.github.wulkanowy.R @ColorInt fun Context.getThemeAttrColor(@AttrRes colorAttr: Int): Int { @@ -41,4 +40,18 @@ fun Context.openEmail(chooserTitle: String, email: String, subject: String?, bod startActivity(Intent.createChooser(emailIntent, chooserTitle)) } +fun Context.openMapLocation(location: String) { + val intentUri = Uri.parse("geo:0,0?q=${Uri.encode(location)}") + val intent = Intent(Intent.ACTION_VIEW, intentUri) + if (intent.resolveActivity(packageManager) != null) { + startActivity(intent) + } +} + +fun Context.dialPhone(phone: String) { + val intentUri = Uri.parse("tel:$phone") + val intent = Intent(Intent.ACTION_DIAL, intentUri) + startActivity(intent) +} + fun Context.dpToPx(dp: Float) = dp * resources.displayMetrics.densityDpi / DENSITY_DEFAULT diff --git a/app/src/main/res/drawable/ic_school_directions.xml b/app/src/main/res/drawable/ic_school_directions.xml new file mode 100644 index 00000000..c48db1da --- /dev/null +++ b/app/src/main/res/drawable/ic_school_directions.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_school_phone.xml b/app/src/main/res/drawable/ic_school_phone.xml new file mode 100644 index 00000000..7e3d7991 --- /dev/null +++ b/app/src/main/res/drawable/ic_school_phone.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_school.xml b/app/src/main/res/layout/fragment_school.xml index 8f52d46b..2570251b 100644 --- a/app/src/main/res/layout/fragment_school.xml +++ b/app/src/main/res/layout/fragment_school.xml @@ -60,55 +60,95 @@ - - + + android:layout_weight="1" + android:orientation="vertical" + android:paddingStart="12dp" + android:paddingLeft="12dp" + android:paddingTop="7dp" + android:paddingEnd="12dp" + android:paddingRight="12dp" + android:paddingBottom="7dp"> - + + + + + + app:srcCompat="@drawable/ic_school_directions" + android:contentDescription="@string/school_address_button" + android:background="?attr/selectableItemBackgroundBorderless" + android:tint="?colorPrimary" + android:padding="4dp" + android:layout_marginTop="8dp" + android:layout_marginRight="8dp" + android:layout_marginLeft="8dp" + android:layout_gravity="center_vertical" /> - - + + android:layout_weight="1" + android:orientation="vertical" + android:paddingStart="12dp" + android:paddingLeft="12dp" + android:paddingTop="7dp" + android:paddingEnd="12dp" + android:paddingRight="12dp" + android:paddingBottom="7dp"> - + + + + + + app:srcCompat="@drawable/ic_school_phone" + android:contentDescription="@string/school_telephone_button" + android:background="?attr/selectableItemBackgroundBorderless" + android:tint="?colorPrimary" + android:padding="4dp" + android:layout_marginTop="8dp" + android:layout_marginRight="8dp" + android:layout_marginLeft="8dp" + android:layout_gravity="center_vertical" /> Telefon Imię i nazwisko dyrektora Imię i nazwisko pedagoga + Pokaż na mpaie + Zadzwoń diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eeee5838..4660f9fe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -218,6 +218,8 @@ Telephone Name of headmaster Name of pedagogue + Show on map + Call