removed UI access from AsyncTask
This commit is contained in:
parent
94dd7b64b5
commit
e7077416b3
|
@ -17,7 +17,7 @@ import android.widget.ProgressBar;
|
|||
import android.widget.Toast;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
@ -225,16 +225,23 @@ public class MediaViewer extends AppCompatActivity implements OnImageClickListen
|
|||
}
|
||||
|
||||
|
||||
public void setImage(@Nullable Bitmap image) {
|
||||
if (image != null) {
|
||||
if (adapter.isEmpty()) {
|
||||
changeImage(image);
|
||||
image_progress.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
adapter.addLast(image);
|
||||
} else {
|
||||
adapter.disableLoading();
|
||||
public void onSuccess() {
|
||||
adapter.disableLoading();
|
||||
}
|
||||
|
||||
|
||||
public void onError() {
|
||||
Toast.makeText(this, R.string.error_image_download, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
public void setImage(@NonNull Bitmap image) {
|
||||
if (adapter.isEmpty()) {
|
||||
changeImage(image);
|
||||
image_progress.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
adapter.addLast(image);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnDismissListener;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Build;
|
||||
|
@ -29,13 +31,14 @@ import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
|||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
||||
import static android.view.Window.FEATURE_NO_TITLE;
|
||||
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_STORAGE;
|
||||
|
||||
|
||||
public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
||||
public class MessagePopup extends AppCompatActivity implements OnClickListener, OnDismissListener {
|
||||
|
||||
public static final String KEY_DM_PREFIX = "dm_prefix";
|
||||
private static final String[] PERM_READ = {Manifest.permission.READ_EXTERNAL_STORAGE};
|
||||
|
@ -44,6 +47,7 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
|||
|
||||
private MessageUploader messageAsync;
|
||||
private EditText receiver, text;
|
||||
private Dialog loadingCircle;
|
||||
private String mediaPath = "";
|
||||
|
||||
|
||||
|
@ -56,6 +60,9 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
|||
View media = findViewById(R.id.dm_media);
|
||||
receiver = findViewById(R.id.dm_receiver);
|
||||
text = findViewById(R.id.dm_text);
|
||||
loadingCircle = new Dialog(this, R.style.LoadingDialog);
|
||||
View load = View.inflate(this, R.layout.item_load, null);
|
||||
View cancelButton = load.findViewById(R.id.kill_button);
|
||||
|
||||
Bundle param = getIntent().getExtras();
|
||||
if (param != null && param.containsKey(KEY_DM_PREFIX)) {
|
||||
|
@ -67,8 +74,14 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
|||
root.setBackgroundColor(settings.getPopupColor());
|
||||
FontTool.setViewFontAndColor(settings, root);
|
||||
|
||||
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
|
||||
loadingCircle.setCanceledOnTouchOutside(false);
|
||||
loadingCircle.setContentView(load);
|
||||
|
||||
send.setOnClickListener(this);
|
||||
media.setOnClickListener(this);
|
||||
cancelButton.setOnClickListener(this);
|
||||
loadingCircle.setOnDismissListener(this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -124,25 +137,53 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v.getId() == R.id.dm_send) {
|
||||
String username = receiver.getText().toString();
|
||||
String message = text.getText().toString();
|
||||
if (!username.trim().isEmpty() && (!message.trim().isEmpty() || !mediaPath.isEmpty())) {
|
||||
MessageHolder messageHolder = new MessageHolder(username, message, mediaPath);
|
||||
messageAsync = new MessageUploader(this, messageHolder);
|
||||
messageAsync.execute();
|
||||
} else {
|
||||
Toast.makeText(this, R.string.error_dm, LENGTH_SHORT).show();
|
||||
}
|
||||
} else if (v.getId() == R.id.dm_media) {
|
||||
if (mediaPath.trim().isEmpty())
|
||||
getMedia();
|
||||
else {
|
||||
Intent image = new Intent(this, MediaViewer.class);
|
||||
image.putExtra(KEY_MEDIA_LINK, new String[]{mediaPath});
|
||||
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMG_STORAGE);
|
||||
startActivity(image);
|
||||
}
|
||||
switch (v.getId()) {
|
||||
case R.id.dm_send:
|
||||
String username = receiver.getText().toString();
|
||||
String message = text.getText().toString();
|
||||
if (!username.trim().isEmpty() && (!message.trim().isEmpty() || !mediaPath.isEmpty())) {
|
||||
MessageHolder messageHolder = new MessageHolder(username, message, mediaPath);
|
||||
messageAsync = new MessageUploader(this, messageHolder);
|
||||
messageAsync.execute();
|
||||
} else {
|
||||
Toast.makeText(this, R.string.error_dm, LENGTH_SHORT).show();
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.dm_media:
|
||||
if (mediaPath.trim().isEmpty())
|
||||
getMedia();
|
||||
else {
|
||||
Intent image = new Intent(this, MediaViewer.class);
|
||||
image.putExtra(KEY_MEDIA_LINK, new String[]{mediaPath});
|
||||
image.putExtra(KEY_MEDIA_TYPE, MEDIAVIEWER_IMG_STORAGE);
|
||||
startActivity(image);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.kill_button:
|
||||
loadingCircle.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (messageAsync != null && messageAsync.getStatus() == RUNNING) {
|
||||
messageAsync.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* enable or disable loading dialog
|
||||
*
|
||||
* @param enable true to enable dialog
|
||||
*/
|
||||
public void setLoading(boolean enable) {
|
||||
if (enable) {
|
||||
loadingCircle.show();
|
||||
} else {
|
||||
loadingCircle.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,7 +197,6 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
|||
|
||||
/**
|
||||
* called when an error occurs
|
||||
*
|
||||
* @param error Engine Exception
|
||||
*/
|
||||
public void onError(EngineException error) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnDismissListener;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
|
@ -39,11 +41,12 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
|||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
||||
import static android.view.View.INVISIBLE;
|
||||
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;
|
||||
|
||||
|
||||
public class ProfileEditor extends AppCompatActivity implements OnClickListener {
|
||||
public class ProfileEditor extends AppCompatActivity implements OnClickListener, OnDismissListener {
|
||||
|
||||
private static final String[] PERM_READ = {READ_EXTERNAL_STORAGE};
|
||||
private static final String[] MEDIA_MODE = {MediaStore.Images.Media.DATA};
|
||||
|
@ -55,6 +58,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 String profileLink, bannerLink;
|
||||
private boolean userSet = false;
|
||||
|
||||
|
@ -71,16 +75,27 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener
|
|||
link = findViewById(R.id.edit_link);
|
||||
loc = findViewById(R.id.edit_location);
|
||||
bio = findViewById(R.id.edit_bio);
|
||||
loadingCircle = new Dialog(this, R.style.LoadingDialog);
|
||||
View load = View.inflate(this, R.layout.item_load, null);
|
||||
View cancelButton = load.findViewById(R.id.kill_button);
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setTitle(R.string.page_profile_edior);
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(this);
|
||||
FontTool.setViewFontAndColor(settings, root);
|
||||
root.setBackgroundColor(settings.getBackgroundColor());
|
||||
|
||||
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
|
||||
loadingCircle.setCanceledOnTouchOutside(false);
|
||||
loadingCircle.setContentView(load);
|
||||
|
||||
profile_image.setOnClickListener(this);
|
||||
profile_banner.setOnClickListener(this);
|
||||
add_banner_btn.setOnClickListener(this);
|
||||
cancelButton.setOnClickListener(this);
|
||||
loadingCircle.setOnDismissListener(this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -192,6 +207,30 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener
|
|||
case R.id.edit_banner:
|
||||
getMedia(REQ_PROFILE_BANNER);
|
||||
break;
|
||||
|
||||
case R.id.kill_button:
|
||||
loadingCircle.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (editorAsync != null && editorAsync.getStatus() == RUNNING) {
|
||||
editorAsync.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* enable or disable loading dialog
|
||||
*
|
||||
* @param enable true to enable dialog
|
||||
*/
|
||||
public void setLoading(boolean enable) {
|
||||
if (enable) {
|
||||
loadingCircle.show();
|
||||
} else {
|
||||
loadingCircle.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnDismissListener;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.location.Location;
|
||||
|
@ -42,6 +44,7 @@ import static android.os.AsyncTask.Status.RUNNING;
|
|||
import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
||||
import static android.view.View.INVISIBLE;
|
||||
import static android.view.View.VISIBLE;
|
||||
import static android.view.Window.FEATURE_NO_TITLE;
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK;
|
||||
|
@ -51,7 +54,7 @@ import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMG_STORAGE
|
|||
import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_VIDEO_STORAGE;
|
||||
|
||||
|
||||
public class TweetPopup extends AppCompatActivity implements OnClickListener, LocationListener {
|
||||
public class TweetPopup extends AppCompatActivity implements OnClickListener, LocationListener, OnDismissListener {
|
||||
|
||||
public static final String KEY_TWEETPOPUP_REPLYID = "tweet_replyID";
|
||||
public static final String KEY_TWEETPOPUP_PREFIX = "tweet_prefix";
|
||||
|
@ -76,6 +79,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
private Location location;
|
||||
private List<String> mediaPath;
|
||||
private View mediaBtn, previewBtn, locationProg, locationBtn;
|
||||
private Dialog loadingCircle;
|
||||
private TextView imgCount;
|
||||
private EditText tweetText;
|
||||
private String addition = "";
|
||||
|
@ -95,7 +99,13 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
tweetText = findViewById(R.id.tweet_input);
|
||||
imgCount = findViewById(R.id.imgcount);
|
||||
locationProg = findViewById(R.id.location_progress);
|
||||
loadingCircle = new Dialog(this, R.style.LoadingDialog);
|
||||
View load = View.inflate(this, R.layout.item_load, null);
|
||||
View cancelButton = load.findViewById(R.id.kill_button);
|
||||
|
||||
mLocation = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
GlobalSettings settings = GlobalSettings.getInstance(this);
|
||||
mediaPath = new LinkedList<>();
|
||||
|
||||
Bundle param = getIntent().getExtras();
|
||||
if (param != null) {
|
||||
|
@ -103,8 +113,9 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
addition = param.getString(KEY_TWEETPOPUP_PREFIX, "") + " ";
|
||||
}
|
||||
|
||||
mediaPath = new LinkedList<>();
|
||||
GlobalSettings settings = GlobalSettings.getInstance(this);
|
||||
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
|
||||
loadingCircle.setCanceledOnTouchOutside(false);
|
||||
loadingCircle.setContentView(load);
|
||||
FontTool.setViewFontAndColor(settings, root);
|
||||
root.setBackgroundColor(settings.getPopupColor());
|
||||
tweetText.append(addition);
|
||||
|
@ -114,6 +125,8 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
mediaBtn.setOnClickListener(this);
|
||||
previewBtn.setOnClickListener(this);
|
||||
locationBtn.setOnClickListener(this);
|
||||
cancelButton.setOnClickListener(this);
|
||||
loadingCircle.setOnDismissListener(this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -258,6 +271,10 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
case R.id.tweet_add_location:
|
||||
getLocation();
|
||||
break;
|
||||
|
||||
case R.id.kill_button:
|
||||
loadingCircle.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,6 +306,26 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo
|
|||
locationBtn.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (uploaderAsync != null && uploaderAsync.getStatus() == RUNNING) {
|
||||
uploaderAsync.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* enable or disable loading dialog
|
||||
*
|
||||
* @param enable true to enable dialog
|
||||
*/
|
||||
public void setLoading(boolean enable) {
|
||||
if (enable) {
|
||||
loadingCircle.show();
|
||||
} else {
|
||||
loadingCircle.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* called after sending tweet
|
||||
*/
|
||||
|
|
|
@ -3,11 +3,9 @@ package org.nuclearfog.twidda.backend;
|
|||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.AsyncTask;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.MediaViewer;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -26,7 +24,7 @@ public class ImageLoader extends AsyncTask<String, Bitmap, Boolean> {
|
|||
}
|
||||
|
||||
private WeakReference<MediaViewer> ui;
|
||||
private Action action;
|
||||
private final Action action;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -82,10 +80,9 @@ public class ImageLoader extends AsyncTask<String, Bitmap, Boolean> {
|
|||
protected void onPostExecute(Boolean success) {
|
||||
if (ui.get() != null) {
|
||||
if (success) {
|
||||
ui.get().setImage(null);
|
||||
ui.get().onSuccess();
|
||||
} else {
|
||||
Toast.makeText(ui.get(), R.string.error_image_download, Toast.LENGTH_SHORT).show();
|
||||
ui.get().finish();
|
||||
ui.get().onError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import java.util.List;
|
|||
*/
|
||||
public class MessageListLoader extends AsyncTask<Long, Void, List<Message>> {
|
||||
|
||||
public enum Mode {
|
||||
public enum Action {
|
||||
DB,
|
||||
LOAD,
|
||||
DEL
|
||||
|
@ -28,18 +28,18 @@ public class MessageListLoader extends AsyncTask<Long, Void, List<Message>> {
|
|||
|
||||
@Nullable
|
||||
private EngineException twException;
|
||||
private Mode mode;
|
||||
private WeakReference<MessageFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private AppDatabase db;
|
||||
private Action action;
|
||||
private long id;
|
||||
|
||||
|
||||
public MessageListLoader(MessageFragment fragment, Mode mode) {
|
||||
public MessageListLoader(MessageFragment fragment, Action action) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
db = new AppDatabase(fragment.getContext());
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
this.mode = mode;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
|
||||
|
@ -55,7 +55,7 @@ public class MessageListLoader extends AsyncTask<Long, Void, List<Message>> {
|
|||
protected List<Message> doInBackground(Long[] param) {
|
||||
long messageId = 0;
|
||||
try {
|
||||
switch (mode) {
|
||||
switch (action) {
|
||||
case DB:
|
||||
List<Message> messages = db.getMessages();
|
||||
if (messages.isEmpty()) {
|
||||
|
@ -98,7 +98,7 @@ public class MessageListLoader extends AsyncTask<Long, Void, List<Message>> {
|
|||
if (twException.statusNotFound()) {
|
||||
ui.get().removeItem(id);
|
||||
}
|
||||
} else if (mode == Mode.DEL) {
|
||||
} else if (action == Action.DEL) {
|
||||
ui.get().removeItem(id);
|
||||
}
|
||||
ui.get().setRefresh(false);
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.MessagePopup;
|
||||
import org.nuclearfog.twidda.backend.engine.EngineException;
|
||||
import org.nuclearfog.twidda.backend.engine.TwitterEngine;
|
||||
|
@ -27,7 +21,6 @@ public class MessageUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
@Nullable
|
||||
private EngineException twException;
|
||||
private WeakReference<MessagePopup> ui;
|
||||
private WeakReference<Dialog> popup;
|
||||
private TwitterEngine mTwitter;
|
||||
private MessageHolder message;
|
||||
|
||||
|
@ -38,40 +31,16 @@ public class MessageUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
* @param message message to send
|
||||
*/
|
||||
public MessageUploader(@NonNull MessagePopup context, MessageHolder message) {
|
||||
ui = new WeakReference<>(context);
|
||||
popup = new WeakReference<>(new Dialog(context));
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
ui = new WeakReference<>(context);
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
if (popup.get() != null && ui.get() != null) {
|
||||
final Dialog window = popup.get();
|
||||
window.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
window.setCanceledOnTouchOutside(false);
|
||||
if (window.getWindow() != null)
|
||||
window.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
|
||||
View load = View.inflate(ui.get(), R.layout.item_load, null);
|
||||
View cancelButton = load.findViewById(R.id.kill_button);
|
||||
cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
window.dismiss();
|
||||
}
|
||||
});
|
||||
window.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (getStatus() == Status.RUNNING) {
|
||||
Toast.makeText(ui.get(), android.R.string.cancel, Toast.LENGTH_SHORT).show();
|
||||
cancel(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
window.setContentView(load);
|
||||
window.show();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,8 +61,8 @@ public class MessageUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean success) {
|
||||
if (ui.get() != null && popup.get() != null) {
|
||||
popup.get().dismiss();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(false);
|
||||
if (success) {
|
||||
ui.get().onSuccess();
|
||||
} else if (twException != null) {
|
||||
|
@ -101,11 +70,4 @@ public class MessageUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
if (popup.get() != null)
|
||||
popup.get().dismiss();
|
||||
}
|
||||
}
|
|
@ -27,11 +27,12 @@ public class ProfileLoader extends AsyncTask<Long, TwitterUser, UserProperties>
|
|||
ACTION_MUTE
|
||||
}
|
||||
|
||||
private final Action action;
|
||||
@Nullable
|
||||
private EngineException twException;
|
||||
private WeakReference<UserProfile> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private EngineException twException;
|
||||
private AppDatabase db;
|
||||
private final Action action;
|
||||
|
||||
|
||||
public ProfileLoader(@NonNull UserProfile context, Action action) {
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.view.Window;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
|
@ -17,7 +13,6 @@ import org.nuclearfog.twidda.database.AppDatabase;
|
|||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
||||
/**
|
||||
* Task for editing profile information and updating images
|
||||
*
|
||||
|
@ -25,17 +20,16 @@ import java.lang.ref.WeakReference;
|
|||
*/
|
||||
public class ProfileUpdater extends AsyncTask<Void, Void, TwitterUser> {
|
||||
|
||||
@Nullable
|
||||
private EngineException twException;
|
||||
private WeakReference<ProfileEditor> ui;
|
||||
private WeakReference<Dialog> popup;
|
||||
private UserHolder userHolder;
|
||||
private TwitterEngine mTwitter;
|
||||
private EngineException twException;
|
||||
private AppDatabase db;
|
||||
|
||||
|
||||
public ProfileUpdater(ProfileEditor context) {
|
||||
ui = new WeakReference<>(context);
|
||||
popup = new WeakReference<>(new Dialog(context));
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
db = new AppDatabase(ui.get());
|
||||
}
|
||||
|
@ -49,23 +43,8 @@ public class ProfileUpdater extends AsyncTask<Void, Void, TwitterUser> {
|
|||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
if (popup.get() != null && ui.get() != null) {
|
||||
Dialog window = popup.get();
|
||||
window.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
window.setCanceledOnTouchOutside(false);
|
||||
window.setContentView(new ProgressBar(ui.get()));
|
||||
if (window.getWindow() != null)
|
||||
window.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
|
||||
window.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (getStatus() == Status.RUNNING) {
|
||||
cancel(true);
|
||||
ui.get().finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
window.show();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,8 +69,8 @@ public class ProfileUpdater extends AsyncTask<Void, Void, TwitterUser> {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(@Nullable TwitterUser user) {
|
||||
if (ui.get() != null && popup.get() != null) {
|
||||
popup.get().dismiss();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(false);
|
||||
if (twException != null) {
|
||||
ui.get().setError(twException);
|
||||
} else if (user != null) {
|
||||
|
|
|
@ -13,6 +13,8 @@ import org.nuclearfog.twidda.fragment.TweetFragment;
|
|||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.LIST_EMPTY;
|
||||
|
||||
|
||||
/**
|
||||
* Background task to download a list of tweets from different sources
|
||||
|
@ -21,7 +23,7 @@ import java.util.List;
|
|||
*/
|
||||
public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
||||
|
||||
public enum Mode {
|
||||
public enum Action {
|
||||
TL_HOME,
|
||||
TL_MENT,
|
||||
USR_TWEETS,
|
||||
|
@ -37,16 +39,16 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
private WeakReference<TweetFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private AppDatabase db;
|
||||
private Mode mode;
|
||||
private Action action;
|
||||
private long sinceId;
|
||||
|
||||
|
||||
public TweetListLoader(TweetFragment fragment, Mode mode) {
|
||||
public TweetListLoader(TweetFragment fragment, Action action) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
db = new AppDatabase(fragment.getContext());
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
sinceId = fragment.getTopId();
|
||||
this.mode = mode;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
|
||||
|
@ -62,10 +64,10 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
protected List<Tweet> doInBackground(Object[] param) {
|
||||
List<Tweet> tweets = null;
|
||||
try {
|
||||
switch (mode) {
|
||||
switch (action) {
|
||||
case TL_HOME:
|
||||
int page = (int) param[0];
|
||||
if (sinceId == 0) {
|
||||
if (sinceId == LIST_EMPTY) {
|
||||
tweets = db.getHomeTimeline();
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getHome(page, sinceId);
|
||||
|
@ -79,7 +81,7 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
|
||||
case TL_MENT:
|
||||
page = (int) param[0];
|
||||
if (sinceId == 0) {
|
||||
if (sinceId == LIST_EMPTY) {
|
||||
tweets = db.getMentions();
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getMention(page, sinceId);
|
||||
|
@ -94,7 +96,7 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
case USR_TWEETS:
|
||||
long id = (long) param[0];
|
||||
page = (int) param[1];
|
||||
if (sinceId == 0) {
|
||||
if (sinceId == LIST_EMPTY) {
|
||||
tweets = db.getUserTweets(id);
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getUserTweets(id, sinceId, page);
|
||||
|
@ -109,7 +111,7 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
case USR_FAVORS:
|
||||
id = (long) param[0];
|
||||
page = (int) param[1];
|
||||
if (sinceId == 0) {
|
||||
if (sinceId == LIST_EMPTY) {
|
||||
tweets = db.getUserFavs(id);
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getUserFavs(id, page);
|
||||
|
@ -129,7 +131,7 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
case TWEET_ANS:
|
||||
id = (long) param[0];
|
||||
String search = (String) param[1];
|
||||
if (sinceId == 0) {
|
||||
if (sinceId == LIST_EMPTY) {
|
||||
tweets = db.getAnswers(id);
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getAnswers(search, id, sinceId);
|
||||
|
@ -168,7 +170,7 @@ public class TweetListLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
|||
if (ui.get() != null) {
|
||||
ui.get().setRefresh(false);
|
||||
if (tweets != null) {
|
||||
if (mode == Mode.USR_FAVORS)
|
||||
if (action == Action.USR_FAVORS)
|
||||
ui.get().add(tweets);
|
||||
else
|
||||
ui.get().addTop(tweets);
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.TweetPopup;
|
||||
import org.nuclearfog.twidda.backend.engine.EngineException;
|
||||
import org.nuclearfog.twidda.backend.engine.TwitterEngine;
|
||||
|
@ -17,9 +12,6 @@ import org.nuclearfog.twidda.backend.items.TweetHolder;
|
|||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static android.view.Window.FEATURE_NO_TITLE;
|
||||
|
||||
/**
|
||||
* Background task for uploading tweet
|
||||
* @see TweetPopup
|
||||
|
@ -29,7 +21,6 @@ public class TweetUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
@Nullable
|
||||
private EngineException twException;
|
||||
private WeakReference<TweetPopup> ui;
|
||||
private WeakReference<Dialog> popup;
|
||||
private TwitterEngine mTwitter;
|
||||
private TweetHolder tweet;
|
||||
|
||||
|
@ -41,7 +32,6 @@ public class TweetUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
*/
|
||||
public TweetUploader(@NonNull TweetPopup context, TweetHolder tweet) {
|
||||
ui = new WeakReference<>(context);
|
||||
popup = new WeakReference<>(new Dialog(context));
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
this.tweet = tweet;
|
||||
}
|
||||
|
@ -49,32 +39,8 @@ public class TweetUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
if (popup.get() != null && ui.get() != null) {
|
||||
final Dialog loadingCircle = popup.get();
|
||||
loadingCircle.requestWindowFeature(FEATURE_NO_TITLE);
|
||||
loadingCircle.setCanceledOnTouchOutside(false);
|
||||
if (loadingCircle.getWindow() != null)
|
||||
loadingCircle.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
|
||||
View load = View.inflate(ui.get(), R.layout.item_load, null);
|
||||
View cancelButton = load.findViewById(R.id.kill_button);
|
||||
loadingCircle.setContentView(load);
|
||||
|
||||
cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
loadingCircle.dismiss();
|
||||
}
|
||||
});
|
||||
loadingCircle.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
if (ui.get() != null && getStatus() == RUNNING) {
|
||||
Toast.makeText(ui.get(), android.R.string.cancel, Toast.LENGTH_SHORT).show();
|
||||
cancel(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
loadingCircle.show();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,8 +62,8 @@ public class TweetUploader extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean success) {
|
||||
if (ui.get() != null && popup.get() != null) {
|
||||
popup.get().dismiss();
|
||||
if (ui.get() != null) {
|
||||
ui.get().setLoading(false);
|
||||
if (success) {
|
||||
ui.get().onSuccess();
|
||||
} else {
|
||||
|
|
|
@ -31,7 +31,7 @@ public class TwitterListLoader extends AsyncTask<Long, Void, List<TwitterList>>
|
|||
private EngineException twException;
|
||||
private WeakReference<ListFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private Action action;
|
||||
private final Action action;
|
||||
|
||||
public TwitterListLoader(ListFragment frag, Action action) {
|
||||
mTwitter = TwitterEngine.getInstance(frag.getContext());
|
||||
|
|
|
@ -33,13 +33,13 @@ public class UserListLoader extends AsyncTask<Object, Void, List<TwitterUser>> {
|
|||
private EngineException twException;
|
||||
private WeakReference<UserFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private Mode mode;
|
||||
private final Mode action;
|
||||
|
||||
|
||||
public UserListLoader(UserFragment fragment, Mode mode) {
|
||||
public UserListLoader(UserFragment fragment, Mode action) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
this.mode = mode;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class UserListLoader extends AsyncTask<Object, Void, List<TwitterUser>> {
|
|||
@Override
|
||||
protected List<TwitterUser> doInBackground(Object[] param) {
|
||||
try {
|
||||
switch (mode) {
|
||||
switch (action) {
|
||||
case FOLLOWS:
|
||||
return mTwitter.getFollower((long) param[0]);
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ import org.nuclearfog.twidda.activity.UserProfile;
|
|||
import org.nuclearfog.twidda.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter.OnItemSelected;
|
||||
import org.nuclearfog.twidda.backend.MessageListLoader;
|
||||
import org.nuclearfog.twidda.backend.MessageListLoader.Mode;
|
||||
import org.nuclearfog.twidda.backend.TrendListLoader;
|
||||
import org.nuclearfog.twidda.backend.engine.EngineException;
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
|
@ -71,7 +70,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
public void onStart() {
|
||||
super.onStart();
|
||||
if (messageTask == null)
|
||||
load(Mode.DB);
|
||||
load(MessageListLoader.Action.DB);
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,7 +85,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
@Override
|
||||
public void onRefresh() {
|
||||
if (messageTask != null && messageTask.getStatus() != RUNNING)
|
||||
load(Mode.LOAD);
|
||||
load(MessageListLoader.Action.LOAD);
|
||||
}
|
||||
|
||||
|
||||
|
@ -136,7 +135,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
confirmDialog.setPositiveButton(R.string.confirm_yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
messageTask = new MessageListLoader(MessageFragment.this, Mode.DEL);
|
||||
messageTask = new MessageListLoader(MessageFragment.this, MessageListLoader.Action.DEL);
|
||||
messageTask.execute(message.getId());
|
||||
}
|
||||
});
|
||||
|
@ -209,7 +208,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
|
|||
}
|
||||
|
||||
|
||||
private void load(Mode m) {
|
||||
private void load(MessageListLoader.Action m) {
|
||||
messageTask = new MessageListLoader(this, m);
|
||||
messageTask.execute();
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
|||
import org.nuclearfog.twidda.adapter.TweetAdapter;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter.TweetClickListener;
|
||||
import org.nuclearfog.twidda.backend.TweetListLoader;
|
||||
import org.nuclearfog.twidda.backend.TweetListLoader.Mode;
|
||||
import org.nuclearfog.twidda.backend.TweetListLoader.Action;
|
||||
import org.nuclearfog.twidda.backend.engine.EngineException;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
@ -49,6 +49,7 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
public static final int TWEET_FRAG_ANSWER = 4;
|
||||
public static final int TWEET_FRAG_SEARCH = 5;
|
||||
public static final int TWEET_FRAG_LIST = 6;
|
||||
public static final int LIST_EMPTY = 1;
|
||||
|
||||
private static final int REQUEST_TWEET_CHANGED = 3;
|
||||
public static final int RETURN_TWEET_CHANGED = 4;
|
||||
|
@ -162,13 +163,12 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
|
||||
/**
|
||||
* get Id of the first Tweet
|
||||
*
|
||||
* @return ID of the first tweet or zero if list is empty
|
||||
* @return ID of the first tweet or {@link #LIST_EMPTY} if list is empty
|
||||
*/
|
||||
public long getTopId() {
|
||||
if (adapter != null && !adapter.isEmpty())
|
||||
return adapter.getItemId(0);
|
||||
return 0;
|
||||
return LIST_EMPTY;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -230,41 +230,41 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC
|
|||
private void load() {
|
||||
switch (mode) {
|
||||
case TWEET_FRAG_HOME:
|
||||
tweetTask = new TweetListLoader(this, Mode.TL_HOME);
|
||||
tweetTask = new TweetListLoader(this, TweetListLoader.Action.TL_HOME);
|
||||
tweetTask.execute(1);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_MENT:
|
||||
tweetTask = new TweetListLoader(this, Mode.TL_MENT);
|
||||
tweetTask = new TweetListLoader(this, Action.TL_MENT);
|
||||
tweetTask.execute(1);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_TWEETS:
|
||||
tweetTask = new TweetListLoader(this, Mode.USR_TWEETS);
|
||||
tweetTask = new TweetListLoader(this, TweetListLoader.Action.USR_TWEETS);
|
||||
tweetTask.execute(id, 1);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_FAVORS:
|
||||
tweetTask = new TweetListLoader(this, Mode.USR_FAVORS);
|
||||
tweetTask = new TweetListLoader(this, Action.USR_FAVORS);
|
||||
tweetTask.execute(id, 1);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_ANSWER:
|
||||
boolean loadAnswer = settings.getAnswerLoad();
|
||||
if (tweetTask != null || loadAnswer)
|
||||
tweetTask = new TweetListLoader(this, Mode.TWEET_ANS);
|
||||
tweetTask = new TweetListLoader(this, Action.TWEET_ANS);
|
||||
else
|
||||
tweetTask = new TweetListLoader(this, Mode.DB_ANS);
|
||||
tweetTask = new TweetListLoader(this, Action.DB_ANS);
|
||||
tweetTask.execute(id, search);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_SEARCH:
|
||||
tweetTask = new TweetListLoader(this, Mode.TWEET_SEARCH);
|
||||
tweetTask = new TweetListLoader(this, Action.TWEET_SEARCH);
|
||||
tweetTask.execute(search);
|
||||
break;
|
||||
|
||||
case TWEET_FRAG_LIST:
|
||||
tweetTask = new TweetListLoader(this, Mode.LIST);
|
||||
tweetTask = new TweetListLoader(this, TweetListLoader.Action.LIST);
|
||||
tweetTask.execute(id, 1);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
<ProgressBar
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/kill_button"
|
||||
|
|
|
@ -28,6 +28,12 @@
|
|||
<item name="android:backgroundDimEnabled">true</item>
|
||||
</style>
|
||||
|
||||
<style name="LoadingDialog">
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:background">@android:color/transparent</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
</style>
|
||||
|
||||
<style name="TransactionPending" parent="@android:style/Animation">
|
||||
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
|
||||
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
|
||||
|
|
Loading…
Reference in New Issue