project reformat, added twitter lists
This commit is contained in:
parent
05104df9df
commit
1bd1acf383
4
.idea/assetWizardSettings.xml
generated
4
.idea/assetWizardSettings.xml
generated
@ -14,8 +14,8 @@
|
||||
<option name="values">
|
||||
<map>
|
||||
<entry key="assetSourceType" value="FILE" />
|
||||
<entry key="outputName" value="location" />
|
||||
<entry key="sourceFile" value="$USER_HOME$/Dokumente/Rest/Entypo SVG/location-pin.svg" />
|
||||
<entry key="outputName" value="subscriber" />
|
||||
<entry key="sourceFile" value="$USER_HOME$/Dokumente/Rest/Entypo SVG/eye.svg" />
|
||||
</map>
|
||||
</option>
|
||||
</PersistentState>
|
||||
|
@ -17,7 +17,7 @@
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:name=".activity.MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".window.SearchPage"
|
||||
android:name=".activity.SearchPage"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
@ -50,27 +50,27 @@
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".window.UserProfile"
|
||||
android:name=".activity.UserProfile"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".window.TweetPopup"
|
||||
android:name=".activity.TweetPopup"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Transparency" />
|
||||
|
||||
<activity
|
||||
android:name=".window.MessagePopup"
|
||||
android:name=".activity.MessagePopup"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Transparency" />
|
||||
|
||||
<activity
|
||||
android:name=".window.AppSettings"
|
||||
android:name=".activity.AppSettings"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".window.TweetDetail"
|
||||
android:name=".activity.TweetDetail"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
@ -87,27 +87,32 @@
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".window.UserDetail"
|
||||
android:name=".activity.UserDetail"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".window.LoginPage"
|
||||
android:name=".activity.LoginPage"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".window.DirectMessage"
|
||||
android:name=".activity.DirectMessage"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".window.MediaViewer"
|
||||
android:name=".activity.MediaViewer"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/HalfTransparency" />
|
||||
|
||||
<activity
|
||||
android:name=".window.ProfileSettings"
|
||||
android:name=".activity.ProfileSettings"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".activity.UserList"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" />
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
@ -42,8 +42,8 @@ import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static android.view.View.GONE;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.MainActivity.APP_LOGOUT;
|
||||
import static org.nuclearfog.twidda.MainActivity.DB_CLEARED;
|
||||
import static org.nuclearfog.twidda.activity.MainActivity.APP_LOGOUT;
|
||||
import static org.nuclearfog.twidda.activity.MainActivity.DB_CLEARED;
|
||||
|
||||
|
||||
public class AppSettings extends AppCompatActivity implements OnClickListener,
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.ConnectivityManager;
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@ -16,16 +16,12 @@ import androidx.viewpager.widget.ViewPager;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.google.android.material.tabs.TabLayout.Tab;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.AppSettings;
|
||||
import org.nuclearfog.twidda.window.LoginPage;
|
||||
import org.nuclearfog.twidda.window.SearchPage;
|
||||
import org.nuclearfog.twidda.window.TweetPopup;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import static org.nuclearfog.twidda.window.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.window.UserProfile.KEY_PROFILE_ID;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
|
||||
|
||||
/**
|
||||
* Main Activity
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Point;
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.DialogInterface;
|
||||
@ -27,9 +27,9 @@ 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.widget.Toast.LENGTH_SHORT;
|
||||
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.IMAGE_STORAGE;
|
||||
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.MediaType.IMAGE_STORAGE;
|
||||
|
||||
|
||||
public class MessagePopup extends AppCompatActivity implements OnClickListener {
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
@ -36,10 +36,10 @@ 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.widget.Toast.LENGTH_SHORT;
|
||||
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.IMAGE;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.IMAGE_STORAGE;
|
||||
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.MediaType.IMAGE;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.MediaType.IMAGE_STORAGE;
|
||||
|
||||
|
||||
public class ProfileSettings extends AppCompatActivity implements OnClickListener {
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
@ -19,14 +19,13 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener;
|
||||
import com.google.android.material.tabs.TabLayout.Tab;
|
||||
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
import org.nuclearfog.twidda.MainActivity;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.AdapterType;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
|
||||
/**
|
||||
* Twitter search Activity
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
@ -37,8 +37,8 @@ import com.squareup.picasso.Picasso;
|
||||
import org.nuclearfog.tag.Tagger;
|
||||
import org.nuclearfog.tag.Tagger.OnTagClickListener;
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
import org.nuclearfog.twidda.MainActivity;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.UserDetail.UserType;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.AdapterType;
|
||||
import org.nuclearfog.twidda.backend.StatusLoader;
|
||||
@ -47,7 +47,6 @@ import org.nuclearfog.twidda.backend.helper.StringTools;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.UserDetail.UserType;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
@ -60,16 +59,16 @@ import static android.view.MotionEvent.ACTION_DOWN;
|
||||
import static android.view.MotionEvent.ACTION_UP;
|
||||
import static android.view.View.VISIBLE;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
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;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.IMAGE;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.VIDEO;
|
||||
import static org.nuclearfog.twidda.window.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.KEY_TWEETPOPUP_REPLYID;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.KEY_USERLIST_ID;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.KEY_USERLIST_MODE;
|
||||
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.MediaType.ANGIF;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.MediaType.IMAGE;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.MediaType.VIDEO;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_REPLYID;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_ID;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_MODE;
|
||||
|
||||
|
||||
public class TweetDetail extends AppCompatActivity implements OnClickListener, OnTouchListener,
|
||||
@ -252,15 +251,15 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener, O
|
||||
|
||||
case R.id.tweet_retweet:
|
||||
Intent userList = new Intent(this, UserDetail.class);
|
||||
userList.putExtra(KEY_USERLIST_ID, tweetID);
|
||||
userList.putExtra(KEY_USERLIST_MODE, UserType.RETWEETS);
|
||||
userList.putExtra(KEY_USERDETAIL_ID, tweetID);
|
||||
userList.putExtra(KEY_USERDETAIL_MODE, UserType.RETWEETS);
|
||||
startActivity(userList);
|
||||
break;
|
||||
|
||||
case R.id.tweet_favorit:
|
||||
userList = new Intent(this, UserDetail.class);
|
||||
userList.putExtra(KEY_USERLIST_ID, tweetID);
|
||||
userList.putExtra(KEY_USERLIST_MODE, UserType.FAVORITS);
|
||||
userList.putExtra(KEY_USERDETAIL_ID, tweetID);
|
||||
userList.putExtra(KEY_USERDETAIL_MODE, UserType.FAVORITS);
|
||||
startActivity(userList);
|
||||
break;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@ -41,11 +41,11 @@ import static android.view.View.INVISIBLE;
|
||||
import static android.view.View.VISIBLE;
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
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_STORAGE;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.IMAGE_STORAGE;
|
||||
import static org.nuclearfog.twidda.window.MediaViewer.MediaType.VIDEO_STORAGE;
|
||||
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.MediaType.ANGIF_STORAGE;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.MediaType.IMAGE_STORAGE;
|
||||
import static org.nuclearfog.twidda.activity.MediaViewer.MediaType.VIDEO_STORAGE;
|
||||
|
||||
|
||||
public class TweetPopup extends AppCompatActivity implements OnClickListener, LocationListener {
|
@ -1,4 +1,4 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
@ -7,7 +7,6 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.AdapterType;
|
||||
@ -15,14 +14,15 @@ import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
public class UserDetail extends AppCompatActivity {
|
||||
|
||||
public static final String KEY_USERLIST_MODE = "userlist_mode";
|
||||
public static final String KEY_USERLIST_ID = "userlist_owner_id";
|
||||
public static final String KEY_USERDETAIL_MODE = "userlist_mode";
|
||||
public static final String KEY_USERDETAIL_ID = "userlist_owner_id";
|
||||
|
||||
public enum UserType {
|
||||
FRIENDS,
|
||||
FOLLOWERS,
|
||||
RETWEETS,
|
||||
FAVORITS,
|
||||
SUBSCRIBER
|
||||
}
|
||||
|
||||
private UserType mode;
|
||||
@ -34,11 +34,9 @@ public class UserDetail extends AppCompatActivity {
|
||||
setContentView(R.layout.page_userlist);
|
||||
|
||||
Bundle param = getIntent().getExtras();
|
||||
if (param != null && param.containsKey(KEY_USERLIST_MODE) && param.containsKey(KEY_USERLIST_ID)) {
|
||||
mode = (UserType) param.getSerializable(KEY_USERLIST_MODE);
|
||||
id = param.getLong(KEY_USERLIST_ID);
|
||||
} else if (BuildConfig.DEBUG) {
|
||||
throw new AssertionError();
|
||||
if (param != null && param.containsKey(KEY_USERDETAIL_MODE) && param.containsKey(KEY_USERDETAIL_ID)) {
|
||||
mode = (UserType) param.getSerializable(KEY_USERDETAIL_MODE);
|
||||
id = param.getLong(KEY_USERDETAIL_ID);
|
||||
}
|
||||
|
||||
FragmentAdapter adapter;
|
||||
@ -75,6 +73,11 @@ public class UserDetail extends AppCompatActivity {
|
||||
adapter = new FragmentAdapter(getSupportFragmentManager(), AdapterType.FAVOR_PAGE, id, "");
|
||||
pager.setAdapter(adapter);
|
||||
break;
|
||||
case SUBSCRIBER:
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setTitle(R.string.user_list_subscr);
|
||||
adapter = new FragmentAdapter(getSupportFragmentManager(), AdapterType.SUBSCRIBER_PAGE, id, "");
|
||||
pager.setAdapter(adapter);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static org.nuclearfog.twidda.adapter.FragmentAdapter.AdapterType.LIST_PAGE;
|
||||
|
||||
public class UserList extends AppCompatActivity {
|
||||
|
||||
public static final String KEY_USERLIST_ID = "userlist-owner";
|
||||
private long userId;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle b) {
|
||||
super.onCreate(b);
|
||||
setContentView(R.layout.page_list);
|
||||
View root = findViewById(R.id.list_view);
|
||||
ViewPager pager = findViewById(R.id.list_pager);
|
||||
Toolbar toolbar = findViewById(R.id.list_toolbar);
|
||||
|
||||
Bundle param = getIntent().getExtras();
|
||||
if (param != null)
|
||||
userId = param.getLong(KEY_USERLIST_ID);
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setTitle(R.string.list_appbar);
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(this);
|
||||
FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager(), LIST_PAGE, userId, "");
|
||||
pager.setAdapter(adapter);
|
||||
|
||||
root.setBackgroundColor(settings.getBackgroundColor());
|
||||
}
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
package org.nuclearfog.twidda.window;
|
||||
package org.nuclearfog.twidda.activity;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
@ -53,17 +54,18 @@ import static android.view.MotionEvent.ACTION_UP;
|
||||
import static android.view.View.GONE;
|
||||
import static android.view.View.VISIBLE;
|
||||
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.MediaType.IMAGE;
|
||||
import static org.nuclearfog.twidda.activity.MessagePopup.KEY_DM_PREFIX;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_ID;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_MODE;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.UserType.FOLLOWERS;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.UserType.FRIENDS;
|
||||
import static org.nuclearfog.twidda.activity.UserList.KEY_USERLIST_ID;
|
||||
import static org.nuclearfog.twidda.backend.ProfileLoader.Action.LDR_PROFILE;
|
||||
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.IMAGE;
|
||||
import static org.nuclearfog.twidda.window.MessagePopup.KEY_DM_PREFIX;
|
||||
import static org.nuclearfog.twidda.window.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.window.TweetPopup.KEY_TWEETPOPUP_PREFIX;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.KEY_USERLIST_ID;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.KEY_USERLIST_MODE;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.UserType.FOLLOWERS;
|
||||
import static org.nuclearfog.twidda.window.UserDetail.UserType.FRIENDS;
|
||||
|
||||
|
||||
public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
@ -119,8 +121,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
txtCreated = findViewById(R.id.profile_date);
|
||||
follow_back = findViewById(R.id.follow_back);
|
||||
pager = findViewById(R.id.profile_pager);
|
||||
tweetTabTxt = new TextView(getApplicationContext());
|
||||
favorTabTxt = new TextView(getApplicationContext());
|
||||
tweetTabTxt = new TextView(this);
|
||||
favorTabTxt = new TextView(this);
|
||||
|
||||
setSupportActionBar(tool);
|
||||
if (getSupportActionBar() != null)
|
||||
@ -132,8 +134,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
bioTxt.setLinkTextColor(settings.getHighlightColor());
|
||||
lnkTxt.setLinkTextColor(settings.getHighlightColor());
|
||||
root.setBackgroundColor(settings.getBackgroundColor());
|
||||
tweetTabTxt.setTextColor(settings.getFontColor());
|
||||
favorTabTxt.setTextColor(settings.getFontColor());
|
||||
tweetTabTxt.setTextColor(Color.WHITE);
|
||||
favorTabTxt.setTextColor(Color.WHITE);
|
||||
tweetTabTxt.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.home_profile, 0, 0);
|
||||
favorTabTxt.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.favorite_profile, 0, 0);
|
||||
tweetTabTxt.setGravity(CENTER);
|
||||
@ -327,6 +329,12 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
startActivity(dmPage);
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.profile_lists:
|
||||
Intent listPage = new Intent(this, UserList.class);
|
||||
listPage.putExtra(KEY_USERLIST_ID, userId);
|
||||
startActivity(listPage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
@ -358,8 +366,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
if (user != null && properties != null) {
|
||||
if (!user.isLocked() || properties.isFriend()) {
|
||||
Intent following = new Intent(this, UserDetail.class);
|
||||
following.putExtra(KEY_USERLIST_ID, userId);
|
||||
following.putExtra(KEY_USERLIST_MODE, FRIENDS);
|
||||
following.putExtra(KEY_USERDETAIL_ID, userId);
|
||||
following.putExtra(KEY_USERDETAIL_MODE, FRIENDS);
|
||||
startActivity(following);
|
||||
}
|
||||
}
|
||||
@ -369,8 +377,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
if (user != null && properties != null) {
|
||||
if (!user.isLocked() || properties.isFriend()) {
|
||||
Intent follower = new Intent(this, UserDetail.class);
|
||||
follower.putExtra(KEY_USERLIST_ID, userId);
|
||||
follower.putExtra(KEY_USERLIST_MODE, FOLLOWERS);
|
||||
follower.putExtra(KEY_USERDETAIL_ID, userId);
|
||||
follower.putExtra(KEY_USERDETAIL_MODE, FOLLOWERS);
|
||||
startActivity(follower);
|
||||
}
|
||||
}
|
||||
@ -392,7 +400,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener,
|
||||
|
||||
case R.id.profile_img:
|
||||
if (user != null) {
|
||||
Intent image = new Intent(getApplicationContext(), MediaViewer.class);
|
||||
Intent image = new Intent(this, MediaViewer.class);
|
||||
image.putExtra(KEY_MEDIA_LINK, new String[]{user.getImageLink()});
|
||||
image.putExtra(KEY_MEDIA_TYPE, IMAGE);
|
||||
startActivity(image);
|
@ -7,21 +7,23 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
|
||||
import org.nuclearfog.twidda.fragment.MessageListFragment;
|
||||
import org.nuclearfog.twidda.fragment.TrendListFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetListFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetListFragment.TweetType;
|
||||
import org.nuclearfog.twidda.fragment.UserListFragment;
|
||||
import org.nuclearfog.twidda.fragment.UserListFragment.UserType;
|
||||
import org.nuclearfog.twidda.fragment.ListFragment;
|
||||
import org.nuclearfog.twidda.fragment.MessageFragment;
|
||||
import org.nuclearfog.twidda.fragment.TrendFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetFragment.TweetType;
|
||||
import org.nuclearfog.twidda.fragment.UserFragment;
|
||||
import org.nuclearfog.twidda.fragment.UserFragment.UserType;
|
||||
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.KEY_FRAG_TWEET_FIX_LAYOUT;
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.KEY_FRAG_TWEET_ID;
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.KEY_FRAG_TWEET_MODE;
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.KEY_FRAG_TWEET_SEARCH;
|
||||
import static org.nuclearfog.twidda.fragment.UserListFragment.KEY_FRAG_USER_FIX_LAYOUT;
|
||||
import static org.nuclearfog.twidda.fragment.UserListFragment.KEY_FRAG_USER_ID;
|
||||
import static org.nuclearfog.twidda.fragment.UserListFragment.KEY_FRAG_USER_MODE;
|
||||
import static org.nuclearfog.twidda.fragment.UserListFragment.KEY_FRAG_USER_SEARCH;
|
||||
import static org.nuclearfog.twidda.fragment.ListFragment.KEY_FRAG_LIST;
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.KEY_FRAG_TWEET_FIX_LAYOUT;
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.KEY_FRAG_TWEET_ID;
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.KEY_FRAG_TWEET_MODE;
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.KEY_FRAG_TWEET_SEARCH;
|
||||
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_FIX_LAYOUT;
|
||||
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_ID;
|
||||
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_MODE;
|
||||
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_SEARCH;
|
||||
|
||||
public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
|
||||
@ -33,7 +35,9 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
FRIENDS_PAGE,
|
||||
FOLLOWER_PAGE,
|
||||
RETWEETER_PAGE,
|
||||
FAVOR_PAGE
|
||||
FAVOR_PAGE,
|
||||
LIST_PAGE,
|
||||
SUBSCRIBER_PAGE
|
||||
}
|
||||
|
||||
private final Fragment[] fragments;
|
||||
@ -48,9 +52,9 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
home_tl.putBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, true);
|
||||
ment_tl.putBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, true);
|
||||
fragments = new Fragment[3];
|
||||
fragments[0] = new TweetListFragment();
|
||||
fragments[1] = new TrendListFragment();
|
||||
fragments[2] = new TweetListFragment();
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new TrendFragment();
|
||||
fragments[2] = new TweetFragment();
|
||||
fragments[0].setArguments(home_tl);
|
||||
fragments[2].setArguments(ment_tl);
|
||||
}
|
||||
@ -69,8 +73,8 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
usr_tweet.putSerializable(KEY_FRAG_TWEET_MODE, TweetType.USER_TWEET);
|
||||
usr_favor.putSerializable(KEY_FRAG_TWEET_MODE, TweetType.USER_FAVOR);
|
||||
fragments = new Fragment[2];
|
||||
fragments[0] = new TweetListFragment();
|
||||
fragments[1] = new TweetListFragment();
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new TweetFragment();
|
||||
fragments[0].setArguments(usr_tweet);
|
||||
fragments[1].setArguments(usr_favor);
|
||||
break;
|
||||
@ -85,8 +89,8 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
tweetSearch.putBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, true);
|
||||
userSearch.putBoolean(KEY_FRAG_USER_FIX_LAYOUT, true);
|
||||
fragments = new Fragment[2];
|
||||
fragments[0] = new TweetListFragment();
|
||||
fragments[1] = new UserListFragment();
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[1] = new UserFragment();
|
||||
fragments[0].setArguments(tweetSearch);
|
||||
fragments[1].setArguments(userSearch);
|
||||
break;
|
||||
@ -98,13 +102,13 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
param.putBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, false);
|
||||
param.putLong(KEY_FRAG_TWEET_ID, id);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new TweetListFragment();
|
||||
fragments[0] = new TweetFragment();
|
||||
fragments[0].setArguments(param);
|
||||
break;
|
||||
|
||||
case MESSAGE_PAGE:
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new MessageListFragment();
|
||||
fragments[0] = new MessageFragment();
|
||||
break;
|
||||
|
||||
case FRIENDS_PAGE:
|
||||
@ -112,7 +116,7 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
uParam.putLong(KEY_FRAG_USER_ID, id);
|
||||
uParam.putSerializable(KEY_FRAG_USER_MODE, UserType.FRIENDS);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
@ -121,7 +125,7 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
uParam.putLong(KEY_FRAG_USER_ID, id);
|
||||
uParam.putSerializable(KEY_FRAG_USER_MODE, UserType.FOLLOWS);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
@ -130,7 +134,7 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
uParam.putLong(KEY_FRAG_USER_ID, id);
|
||||
uParam.putSerializable(KEY_FRAG_USER_MODE, UserType.RETWEET);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
@ -139,7 +143,24 @@ public class FragmentAdapter extends FragmentPagerAdapter {
|
||||
uParam.putLong(KEY_FRAG_USER_ID, id);
|
||||
uParam.putSerializable(KEY_FRAG_USER_MODE, UserType.FAVORIT);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new UserListFragment();
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
case LIST_PAGE:
|
||||
uParam = new Bundle();
|
||||
uParam.putLong(KEY_FRAG_LIST, id);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new ListFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
case SUBSCRIBER_PAGE:
|
||||
uParam = new Bundle();
|
||||
uParam.putLong(KEY_FRAG_USER_ID, id);
|
||||
uParam.putSerializable(KEY_FRAG_USER_MODE, UserType.SUBSCR);
|
||||
fragments = new Fragment[1];
|
||||
fragments[0] = new UserFragment();
|
||||
fragments[0].setArguments(uParam);
|
||||
break;
|
||||
|
||||
|
141
app/src/main/java/org/nuclearfog/twidda/adapter/ListAdapter.java
Normal file
141
app/src/main/java/org/nuclearfog/twidda/adapter/ListAdapter.java
Normal file
@ -0,0 +1,141 @@
|
||||
package org.nuclearfog.twidda.adapter;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView.Adapter;
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.backend.helper.StringTools;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterList;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ListAdapter extends Adapter<ListAdapter.ListHolder> {
|
||||
|
||||
private WeakReference<ListClickListener> listener;
|
||||
private List<TwitterList> data;
|
||||
private NumberFormat formatter;
|
||||
private int fontColor;
|
||||
|
||||
public ListAdapter(ListClickListener l) {
|
||||
data = new ArrayList<>();
|
||||
listener = new WeakReference<>(l);
|
||||
formatter = NumberFormat.getIntegerInstance();
|
||||
fontColor = Color.WHITE;
|
||||
}
|
||||
|
||||
|
||||
public void setData(List<TwitterList> newData) {
|
||||
data.clear();
|
||||
data.addAll(newData);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
public void updateItem(TwitterList newItem) {
|
||||
int index = data.indexOf(newItem);
|
||||
if (index != -1) {
|
||||
data.set(index, newItem);
|
||||
notifyItemChanged(index);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(int fontColor) {
|
||||
this.fontColor = fontColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return data.size();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ListHolder onCreateViewHolder(@NonNull final ViewGroup parent, int viewType) {
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
|
||||
return new ListHolder(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ListHolder vh, final int index) {
|
||||
final TwitterList item = data.get(index);
|
||||
final TwitterUser owner = item.getListOwner();
|
||||
vh.title.setText(item.getShortName());
|
||||
vh.ownername.setText(owner.getScreenname());
|
||||
vh.description.setText(item.getDescription());
|
||||
vh.createdAt.setText(StringTools.getTimeString(item.getCreatedAt()));
|
||||
vh.memberCount.setText(formatter.format(item.getMemberCount()));
|
||||
vh.subscriberCount.setText(formatter.format(item.getSubscriberCount()));
|
||||
vh.title.setTextColor(fontColor);
|
||||
vh.ownername.setTextColor(fontColor);
|
||||
vh.description.setTextColor(fontColor);
|
||||
vh.createdAt.setTextColor(fontColor);
|
||||
Picasso.get().load(owner.getImageLink() + "_mini").into(vh.pb_image);
|
||||
vh.pb_image.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener.get() != null)
|
||||
listener.get().onClick(owner.getId(), ListClickListener.Action.PROFILE);
|
||||
}
|
||||
});
|
||||
vh.followList.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener.get() != null)
|
||||
listener.get().onClick(item.getId(), ListClickListener.Action.FOLLOW);
|
||||
}
|
||||
});
|
||||
vh.subscriberCount.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (listener.get() != null)
|
||||
listener.get().onClick(item.getId(), ListClickListener.Action.SUBSCRIBER);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
class ListHolder extends ViewHolder {
|
||||
final ImageView pb_image;
|
||||
final Button followList;
|
||||
final TextView title, ownername, description, createdAt;
|
||||
final TextView memberCount, subscriberCount;
|
||||
|
||||
ListHolder(View v) {
|
||||
super(v);
|
||||
pb_image = v.findViewById(R.id.list_owner_profile);
|
||||
followList = v.findViewById(R.id.list_follow);
|
||||
title = v.findViewById(R.id.list_title);
|
||||
ownername = v.findViewById(R.id.list_ownername);
|
||||
description = v.findViewById(R.id.list_description);
|
||||
createdAt = v.findViewById(R.id.list_createdat);
|
||||
memberCount = v.findViewById(R.id.list_member);
|
||||
subscriberCount = v.findViewById(R.id.list_subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
public interface ListClickListener {
|
||||
|
||||
enum Action {
|
||||
PROFILE,
|
||||
FOLLOW,
|
||||
SUBSCRIBER
|
||||
}
|
||||
|
||||
void onClick(long id, Action action);
|
||||
}
|
||||
}
|
@ -51,6 +51,19 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
|
||||
}
|
||||
|
||||
|
||||
public void remove(long id) {
|
||||
int pos = -1;
|
||||
for (int index = 0; index < messages.size() && pos < 0; index++) {
|
||||
if (messages.get(index).getId() == id) {
|
||||
messages.remove(index);
|
||||
pos = index;
|
||||
}
|
||||
}
|
||||
if (pos != -1)
|
||||
notifyItemRemoved(pos);
|
||||
}
|
||||
|
||||
|
||||
public void setColor(int fontColor, int highlight) {
|
||||
this.fontColor = fontColor;
|
||||
this.highlight = highlight;
|
||||
@ -96,7 +109,7 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
|
||||
vh.message.setLinkTextColor(highlight);
|
||||
vh.username.setText(message.getSender().getUsername());
|
||||
vh.screenname.setText(message.getSender().getScreenname());
|
||||
vh.createdAt.setText(StringTools.getString(message.getTime()));
|
||||
vh.createdAt.setText(StringTools.getTimeString(message.getTime()));
|
||||
vh.receivername.setText(message.getReceiver().getScreenname());
|
||||
vh.message.setTextColor(fontColor);
|
||||
vh.username.setTextColor(fontColor);
|
||||
|
@ -89,9 +89,8 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
|
||||
index = pos;
|
||||
}
|
||||
}
|
||||
if (index != -1) {
|
||||
if (index != -1)
|
||||
notifyItemRemoved(index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -141,7 +140,7 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
|
||||
vh.tweet.setText(text);
|
||||
vh.retweet.setText(formatter.format(tweet.getRetweetCount()));
|
||||
vh.favorite.setText(formatter.format(tweet.getFavorCount()));
|
||||
vh.time.setText(StringTools.getString(tweet.getTime()));
|
||||
vh.time.setText(StringTools.getTimeString(tweet.getTime()));
|
||||
vh.username.setTextColor(font_color);
|
||||
vh.screenname.setTextColor(font_color);
|
||||
vh.tweet.setTextColor(font_color);
|
||||
|
@ -8,8 +8,8 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.MediaViewer;
|
||||
import org.nuclearfog.twidda.adapter.ImageAdapter;
|
||||
import org.nuclearfog.twidda.window.MediaViewer;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
@ -0,0 +1,91 @@
|
||||
package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.adapter.ListAdapter;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterList;
|
||||
import org.nuclearfog.twidda.fragment.ListFragment;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
|
||||
|
||||
public class ListLoader extends AsyncTask<Long, Void, List<TwitterList>> {
|
||||
|
||||
public enum Action {
|
||||
LOAD,
|
||||
FOLLOW,
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private TwitterEngine.EngineException twException;
|
||||
private WeakReference<ListFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private ListAdapter adapter;
|
||||
private Action action;
|
||||
|
||||
public ListLoader(ListFragment frag, Action action) {
|
||||
ui = new WeakReference<>(frag);
|
||||
mTwitter = TwitterEngine.getInstance(frag.getContext());
|
||||
adapter = frag.getAdapter();
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
if (ui.get() != null)
|
||||
ui.get().setRefresh(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<TwitterList> doInBackground(Long[] param) {
|
||||
try {
|
||||
switch (action) {
|
||||
case LOAD:
|
||||
return mTwitter.getUserList(param[0]);
|
||||
|
||||
case FOLLOW:
|
||||
TwitterList list = mTwitter.followUserList(param[0]);
|
||||
List<TwitterList> result = new ArrayList<>(1);
|
||||
result.add(list);
|
||||
return result;
|
||||
}
|
||||
|
||||
} catch (TwitterEngine.EngineException twException) {
|
||||
this.twException = twException;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<TwitterList> result) {
|
||||
if (ui.get() != null) {
|
||||
if (result != null) {
|
||||
switch (action) {
|
||||
case LOAD:
|
||||
adapter.setData(result);
|
||||
break;
|
||||
|
||||
case FOLLOW:
|
||||
adapter.updateItem(result.get(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (twException != null)
|
||||
Toast.makeText(ui.get().getContext(), twException.getMessageResource(), LENGTH_SHORT).show();
|
||||
ui.get().setRefresh(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
if (ui.get() != null)
|
||||
ui.get().setRefresh(false);
|
||||
}
|
||||
}
|
@ -6,8 +6,8 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.activity.AppSettings;
|
||||
import org.nuclearfog.twidda.backend.items.TrendLocation;
|
||||
import org.nuclearfog.twidda.window.AppSettings;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
|
@ -8,7 +8,7 @@ import androidx.annotation.Nullable;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.fragment.MessageListFragment;
|
||||
import org.nuclearfog.twidda.fragment.MessageFragment;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
@ -27,13 +27,14 @@ public class MessageLoader extends AsyncTask<Long, Void, List<Message>> {
|
||||
@Nullable
|
||||
private TwitterEngine.EngineException twException;
|
||||
private Mode mode;
|
||||
private WeakReference<MessageListFragment> ui;
|
||||
private WeakReference<MessageFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private AppDatabase db;
|
||||
private MessageAdapter adapter;
|
||||
private long id;
|
||||
|
||||
|
||||
public MessageLoader(MessageListFragment fragment, Mode mode) {
|
||||
public MessageLoader(MessageFragment fragment, Mode mode) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
db = new AppDatabase(fragment.getContext());
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
@ -68,17 +69,15 @@ public class MessageLoader extends AsyncTask<Long, Void, List<Message>> {
|
||||
|
||||
case DEL:
|
||||
messageId = param[0];
|
||||
id = messageId;
|
||||
mTwitter.deleteMessage(messageId);
|
||||
db.deleteDm(messageId);
|
||||
messages = db.getMessages();
|
||||
break;
|
||||
}
|
||||
} catch (TwitterEngine.EngineException twException) {
|
||||
this.twException = twException;
|
||||
if (twException.statusNotFound()) {
|
||||
if (twException.statusNotFound())
|
||||
db.deleteDm(messageId);
|
||||
messages = db.getMessages();
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
@ -91,8 +90,12 @@ public class MessageLoader extends AsyncTask<Long, Void, List<Message>> {
|
||||
if (ui.get() != null) {
|
||||
if (messages != null)
|
||||
adapter.replaceAll(messages);
|
||||
if (twException != null)
|
||||
if (twException != null) {
|
||||
Toast.makeText(ui.get().getContext(), twException.getMessageResource(), LENGTH_SHORT).show();
|
||||
if (twException.statusNotFound())
|
||||
adapter.remove(id);
|
||||
} else if (mode == Mode.DEL)
|
||||
adapter.remove(id);
|
||||
ui.get().setRefresh(false);
|
||||
}
|
||||
}
|
||||
|
@ -11,8 +11,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.MessagePopup;
|
||||
import org.nuclearfog.twidda.backend.items.MessageHolder;
|
||||
import org.nuclearfog.twidda.window.MessagePopup;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
@ -10,15 +10,15 @@ import android.widget.Toast;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.ProfileSettings;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.backend.items.UserHolder;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.window.ProfileSettings;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.window.UserProfile.RETURN_PROFILE_CHANGED;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.RETURN_PROFILE_CHANGED;
|
||||
|
||||
|
||||
public class ProfileEditor extends AsyncTask<Void, Void, TwitterUser> {
|
||||
|
@ -7,10 +7,10 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.backend.items.UserProperties;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
@ -7,7 +7,7 @@ import android.widget.Toast;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.window.LoginPage;
|
||||
import org.nuclearfog.twidda.activity.LoginPage;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
@ -7,14 +7,14 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.TweetDetail;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.window.TweetDetail;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
import static org.nuclearfog.twidda.fragment.TweetListFragment.RETURN_TWEET_CHANGED;
|
||||
import static org.nuclearfog.twidda.fragment.TweetFragment.RETURN_TWEET_CHANGED;
|
||||
|
||||
|
||||
public class StatusLoader extends AsyncTask<Long, Tweet, Tweet> {
|
||||
|
@ -12,8 +12,8 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.TweetPopup;
|
||||
import org.nuclearfog.twidda.backend.items.TweetHolder;
|
||||
import org.nuclearfog.twidda.window.TweetPopup;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
@ -8,8 +8,7 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import org.nuclearfog.twidda.adapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.fragment.TrendListFragment;
|
||||
import org.nuclearfog.twidda.fragment.TrendFragment;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
@ -17,23 +16,20 @@ import java.util.List;
|
||||
import static android.widget.Toast.LENGTH_SHORT;
|
||||
|
||||
|
||||
public class TrendLoader extends AsyncTask<Void, Void, List<String>> {
|
||||
public class TrendLoader extends AsyncTask<Integer, Void, List<String>> {
|
||||
|
||||
@Nullable
|
||||
private TwitterEngine.EngineException twException;
|
||||
private WeakReference<TrendListFragment> ui;
|
||||
private WeakReference<TrendFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private AppDatabase db;
|
||||
private TrendAdapter adapter;
|
||||
private int woeId;
|
||||
|
||||
|
||||
public TrendLoader(@NonNull TrendListFragment fragment) {
|
||||
public TrendLoader(@NonNull TrendFragment fragment) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
db = new AppDatabase(fragment.getContext());
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
GlobalSettings settings = GlobalSettings.getInstance(fragment.getContext());
|
||||
woeId = settings.getTrendLocation().getWoeId();
|
||||
adapter = fragment.getAdapter();
|
||||
}
|
||||
|
||||
@ -46,8 +42,9 @@ public class TrendLoader extends AsyncTask<Void, Void, List<String>> {
|
||||
|
||||
|
||||
@Override
|
||||
protected List<String> doInBackground(Void[] v) {
|
||||
protected List<String> doInBackground(Integer[] param) {
|
||||
List<String> trends;
|
||||
int woeId = param[0];
|
||||
try {
|
||||
if (adapter.isEmpty()) {
|
||||
trends = db.getTrends(woeId);
|
||||
|
@ -8,7 +8,7 @@ import androidx.annotation.Nullable;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.AppDatabase;
|
||||
import org.nuclearfog.twidda.fragment.TweetListFragment;
|
||||
import org.nuclearfog.twidda.fragment.TweetFragment;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
@ -34,13 +34,13 @@ public class TweetLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
||||
@Nullable
|
||||
private TwitterEngine.EngineException twException;
|
||||
private Mode mode;
|
||||
private WeakReference<TweetListFragment> ui;
|
||||
private WeakReference<TweetFragment> ui;
|
||||
private TweetAdapter adapter;
|
||||
private TwitterEngine mTwitter;
|
||||
private AppDatabase db;
|
||||
|
||||
|
||||
public TweetLoader(TweetListFragment fragment, Mode mode) {
|
||||
public TweetLoader(TweetFragment fragment, Mode mode) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
db = new AppDatabase(fragment.getContext());
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
@ -64,59 +64,63 @@ public class TweetLoader extends AsyncTask<Object, Void, List<Tweet>> {
|
||||
try {
|
||||
switch (mode) {
|
||||
case TL_HOME:
|
||||
int page = (int) param[0];
|
||||
if (adapter.isEmpty()) {
|
||||
tweets = db.getHomeTimeline();
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getHome(1, sinceId);
|
||||
tweets = mTwitter.getHome(page, sinceId);
|
||||
db.storeHomeTimeline(tweets);
|
||||
}
|
||||
} else {
|
||||
sinceId = adapter.getItemId(0);
|
||||
tweets = mTwitter.getHome(1, sinceId);
|
||||
tweets = mTwitter.getHome(page, sinceId);
|
||||
db.storeHomeTimeline(tweets);
|
||||
}
|
||||
break;
|
||||
|
||||
case TL_MENT:
|
||||
page = (int) param[0];
|
||||
if (adapter.isEmpty()) {
|
||||
tweets = db.getMentions();
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getMention(1, sinceId);
|
||||
tweets = mTwitter.getMention(page, sinceId);
|
||||
db.storeMentions(tweets);
|
||||
}
|
||||
} else {
|
||||
sinceId = adapter.getItemId(0);
|
||||
tweets = mTwitter.getMention(1, sinceId);
|
||||
tweets = mTwitter.getMention(page, sinceId);
|
||||
db.storeMentions(tweets);
|
||||
}
|
||||
break;
|
||||
|
||||
case USR_TWEETS:
|
||||
long tweetId = (long) param[0];
|
||||
page = (int) param[1];
|
||||
if (adapter.isEmpty()) {
|
||||
tweets = db.getUserTweets(tweetId);
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getUserTweets(tweetId, sinceId, 1);
|
||||
tweets = mTwitter.getUserTweets(tweetId, sinceId, page);
|
||||
db.storeUserTweets(tweets);
|
||||
}
|
||||
} else {
|
||||
sinceId = adapter.getItemId(0);
|
||||
tweets = mTwitter.getUserTweets(tweetId, sinceId, 1);
|
||||
tweets = mTwitter.getUserTweets(tweetId, sinceId, page);
|
||||
db.storeUserTweets(tweets);
|
||||
}
|
||||
break;
|
||||
|
||||
case USR_FAVORS:
|
||||
tweetId = (long) param[0];
|
||||
page = (int) param[1];
|
||||
if (adapter.isEmpty()) {
|
||||
tweets = db.getUserFavs(tweetId);
|
||||
if (tweets.isEmpty()) {
|
||||
tweets = mTwitter.getUserFavs(tweetId, sinceId, 1);
|
||||
tweets = mTwitter.getUserFavs(tweetId, sinceId, page);
|
||||
db.storeUserFavs(tweets, tweetId);
|
||||
}
|
||||
} else {
|
||||
sinceId = adapter.getItemId(0);
|
||||
tweets = mTwitter.getUserFavs(tweetId, sinceId, 1);
|
||||
tweets = mTwitter.getUserFavs(tweetId, sinceId, page);
|
||||
db.storeUserFavs(tweets, tweetId);
|
||||
}
|
||||
break;
|
||||
|
@ -11,6 +11,7 @@ import org.nuclearfog.twidda.backend.items.MessageHolder;
|
||||
import org.nuclearfog.twidda.backend.items.TrendLocation;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.backend.items.TweetHolder;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterList;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.backend.items.UserHolder;
|
||||
import org.nuclearfog.twidda.backend.items.UserProperties;
|
||||
@ -29,6 +30,7 @@ import twitter4j.Location;
|
||||
import twitter4j.Paging;
|
||||
import twitter4j.Query;
|
||||
import twitter4j.QueryResult;
|
||||
import twitter4j.ResponseList;
|
||||
import twitter4j.Status;
|
||||
import twitter4j.StatusUpdate;
|
||||
import twitter4j.Trend;
|
||||
@ -37,6 +39,7 @@ import twitter4j.TwitterException;
|
||||
import twitter4j.TwitterFactory;
|
||||
import twitter4j.UploadedMedia;
|
||||
import twitter4j.User;
|
||||
import twitter4j.UserList;
|
||||
import twitter4j.auth.AccessToken;
|
||||
import twitter4j.auth.RequestToken;
|
||||
import twitter4j.conf.Configuration;
|
||||
@ -83,9 +86,8 @@ public class TwitterEngine {
|
||||
* @return TwitterEngine Instance
|
||||
*/
|
||||
public static TwitterEngine getInstance(Context context) {
|
||||
if (mTwitter == null) {
|
||||
if (mTwitter == null)
|
||||
mTwitter = new TwitterEngine(context);
|
||||
}
|
||||
mTwitter.setLoad();
|
||||
return mTwitter;
|
||||
}
|
||||
@ -286,9 +288,9 @@ public class TwitterEngine {
|
||||
* @return List of User Tweets
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
List<Tweet> getUserTweets(long userId, long sinceId, long page) throws EngineException {
|
||||
List<Tweet> getUserTweets(long userId, long sinceId, int page) throws EngineException {
|
||||
try {
|
||||
Paging paging = new Paging((int) page, load, sinceId);
|
||||
Paging paging = new Paging(page, load, sinceId);
|
||||
return convertStatusList(twitter.getUserTimeline(userId, paging));
|
||||
} catch (TwitterException err) {
|
||||
throw new EngineException(err);
|
||||
@ -305,9 +307,9 @@ public class TwitterEngine {
|
||||
* @return List of User Favs
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
List<Tweet> getUserFavs(long userId, long sinceId, long page) throws EngineException {
|
||||
List<Tweet> getUserFavs(long userId, long sinceId, int page) throws EngineException {
|
||||
try {
|
||||
Paging paging = new Paging((int) page, load, sinceId);
|
||||
Paging paging = new Paging(page, load, sinceId);
|
||||
List<Status> favorits = twitter.getFavorites(userId, paging);
|
||||
return convertStatusList(favorits);
|
||||
} catch (TwitterException err) {
|
||||
@ -711,10 +713,14 @@ public class TwitterEngine {
|
||||
* Delete Direct Message
|
||||
*
|
||||
* @param id Message ID
|
||||
* @throws TwitterException if Access is unavailable
|
||||
* @throws EngineException if Access is unavailable or message not found
|
||||
*/
|
||||
void deleteMessage(long id) throws TwitterException {
|
||||
twitter.destroyDirectMessage(id);
|
||||
void deleteMessage(long id) throws EngineException {
|
||||
try {
|
||||
twitter.destroyDirectMessage(id);
|
||||
} catch (TwitterException err) {
|
||||
throw new EngineException(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -743,7 +749,7 @@ public class TwitterEngine {
|
||||
* Update user profile image_add
|
||||
*
|
||||
* @param path image path
|
||||
* @throws EngineException if Access is unavailable
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
void updateProfileImage(String path) throws EngineException {
|
||||
try {
|
||||
@ -755,6 +761,63 @@ public class TwitterEngine {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get user list
|
||||
*
|
||||
* @param userId id of the list owner
|
||||
* @return list information
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
List<TwitterList> getUserList(long userId) throws EngineException {
|
||||
try {
|
||||
List<TwitterList> result = new LinkedList<>();
|
||||
ResponseList<UserList> lists = twitter.getUserLists(userId);
|
||||
for (UserList list : lists)
|
||||
result.add(new TwitterList(list, twitterID));
|
||||
return result;
|
||||
} catch (TwitterException err) {
|
||||
throw new EngineException(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Follow action for twitter list
|
||||
*
|
||||
* @param listId ID of the list
|
||||
* @return List information
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
TwitterList followUserList(long listId) throws EngineException {
|
||||
try {
|
||||
UserList list = twitter.showUserList(listId);
|
||||
if (list.isFollowing())
|
||||
list = twitter.destroyUserListSubscription(listId);
|
||||
else
|
||||
list = twitter.createUserListSubscription(listId);
|
||||
return new TwitterList(list, twitterID);
|
||||
} catch (TwitterException err) {
|
||||
throw new EngineException(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get subscriber of a user list
|
||||
*
|
||||
* @param listId ID of the list
|
||||
* @return list of users following the list
|
||||
* @throws EngineException if access is unavailable
|
||||
*/
|
||||
List<TwitterUser> getListFollower(long listId) throws EngineException {
|
||||
try {
|
||||
return convertUserList(twitter.getUserListSubscribers(listId, -1));
|
||||
} catch (TwitterException err) {
|
||||
throw new EngineException(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* convert #twitter4j.User to TwitterUser List
|
||||
*
|
||||
@ -923,15 +986,10 @@ public class TwitterEngine {
|
||||
break;
|
||||
|
||||
default:
|
||||
switch (error.getStatusCode()) {
|
||||
case 401:
|
||||
messageResource = R.string.not_authorized;
|
||||
break;
|
||||
|
||||
default:
|
||||
messageResource = R.string.error;
|
||||
break;
|
||||
}
|
||||
if (error.getStatusCode() == 401)
|
||||
messageResource = R.string.not_authorized;
|
||||
else
|
||||
messageResource = R.string.error;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import androidx.annotation.Nullable;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.adapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.fragment.UserListFragment;
|
||||
import org.nuclearfog.twidda.fragment.UserFragment;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.LinkedList;
|
||||
@ -26,18 +26,19 @@ public class UserLoader extends AsyncTask<Object, Void, List<TwitterUser>> {
|
||||
FRIENDS,
|
||||
RETWEET,
|
||||
FAVORIT,
|
||||
SEARCH
|
||||
SEARCH,
|
||||
SUBSCRIBER
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private TwitterEngine.EngineException twException;
|
||||
private Mode mode;
|
||||
private WeakReference<UserListFragment> ui;
|
||||
private WeakReference<UserFragment> ui;
|
||||
private TwitterEngine mTwitter;
|
||||
private UserAdapter adapter;
|
||||
|
||||
|
||||
public UserLoader(UserListFragment fragment, Mode mode) {
|
||||
public UserLoader(UserFragment fragment, Mode mode) {
|
||||
ui = new WeakReference<>(fragment);
|
||||
mTwitter = TwitterEngine.getInstance(fragment.getContext());
|
||||
adapter = fragment.getAdapter();
|
||||
@ -70,6 +71,9 @@ public class UserLoader extends AsyncTask<Object, Void, List<TwitterUser>> {
|
||||
|
||||
case SEARCH:
|
||||
return mTwitter.searchUsers((String) param[0]);
|
||||
|
||||
case SUBSCRIBER:
|
||||
return mTwitter.getListFollower((long) param[0]);
|
||||
}
|
||||
} catch (TwitterEngine.EngineException twException) {
|
||||
this.twException = twException;
|
||||
|
@ -15,7 +15,7 @@ public abstract class StringTools {
|
||||
NONE
|
||||
}
|
||||
|
||||
public static String getString(long time) {
|
||||
public static String getTimeString(long time) {
|
||||
long diff = new Date().getTime() - time;
|
||||
long seconds = diff / 1000;
|
||||
long minutes = seconds / 60;
|
||||
|
@ -0,0 +1,151 @@
|
||||
package org.nuclearfog.twidda.backend.items;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import twitter4j.UserList;
|
||||
|
||||
/**
|
||||
* Class for Twitter list information
|
||||
*/
|
||||
public class TwitterList {
|
||||
|
||||
private final long id;
|
||||
private final long createdAt;
|
||||
private final String shortName;
|
||||
private final String fullName;
|
||||
private final String description;
|
||||
|
||||
private final TwitterUser owner;
|
||||
private final boolean isPrivate;
|
||||
private final boolean isFollowing;
|
||||
private final boolean enableFollow;
|
||||
private final int memberCount;
|
||||
private final int subscriberCnt;
|
||||
|
||||
public TwitterList(UserList list, long homeId) {
|
||||
id = list.getId();
|
||||
shortName = list.getName();
|
||||
fullName = list.getFullName();
|
||||
createdAt = list.getCreatedAt().getTime();
|
||||
description = list.getDescription();
|
||||
owner = new TwitterUser(list.getUser());
|
||||
isFollowing = list.isFollowing();
|
||||
isPrivate = !list.isPublic();
|
||||
memberCount = list.getMemberCount();
|
||||
subscriberCnt = list.getSubscriberCount();
|
||||
enableFollow = homeId != owner.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* get List ID
|
||||
*
|
||||
* @return List ID
|
||||
*/
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* get date of Creation
|
||||
*
|
||||
* @return date long format
|
||||
*/
|
||||
public long getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* get short name of list
|
||||
*
|
||||
* @return name
|
||||
*/
|
||||
public String getShortName() {
|
||||
return shortName;
|
||||
}
|
||||
|
||||
/**
|
||||
* get full name of list
|
||||
*
|
||||
* @return name
|
||||
*/
|
||||
public String getFullName() {
|
||||
return fullName;
|
||||
}
|
||||
|
||||
/**
|
||||
* get description of list
|
||||
*
|
||||
* @return description
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* get owner
|
||||
*
|
||||
* @return twitter user
|
||||
*/
|
||||
public TwitterUser getListOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* get access information
|
||||
*
|
||||
* @return true is list is private
|
||||
*/
|
||||
public boolean isPrivate() {
|
||||
return isPrivate;
|
||||
}
|
||||
|
||||
/**
|
||||
* get follow status of the current user
|
||||
*
|
||||
* @return true if current user is following
|
||||
*/
|
||||
public boolean isFollowing() {
|
||||
return isFollowing;
|
||||
}
|
||||
|
||||
/**
|
||||
* get member count of the list
|
||||
*
|
||||
* @return member count
|
||||
*/
|
||||
public int getMemberCount() {
|
||||
return memberCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* get subscriber count of the list
|
||||
*
|
||||
* @return subscriber count
|
||||
*/
|
||||
public int getSubscriberCount() {
|
||||
return subscriberCnt;
|
||||
}
|
||||
|
||||
/**
|
||||
* return if current user can follow list
|
||||
*
|
||||
* @return true if user can follow list
|
||||
*/
|
||||
public boolean enableFollow() {
|
||||
return enableFollow;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public String toString() {
|
||||
return shortName + " " + description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o instanceof TwitterList)
|
||||
return ((TwitterList) o).id == id;
|
||||
return false;
|
||||
}
|
||||
}
|
@ -3,6 +3,8 @@ package org.nuclearfog.twidda.database;
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
|
||||
import java.io.File;
|
||||
@ -70,7 +72,7 @@ public class DatabaseAdapter {
|
||||
}
|
||||
|
||||
|
||||
public static DatabaseAdapter getInstance(Context context) {
|
||||
public static DatabaseAdapter getInstance(@NonNull Context context) {
|
||||
if (instance == null)
|
||||
instance = new DatabaseAdapter(context);
|
||||
return instance;
|
||||
|
@ -4,6 +4,8 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.nuclearfog.twidda.backend.items.TrendLocation;
|
||||
|
||||
import java.net.Authenticator;
|
||||
@ -64,7 +66,7 @@ public class GlobalSettings {
|
||||
* @param context Application Context needed for Shared preferences
|
||||
* @return instance of this class
|
||||
*/
|
||||
public static GlobalSettings getInstance(Context context) {
|
||||
public static GlobalSettings getInstance(@NonNull Context context) {
|
||||
if (ourInstance == null) {
|
||||
ourInstance = new GlobalSettings(context);
|
||||
}
|
||||
|
@ -0,0 +1,140 @@
|
||||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.activity.UserDetail;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.adapter.ListAdapter;
|
||||
import org.nuclearfog.twidda.adapter.ListAdapter.ListClickListener;
|
||||
import org.nuclearfog.twidda.backend.ListLoader;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_ID;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.KEY_USERDETAIL_MODE;
|
||||
import static org.nuclearfog.twidda.activity.UserDetail.UserType.SUBSCRIBER;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
|
||||
import static org.nuclearfog.twidda.backend.ListLoader.Action.FOLLOW;
|
||||
import static org.nuclearfog.twidda.backend.ListLoader.Action.LOAD;
|
||||
|
||||
public class ListFragment extends Fragment implements OnRefreshListener, ListClickListener {
|
||||
|
||||
public static final String KEY_FRAG_LIST = "list_owner";
|
||||
|
||||
private SwipeRefreshLayout reloadLayout;
|
||||
private ListAdapter adapter;
|
||||
private ListLoader listTask;
|
||||
|
||||
private long userId;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
|
||||
Bundle b = getArguments();
|
||||
if (b != null)
|
||||
userId = b.getLong(KEY_FRAG_LIST);
|
||||
|
||||
Context context = inflater.getContext();
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
|
||||
adapter = new ListAdapter(this);
|
||||
|
||||
RecyclerView listView = new RecyclerView(inflater.getContext());
|
||||
listView.setLayoutManager(new LinearLayoutManager(context));
|
||||
listView.setHasFixedSize(true);
|
||||
listView.setAdapter(adapter);
|
||||
|
||||
reloadLayout = new SwipeRefreshLayout(context);
|
||||
reloadLayout.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reloadLayout.addView(listView);
|
||||
reloadLayout.setOnRefreshListener(this);
|
||||
return reloadLayout;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
if (listTask == null)
|
||||
load();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (listTask != null && listTask.getStatus() == RUNNING)
|
||||
listTask.cancel(true);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
if (listTask != null && listTask.getStatus() != RUNNING)
|
||||
load();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onClick(long id, Action action) {
|
||||
switch (action) {
|
||||
case PROFILE:
|
||||
Intent profile = new Intent(getContext(), UserProfile.class);
|
||||
profile.putExtra(KEY_PROFILE_ID, id);
|
||||
startActivity(profile);
|
||||
break;
|
||||
|
||||
case FOLLOW:
|
||||
if (listTask != null && listTask.getStatus() != RUNNING) {
|
||||
listTask = new ListLoader(this, FOLLOW);
|
||||
listTask.execute(id);
|
||||
}
|
||||
break;
|
||||
|
||||
case SUBSCRIBER:
|
||||
Intent following = new Intent(getContext(), UserDetail.class);
|
||||
following.putExtra(KEY_USERDETAIL_ID, id);
|
||||
following.putExtra(KEY_USERDETAIL_MODE, SUBSCRIBER);
|
||||
startActivity(following);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ListAdapter getAdapter() {
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
public void setRefresh(boolean enable) {
|
||||
if (enable) {
|
||||
reloadLayout.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (listTask.getStatus() != FINISHED && !reloadLayout.isRefreshing())
|
||||
reloadLayout.setRefreshing(true);
|
||||
}
|
||||
}, 500);
|
||||
} else {
|
||||
reloadLayout.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void load() {
|
||||
listTask = new ListLoader(this, LOAD);
|
||||
listTask.execute(userId);
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
@ -13,25 +14,24 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.MessagePopup;
|
||||
import org.nuclearfog.twidda.activity.SearchPage;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter;
|
||||
import org.nuclearfog.twidda.adapter.MessageAdapter.OnItemSelected;
|
||||
import org.nuclearfog.twidda.backend.MessageLoader;
|
||||
import org.nuclearfog.twidda.backend.MessageLoader.Mode;
|
||||
import org.nuclearfog.twidda.backend.items.Message;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.MessagePopup;
|
||||
import org.nuclearfog.twidda.window.SearchPage;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.MessagePopup.KEY_DM_PREFIX;
|
||||
import static org.nuclearfog.twidda.window.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.window.UserProfile.KEY_PROFILE_ID;
|
||||
import static org.nuclearfog.twidda.activity.MessagePopup.KEY_DM_PREFIX;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
|
||||
|
||||
|
||||
public class MessageListFragment extends Fragment implements OnRefreshListener, OnItemSelected {
|
||||
public class MessageFragment extends Fragment implements OnRefreshListener, OnItemSelected {
|
||||
|
||||
private MessageLoader messageTask;
|
||||
private SwipeRefreshLayout reload;
|
||||
@ -39,23 +39,24 @@ public class MessageListFragment extends Fragment implements OnRefreshListener,
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
|
||||
super.onCreateView(inflater, parent, param);
|
||||
View v = inflater.inflate(R.layout.fragment_list, parent, false);
|
||||
RecyclerView list = v.findViewById(R.id.fragment_list);
|
||||
reload = v.findViewById(R.id.fragment_reload);
|
||||
Context context = inflater.getContext();
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
|
||||
reload.setOnRefreshListener(this);
|
||||
adapter = new MessageAdapter(this);
|
||||
list.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(getContext());
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
adapter.setColor(settings.getFontColor(), settings.getHighlightColor());
|
||||
adapter.setImage(settings.getImageLoad());
|
||||
|
||||
return v;
|
||||
RecyclerView list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.addView(list);
|
||||
reload.setOnRefreshListener(this);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
|
||||
return reload;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
@ -13,20 +14,19 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.SearchPage;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.OnItemClickListener;
|
||||
import org.nuclearfog.twidda.adapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.backend.TrendLoader;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.SearchPage;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.SearchPage.KEY_SEARCH_QUERY;
|
||||
import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY;
|
||||
|
||||
|
||||
public class TrendListFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
public class TrendFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
|
||||
private TrendLoader trendTask;
|
||||
private SwipeRefreshLayout reload;
|
||||
@ -36,20 +36,22 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
|
||||
super.onCreateView(inflater, parent, param);
|
||||
View v = inflater.inflate(R.layout.fragment_list, parent, false);
|
||||
list = v.findViewById(R.id.fragment_list);
|
||||
reload = v.findViewById(R.id.fragment_reload);
|
||||
Context context = inflater.getContext();
|
||||
|
||||
settings = GlobalSettings.getInstance(getContext());
|
||||
reload.setOnRefreshListener(this);
|
||||
settings = GlobalSettings.getInstance(context);
|
||||
adapter = new TrendAdapter(this);
|
||||
list.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(true);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.addView(list);
|
||||
reload.setOnRefreshListener(this);
|
||||
|
||||
setColors();
|
||||
return v;
|
||||
return reload;
|
||||
}
|
||||
|
||||
|
||||
@ -136,7 +138,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
|
||||
|
||||
private void load() {
|
||||
trendTask = new TrendLoader(this);
|
||||
trendTask.execute();
|
||||
trendTask.execute(settings.getTrendLocation().getWoeId());
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
@ -13,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.TweetDetail;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.OnItemClickListener;
|
||||
import org.nuclearfog.twidda.adapter.TweetAdapter;
|
||||
@ -21,15 +22,14 @@ import org.nuclearfog.twidda.backend.TweetLoader;
|
||||
import org.nuclearfog.twidda.backend.TweetLoader.Mode;
|
||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.TweetDetail;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
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.activity.TweetDetail.KEY_TWEET_ID;
|
||||
import static org.nuclearfog.twidda.activity.TweetDetail.KEY_TWEET_NAME;
|
||||
|
||||
|
||||
public class TweetListFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
public class TweetFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
|
||||
public static final String KEY_FRAG_TWEET_MODE = "tweet_mode";
|
||||
public static final String KEY_FRAG_TWEET_SEARCH = "tweet_search";
|
||||
@ -60,31 +60,30 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
|
||||
super.onCreateView(inflater, parent, param);
|
||||
boolean fixSize;
|
||||
boolean fixSize = false;
|
||||
Bundle b = getArguments();
|
||||
if (b != null && b.containsKey(KEY_FRAG_TWEET_MODE)) {
|
||||
Context context = inflater.getContext();
|
||||
|
||||
if (b != null) {
|
||||
mode = (TweetType) b.getSerializable(KEY_FRAG_TWEET_MODE);
|
||||
id = b.getLong(KEY_FRAG_TWEET_ID, -1);
|
||||
search = b.getString(KEY_FRAG_TWEET_SEARCH, "");
|
||||
fixSize = b.getBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, false);
|
||||
} else {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
View v = inflater.inflate(R.layout.fragment_list, parent, false);
|
||||
reload = v.findViewById(R.id.fragment_reload);
|
||||
list = v.findViewById(R.id.fragment_list);
|
||||
|
||||
settings = GlobalSettings.getInstance(getContext());
|
||||
reload.setOnRefreshListener(this);
|
||||
settings = GlobalSettings.getInstance(context);
|
||||
adapter = new TweetAdapter(this);
|
||||
list.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(fixSize);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.addView(list);
|
||||
reload.setOnRefreshListener(this);
|
||||
|
||||
setColors();
|
||||
return v;
|
||||
return reload;
|
||||
}
|
||||
|
||||
|
||||
@ -183,22 +182,22 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
|
||||
switch (mode) {
|
||||
case HOME:
|
||||
tweetTask = new TweetLoader(this, Mode.TL_HOME);
|
||||
tweetTask.execute();
|
||||
tweetTask.execute(1);
|
||||
break;
|
||||
|
||||
case MENT:
|
||||
tweetTask = new TweetLoader(this, Mode.TL_MENT);
|
||||
tweetTask.execute();
|
||||
tweetTask.execute(1);
|
||||
break;
|
||||
|
||||
case USER_TWEET:
|
||||
tweetTask = new TweetLoader(this, Mode.USR_TWEETS);
|
||||
tweetTask.execute(id);
|
||||
tweetTask.execute(id, 1);
|
||||
break;
|
||||
|
||||
case USER_FAVOR:
|
||||
tweetTask = new TweetLoader(this, Mode.USR_FAVORS);
|
||||
tweetTask.execute(id);
|
||||
tweetTask.execute(id, 1);
|
||||
break;
|
||||
|
||||
case TWEET_ANSR:
|
@ -1,5 +1,6 @@
|
||||
package org.nuclearfog.twidda.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
@ -13,8 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
|
||||
import org.nuclearfog.twidda.BuildConfig;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.activity.UserProfile;
|
||||
import org.nuclearfog.twidda.adapter.FragmentAdapter.FragmentChangeObserver;
|
||||
import org.nuclearfog.twidda.adapter.OnItemClickListener;
|
||||
import org.nuclearfog.twidda.adapter.UserAdapter;
|
||||
@ -22,14 +22,13 @@ import org.nuclearfog.twidda.backend.UserLoader;
|
||||
import org.nuclearfog.twidda.backend.UserLoader.Mode;
|
||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
||||
import org.nuclearfog.twidda.database.GlobalSettings;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import static android.os.AsyncTask.Status.FINISHED;
|
||||
import static android.os.AsyncTask.Status.RUNNING;
|
||||
import static org.nuclearfog.twidda.window.UserProfile.KEY_PROFILE_ID;
|
||||
import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID;
|
||||
|
||||
|
||||
public class UserListFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
public class UserFragment extends Fragment implements OnRefreshListener, OnItemClickListener, FragmentChangeObserver {
|
||||
|
||||
public static final String KEY_FRAG_USER_MODE = "user_mode";
|
||||
public static final String KEY_FRAG_USER_SEARCH = "user_search";
|
||||
@ -41,7 +40,8 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
|
||||
FRIENDS,
|
||||
RETWEET,
|
||||
FAVORIT,
|
||||
USEARCH
|
||||
USEARCH,
|
||||
SUBSCR
|
||||
}
|
||||
|
||||
private SwipeRefreshLayout reload;
|
||||
@ -51,36 +51,35 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
|
||||
private UserType mode;
|
||||
private String search;
|
||||
private long id;
|
||||
private boolean fixLayout;
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
|
||||
super.onCreateView(inflater, parent, param);
|
||||
Bundle b = getArguments();
|
||||
if (b != null && b.containsKey(KEY_FRAG_USER_MODE)) {
|
||||
Context context = inflater.getContext();
|
||||
GlobalSettings settings = GlobalSettings.getInstance(context);
|
||||
boolean fixLayout = false;
|
||||
if (b != null) {
|
||||
mode = (UserType) b.getSerializable(KEY_FRAG_USER_MODE);
|
||||
id = b.getLong(KEY_FRAG_USER_ID, -1);
|
||||
search = b.getString(KEY_FRAG_USER_SEARCH, "");
|
||||
fixLayout = b.getBoolean(KEY_FRAG_USER_FIX_LAYOUT, true);
|
||||
} else if (BuildConfig.DEBUG) {
|
||||
throw new AssertionError("Bundle error!");
|
||||
}
|
||||
|
||||
View v = inflater.inflate(R.layout.fragment_list, parent, false);
|
||||
list = v.findViewById(R.id.fragment_list);
|
||||
reload = v.findViewById(R.id.fragment_reload);
|
||||
|
||||
GlobalSettings settings = GlobalSettings.getInstance(getContext());
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
adapter = new UserAdapter(this);
|
||||
adapter.setColor(settings.getFontColor());
|
||||
adapter.setImage(settings.getImageLoad());
|
||||
list.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
|
||||
list = new RecyclerView(context);
|
||||
list.setLayoutManager(new LinearLayoutManager(context));
|
||||
list.setHasFixedSize(fixLayout);
|
||||
list.setAdapter(adapter);
|
||||
|
||||
return v;
|
||||
reload = new SwipeRefreshLayout(context);
|
||||
reload.addView(list);
|
||||
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
|
||||
reload.setOnRefreshListener(this);
|
||||
|
||||
return reload;
|
||||
}
|
||||
|
||||
|
||||
@ -177,6 +176,11 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
|
||||
userTask = new UserLoader(this, Mode.SEARCH);
|
||||
userTask.execute(search);
|
||||
break;
|
||||
case SUBSCR:
|
||||
userTask = new UserLoader(this, Mode.SUBSCRIBER);
|
||||
userTask.execute(id);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
9
app/src/main/res/drawable/member.xml
Normal file
9
app/src/main/res/drawable/member.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="20.0"
|
||||
android:viewportHeight="20.0">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M7.725,2.146c-1.016,0.756 -1.289,1.953 -1.239,2.59C6.55,5.515 6.708,6.529 6.708,6.529s-0.313,0.17 -0.313,0.854C6.504,9.1 7.078,8.359 7.196,9.112c0.284,1.814 0.933,1.491 0.933,2.481c0,1.649 -0.68,2.42 -2.803,3.334C3.196,15.845 1,17 1,19v1h18v-1c0,-2 -2.197,-3.155 -4.328,-4.072c-2.123,-0.914 -2.801,-1.684 -2.801,-3.334c0,-0.99 0.647,-0.667 0.932,-2.481c0.119,-0.753 0.692,-0.012 0.803,-1.729c0,-0.684 -0.314,-0.854 -0.314,-0.854s0.158,-1.014 0.221,-1.793c0.065,-0.817 -0.398,-2.561 -2.3,-3.096c-0.333,-0.34 -0.558,-0.881 0.466,-1.424C9.439,0.112 8.918,1.284 7.725,2.146z" />
|
||||
</vector>
|
9
app/src/main/res/drawable/subscriber.xml
Normal file
9
app/src/main/res/drawable/subscriber.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="20"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:pathData="M10,4.4C3.439,4.4 0,9.232 0,10c0,0.766 3.439,5.6 10,5.6c6.56,0 10,-4.834 10,-5.6C20,9.232 16.56,4.4 10,4.4zM10,14.307c-2.455,0 -4.445,-1.928 -4.445,-4.307S7.545,5.691 10,5.691s4.444,1.93 4.444,4.309S12.455,14.307 10,14.307zM10,10c-0.407,-0.447 0.663,-2.154 0,-2.154c-1.228,0 -2.223,0.965 -2.223,2.154S8.772,12.154 10,12.154c1.227,0 2.223,-0.965 2.223,-2.154C12.223,9.453 10.346,10.379 10,10z"
|
||||
android:fillColor="#FFFFFF" />
|
||||
</vector>
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/fragment_reload"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/fragment_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
115
app/src/main/res/layout/item_list.xml
Normal file
115
app/src/main/res/layout/item_list.xml
Normal file
@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
style="@style/CardViewStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/list_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_margin"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="@dimen/profile_middle"
|
||||
android:layout_height="@dimen/profile_middle">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/list_owner_profile"
|
||||
android:layout_width="@dimen/profile_middle"
|
||||
android:layout_height="@dimen/profile_middle"
|
||||
android:contentDescription="@string/item_list_pb_desc" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/list_padding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_ownername"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/listitem_margin"
|
||||
android:text="@string/list_created" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_createdat"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:textSize="12sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/list_bar_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_member"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/listitem_margin"
|
||||
android:layout_weight="1"
|
||||
android:drawablePadding="@dimen/padding_drawable"
|
||||
android:singleLine="true"
|
||||
app:drawableStartCompat="@drawable/member" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/list_subscriber"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/listitem_margin"
|
||||
android:layout_weight="1"
|
||||
android:drawablePadding="@dimen/padding_drawable"
|
||||
app:drawableStartCompat="@drawable/subscriber" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/list_follow"
|
||||
style="@style/Widget.AppCompat.Button.Borderless"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/list_button_height"
|
||||
android:layout_margin="@dimen/listitem_margin"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/button"
|
||||
android:singleLine="true"
|
||||
android:text="@string/follow"
|
||||
app:srcCompat="@drawable/follow" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
19
app/src/main/res/layout/page_list.xml
Normal file
19
app/src/main/res/layout/page_list.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/list_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/list_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?attr/actionBarSize"
|
||||
android:theme="?attr/actionBarTheme" />
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/list_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
@ -27,6 +27,9 @@
|
||||
android:title="@string/directmessage"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/profile_lists"
|
||||
android:title="@string/profile_lists" />
|
||||
<item
|
||||
android:id="@+id/profile_settings"
|
||||
android:visible="false"
|
||||
|
@ -128,4 +128,9 @@
|
||||
<string name="info_get_link">PIN muss erst von Twitter abgefragt werden! Bitte den ersten Button drücken!</string>
|
||||
<string name="error_media_not_found">Datei wurde nicht gefunden!</string>
|
||||
<string name="error_token_not_set">Bitte zuerst link anklicken!</string>
|
||||
<string name="profile_lists">Listen</string>
|
||||
<string name="item_list_pb_desc">Profile Listenbesitzer</string>
|
||||
<string name="list_created">"erstellt am: "</string>
|
||||
<string name="list_appbar">Listen</string>
|
||||
<string name="user_list_subscr">Listenbeobachter</string>
|
||||
</resources>
|
@ -53,4 +53,8 @@
|
||||
<dimen name="tweet_media_button_margin">5dp</dimen>
|
||||
<dimen name="editprofile_upload_button_padding">12dp</dimen>
|
||||
<dimen name="tweet_location_progress_size">30dp</dimen>
|
||||
<dimen name="list_button_height">24dp</dimen>
|
||||
<dimen name="listitem_margin">4dp</dimen>
|
||||
<dimen name="list_padding">5dp</dimen>
|
||||
<dimen name="list_bar_padding">24dp</dimen>
|
||||
</resources>
|
@ -129,4 +129,9 @@
|
||||
<string name="info_get_link">Get Twitter PIN from browser first. Please press the first button!</string>
|
||||
<string name="error_media_not_found">Media not found!</string>
|
||||
<string name="error_token_not_set">Please get link first!</string>
|
||||
<string name="item_list_pb_desc">owner profile</string>
|
||||
<string name="profile_lists">Lists</string>
|
||||
<string name="list_created">created:</string>
|
||||
<string name="list_appbar">Lists</string>
|
||||
<string name="user_list_subscr">List subscriber</string>
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user