diff options
| author | Harsh Shandilya <msfjarvis@gmail.com> | 2020-05-10 19:21:39 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-10 19:21:39 +0530 |
| commit | 041cf00510a75042223d1857660fc7f1dff958ef (patch) | |
| tree | 1b56e67e2b71afe23ac51b680b62ad778272f162 /app/src/main/java/com/zeapo/pwdstore/autofill | |
| parent | 94dc92f8d70870b57a7f8c4fe8adef152c1211ce (diff) | |
| download | HardenedPass-041cf00510a75042223d1857660fc7f1dff958ef.tar.gz HardenedPass-041cf00510a75042223d1857660fc7f1dff958ef.zip | |
Treewide codestyle cleanup (#765)
- Updated gitignore and checked in the IDE's codestyle config
- Removed spotless as the underlying ktlint backend has failed to resolve the super frustrating import order bug[1] in nearly a year
- Reformat the entire codebase based on the previously committed code style configuration.
1: https://github.com/pinterest/ktlint/issues/527
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/autofill')
10 files changed, 62 insertions, 51 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.kt index 1f69413c..2410d53e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.kt @@ -60,11 +60,11 @@ class AutofillFragment : DialogFragment() { } else { val browserIntent = Intent("android.intent.action.VIEW", Uri.parse("http://")) val resolveInfo = requireContext().packageManager - .resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY) + .resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY) iconPackageName = resolveInfo?.activityInfo?.packageName builder.setTitle("Website") (view.findViewById<View>(R.id.webURL) as EditText).setText(packageName - ?: "com.android.browser") + ?: "com.android.browser") } try { if (iconPackageName != null) { @@ -86,9 +86,9 @@ class AutofillFragment : DialogFragment() { (view.findViewById<View>(R.id.matched) as ListView).adapter = adapter // delete items by clicking them (view.findViewById<View>(R.id.matched) as ListView).onItemClickListener = - AdapterView.OnItemClickListener { _, _, position, _ -> - adapter!!.remove(adapter!!.getItem(position)) - } + AdapterView.OnItemClickListener { _, _, position, _ -> + adapter!!.remove(adapter!!.getItem(position)) + } // set the existing preference, if any val prefs: SharedPreferences = if (!isWeb) { @@ -122,7 +122,7 @@ class AutofillFragment : DialogFragment() { if (isWeb) { builder.setNeutralButton(R.string.autofill_apps_delete) { _, _ -> if (callingActivity.recyclerAdapter != null && - packageName != null && packageName != "") { + packageName != null && packageName != "") { prefs.edit { remove(packageName) callingActivity.recyclerAdapter?.removeWebsite(packageName) diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.kt index 3cc07ae0..3553d431 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.kt @@ -19,9 +19,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.floatingactionbutton.FloatingActionButton import com.zeapo.pwdstore.R +import me.zhanghai.android.fastscroll.FastScrollerBuilder import java.lang.ref.WeakReference import java.util.ArrayList -import me.zhanghai.android.fastscroll.FastScrollerBuilder class AutofillPreferenceActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.kt index 2b031dcf..811ff7af 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.kt @@ -18,9 +18,9 @@ import androidx.recyclerview.widget.SortedList import androidx.recyclerview.widget.SortedListAdapterCallback import com.zeapo.pwdstore.R import com.zeapo.pwdstore.utils.splitLines +import me.zhanghai.android.fastscroll.PopupTextProvider import java.util.ArrayList import java.util.Locale -import me.zhanghai.android.fastscroll.PopupTextProvider internal class AutofillRecyclerAdapter( allApps: List<AppInfo>, @@ -63,7 +63,7 @@ internal class AutofillRecyclerAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val v = LayoutInflater.from(parent.context) - .inflate(R.layout.autofill_row_layout, parent, false) + .inflate(R.layout.autofill_row_layout, parent, false) return ViewHolder(v) } @@ -96,7 +96,7 @@ internal class AutofillRecyclerAdapter( holder.secondary.append(" " + preference!!.splitLines()[0]) if (preference.trim { it <= ' ' }.splitLines().size - 1 > 0) { holder.secondary.append(" and " + - (preference.trim { it <= ' ' }.splitLines().size - 1) + " more") + (preference.trim { it <= ' ' }.splitLines().size - 1) + " more") } } } diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.kt index 7a2cc521..0e8809e7 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.kt @@ -32,15 +32,6 @@ import com.zeapo.pwdstore.PasswordEntry import com.zeapo.pwdstore.R import com.zeapo.pwdstore.utils.PasswordRepository import com.zeapo.pwdstore.utils.splitLines -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.IOException -import java.io.InputStream -import java.io.UnsupportedEncodingException -import java.net.MalformedURLException -import java.net.URL -import java.util.ArrayList -import java.util.Locale import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel @@ -51,6 +42,15 @@ import me.msfjarvis.openpgpktx.util.OpenPgpServiceConnection import org.apache.commons.io.FileUtils import org.openintents.openpgp.IOpenPgpService2 import org.openintents.openpgp.OpenPgpError +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.io.UnsupportedEncodingException +import java.net.MalformedURLException +import java.net.URL +import java.util.ArrayList +import java.util.Locale class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope(Dispatchers.Default) { private var serviceConnection: OpenPgpServiceConnection? = null @@ -103,16 +103,16 @@ class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope // if returning to the source app from a successful AutofillActivity if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && - event.packageName != null && event.packageName == packageName && - resultData != null) { + event.packageName != null && event.packageName == packageName && + resultData != null) { bindDecryptAndVerify() } // look for webView and trigger accessibility events if window changes // or if page changes in chrome if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED || (event.eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED && - event.packageName != null && - (event.packageName == "com.android.chrome" || event.packageName == "com.android.browser"))) { + event.packageName != null && + (event.packageName == "com.android.chrome" || event.packageName == "com.android.browser"))) { // there is a chance for getRootInActiveWindow() to return null at any time. save it. try { val root = rootInActiveWindow @@ -145,8 +145,8 @@ class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope // nothing to do if field is keychain app or system ui if (event.eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED || - event.packageName != null && event.packageName == "org.sufficientlysecure.keychain" || - event.packageName != null && event.packageName == "com.android.systemui") { + event.packageName != null && event.packageName == "org.sufficientlysecure.keychain" || + event.packageName != null && event.packageName == "com.android.systemui") { dismissDialog() return } @@ -182,7 +182,7 @@ class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope // need to request permission before attempting to draw dialog if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:" + getPackageName())) + Uri.parse("package:" + getPackageName())) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) startActivity(intent) return @@ -283,7 +283,7 @@ class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope val value = prefs.getString(key, null) val keyLowerCase = key.toLowerCase(Locale.ROOT) if (value != null && value != "" && - (webViewUrlLowerCase.contains(keyLowerCase) || keyLowerCase.contains(webViewUrlLowerCase))) { + (webViewUrlLowerCase.contains(keyLowerCase) || keyLowerCase.contains(webViewUrlLowerCase))) { preference = value settingsURL = key } @@ -419,7 +419,7 @@ class AutofillService : AccessibilityService(), CoroutineScope by CoroutineScope for (i in items.indices) { if (autofillFullPath) { itemNames[i] = items[i].path.replace(".gpg", "") - .replace("$passwordDirectory/", "") + .replace("$passwordDirectory/", "") } else { itemNames[i] = items[i].name.replace(".gpg", "") } diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillMatcher.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillMatcher.kt index d300090c..d64e80a4 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillMatcher.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillMatcher.kt @@ -31,6 +31,7 @@ private fun Context.matchPreferences(formOrigin: FormOrigin): SharedPreferences class AutofillPublisherChangedException(val formOrigin: FormOrigin) : Exception("The publisher of '${formOrigin.identifier}' changed since an entry was first matched with this app") { + init { require(formOrigin is FormOrigin.App) } @@ -40,6 +41,7 @@ class AutofillPublisherChangedException(val formOrigin: FormOrigin) : * Manages "matches", i.e., associations between apps or websites and Password Store entries. */ class AutofillMatcher { + companion object { private const val MAX_NUM_MATCHES = 10 @@ -172,10 +174,10 @@ class AutofillMatcher { .minus(deletePathList) .minus(oldNewPathMap.values) .map { match -> - val newPath = oldNewPathMap[match] ?: return@map match - d { "Updating match for $key: $match --> $newPath" } - newPath - }.toSet() + val newPath = oldNewPathMap[match] ?: return@map match + d { "Updating match for $key: $match --> $newPath" } + newPath + }.toSet() if (newMatches != oldMatches) prefs.edit { putStringSet(key, newMatches) } } diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillScenario.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillScenario.kt index 0536c507..f1514851 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillScenario.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillScenario.kt @@ -130,6 +130,7 @@ data class ClassifiedAutofillScenario<T : Any>( val currentPassword: List<T>, val newPassword: List<T> ) : AutofillScenario<T>() { + override val allPasswordFields get() = currentPassword + newPassword override val passwordFieldsToFillOnMatch @@ -148,6 +149,7 @@ data class GenericAutofillScenario<T : Any>( override val fillUsername: Boolean, val genericPassword: List<T> ) : AutofillScenario<T>() { + override val allPasswordFields get() = genericPassword override val passwordFieldsToFillOnMatch diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillStrategyDsl.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillStrategyDsl.kt index eea5c337..3b648234 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillStrategyDsl.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/AutofillStrategyDsl.kt @@ -14,10 +14,12 @@ annotation class AutofillDsl @RequiresApi(Build.VERSION_CODES.O) interface FieldMatcher { + fun match(fields: List<FormField>, alreadyMatched: List<FormField>): List<FormField>? @AutofillDsl class Builder { + private var takeSingle: (FormField.(List<FormField>) -> Boolean)? = null private val tieBreakersSingle: MutableList<FormField.(List<FormField>) -> Boolean> = mutableListOf() @@ -68,6 +70,7 @@ class SingleFieldMatcher( @AutofillDsl class Builder { + private var takeSingle: (FormField.(List<FormField>) -> Boolean)? = null private val tieBreakersSingle: MutableList<FormField.(List<FormField>) -> Boolean> = mutableListOf() @@ -169,6 +172,7 @@ class AutofillRule private constructor( private val applyInSingleOriginMode: Boolean, private val applyOnManualRequestOnly: Boolean ) { + companion object { private var ruleId = 1 } @@ -304,6 +308,7 @@ class AutofillStrategy private constructor(private val rules: List<AutofillRule> @AutofillDsl class Builder { + private val rules: MutableList<AutofillRule> = mutableListOf() fun rule( diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt index df8b037a..210fefab 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/Form.kt @@ -31,6 +31,7 @@ import java.io.File * A unique identifier for either an Android app (package name) or a website (origin minus port). */ sealed class FormOrigin(open val identifier: String) { + data class Web(override val identifier: String) : FormOrigin(identifier) data class App(override val identifier: String) : FormOrigin(identifier) @@ -198,6 +199,7 @@ class FillableForm private constructor( private val ignoredIds: List<AutofillId>, private val saveFlags: Int? ) { + companion object { fun makeFillInDataset( context: Context, diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillDecryptActivity.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillDecryptActivity.kt index ba9431d8..c57ffdcc 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillDecryptActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillDecryptActivity.kt @@ -22,16 +22,6 @@ import com.zeapo.pwdstore.autofill.oreo.AutofillPreferences import com.zeapo.pwdstore.autofill.oreo.Credentials import com.zeapo.pwdstore.autofill.oreo.DirectoryStructure import com.zeapo.pwdstore.autofill.oreo.FillableForm -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.FileNotFoundException -import java.io.InputStream -import java.io.OutputStream -import java.io.UnsupportedEncodingException -import kotlin.coroutines.Continuation -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException -import kotlin.coroutines.suspendCoroutine import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -42,6 +32,16 @@ import me.msfjarvis.openpgpktx.util.OpenPgpApi import me.msfjarvis.openpgpktx.util.OpenPgpServiceConnection import org.openintents.openpgp.IOpenPgpService2 import org.openintents.openpgp.OpenPgpError +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileNotFoundException +import java.io.InputStream +import java.io.OutputStream +import java.io.UnsupportedEncodingException +import kotlin.coroutines.Continuation +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException +import kotlin.coroutines.suspendCoroutine @RequiresApi(Build.VERSION_CODES.O) class AutofillDecryptActivity : Activity(), CoroutineScope { @@ -214,9 +214,9 @@ class AutofillDecryptActivity : Activity(), CoroutineScope { if (error != null) { withContext(Dispatchers.Main) { Toast.makeText( - applicationContext, - "Error from OpenKeyChain: ${error.message}", - Toast.LENGTH_LONG + applicationContext, + "Error from OpenKeyChain: ${error.message}", + Toast.LENGTH_LONG ).show() } e { "OpenPgpApi ACTION_DECRYPT_VERIFY failed (${error.errorId}): ${error.message}" } diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillPublisherChangedActivity.kt b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillPublisherChangedActivity.kt index cd954667..5ea3e66b 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillPublisherChangedActivity.kt +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/oreo/ui/AutofillPublisherChangedActivity.kt @@ -78,19 +78,19 @@ class AutofillPublisherChangedActivity : AppCompatActivity() { try { with(binding) { val packageInfo = - packageManager.getPackageInfo(appPackage, PackageManager.GET_META_DATA) + packageManager.getPackageInfo(appPackage, PackageManager.GET_META_DATA) val installTime = DateUtils.getRelativeTimeSpanString(packageInfo.firstInstallTime) warningAppInstallDate.text = - getString(R.string.oreo_autofill_warning_publisher_install_time, installTime) + getString(R.string.oreo_autofill_warning_publisher_install_time, installTime) val appInfo = - packageManager.getApplicationInfo(appPackage, PackageManager.GET_META_DATA) + packageManager.getApplicationInfo(appPackage, PackageManager.GET_META_DATA) warningAppName.text = "“${packageManager.getApplicationLabel(appInfo)}”" val currentHash = computeCertificatesHash(this@AutofillPublisherChangedActivity, appPackage) warningAppAdvancedInfo.text = getString( - R.string.oreo_autofill_warning_publisher_advanced_info_template, - appPackage, - currentHash + R.string.oreo_autofill_warning_publisher_advanced_info_template, + appPackage, + currentHash ) } } catch (exception: Exception) { |
