From 5491971959f768e015873fe32712beb57080034f Mon Sep 17 00:00:00 2001 From: Jannik Date: Sun, 6 Dec 2020 18:00:28 +0100 Subject: [PATCH] view binding, latest desing guidlines and minor updates --- app/build.gradle | 11 ++- .../mosad/seil0/projectlaogai/MainActivity.kt | 34 ++++---- .../seil0/projectlaogai/OnboardingActivity.kt | 19 +++-- .../projectlaogai/controller/NFCMensaCard.kt | 8 +- .../projectlaogai/fragments/GradesFragment.kt | 28 ++++--- .../projectlaogai/fragments/HomeFragment.kt | 12 +-- .../projectlaogai/fragments/MensaFragment.kt | 27 ++++--- .../fragments/SettingsFragment.kt | 64 +++++++-------- .../fragments/TimetableFragment.kt | 34 ++++---- .../projectlaogai/uicomponents/DayCardView.kt | 18 ++--- .../uicomponents/GradeLinearLayout.kt | 22 +++-- .../uicomponents/LessonLinearLayout.kt | 18 ++--- .../uicomponents/MealLinearLayout.kt | 16 ++-- .../activities/layout/activity_main.xml | 8 +- .../activities/layout/cardview_day.xml | 34 ++++---- .../activities/layout/linearlayout_grade.xml | 12 +-- .../activities/layout/linearlayout_lesson.xml | 20 ++--- .../activities/layout/linearlayout_meal.xml | 6 +- .../fragments/layout/fragment_settings.xml | 81 ++++++++++--------- app/src/main/res/values/colors.xml | 26 +++--- app/src/main/res/values/styles.xml | 28 +++---- build.gradle | 4 +- 22 files changed, 271 insertions(+), 259 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 47d4779..876d2ef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,5 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' android { @@ -21,6 +20,10 @@ android { setProperty("archivesBaseName", "projectlaogai-$versionName") } + buildFeatures { + viewBinding true + } + buildTypes { release { minifyEnabled true @@ -63,11 +66,13 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.1' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.security:security-crypto:1.1.0-alpha02' implementation "androidx.work:work-runtime-ktx:2.4.0" diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/MainActivity.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/MainActivity.kt index d592d94..24687ee 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/MainActivity.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/MainActivity.kt @@ -39,15 +39,15 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.GravityCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import androidx.fragment.app.commit import com.afollestad.aesthetic.Aesthetic import com.afollestad.aesthetic.NavigationViewMode import com.google.android.material.navigation.NavigationView -import kotlinx.android.synthetic.main.activity_main.* -import kotlinx.android.synthetic.main.app_bar_main.* import org.mosad.seil0.projectlaogai.controller.NFCMensaCard import org.mosad.seil0.projectlaogai.controller.cache.CacheController import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.ActivityMainBinding import org.mosad.seil0.projectlaogai.fragments.* import org.mosad.seil0.projectlaogai.util.NotificationUtils import kotlin.system.measureTimeMillis @@ -57,8 +57,8 @@ import kotlin.system.measureTimeMillis */ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { + private lateinit var binding: ActivityMainBinding private var activeFragment: Fragment = HomeFragment() // the currently active fragment, home at the start - private val className = this.javaClass.name private lateinit var adapter: NfcAdapter private lateinit var pendingIntent: PendingIntent @@ -67,12 +67,12 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte private var useNFC = false override fun onCreate(savedInstanceState: Bundle?) { - val fragmentTransaction: FragmentTransaction = supportFragmentManager.beginTransaction() - Aesthetic.attach(this) super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - setSupportActionBar(toolbar) + + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + setSupportActionBar(binding.appBar.toolbar) // load mensa, timetable and color load() @@ -80,12 +80,12 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte initForegroundDispatch() val toggle = ActionBarDrawerToggle( - this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close + this, binding.drawerLayout, binding.appBar.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close ) - drawer_layout.addDrawerListener(toggle) + binding.drawerLayout.addDrawerListener(toggle) toggle.syncState() - nav_view.setNavigationItemSelectedListener(this) + binding.navView.setNavigationItemSelectedListener(this) // based on the intent we get, call readBalance or open a Fragment when (intent.action) { @@ -97,9 +97,9 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte else -> activeFragment = HomeFragment() } - // open the activeFragment, default is the HomeFragment - fragmentTransaction.replace(R.id.fragment_container, activeFragment) - fragmentTransaction.commit() + supportFragmentManager.commit { + replace(R.id.fragment_container, activeFragment, activeFragment.javaClass.simpleName) + } } override fun onNewIntent(intent: Intent) { @@ -126,8 +126,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte } override fun onBackPressed() { - if (drawer_layout.isDrawerOpen(GravityCompat.START)) { - drawer_layout.closeDrawer(GravityCompat.START) + if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) { + binding.drawerLayout.closeDrawer(GravityCompat.START) } else { // TODO only call on double tap super.onBackPressed() @@ -166,7 +166,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte fragmentTransaction.replace(R.id.fragment_container, activeFragment) fragmentTransaction.commit() - drawer_layout.closeDrawer(GravityCompat.START) + binding.drawerLayout.closeDrawer(GravityCompat.START) return true } @@ -181,7 +181,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte EncryptedPreferences.load(this) NotificationUtils(this) } - Log.i(className, "Startup completed in $startupTime ms") + Log.i(javaClass.simpleName, "Startup completed in $startupTime ms") } private fun initAesthetic() { diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt index 1fe6749..b2519d9 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/OnboardingActivity.kt @@ -32,17 +32,18 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.text.HtmlCompat import androidx.viewpager.widget.ViewPager -import kotlinx.android.synthetic.main.activity_onboarding.* import kotlinx.coroutines.* import org.mosad.seil0.projectlaogai.controller.cache.CacheController import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.ActivityOnboardingBinding import org.mosad.seil0.projectlaogai.onboarding.ViewPagerAdapter import org.mosad.seil0.projectlaogai.uicomponents.dialogs.CourseSelectionDialog import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoadingDialog class OnboardingActivity : AppCompatActivity() { + private lateinit var binding: ActivityOnboardingBinding companion object { val layouts = intArrayOf(R.layout.fragment_on_welcome, R.layout.fragment_on_course, R.layout.fragment_on_login) } @@ -57,7 +58,9 @@ class OnboardingActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_onboarding) + + binding = ActivityOnboardingBinding.inflate(layoutInflater) + setContentView(binding.root) viewPager = findViewById(R.id.viewPager) linLayoutDots = findViewById(R.id.linLayout_Dots) @@ -69,7 +72,7 @@ class OnboardingActivity : AppCompatActivity() { viewPager.addOnPageChangeListener(viewPagerPageChangeListener) // we don't use the skip button, instead we use the start button to skip the last fragment - btn_Skip.visibility = View.GONE + binding.btnSkip.visibility = View.GONE } fun btnNextClick(@Suppress("UNUSED_PARAMETER")v: View) { @@ -152,12 +155,12 @@ class OnboardingActivity : AppCompatActivity() { addBottomDots(position) // changing the next button text to skip for the login fragment if (position == layouts.size - 1) { - btn_Next.text = getString(R.string.skip) - btn_Next.visibility = View.VISIBLE - btn_Skip.visibility = View.GONE + binding.btnNext.text = getString(R.string.skip) + binding.btnNext.visibility = View.VISIBLE + binding.btnSkip.visibility = View.GONE } else { - btn_Next.visibility = View.GONE - btn_Skip.visibility = View.GONE + binding.btnNext.visibility = View.GONE + binding.btnSkip.visibility = View.GONE } } 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 af4b310..fe37923 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 @@ -28,12 +28,12 @@ import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep import android.util.Log +import android.widget.TextView 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 org.mosad.seil0.projectlaogai.controller.preferences.Preferences import java.lang.Exception @@ -97,9 +97,9 @@ class NFCMensaCard { String.format("%.4f shm", (lastRaw.toFloat() * 0.0000075)) } - dialog.txtView_current.text = current - dialog.txtView_last.text = context.resources.getString(R.string.mensa_last, last) - + dialog.findViewById(R.id.txtView_current).text = current + dialog.findViewById(R.id.txtView_last).text = context.resources.getString(R.string.mensa_last, last) + return dialog } } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/GradesFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/GradesFragment.kt index 573e4c3..0c9dbe6 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/GradesFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/GradesFragment.kt @@ -30,13 +30,13 @@ import android.view.ViewGroup import android.widget.TextView import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment -import kotlinx.android.synthetic.main.fragment_grades.* import kotlinx.coroutines.* import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.controller.QISPOSParser import org.mosad.seil0.projectlaogai.controller.cache.CacheController import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.FragmentGradesBinding import org.mosad.seil0.projectlaogai.uicomponents.DayCardView import org.mosad.seil0.projectlaogai.uicomponents.GradeLinearLayout import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoginDialog @@ -49,15 +49,17 @@ import kotlin.system.measureTimeMillis class GradesFragment : Fragment() { private lateinit var parser: QISPOSParser + private lateinit var binding: FragmentGradesBinding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_grades, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentGradesBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - refreshLayout_Grades.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) + binding.refreshLayoutGrades.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) initActions() parser = QISPOSParser(context!!)// init the parser @@ -68,7 +70,7 @@ class GradesFragment : Fragment() { val currentTime = System.currentTimeMillis() / 1000 withContext(Dispatchers.Main) { if ((currentTime - Preferences.gradesCacheTime) > 86400 && checkQisposStatus()) { - refreshLayout_Grades.isRefreshing = true + binding.refreshLayoutGrades.isRefreshing = true CacheController.updateGrades(context!!).join() } } @@ -82,8 +84,8 @@ class GradesFragment : Fragment() { * initialize the actions */ private fun initActions() = GlobalScope.launch(Dispatchers.Default) { - refreshLayout_Grades.setOnRefreshListener { - linLayout_Grades.removeAllViews() // clear layout + binding.refreshLayoutGrades.setOnRefreshListener { + binding.linLayoutGrades.removeAllViews() // clear layout // TODO add loading textView GlobalScope.launch(Dispatchers.Default) { @@ -108,7 +110,7 @@ class GradesFragment : Fragment() { addGrades() } .negativeButton { - txtView_Loading.text = resources.getString(R.string.credentials_missing) + binding.txtViewLoading.text = resources.getString(R.string.credentials_missing) } .show { email = EncryptedPreferences.email @@ -138,7 +140,7 @@ class GradesFragment : Fragment() { bounds = Rect(0, 0, 75, 75) } - txtView_Loading?.apply { + binding.txtViewLoading.apply { text = infoText setCompoundDrawables(null, null, null, img) } @@ -156,7 +158,7 @@ class GradesFragment : Fragment() { val grades = CacheController(context!!).readGrades() withContext(Dispatchers.Main) { - linLayout_Grades.removeAllViews() // clear layout + binding.linLayoutGrades.removeAllViews() // clear layout } // TODO this loop takes 3/4 of the time @@ -202,7 +204,7 @@ class GradesFragment : Fragment() { // without context we can't access the view withContext(Dispatchers.Main) { - linLayout_Grades.addView(semesterCard) + binding.linLayoutGrades.addView(semesterCard) } } @@ -213,8 +215,8 @@ class GradesFragment : Fragment() { // stop refreshing and show legal warning withContext(Dispatchers.Main) { - linLayout_Grades.addView(txtViewLegal) - refreshLayout_Grades.isRefreshing = false + binding.linLayoutGrades.addView(txtViewLegal) + binding.refreshLayoutGrades.isRefreshing = false } } 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 43bc072..5a9af89 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 @@ -30,11 +30,11 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment -import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.coroutines.* import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.controller.cache.CacheController.Companion.mensaMenu import org.mosad.seil0.projectlaogai.controller.cache.TimetableController +import org.mosad.seil0.projectlaogai.databinding.FragmentHomeBinding import org.mosad.seil0.projectlaogai.util.Meal import org.mosad.seil0.projectlaogai.util.TimetableDay import org.mosad.seil0.projectlaogai.uicomponents.DayCardView @@ -51,9 +51,11 @@ class HomeFragment : Fragment() { private val className = "HomeFragment" private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault()) + private lateinit var binding: FragmentHomeBinding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_home, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentHomeBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -106,7 +108,7 @@ class HomeFragment : Fragment() { mensaCardView.getLinLayoutDay().addView(getNoCard(resources.getString(R.string.mensa_closed))) } - linLayout_Home.addView(mensaCardView) + binding.linLayoutHome.addView(mensaCardView) } } @@ -123,7 +125,7 @@ class HomeFragment : Fragment() { if (isAdded && TimetableController.timetable.isNotEmpty()) { try { val dayCardView = findNextDay(NotRetardedCalendar.getDayOfWeekIndex()) - linLayout_Home.addView(dayCardView) + binding.linLayoutHome.addView(dayCardView) } catch (ex: Exception) { Log.e(className, "could not load timetable", ex) // TODO send feedback } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/MensaFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/MensaFragment.kt index 0bf525b..7e23e57 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/MensaFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/MensaFragment.kt @@ -27,7 +27,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import kotlinx.android.synthetic.main.fragment_mensa.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -36,6 +35,7 @@ import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.controller.cache.CacheController import org.mosad.seil0.projectlaogai.controller.cache.CacheController.Companion.mensaMenu import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.FragmentMensaBinding import org.mosad.seil0.projectlaogai.uicomponents.DayCardView import org.mosad.seil0.projectlaogai.uicomponents.MealLinearLayout import org.mosad.seil0.projectlaogai.uicomponents.TextViewInfo @@ -48,14 +48,17 @@ import org.mosad.seil0.projectlaogai.util.NotRetardedCalendar */ class MensaFragment : Fragment() { - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_mensa, container, false) + private lateinit var binding: FragmentMensaBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentMensaBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - refreshLayout_Mensa.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) + binding.refreshLayoutMensa.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) initActions() // init actions @@ -67,11 +70,11 @@ class MensaFragment : Fragment() { addWeek(mensaMenu.nextWeek, 0).join() // show a info if there are no more menus - if (linLayout_Mensa.childCount == 0) { + if (binding.linLayoutMensa.childCount == 0) { val txtViewInfo = TextViewInfo(context!!).set { txt = resources.getString(R.string.no_more_meals) } - linLayout_Mensa.addView(txtViewInfo) + withContext(Dispatchers.Main) { binding.linLayoutMensa.addView(txtViewInfo) } } } } @@ -105,7 +108,7 @@ class MensaFragment : Fragment() { helpMeal.disableDivider() if(dayCardView.getLinLayoutDay().childCount > 2) - linLayout_Mensa.addView(dayCardView) + binding.linLayoutMensa.addView(dayCardView) } } @@ -116,7 +119,7 @@ class MensaFragment : Fragment() { */ private fun initActions() { // set the refresh listener - refreshLayout_Mensa.setOnRefreshListener { + binding.refreshLayoutMensa.setOnRefreshListener { updateMensaScreen() } } @@ -129,7 +132,7 @@ class MensaFragment : Fragment() { withContext(Dispatchers.Main) { // remove all menus from the layout - linLayout_Mensa.removeAllViews() + binding.linLayoutMensa.removeAllViews() // add the refreshed menus val dayCurrent = if (NotRetardedCalendar.getDayOfWeekIndex() == 6) 0 else NotRetardedCalendar.getDayOfWeekIndex() @@ -138,14 +141,14 @@ class MensaFragment : Fragment() { addWeek(mensaMenu.currentWeek, dayCurrent).join() addWeek(mensaMenu.nextWeek, 0).join() - refreshLayout_Mensa.isRefreshing = false + binding.refreshLayoutMensa.isRefreshing = false // show a info if there are no more menus - if (linLayout_Mensa.childCount == 0) { + if (binding.linLayoutMensa.childCount == 0) { val txtViewInfo = TextViewInfo(context!!).set { txt = resources.getString(R.string.no_more_meals) } - linLayout_Mensa.addView(txtViewInfo) + binding.linLayoutMensa.addView(txtViewInfo) } } } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt index 124f400..9a10674 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/SettingsFragment.kt @@ -27,7 +27,6 @@ import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.TextView import androidx.fragment.app.Fragment import com.afollestad.aesthetic.Aesthetic import com.afollestad.materialdialogs.MaterialDialog @@ -37,7 +36,6 @@ import com.afollestad.materialdialogs.color.colorChooser import com.afollestad.materialdialogs.list.listItemsMultiChoice import com.afollestad.materialdialogs.list.listItemsSingleChoice import de.psdev.licensesdialog.LicensesDialog -import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.coroutines.* import org.mosad.seil0.projectlaogai.BuildConfig import org.mosad.seil0.projectlaogai.R @@ -47,6 +45,7 @@ import org.mosad.seil0.projectlaogai.controller.cache.CacheController.Companion. import org.mosad.seil0.projectlaogai.controller.cache.TimetableController import org.mosad.seil0.projectlaogai.controller.preferences.EncryptedPreferences import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.FragmentSettingsBinding import org.mosad.seil0.projectlaogai.uicomponents.dialogs.CourseSelectionDialog import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoadingDialog import org.mosad.seil0.projectlaogai.uicomponents.dialogs.LoginDialog @@ -59,12 +58,13 @@ import java.util.* */ class SettingsFragment : Fragment() { - private lateinit var txtViewCourse: TextView + private lateinit var binding: FragmentSettingsBinding private var selectedTheme = DataTypes.Theme.Light - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_settings, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentSettingsBinding.inflate(inflater, container, false) + return binding.root } /** @@ -73,49 +73,45 @@ class SettingsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - // if we call txtView_Course via KAE view binding it'll result in a NPE in the onDismissed call - txtViewCourse = view.findViewById(R.id.txtView_Course) - initActions() - - txtView_User.text = EncryptedPreferences.email.ifEmpty { resources.getString(R.string.sample_user) } - txtView_Course.text = Preferences.course.courseName - txtView_AboutDesc.text = resources.getString(R.string.about_version, BuildConfig.VERSION_NAME, getString(R.string.build_time)) - txtView_GradesSyncDesc.text = if (Preferences.gradesSyncInterval == 0) { + binding.textUser.text = EncryptedPreferences.email.ifEmpty { resources.getString(R.string.sample_user) } + binding.textCourse.text = Preferences.course.courseName + binding.textAboutDesc.text = resources.getString(R.string.about_version, BuildConfig.VERSION_NAME, getString(R.string.build_time)) + binding.textGradesSyncDesc.text = if (Preferences.gradesSyncInterval == 0) { resources.getString(R.string.grades_sync_desc_never) } else { resources.getString(R.string.grades_sync_desc, Preferences.gradesSyncInterval) } - switch_buffet.isChecked = Preferences.showBuffet // init switch + binding.switchBuffet.isChecked = Preferences.showBuffet // init switch val outValue = TypedValue() activity!!.theme.resolveAttribute(R.attr.themeName, outValue, true) when(outValue.string) { "light" -> { - switch_buffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryLight, activity!!.theme)) + binding.switchBuffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryLight, activity!!.theme)) selectedTheme = DataTypes.Theme.Light selectedTheme.string = resources.getString(R.string.themeLight) } "dark" -> { - switch_buffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryDark, activity!!.theme)) + binding.switchBuffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryDark, activity!!.theme)) selectedTheme = DataTypes.Theme.Dark selectedTheme.string = resources.getString(R.string.themeDark) } "black" -> { - switch_buffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryDark, activity!!.theme)) + binding.switchBuffet.setTextColor(activity!!.resources.getColor(R.color.textPrimaryDark, activity!!.theme)) selectedTheme = DataTypes.Theme.Black selectedTheme.string = resources.getString(R.string.themeBlack) } } - txtView_SelectedTheme.text = selectedTheme.string + binding.textThemeSelected.text = selectedTheme.string } /** * initialize some actions for SettingsFragment elements */ private fun initActions() { - linLayout_User.setOnClickListener { + binding.linLayoutUser.setOnClickListener { // open a new dialog LoginDialog(context!!) .positiveButton { @@ -127,12 +123,12 @@ class SettingsFragment : Fragment() { } } - linLayout_User.setOnLongClickListener { + binding.linLayoutUser.setOnLongClickListener { Preferences.oGiants = true // enable easter egg return@setOnLongClickListener true } - linLayout_Course.setOnClickListener { + binding.linLayoutCourse.setOnClickListener { CourseSelectionDialog(context!!).show { list = coursesList.map { it.courseName } listItems { @@ -155,12 +151,12 @@ class SettingsFragment : Fragment() { } } onDismiss { - txtViewCourse.text = Preferences.course.courseName // update txtView after the dialog is dismissed + binding.textCourse.text = Preferences.course.courseName // update txtView after the dialog is dismissed } } } - linLayout_ManageLessons.setOnClickListener { + binding.linLayoutManageLessons.setOnClickListener { val lessons = ArrayList() TimetableController.subjectMap.forEach { pair -> pair.value.forEach { @@ -184,7 +180,7 @@ class SettingsFragment : Fragment() { } } - linLayout_About.setOnClickListener { + binding.linLayoutAbout.setOnClickListener { // open a new info dialog MaterialDialog(context!!) .title(R.string.about_dialog_heading) @@ -192,7 +188,7 @@ class SettingsFragment : Fragment() { .show() } - linLayout_Licence.setOnClickListener { + binding.linLayoutLicence.setOnClickListener { // do the theme magic, as the lib's theme support is broken val outValue = TypedValue() context!!.theme.resolveAttribute(R.attr.themeName, outValue, true) @@ -218,7 +214,7 @@ class SettingsFragment : Fragment() { .show() } - linLayout_Theme.setOnClickListener { + binding.linLayoutTheme.setOnClickListener { val themes = listOf( resources.getString(R.string.themeLight), resources.getString(R.string.themeDark), @@ -241,11 +237,11 @@ class SettingsFragment : Fragment() { } } - linLayout_PrimaryColor.setOnClickListener { + binding.linLayoutPrimaryColor.setOnClickListener { // open a new color chooser dialog MaterialDialog(context!!) .colorChooser(DataTypes().primaryColors, allowCustomArgb = true, initialSelection = Preferences.colorPrimary) { _, color -> - view_PrimaryColor.setBackgroundColor(color) + binding.viewPrimaryColor.setBackgroundColor(color) Aesthetic.config { colorPrimary(color) colorPrimaryDark(color) @@ -261,11 +257,11 @@ class SettingsFragment : Fragment() { } - linLayout_AccentColor.setOnClickListener { + binding.linLayoutAccentColor.setOnClickListener { // open a new color chooser dialog MaterialDialog(context!!) .colorChooser(DataTypes().accentColors, allowCustomArgb = true, initialSelection = Preferences.colorAccent) { _, color -> - view_AccentColor.setBackgroundColor(color) + binding.viewAccentColor.setBackgroundColor(color) Aesthetic.config { colorAccent(color) apply() @@ -280,7 +276,7 @@ class SettingsFragment : Fragment() { } } - linLayout_GradesSync.setOnClickListener { + binding.linLayoutGradesSync.setOnClickListener { val items = resources.getStringArray(R.array.syncInterval).toList() val initial = when (Preferences.gradesSyncInterval) { 1 -> 1 @@ -304,7 +300,7 @@ class SettingsFragment : Fragment() { Preferences.saveGradesSync(context!!, interval) GradesController.updateBackgroundSync(context!!) - txtView_GradesSyncDesc.text = if (Preferences.gradesSyncInterval == 0) { + binding.textGradesSyncDesc.text = if (Preferences.gradesSyncInterval == 0) { resources.getString(R.string.grades_sync_desc_never) } else { resources.getString(R.string.grades_sync_desc, Preferences.gradesSyncInterval) @@ -312,8 +308,8 @@ class SettingsFragment : Fragment() { }.show() } - switch_buffet.setOnClickListener { - Preferences.saveShowBuffet(context!!, switch_buffet.isChecked) + binding.switchBuffet.setOnClickListener { + Preferences.saveShowBuffet(context!!, binding.switchBuffet.isChecked) } } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/TimetableFragment.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/TimetableFragment.kt index 121fb4e..b0416e8 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/TimetableFragment.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/fragments/TimetableFragment.kt @@ -26,15 +26,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ScrollView import androidx.fragment.app.Fragment -import com.google.android.material.floatingactionbutton.FloatingActionButton -import kotlinx.android.synthetic.main.fragment_timetable.* import kotlinx.coroutines.* import org.mosad.seil0.projectlaogai.R import org.mosad.seil0.projectlaogai.controller.cache.TimetableController import org.mosad.seil0.projectlaogai.controller.cache.TimetableController.timetable import org.mosad.seil0.projectlaogai.controller.preferences.Preferences +import org.mosad.seil0.projectlaogai.databinding.FragmentTimetableBinding import org.mosad.seil0.projectlaogai.uicomponents.dialogs.AddSubjectDialog import org.mosad.seil0.projectlaogai.uicomponents.DayCardView import org.mosad.seil0.projectlaogai.uicomponents.TextViewInfo @@ -46,19 +44,17 @@ import org.mosad.seil0.projectlaogai.util.NotRetardedCalendar */ class TimetableFragment : Fragment() { - private lateinit var scrollViewTimetable: ScrollView - private lateinit var faBtnAddSubject: FloatingActionButton + private lateinit var binding: FragmentTimetableBinding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_timetable, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentTimetableBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - scrollViewTimetable = view.findViewById(R.id.scrollView_Timetable) - faBtnAddSubject = view.findViewById(R.id.faBtnAddSubject) - refreshLayout_Timetable.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) + binding.refreshLayoutTimetable.setProgressBackgroundColorSchemeColor(Preferences.themeSecondary) initActions() // init actions @@ -68,7 +64,7 @@ class TimetableFragment : Fragment() { val txtViewInfo = TextViewInfo(context!!).set { txt = resources.getString(R.string.timetable_generic_error) }.showImage() - linLayout_Timetable.addView(txtViewInfo) + binding.linLayoutTimetable.addView(txtViewInfo) } } @@ -77,13 +73,13 @@ class TimetableFragment : Fragment() { */ private fun initActions() { - refreshLayout_Timetable.setOnRefreshListener { + binding.refreshLayoutTimetable.setOnRefreshListener { runBlocking { TimetableController.update(context!!).joinAll() } reloadTimetableUI() } // show the AddLessonDialog if the ftaBtn is clicked - faBtnAddSubject.setOnClickListener { + binding.faBtnAddSubject.setOnClickListener { AddSubjectDialog(context!!) .positiveButton { TimetableController.addSubject(selectedCourse, selectedSubject, context) @@ -92,11 +88,11 @@ class TimetableFragment : Fragment() { } // hide the btnCardValue if the user is scrolling down - scrollViewTimetable.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> + binding.scrollViewTimetable.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> if (scrollY > oldScrollY) { - faBtnAddSubject.hide() + binding.faBtnAddSubject.hide() } else { - faBtnAddSubject.show() + binding.faBtnAddSubject.show() } } @@ -124,7 +120,7 @@ class TimetableFragment : Fragment() { // if there are no lessons don't show the dayCardView if (dayCardView.getLinLayoutDay().childCount > 1) - linLayout_Timetable.addView(dayCardView) + binding.linLayoutTimetable.addView(dayCardView) } } @@ -135,7 +131,7 @@ class TimetableFragment : Fragment() { private fun reloadTimetableUI() = GlobalScope.launch(Dispatchers.Default) { withContext(Dispatchers.Main) { // remove all lessons from the layout - linLayout_Timetable.removeAllViews() + binding.linLayoutTimetable.removeAllViews() // add the refreshed timetables val dayIndex = NotRetardedCalendar.getDayOfWeekIndex() @@ -143,7 +139,7 @@ class TimetableFragment : Fragment() { addTimetableWeek(dayIndex, 5, 0).join() // add current week addTimetableWeek(0, dayIndex - 1, 1) // add next week - refreshLayout_Timetable.isRefreshing = false + binding.refreshLayoutTimetable.isRefreshing = false } } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/DayCardView.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/DayCardView.kt index 8c1cec5..043b03b 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/DayCardView.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/DayCardView.kt @@ -24,10 +24,10 @@ package org.mosad.seil0.projectlaogai.uicomponents import android.content.Context import android.graphics.Color +import android.view.LayoutInflater import android.widget.LinearLayout import androidx.cardview.widget.CardView -import kotlinx.android.synthetic.main.cardview_day.view.* -import org.mosad.seil0.projectlaogai.R +import org.mosad.seil0.projectlaogai.databinding.CardviewDayBinding import org.mosad.seil0.projectlaogai.util.DataTypes import org.mosad.seil0.projectlaogai.util.TimetableDay import java.text.SimpleDateFormat @@ -35,21 +35,19 @@ import java.util.* class DayCardView(context: Context) : CardView(context) { + private var binding = CardviewDayBinding.inflate(LayoutInflater.from(context), this, true) private val formatter = SimpleDateFormat("E dd.MM", Locale.getDefault()) init { - inflate(context, R.layout.cardview_day,this) - - // workaround to prevent a white border - this.setBackgroundColor(Color.TRANSPARENT) + this.setBackgroundColor(Color.TRANSPARENT) // workaround to prevent a white border } fun getLinLayoutDay() : LinearLayout { - return linLayout_Day + return binding.linearDay } fun setDayHeading(heading: String) { - txtView_DayHeading.text = heading + binding.textDayHeading.text = heading } /** @@ -62,7 +60,7 @@ class DayCardView(context: Context) : CardView(context) { // set the heading val cal = Calendar.getInstance() cal.add(Calendar.DATE, daysToAdd) - txtView_DayHeading.text = formatter.format(cal.time) + binding.textDayHeading.text = formatter.format(cal.time) // for every timeslot of that timetable timetable.timeslots.forEachIndexed { tsIndex, timeslot -> @@ -71,7 +69,7 @@ class DayCardView(context: Context) : CardView(context) { val lessonLayout = LessonLinearLayout(context) lessonLayout.setLesson(lesson, DataTypes().times[tsIndex]) - linLayout_Day.addView(lessonLayout) + binding.linearDay.addView(lessonLayout) if (lesson != timeslot.last()) { lessonLayout.disableDivider() diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/GradeLinearLayout.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/GradeLinearLayout.kt index c308173..b29cb7d 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/GradeLinearLayout.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/GradeLinearLayout.kt @@ -23,36 +23,34 @@ package org.mosad.seil0.projectlaogai.uicomponents import android.content.Context +import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import kotlinx.android.synthetic.main.linearlayout_grade.view.* -import org.mosad.seil0.projectlaogai.R +import org.mosad.seil0.projectlaogai.databinding.LinearlayoutGradeBinding class GradeLinearLayout(context: Context?): LinearLayout(context) { + private val binding = LinearlayoutGradeBinding.inflate(LayoutInflater.from(context), this, true) + var subjectName = "" var grade = "" var subSubjectName = "" var subGrade = "" - init { - inflate(context, R.layout.linearlayout_grade, this) - } - fun set(func: GradeLinearLayout.() -> Unit): GradeLinearLayout = apply { func() - txtView_subject.text = subjectName - txtView_grade.text = grade - txtView_sub_subject.text = subSubjectName - txtView_sub_grade.text = subGrade + binding.textSubject.text = subjectName + binding.textGrade.text = grade + binding.textSubSubject.text = subSubjectName + binding.textSubGrade.text = subGrade } fun disableDivider() { - divider_grade.visibility = View.GONE + binding.dividerGrade.visibility = View.GONE } fun disableSubSubject() { - linLayout_sub_subject.visibility = View.GONE + binding.linearSubSubject.visibility = View.GONE } } \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/LessonLinearLayout.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/LessonLinearLayout.kt index 2fc198d..659b9b4 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/LessonLinearLayout.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/LessonLinearLayout.kt @@ -23,27 +23,25 @@ package org.mosad.seil0.projectlaogai.uicomponents import android.content.Context +import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import kotlinx.android.synthetic.main.linearlayout_lesson.view.* -import org.mosad.seil0.projectlaogai.R +import org.mosad.seil0.projectlaogai.databinding.LinearlayoutLessonBinding import org.mosad.seil0.projectlaogai.util.Lesson class LessonLinearLayout(context: Context?) : LinearLayout(context) { - init { - inflate(context, R.layout.linearlayout_lesson, this) - } + private val binding = LinearlayoutLessonBinding.inflate(LayoutInflater.from(context), this, true) fun setLesson(lesson: Lesson, time: String) { - txtView_lessonTime.text = time - txtView_lessonSubject.text = lesson.lessonSubject - txtView_lessonTeacher.text = lesson.lessonTeacher - txtView_lessonRoom.text = lesson.lessonRoom + binding.textLessonTime.text = time + binding.textLessonSubject.text = lesson.lessonSubject + binding.textLessonTeacher.text = lesson.lessonTeacher + binding.textLessonRoom.text = lesson.lessonRoom } fun disableDivider() { - divider_lesson.visibility = View.GONE + binding.dividerLesson.visibility = View.GONE } } \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/MealLinearLayout.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/MealLinearLayout.kt index eb26bcd..108e2e0 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/MealLinearLayout.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/MealLinearLayout.kt @@ -23,30 +23,28 @@ package org.mosad.seil0.projectlaogai.uicomponents import android.content.Context +import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout -import kotlinx.android.synthetic.main.linearlayout_meal.view.* -import org.mosad.seil0.projectlaogai.R +import org.mosad.seil0.projectlaogai.databinding.LinearlayoutMealBinding import org.mosad.seil0.projectlaogai.util.Meal class MealLinearLayout(context: Context?): LinearLayout(context) { - init { - inflate(context, R.layout.linearlayout_meal, this) - } + private val binding = LinearlayoutMealBinding.inflate(LayoutInflater.from(context), this, true) fun setMeal(meal: Meal) { - txtView_MealHeading.text = meal.heading + binding.textMealHeading.text = meal.heading meal.parts.forEachIndexed { partIndex, part -> - txtView_Meal.append(part) + binding.textMeal.append(part) if(partIndex < (meal.parts.size - 1)) - txtView_Meal.append("\n") + binding.textMeal.append("\n") } } fun disableDivider() { - divider_meal.visibility = View.GONE + binding.dividerMeal.visibility = View.GONE } } \ No newline at end of file diff --git a/app/src/main/res/layouts/activities/layout/activity_main.xml b/app/src/main/res/layouts/activities/layout/activity_main.xml index 6259fe8..9d57e0e 100644 --- a/app/src/main/res/layouts/activities/layout/activity_main.xml +++ b/app/src/main/res/layouts/activities/layout/activity_main.xml @@ -10,9 +10,10 @@ tools:openDrawer="start"> + android:id="@+id/app_bar" + layout="@layout/app_bar_main" + android:layout_width="match_parent" + android:layout_height="match_parent" /> diff --git a/app/src/main/res/layouts/activities/layout/cardview_day.xml b/app/src/main/res/layouts/activities/layout/cardview_day.xml index 1fdcca4..614a168 100644 --- a/app/src/main/res/layouts/activities/layout/cardview_day.xml +++ b/app/src/main/res/layouts/activities/layout/cardview_day.xml @@ -1,21 +1,27 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:cardBackgroundColor="?themeSecondary" + app:cardElevation="5dp" + app:cardUseCompatPadding="true"> + android:id="@+id/linear_day" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + android:id="@+id/text_day_heading" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/sample_date" + android:textAlignment="center" + android:textColor="?colorAccent" + android:textSize="18sp" + android:textStyle="bold" /> + \ No newline at end of file diff --git a/app/src/main/res/layouts/activities/layout/linearlayout_grade.xml b/app/src/main/res/layouts/activities/layout/linearlayout_grade.xml index ccf4c5d..69461de 100644 --- a/app/src/main/res/layouts/activities/layout/linearlayout_grade.xml +++ b/app/src/main/res/layouts/activities/layout/linearlayout_grade.xml @@ -10,13 +10,13 @@ android:paddingBottom="3dp"> + android:id="@+id/text_lesson_time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:gravity="end" + android:text="@string/a_time" + android:textColor="?textSecondary" /> diff --git a/app/src/main/res/layouts/activities/layout/linearlayout_meal.xml b/app/src/main/res/layouts/activities/layout/linearlayout_meal.xml index 519307e..259803c 100644 --- a/app/src/main/res/layouts/activities/layout/linearlayout_meal.xml +++ b/app/src/main/res/layouts/activities/layout/linearlayout_meal.xml @@ -1,6 +1,6 @@ @@ -78,11 +79,12 @@ android:id="@+id/linLayout_Course" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="7dp" - android:orientation="vertical"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> @@ -106,11 +108,12 @@ android:id="@+id/linLayout_ManageLessons" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="7dp" - android:orientation="vertical"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> @@ -162,8 +166,9 @@ android:id="@+id/linLayout_Licence" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_margin="7dp" - android:orientation="vertical"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> @@ -234,11 +240,12 @@ android:id="@+id/linLayout_PrimaryColor" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="7dp" + android:background="?android:selectableItemBackground" android:clickable="true" android:focusable="true" android:gravity="center_vertical|end" - android:orientation="horizontal"> + android:orientation="horizontal" + android:padding="7dp"> @@ -268,7 +275,7 @@ android:orientation="vertical"> @@ -285,11 +292,12 @@ android:id="@+id/linLayout_AccentColor" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="7dp" + android:background="?android:selectableItemBackground" android:clickable="true" android:focusable="true" android:gravity="center_vertical|end" - android:orientation="horizontal"> + android:orientation="horizontal" + android:padding="7dp"> @@ -319,7 +327,7 @@ android:orientation="vertical"> @@ -336,11 +344,12 @@ android:id="@+id/linLayout_GradesSync" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_margin="7dp" - android:orientation="vertical"> + android:background="?android:selectableItemBackground" + android:orientation="vertical" + android:padding="7dp"> @@ -364,7 +373,7 @@ android:id="@+id/switch_buffet" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="7dp" + android:padding="7dp" android:text="@string/show_buffet" android:textSize="16sp" android:textStyle="bold" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 6bf9997..0304c7f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,22 +1,28 @@ + #009688 #009688 #0096ff #ffffff - - #000000 - #303030 - #ffffff - #c0c0c0 - #232323 - + #f5f5f5 #ffffff - #000000 - #818181 - #e0e0e0 + #de000000 + #99000000 + #22000000 + + #121212 + #202020 + #deffffff + #99ffffff + #22ffffff + #11ffffff + + + #000000 + #303030 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index b06f414..14f549f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -12,14 +12,13 @@ light @color/themePrimaryLight @color/themeSecondaryLight + @color/textPrimaryLight + @color/textSecondaryLight @color/textPrimaryLight @color/textPrimaryLight @color/textSecondaryLight - @color/textPrimaryLight - @color/textSecondaryLight @color/dividerLight @color/themeSecondaryLight - @color/textPrimaryLight @color/textPrimaryLight @@ -27,30 +26,23 @@ dark @color/themePrimaryDark @color/themeSecondaryDark + @color/textPrimaryDark + @color/textSecondaryDark @color/textPrimaryDark @color/textPrimaryDark @color/textSecondaryDark - @color/textPrimaryDark - @color/textSecondaryDark @color/dividerDark @color/themeSecondaryDark - @color/textPrimaryDark @color/textPrimaryDark + + + @color/controlHighlightDark -