Add plurals support for conditions

This commit is contained in:
Marvin W 2017-02-26 16:41:34 +01:00
parent cddf2972bc
commit 7d20dc982c
No known key found for this signature in database
GPG Key ID: 072E9235DB996F2A
1 changed files with 63 additions and 2 deletions

View File

@ -19,6 +19,7 @@ package org.microg.tools.ui;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.PluralsRes;
import android.support.annotation.StringRes; import android.support.annotation.StringRes;
import android.support.v4.content.res.ResourcesCompat; import android.support.v4.content.res.ResourcesCompat;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -35,19 +36,27 @@ public class Condition {
@StringRes @StringRes
private final int titleRes; private final int titleRes;
@PluralsRes
private final int titlePluralsRes;
private final CharSequence title; private final CharSequence title;
@StringRes @StringRes
private final int summaryRes; private final int summaryRes;
@PluralsRes
private final int summaryPluralsRes;
private final CharSequence summary; private final CharSequence summary;
@StringRes @StringRes
private final int firstActionTextRes; private final int firstActionTextRes;
@PluralsRes
private final int firstActionPluralsRes;
private final CharSequence firstActionText; private final CharSequence firstActionText;
private final View.OnClickListener firstActionListener; private final View.OnClickListener firstActionListener;
@StringRes @StringRes
private final int secondActionTextRes; private final int secondActionTextRes;
@PluralsRes
private final int secondActionPluralsRes;
private final CharSequence secondActionText; private final CharSequence secondActionText;
private final View.OnClickListener secondActionListener; private final View.OnClickListener secondActionListener;
@ -55,6 +64,7 @@ public class Condition {
private boolean evaluated = false; private boolean evaluated = false;
private boolean evaluating = false; private boolean evaluating = false;
private int evaluatedPlurals = -1;
private boolean active; private boolean active;
Condition(Builder builder) { Condition(Builder builder) {
@ -71,6 +81,10 @@ public class Condition {
secondActionTextRes = builder.secondActionTextRes; secondActionTextRes = builder.secondActionTextRes;
titleRes = builder.titleRes; titleRes = builder.titleRes;
evaluation = builder.evaluation; evaluation = builder.evaluation;
titlePluralsRes = builder.titlePluralsRes;
summaryPluralsRes = builder.summaryPluralsRes;
firstActionPluralsRes = builder.firstActionPluralsRes;
secondActionPluralsRes = builder.secondActionPluralsRes;
} }
View createView(final Context context, ViewGroup container) { View createView(final Context context, ViewGroup container) {
@ -122,6 +136,9 @@ public class Condition {
if (titleRes != 0) { if (titleRes != 0) {
return context.getString(titleRes); return context.getString(titleRes);
} }
if (titlePluralsRes != 0) {
return context.getResources().getQuantityString(titlePluralsRes, evaluatedPlurals);
}
return title; return title;
} }
@ -129,6 +146,9 @@ public class Condition {
if (summaryRes != 0) { if (summaryRes != 0) {
return context.getString(summaryRes); return context.getString(summaryRes);
} }
if (summaryPluralsRes != 0) {
return context.getResources().getQuantityString(summaryPluralsRes, evaluatedPlurals);
}
return summary; return summary;
} }
@ -140,6 +160,9 @@ public class Condition {
if (firstActionTextRes != 0) { if (firstActionTextRes != 0) {
return context.getString(firstActionTextRes); return context.getString(firstActionTextRes);
} }
if (firstActionPluralsRes != 0) {
return context.getResources().getQuantityString(firstActionPluralsRes, evaluatedPlurals);
}
return firstActionText; return firstActionText;
} }
@ -151,6 +174,9 @@ public class Condition {
if (secondActionTextRes != 0) { if (secondActionTextRes != 0) {
return context.getString(secondActionTextRes); return context.getString(secondActionTextRes);
} }
if (secondActionPluralsRes != 0) {
return context.getResources().getQuantityString(secondActionPluralsRes, evaluatedPlurals);
}
return secondActionText; return secondActionText;
} }
@ -168,6 +194,7 @@ public class Condition {
public synchronized void evaluate(Context context) { public synchronized void evaluate(Context context) {
active = evaluation == null || evaluation.isActive(context); active = evaluation == null || evaluation.isActive(context);
evaluatedPlurals = evaluation.getPluralsCount();
evaluated = true; evaluated = true;
evaluating = false; evaluating = false;
} }
@ -181,8 +208,12 @@ public class Condition {
this.evaluated = false; this.evaluated = false;
} }
public interface Evaluation { public static abstract class Evaluation {
boolean isActive(Context context); public abstract boolean isActive(Context context);
public int getPluralsCount() {
return 1;
}
} }
public static class Builder { public static class Builder {
@ -192,16 +223,24 @@ public class Condition {
private Drawable icon; private Drawable icon;
@StringRes @StringRes
private int titleRes; private int titleRes;
@PluralsRes
private int titlePluralsRes;
private CharSequence title; private CharSequence title;
@StringRes @StringRes
private int summaryRes; private int summaryRes;
@PluralsRes
private int summaryPluralsRes;
private CharSequence summary; private CharSequence summary;
@StringRes @StringRes
private int firstActionTextRes; private int firstActionTextRes;
@PluralsRes
private int firstActionPluralsRes;
private CharSequence firstActionText; private CharSequence firstActionText;
private View.OnClickListener firstActionListener; private View.OnClickListener firstActionListener;
@StringRes @StringRes
private int secondActionTextRes; private int secondActionTextRes;
@PluralsRes
private int secondActionPluralsRes;
private CharSequence secondActionText; private CharSequence secondActionText;
private View.OnClickListener secondActionListener; private View.OnClickListener secondActionListener;
private Evaluation evaluation; private Evaluation evaluation;
@ -230,6 +269,11 @@ public class Condition {
return this; return this;
} }
public Builder titlePlurals(@PluralsRes int val) {
titlePluralsRes = val;
return this;
}
public Builder summary(CharSequence val) { public Builder summary(CharSequence val) {
summary = val; summary = val;
return this; return this;
@ -240,6 +284,11 @@ public class Condition {
return this; return this;
} }
public Builder summaryPlurals(@PluralsRes int val) {
summaryPluralsRes = val;
return this;
}
public Builder firstAction(CharSequence text, View.OnClickListener listener) { public Builder firstAction(CharSequence text, View.OnClickListener listener) {
firstActionText = text; firstActionText = text;
firstActionListener = listener; firstActionListener = listener;
@ -252,6 +301,12 @@ public class Condition {
return this; return this;
} }
public Builder firstActionPlurals(@PluralsRes int val, View.OnClickListener listener) {
firstActionPluralsRes = val;
firstActionListener = listener;
return this;
}
public Builder secondAction(CharSequence text, View.OnClickListener listener) { public Builder secondAction(CharSequence text, View.OnClickListener listener) {
secondActionText = text; secondActionText = text;
secondActionListener = listener; secondActionListener = listener;
@ -264,6 +319,12 @@ public class Condition {
return this; return this;
} }
public Builder secondActionPlurals(@PluralsRes int val, View.OnClickListener listener) {
secondActionPluralsRes = val;
secondActionListener = listener;
return this;
}
public Builder evaluation(Evaluation evaluation) { public Builder evaluation(Evaluation evaluation) {
this.evaluation = evaluation; this.evaluation = evaluation;
return this; return this;