mirror of https://github.com/M66B/FairEmail.git
Added standard answer
This commit is contained in:
parent
edc7059570
commit
b6d4b10211
File diff suppressed because it is too large
Load Diff
|
@ -62,7 +62,7 @@ import io.requery.android.database.sqlite.SQLiteDatabase;
|
|||
// https://developer.android.com/topic/libraries/architecture/room.html
|
||||
|
||||
@Database(
|
||||
version = 174,
|
||||
version = 175,
|
||||
entities = {
|
||||
EntityIdentity.class,
|
||||
EntityAccount.class,
|
||||
|
@ -1715,6 +1715,13 @@ public abstract class DB extends RoomDatabase {
|
|||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `answer` ADD COLUMN `group` TEXT");
|
||||
}
|
||||
})
|
||||
.addMigrations(new Migration(174, 175) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase db) {
|
||||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `answer` ADD COLUMN `standard` INTEGER NOT NULL DEFAULT 0");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,10 @@ public interface DaoAnswer {
|
|||
@Query("SELECT * FROM answer WHERE id = :id")
|
||||
EntityAnswer getAnswer(long id);
|
||||
|
||||
@Query("SELECT * FROM answer" +
|
||||
" WHERE standard AND NOT hide")
|
||||
EntityAnswer getStandardAnswer();
|
||||
|
||||
@Query("SELECT * FROM answer" +
|
||||
" ORDER BY -favorite, name COLLATE NOCASE")
|
||||
LiveData<List<EntityAnswer>> liveAnswers();
|
||||
|
@ -60,6 +64,9 @@ public interface DaoAnswer {
|
|||
@Query("UPDATE answer SET hide = :hide WHERE id = :id")
|
||||
int setAnswerHidden(long id, boolean hide);
|
||||
|
||||
@Query("UPDATE answer SET standard = 0")
|
||||
void resetStandard();
|
||||
|
||||
@Query("DELETE FROM answer WHERE id = :id")
|
||||
void deleteAnswer(long id);
|
||||
}
|
||||
|
|
|
@ -50,6 +50,8 @@ public class EntityAnswer implements Serializable {
|
|||
public String name;
|
||||
public String group;
|
||||
@NonNull
|
||||
public Boolean standard;
|
||||
@NonNull
|
||||
public Boolean favorite;
|
||||
@NonNull
|
||||
public Boolean hide;
|
||||
|
@ -105,6 +107,7 @@ public class EntityAnswer implements Serializable {
|
|||
json.put("id", id);
|
||||
json.put("name", name);
|
||||
json.put("group", group);
|
||||
json.put("standard", standard);
|
||||
json.put("favorite", favorite);
|
||||
json.put("hide", hide);
|
||||
json.put("text", text);
|
||||
|
@ -116,6 +119,7 @@ public class EntityAnswer implements Serializable {
|
|||
answer.id = json.getLong("id");
|
||||
answer.name = json.getString("name");
|
||||
answer.group = json.optString("group");
|
||||
answer.standard = json.optBoolean("standard");
|
||||
answer.favorite = json.optBoolean("favorite");
|
||||
answer.hide = json.optBoolean("hide");
|
||||
answer.text = json.getString("text");
|
||||
|
@ -128,6 +132,7 @@ public class EntityAnswer implements Serializable {
|
|||
EntityAnswer other = (EntityAnswer) obj;
|
||||
return (this.name.equals(other.name) &&
|
||||
Objects.equals(this.group, other.group) &&
|
||||
this.standard.equals(other.standard) &&
|
||||
this.favorite.equals(other.favorite) &&
|
||||
this.hide.equals(other.hide) &&
|
||||
this.text.equals(other.text)
|
||||
|
|
|
@ -57,6 +57,7 @@ public class FragmentAnswer extends FragmentBase {
|
|||
private ViewGroup view;
|
||||
private EditText etName;
|
||||
private EditText etGroup;
|
||||
private CheckBox cbStandard;
|
||||
private CheckBox cbFavorite;
|
||||
private CheckBox cbHide;
|
||||
private EditTextCompose etText;
|
||||
|
@ -96,6 +97,7 @@ public class FragmentAnswer extends FragmentBase {
|
|||
// Get controls
|
||||
etName = view.findViewById(R.id.etName);
|
||||
etGroup = view.findViewById(R.id.etGroup);
|
||||
cbStandard = view.findViewById(R.id.cbStandard);
|
||||
cbFavorite = view.findViewById(R.id.cbFavorite);
|
||||
cbHide = view.findViewById(R.id.cbHide);
|
||||
etText = view.findViewById(R.id.etText);
|
||||
|
@ -177,6 +179,7 @@ public class FragmentAnswer extends FragmentBase {
|
|||
if (savedInstanceState == null) {
|
||||
etName.setText(answer == null ? null : answer.name);
|
||||
etGroup.setText(answer == null ? null : answer.group);
|
||||
cbStandard.setChecked(answer == null ? false : answer.standard);
|
||||
cbFavorite.setChecked(answer == null ? false : answer.favorite);
|
||||
cbHide.setChecked(answer == null ? false : answer.hide);
|
||||
if (answer == null)
|
||||
|
@ -250,6 +253,7 @@ public class FragmentAnswer extends FragmentBase {
|
|||
args.putLong("id", id);
|
||||
args.putString("name", etName.getText().toString().trim());
|
||||
args.putString("group", etGroup.getText().toString().trim());
|
||||
args.putBoolean("standard", cbStandard.isChecked());
|
||||
args.putBoolean("favorite", cbFavorite.isChecked());
|
||||
args.putBoolean("hide", cbHide.isChecked());
|
||||
args.putString("html", HtmlHelper.toHtml(etText.getText(), getContext()));
|
||||
|
@ -270,6 +274,7 @@ public class FragmentAnswer extends FragmentBase {
|
|||
long id = args.getLong("id");
|
||||
String name = args.getString("name");
|
||||
String group = args.getString("group");
|
||||
boolean standard = args.getBoolean("standard");
|
||||
boolean favorite = args.getBoolean("favorite");
|
||||
boolean hide = args.getBoolean("hide");
|
||||
String html = args.getString("html");
|
||||
|
@ -282,22 +287,35 @@ public class FragmentAnswer extends FragmentBase {
|
|||
Document document = JsoupEx.parse(html);
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
if (id < 0) {
|
||||
EntityAnswer answer = new EntityAnswer();
|
||||
answer.name = name;
|
||||
answer.group = group;
|
||||
answer.favorite = favorite;
|
||||
answer.hide = hide;
|
||||
answer.text = document.body().html();
|
||||
answer.id = db.answer().insertAnswer(answer);
|
||||
} else {
|
||||
EntityAnswer answer = db.answer().getAnswer(id);
|
||||
answer.name = name;
|
||||
answer.group = group;
|
||||
answer.favorite = favorite;
|
||||
answer.hide = hide;
|
||||
answer.text = document.body().html();
|
||||
db.answer().updateAnswer(answer);
|
||||
try {
|
||||
db.beginTransaction();
|
||||
|
||||
if (standard)
|
||||
db.answer().resetStandard();
|
||||
|
||||
if (id < 0) {
|
||||
EntityAnswer answer = new EntityAnswer();
|
||||
answer.name = name;
|
||||
answer.group = group;
|
||||
answer.standard = standard;
|
||||
answer.favorite = favorite;
|
||||
answer.hide = hide;
|
||||
answer.text = document.body().html();
|
||||
answer.id = db.answer().insertAnswer(answer);
|
||||
} else {
|
||||
EntityAnswer answer = db.answer().getAnswer(id);
|
||||
answer.name = name;
|
||||
answer.group = group;
|
||||
answer.standard = standard;
|
||||
answer.favorite = favorite;
|
||||
answer.hide = hide;
|
||||
answer.text = document.body().html();
|
||||
db.answer().updateAnswer(answer);
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -3416,13 +3416,13 @@ public class FragmentCompose extends FragmentBase {
|
|||
document.body().appendChild(e);
|
||||
}
|
||||
|
||||
if (answer > 0) {
|
||||
EntityAnswer a = db.answer().getAnswer(answer);
|
||||
if (a != null) {
|
||||
data.draft.subject = a.name;
|
||||
Document d = JsoupEx.parse(a.getText(null));
|
||||
document.body().append(d.body().html());
|
||||
}
|
||||
EntityAnswer a = (answer < 0
|
||||
? db.answer().getStandardAnswer()
|
||||
: db.answer().getAnswer(answer));
|
||||
if (a != null) {
|
||||
data.draft.subject = a.name;
|
||||
Document d = JsoupEx.parse(a.getText(null));
|
||||
document.body().append(d.body().html());
|
||||
}
|
||||
|
||||
addSignature(context, document, data.draft, selected);
|
||||
|
@ -3581,12 +3581,12 @@ public class FragmentCompose extends FragmentBase {
|
|||
}
|
||||
|
||||
// Reply template
|
||||
if (answer > 0) {
|
||||
EntityAnswer a = db.answer().getAnswer(answer);
|
||||
if (a != null) {
|
||||
Document d = JsoupEx.parse(a.getText(data.draft.to));
|
||||
document.body().append(d.body().html());
|
||||
}
|
||||
EntityAnswer a = (answer < 0
|
||||
? db.answer().getStandardAnswer()
|
||||
: db.answer().getAnswer(answer));
|
||||
if (a != null) {
|
||||
Document d = JsoupEx.parse(a.getText(data.draft.to));
|
||||
document.body().append(d.body().html());
|
||||
}
|
||||
|
||||
// Signature
|
||||
|
|
|
@ -41,6 +41,16 @@
|
|||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etName" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/cbStandard"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginTop="6dp"
|
||||
android:text="@string/title_answer_standard"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etGroup" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/cbFavorite"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -49,7 +59,7 @@
|
|||
android:layout_marginTop="6dp"
|
||||
android:text="@string/title_answer_favorite"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etGroup" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/cbStandard" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/cbHide"
|
||||
|
|
|
@ -1093,6 +1093,7 @@
|
|||
<string name="title_answer_reply">Reply template</string>
|
||||
<string name="title_answer_name">Template name</string>
|
||||
<string name="title_answer_group">Template group (optional)</string>
|
||||
<string name="title_answer_standard">Default</string>
|
||||
<string name="title_answer_favorite">Favorite</string>
|
||||
<string name="title_answer_hide">Hide from menus</string>
|
||||
<string name="title_answer_text">Template text</string>
|
||||
|
|
Loading…
Reference in New Issue