created dialog builder class, dialog bug fix

This commit is contained in:
nuclearfog 2020-10-27 14:09:10 +01:00
parent 59dcdff966
commit a2e07cd593
No known key found for this signature in database
GPG Key ID: D5490E4A81F97B14
19 changed files with 347 additions and 232 deletions

View File

@ -21,7 +21,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
@ -37,6 +36,8 @@ import org.nuclearfog.twidda.backend.LocationListLoader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.engine.TwitterEngine;
import org.nuclearfog.twidda.backend.items.TrendLocation;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.DatabaseAdapter;
@ -45,15 +46,17 @@ import org.nuclearfog.twidda.database.GlobalSettings;
import java.util.List;
import java.util.regex.Matcher;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.RUNNING;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static org.nuclearfog.twidda.activity.MainActivity.RETURN_APP_LOGOUT;
import static org.nuclearfog.twidda.activity.MainActivity.RETURN_DB_CLEARED;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DEL_DATABASE;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.LOGOUT_APP;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.WRONG_PROXY;
public class AppSettings extends AppCompatActivity implements OnClickListener, OnDismissListener,
OnCheckedChangeListener, OnItemSelectedListener, DialogInterface.OnClickListener, OnColorChangedListener {
OnCheckedChangeListener, OnItemSelectedListener, OnDialogClick, OnColorChangedListener {
private static final int INVERTCOLOR = 0xffffff;
private static final String[] PICKER_SELECT = {"10", "20", "30", "40", "50", "60", "70", "80", "90", "100"};
@ -150,6 +153,10 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
enableAuth.setChecked(settings.isProxyAuthSet());
setProxySetupVisibility(settings.isProxyEnabled(), settings.isProxyAuthSet());
proxyDialog = DialogBuilder.create(this, WRONG_PROXY, this);
databaseDialog = DialogBuilder.create(this, DEL_DATABASE, this);
logoutDialog = DialogBuilder.create(this, LOGOUT_APP, this);
logout.setOnClickListener(this);
load_popup.setOnClickListener(this);
delButton.setOnClickListener(this);
@ -183,14 +190,6 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
TwitterEngine.resetTwitter();
super.onBackPressed();
} else {
if (proxyDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setTitle(R.string.info_error);
builder.setMessage(R.string.info_wrong_proxy_settings);
builder.setPositiveButton(R.string.confirm_discard_proxy_changes, this);
builder.setNegativeButton(android.R.string.cancel, null);
proxyDialog = builder.create();
}
if (!proxyDialog.isShowing()) {
proxyDialog.show();
}
@ -229,23 +228,26 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE) {
if (dialog == proxyDialog) {
// exit without saving proxy settings
AppSettings.super.onBackPressed();
} else if (dialog == databaseDialog) {
DatabaseAdapter.deleteDatabase(getApplicationContext());
setResult(RETURN_DB_CLEARED);
} else if (dialog == logoutDialog) {
public void onConfirm(DialogBuilder.DialogType type) {
switch (type) {
case LOGOUT_APP:
settings.logout();
TwitterEngine.resetTwitter();
DatabaseAdapter.deleteDatabase(getApplicationContext());
setResult(RETURN_APP_LOGOUT);
finish();
}
}
break;
case DEL_DATABASE:
DatabaseAdapter.deleteDatabase(getApplicationContext());
setResult(RETURN_DB_CLEARED);
break;
case WRONG_PROXY:
// exit without saving proxy settings
finish();
break;
}
}
@ -253,26 +255,12 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
public void onClick(View v) {
switch (v.getId()) {
case R.id.delete_db:
if (databaseDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_delete_database);
builder.setNegativeButton(R.string.confirm_no, null);
builder.setPositiveButton(R.string.confirm_yes, this);
databaseDialog = builder.create();
}
if (!databaseDialog.isShowing()) {
databaseDialog.show();
}
break;
case R.id.logout:
if (logoutDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_log_lout);
builder.setNegativeButton(R.string.confirm_no, null);
builder.setPositiveButton(R.string.confirm_yes, this);
logoutDialog = builder.create();
}
if (!logoutDialog.isShowing()) {
logoutDialog.show();
}

View File

@ -1,7 +1,6 @@
package org.nuclearfog.twidda.activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
@ -13,18 +12,18 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.UserListUpdater;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.ListHolder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.RUNNING;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
@ -34,11 +33,12 @@ import static org.nuclearfog.twidda.activity.ListDetail.KEY_LISTDETAIL_TITLE;
import static org.nuclearfog.twidda.activity.ListDetail.KEY_LISTDETAIL_VISIB;
import static org.nuclearfog.twidda.activity.ListDetail.RET_LIST_CHANGED;
import static org.nuclearfog.twidda.activity.TwitterList.RET_LIST_CREATED;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.LISTPOPUP_LEAVE;
/**
* Popup activity for the list editor
*/
public class ListPopup extends AppCompatActivity implements OnClickListener, DialogInterface.OnClickListener {
public class ListPopup extends AppCompatActivity implements OnClickListener, OnDialogClick {
/**
* Key for the list ID of the list if an existing list should be updated
@ -101,6 +101,7 @@ public class ListPopup extends AppCompatActivity implements OnClickListener, Dia
popupTitle.setText(R.string.menu_edit_list);
updateButton.setText(R.string.update_list);
}
leaveDialog = DialogBuilder.create(this, LISTPOPUP_LEAVE, this);
updateButton.setOnClickListener(this);
}
@ -111,13 +112,7 @@ public class ListPopup extends AppCompatActivity implements OnClickListener, Dia
&& subTitleInput.getText().toString().equals(description)) {
super.onBackPressed();
} else {
if (leaveDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_discard);
builder.setNegativeButton(R.string.confirm_no, null);
builder.setPositiveButton(R.string.confirm_yes, this);
leaveDialog = builder.show();
} else if (!leaveDialog.isShowing()) {
if (!leaveDialog.isShowing()) {
leaveDialog.show();
}
}
@ -149,10 +144,8 @@ public class ListPopup extends AppCompatActivity implements OnClickListener, Dia
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE && dialog == leaveDialog) {
finish();
}
public void onConfirm(DialogBuilder.DialogType type) {
finish();
}
/**

View File

@ -17,13 +17,14 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.MessageUploader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.MessageHolder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -40,11 +41,12 @@ 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_IMG_S;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.MSG_POPUP_LEAVE;
/**
* Direct message popup activity
*/
public class MessagePopup extends AppCompatActivity implements OnClickListener, OnDismissListener {
public class MessagePopup extends AppCompatActivity implements OnClickListener, OnDismissListener, OnDialogClick {
/**
* key for the screen name if any
@ -61,7 +63,7 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener,
private EditText receiver, message;
private ImageButton media;
private Dialog loadingCircle;
private Dialog loadingCircle, leaveDialog;
@Nullable
private String mediaPath;
@ -90,6 +92,7 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener,
root.setBackgroundColor(settings.getPopupColor());
FontTool.setViewFontAndColor(settings, root);
leaveDialog = DialogBuilder.create(this, MSG_POPUP_LEAVE, this);
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
loadingCircle.setCanceledOnTouchOutside(false);
loadingCircle.setContentView(load);
@ -106,17 +109,8 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener,
public void onBackPressed() {
if (receiver.getText().length() == 0 && message.getText().length() == 0 && mediaPath == null) {
super.onBackPressed();
} else {
Builder closeDialog = new Builder(this, R.style.ConfirmDialog);
closeDialog.setMessage(R.string.confirm_cancel_message);
closeDialog.setNegativeButton(R.string.confirm_no, null);
closeDialog.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
closeDialog.show();
} else if (!leaveDialog.isShowing()) {
leaveDialog.show();
}
}
@ -193,6 +187,13 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener,
}
}
@Override
public void onConfirm(DialogBuilder.DialogType type) {
if (type == MSG_POPUP_LEAVE) {
finish();
}
}
/**
* enable or disable loading dialog
*

View File

@ -23,7 +23,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
@ -34,6 +33,8 @@ import org.nuclearfog.twidda.backend.ProfileUpdater;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.UserHolder;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -48,11 +49,12 @@ import static android.view.View.VISIBLE;
import static android.view.Window.FEATURE_NO_TITLE;
import static android.widget.Toast.LENGTH_SHORT;
import static org.nuclearfog.twidda.activity.UserProfile.RETURN_PROFILE_CHANGED;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.PROFILE_EDIT_LEAVE;
/**
* Activity for Twitter profile editor
*/
public class ProfileEditor extends AppCompatActivity implements OnClickListener, OnDismissListener {
public class ProfileEditor extends AppCompatActivity implements OnClickListener, OnDismissListener, OnDialogClick {
private static final String[] PERM_READ = {READ_EXTERNAL_STORAGE};
private static final String[] MEDIA_MODE = {MediaStore.Images.Media.DATA};
@ -77,7 +79,7 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener,
private ImageView profile_image, profile_banner;
private EditText name, link, loc, bio;
private Button add_banner_btn;
private Dialog loadingCircle;
private Dialog loadingCircle, closeDialog;
private TwitterUser user;
private String profileLink, bannerLink;
@ -113,6 +115,7 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener,
header.getLayoutParams().height = layoutHeight + buttonHeight;
header.requestLayout();
closeDialog = DialogBuilder.create(this, PROFILE_EDIT_LEAVE, this);
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
loadingCircle.setCanceledOnTouchOutside(false);
loadingCircle.setContentView(load);
@ -154,16 +157,7 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener,
&& userLoc.equals(user.getLocation()) && userBio.equals(user.getBio())
&& profileLink == null && bannerLink == null) {
finish();
} else {
Builder closeDialog = new Builder(this, R.style.ConfirmDialog);
closeDialog.setMessage(R.string.confirm_discard);
closeDialog.setNegativeButton(R.string.confirm_no, null);
closeDialog.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
} else if (!closeDialog.isShowing()) {
closeDialog.show();
}
}
@ -251,6 +245,7 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener,
}
}
@Override
public void onDismiss(DialogInterface dialog) {
if (editorAsync != null && editorAsync.getStatus() == RUNNING) {
@ -258,6 +253,14 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener,
}
}
@Override
public void onConfirm(DialogBuilder.DialogType type) {
if (type == PROFILE_EDIT_LEAVE) {
finish();
}
}
/**
* enable or disable loading dialog
*

View File

@ -3,7 +3,6 @@ package org.nuclearfog.twidda.activity;
import android.app.Dialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@ -20,7 +19,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
@ -36,6 +34,8 @@ import org.nuclearfog.twidda.backend.TweetLoader;
import org.nuclearfog.twidda.backend.TweetLoader.Action;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.items.Tweet;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -44,7 +44,6 @@ import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.RUNNING;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@ -60,6 +59,7 @@ import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_TEXT;
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_ID;
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_MODE;
import static org.nuclearfog.twidda.activity.UserDetail.USERLIST_RETWEETS;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DELETE_TWEET;
import static org.nuclearfog.twidda.fragment.TweetFragment.INTENT_TWEET_REMOVED_ID;
import static org.nuclearfog.twidda.fragment.TweetFragment.RETURN_TWEET_CHANGED;
@ -67,7 +67,7 @@ import static org.nuclearfog.twidda.fragment.TweetFragment.RETURN_TWEET_CHANGED;
* Tweet Activity for tweet and user informations
*/
public class TweetActivity extends AppCompatActivity implements OnClickListener,
OnLongClickListener, OnTagClickListener, DialogInterface.OnClickListener {
OnLongClickListener, OnTagClickListener, OnDialogClick {
/**
* ID of the tweet to open. required
@ -135,6 +135,7 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener,
tweetText.setMovementMethod(LinkAndScrollMovement.getInstance());
tweetText.setLinkTextColor(settings.getHighlightColor());
root.setBackgroundColor(settings.getBackgroundColor());
deleteDialog = DialogBuilder.create(this, DELETE_TWEET, this);
replyName.setOnClickListener(this);
ansButton.setOnClickListener(this);
@ -191,13 +192,6 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener,
if (statusAsync != null && tweet != null && statusAsync.getStatus() != RUNNING) {
switch (item.getItemId()) {
case R.id.delete_tweet:
if (deleteDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_delete_tweet);
builder.setPositiveButton(R.string.confirm_yes, this);
builder.setNegativeButton(R.string.confirm_no, null);
deleteDialog = builder.create();
}
if (!deleteDialog.isShowing()) {
deleteDialog.show();
}
@ -231,15 +225,6 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener,
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE && dialog == deleteDialog && tweet != null) {
statusAsync = new TweetLoader(TweetActivity.this, Action.DELETE);
statusAsync.execute(tweet.getId());
}
}
@Override
public void onClick(View v) {
if (statusAsync != null && tweet != null && statusAsync.getStatus() != RUNNING) {
@ -333,6 +318,15 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener,
}
@Override
public void onConfirm(DialogBuilder.DialogType type) {
if (type == DELETE_TWEET && tweet != null) {
statusAsync = new TweetLoader(TweetActivity.this, Action.DELETE);
statusAsync.execute(tweet.getId());
}
}
@Override
public void onTagClick(String tag) {
Intent intent = new Intent(this, SearchPage.class);

View File

@ -20,13 +20,13 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.TweetUploader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.TweetHolder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -36,7 +36,6 @@ import java.util.List;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.content.Intent.ACTION_PICK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.AsyncTask.Status.RUNNING;
@ -51,12 +50,14 @@ 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_IMG_S;
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_VIDEO;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.TWEETPOPUP_ERROR;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.TWEETPOPUP_LEAVE;
/**
* Activity to create a tweet
*/
public class TweetPopup extends AppCompatActivity implements OnClickListener, LocationListener,
OnDismissListener, DialogInterface.OnClickListener {
OnDismissListener, DialogBuilder.OnDialogClick {
/**
* key for the replied tweet if any
@ -126,6 +127,8 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
tweetText.append(prefix);
}
errorDialog = DialogBuilder.create(this, TWEETPOPUP_ERROR, this);
closingDialog = DialogBuilder.create(this, TWEETPOPUP_LEAVE, this);
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
loadingCircle.setCanceledOnTouchOutside(false);
loadingCircle.setContentView(load);
@ -329,14 +332,12 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE) {
if (dialog == errorDialog) {
uploaderAsync = new TweetUploader(this);
uploaderAsync.execute(tweet);
} else if (dialog == closingDialog) {
finish();
}
public void onConfirm(DialogBuilder.DialogType type) {
if (type == TWEETPOPUP_ERROR) {
uploaderAsync = new TweetUploader(this);
uploaderAsync.execute(tweet);
} else if (type == TWEETPOPUP_LEAVE) {
finish();
}
}
@ -366,13 +367,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
*/
public void onError(EngineException error) {
ErrorHandler.handleFailure(this, error);
if (errorDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setTitle(R.string.info_error).setMessage(R.string.error_sending_tweet);
builder.setPositiveButton(R.string.confirm_retry, this);
builder.setNegativeButton(android.R.string.cancel, null);
errorDialog = builder.show();
} else if (!errorDialog.isShowing()) {
if (!errorDialog.isShowing()) {
errorDialog.show();
}
}
@ -383,13 +378,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
*/
private void showClosingMsg() {
if (!prefix.equals(tweetText.getText().toString()) || !mediaPath.isEmpty()) {
if (closingDialog == null) {
Builder builder = new Builder(this, R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_cancel_tweet);
builder.setNegativeButton(R.string.confirm_no, null);
builder.setPositiveButton(R.string.confirm_yes, this);
closingDialog = builder.show();
} else if (!closingDialog.isShowing()) {
if (!closingDialog.isShowing()) {
closingDialog.show();
}
} else {

View File

@ -1,6 +1,6 @@
package org.nuclearfog.twidda.activity;
import android.content.DialogInterface;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Point;
import android.net.Uri;
@ -18,7 +18,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
@ -37,6 +36,8 @@ import org.nuclearfog.twidda.backend.ProfileLoader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.backend.items.UserRelation;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -66,11 +67,15 @@ import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_MODE;
import static org.nuclearfog.twidda.activity.UserDetail.USERLIST_FOLLOWER;
import static org.nuclearfog.twidda.activity.UserDetail.USERLIST_FRIENDS;
import static org.nuclearfog.twidda.backend.ProfileLoader.Action.LDR_PROFILE;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.PROFILE_BLOCK;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.PROFILE_MUTE;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.PROFILE_UNFOLLOW;
/**
* Activity class for user profile page
*/
public class UserProfile extends AppCompatActivity implements OnClickListener, OnTagClickListener, OnTabSelectedListener {
public class UserProfile extends AppCompatActivity implements OnClickListener, OnTagClickListener,
OnTabSelectedListener, OnDialogClick {
/**
* Key for the user ID
@ -107,6 +112,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
private View profile_head, profile_layer;
private ViewPager pager;
private TabLayout tabLayout;
private Dialog unfollowConfirm, blockConfirm, muteConfirm;
private ProfileLoader profileAsync;
private UserRelation relation;
@ -167,6 +173,9 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(2);
tabLayout.setupWithViewPager(pager);
unfollowConfirm = DialogBuilder.create(this, PROFILE_UNFOLLOW, this);
blockConfirm = DialogBuilder.create(this, PROFILE_BLOCK, this);
muteConfirm = DialogBuilder.create(this, PROFILE_MUTE, this);
tabLayout.addOnTabSelectedListener(this);
following.setOnClickListener(this);
@ -301,34 +310,20 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
break;
case R.id.profile_follow:
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_FOLLOW);
if (!relation.isFriend()) {
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_FOLLOW);
profileAsync.execute(user.getId());
} else {
new Builder(this).setMessage(R.string.confirm_unfollow)
.setNegativeButton(R.string.confirm_no, null)
.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
profileAsync.execute(user.getId());
}
}).show();
} else if (!unfollowConfirm.isShowing()) {
unfollowConfirm.show();
}
break;
case R.id.profile_mute:
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_MUTE);
if (relation.isMuted()) {
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_MUTE);
profileAsync.execute(user.getId());
} else {
new Builder(this).setMessage(R.string.confirm_mute)
.setNegativeButton(R.string.confirm_no, null)
.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
profileAsync.execute(user.getId());
}
}).show();
} else if (!muteConfirm.isShowing()) {
muteConfirm.show();
}
break;
@ -336,15 +331,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_BLOCK);
if (relation.isBlocked()) {
profileAsync.execute(user.getId());
} else {
new Builder(this).setMessage(R.string.confirm_block)
.setNegativeButton(R.string.confirm_no, null)
.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
profileAsync.execute(user.getId());
}
}).show();
} else if (!blockConfirm.isShowing()) {
blockConfirm.show();
}
break;
@ -466,6 +454,21 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
}
@Override
public void onConfirm(DialogBuilder.DialogType type) {
if (type == PROFILE_UNFOLLOW) {
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_FOLLOW);
profileAsync.execute(user.getId());
} else if (type == PROFILE_BLOCK) {
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_BLOCK);
profileAsync.execute(user.getId());
} else if (type == PROFILE_MUTE) {
profileAsync = new ProfileLoader(this, ProfileLoader.Action.ACTION_MUTE);
profileAsync.execute(user.getId());
}
}
@Override
public void onTabSelected(Tab tab) {
}

View File

@ -225,12 +225,12 @@ public class TweetAdapter extends Adapter<ViewHolder> {
TweetHolder vh = (TweetHolder) holder;
TwitterUser user = tweet.getUser();
if (tweet.getEmbeddedTweet() != null) {
String retweeter = "RT " + user.getScreenname();
vh.retweeter.setText(retweeter);
vh.retweeter.setText(user.getScreenname());
vh.retweeter.setVisibility(VISIBLE);
tweet = tweet.getEmbeddedTweet();
user = tweet.getUser();
} else {
vh.retweeter.setText("");
vh.retweeter.setVisibility(INVISIBLE);
}
Spanned text = Tagger.makeTextWithLinks(tweet.getTweet(), settings.getHighlightColor());
vh.tweet.setText(text);

View File

@ -0,0 +1,153 @@
package org.nuclearfog.twidda.backend.utils;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import androidx.appcompat.app.AlertDialog;
import org.nuclearfog.twidda.R;
/**
* this class creates alert dialogs with a custom listener
*/
public final class DialogBuilder {
/**
* types of dialogs, every dialog has its own message and title
*/
public enum DialogType {
DEL_MESSAGE,
WRONG_PROXY,
DEL_DATABASE,
LOGOUT_APP,
LISTPOPUP_LEAVE,
TWEETPOPUP_LEAVE,
TWEETPOPUP_ERROR,
MSG_POPUP_LEAVE,
PROFILE_EDIT_LEAVE,
DELETE_TWEET,
PROFILE_UNFOLLOW,
PROFILE_BLOCK,
PROFILE_MUTE,
DEL_USER_LIST,
LIST_UNFOLLOW,
LIST_DELETE
}
private DialogBuilder() {
}
/**
* creates an alert dialog
*
* @param context activity context
* @param type type of error dialog
* @param listener listener for positive button
* @return dialog instance
*/
public static Dialog create(Context context, final DialogType type, final OnDialogClick listener) {
int posButton = R.string.confirm_yes;
int negButton = R.string.confirm_no;
int title = 0;
int message = 0;
switch (type) {
case DEL_MESSAGE:
message = R.string.confirm_delete_message;
break;
case WRONG_PROXY:
title = R.string.info_error;
message = R.string.info_wrong_proxy_settings;
posButton = R.string.confirm_discard_proxy_changes;
negButton = android.R.string.cancel;
break;
case DEL_DATABASE:
message = R.string.confirm_delete_database;
break;
case LOGOUT_APP:
message = R.string.confirm_log_lout;
break;
case LISTPOPUP_LEAVE:
case PROFILE_EDIT_LEAVE:
message = R.string.confirm_discard;
break;
case TWEETPOPUP_LEAVE:
message = R.string.confirm_cancel_tweet;
break;
case TWEETPOPUP_ERROR:
title = R.string.info_error;
message = R.string.error_sending_tweet;
posButton = R.string.confirm_retry;
negButton = android.R.string.cancel;
break;
case MSG_POPUP_LEAVE:
message = R.string.confirm_cancel_message;
break;
case DELETE_TWEET:
message = R.string.confirm_delete_tweet;
break;
case PROFILE_UNFOLLOW:
message = R.string.confirm_unfollow;
break;
case PROFILE_BLOCK:
message = R.string.confirm_block;
break;
case PROFILE_MUTE:
message = R.string.confirm_mute;
break;
case DEL_USER_LIST:
message = R.string.confirm_remove_user_from_list;
posButton = android.R.string.ok;
negButton = android.R.string.cancel;
break;
case LIST_UNFOLLOW:
message = R.string.confirm_unfollow_list;
break;
case LIST_DELETE:
message = R.string.confirm_delete_list;
break;
}
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.ConfirmDialog);
if (title != 0)
builder.setTitle(title);
builder.setMessage(message);
builder.setNegativeButton(negButton, null);
builder.setPositiveButton(posButton, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onConfirm(type);
}
});
return builder.create();
}
/**
* listener for dialog
*/
public interface OnDialogClick {
/**
* called when the positive button was clicked
*
* @param type type of dialog
*/
void onConfirm(DialogType type);
}
}

View File

@ -12,7 +12,10 @@ import org.nuclearfog.twidda.backend.engine.EngineException;
* This class handles {@link EngineException} from {@link org.nuclearfog.twidda.backend.engine.TwitterEngine}
* and prints Toast messages to current activity
*/
public abstract class ErrorHandler {
public final class ErrorHandler {
private ErrorHandler() {
}
/**
* show error messages and handle failures

View File

@ -9,7 +9,10 @@ import org.nuclearfog.twidda.database.GlobalSettings;
/**
* Class for converting all fonts in a view
*/
public abstract class FontTool {
public final class FontTool {
private FontTool() {
}
/**
* Set fonts type & color to all text elements in a view

View File

@ -3,9 +3,20 @@ package org.nuclearfog.twidda.backend.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* this class creates time strings
*/
public final class TimeString {
public abstract class TimeString {
private TimeString() {
}
/**
* creates a time string from the difference between the current time and the given time
*
* @param time time value from which to create a difference
* @return time string showing the time difference
*/
public static String getTimeString(long time) {
long diff = new Date().getTime() - time;
long seconds = diff / 1000;

View File

@ -2,7 +2,6 @@ package org.nuclearfog.twidda.fragment;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -12,7 +11,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@ -30,10 +28,11 @@ import org.nuclearfog.twidda.backend.TwitterListLoader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.UserListList;
import org.nuclearfog.twidda.backend.items.TwitterList;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.FINISHED;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.activity.ListDetail.KEY_CURRENT_USER_OWNS;
@ -50,12 +49,14 @@ import static org.nuclearfog.twidda.backend.TwitterListLoader.Action.FOLLOW;
import static org.nuclearfog.twidda.backend.TwitterListLoader.Action.LOAD_MEMBERSHIPS;
import static org.nuclearfog.twidda.backend.TwitterListLoader.Action.LOAD_USERLISTS;
import static org.nuclearfog.twidda.backend.TwitterListLoader.NO_CURSOR;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.LIST_DELETE;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.LIST_UNFOLLOW;
/**
* Fragment class for user lists
*/
public class ListFragment extends Fragment implements OnRefreshListener, ListClickListener,
FragmentChangeObserver, DialogInterface.OnClickListener {
FragmentChangeObserver, OnDialogClick {
/**
* Key for the owner ID
@ -105,6 +106,8 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
list.setHasFixedSize(true);
list.setAdapter(adapter);
followDialog = DialogBuilder.create(requireContext(), LIST_UNFOLLOW, this);
deleteDialog = DialogBuilder.create(requireContext(), LIST_DELETE, this);
reloadLayout = new SwipeRefreshLayout(context);
reloadLayout.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reloadLayout.setOnRefreshListener(this);
@ -151,13 +154,6 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
case FOLLOW:
if (listItem.isFollowing()) {
if (followDialog == null) {
Builder confirmDialog = new Builder(getContext(), R.style.ConfirmDialog);
confirmDialog.setMessage(R.string.confirm_unfollow_list);
confirmDialog.setNegativeButton(R.string.confirm_no, null);
confirmDialog.setPositiveButton(R.string.confirm_yes, this);
followDialog = confirmDialog.create();
}
if (!followDialog.isShowing()) {
selectedList = listItem.getId();
followDialog.show();
@ -187,13 +183,6 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
break;
case DELETE:
if (deleteDialog == null) {
Builder confirmDialog = new Builder(requireContext(), R.style.ConfirmDialog);
confirmDialog.setMessage(R.string.confirm_delete_list);
confirmDialog.setNegativeButton(R.string.confirm_no, null);
confirmDialog.setPositiveButton(R.string.confirm_yes, this);
deleteDialog = confirmDialog.create();
}
if (!deleteDialog.isShowing()) {
selectedList = listItem.getId();
deleteDialog.show();
@ -204,23 +193,21 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
}
public void onFooterClick(long cursor) {
if (listTask != null && listTask.getStatus() != RUNNING) {
load(cursor);
@Override
public void onConfirm(DialogBuilder.DialogType type) {
if (type == LIST_UNFOLLOW) {
listTask = new TwitterListLoader(this, FOLLOW, selectedList, "");
listTask.execute();
} else if (type == LIST_DELETE) {
listTask = new TwitterListLoader(this, DELETE, selectedList, "");
listTask.execute();
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE) {
if (dialog == followDialog) {
listTask = new TwitterListLoader(this, FOLLOW, selectedList, "");
listTask.execute();
} else if (dialog == deleteDialog) {
listTask = new TwitterListLoader(this, DELETE, selectedList, "");
listTask.execute();
}
public void onFooterClick(long cursor) {
if (listTask != null && listTask.getStatus() != RUNNING) {
load(cursor);
}
}

View File

@ -2,7 +2,6 @@ package org.nuclearfog.twidda.fragment;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@ -13,7 +12,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@ -31,12 +29,12 @@ import org.nuclearfog.twidda.backend.MessageListLoader;
import org.nuclearfog.twidda.backend.TrendListLoader;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.items.Message;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.util.List;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.FINISHED;
import static android.os.AsyncTask.Status.RUNNING;
import static android.widget.Toast.LENGTH_SHORT;
@ -46,11 +44,12 @@ import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_ID;
import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_NAME;
import static org.nuclearfog.twidda.activity.TweetActivity.LINK_PATTERN;
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DEL_MESSAGE;
/**
* Fragment class for direct message lists
*/
public class MessageFragment extends Fragment implements OnRefreshListener, OnItemSelected, DialogInterface.OnClickListener {
public class MessageFragment extends Fragment implements OnRefreshListener, OnItemSelected, DialogBuilder.OnDialogClick {
private MessageListLoader messageTask;
private SwipeRefreshLayout reload;
@ -72,6 +71,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
list.setHasFixedSize(true);
list.setAdapter(adapter);
deleteDialog = DialogBuilder.create(requireContext(), DEL_MESSAGE, this);
reload = new SwipeRefreshLayout(context);
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reload.setOnRefreshListener(this);
@ -155,13 +155,6 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
break;
case DELETE:
if (deleteDialog == null) {
Builder builder = new Builder(getContext(), R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_delete_message);
builder.setNegativeButton(R.string.confirm_no, null);
builder.setPositiveButton(R.string.confirm_yes, this);
deleteDialog = builder.create();
}
if (!deleteDialog.isShowing()) {
deleteDialog.show();
}
@ -177,13 +170,10 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE && dialog == deleteDialog) {
messageTask = new MessageListLoader(MessageFragment.this, MessageListLoader.Action.DEL);
messageTask.execute(deleteId);
}
public void onConfirm(DialogBuilder.DialogType type) {
messageTask = new MessageListLoader(MessageFragment.this, MessageListLoader.Action.DEL);
messageTask.execute(deleteId);
}
/**

View File

@ -2,7 +2,6 @@ package org.nuclearfog.twidda.fragment;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -12,7 +11,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@ -27,24 +25,27 @@ import org.nuclearfog.twidda.adapter.UserAdapter.UserClickListener;
import org.nuclearfog.twidda.backend.UserListLoader;
import org.nuclearfog.twidda.backend.UserListLoader.Action;
import org.nuclearfog.twidda.backend.UserListManager;
import org.nuclearfog.twidda.backend.UserListManager.ListManagerCallback;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.holder.TwitterUserList;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.backend.utils.DialogBuilder;
import org.nuclearfog.twidda.backend.utils.DialogBuilder.OnDialogClick;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.AsyncTask.Status.FINISHED;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
import static org.nuclearfog.twidda.backend.UserListLoader.NO_CURSOR;
import static org.nuclearfog.twidda.backend.UserListManager.Action.DEL_USER;
import static org.nuclearfog.twidda.backend.utils.DialogBuilder.DialogType.DEL_USER_LIST;
/**
* Fragment class for lists a list of users
*/
public class UserFragment extends Fragment implements OnRefreshListener, UserClickListener,
FragmentChangeObserver, DialogInterface.OnClickListener, UserListManager.ListManagerCallback {
FragmentChangeObserver, OnDialogClick, ListManagerCallback {
/**
* key to set the type of user list to show
@ -106,6 +107,7 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
search = param.getString(KEY_FRAG_USER_SEARCH, "");
delUser = param.getBoolean(KEY_FRAG_DEL_USER, false);
}
deleteDialog = DialogBuilder.create(requireContext(), DEL_USER_LIST, this);
reload = new SwipeRefreshLayout(context);
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reload.setOnRefreshListener(this);
@ -159,13 +161,7 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
@Override
public void onDelete(String name) {
deleteUserName = name;
if (deleteDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext(), R.style.ConfirmDialog);
builder.setMessage(R.string.confirm_remove_user_from_list);
builder.setPositiveButton(android.R.string.ok, this);
builder.setNegativeButton(android.R.string.cancel, null);
deleteDialog = builder.show();
} else if (!deleteDialog.isShowing()) {
if (!deleteDialog.isShowing()) {
deleteDialog.show();
}
}
@ -189,8 +185,8 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE && dialog == deleteDialog) {
public void onConfirm(DialogBuilder.DialogType type) {
if (type == DEL_USER_LIST) {
if (listTask == null || listTask.getStatus() != RUNNING) {
listTask = new UserListManager(id, DEL_USER, requireContext(), this);
listTask.execute(deleteUserName);

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/CardViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@ -94,8 +95,10 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawablePadding="@dimen/tweetitem_padding_drawable"
android:singleLine="true"
android:textSize="@dimen/tweetitem_textsize_button" />
android:textSize="@dimen/tweetitem_textsize_button"
app:drawableStartCompat="@drawable/retweet" />
<TextView
android:id="@+id/retweet_number"

View File

@ -93,7 +93,7 @@
android:layout_margin="@dimen/settings_button_margin"
android:layout_weight="1"
android:singleLine="true"
android:text="@string/popup" />
android:text="@string/settings_button_popup" />
<Button
android:id="@+id/highlight_color"

View File

@ -93,10 +93,8 @@
<string name="proxy_port">Port</string>
<string name="proxy_settings">Proxy Einstellung</string>
<string name="login_verifier">Login</string>
<string name="popup">Popup</string>
<string name="settings_button_popup">Popup</string>
<string name="login_pin">PIN eingeben</string>
<string name="userlist_following">Following</string>
<string name="userlist_follower">Follower</string>
<string name="enter_proxy">Proxy IP Adresse</string>
<string name="edit_proxyuser">Nutzername</string>
<string name="app_name">Shitter</string>
@ -143,7 +141,7 @@
<string name="settings_enable_proxy">Proxy aktivieren</string>
<string name="settings_enable_proxy_auth">Aktiviere Proxy Authentifizierung</string>
<string name="info_wrong_proxy_settings">Falsche Proxy Einstellungen</string>
<string name="confirm_discard_proxy_changes">Einstellungen Verwerfen</string>
<string name="confirm_discard_proxy_changes">verwerfen</string>
<string name="error_open_link">Link konnte nicht geöffnet werden!</string>
<string name="tweet_sensitive_media">sensible inhalte</string>
<string name="error_image_exists">Fehler, Bild ist bereits vorhanden!</string>

View File

@ -6,12 +6,12 @@
<string name="login_verifier">login</string>
<string name="tweet">Tweet</string>
<string name="settings">Settings</string>
<string name="userlist_following">Following</string>
<string name="userlist_follower">Follower</string>
<string name="userlist_following" translatable="false">Following</string>
<string name="userlist_follower" translatable="false">Follower</string>
<string name="userlist_retweet">Tweet retweeted by</string>
<string name="background">Background</string>
<string name="settings_font">Font</string>
<string name="popup">Popup</string>
<string name="settings_button_popup">Popup</string>
<string name="highlight">Highlight</string>
<string name="settings_list_size">List size</string>
<string name="user_follow">follow</string>
@ -87,7 +87,7 @@
<string name="item_image_save">save image</string>
<string name="settings_enable_proxy">enable proxy</string>
<string name="settings_enable_proxy_auth">enable proxy authentication</string>
<string name="confirm_discard_proxy_changes">Discard changes</string>
<string name="confirm_discard_proxy_changes">discard</string>
<string name="tweet_sensitive_media">sensitive media</string>
<string name="login_info">3 steps to login</string>
<string name="login_first_opt" translatable="false">1.</string>