diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..5b6aca7
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,33 @@
+name: Test
+
+on:
+ pull_request:
+ branches:
+ - master
+ - development
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '17'
+ cache: 'gradle'
+
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v4
+
+ - name: Test
+ run: ./gradlew test
+
+ - name: Build
+ run: ./gradlew build
diff --git a/README.md b/README.md
index 06befd1..894e2bd 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@



+[](https://github.com/CodeDead/advanced-passgen-android/actions/workflows/test.yml)
[
](https://f-droid.org/packages/com.codedead.advancedpassgen/)
[
](https://play.google.com/store/apps/details?id=com.codedead.advancedpassgen)
diff --git a/app/src/main/java/com/codedead/advancedpassgen/domain/PasswordAdapter.java b/app/src/main/java/com/codedead/advancedpassgen/domain/PasswordAdapter.java
index e26cca0..0671cc2 100644
--- a/app/src/main/java/com/codedead/advancedpassgen/domain/PasswordAdapter.java
+++ b/app/src/main/java/com/codedead/advancedpassgen/domain/PasswordAdapter.java
@@ -9,6 +9,7 @@
import android.os.Build;
import android.os.PersistableBundle;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
@@ -26,6 +27,8 @@ public class PasswordAdapter extends RecyclerView.Adapter {
private final Context context;
private final List items;
+ private boolean displayStrength;
+ private PasswordViewHolder holder;
/**
* Initialize a new PasswordAdapter
@@ -35,6 +38,7 @@ public class PasswordAdapter extends RecyclerView.Adapter {
public PasswordAdapter(final Context context) {
this.context = context;
this.items = new ArrayList<>();
+ this.displayStrength = true;
}
/**
@@ -88,11 +92,18 @@ public PasswordViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, fi
*/
@Override
public void onBindViewHolder(@NonNull final PasswordViewHolder holder, final int position) {
+ this.holder = holder;
final PasswordItem item = items.get(position);
holder.getPasswordTextView().setText(item.password());
holder.getStrengthProgressBar().setProgress(item.strength());
+ if (displayStrength) {
+ holder.getStrengthProgressBar().setVisibility(View.VISIBLE);
+ } else {
+ holder.getStrengthProgressBar().setVisibility(View.GONE);
+ }
+
if (item.strength() == 100) {
DrawableCompat.setTint(holder.getStrengthProgressBar().getProgressDrawable(), Color.GREEN);
} else if (item.strength() <= 35) {
@@ -134,4 +145,21 @@ public void onBindViewHolder(@NonNull final PasswordViewHolder holder, final int
public int getItemCount() {
return items.size();
}
+
+ /**
+ * Set the display strength setting
+ *
+ * @param displayStrength The display strength setting
+ */
+ public void setDisplayStrength(final boolean displayStrength) {
+ this.displayStrength = displayStrength;
+
+ if (holder != null) {
+ if (displayStrength) {
+ holder.getStrengthProgressBar().setVisibility(View.VISIBLE);
+ } else {
+ holder.getStrengthProgressBar().setVisibility(View.GONE);
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/codedead/advancedpassgen/ui/home/HomeFragment.java b/app/src/main/java/com/codedead/advancedpassgen/ui/home/HomeFragment.java
index d9fdbd5..4583ea2 100644
--- a/app/src/main/java/com/codedead/advancedpassgen/ui/home/HomeFragment.java
+++ b/app/src/main/java/com/codedead/advancedpassgen/ui/home/HomeFragment.java
@@ -45,13 +45,16 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
final ViewGroup container,
final Bundle savedInstanceState) {
binding = FragmentHomeBinding.inflate(inflater, container, false);
- View root = binding.getRoot();
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
+
+ final View root = binding.getRoot();
binding.swipeRefresh.setOnRefreshListener(this);
binding.textHome.setOnRefreshListener(this);
final RecyclerView recyclerView = binding.recyclerView;
adapter = new PasswordAdapter(requireContext());
+ adapter.setDisplayStrength(sharedPreferences.getBoolean("showPasswordStrength", true));
recyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(adapter);
@@ -82,8 +85,6 @@ public View onCreateView(@NonNull final LayoutInflater inflater,
});
binding.fabRefresh.setOnClickListener(view -> refreshPasswords());
-
- sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
customCharacterSet = sharedPreferences.getString("customCharacterSet", "");
minimumLength = Integer.parseInt(sharedPreferences.getString("minimumLength", "8"));
maximumLength = Integer.parseInt(sharedPreferences.getString("maximumLength", "30"));
@@ -174,6 +175,7 @@ public void onResume() {
specialCharacters = sharedPreferences.getBoolean("specialCharacters", true);
numbers = sharedPreferences.getBoolean("numbers", true);
brackets = sharedPreferences.getBoolean("brackets", false);
+ adapter.setDisplayStrength(sharedPreferences.getBoolean("showPasswordStrength", true));
if (!sharedPreferences.getBoolean("automaticThreading", true)) {
poolSize = Integer.parseInt(sharedPreferences.getString("poolSize", "1"));
}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 8e32076..2a78631 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -57,4 +57,6 @@
Gérer automatiquement les threads pour la génération de mot de passe
Threads
Le nombre de threads à utiliser pour la génération de mot de passe
+ Afficher la force du mot de passe
+ Afficher la force du mot de passe généré dans la liste
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b2ad60a..a9d4c60 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -57,4 +57,6 @@
Automatisch beheer van threading voor wachtwoordgeneratie
Threads
Het aantal threads dat moet worden gebruikt voor wachtwoordgeneratie
+ Toon wachtwoordsterkte
+ Toon de sterkte van het gegenereerde wachtwoord in de lijst
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9edf9b8..9104dd5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -56,4 +56,6 @@
Automatically manage threading for password generation
Threads
The amount of threads to use for password generation
+ Display password strength
+ Display the strength of the generated password in the list
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 94f2b28..ac6e2f3 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -13,6 +13,12 @@
app:summary="@string/applanguage_summary"
app:title="@string/application_languages" />
+
+