Skip to content
This repository was archived by the owner on Jan 9, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions automotive/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildFeatures {
viewBinding true
}

compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import androidx.lifecycle.ViewModelProvider
*<p>This screen serves as a demo for UI best practices for PIN code sign in. Sign in implementation
* will be app specific and is not included.
*/
class PinCodeSignInFragment : Fragment() {
class PinCodeSignInFragment : Fragment(R.layout.pin_sign_in) {

private lateinit var toolbar: Toolbar
private lateinit var appIcon: ImageView
Expand All @@ -45,13 +45,6 @@ class PinCodeSignInFragment : Fragment() {
private lateinit var pinCodeContainer: ViewGroup
private lateinit var footerTextView: TextView

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.pin_sign_in, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val context = requireContext()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,12 @@ package com.example.android.uamp.automotive

import android.os.Bundle
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat.getDrawable
import androidx.core.text.HtmlCompat
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.example.android.uamp.automotive.databinding.QrSignInBinding

/**
* Fragment that is used to facilitate QR code sign-in. Users scan a QR code rendered by this
Expand All @@ -35,57 +32,27 @@ import com.bumptech.glide.Glide
* <p>This screen serves as a demo for UI best practices for QR code sign in. Sign in implementation
* will be app specific and is not included.
*/
class QrCodeSignInFragment : Fragment() {

private lateinit var toolbar: Toolbar
private lateinit var appIcon: ImageView
private lateinit var primaryTextView: TextView
private lateinit var secondaryTextView: TextView
private lateinit var qrCode: ImageView
private lateinit var footerTextView: TextView

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.qr_sign_in, container, false)
}
class QrCodeSignInFragment : Fragment(R.layout.qr_sign_in) {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val context = requireContext()
val binding = QrSignInBinding.bind(view)

toolbar = view.findViewById(R.id.toolbar)
appIcon = view.findViewById(R.id.app_icon)
primaryTextView = view.findViewById(R.id.primary_message)
secondaryTextView = view.findViewById(R.id.secondary_message)
qrCode = view.findViewById(R.id.qr_code)
footerTextView = view.findViewById(R.id.footer)

toolbar.setNavigationOnClickListener {
binding.toolbar.setNavigationOnClickListener {
requireActivity().supportFragmentManager.popBackStack()
}

appIcon.setImageDrawable(context.getDrawable(R.drawable.aural_logo))
primaryTextView.text = getString(R.string.qr_sign_in_primary_text)
secondaryTextView.text = getString(R.string.qr_sign_in_secondary_text)
binding.appIcon.setImageDrawable(getDrawable(requireContext(), R.drawable.aural_logo))
binding.primaryMessage.text = getString(R.string.qr_sign_in_primary_text)
binding.secondaryMessage.text = getString(R.string.qr_sign_in_secondary_text)

// Links in footer text should be clickable.
footerTextView.text = HtmlCompat.fromHtml(
context.getString(R.string.sign_in_footer),
binding.footer.text = HtmlCompat.fromHtml(
requireContext().getString(R.string.sign_in_footer),
HtmlCompat.FROM_HTML_MODE_LEGACY
)
footerTextView.movementMethod = LinkMovementMethod.getInstance()

setQrCode(getString(R.string.qr_code_url))
}
binding.footer.movementMethod = LinkMovementMethod.getInstance()

/**
* Sets the QR code rendered on this sign in screen.
*
* @param code The QR code to display.
*/
private fun setQrCode(url: String) {
Glide.with(this).load(url).into(qrCode)
Glide.with(this).load(getString(R.string.qr_code_url)).into(binding.qrCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,20 @@ package com.example.android.uamp.automotive

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.example.android.uamp.automotive.databinding.ActivitySettingsBinding

/**
* This class exposes application settings
* for integration with MediaCenter in Android Automotive.
*/
class SettingsActivity : AppCompatActivity() {
private lateinit var toolbar: Toolbar

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
val binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)

toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
setSupportActionBar(binding.toolbar)
supportActionBar?.setHomeButtonEnabled(true)
supportActionBar?.setDisplayHomeAsUpEnabled(true)

Expand Down