mirror of
https://github.com/nuclearfog/Shitter.git
synced 2025-02-03 12:37:33 +01:00
Bugfix
Code Cleanup
This commit is contained in:
parent
5e6c724dd8
commit
4bd98e4fa4
@ -7,6 +7,7 @@ import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TrendAdapter;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
@ -27,6 +28,7 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
private ListView timelineList, trendList, mentionList;
|
||||
private TimelineAdapter timelineAdapter, mentionAdapter;
|
||||
private TrendAdapter trendsAdapter;
|
||||
private int woeid;
|
||||
|
||||
/**
|
||||
* Main View
|
||||
@ -35,6 +37,8 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
public MainPage(Context context) {
|
||||
this.context = context;
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
SharedPreferences settings = context.getSharedPreferences("settings", 0);
|
||||
woeid = settings.getInt("woeid",23424829); // Germany WOEID
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -73,7 +77,7 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
break;
|
||||
|
||||
case TRND:
|
||||
trendsAdapter = new TrendAdapter(context, new TrendDatabase(mTwitter.getTrends(),context));
|
||||
trendsAdapter = new TrendAdapter(context, new TrendDatabase(mTwitter.getTrends(woeid),context));
|
||||
break;
|
||||
|
||||
case MENT:
|
||||
|
@ -22,8 +22,8 @@ import twitter4j.User;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
public class ProfileLoader extends AsyncTask<Long,Void,Long>
|
||||
{
|
||||
public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
|
||||
public static final long GET_INFORMATION = 0x0;
|
||||
public static final long ACTION_FOLLOW = 0x1;
|
||||
public static final long GET_TWEETS = 0x2;
|
||||
@ -33,7 +33,7 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long>
|
||||
|
||||
private String screenName, username, description, location, follower, following;
|
||||
private TextView txtUser,txtScrName,txtBio,txtLocation,txtLink,txtFollowing,txtFollower,txtCreated;
|
||||
private ImageView profile, banner, linkIcon, locationIcon, verifier, locked;
|
||||
private ImageView profile, banner, linkIcon, locationIcon, verifier, locked, followback;
|
||||
private SwipeRefreshLayout tweetsReload, favoritsReload;
|
||||
private ListView profileTweets, profileFavorits;
|
||||
private String imageLink, bannerLink, fullPbLink, link, dateString;
|
||||
@ -72,6 +72,7 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long>
|
||||
banner = (ImageView)((UserProfile)context).findViewById(R.id.banner);
|
||||
linkIcon = (ImageView)((UserProfile)context).findViewById(R.id.link_img);
|
||||
verifier = (ImageView)((UserProfile)context).findViewById(R.id.profile_verify);
|
||||
followback = (ImageView)((UserProfile)context).findViewById(R.id.followback);
|
||||
locked = (ImageView)((UserProfile)context).findViewById(R.id.profile_locked);
|
||||
locationIcon = (ImageView)((UserProfile)context).findViewById(R.id.location_img);
|
||||
tweetsReload = (SwipeRefreshLayout)((UserProfile)context).findViewById(R.id.hometweets);
|
||||
@ -88,7 +89,7 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long>
|
||||
long id = 1L;
|
||||
TwitterEngine mTwitter = TwitterEngine.getInstance(context);
|
||||
try {
|
||||
isHome = mTwitter.isHome(userId);
|
||||
isHome = TwitterEngine.getHomeId() == userId;
|
||||
if(!isHome)
|
||||
{
|
||||
isFollowing = mTwitter.getConnection(userId, true);
|
||||
@ -179,6 +180,9 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long>
|
||||
if(isLocked) {
|
||||
locked.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if(isFollowed) {
|
||||
followback.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if(imgEnabled) {
|
||||
Picasso.with(context).load(imageLink).into(profile);
|
||||
// Picasso.with(context).load(bannerLink).into(banner); // TODO
|
||||
|
@ -36,7 +36,7 @@ import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.window.TweetDetail;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.OnClickListener {
|
||||
public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
|
||||
private static final long ERROR = -1;
|
||||
public static final long RETWEET = 0;
|
||||
@ -63,7 +63,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.On
|
||||
private boolean retweeted, favorited, toggleImg, verified;
|
||||
private boolean rtFlag = false;
|
||||
private long userReply, tweetReplyID;
|
||||
private int rt, fav, ansNo = 0;
|
||||
private int rt, fav;
|
||||
private int highlight;
|
||||
|
||||
|
||||
@ -177,7 +177,6 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.On
|
||||
if(tlAdp != null)
|
||||
tweetID = tlAdp.getItemId(0);
|
||||
answers = mTwitter.getAnswers(replyname, tweetID);
|
||||
ansNo = answers.size();
|
||||
}
|
||||
else if(mode == DELETE) {
|
||||
mTwitter.deleteTweet(tweetID);
|
||||
@ -226,11 +225,25 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.On
|
||||
profile_img.setImageBitmap(profile_btm);
|
||||
if(medialinks.length != 0) {
|
||||
mediabutton.setVisibility(View.VISIBLE);
|
||||
mediabutton.setOnClickListener(this);
|
||||
mediabutton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
new ImagePopup(c).execute(medialinks);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
setIcons();
|
||||
replyName.setOnClickListener(this);
|
||||
replyName.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(c, TweetDetail.class);
|
||||
intent.putExtra("tweetID",tweetReplyID);
|
||||
intent.putExtra("userID",userReply);
|
||||
intent.putExtra("username", repliedUsername);
|
||||
c.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
else if(mode == RETWEET) {
|
||||
String rtStr = Integer.toString(rt);
|
||||
@ -253,7 +266,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.On
|
||||
tlAdp.notifyDataSetChanged();
|
||||
ansReload.setRefreshing(false);
|
||||
}
|
||||
String ansStr = Integer.toString(ansNo);
|
||||
String ansStr = Integer.toString(tlAdp.getCount());
|
||||
txtAns.setText(ansStr);
|
||||
}
|
||||
else if(mode == DELETE) {
|
||||
@ -268,26 +281,6 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> implements View.On
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent;
|
||||
switch(v.getId()) {
|
||||
case R.id.image_attach:
|
||||
new ImagePopup(c).execute(medialinks);
|
||||
break;
|
||||
|
||||
case R.id.answer_reference_detail:
|
||||
intent = new Intent(c, TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetReplyID);
|
||||
bundle.putLong("userID",userReply);
|
||||
bundle.putString("username", repliedUsername);
|
||||
intent.putExtras(bundle);
|
||||
c.startActivity(intent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private String formatString(String input) {
|
||||
String output = "gesendet von: ";
|
||||
boolean openTag = false;
|
||||
|
@ -37,12 +37,12 @@ public class TwitterEngine {
|
||||
private final String TWITTER_CONSUMER_SECRET = "pgaWUlDVS5b7Q6VJQDgBzHKw0mIxJIX0UQBcT1oFJEivsCl5OV";
|
||||
|
||||
private static TwitterEngine mTwitter;
|
||||
private static long twitterID;
|
||||
private Twitter twitter;
|
||||
private Context context;
|
||||
private SharedPreferences settings;
|
||||
private RequestToken reqToken;
|
||||
private int load;
|
||||
private int location;
|
||||
|
||||
|
||||
/**
|
||||
@ -52,7 +52,6 @@ public class TwitterEngine {
|
||||
*/
|
||||
private TwitterEngine(Context context) {
|
||||
settings = context.getSharedPreferences("settings", 0);
|
||||
location = settings.getInt("woeid",23424829); // Germany WOEID
|
||||
ConfigurationBuilder builder = new ConfigurationBuilder();
|
||||
builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
|
||||
builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
|
||||
@ -134,6 +133,7 @@ public class TwitterEngine {
|
||||
if( settings.getBoolean("login", false) ) {
|
||||
key1 = settings.getString("key1", " ");
|
||||
key2 = settings.getString("key2", " ");
|
||||
twitterID = settings.getLong("userID", -1L);
|
||||
initKeys(key1,key2);
|
||||
}
|
||||
}
|
||||
@ -180,11 +180,12 @@ public class TwitterEngine {
|
||||
|
||||
/**
|
||||
* Get Trending Hashtags
|
||||
* @param woeid Yahoo World ID
|
||||
* @return Trend Resource
|
||||
* @throws TwitterException if access is unavailable
|
||||
*/
|
||||
public Trends getTrends() throws TwitterException {
|
||||
return twitter.getPlaceTrends(location);
|
||||
public Trends getTrends(int woeid) throws TwitterException {
|
||||
return twitter.getPlaceTrends(woeid);
|
||||
}
|
||||
|
||||
|
||||
@ -239,9 +240,9 @@ public class TwitterEngine {
|
||||
*/
|
||||
public boolean getConnection(long id,boolean following) throws TwitterException {
|
||||
if(following)
|
||||
return twitter.showFriendship(twitter.getId(),id).isSourceFollowingTarget();
|
||||
return twitter.showFriendship(twitterID,id).isSourceFollowingTarget();
|
||||
else
|
||||
return twitter.showFriendship(twitter.getId(),id).isTargetFollowingSource();
|
||||
return twitter.showFriendship(twitterID,id).isTargetFollowingSource();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -429,13 +430,11 @@ public class TwitterEngine {
|
||||
}
|
||||
|
||||
/**
|
||||
* check if User ID is home ID
|
||||
* @param id User ID
|
||||
* Return User ID
|
||||
* @return result
|
||||
* @throws TwitterException if Access is unavailable
|
||||
*/
|
||||
public boolean isHome(long id) throws TwitterException {
|
||||
return twitter.getId() == id;
|
||||
public static long getHomeId() {
|
||||
return twitterID;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -10,7 +10,7 @@ import twitter4j.User;
|
||||
public class UserDatabase {
|
||||
|
||||
private List<String> uName, scrName, imgUrl;
|
||||
private List<Boolean> verified;
|
||||
private List<Boolean> verified, locked;
|
||||
private List<Long> uID;
|
||||
private boolean toggleImg;
|
||||
private long cursor = -1L;
|
||||
@ -32,6 +32,7 @@ public class UserDatabase {
|
||||
public String getScreenname(int pos){ return scrName.get(pos);}
|
||||
public String getImageUrl(int pos){ return imgUrl.get(pos);}
|
||||
public boolean isVerified(int pos){ return verified.get(pos);}
|
||||
public boolean isLocked(int pos){ return locked.get(pos);}
|
||||
public int getSize(){ return size; }
|
||||
public boolean loadImages(){ return toggleImg; }
|
||||
public long getCursor(){return cursor;}
|
||||
@ -48,6 +49,7 @@ public class UserDatabase {
|
||||
scrName.add('@'+usr.getScreenName());
|
||||
imgUrl.add(usr.getMiniProfileImageURLHttps());
|
||||
verified.add(usr.isVerified());
|
||||
locked.add(usr.isProtected());
|
||||
size++;
|
||||
}
|
||||
}
|
||||
@ -58,6 +60,7 @@ public class UserDatabase {
|
||||
scrName = new ArrayList<>();
|
||||
imgUrl = new ArrayList<>();
|
||||
verified = new ArrayList<>();
|
||||
locked = new ArrayList<>();
|
||||
SharedPreferences s = c.getSharedPreferences("settings", 0);
|
||||
toggleImg = s.getBoolean("image_load", true);
|
||||
}
|
||||
|
@ -67,6 +67,11 @@ public class UserAdapter extends ArrayAdapter implements View.OnClickListener {
|
||||
} else {
|
||||
v.findViewById(R.id.verified).setVisibility(View.INVISIBLE);
|
||||
}
|
||||
if(userDatabase.isLocked(position)) {
|
||||
v.findViewById(R.id.locked_profile).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
v.findViewById(R.id.locked_profile).setVisibility(View.INVISIBLE);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ public class ColorPreferences implements OnColorChangedListener, DialogInterface
|
||||
|
||||
private ColorPreferences(Context context) {
|
||||
settings = context.getSharedPreferences("settings", 0);
|
||||
background = settings.getInt("background_color", 0xff071222);
|
||||
background = settings.getInt("background_color", 0xff0f114a);
|
||||
font = settings.getInt("font_color", 0xffffffff);
|
||||
tweet = settings.getInt("tweet_color", 0xff19aae8);
|
||||
highlight = settings.getInt("highlight_color", 0xffff00ff);
|
||||
|
@ -18,7 +18,9 @@ import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import static android.content.DialogInterface.*;
|
||||
|
||||
import org.nuclearfog.twidda.backend.ImagePopup;
|
||||
import org.nuclearfog.twidda.backend.StatusLoader;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
@ -42,8 +44,7 @@ public class TweetDetail extends AppCompatActivity implements View.OnClickListen
|
||||
setContentView(R.layout.tweet_detail);
|
||||
getExtras(getIntent().getExtras());
|
||||
|
||||
SharedPreferences settings = getSharedPreferences("settings", 0);
|
||||
boolean home = userID == settings.getLong("userID", -1);
|
||||
boolean home = userID == TwitterEngine.getHomeId();
|
||||
|
||||
answer_list = (ListView) findViewById(R.id.answer_list);
|
||||
Button answer = (Button) findViewById(R.id.answer_button);
|
||||
|
@ -2,7 +2,6 @@ package org.nuclearfog.twidda.window;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
|
4
app/src/main/res/drawable/followback.xml
Normal file
4
app/src/main/res/drawable/followback.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<vector android:height="24dp" android:viewportHeight="20.0"
|
||||
android:viewportWidth="20.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FFFFFF" android:pathData="M19,16.685c0,0 -2.225,-9.732 -11,-9.732V2.969L1,9.542l7,6.69v-4.357C12.763,11.874 16.516,12.296 19,16.685z"/>
|
||||
</vector>
|
@ -50,46 +50,54 @@
|
||||
android:layout_marginEnd="5dp"
|
||||
android:contentDescription="@string/profile_image" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_verify"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:contentDescription="@string/verify"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/verify" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_locked"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:contentDescription="@string/profile_locked"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/lock" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="5dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_username"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="2dp" />
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_screenname"
|
||||
<ImageView
|
||||
android:id="@+id/profile_verify"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:contentDescription="@string/verify"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/verify" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_username"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="2dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="2dp" />
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_locked"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:contentDescription="@string/profile_locked"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/lock" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_screenname"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="2dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@ -97,6 +105,16 @@
|
||||
android:layout_marginTop="2dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/followback"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:contentDescription="@string/followback"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/followback" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/following"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -41,7 +41,7 @@
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_weight="1"
|
||||
android:textColor="@android:color/holo_red_dark"
|
||||
android:textSize="24sp" />
|
||||
android:textSize="14sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/img_preview"
|
||||
|
@ -14,31 +14,52 @@
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:padding="5dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/verified"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_margin="2dp"
|
||||
android:contentDescription="@string/verify"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/verify" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/username_detail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screenname_detail"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="5dp" />
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/verified"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_margin="2dp"
|
||||
android:contentDescription="@string/verify"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/verify" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/username_detail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/locked_profile"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_margin="2dp"
|
||||
android:contentDescription="@string/profile_locked"
|
||||
android:visibility="invisible"
|
||||
app:srcCompat="@drawable/lock" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screenname_detail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
@ -43,4 +43,5 @@
|
||||
<string name="fullimg">Vollbild</string>
|
||||
<string name="profile_locked">Privates Profil</string>
|
||||
<string name="load_factor">Ladefaktor</string>
|
||||
<string name="followback">Folgt dir</string>
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user