parent
8bcd26955f
commit
c152c94c93
|
@ -6,7 +6,7 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
applicationId "org.nuclearfog.twidda"
|
||||
minSdkVersion 14
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 28
|
||||
versionCode 1
|
||||
versionName '1.2.2'
|
||||
|
|
|
@ -34,6 +34,8 @@ import org.nuclearfog.twidda.window.TweetPopup;
|
|||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.TweetDetail.CHANGED;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.UPLOADED;
|
||||
|
||||
/**
|
||||
* Main Activity
|
||||
|
@ -109,8 +111,8 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
|||
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (!settings.getLogin()) {
|
||||
Intent i = new Intent(this, LoginPage.class);
|
||||
startActivityForResult(i, LOGIN);
|
||||
|
@ -137,11 +139,11 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
|||
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
protected void onPause() {
|
||||
if (home != null && home.getStatus() == RUNNING) {
|
||||
home.cancel(true);
|
||||
}
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
|
@ -151,12 +153,15 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
|||
if (reqCode == LOGIN && returnCode == RESULT_CANCELED) {
|
||||
overridePendingTransition(0, 0);
|
||||
finish();
|
||||
|
||||
} else if (reqCode == SETTING) {
|
||||
home = null;
|
||||
|
||||
} else if (reqCode == TWEET && returnCode == TweetDetail.CHANGED) {
|
||||
} else if (reqCode == TWEET) {
|
||||
if (returnCode == CHANGED) {
|
||||
home = null;
|
||||
} else if (returnCode == UPLOADED) {
|
||||
home = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -233,7 +238,7 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
|||
|
||||
case R.id.action_tweet:
|
||||
Intent tweet = new Intent(this, TweetPopup.class);
|
||||
startActivity(tweet);
|
||||
startActivityForResult(tweet, TWEET);
|
||||
break;
|
||||
|
||||
case R.id.action_settings:
|
||||
|
|
|
@ -79,7 +79,7 @@ public class MainPage extends AsyncTask<Integer, Integer, Integer> {
|
|||
} else if (MODE == TRND) {
|
||||
trends = mTwitter.getTrends(woeId);
|
||||
publishProgress(TRND);
|
||||
tweetDb.store(trends, woeId);
|
||||
tweetDb.storeTrends(trends, woeId);
|
||||
} else if (MODE == MENT) {
|
||||
if (mentionAdapter.getItemCount() != 0)
|
||||
sinceId = mentionAdapter.getItemId(0);
|
||||
|
|
|
@ -13,16 +13,21 @@ import android.view.Window;
|
|||
import android.widget.Toast;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||
import org.nuclearfog.twidda.window.TweetPopup;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import twitter4j.TwitterException;
|
||||
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.UPLOADED;
|
||||
|
||||
|
||||
public class StatusUpload extends AsyncTask<String, Void, Boolean> {
|
||||
|
||||
|
||||
private WeakReference<TweetPopup> ui;
|
||||
private DatabaseAdapter database;
|
||||
private TwitterEngine mTwitter;
|
||||
private LayoutInflater inflater;
|
||||
private Dialog popup;
|
||||
|
@ -34,6 +39,7 @@ public class StatusUpload extends AsyncTask<String, Void, Boolean> {
|
|||
ui = new WeakReference<>(context);
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
inflater = LayoutInflater.from(context);
|
||||
database = new DatabaseAdapter(context);
|
||||
popup = new Dialog(context);
|
||||
this.tweet = tweet;
|
||||
this.replyId = replyId;
|
||||
|
@ -73,10 +79,13 @@ public class StatusUpload extends AsyncTask<String, Void, Boolean> {
|
|||
@Override
|
||||
protected Boolean doInBackground(String... path) {
|
||||
try {
|
||||
if (path.length == 0)
|
||||
mTwitter.sendStatus(tweet, replyId);
|
||||
else
|
||||
mTwitter.sendStatus(tweet, replyId, path);
|
||||
Tweet sendTweet;
|
||||
if (path.length == 0) {
|
||||
sendTweet = mTwitter.sendStatus(tweet, replyId, null);
|
||||
} else {
|
||||
sendTweet = mTwitter.sendStatus(tweet, replyId, path);
|
||||
}
|
||||
database.storeTweet(sendTweet);
|
||||
|
||||
} catch (TwitterException err) {
|
||||
return false;
|
||||
|
@ -96,6 +105,7 @@ public class StatusUpload extends AsyncTask<String, Void, Boolean> {
|
|||
popup.dismiss();
|
||||
if (success) {
|
||||
Toast.makeText(ui.get(), R.string.tweet_sent, Toast.LENGTH_LONG).show();
|
||||
ui.get().setResult(UPLOADED);
|
||||
ui.get().finish();
|
||||
} else {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(ui.get());
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
|
@ -363,41 +362,29 @@ public class TwitterEngine {
|
|||
*
|
||||
* @param text Tweet Text
|
||||
* @param reply In reply to tweet ID
|
||||
* @param path Path to the Media File
|
||||
* @return uploaded Status
|
||||
* @throws TwitterException if Access is unavailable
|
||||
*/
|
||||
public void sendStatus(String text, long reply) throws TwitterException {
|
||||
public Tweet sendStatus(String text, long reply, @Nullable String[] path) throws TwitterException {
|
||||
StatusUpdate mStatus = new StatusUpdate(text);
|
||||
|
||||
if (reply > 0)
|
||||
mStatus.setInReplyToStatusId(reply);
|
||||
twitter.tweets().updateStatus(mStatus);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send Tweet
|
||||
*
|
||||
* @param text Tweet Text
|
||||
* @param reply In reply to tweet ID
|
||||
* @param path Path to the Media File
|
||||
* @throws TwitterException if Access is unavailable
|
||||
* @throws NullPointerException if file path is wrong
|
||||
*/
|
||||
public void sendStatus(String text, long reply, @NonNull String[] path) throws TwitterException, NullPointerException {
|
||||
UploadedMedia media;
|
||||
if (path != null) {
|
||||
int count = path.length;
|
||||
long[] mIDs = new long[count];
|
||||
StatusUpdate mStatus = new StatusUpdate(text);
|
||||
|
||||
if (reply > 0) {
|
||||
mStatus.setInReplyToStatusId(reply);
|
||||
}
|
||||
for (int i = 0; i < count; i++) {
|
||||
String current = path[i];
|
||||
media = twitter.uploadMedia(new File(current));
|
||||
UploadedMedia media = twitter.uploadMedia(new File(current));
|
||||
mIDs[i] = media.getMediaId();
|
||||
}
|
||||
mStatus.setMediaIds(mIDs);
|
||||
twitter.tweets().updateStatus(mStatus);
|
||||
}
|
||||
|
||||
Status currentStat = twitter.tweets().updateStatus(mStatus);
|
||||
return getTweet(currentStat, null);
|
||||
}
|
||||
|
||||
|
||||
|
@ -410,9 +397,9 @@ public class TwitterEngine {
|
|||
*/
|
||||
public Tweet getStatus(long id) throws TwitterException {
|
||||
Status status = twitter.showStatus(id);
|
||||
Status retweet = status.getRetweetedStatus(); // Bug getretweetedstatus does not have a currentUserRetweetId
|
||||
Status retweet = status.getRetweetedStatus();
|
||||
if (retweet != null) {
|
||||
retweet = twitter.showStatus(retweet.getId()); // reload full retweet
|
||||
retweet = twitter.showStatus(retweet.getId());
|
||||
Tweet embedded = getTweet(retweet, null);
|
||||
return getTweet(status, embedded);
|
||||
} else {
|
||||
|
|
|
@ -107,6 +107,8 @@ public class TwitterSearch extends AsyncTask<String, Integer, Boolean> {
|
|||
case 420:
|
||||
Toast.makeText(ui.get(), R.string.rate_limit_exceeded, Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
case -1:
|
||||
break;
|
||||
default:
|
||||
Toast.makeText(ui.get(), errMsg, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
|
|
@ -19,15 +19,18 @@ import static android.database.sqlite.SQLiteDatabase.CONFLICT_REPLACE;
|
|||
|
||||
public class DatabaseAdapter {
|
||||
|
||||
private final int favoritedMask = 1;
|
||||
private final int retweetedMask = 1 << 1;
|
||||
private final int homeMask = 1 << 2;
|
||||
private final int mentionMask = 1 << 3;
|
||||
private final int userTweetMask = 1 << 4;
|
||||
private final int replyMask = 1 << 5;
|
||||
public static final int LIMIT = 200; // DATABASE ENTRY LIMIT
|
||||
|
||||
private final int FAV_MASK = 1; // FAVORITE MASK
|
||||
private final int RTW_MASK = 1 << 1; // RETWEET MASK
|
||||
private final int HOM_MASK = 1 << 2; // HOME TWEET MASK
|
||||
private final int MEN_MASK = 1 << 3; // MENTION MASK
|
||||
private final int UTW_MASK = 1 << 4; // USER TWEETS
|
||||
private final int RPL_MASK = 1 << 5; // TWEET ANSWERS
|
||||
|
||||
private final int VER_MASK = 1; // USER VERIFIED MASK
|
||||
private final int LCK_MASK = 1 << 1; // USER LOCKED MASK
|
||||
|
||||
private final int verifiedMask = 1;
|
||||
private final int lockedMask = 1 << 1;
|
||||
|
||||
private AppDatabase dataHelper;
|
||||
private long homeId;
|
||||
|
@ -45,7 +48,6 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeUser(TwitterUser user) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
storeUser(user, db, CONFLICT_REPLACE);
|
||||
commit(db);
|
||||
}
|
||||
|
@ -57,9 +59,8 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeHomeTimeline(List<Tweet> home) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Tweet tweet : home) {
|
||||
storeStatus(tweet, homeMask, db);
|
||||
storeStatus(tweet, HOM_MASK, db);
|
||||
}
|
||||
commit(db);
|
||||
}
|
||||
|
@ -71,9 +72,8 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeMentions(List<Tweet> mentions) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Tweet tweet : mentions) {
|
||||
storeStatus(tweet, mentionMask, db);
|
||||
storeStatus(tweet, MEN_MASK, db);
|
||||
}
|
||||
commit(db);
|
||||
}
|
||||
|
@ -85,9 +85,8 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeUserTweets(List<Tweet> stats) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Tweet tweet : stats) {
|
||||
storeStatus(tweet, userTweetMask, db);
|
||||
storeStatus(tweet, UTW_MASK, db);
|
||||
}
|
||||
commit(db);
|
||||
}
|
||||
|
@ -100,7 +99,6 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeUserFavs(List<Tweet> fav, long ownerId) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Tweet tweet : fav) {
|
||||
storeStatus(tweet, 0, db);
|
||||
ContentValues favTable = new ContentValues();
|
||||
|
@ -118,9 +116,8 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeReplies(final List<Tweet> replies) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Tweet tweet : replies) {
|
||||
storeStatus(tweet, replyMask, db);
|
||||
storeStatus(tweet, RPL_MASK, db);
|
||||
}
|
||||
commit(db);
|
||||
}
|
||||
|
@ -131,10 +128,9 @@ public class DatabaseAdapter {
|
|||
* @param trends List of Trends
|
||||
* @param woeId Yahoo World ID
|
||||
*/
|
||||
public void store(final List<Trend> trends, int woeId) {
|
||||
public void storeTrends(final List<Trend> trends, int woeId) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
String query = "DELETE FROM trend WHERE woeID=" + woeId;
|
||||
db.beginTransaction();
|
||||
db.execSQL(query);
|
||||
for (Trend trend : trends) {
|
||||
storeTrends(trend, woeId, db);
|
||||
|
@ -154,18 +150,31 @@ public class DatabaseAdapter {
|
|||
ContentValues status = new ContentValues();
|
||||
|
||||
int register = getStatRegister(db, tweetID);
|
||||
register |= favoritedMask;
|
||||
register |= FAV_MASK;
|
||||
|
||||
favTable.put("tweetID", tweetID);
|
||||
favTable.put("ownerID", homeId);
|
||||
status.put("statusregister", register);
|
||||
|
||||
db.beginTransaction();
|
||||
db.insertWithOnConflict("favorit", null, favTable, CONFLICT_IGNORE);
|
||||
db.update("tweet", status, "tweet.tweetID=" + tweetID, null);
|
||||
commit(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store currently sent tweet
|
||||
*
|
||||
* @param tweet new created tweet
|
||||
*/
|
||||
public void storeTweet(Tweet tweet) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
int mask = UTW_MASK | HOM_MASK;
|
||||
if (tweet.getReplyId() > 0)
|
||||
mask |= RPL_MASK;
|
||||
storeStatus(tweet, mask, db);
|
||||
commit(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* speicher direktnachrichten
|
||||
*
|
||||
|
@ -173,7 +182,6 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void storeMessage(List<Message> messages) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
for (Message message : messages) {
|
||||
storeMessage(message, db);
|
||||
}
|
||||
|
@ -204,8 +212,8 @@ public class DatabaseAdapter {
|
|||
List<Tweet> tweetList = new ArrayList<>();
|
||||
String SQL_GET_HOME = "SELECT * FROM tweet " +
|
||||
"INNER JOIN user ON tweet.userID=user.userID " +
|
||||
"WHERE statusregister&" + homeMask + ">0 " +
|
||||
"ORDER BY tweetID DESC";
|
||||
"WHERE statusregister&" + HOM_MASK + ">0 " +
|
||||
"ORDER BY tweetID DESC LIMIT " + LIMIT;
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME, null);
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
|
@ -227,8 +235,8 @@ public class DatabaseAdapter {
|
|||
List<Tweet> tweetList = new ArrayList<>();
|
||||
String SQL_GET_HOME = "SELECT * FROM tweet " +
|
||||
"INNER JOIN user ON tweet.userID=user.userID " +
|
||||
"WHERE statusregister&" + mentionMask + ">0 " +
|
||||
"ORDER BY tweetID DESC";
|
||||
"WHERE statusregister&" + MEN_MASK + ">0 " +
|
||||
"ORDER BY tweetID DESC LIMIT " + LIMIT;
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME, null);
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
|
@ -251,8 +259,9 @@ public class DatabaseAdapter {
|
|||
List<Tweet> tweetList = new ArrayList<>();
|
||||
String SQL_GET_HOME = "SELECT * FROM tweet " +
|
||||
"INNER JOIN user ON tweet.userID = user.userID " +
|
||||
"WHERE statusregister&" + userTweetMask + ">0 " +
|
||||
"AND user.userID =" + userID + " ORDER BY tweetID DESC";
|
||||
"WHERE statusregister&" + UTW_MASK + ">0 " +
|
||||
"AND user.userID =" + userID +
|
||||
" ORDER BY tweetID DESC LIMIT " + LIMIT;
|
||||
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME, null);
|
||||
|
||||
|
@ -278,7 +287,8 @@ public class DatabaseAdapter {
|
|||
String SQL_GET_HOME = "SELECT * FROM tweet " +
|
||||
"INNER JOIN favorit on tweet.tweetID = favorit.tweetID " +
|
||||
"INNER JOIN user ON tweet.userID = user.userID " +
|
||||
"WHERE favorit.ownerID =" + ownerID + " ORDER BY tweetID DESC";
|
||||
"WHERE favorit.ownerID =" + ownerID +
|
||||
" ORDER BY tweetID DESC LIMIT " + LIMIT;
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME, null);
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
|
@ -321,8 +331,8 @@ public class DatabaseAdapter {
|
|||
List<Tweet> tweetList = new ArrayList<>();
|
||||
String SQL_GET_HOME = "SELECT * FROM tweet " +
|
||||
"INNER JOIN user ON tweet.userID = user.userID " +
|
||||
"WHERE tweet.replyID=" + tweetId + " AND statusregister&" + replyMask + ">0 " +
|
||||
"ORDER BY tweetID DESC";
|
||||
"WHERE tweet.replyID=" + tweetId + " AND statusregister&" + RPL_MASK + ">0 " +
|
||||
"ORDER BY tweetID DESC LIMIT " + LIMIT;
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME, null);
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
|
@ -344,19 +354,17 @@ public class DatabaseAdapter {
|
|||
ContentValues status = new ContentValues();
|
||||
int register = getStatRegister(db, tweet.getId());
|
||||
if (tweet.retweeted())
|
||||
register |= retweetedMask;
|
||||
register |= RTW_MASK;
|
||||
else
|
||||
register &= ~retweetedMask;
|
||||
register &= ~RTW_MASK;
|
||||
|
||||
if (tweet.favorized())
|
||||
register |= favoritedMask;
|
||||
register |= FAV_MASK;
|
||||
else
|
||||
register &= ~favoritedMask;
|
||||
register &= ~FAV_MASK;
|
||||
status.put("retweet", tweet.getRetweetCount());
|
||||
status.put("favorite", tweet.getFavorCount());
|
||||
status.put("statusregister", register);
|
||||
|
||||
db.beginTransaction();
|
||||
db.update("tweet", status, "tweet.tweetID=" + tweet.getId(), null);
|
||||
commit(db);
|
||||
}
|
||||
|
@ -368,7 +376,6 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void removeStatus(long id) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
db.delete("tweet", "tweetID=" + id, null);
|
||||
db.delete("favorit", "tweetID=" + id + " AND ownerID=" + homeId, null);
|
||||
commit(db);
|
||||
|
@ -382,11 +389,9 @@ public class DatabaseAdapter {
|
|||
public void removeFavorite(long tweetId) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
int register = getStatRegister(db, tweetId);
|
||||
register &= ~favoritedMask;
|
||||
register &= ~FAV_MASK;
|
||||
ContentValues status = new ContentValues();
|
||||
status.put("statusregister", register);
|
||||
|
||||
db.beginTransaction();
|
||||
db.delete("favorit", "tweetID=" + tweetId + " AND ownerID=" + homeId, null);
|
||||
db.update("tweet", status, "tweet.tweetID=" + tweetId, null);
|
||||
commit(db);
|
||||
|
@ -399,7 +404,6 @@ public class DatabaseAdapter {
|
|||
*/
|
||||
public void deleteDm(long id) {
|
||||
SQLiteDatabase db = getDbWrite();
|
||||
db.beginTransaction();
|
||||
db.delete("message", "messageID=" + id, null);
|
||||
commit(db);
|
||||
}
|
||||
|
@ -438,7 +442,7 @@ public class DatabaseAdapter {
|
|||
public List<Message> getMessages() {
|
||||
List<Message> result = new ArrayList<>();
|
||||
SQLiteDatabase db = dataHelper.getReadableDatabase();
|
||||
String query = "SELECT * FROM message ORDER BY messageID DESC";
|
||||
String query = "SELECT * FROM message ORDER BY messageID DESC LIMIT " + LIMIT;
|
||||
Cursor cursor = db.rawQuery(query, null);
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
|
@ -510,8 +514,8 @@ public class DatabaseAdapter {
|
|||
long replyUserId = cursor.getLong(index);
|
||||
index = cursor.getColumnIndex("statusregister");
|
||||
int statusregister = cursor.getInt(index);
|
||||
boolean favorited = (statusregister & favoritedMask) > 0;
|
||||
boolean retweeted = (statusregister & retweetedMask) > 0;
|
||||
boolean favorited = (statusregister & FAV_MASK) > 0;
|
||||
boolean retweeted = (statusregister & RTW_MASK) > 0;
|
||||
|
||||
String[] medias = parseMedia(medialinks);
|
||||
|
||||
|
@ -523,6 +527,7 @@ public class DatabaseAdapter {
|
|||
source, replyStatusId, embeddedTweet, retweeterId, retweeted, favorited);
|
||||
}
|
||||
|
||||
|
||||
private TwitterUser getUser(long userId, SQLiteDatabase db) {
|
||||
TwitterUser user = null;
|
||||
String query = "SELECT * FROM user WHERE userID=" + userId + " LIMIT 1";
|
||||
|
@ -533,6 +538,7 @@ public class DatabaseAdapter {
|
|||
return user;
|
||||
}
|
||||
|
||||
|
||||
private TwitterUser getUser(Cursor cursor) {
|
||||
int index = cursor.getColumnIndex("userID");
|
||||
long userId = cursor.getLong(index);
|
||||
|
@ -559,8 +565,8 @@ public class DatabaseAdapter {
|
|||
index = cursor.getColumnIndex("follower");
|
||||
int follower = cursor.getInt(index);
|
||||
|
||||
boolean isVerified = (userRegister & verifiedMask) > 0;
|
||||
boolean isLocked = (userRegister & lockedMask) > 0;
|
||||
boolean isVerified = (userRegister & VER_MASK) > 0;
|
||||
boolean isLocked = (userRegister & LCK_MASK) > 0;
|
||||
return new TwitterUser(userId, username, screenname, profileImg, bio,
|
||||
location, isVerified, isLocked, link, banner, createdAt, following, follower);
|
||||
}
|
||||
|
@ -570,9 +576,9 @@ public class DatabaseAdapter {
|
|||
ContentValues userColumn = new ContentValues();
|
||||
int userRegister = 0;
|
||||
if (user.isVerified())
|
||||
userRegister |= verifiedMask;
|
||||
userRegister |= VER_MASK;
|
||||
if (user.isLocked())
|
||||
userRegister |= lockedMask;
|
||||
userRegister |= LCK_MASK;
|
||||
userColumn.put("userID", user.getId());
|
||||
userColumn.put("username", user.getUsername());
|
||||
userColumn.put("scrname", user.getScreenname());
|
||||
|
@ -602,14 +608,14 @@ public class DatabaseAdapter {
|
|||
|
||||
statusRegister |= getStatRegister(db, tweet.getId());
|
||||
if (tweet.favorized()) {
|
||||
statusRegister |= favoritedMask;
|
||||
statusRegister |= FAV_MASK;
|
||||
} else {
|
||||
statusRegister &= ~favoritedMask;
|
||||
statusRegister &= ~FAV_MASK;
|
||||
}
|
||||
if (tweet.retweeted()) {
|
||||
statusRegister |= retweetedMask;
|
||||
statusRegister |= RTW_MASK;
|
||||
} else {
|
||||
statusRegister &= ~retweetedMask;
|
||||
statusRegister &= ~RTW_MASK;
|
||||
}
|
||||
|
||||
StringBuilder media = new StringBuilder();
|
||||
|
@ -672,7 +678,9 @@ public class DatabaseAdapter {
|
|||
|
||||
|
||||
private synchronized SQLiteDatabase getDbWrite() {
|
||||
return dataHelper.getWritableDatabase();
|
||||
SQLiteDatabase db = dataHelper.getWritableDatabase();
|
||||
db.beginTransaction();
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.nuclearfog.twidda.backend.items.Tweet;
|
|||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.UPLOADED;
|
||||
|
||||
/**
|
||||
* Detailed Tweet Activity
|
||||
|
@ -97,8 +98,8 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
|||
}
|
||||
|
||||
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (mStat == null) {
|
||||
TimelineAdapter answerAdapter = new TimelineAdapter(this);
|
||||
answerAdapter.toggleImage(settings.loadImages());
|
||||
|
@ -113,17 +114,21 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
|||
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
protected void onPause() {
|
||||
if (mStat != null && mStat.getStatus() == RUNNING)
|
||||
mStat.cancel(true);
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int reqCode, int returnCode, Intent i) {
|
||||
if (reqCode == TWEET && returnCode == CHANGED) {
|
||||
if (reqCode == TWEET) {
|
||||
if (returnCode == CHANGED) {
|
||||
mStat = null;
|
||||
} else if (returnCode == UPLOADED) {
|
||||
mStat = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,11 +183,13 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
|||
case R.id.rt_button_detail:
|
||||
mStat = new StatusLoader(this);
|
||||
mStat.execute(tweetID, StatusLoader.RETWEET);
|
||||
Toast.makeText(this, R.string.tweet_loading, Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
|
||||
case R.id.fav_button_detail:
|
||||
mStat = new StatusLoader(this);
|
||||
mStat.execute(tweetID, StatusLoader.FAVORITE);
|
||||
Toast.makeText(this, R.string.tweet_loading, Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
|
||||
case R.id.no_rt_detail:
|
||||
|
@ -210,9 +217,11 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
|||
Intent tweet = new Intent(this, TweetPopup.class);
|
||||
tweet.putExtra("TweetID", tweetID);
|
||||
tweet.putExtra("Addition", username);
|
||||
startActivity(tweet);
|
||||
startActivityForResult(tweet, TWEET);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(this, R.string.tweet_processing, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
|||
*/
|
||||
public class TweetPopup extends AppCompatActivity implements OnClickListener {
|
||||
|
||||
public static final int UPLOADED = 2;
|
||||
|
||||
private StatusUpload sendTweet;
|
||||
private View imageButton, previewBtn;
|
||||
private List<String> mediaPath;
|
||||
|
@ -186,14 +188,14 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener {
|
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
int check = checkSelfPermission(READ_EXTERNAL_STORAGE);
|
||||
if (check == PERMISSION_GRANTED) {
|
||||
Intent i = new Intent(ACTION_PICK, EXTERNAL_CONTENT_URI);
|
||||
startActivityForResult(i, 0);
|
||||
Intent mediaIntent = new Intent(ACTION_PICK, EXTERNAL_CONTENT_URI);
|
||||
startActivityForResult(mediaIntent, 0);
|
||||
} else {
|
||||
requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, 1);
|
||||
}
|
||||
} else {
|
||||
Intent i = new Intent(Intent.ACTION_PICK, EXTERNAL_CONTENT_URI);
|
||||
startActivityForResult(i, 0);
|
||||
Intent mediaIntent = new Intent(Intent.ACTION_PICK, EXTERNAL_CONTENT_URI);
|
||||
startActivityForResult(mediaIntent, 0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,6 +29,8 @@ import org.nuclearfog.twidda.backend.items.Tweet;
|
|||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.TweetDetail.CHANGED;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.UPLOADED;
|
||||
|
||||
/**
|
||||
* User Profile Activity
|
||||
|
@ -102,8 +104,8 @@ public class UserProfile extends AppCompatActivity implements OnRefreshListener,
|
|||
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (mProfile == null) {
|
||||
TimelineAdapter homeTl = new TimelineAdapter(this);
|
||||
homeTl.setColor(settings.getHighlightColor(), settings.getFontColor());
|
||||
|
@ -124,17 +126,21 @@ public class UserProfile extends AppCompatActivity implements OnRefreshListener,
|
|||
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
protected void onPause() {
|
||||
if (mProfile != null && mProfile.getStatus() == RUNNING)
|
||||
mProfile.cancel(true);
|
||||
super.onStop();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int reqCode, int returnCode, Intent i) {
|
||||
if (reqCode == TWEET && returnCode == TweetDetail.CHANGED) {
|
||||
if (reqCode == TWEET) {
|
||||
if (returnCode == CHANGED) {
|
||||
mProfile = null;
|
||||
} else if (returnCode == UPLOADED) {
|
||||
mProfile = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -194,7 +200,7 @@ public class UserProfile extends AppCompatActivity implements OnRefreshListener,
|
|||
Intent tweet = new Intent(this, TweetPopup.class);
|
||||
if (!home)
|
||||
tweet.putExtra("Addition", username);
|
||||
startActivity(tweet);
|
||||
startActivityForResult(tweet, TWEET);
|
||||
break;
|
||||
|
||||
case R.id.profile_follow:
|
||||
|
|
|
@ -75,4 +75,6 @@
|
|||
<string name="dm_not_found">Nachricht nicht gefunden!</string>
|
||||
<string name="image_folder_created">Ordner erstellt unter Pictures</string>
|
||||
<string name="image_saved">Bild gespeichert!</string>
|
||||
<string name="tweet_processing">in bearbeitung...</string>
|
||||
<string name="tweet_loading">lädt...</string>
|
||||
</resources>
|
|
@ -83,4 +83,6 @@
|
|||
<string name="dm_not_found">message not found!</string>
|
||||
<string name="image_folder_created">folder created under Pictures!</string>
|
||||
<string name="image_saved">image saved!</string>
|
||||
<string name="tweet_processing">processing...</string>
|
||||
<string name="tweet_loading">loading...</string>
|
||||
</resources>
|
Loading…
Reference in New Issue