bug fix
This commit is contained in:
parent
e115828fb5
commit
e920eb1547
|
@ -5,7 +5,7 @@
|
|||
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
|
||||
</configurations>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.widget.Toast;
|
|||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.window.MessagePopup;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
|
|
@ -19,6 +19,7 @@ import androidx.annotation.NonNull;
|
|||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.window.MediaViewer;
|
||||
|
|
|
@ -16,6 +16,7 @@ import com.squareup.picasso.Picasso;
|
|||
|
||||
import org.nuclearfog.tag.Tagger;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
|
|
@ -18,6 +18,9 @@ import com.squareup.picasso.Picasso;
|
|||
|
||||
import org.nuclearfog.tag.Tagger;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.helper.FilenameTools;
|
||||
import org.nuclearfog.twidda.backend.helper.FilenameTools.FileType;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
@ -32,6 +35,7 @@ import java.text.SimpleDateFormat;
|
|||
import twitter4j.TwitterException;
|
||||
|
||||
import static android.view.View.VISIBLE;
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.RETURN_TWEET_CHANGED;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.KEY_MEDIA_LINK;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.KEY_MEDIA_TYPE;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.ANGIF;
|
||||
|
@ -39,7 +43,6 @@ import static org.nuclearfog.twidda.window.MediaViewer.MediaType.IMAGE;
|
|||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.VIDEO;
|
||||
import static org.nuclearfog.twidda.window.TweetDetail.KEY_TWEET_ID;
|
||||
import static org.nuclearfog.twidda.window.TweetDetail.KEY_TWEET_NAME;
|
||||
import static org.nuclearfog.twidda.window.TweetDetail.STAT_CHANGED;
|
||||
|
||||
|
||||
public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
||||
|
@ -177,22 +180,10 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
scrName.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
|
||||
}
|
||||
if (tweet.hasMedia()) {
|
||||
String ext = "";
|
||||
String path = tweet.getMediaLinks()[0];
|
||||
int start = path.lastIndexOf(".") + 1;
|
||||
if (start > 0 && start < path.length()) {
|
||||
int end = path.lastIndexOf("?");
|
||||
if (end > 0)
|
||||
ext = path.substring(start, end);
|
||||
else
|
||||
ext = path.substring(start);
|
||||
ext = ext.toLowerCase();
|
||||
}
|
||||
|
||||
String firstLink = tweet.getMediaLinks()[0];
|
||||
FileType ext = FilenameTools.getFileType(firstLink);
|
||||
switch (ext) {
|
||||
case "png":
|
||||
case "jpg":
|
||||
case "jpeg":
|
||||
case IMAGE:
|
||||
View imageButton = ui.get().findViewById(R.id.image_attach);
|
||||
imageButton.setVisibility(VISIBLE);
|
||||
imageButton.setOnClickListener(new OnClickListener() {
|
||||
|
@ -206,7 +197,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
});
|
||||
break;
|
||||
|
||||
case "mp4":
|
||||
case VIDEO:
|
||||
View videoButton = ui.get().findViewById(R.id.video_attach);
|
||||
videoButton.setVisibility(VISIBLE);
|
||||
videoButton.setOnClickListener(new OnClickListener() {
|
||||
|
@ -220,7 +211,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
});
|
||||
break;
|
||||
|
||||
case "m3u8":
|
||||
case STREAM:
|
||||
videoButton = ui.get().findViewById(R.id.video_attach);
|
||||
videoButton.setVisibility(VISIBLE);
|
||||
videoButton.setOnClickListener(new OnClickListener() {
|
||||
|
@ -274,7 +265,6 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (toggleImg) {
|
||||
Picasso.get().load(tweet.getUser().getImageLink() + "_bigger").into(profile_img);
|
||||
}
|
||||
|
@ -289,7 +279,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
favoriteButton.setCompoundDrawablesWithIntrinsicBounds(R.drawable.favorite, 0, 0, 0);
|
||||
}
|
||||
if (tweet.getUser().getId() == homeId) {
|
||||
ui.get().enableDelete();
|
||||
ui.get().setIsHome();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,11 +291,14 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
|
|||
if (!failure) {
|
||||
if (mode == Mode.DELETE) {
|
||||
Toast.makeText(ui.get(), R.string.tweet_removed, Toast.LENGTH_SHORT).show();
|
||||
ui.get().setResult(STAT_CHANGED);
|
||||
ui.get().setResult(RETURN_TWEET_CHANGED);
|
||||
ui.get().finish();
|
||||
}
|
||||
} else {
|
||||
if (err != null) {
|
||||
int rCode = err.getErrorCode();
|
||||
if (rCode == 144 || rCode == 34 || rCode == 63)
|
||||
ui.get().setResult(RETURN_TWEET_CHANGED);
|
||||
boolean killActivity = ErrorHandler.printError(ui.get(), err);
|
||||
if (killActivity)
|
||||
ui.get().finish();
|
||||
|
|
|
@ -14,6 +14,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.TweetHolder;
|
||||
import org.nuclearfog.twidda.window.TweetPopup;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.nuclearfog.twidda.backend;
|
||||
package org.nuclearfog.twidda.backend.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
|
@ -21,7 +21,6 @@ public abstract class ErrorHandler {
|
|||
* @return if Activity should shut down
|
||||
*/
|
||||
public static boolean printError(Context c, @NonNull TwitterException error) {
|
||||
|
||||
switch (error.getErrorCode()) {
|
||||
case 88:
|
||||
case 420: //
|
||||
|
@ -50,10 +49,10 @@ public abstract class ErrorHandler {
|
|||
Toast.makeText(c, R.string.cant_send_dm, Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
|
||||
case 179:
|
||||
case 136:
|
||||
case 179:
|
||||
Toast.makeText(c, R.string.not_authorized, Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
return true;
|
||||
|
||||
case 186:
|
||||
Toast.makeText(c, R.string.status_too_long, Toast.LENGTH_SHORT).show();
|
|
@ -0,0 +1,80 @@
|
|||
package org.nuclearfog.twidda.backend.helper;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public abstract class FilenameTools {
|
||||
|
||||
public enum FileType {
|
||||
IMAGE,
|
||||
VIDEO,
|
||||
STREAM,
|
||||
ANGIF,
|
||||
NONE
|
||||
}
|
||||
|
||||
public static String getExtension(@NonNull String path) {
|
||||
String filename = getFilename(path);
|
||||
String ext = "";
|
||||
int start = lastIndexOf(filename, '.') + 1;
|
||||
if (start > 0 && start < filename.length()) {
|
||||
int end = lastIndexOf(filename, '?');
|
||||
if (end > 0)
|
||||
ext = filename.substring(start, end);
|
||||
else
|
||||
ext = filename.substring(start);
|
||||
ext = asciiLowerCase(ext);
|
||||
}
|
||||
return ext;
|
||||
}
|
||||
|
||||
public static String getFilename(@NonNull String path) {
|
||||
String filename = "";
|
||||
int end = lastIndexOf(path, '/') + 1;
|
||||
if (end > 0 && end < path.length())
|
||||
filename = path.substring(end);
|
||||
return filename;
|
||||
}
|
||||
|
||||
public static FileType getFileType(String path) {
|
||||
String ext = getExtension(path);
|
||||
switch (ext) {
|
||||
case "png":
|
||||
case "jpg":
|
||||
case "jpeg":
|
||||
return FileType.IMAGE;
|
||||
|
||||
case "mp4":
|
||||
case "3gp":
|
||||
return FileType.VIDEO;
|
||||
|
||||
case "m3u8":
|
||||
return FileType.STREAM;
|
||||
|
||||
case "gif":
|
||||
return FileType.ANGIF;
|
||||
|
||||
default:
|
||||
return FileType.NONE;
|
||||
}
|
||||
}
|
||||
|
||||
private static String asciiLowerCase(String ext) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (int index = 0; index < ext.length(); index++) {
|
||||
char current = ext.charAt(index);
|
||||
if (current >= 'A' && current <= 'Z')
|
||||
current += 0x20;
|
||||
result.append(current);
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private static int lastIndexOf(String text, char symbol) {
|
||||
int position = 0;
|
||||
for (int index = 0; index < text.length(); index++) {
|
||||
if (text.charAt(index) == symbol)
|
||||
position = index;
|
||||
}
|
||||
return position;
|
||||
}
|
||||
}
|
|
@ -2,6 +2,10 @@ package org.nuclearfog.twidda.backend.items;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
import org.nuclearfog.twidda.backend.helper.FilenameTools;
|
||||
import org.nuclearfog.twidda.backend.helper.FilenameTools.FileType;
|
||||
|
||||
public class TweetHolder {
|
||||
|
||||
private final String text;
|
||||
|
@ -18,28 +22,22 @@ public class TweetHolder {
|
|||
}
|
||||
|
||||
public TweetHolder(String text, long replyId, @NonNull String[] mediaLinks) {
|
||||
if (BuildConfig.DEBUG && mediaLinks.length == 0)
|
||||
throw new AssertionError("media array is empty!");
|
||||
|
||||
this.text = text;
|
||||
this.replyId = replyId;
|
||||
|
||||
String ext = "";
|
||||
String path = mediaLinks[0];
|
||||
int pos = path.lastIndexOf(".") + 1;
|
||||
if (pos > 0 && pos < path.length()) {
|
||||
ext = path.substring(pos);
|
||||
ext = ext.toLowerCase();
|
||||
}
|
||||
FileType type = FilenameTools.getFileType(mediaLinks[0]);
|
||||
|
||||
switch (ext) {
|
||||
case "mp4":
|
||||
case "3gp":
|
||||
switch (type) {
|
||||
case VIDEO:
|
||||
imageLink = new String[0];
|
||||
videoLink = mediaLinks[0];
|
||||
break;
|
||||
|
||||
case "jpg":
|
||||
case "jpeg":
|
||||
case "gif":
|
||||
case "png":
|
||||
case ANGIF:
|
||||
case IMAGE:
|
||||
videoLink = "";
|
||||
imageLink = mediaLinks;
|
||||
break;
|
||||
|
|
|
@ -60,8 +60,8 @@ public class MessageListFragment extends Fragment implements OnRefreshListener,
|
|||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (messageTask == null) {
|
||||
messageTask = new MessageLoader(root, Mode.DB);
|
||||
messageTask.execute();
|
||||
|
@ -70,10 +70,10 @@ public class MessageListFragment extends Fragment implements OnRefreshListener,
|
|||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
public void onPause() {
|
||||
if (messageTask != null && messageTask.getStatus() == RUNNING)
|
||||
messageTask.cancel(true);
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -59,8 +59,8 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
|
|||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (trendTask == null) {
|
||||
trendTask = new TrendLoader(root, Mode.DB_TRND);
|
||||
trendTask.execute();
|
||||
|
@ -69,10 +69,10 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
|
|||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
public void onPause() {
|
||||
if (trendTask != null && trendTask.getStatus() == RUNNING)
|
||||
trendTask.cancel(true);
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -34,6 +34,9 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
|||
public static final String KEY_FRAG_TWEET_ID = "ID";
|
||||
public static final String KEY_FRAG_TWEET_FIX = "fix";
|
||||
|
||||
public static final int REQUEST_TWEET_CHANGED = 3;
|
||||
public static final int RETURN_TWEET_CHANGED = 4;
|
||||
|
||||
public enum TweetType {
|
||||
HOME,
|
||||
MENT,
|
||||
|
@ -89,8 +92,8 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
|||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
if (tweetTask == null) {
|
||||
switch (mode) {
|
||||
|
@ -128,10 +131,18 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
|||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
public void onPause() {
|
||||
if (tweetTask != null && tweetTask.getStatus() == RUNNING)
|
||||
tweetTask.cancel(true);
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int reqCode, int returnCode, Intent i) {
|
||||
if (reqCode == REQUEST_TWEET_CHANGED && returnCode == RETURN_TWEET_CHANGED)
|
||||
tweetTask = null;
|
||||
super.onActivityResult(reqCode, returnCode, i);
|
||||
}
|
||||
|
||||
|
||||
|
@ -185,7 +196,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
|||
Intent tweetIntent = new Intent(getContext(), TweetDetail.class);
|
||||
tweetIntent.putExtra("tweetID", tweet.getId());
|
||||
tweetIntent.putExtra("username", tweet.getUser().getScreenname());
|
||||
startActivity(tweetIntent);
|
||||
startActivityForResult(tweetIntent, REQUEST_TWEET_CHANGED);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,8 +86,8 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
|
|||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (userTask == null) {
|
||||
load();
|
||||
}
|
||||
|
@ -95,10 +95,10 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
|
|||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
public void onPause() {
|
||||
if (userTask != null && userTask.getStatus() == RUNNING)
|
||||
userTask.cancel(true);
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.backend.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.backend.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.Trend;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
|
|
@ -10,8 +10,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter;
|
||||
import org.nuclearfog.twidda.backend.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
|
|
@ -10,8 +10,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.backend.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.backend.helper.ErrorHandler;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
|
|
@ -50,8 +50,6 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener, O
|
|||
|
||||
public static final String KEY_TWEET_ID = "tweetID";
|
||||
public static final String KEY_TWEET_NAME = "username";
|
||||
public static final int STAT_CHANGED = 1;
|
||||
private static final int TWEET = 2;
|
||||
|
||||
private ConnectivityManager mConnect;
|
||||
private StatusLoader statusAsync;
|
||||
|
@ -119,18 +117,9 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener, O
|
|||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
if (statusAsync != null && statusAsync.getStatus() == RUNNING)
|
||||
statusAsync.cancel(true);
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int reqCode, int returnCode, Intent i) {
|
||||
if (reqCode == TWEET && returnCode == STAT_CHANGED) { // TODO reinitialize list
|
||||
statusAsync = null;
|
||||
}
|
||||
super.onActivityResult(reqCode, returnCode, i);
|
||||
}
|
||||
|
||||
|
||||
|
@ -201,7 +190,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener, O
|
|||
Intent tweet = new Intent(this, TweetPopup.class);
|
||||
tweet.putExtra(KEY_TWEETPOPUP_REPLYID, tweetID);
|
||||
tweet.putExtra(KEY_TWEETPOPUP_ADDITION, username);
|
||||
startActivityForResult(tweet, TWEET);
|
||||
startActivity(tweet);
|
||||
break;
|
||||
|
||||
case R.id.tweet_retweet:
|
||||
|
@ -251,7 +240,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener, O
|
|||
}
|
||||
|
||||
|
||||
public void enableDelete() {
|
||||
public void setIsHome() {
|
||||
isHome = true;
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue