created dialog builder class, dialog bug fix
This commit is contained in:
parent
59dcdff966
commit
a2e07cd593
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue