From 0bfbd410c36158ba370e38515a8fd64534d8cb50 Mon Sep 17 00:00:00 2001 From: nuclearfog Date: Sun, 24 Oct 2021 15:32:47 +0200 Subject: [PATCH] added custom confirm dialog layout Signed-off-by: nuclearfog --- .../twidda/activity/ListEditor.java | 13 +- .../twidda/activity/MessageEditor.java | 21 ++- .../twidda/activity/ProfileEditor.java | 5 +- .../twidda/activity/TweetEditor.java | 5 +- .../twidda/dialog/ConfirmDialog.java | 157 +++++++++--------- .../twidda/fragment/AccountFragment.java | 3 +- app/src/main/res/drawable/check.xml | 9 + app/src/main/res/layout/dialog_confirm.xml | 68 ++++++++ app/src/main/res/values/dimens.xml | 8 + app/src/main/res/values/styles.xml | 5 + 10 files changed, 186 insertions(+), 108 deletions(-) create mode 100644 app/src/main/res/drawable/check.xml create mode 100644 app/src/main/res/layout/dialog_confirm.xml diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/ListEditor.java b/app/src/main/java/org/nuclearfog/twidda/activity/ListEditor.java index bb966d88..911f27b8 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/ListEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/ListEditor.java @@ -1,5 +1,10 @@ package org.nuclearfog.twidda.activity; +import static android.os.AsyncTask.Status.RUNNING; +import static org.nuclearfog.twidda.activity.ListDetail.RET_LIST_CHANGED; +import static org.nuclearfog.twidda.activity.ListDetail.RET_LIST_DATA; +import static org.nuclearfog.twidda.activity.UserLists.RET_LIST_CREATED; + import android.app.Dialog; import android.content.Intent; import android.os.Bundle; @@ -13,7 +18,6 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import org.nuclearfog.twidda.R; @@ -30,11 +34,6 @@ import org.nuclearfog.twidda.dialog.ConfirmDialog.OnConfirmListener; import org.nuclearfog.twidda.dialog.ProgressDialog; import org.nuclearfog.twidda.dialog.ProgressDialog.OnProgressStopListener; -import static android.os.AsyncTask.Status.RUNNING; -import static org.nuclearfog.twidda.activity.ListDetail.RET_LIST_CHANGED; -import static org.nuclearfog.twidda.activity.ListDetail.RET_LIST_DATA; -import static org.nuclearfog.twidda.activity.UserLists.RET_LIST_CREATED; - /** * Activity for the list editor * @@ -51,7 +50,7 @@ public class ListEditor extends AppCompatActivity implements OnClickListener, On private EditText titleInput, subTitleInput; private CompoundButton visibility; private Dialog leaveDialog, loadingCircle; - private AlertDialog errorDialog; + private ConfirmDialog errorDialog; @Nullable private TwitterList userList; diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/MessageEditor.java b/app/src/main/java/org/nuclearfog/twidda/activity/MessageEditor.java index 0a04b08c..3a4546ce 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/MessageEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/MessageEditor.java @@ -1,5 +1,13 @@ package org.nuclearfog.twidda.activity; +import static android.os.AsyncTask.Status.RUNNING; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static android.widget.Toast.LENGTH_SHORT; +import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK; +import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_TYPE; +import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMAGE; + import android.app.Dialog; import android.content.Intent; import android.location.Location; @@ -13,7 +21,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.backend.MessageUpdater; @@ -27,14 +34,6 @@ import org.nuclearfog.twidda.dialog.ConfirmDialog.OnConfirmListener; import org.nuclearfog.twidda.dialog.ProgressDialog; import org.nuclearfog.twidda.dialog.ProgressDialog.OnProgressStopListener; -import static android.os.AsyncTask.Status.RUNNING; -import static android.view.View.GONE; -import static android.view.View.VISIBLE; -import static android.widget.Toast.LENGTH_SHORT; -import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK; -import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_TYPE; -import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMAGE; - /** * Direct message popup activity * @@ -51,8 +50,8 @@ public class MessageEditor extends MediaActivity implements OnClickListener, OnC private EditText receiver, message; private ImageButton media, preview; - private Dialog loadingCircle, leaveDialog; - private AlertDialog errorDialog; + private Dialog loadingCircle; + private ConfirmDialog errorDialog, leaveDialog; @Nullable private String mediaPath; diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java b/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java index e52f0d61..69098c01 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java @@ -28,7 +28,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; @@ -71,8 +70,8 @@ public class ProfileEditor extends MediaActivity implements OnClickListener, OnP private ImageView profile_image, profile_banner, toolbar_background, changeBannerBtn; private EditText name, link, loc, bio; private Button addBannerBtn; - private Dialog loadingCircle, closeDialog; - private AlertDialog errorDialog; + private Dialog loadingCircle; + private ConfirmDialog errorDialog, closeDialog; private User user; private String profileLink, bannerLink; diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/TweetEditor.java b/app/src/main/java/org/nuclearfog/twidda/activity/TweetEditor.java index 597cdddd..2aa1efac 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/TweetEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/TweetEditor.java @@ -24,7 +24,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.backend.TweetUpdater; @@ -84,8 +83,8 @@ public class TweetEditor extends MediaActivity implements OnClickListener, OnPro private GlobalSettings settings; private ImageButton mediaBtn, previewBtn, locationBtn; - private AlertDialog errorDialog; - private Dialog loadingCircle, closingDialog; + private ConfirmDialog errorDialog, closingDialog; + private Dialog loadingCircle; private EditText tweetText; private View locationPending; diff --git a/app/src/main/java/org/nuclearfog/twidda/dialog/ConfirmDialog.java b/app/src/main/java/org/nuclearfog/twidda/dialog/ConfirmDialog.java index 546a2449..cfc930a8 100644 --- a/app/src/main/java/org/nuclearfog/twidda/dialog/ConfirmDialog.java +++ b/app/src/main/java/org/nuclearfog/twidda/dialog/ConfirmDialog.java @@ -1,16 +1,14 @@ package org.nuclearfog.twidda.dialog; -import static android.util.TypedValue.COMPLEX_UNIT_SP; - +import android.app.Dialog; import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; +import android.view.View; +import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; -import androidx.appcompat.app.AlertDialog; - import org.nuclearfog.twidda.R; +import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.database.GlobalSettings; /** @@ -18,7 +16,7 @@ import org.nuclearfog.twidda.database.GlobalSettings; * * @author nuclearfog */ -public class ConfirmDialog extends AlertDialog implements OnClickListener { +public class ConfirmDialog extends Dialog implements OnClickListener { /** * types of dialogs, every dialog has its own message and title @@ -46,6 +44,9 @@ public class ConfirmDialog extends AlertDialog implements OnClickListener { LIST_EDITOR_ERROR } + private TextView txtTitle, txtMessage; + private Button confirm, cancel; + private DialogType type; private OnConfirmListener listener; @@ -54,7 +55,22 @@ public class ConfirmDialog extends AlertDialog implements OnClickListener { * @param listener listener for the confirmation button */ public ConfirmDialog(Context context, DialogType type, OnConfirmListener listener) { - super(context); + super(context, R.style.ConfirmDialog); + setContentView(R.layout.dialog_confirm); + View root = findViewById(R.id.confirm_rootview); + confirm = findViewById(R.id.confirm_yes); + cancel = findViewById(R.id.confirm_no); + txtTitle = findViewById(R.id.confirm_title); + txtMessage = findViewById(R.id.confirm_message); + + confirm.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0); + cancel.setCompoundDrawablesWithIntrinsicBounds(R.drawable.cross, 0, 0, 0); + GlobalSettings settings = GlobalSettings.getInstance(context); + AppStyles.setTheme(settings, root); + + confirm.setOnClickListener(this); + cancel.setOnClickListener(this); + this.type = type; this.listener = listener; build(); @@ -62,143 +78,120 @@ public class ConfirmDialog extends AlertDialog implements OnClickListener { @Override - public void onClick(DialogInterface dialog, int which) { - if (which == BUTTON_POSITIVE) { + public void onClick(View v) { + if (v.getId() == R.id.confirm_yes) { listener.onConfirm(type); + dismiss(); + } else if (v.getId() == R.id.confirm_no) { + dismiss(); } } - - @Override - public void show() { - super.show(); - setTheme(); + /** + * set message text + * + * @param message message text + */ + public void setMessage(String message) { + txtMessage.setText(message); } /** * creates an alert dialog */ private void build() { - Context c = getContext(); - String posButton = c.getString(R.string.dialog_button_yes); - String negButton = c.getString(R.string.dialog_button_no); - String message = ""; - String title = ""; - switch (type) { case MESSAGE_DELETE: - message = c.getString(R.string.confirm_delete_message); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_delete_message); break; case WRONG_PROXY: - title = c.getString(R.string.info_error); - message = c.getString(R.string.error_wrong_connection_settings); - posButton = c.getString(R.string.dialog_button_cancel); - negButton = c.getString(R.string.confirm_back); + txtTitle.setText(R.string.info_error); + txtMessage.setText(R.string.error_wrong_connection_settings); + confirm.setText(R.string.dialog_button_cancel); + cancel.setText(R.string.confirm_back); break; case DEL_DATABASE: - message = c.getString(R.string.confirm_delete_database); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_delete_database); break; case APP_LOG_OUT: - message = c.getString(R.string.confirm_log_lout); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_log_lout); break; case LIST_EDITOR_LEAVE: case PROFILE_EDITOR_LEAVE: - message = c.getString(R.string.confirm_discard); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_discard); break; case TWEET_EDITOR_LEAVE: - message = c.getString(R.string.confirm_cancel_tweet); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_cancel_tweet); break; case LIST_EDITOR_ERROR: case MESSAGE_EDITOR_ERROR: case TWEET_EDITOR_ERROR: case PROFILE_EDITOR_ERROR: - title = c.getString(R.string.info_error); - posButton = c.getString(R.string.confirm_retry_button); - negButton = c.getString(R.string.dialog_button_cancel); + txtTitle.setText(R.string.info_error); + confirm.setText(R.string.confirm_retry_button); + cancel.setText(R.string.dialog_button_cancel); break; case MESSAGE_EDITOR_LEAVE: - message = c.getString(R.string.confirm_cancel_message); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_cancel_message); break; case TWEET_DELETE: - message = c.getString(R.string.confirm_delete_tweet); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_delete_tweet); break; case PROFILE_UNFOLLOW: - message = c.getString(R.string.confirm_unfollow); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_unfollow); break; case PROFILE_BLOCK: - message = c.getString(R.string.confirm_block); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_block); break; case PROFILE_MUTE: - message = c.getString(R.string.confirm_mute); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_mute); break; case LIST_REMOVE_USER: - message = c.getString(R.string.confirm_remove_user_from_list); - posButton = c.getString(R.string.dialog_button_ok); - negButton = c.getString(R.string.dialog_button_cancel); + txtTitle.setVisibility(View.GONE); + txtMessage.setText(R.string.confirm_remove_user_from_list); + confirm.setText(R.string.dialog_button_ok); + cancel.setText(R.string.dialog_button_cancel); break; case LIST_UNFOLLOW: - message = c.getString(R.string.confirm_unfollow_list); + txtMessage.setText(R.string.confirm_unfollow_list); + txtTitle.setVisibility(View.GONE); break; case LIST_DELETE: - message = c.getString(R.string.confirm_delete_list); + txtMessage.setText(R.string.confirm_delete_list); + txtTitle.setVisibility(View.GONE); break; case REMOVE_ACCOUNT: - message = c.getString(R.string.confirm_remove_account); - posButton = c.getString(R.string.dialog_button_ok); - negButton = c.getString(R.string.dialog_button_cancel); + txtMessage.setText(R.string.confirm_remove_account); + confirm.setText(R.string.dialog_button_ok); + cancel.setText(R.string.dialog_button_cancel); + txtTitle.setVisibility(View.GONE); break; } - setTitle(title); - setMessage(message); - setButton(BUTTON_NEGATIVE, negButton, this); - setButton(BUTTON_POSITIVE, posButton, this); - } - - /** - * - */ - private void setTheme() { - GlobalSettings settings = GlobalSettings.getInstance(getContext()); - TextView message = findViewById(android.R.id.message); - TextView title = findViewById(android.R.id.title); - Button button1 = findViewById(android.R.id.button1); - Button button2 = findViewById(android.R.id.button2); - - if (getWindow() != null) { - getWindow().getDecorView().setBackgroundColor(settings.getBackgroundColor()); - } - if (message != null) { - message.setTypeface(settings.getTypeFace()); - message.setTextColor(settings.getFontColor()); - message.setTextSize(COMPLEX_UNIT_SP, 20); - } - if (title != null) { - title.setTypeface(settings.getTypeFace()); - title.setTextColor(settings.getFontColor()); - } - if (button1 != null) { - button1.setTypeface(settings.getTypeFace()); - button1.setTextColor(settings.getFontColor()); - } - if (button2 != null) { - button2.setTypeface(settings.getTypeFace()); - button2.setTextColor(settings.getFontColor()); - } } /** diff --git a/app/src/main/java/org/nuclearfog/twidda/fragment/AccountFragment.java b/app/src/main/java/org/nuclearfog/twidda/fragment/AccountFragment.java index 8b8d774d..2d883bc7 100644 --- a/app/src/main/java/org/nuclearfog/twidda/fragment/AccountFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/fragment/AccountFragment.java @@ -5,7 +5,6 @@ import static org.nuclearfog.twidda.activity.AccountActivity.RET_ACCOUNT_CHANGE; import static org.nuclearfog.twidda.dialog.ConfirmDialog.DialogType; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import org.nuclearfog.twidda.adapter.AccountAdapter; import org.nuclearfog.twidda.adapter.AccountAdapter.OnAccountClickListener; @@ -30,7 +29,7 @@ public class AccountFragment extends ListFragment implements OnAccountClickListe private AccountLoader loginTask; private GlobalSettings settings; private AccountAdapter adapter; - private AlertDialog dialog; + private ConfirmDialog dialog; private Account selection; diff --git a/app/src/main/res/drawable/check.xml b/app/src/main/res/drawable/check.xml new file mode 100644 index 00000000..73214247 --- /dev/null +++ b/app/src/main/res/drawable/check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/dialog_confirm.xml b/app/src/main/res/layout/dialog_confirm.xml new file mode 100644 index 00000000..d507906e --- /dev/null +++ b/app/src/main/res/layout/dialog_confirm.xml @@ -0,0 +1,68 @@ + + + + + + + + + +