blob: 5eeb901d83082a0a8a54d25c56f5b91ae33ef88c [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.autofillframework.multidatasetservice.settings
import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CompoundButton
import android.widget.EditText
import android.widget.ImageView
import android.widget.Switch
import android.widget.TextView
import com.example.android.autofillframework.R
import com.example.android.autofillframework.multidatasetservice.datasource.SharedPrefsAutofillRepository
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_credentials_container
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_credentials_icon
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_credentials_label
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_datasets_container
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_datasets_label
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_datasets_switch
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_responses_container
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_responses_label
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_auth_responses_switch
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_clear_data_container
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_clear_data_icon
import kotlinx.android.synthetic.main.multidataset_service_settings_activity.settings_clear_data_label
class SettingsActivity : AppCompatActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.multidataset_service_settings_activity)
setupSettingsSwitch(settings_auth_responses_container,
settings_auth_responses_label,
settings_auth_responses_switch,
MyPreferences.isResponseAuth(this),
CompoundButton.OnCheckedChangeListener { compoundButton, b ->
MyPreferences.setResponseAuth(this@SettingsActivity, b)
})
setupSettingsSwitch(settings_auth_datasets_container,
settings_auth_datasets_label,
settings_auth_datasets_switch,
MyPreferences.isDatasetAuth(this),
CompoundButton.OnCheckedChangeListener { compoundButton, b ->
MyPreferences.setDatasetAuth(this@SettingsActivity, b)
})
setupSettingsButton(settings_clear_data_container,
settings_clear_data_label,
settings_clear_data_icon,
View.OnClickListener { buildClearDataDialog().show() })
setupSettingsButton(settings_auth_credentials_container,
settings_auth_credentials_label,
settings_auth_credentials_icon,
View.OnClickListener {
if (MyPreferences.getMainPassword(this@SettingsActivity) != null) {
buildCurrentCredentialsDialog().show()
} else {
buildNewCredentialsDialog().show()
}
})
}
private fun buildClearDataDialog(): AlertDialog {
return AlertDialog.Builder(this@SettingsActivity)
.setMessage(R.string.settings_clear_data_confirmation)
.setTitle(R.string.settings_clear_data_confirmation_title)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { dialog, which ->
SharedPrefsAutofillRepository.clear(this@SettingsActivity)
MyPreferences.clearCredentials(this@SettingsActivity)
dialog.dismiss()
}
.create()
}
private fun prepareCredentialsDialog(): AlertDialog.Builder {
return AlertDialog.Builder(this@SettingsActivity)
.setTitle(R.string.settings_auth_change_credentials_title)
.setNegativeButton(R.string.cancel, null)
}
private fun buildCurrentCredentialsDialog(): AlertDialog {
val currentPasswordField = LayoutInflater
.from(this@SettingsActivity)
.inflate(R.layout.multidataset_service_settings_authentication_dialog, null)
.findViewById<EditText>(R.id.main_password_field)
return prepareCredentialsDialog()
.setMessage(R.string.settings_auth_enter_current_password)
.setView(currentPasswordField)
.setPositiveButton(R.string.ok) { dialog, which ->
val password = currentPasswordField.text.toString()
if (MyPreferences.getMainPassword(this@SettingsActivity) == password) {
buildNewCredentialsDialog().show()
dialog.dismiss()
}
}
.create()
}
private fun buildNewCredentialsDialog(): AlertDialog {
val newPasswordField = LayoutInflater
.from(this@SettingsActivity)
.inflate(R.layout.multidataset_service_settings_authentication_dialog, null)
.findViewById<EditText>(R.id.main_password_field)
return prepareCredentialsDialog()
.setMessage(R.string.settings_auth_enter_new_password)
.setView(newPasswordField)
.setPositiveButton(R.string.ok) { dialog, which ->
val password = newPasswordField.text.toString()
MyPreferences.setMainPassword(this@SettingsActivity, password)
dialog.dismiss()
}
.create()
}
private fun setupSettingsSwitch(container: ViewGroup, switchLabelView: TextView, switchView: Switch, checked: Boolean,
checkedChangeListener: CompoundButton.OnCheckedChangeListener) {
val switchLabel = switchLabelView.text.toString()
with(switchView) {
contentDescription = switchLabel
isChecked = checked
setOnCheckedChangeListener(checkedChangeListener)
}
container.setOnClickListener { switchView.performClick() }
}
private fun setupSettingsButton(container: ViewGroup, buttonLabelView: TextView, imageView: ImageView,
onClickListener: View.OnClickListener) {
val buttonLabel = buttonLabelView.text.toString()
imageView.contentDescription = buttonLabel
container.setOnClickListener(onClickListener)
}
}