From 76876967bafa44916bd972d9ed2b145ee4879134 Mon Sep 17 00:00:00 2001 From: Douglas Sigelbaum Date: Fri, 19 May 2017 16:34:52 -0700 Subject: Various kotlin anti-pattern fixes in Autofill sample. Bug: 38182790 Test: manual Change-Id: I8bfbb606a6cb5b228255f7640c5cc7c312761ec4 --- .../autofillframework/app/CreditCardActivity.kt | 28 +++-------- .../autofillframework/app/CustomVirtualView.kt | 58 +++++++--------------- .../android/autofillframework/app/LoginActivity.kt | 34 ++++--------- .../android/autofillframework/app/MainActivity.kt | 4 -- .../autofillframework/app/VirtualLoginActivity.kt | 13 ++--- .../autofillframework/app/WelcomeActivity.kt | 5 +- 6 files changed, 40 insertions(+), 102 deletions(-) (limited to 'input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app') diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.kt index f2d9a8b4..46fdb72a 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.kt @@ -19,49 +19,33 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.view.View import android.widget.ArrayAdapter -import android.widget.Button -import android.widget.Spinner - import com.example.android.autofillframework.R +import kotlinx.android.synthetic.main.credit_card_activity.* class CreditCardActivity : AppCompatActivity() { - private var mCcExpirationDaySpinner: Spinner? = null - private var mCcExpirationMonthSpinner: Spinner? = null - private var mCcExpirationYearSpinner: Spinner? = null - private var mSubmitButton: Button? = null - private var mClearButton: Button? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.credit_card_activity) - - mSubmitButton = findViewById(R.id.submit) as Button - mClearButton = findViewById(R.id.clear) as Button - mCcExpirationDaySpinner = findViewById(R.id.expirationDay) as Spinner - mCcExpirationMonthSpinner = findViewById(R.id.expirationMonth) as Spinner - mCcExpirationYearSpinner = findViewById(R.id.expirationYear) as Spinner // Create an ArrayAdapter using the string array and a default spinner layout val dayAdapter = ArrayAdapter.createFromResource(this, R.array.day_array, android.R.layout.simple_spinner_item) // Specify the layout to use when the list of choices appears dayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // Apply the adapter to the spinner - mCcExpirationDaySpinner!!.adapter = dayAdapter + expirationDay.adapter = dayAdapter val monthAdapter = ArrayAdapter.createFromResource(this, R.array.month_array, android.R.layout.simple_spinner_item) monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - mCcExpirationMonthSpinner!!.adapter = monthAdapter + expirationMonth.adapter = monthAdapter val yearAdapter = ArrayAdapter.createFromResource(this, R.array.year_array, android.R.layout.simple_spinner_item) yearAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - mCcExpirationYearSpinner!!.adapter = yearAdapter + expirationYear.adapter = yearAdapter - mSubmitButton!!.setOnClickListener { submit() } - mClearButton!!.setOnClickListener { resetFields() } + submit.setOnClickListener { submit() } + clear.setOnClickListener { resetFields() } } private fun resetFields() { diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.kt index c5a7989e..5f66364c 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.kt @@ -31,13 +31,9 @@ import android.view.autofill.AutofillManager import android.view.autofill.AutofillValue import android.widget.EditText import android.widget.TextView - -import com.example.android.autofillframework.R - -import java.util.ArrayList -import java.util.Arrays - import com.example.android.autofillframework.CommonUtil.bundleToString +import com.example.android.autofillframework.R +import java.util.* /** @@ -47,36 +43,23 @@ class CustomVirtualView(context: Context, attrs: AttributeSet) : View(context, a private val mLines = ArrayList() private val mItems = SparseArray() - private val mAfm: AutofillManager + private val mAfm: AutofillManager = context.getSystemService(AutofillManager::class.java) private var mFocusedLine: Line? = null - private val mTextPaint: Paint - private val mTextHeight: Int - private val mTopMargin: Int - private val mLeftMargin: Int - private val mVerticalGap: Int - private val mLineLength: Int - private val mFocusedColor: Int - private val mUnfocusedColor: Int + private val mTextPaint: Paint = Paint() + private val mTextHeight: Int = 90 + private val mTopMargin: Int = 100 + private val mLeftMargin: Int = 100 + private val mVerticalGap: Int = 10 + private val mLineLength: Int = mTextHeight + mVerticalGap + private val mFocusedColor: Int = Color.RED + private val mUnfocusedColor: Int = Color.BLACK private val mUsernameLine: Line private val mPasswordLine: Line init { - - mAfm = context.getSystemService(AutofillManager::class.java) - - mTextPaint = Paint() - - mUnfocusedColor = Color.BLACK - mFocusedColor = Color.RED mTextPaint.style = Style.FILL - mTopMargin = 100 - mLeftMargin = 100 - mTextHeight = 90 - mVerticalGap = 10 - - mLineLength = mTextHeight + mVerticalGap mTextPaint.textSize = mTextHeight.toFloat() mUsernameLine = addLine("usernameField", context.getString(R.string.username_label), arrayOf(View.AUTOFILL_HINT_USERNAME), " ", true) @@ -168,13 +151,11 @@ class CustomVirtualView(context: Context, attrs: AttributeSet) : View(context, a val line = mLines[i] Log.d(TAG, "Line $i ranges from $lowerY to $upperY") if (lowerY <= y && y <= upperY) { - if (mFocusedLine != null) { - Log.d(TAG, "Removing focus from " + mFocusedLine!!) - mFocusedLine!!.changeFocus(false) - } + Log.d(TAG, "Removing focus from " + mFocusedLine) + mFocusedLine?.changeFocus(false) Log.d(TAG, "Changing focus to " + line) mFocusedLine = line - mFocusedLine!!.changeFocus(true) + mFocusedLine?.changeFocus(true) invalidate() break } @@ -221,13 +202,8 @@ class CustomVirtualView(context: Context, attrs: AttributeSet) : View(context, a // Boundaries of the text field, relative to the CustomView internal val bounds = Rect() - var labelItem: Item - var fieldTextItem: Item - - init { - this.labelItem = Item(this, ++nextId, null, View.AUTOFILL_TYPE_NONE, label, false, true) - this.fieldTextItem = Item(this, ++nextId, hints, View.AUTOFILL_TYPE_TEXT, text, true, sanitized) - } + var labelItem: Item = Item(this, ++nextId, null, View.AUTOFILL_TYPE_NONE, label, false, true) + var fieldTextItem: Item = Item(this, ++nextId, hints, View.AUTOFILL_TYPE_TEXT, text, true, sanitized) internal fun changeFocus(focused: Boolean) { fieldTextItem.focused = focused @@ -249,7 +225,7 @@ class CustomVirtualView(context: Context, attrs: AttributeSet) : View(context, a val absBounds = Rect(bounds.left + offset[0], bounds.top + offset[1], bounds.right + offset[0], bounds.bottom + offset[1]) - Log.v(TAG, "getAbsCoordinates() for " + fieldTextItem.id + ": bounds=" + bounds + Log.v(TAG, "absCoordinates for " + fieldTextItem.id + ": bounds=" + bounds + " offset: " + Arrays.toString(offset) + " absBounds: " + absBounds) return absBounds } diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.kt index 8a739606..ca146019 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.kt @@ -15,48 +15,36 @@ */ package com.example.android.autofillframework.app + import android.content.Context import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.view.View -import android.widget.Button -import android.widget.EditText import android.widget.Toast - import com.example.android.autofillframework.R +import kotlinx.android.synthetic.main.login_activity.* class LoginActivity : AppCompatActivity() { - - private var mUsernameEditText: EditText? = null - private var mPasswordEditText: EditText? = null - private var mLoginButton: Button? = null - private var mClearButton: Button? = null + val TAG = "LoginActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.login_activity) - - mLoginButton = findViewById(R.id.login) as Button - mClearButton = findViewById(R.id.clear) as Button - mUsernameEditText = findViewById(R.id.usernameField) as EditText - mPasswordEditText = findViewById(R.id.passwordField) as EditText - mLoginButton!!.setOnClickListener { login() } - mClearButton!!.setOnClickListener { resetFields() } + login.setOnClickListener { login() } + clear.setOnClickListener { resetFields() } } private fun resetFields() { - mUsernameEditText!!.setText("") - mPasswordEditText!!.setText("") + usernameField.setText("") + passwordField.setText("") } /** * Emulates a login action. */ private fun login() { - val username = mUsernameEditText!!.text.toString() - val password = mPasswordEditText!!.text.toString() + val username = usernameField.text.toString() + val password = passwordField.text.toString() val valid = isValidCredentials(username, password) if (valid) { val intent = WelcomeActivity.getStartActivityIntent(this@LoginActivity) @@ -71,8 +59,8 @@ class LoginActivity : AppCompatActivity() { * Dummy implementation for demo purposes. A real service should use secure mechanisms to * authenticate users. */ - fun isValidCredentials(username: String?, password: String?): Boolean { - return username != null && password != null && username == password + fun isValidCredentials(username: String, password: String): Boolean { + return username == password } companion object { diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.kt index b47daa18..1f7704ea 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.kt @@ -15,12 +15,8 @@ */ package com.example.android.autofillframework.app -import android.app.Activity -import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.view.View - import com.example.android.autofillframework.R /** diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.kt index 198ff9d5..078e8e21 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.kt @@ -15,41 +15,36 @@ */ package com.example.android.autofillframework.app -import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.view.View import android.widget.Toast - import com.example.android.autofillframework.R +import kotlinx.android.synthetic.main.virtual_login_activity.* class VirtualLoginActivity : AppCompatActivity() { - private var mCustomVirtualView: CustomVirtualView? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.virtual_login_activity) - mCustomVirtualView = findViewById(R.id.custom_view) as CustomVirtualView findViewById(R.id.login).setOnClickListener { login() } findViewById(R.id.clear).setOnClickListener { resetFields() } } private fun resetFields() { - mCustomVirtualView!!.resetFields() + custom_view.resetFields() } /** * Emulates a login action. */ private fun login() { - val username = mCustomVirtualView!!.usernameText.toString() - val password = mCustomVirtualView!!.passwordText.toString() + val username = custom_view.usernameText.toString() + val password = custom_view.passwordText.toString() val valid = isValidCredentials(username, password) if (valid) { val intent = WelcomeActivity.getStartActivityIntent(this@VirtualLoginActivity) diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.kt index 01475180..bdcfef2e 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.kt @@ -15,14 +15,13 @@ */ package com.example.android.autofillframework.app -import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle - +import android.support.v7.app.AppCompatActivity import com.example.android.autofillframework.R -class WelcomeActivity : Activity() { +class WelcomeActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) -- cgit v1.2.3