From 5f2b3aa4965b4db9ba6f466bd1505fb01c3fa088 Mon Sep 17 00:00:00 2001 From: Seil0 Date: Fri, 23 Aug 2019 19:19:35 +0200 Subject: [PATCH] clean up the layout & polished Mensa credit dialog * don't crash if the nfc tag has been removed between triggering intent and connecting to the tag * closes #21 --- app/build.gradle | 13 +++++++ .../farebot/card/desfire/DesfireException.kt | 4 +- .../projectlaogai/controller/NFCMensaCard.kt | 38 ++++++++++++------- .../projectlaogai/fragments/HomeFragment.kt | 4 +- .../activities}/layout/activity_main.xml | 0 .../activities}/layout/app_bar_main.xml | 0 .../activities}/layout/cardview_day.xml | 0 .../layout/linearlayout_lesson.xml | 0 .../activities}/layout/linearlayout_meal.xml | 0 .../activities}/layout/nav_header_main.xml | 0 .../dialogs}/layout/dialog_loading.xml | 0 .../dialogs/layout/dialog_mensa_credit.xml | 34 +++++++++++++++++ .../fragments}/layout/fragment_home.xml | 0 .../fragments}/layout/fragment_mensa.xml | 0 .../fragments}/layout/fragment_moodle.xml | 0 .../fragments}/layout/fragment_settings.xml | 0 .../fragments}/layout/fragment_timetable.xml | 0 build.gradle | 4 +- 18 files changed, 79 insertions(+), 18 deletions(-) rename app/src/main/res/{ => layouts/activities}/layout/activity_main.xml (100%) rename app/src/main/res/{ => layouts/activities}/layout/app_bar_main.xml (100%) rename app/src/main/res/{ => layouts/activities}/layout/cardview_day.xml (100%) rename app/src/main/res/{ => layouts/activities}/layout/linearlayout_lesson.xml (100%) rename app/src/main/res/{ => layouts/activities}/layout/linearlayout_meal.xml (100%) rename app/src/main/res/{ => layouts/activities}/layout/nav_header_main.xml (100%) rename app/src/main/res/{ => layouts/dialogs}/layout/dialog_loading.xml (100%) create mode 100644 app/src/main/res/layouts/dialogs/layout/dialog_mensa_credit.xml rename app/src/main/res/{ => layouts/fragments}/layout/fragment_home.xml (100%) rename app/src/main/res/{ => layouts/fragments}/layout/fragment_mensa.xml (100%) rename app/src/main/res/{ => layouts/fragments}/layout/fragment_moodle.xml (100%) rename app/src/main/res/{ => layouts/fragments}/layout/fragment_settings.xml (100%) rename app/src/main/res/{ => layouts/fragments}/layout/fragment_timetable.xml (100%) diff --git a/app/build.gradle b/app/build.gradle index 8928012..9b4a7f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,6 +35,19 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + sourceSets { + main { + res.srcDirs = + [ + 'src/main/res/layouts/activities', + 'src/main/res/layouts/dialogs', + 'src/main/res/layouts/fragments', + 'src/main/res/layouts', + 'src/main/res' + ] + } + } } dependencies { diff --git a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.kt b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.kt index 7486991..aa7de73 100644 --- a/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.kt +++ b/app/src/main/java/com/codebutler/farebot/card/desfire/DesfireException.kt @@ -4,6 +4,6 @@ package com.codebutler.farebot.card.desfire * Created by Jakob Wenzel on 16.11.13. */ class DesfireException : Exception { - constructor(message: String) : super(message) {} - constructor(cause: Throwable) : super(cause) {} + constructor(message: String) : super(message) + constructor(cause: Throwable) : super(cause) } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/NFCMensaCard.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/NFCMensaCard.kt index fffb014..469f847 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/NFCMensaCard.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/NFCMensaCard.kt @@ -27,16 +27,20 @@ import android.content.Intent import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep +import android.util.Log import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.customview.customView import com.codebutler.farebot.Utils import com.codebutler.farebot.card.desfire.DesfireFileSettings import com.codebutler.farebot.card.desfire.DesfireProtocol +import kotlinx.android.synthetic.main.dialog_mensa_credit.* import org.mosad.seil0.projectlaogai.R import java.lang.Exception class NFCMensaCard { companion object { + private const val className = "NFCMensaCard" private const val appId = 0x5F8415 private const val fileId = 1 @@ -48,21 +52,23 @@ class NFCMensaCard { fun readBalance(intent: Intent, context: Context) { val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) val isoDep = IsoDep.get(tag) - isoDep.connect() + try { + isoDep.connect() - val card = DesfireProtocol(isoDep) - val settings = Utils.selectAppFile(card, appId, fileId) + val card = DesfireProtocol(isoDep) + val settings = Utils.selectAppFile(card, appId, fileId) - if (settings is DesfireFileSettings.ValueDesfireFileSettings) { - val data = try { - card.readValue(fileId) - } catch (ex: Exception) { 0 } + if (settings is DesfireFileSettings.ValueDesfireFileSettings) { + val data = try { + card.readValue(fileId) + } catch (ex: Exception) { 0 } - MaterialDialog(context) - .title(R.string.mensa_credit) - .message(text = lookAtMe(context, data, settings.value)) - .show() + lookAtMe(context, data, settings.value).show() + } + } catch (ex: Exception) { + Log.i(className,"could not connect to tag", ex) } + } /** @@ -74,7 +80,10 @@ class NFCMensaCard { * @param lastRaw the raw card value of the last payment * @return the message containing all values */ - private fun lookAtMe(context: Context, currentRaw: Int, lastRaw: Int): String { + private fun lookAtMe(context: Context, currentRaw: Int, lastRaw: Int): MaterialDialog { + val dialog = MaterialDialog(context) + .customView(R.layout.dialog_mensa_credit) + val current = if (!PreferencesController.oGiants) { String.format("%.2f €", (currentRaw.toFloat() / 1000)) } else { @@ -87,7 +96,10 @@ class NFCMensaCard { String.format("%.4f shm", (lastRaw.toFloat() * 0.0000075)) } - return context.resources.getString(R.string.mensa_current, current) + context.resources.getString(R.string.mensa_last, last) + dialog.txtView_current.text = current + dialog.txtView_last.text = context.resources.getString(R.string.mensa_last, last) + + return dialog } } } \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/HomeFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/HomeFragment.kt index 020692b..c475f98 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/HomeFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/HomeFragment.kt @@ -24,6 +24,7 @@ package org.mosad.seil0.projectlaogai.fragments import android.graphics.Typeface import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -52,6 +53,7 @@ import java.util.* */ class HomeFragment : Fragment() { + private val className = "MyActivity" private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault()) override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -146,7 +148,7 @@ class HomeFragment : Fragment() { .title(R.string.error) .message(R.string.timetable_error) .show() - // TODO log the error and send feedback + Log.e(className, "could not load timetable") // TODO send feedback } } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layouts/activities/layout/activity_main.xml similarity index 100% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layouts/activities/layout/activity_main.xml diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layouts/activities/layout/app_bar_main.xml similarity index 100% rename from app/src/main/res/layout/app_bar_main.xml rename to app/src/main/res/layouts/activities/layout/app_bar_main.xml diff --git a/app/src/main/res/layout/cardview_day.xml b/app/src/main/res/layouts/activities/layout/cardview_day.xml similarity index 100% rename from app/src/main/res/layout/cardview_day.xml rename to app/src/main/res/layouts/activities/layout/cardview_day.xml diff --git a/app/src/main/res/layout/linearlayout_lesson.xml b/app/src/main/res/layouts/activities/layout/linearlayout_lesson.xml similarity index 100% rename from app/src/main/res/layout/linearlayout_lesson.xml rename to app/src/main/res/layouts/activities/layout/linearlayout_lesson.xml diff --git a/app/src/main/res/layout/linearlayout_meal.xml b/app/src/main/res/layouts/activities/layout/linearlayout_meal.xml similarity index 100% rename from app/src/main/res/layout/linearlayout_meal.xml rename to app/src/main/res/layouts/activities/layout/linearlayout_meal.xml diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layouts/activities/layout/nav_header_main.xml similarity index 100% rename from app/src/main/res/layout/nav_header_main.xml rename to app/src/main/res/layouts/activities/layout/nav_header_main.xml diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layouts/dialogs/layout/dialog_loading.xml similarity index 100% rename from app/src/main/res/layout/dialog_loading.xml rename to app/src/main/res/layouts/dialogs/layout/dialog_loading.xml diff --git a/app/src/main/res/layouts/dialogs/layout/dialog_mensa_credit.xml b/app/src/main/res/layouts/dialogs/layout/dialog_mensa_credit.xml new file mode 100644 index 0000000..9eeee12 --- /dev/null +++ b/app/src/main/res/layouts/dialogs/layout/dialog_mensa_credit.xml @@ -0,0 +1,34 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layouts/fragments/layout/fragment_home.xml similarity index 100% rename from app/src/main/res/layout/fragment_home.xml rename to app/src/main/res/layouts/fragments/layout/fragment_home.xml diff --git a/app/src/main/res/layout/fragment_mensa.xml b/app/src/main/res/layouts/fragments/layout/fragment_mensa.xml similarity index 100% rename from app/src/main/res/layout/fragment_mensa.xml rename to app/src/main/res/layouts/fragments/layout/fragment_mensa.xml diff --git a/app/src/main/res/layout/fragment_moodle.xml b/app/src/main/res/layouts/fragments/layout/fragment_moodle.xml similarity index 100% rename from app/src/main/res/layout/fragment_moodle.xml rename to app/src/main/res/layouts/fragments/layout/fragment_moodle.xml diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layouts/fragments/layout/fragment_settings.xml similarity index 100% rename from app/src/main/res/layout/fragment_settings.xml rename to app/src/main/res/layouts/fragments/layout/fragment_settings.xml diff --git a/app/src/main/res/layout/fragment_timetable.xml b/app/src/main/res/layouts/fragments/layout/fragment_timetable.xml similarity index 100% rename from app/src/main/res/layout/fragment_timetable.xml rename to app/src/main/res/layouts/fragments/layout/fragment_timetable.xml diff --git a/build.gradle b/build.gradle index 9c3fee9..8d482e6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.40' + ext.kotlin_version = '1.3.50' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong