diff --git a/CHANGELOG.md b/CHANGELOG.md index d9d64f84..b0b1ee46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ### Changed - Reduce Autofill false positives on username fields by removing "name" from list of heuristic terms +- Reduced app size ## [1.8.1] - 2020-05-24 diff --git a/app/build.gradle b/app/build.gradle index 6615ff99..b4017ed1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,7 +44,7 @@ android { buildTypes { release { minifyEnabled = true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + proguardFiles 'proguard-android-optimize.txt', 'proguard-rules.pro' buildConfigField 'boolean', 'ENABLE_DEBUG_FEATURES', isSnapshot() ? 'true' : 'false' } debug { diff --git a/app/proguard-android-optimize.txt b/app/proguard-android-optimize.txt new file mode 100644 index 00000000..e2095ad6 --- /dev/null +++ b/app/proguard-android-optimize.txt @@ -0,0 +1,36 @@ +-allowaccessmodification +-dontpreverify +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-verbose + +-keepattributes *Annotation* + +-keepclasseswithmembernames class * { + native ; +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keepclassmembers class * implements android.os.Parcelable { + public static final ** CREATOR; +} + +-keep class androidx.annotation.Keep + +-keep @androidx.annotation.Keep class * {*;} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep ; +} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep ; +} + +-keepclasseswithmembers class * { + @androidx.annotation.Keep (...); +} diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt index 52419852..2b3c1c59 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.kt @@ -22,7 +22,6 @@ import android.view.KeyEvent import android.view.Menu import android.view.MenuItem import android.view.MenuItem.OnActionExpandListener -import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView @@ -65,6 +64,9 @@ import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirect import com.zeapo.pwdstore.utils.PasswordRepository.Companion.initialize import com.zeapo.pwdstore.utils.PasswordRepository.Companion.isInitialized import com.zeapo.pwdstore.utils.PasswordRepository.PasswordSortOrder.Companion.getSortOrder +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.clone_from_server_button +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.local_directory_button +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.settings_button import org.apache.commons.io.FileUtils import org.apache.commons.io.FilenameUtils import org.eclipse.jgit.api.Git @@ -126,6 +128,10 @@ class PasswordStore : AppCompatActivity() { super.onCreate(savedInstance) setContentView(R.layout.activity_pwdstore) + settings_button.setOnClickListener { startActivity(Intent(this, UserPreference::class.java)) } + local_directory_button.setOnClickListener { initRepository(NEW_REPO_BUTTON) } + clone_from_server_button.setOnClickListener { initRepository(CLONE_REPO_BUTTON) } + // If user is eligible for Oreo autofill, prompt them to switch. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !settings.getBoolean(PREFERENCE_SEEN_AUTOFILL_ONBOARDING, false)) { @@ -329,24 +335,6 @@ class PasswordStore : AppCompatActivity() { searchItem.collapseActionView() } - fun openSettings(@Suppress("UNUSED_PARAMETER") view: View?) { - val intent: Intent - try { - intent = Intent(this, UserPreference::class.java) - startActivity(intent) - } catch (e: Exception) { - e.printStackTrace() - } - } - - fun cloneExistingRepository(@Suppress("UNUSED_PARAMETER") view: View?) { - initRepository(CLONE_REPO_BUTTON) - } - - fun createNewRepository(@Suppress("UNUSED_PARAMETER") view: View?) { - initRepository(NEW_REPO_BUTTON) - } - private fun createRepository() { if (!isInitialized) { initialize(this) @@ -780,7 +768,7 @@ class PasswordStore : AppCompatActivity() { } } - private fun initRepository(operation: Int) { + fun initRepository(operation: Int) { closeRepository() MaterialAlertDialogBuilder(this) .setTitle(resources.getString(R.string.location_dialog_title)) @@ -843,18 +831,14 @@ class PasswordStore : AppCompatActivity() { get() = getSortOrder(settings) companion object { - const val REQUEST_CODE_SIGN = 9910 const val REQUEST_CODE_ENCRYPT = 9911 - const val REQUEST_CODE_SIGN_AND_ENCRYPT = 9912 const val REQUEST_CODE_DECRYPT_AND_VERIFY = 9913 - const val REQUEST_CODE_GET_KEY = 9914 - const val REQUEST_CODE_GET_KEY_IDS = 9915 const val REQUEST_CODE_EDIT = 9916 const val REQUEST_CODE_SELECT_FOLDER = 9917 const val REQUEST_ARG_PATH = "PATH" private val TAG = PasswordStore::class.java.name - private const val CLONE_REPO_BUTTON = 401 - private const val NEW_REPO_BUTTON = 402 + const val CLONE_REPO_BUTTON = 401 + const val NEW_REPO_BUTTON = 402 private const val HOME = 403 private const val REQUEST_EXTERNAL_STORAGE = 50 private fun isPrintable(c: Char): Boolean { diff --git a/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.kt b/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.kt index 5964b461..511e978e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.kt +++ b/app/src/main/java/com/zeapo/pwdstore/ToCloneOrNot.kt @@ -4,11 +4,15 @@ */ package com.zeapo.pwdstore +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.clone_from_server_button +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.local_directory_button +import kotlinx.android.synthetic.main.fragment_to_clone_or_not.settings_button class ToCloneOrNot : Fragment() { @@ -20,4 +24,11 @@ class ToCloneOrNot : Fragment() { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_to_clone_or_not, container, false) } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + settings_button.setOnClickListener { startActivity(Intent(requireContext(), UserPreference::class.java)) } + local_directory_button.setOnClickListener { (requireActivity() as PasswordStore).initRepository(PasswordStore.NEW_REPO_BUTTON) } + clone_from_server_button.setOnClickListener { (requireActivity() as PasswordStore).initRepository(PasswordStore.CLONE_REPO_BUTTON) } + } } diff --git a/app/src/main/res/layout/fragment_to_clone_or_not.xml b/app/src/main/res/layout/fragment_to_clone_or_not.xml index 716b0c8f..2ee73679 100644 --- a/app/src/main/res/layout/fragment_to_clone_or_not.xml +++ b/app/src/main/res/layout/fragment_to_clone_or_not.xml @@ -37,24 +37,23 @@ app:layout_constraintTop_toBottomOf="@+id/app_icon" /> + app:layout_constraintTop_toBottomOf="@id/local_directory_button" />