mirror of
https://github.com/nuclearfog/Shitter.git
synced 2025-02-09 08:38:38 +01:00
Bugfix
Optimizations changed to RecyclerView
This commit is contained in:
parent
ec4bf33323
commit
902d89af5f
@ -5,10 +5,10 @@ android {
|
||||
compileSdkVersion 27
|
||||
defaultConfig {
|
||||
applicationId "org.nuclearfog.twidda"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 21
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 14
|
||||
versionCode 1
|
||||
versionName '1.1'
|
||||
versionName '1.2'
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
buildTypes {
|
||||
|
@ -6,13 +6,14 @@ import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TabHost;
|
||||
import android.widget.TabHost.TabSpec;
|
||||
|
||||
@ -20,8 +21,9 @@ import org.nuclearfog.twidda.database.TrendDatabase;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.backend.Registration;
|
||||
import org.nuclearfog.twidda.backend.MainPage;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.viewadapter.TrendRecycler;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.window.LoginPage;
|
||||
import org.nuclearfog.twidda.window.SearchPage;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
@ -34,11 +36,12 @@ import org.nuclearfog.twidda.window.TweetPopup;
|
||||
* @see Registration Registing App in Twitter
|
||||
* @see MainPage show Home Window
|
||||
*/
|
||||
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener,
|
||||
SwipeRefreshLayout.OnRefreshListener, TabHost.OnTabChangeListener
|
||||
public class MainActivity extends AppCompatActivity implements
|
||||
SwipeRefreshLayout.OnRefreshListener, TabHost.OnTabChangeListener,
|
||||
TimelineRecycler.OnItemClicked, TrendRecycler.OnItemClicked
|
||||
{
|
||||
private SwipeRefreshLayout timelineReload,trendReload,mentionReload;
|
||||
private ListView timelineList, trendList,mentionList;
|
||||
private RecyclerView timelineList, trendList,mentionList;
|
||||
private MenuItem profile, tweet, search, setting;
|
||||
private SharedPreferences settings;
|
||||
private SearchView searchQuery;
|
||||
@ -47,6 +50,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
private TabHost tabhost;
|
||||
private boolean settingFlag = false;
|
||||
private String currentTab = "timeline";
|
||||
private int background, font_color;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -132,6 +136,9 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
protected void onResume(){
|
||||
super.onResume();
|
||||
if(settingFlag) {
|
||||
timelineList.setAdapter(null);
|
||||
trendList.setAdapter(null);
|
||||
mentionList.setAdapter(null);
|
||||
setTabContent();
|
||||
settingFlag = false;
|
||||
}
|
||||
@ -161,57 +168,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
switch(parent.getId()) {
|
||||
case R.id.tl_list:
|
||||
if(!timelineReload.isRefreshing()) {
|
||||
TimelineAdapter tlAdp = (TimelineAdapter) timelineList.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(con, TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username",username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
case R.id.tr_list:
|
||||
if(!trendReload.isRefreshing()) {
|
||||
TrendAdapter trend = (TrendAdapter) trendList.getAdapter();
|
||||
String search = trend.getDatabase().getTrendname(position);
|
||||
Intent intent = new Intent(con, SearchPage.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("search", search);
|
||||
if(search.startsWith("#")) {
|
||||
bundle.putString("Addition", search);
|
||||
}
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
case R.id.m_list:
|
||||
if(!mentionReload.isRefreshing()) {
|
||||
TimelineAdapter tlAdp = (TimelineAdapter) mentionList.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(con, TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username",username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
@ -260,23 +217,79 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(View v, ViewGroup parent, int position) {
|
||||
switch(parent.getId()) {
|
||||
case R.id.tl_list:
|
||||
if(!timelineReload.isRefreshing()) {
|
||||
TimelineRecycler tlAdp = (TimelineRecycler) timelineList.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(con, TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username",username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
case R.id.tr_list:
|
||||
if(!trendReload.isRefreshing()) {
|
||||
TrendRecycler trend = (TrendRecycler) trendList.getAdapter();
|
||||
String search = trend.getData().getTrendname(position);
|
||||
Intent intent = new Intent(con, SearchPage.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("search", search);
|
||||
if(search.startsWith("#")) {
|
||||
bundle.putString("Addition", search);
|
||||
}
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
case R.id.m_list:
|
||||
if(!mentionReload.isRefreshing()) {
|
||||
TimelineRecycler tlAdp = (TimelineRecycler) mentionList.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(con, TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username",username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Login Handle
|
||||
*/
|
||||
private void login() {
|
||||
timelineList = (ListView) findViewById(R.id.tl_list);
|
||||
trendList = (ListView) findViewById(R.id.tr_list);
|
||||
mentionList = (ListView) findViewById(R.id.m_list);
|
||||
timelineList = (RecyclerView) findViewById(R.id.tl_list);
|
||||
trendList = (RecyclerView) findViewById(R.id.tr_list);
|
||||
mentionList = (RecyclerView) findViewById(R.id.m_list);
|
||||
timelineReload = (SwipeRefreshLayout) findViewById(R.id.timeline);
|
||||
trendReload = (SwipeRefreshLayout) findViewById(R.id.trends);
|
||||
mentionReload = (SwipeRefreshLayout) findViewById(R.id.mention);
|
||||
tabhost = (TabHost)findViewById(R.id.main_tabhost);
|
||||
toolbar = (Toolbar) findViewById(R.id.profile_toolbar);
|
||||
|
||||
timelineList.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
trendList.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
mentionList.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
timelineList.setHasFixedSize(true);
|
||||
trendList.setHasFixedSize(true);
|
||||
mentionList.setHasFixedSize(true);
|
||||
setSupportActionBar(toolbar);
|
||||
if(getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
|
||||
tabhost.setup();
|
||||
// Tab #1
|
||||
TabSpec tab1 = tabhost.newTabSpec("timeline");
|
||||
@ -295,9 +308,6 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
tabhost.addTab(tab3);
|
||||
|
||||
tabhost.setOnTabChangedListener(this);
|
||||
timelineList.setOnItemClickListener(this);
|
||||
trendList.setOnItemClickListener(this);
|
||||
mentionList.setOnItemClickListener(this);
|
||||
timelineReload.setOnRefreshListener(this);
|
||||
trendReload.setOnRefreshListener(this);
|
||||
mentionReload.setOnRefreshListener(this);
|
||||
@ -312,15 +322,30 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TweetDatabase tweetDeck = new TweetDatabase(con,TweetDatabase.HOME_TL, 0L);
|
||||
TrendDatabase trendDeck = new TrendDatabase(con);
|
||||
TweetDatabase mentDeck = new TweetDatabase(con, TweetDatabase.GET_MENT, 0L);
|
||||
TimelineAdapter tlAdap = new TimelineAdapter(con,tweetDeck);
|
||||
TrendAdapter trendAdp = new TrendAdapter(con,trendDeck);
|
||||
TimelineAdapter mentAdp = new TimelineAdapter(con, mentDeck);
|
||||
timelineList.setAdapter(tlAdap);
|
||||
trendList.setAdapter(trendAdp);
|
||||
mentionList.setAdapter(mentAdp);
|
||||
ColorPreferences mColor = ColorPreferences.getInstance(con);
|
||||
background = mColor.getColor(ColorPreferences.BACKGROUND);
|
||||
font_color = mColor.getColor(ColorPreferences.FONT_COLOR);
|
||||
|
||||
TimelineRecycler rlRc = (TimelineRecycler) timelineList.getAdapter();
|
||||
TrendRecycler trendRc = (TrendRecycler) trendList.getAdapter();
|
||||
TimelineRecycler mentRc = (TimelineRecycler) mentionList.getAdapter();
|
||||
|
||||
if(rlRc == null || rlRc.getItemCount() == 0) {
|
||||
TweetDatabase tweetDeck = new TweetDatabase(con,TweetDatabase.HOME_TL, 0L);
|
||||
rlRc = new TimelineRecycler(tweetDeck, MainActivity.this);
|
||||
} if(mentRc == null || mentRc.getItemCount() == 0) {
|
||||
TweetDatabase mentDeck = new TweetDatabase(con, TweetDatabase.GET_MENT, 0L);
|
||||
mentRc = new TimelineRecycler(mentDeck, MainActivity.this);
|
||||
} if(trendRc == null || trendRc.getItemCount() == 0) {
|
||||
TrendDatabase trendDeck = new TrendDatabase(con);
|
||||
trendRc = new TrendRecycler(trendDeck, MainActivity.this);
|
||||
}
|
||||
rlRc.setColor(background,font_color);
|
||||
trendRc.setColor(background,font_color);
|
||||
mentRc.setColor(background,font_color);
|
||||
timelineList.setAdapter(rlRc);
|
||||
trendList.setAdapter(trendRc);
|
||||
mentionList.setAdapter(mentRc);
|
||||
}
|
||||
}).run();
|
||||
}
|
||||
|
@ -4,12 +4,12 @@ import org.nuclearfog.twidda.database.TrendDatabase;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.MainActivity;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TrendAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.viewadapter.TrendRecycler;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.widget.ListView;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.widget.Toast;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
@ -25,9 +25,9 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
private TwitterEngine mTwitter;
|
||||
private Context context;
|
||||
private SwipeRefreshLayout timelineRefresh, trendRefresh, mentionRefresh;
|
||||
private ListView timelineList, trendList, mentionList;
|
||||
private TimelineAdapter timelineAdapter, mentionAdapter;
|
||||
private TrendAdapter trendsAdapter;
|
||||
private RecyclerView timelineList, trendList, mentionList;
|
||||
private TimelineRecycler timelineAdapter, mentionAdapter;
|
||||
private TrendRecycler trendsAdapter;
|
||||
private int woeid;
|
||||
|
||||
/**
|
||||
@ -45,13 +45,13 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
protected void onPreExecute() {
|
||||
// Timeline Tab
|
||||
timelineRefresh = (SwipeRefreshLayout)((MainActivity)context).findViewById(R.id.timeline);
|
||||
timelineList = (ListView)((MainActivity)context).findViewById(R.id.tl_list);
|
||||
timelineList = (RecyclerView)((MainActivity)context).findViewById(R.id.tl_list);
|
||||
// Trend Tab
|
||||
trendRefresh = (SwipeRefreshLayout)((MainActivity)context).findViewById(R.id.trends);
|
||||
trendList = (ListView)((MainActivity)context).findViewById(R.id.tr_list);
|
||||
trendList = (RecyclerView)((MainActivity)context).findViewById(R.id.tr_list);
|
||||
// Mention Tab
|
||||
mentionRefresh = (SwipeRefreshLayout)((MainActivity)context).findViewById(R.id.mention);
|
||||
mentionList = (ListView)((MainActivity)context).findViewById(R.id.m_list);
|
||||
mentionList = (RecyclerView)((MainActivity)context).findViewById(R.id.m_list);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -66,28 +66,28 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
try {
|
||||
switch (MODE) {
|
||||
case HOME:
|
||||
timelineAdapter = (TimelineAdapter) timelineList.getAdapter();
|
||||
if(timelineAdapter != null && timelineAdapter.getCount() != 0) {
|
||||
timelineAdapter = (TimelineRecycler) timelineList.getAdapter();
|
||||
if(timelineAdapter != null && timelineAdapter.getItemCount() != 0) {
|
||||
id = timelineAdapter.getItemId(0);
|
||||
timelineAdapter.getData().insert(mTwitter.getHome(page,id),true);
|
||||
} else {
|
||||
TweetDatabase mTweets = new TweetDatabase(mTwitter.getHome(page,id), context,TweetDatabase.HOME_TL,0);
|
||||
timelineAdapter = new TimelineAdapter(context,mTweets);
|
||||
timelineAdapter = new TimelineRecycler(mTweets,(MainActivity)context);
|
||||
}
|
||||
break;
|
||||
|
||||
case TRND:
|
||||
trendsAdapter = new TrendAdapter(context, new TrendDatabase(mTwitter.getTrends(woeid),context));
|
||||
trendsAdapter = new TrendRecycler(new TrendDatabase(mTwitter.getTrends(woeid),context),(MainActivity)context);
|
||||
break;
|
||||
|
||||
case MENT:
|
||||
mentionAdapter = (TimelineAdapter) mentionList.getAdapter();
|
||||
if(mentionAdapter != null && mentionAdapter.getCount() != 0) {
|
||||
mentionAdapter = (TimelineRecycler) mentionList.getAdapter();
|
||||
if(mentionAdapter != null && mentionAdapter.getItemCount() != 0) {
|
||||
id = mentionAdapter.getItemId(0);
|
||||
mentionAdapter.getData().insert(mTwitter.getMention(page,id),true);
|
||||
} else {
|
||||
TweetDatabase mention = new TweetDatabase(mTwitter.getMention(page,id), context,TweetDatabase.GET_MENT,0);
|
||||
mentionAdapter = new TimelineAdapter(context,mention);
|
||||
mentionAdapter = new TimelineRecycler(mention,(MainActivity)context);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -103,7 +103,7 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
switch(MODE) {
|
||||
case HOME:
|
||||
timelineRefresh.setRefreshing(false);
|
||||
if(timelineList.getAdapter().getCount() == 0) {
|
||||
if(timelineList.getAdapter().getItemCount() == 0) {
|
||||
timelineList.setAdapter(timelineAdapter);
|
||||
} else {
|
||||
timelineAdapter.notifyDataSetChanged();
|
||||
@ -117,7 +117,7 @@ public class MainPage extends AsyncTask<Integer, Void, Integer> {
|
||||
|
||||
case MENT:
|
||||
mentionRefresh.setRefreshing(false);
|
||||
if(mentionList.getAdapter().getCount() == 0) {
|
||||
if(mentionList.getAdapter().getItemCount() == 0) {
|
||||
mentionList.setAdapter(mentionAdapter);
|
||||
} else {
|
||||
mentionAdapter.notifyDataSetChanged();
|
||||
|
@ -4,22 +4,21 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import twitter4j.User;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
@ -35,9 +34,9 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
private TextView txtUser,txtScrName,txtBio,txtLocation,txtLink,txtFollowing,txtFollower,txtCreated;
|
||||
private ImageView profile, banner, linkIcon, locationIcon, verifier, locked, followback;
|
||||
private SwipeRefreshLayout tweetsReload, favoritsReload;
|
||||
private ListView profileTweets, profileFavorits;
|
||||
private RecyclerView profileTweets, profileFavorits;
|
||||
private String imageLink, bannerLink, fullPbLink, link, dateString;
|
||||
private TimelineAdapter homeTl, homeFav;
|
||||
private TimelineRecycler homeTl, homeFav;
|
||||
private Context context;
|
||||
private Toolbar tool;
|
||||
private boolean isHome = false;
|
||||
@ -77,8 +76,8 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
locationIcon = (ImageView)((UserProfile)context).findViewById(R.id.location_img);
|
||||
tweetsReload = (SwipeRefreshLayout)((UserProfile)context).findViewById(R.id.hometweets);
|
||||
favoritsReload = (SwipeRefreshLayout)((UserProfile)context).findViewById(R.id.homefavorits);
|
||||
profileTweets = (ListView)((UserProfile)context).findViewById(R.id.ht_list);
|
||||
profileFavorits = (ListView)((UserProfile)context).findViewById(R.id.hf_list);
|
||||
profileTweets = (RecyclerView)((UserProfile)context).findViewById(R.id.ht_list);
|
||||
profileFavorits = (RecyclerView)((UserProfile)context).findViewById(R.id.hf_list);
|
||||
tool = (Toolbar) ((UserProfile)context).findViewById(R.id.profile_toolbar);
|
||||
}
|
||||
|
||||
@ -116,10 +115,10 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
}
|
||||
else if(MODE == GET_TWEETS)
|
||||
{
|
||||
homeTl = (TimelineAdapter) profileTweets.getAdapter();
|
||||
if(homeTl == null || homeTl.getCount() == 0) {
|
||||
homeTl = (TimelineRecycler) profileTweets.getAdapter();
|
||||
if(homeTl == null || homeTl.getItemCount() == 0) {
|
||||
TweetDatabase hTweets = new TweetDatabase(mTwitter.getUserTweets(userId,args[2],id),context,TweetDatabase.USER_TL,userId);
|
||||
homeTl = new TimelineAdapter(context,hTweets);
|
||||
homeTl = new TimelineRecycler(hTweets,(UserProfile)context);
|
||||
} else {
|
||||
id = homeTl.getItemId(0);
|
||||
homeTl.getData().insert(mTwitter.getUserTweets(userId,args[2],id),true);
|
||||
@ -127,13 +126,13 @@ public class ProfileLoader extends AsyncTask<Long,Void,Long> {
|
||||
}
|
||||
else if(MODE == GET_FAVS)
|
||||
{
|
||||
homeFav = (TimelineAdapter) profileFavorits.getAdapter();
|
||||
homeFav = (TimelineRecycler) profileFavorits.getAdapter();
|
||||
if(homeFav != null) {
|
||||
id = homeFav.getItemId(0);
|
||||
homeFav.getData().insert(mTwitter.getUserFavs(userId,args[2],id),true);
|
||||
} else {
|
||||
TweetDatabase fTweets = new TweetDatabase(mTwitter.getUserFavs(userId,args[2],id),context,TweetDatabase.FAV_TL,userId);
|
||||
homeFav = new TimelineAdapter(context,fTweets);
|
||||
homeFav = new TimelineRecycler(fTweets,(UserProfile)context);
|
||||
}
|
||||
}
|
||||
else if(MODE == ACTION_FOLLOW)
|
||||
|
@ -5,17 +5,15 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -31,10 +29,9 @@ import twitter4j.User;
|
||||
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.window.TweetDetail;
|
||||
import org.nuclearfog.twidda.window.UserProfile;
|
||||
|
||||
public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
|
||||
@ -48,8 +45,8 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
private Context c;
|
||||
private TwitterEngine mTwitter;
|
||||
private List<twitter4j.Status> answers;
|
||||
private TimelineAdapter tlAdp;
|
||||
private ListView replyList;
|
||||
private TimelineRecycler tlAdp;
|
||||
private RecyclerView replyList;
|
||||
private TextView username,scrName,replyName,tweet,userRetweet;
|
||||
private TextView used_api,txtAns,txtRet,txtFav,date;
|
||||
private ImageView profile_img,tweet_verify;
|
||||
@ -79,7 +76,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
replyList = (ListView) ((TweetDetail)c).findViewById(R.id.answer_list);
|
||||
replyList = (RecyclerView) ((TweetDetail)c).findViewById(R.id.answer_list);
|
||||
tweet = (TextView) ((TweetDetail)c).findViewById(R.id.tweet_detailed);
|
||||
username = (TextView) ((TweetDetail)c).findViewById(R.id.usernamedetail);
|
||||
scrName = (TextView) ((TweetDetail)c).findViewById(R.id.scrnamedetail);
|
||||
@ -173,7 +170,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
}
|
||||
else if(mode == LOAD_REPLY) {
|
||||
String replyname = user.getScreenName();
|
||||
tlAdp = (TimelineAdapter) replyList.getAdapter();
|
||||
tlAdp = (TimelineRecycler) replyList.getAdapter();
|
||||
if(tlAdp != null)
|
||||
tweetID = tlAdp.getItemId(0);
|
||||
answers = mTwitter.getAnswers(replyname, tweetID);
|
||||
@ -256,9 +253,9 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
setIcons();
|
||||
}
|
||||
else if(mode == LOAD_REPLY) {
|
||||
if(tlAdp == null || tlAdp.getCount() == 0) {
|
||||
if(tlAdp == null || tlAdp.getItemCount() == 0) {
|
||||
TweetDatabase tweetDatabase = new TweetDatabase(answers,c);
|
||||
tlAdp = new TimelineAdapter(c, tweetDatabase);
|
||||
tlAdp = new TimelineRecycler(tweetDatabase,(TweetDetail)c);
|
||||
replyList.setAdapter(tlAdp);
|
||||
} else {
|
||||
TweetDatabase twDb = tlAdp.getData();
|
||||
@ -266,7 +263,7 @@ public class StatusLoader extends AsyncTask<Long, Void, Long> {
|
||||
tlAdp.notifyDataSetChanged();
|
||||
ansReload.setRefreshing(false);
|
||||
}
|
||||
String ansStr = Integer.toString(tlAdp.getCount());
|
||||
String ansStr = Integer.toString(tlAdp.getItemCount());
|
||||
txtAns.setText(ansStr);
|
||||
}
|
||||
else if(mode == DELETE) {
|
||||
|
@ -3,35 +3,40 @@ package org.nuclearfog.twidda.backend;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.viewadapter.UserRecycler;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.window.SearchPage;
|
||||
|
||||
public class TwitterSearch extends AsyncTask<String, Void, Void> {
|
||||
|
||||
private TimelineAdapter tlAdp;
|
||||
private UserAdapter uAdp;
|
||||
private TimelineRecycler tlRc;
|
||||
private UserRecycler uAdp;
|
||||
private SwipeRefreshLayout tweetReload;
|
||||
private ListView tweetSearch, userSearch;
|
||||
private RecyclerView tweetSearch, userSearch;
|
||||
private ProgressBar circleLoad;
|
||||
private Context context;
|
||||
private TwitterEngine mTwitter;
|
||||
private int background, font_color;
|
||||
|
||||
public TwitterSearch(Context context) {
|
||||
this.context=context;
|
||||
ColorPreferences mcolor = ColorPreferences.getInstance(context);
|
||||
background = mcolor.getColor(ColorPreferences.BACKGROUND);
|
||||
font_color = mcolor.getColor(ColorPreferences.FONT_COLOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
tweetSearch = (ListView) ((SearchPage)context).findViewById(R.id.tweet_result);
|
||||
userSearch = (ListView) ((SearchPage)context).findViewById(R.id.user_result);
|
||||
tweetSearch = (RecyclerView) ((SearchPage)context).findViewById(R.id.tweet_result);
|
||||
userSearch = (RecyclerView) ((SearchPage)context).findViewById(R.id.user_result);
|
||||
tweetReload = (SwipeRefreshLayout) ((SearchPage)context).findViewById(R.id.searchtweets);
|
||||
circleLoad = (ProgressBar) ((SearchPage)context).findViewById(R.id.search_progress);
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
@ -42,14 +47,15 @@ public class TwitterSearch extends AsyncTask<String, Void, Void> {
|
||||
String get = search[0];
|
||||
long id = 1L;
|
||||
try {
|
||||
tlAdp = (TimelineAdapter) tweetSearch.getAdapter();
|
||||
if(tlAdp != null) {
|
||||
id = tlAdp.getItemId(0);
|
||||
tlAdp.getData().insert(mTwitter.searchTweets(get,id),false);
|
||||
tlRc = (TimelineRecycler) tweetSearch.getAdapter();
|
||||
if(tlRc != null) {
|
||||
id = tlRc.getItemId(0);
|
||||
tlRc.getData().insert(mTwitter.searchTweets(get,id),false);
|
||||
} else {
|
||||
tlAdp = new TimelineAdapter(context, new TweetDatabase(mTwitter.searchTweets(get,id),context));
|
||||
tlRc = new TimelineRecycler(new TweetDatabase(mTwitter.searchTweets(get,id),context),((SearchPage)context));
|
||||
tlRc.setColor(background,font_color);
|
||||
}
|
||||
uAdp = new UserAdapter(context, new UserDatabase(context, mTwitter.searchUsers(get)));
|
||||
uAdp = new UserRecycler(new UserDatabase(context, mTwitter.searchUsers(get)),((SearchPage)context));
|
||||
} catch(Exception err){err.printStackTrace();}
|
||||
return null;
|
||||
}
|
||||
@ -58,9 +64,9 @@ public class TwitterSearch extends AsyncTask<String, Void, Void> {
|
||||
protected void onPostExecute(Void v) {
|
||||
circleLoad.setVisibility(View.INVISIBLE);
|
||||
if(tweetSearch.getAdapter() == null)
|
||||
tweetSearch.setAdapter(tlAdp);
|
||||
tweetSearch.setAdapter(tlRc);
|
||||
else
|
||||
tlAdp.notifyDataSetChanged();
|
||||
tlRc.notifyDataSetChanged();
|
||||
userSearch.setAdapter(uAdp);
|
||||
tweetReload.setRefreshing(false);
|
||||
}
|
||||
|
@ -2,14 +2,14 @@ package org.nuclearfog.twidda.backend;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.UserRecycler;
|
||||
import org.nuclearfog.twidda.window.UserDetail;
|
||||
|
||||
public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
@ -21,8 +21,8 @@ public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
|
||||
private Context context;
|
||||
private TwitterEngine mTwitter;
|
||||
private UserAdapter usrAdp;
|
||||
private ListView userList;
|
||||
private UserRecycler usrAdp;
|
||||
private RecyclerView userList;
|
||||
private ProgressBar uProgress;
|
||||
private String errmsg;
|
||||
|
||||
@ -36,7 +36,7 @@ public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
mTwitter = TwitterEngine.getInstance(context);
|
||||
userList = (ListView)((UserDetail)context).findViewById(R.id.userlist);
|
||||
userList = (RecyclerView) ((UserDetail)context).findViewById(R.id.userlist);
|
||||
uProgress = (ProgressBar)((UserDetail)context).findViewById(R.id.user_progress);
|
||||
}
|
||||
|
||||
@ -46,10 +46,11 @@ public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
long mode = data[1];
|
||||
long cursor = data[2];
|
||||
try {
|
||||
usrAdp = (UserAdapter) userList.getAdapter();
|
||||
usrAdp = (UserRecycler) userList.getAdapter();
|
||||
if(mode == FOLLOWING) {
|
||||
if(usrAdp == null) {
|
||||
usrAdp = new UserAdapter(context,new UserDatabase(context,mTwitter.getFollowing(id,cursor)));
|
||||
UserDatabase udb = new UserDatabase(context,mTwitter.getFollowing(id,cursor));
|
||||
usrAdp = new UserRecycler(udb,(UserDetail)context);
|
||||
} else {
|
||||
UserDatabase uDb = usrAdp.getData();
|
||||
uDb.addLast(mTwitter.getFollowing(id,cursor));
|
||||
@ -58,7 +59,8 @@ public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
}
|
||||
else if(mode == FOLLOWERS) {
|
||||
if(usrAdp == null) {
|
||||
usrAdp = new UserAdapter(context,new UserDatabase(context,mTwitter.getFollower(id,cursor)));
|
||||
UserDatabase udb = new UserDatabase(context,mTwitter.getFollower(id,cursor));
|
||||
usrAdp = new UserRecycler(udb,(UserDetail)context);
|
||||
} else {
|
||||
UserDatabase uDb = usrAdp.getData();
|
||||
uDb.addLast(mTwitter.getFollower(id,cursor));
|
||||
@ -67,14 +69,14 @@ public class UserLists extends AsyncTask <Long, Void, Void> {
|
||||
}
|
||||
else if(mode == RETWEETER) {
|
||||
UserDatabase udb = new UserDatabase(context,mTwitter.getRetweeter(id,cursor));
|
||||
usrAdp = new UserAdapter(context,udb);
|
||||
usrAdp = new UserRecycler(udb,(UserDetail)context);
|
||||
}
|
||||
else if(mode == FAVORISER) {
|
||||
// GET FAV USERS TODO
|
||||
}
|
||||
}
|
||||
catch(Exception err) {
|
||||
errmsg = err.getMessage();
|
||||
errmsg = "Fehler: "+err.getMessage();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class TrendDatabase {
|
||||
|
||||
public String getTrendname(int pos){ return trendName.get(pos); }
|
||||
public String getTrendlink(int pos){return trendLink.get(pos);}
|
||||
public int getTrendpos(int pos){ return trendpos.get(pos); }
|
||||
public String getTrendpos(int pos){ return Integer.toString(trendpos.get(pos))+"."; }
|
||||
|
||||
public int getSize(){
|
||||
if(trendName != null)
|
||||
|
@ -5,6 +5,12 @@ import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
@ -175,6 +181,7 @@ public class TweetDatabase {
|
||||
SQL_GET_HOME = "SELECT * FROM timeline " +
|
||||
"INNER JOIN tweet ON timeline.mTweetID = tweet.tweetID " +
|
||||
"INNER JOIN user ON tweet.userID=user.userID ORDER BY tweetID ASC";
|
||||
limit = 5;
|
||||
}
|
||||
|
||||
Cursor cursor = db.rawQuery(SQL_GET_HOME,null);
|
||||
@ -204,7 +211,7 @@ public class TweetDatabase {
|
||||
index = cursor.getColumnIndex("retweeter");
|
||||
retweeter.add(cursor.getString(index));
|
||||
size++;
|
||||
} while(cursor.moveToNext());
|
||||
} while(cursor.moveToNext() && size < limit);
|
||||
}
|
||||
cursor.close();
|
||||
db.close();
|
||||
@ -230,6 +237,48 @@ public class TweetDatabase {
|
||||
else return " RT @"+retweeter.get(pos);
|
||||
}
|
||||
|
||||
public SpannableStringBuilder getHighlightedTweet(Context c, int pos) {
|
||||
String tweet = getTweet(pos);
|
||||
int highlight = ColorPreferences.getInstance(c).getColor(ColorPreferences.HIGHLIGHTING);
|
||||
SpannableStringBuilder sTweet = new SpannableStringBuilder(tweet);
|
||||
int start = 0;
|
||||
boolean marked = false;
|
||||
for(int i = 0 ; i < tweet.length() ; i++) {
|
||||
char current = tweet.charAt(i);
|
||||
switch(current){
|
||||
case '@':
|
||||
start = i;
|
||||
marked = true;
|
||||
break;
|
||||
case '#':
|
||||
start = i;
|
||||
marked = true;
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
case '\"':
|
||||
case '\n':
|
||||
case ')':
|
||||
case '(':
|
||||
case ':':
|
||||
case ' ':
|
||||
case '.':
|
||||
case ',':
|
||||
case '!':
|
||||
case '?':
|
||||
case '-':
|
||||
if(marked)
|
||||
sTweet.setSpan(new ForegroundColorSpan(highlight),start,i, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
marked = false;
|
||||
break;
|
||||
}
|
||||
if(i == tweet.length()-1 && marked) {
|
||||
sTweet.setSpan(new ForegroundColorSpan(highlight),start,i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
return sTweet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert Time to String
|
||||
* @param mills TweetDetail Time
|
||||
|
@ -1,137 +0,0 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.Image;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
|
||||
public class TimelineAdapter extends ArrayAdapter implements View.OnClickListener {
|
||||
private TweetDatabase mTweets;
|
||||
private ViewGroup p;
|
||||
private LayoutInflater inf;
|
||||
private int textColor, background, highlight;
|
||||
private Context context;
|
||||
|
||||
public TimelineAdapter(Context context, TweetDatabase mTweets) {
|
||||
super(context, R.layout.tweet);
|
||||
this.mTweets = mTweets;
|
||||
this.context = context;
|
||||
inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
ColorPreferences mColor = ColorPreferences.getInstance(context);
|
||||
textColor = mColor.getColor(ColorPreferences.FONT_COLOR);
|
||||
background = mColor.getColor(ColorPreferences.BACKGROUND);
|
||||
highlight = mColor.getColor(ColorPreferences.HIGHLIGHTING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch & Update Data
|
||||
* @return TweetDatabase instance
|
||||
*/
|
||||
public TweetDatabase getData() {
|
||||
return mTweets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mTweets.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int pos){
|
||||
return mTweets.getTweetId(pos);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(int position, View v, @NonNull ViewGroup parent) {
|
||||
p = parent;
|
||||
if(v == null) {
|
||||
v = inf.inflate(R.layout.tweet, parent,false);
|
||||
v.setBackgroundColor(background);
|
||||
v.setOnClickListener(this);
|
||||
}
|
||||
String retweetStr = Integer.toString(mTweets.getRetweet(position));
|
||||
String favoriteStr = Integer.toString(mTweets.getFavorite(position));
|
||||
|
||||
((TextView) v.findViewById(R.id.username)).setText(mTweets.getUsername(position));
|
||||
((TextView) v.findViewById(R.id.screenname)).setText(mTweets.getScreenname(position));
|
||||
((TextView) v.findViewById(R.id.tweettext)).setText(highlight(mTweets.getTweet(position)));
|
||||
((TextView) v.findViewById(R.id.retweet_number)).setText(retweetStr);
|
||||
((TextView) v.findViewById(R.id.favorite_number)).setText(favoriteStr);
|
||||
((TextView) v.findViewById(R.id.retweeter)).setText(mTweets.getRetweeter(position));
|
||||
((TextView) v.findViewById(R.id.time)).setText(mTweets.getDate(position));
|
||||
((TextView) v.findViewById(R.id.tweettext)).setTextColor(textColor);
|
||||
ImageView pb = v.findViewById(R.id.tweetPb);
|
||||
ImageView verify = v.findViewById(R.id.list_verify);
|
||||
if(mTweets.isVerified(position)) {
|
||||
verify.setVisibility(ImageView.VISIBLE);
|
||||
} else {
|
||||
verify.setVisibility(ImageView.GONE);
|
||||
}
|
||||
if(mTweets.loadImages()) {
|
||||
Picasso.with(context).load(mTweets.getPbLink(position)).into(pb);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
ListView parent = ((ListView)p);
|
||||
int position = parent.getPositionForView(v);
|
||||
parent.performItemClick(v,position,0);
|
||||
}
|
||||
|
||||
private SpannableStringBuilder highlight(String tweet) {
|
||||
SpannableStringBuilder sTweet = new SpannableStringBuilder(tweet);
|
||||
int start = 0;
|
||||
boolean marked = false;
|
||||
for(int i = 0 ; i < tweet.length() ; i++) {
|
||||
char current = tweet.charAt(i);
|
||||
switch(current){
|
||||
case '@':
|
||||
start = i;
|
||||
marked = true;
|
||||
break;
|
||||
case '#':
|
||||
start = i;
|
||||
marked = true;
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
case '\"':
|
||||
case '\n':
|
||||
case ')':
|
||||
case '(':
|
||||
case ':':
|
||||
case ' ':
|
||||
case '.':
|
||||
case ',':
|
||||
case '!':
|
||||
case '?':
|
||||
case '-':
|
||||
if(marked)
|
||||
sTweet.setSpan(new ForegroundColorSpan(highlight),start,i, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
marked = false;
|
||||
break;
|
||||
}
|
||||
if(i == tweet.length()-1 && marked) {
|
||||
sTweet.setSpan(new ForegroundColorSpan(highlight),start,i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
return sTweet;
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.RecyclerView.Adapter;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
|
||||
|
||||
public class TimelineRecycler extends Adapter<TimelineRecycler.ItemHolder> implements View.OnClickListener {
|
||||
|
||||
private TweetDatabase mTweets;
|
||||
private ViewGroup parent;
|
||||
private OnItemClicked mListener;
|
||||
private int background = 0x00000000;
|
||||
private int font_color = 0xFFFFFFFF;
|
||||
|
||||
/**
|
||||
* @param mListener Item Click Listener
|
||||
*/
|
||||
public TimelineRecycler(TweetDatabase mTweets, OnItemClicked mListener) {
|
||||
this.mListener = mListener;
|
||||
this.mTweets = mTweets;
|
||||
}
|
||||
|
||||
public void setColor(int background, int font_color) {
|
||||
this.background = background;
|
||||
this.font_color = font_color;
|
||||
}
|
||||
|
||||
public TweetDatabase getData() {
|
||||
return mTweets;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount(){
|
||||
return mTweets.getSize();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getItemId(int pos){
|
||||
return mTweets.getTweetId(pos);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemHolder onCreateViewHolder(ViewGroup parent, int index) {
|
||||
this.parent = parent;
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.tweet, parent,false);
|
||||
v.setBackgroundColor(background);
|
||||
v.setOnClickListener(this);
|
||||
return new ItemHolder(v);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ItemHolder vh, int index) {
|
||||
vh.tweet.setTextColor(font_color);
|
||||
vh.username.setText(mTweets.getUsername(index));
|
||||
vh.screenname.setText(mTweets.getScreenname(index));
|
||||
vh.tweet.setText(mTweets.getHighlightedTweet(parent.getContext(),index));
|
||||
vh.retweet.setText(Integer.toString(mTweets.getRetweet(index)));
|
||||
vh.favorite.setText(Integer.toString(mTweets.getFavorite(index)));
|
||||
vh.retweeter.setText(mTweets.getRetweeter(index));
|
||||
vh.time.setText(mTweets.getDate(index));
|
||||
if(mTweets.loadImages()) {
|
||||
Picasso.with(parent.getContext()).load(mTweets.getPbLink(index)).into(vh.profile);
|
||||
}
|
||||
if(mTweets.isVerified(index)) {
|
||||
vh.verify.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
vh.verify.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ViewGroup p = TimelineRecycler.this.parent;
|
||||
RecyclerView rv = (RecyclerView) p;
|
||||
int position = rv.getChildLayoutPosition(view);
|
||||
mListener.onItemClick(view, p, position);
|
||||
}
|
||||
|
||||
|
||||
class ItemHolder extends ViewHolder {
|
||||
public TextView username, screenname, tweet, retweet;
|
||||
public TextView favorite, retweeter, time;
|
||||
public ImageView profile, verify;
|
||||
public ItemHolder(View v) {
|
||||
super(v);
|
||||
username = v.findViewById(R.id.username);
|
||||
screenname = v.findViewById(R.id.screenname);
|
||||
tweet = v.findViewById(R.id.tweettext);
|
||||
retweet = v.findViewById(R.id.retweet_number);
|
||||
favorite = v.findViewById(R.id.favorite_number);
|
||||
retweeter = v.findViewById(R.id.retweeter);
|
||||
time = v.findViewById(R.id.time);
|
||||
profile = v.findViewById(R.id.tweetPb);
|
||||
verify = v.findViewById(R.id.list_verify);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Custom Click Listener
|
||||
*/
|
||||
public interface OnItemClicked {
|
||||
void onItemClick(View v, ViewGroup parent, int position);
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.database.TrendDatabase;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TrendAdapter extends ArrayAdapter {
|
||||
private TrendDatabase trend;
|
||||
private LayoutInflater inf;
|
||||
private int background, textColor;
|
||||
|
||||
public TrendAdapter(Context context, TrendDatabase trend) {
|
||||
super(context, R.layout.trend);
|
||||
inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
ColorPreferences mcolor = ColorPreferences.getInstance(context);
|
||||
textColor = mcolor.getColor(ColorPreferences.FONT_COLOR);
|
||||
background = mcolor.getColor(ColorPreferences.BACKGROUND);
|
||||
this.trend = trend;
|
||||
}
|
||||
|
||||
public TrendDatabase getDatabase() {
|
||||
return trend;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return trend.getSize();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(int position, View v, @NonNull ViewGroup parent) {
|
||||
if(v == null) {
|
||||
v = inf.inflate(R.layout.trend, parent,false);
|
||||
v.setBackgroundColor(background);
|
||||
}
|
||||
String trendPos = Integer.toString( (position+1) ) +'.';
|
||||
String trendName = trend.getTrendname(position);
|
||||
((TextView) v.findViewById(R.id.trendpos)).setText(trendPos);
|
||||
((TextView) v.findViewById(R.id.trendname)).setText(trendName);
|
||||
((TextView) v.findViewById(R.id.trendpos)).setTextColor(textColor);
|
||||
((TextView) v.findViewById(R.id.trendname)).setTextColor(textColor);
|
||||
return v;
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.TrendDatabase;
|
||||
|
||||
|
||||
public class TrendRecycler extends RecyclerView.Adapter<TrendRecycler.ItemHolder>
|
||||
implements View.OnClickListener {
|
||||
|
||||
private ViewGroup parent;
|
||||
private TrendDatabase trend;
|
||||
private OnItemClicked mListener;
|
||||
private int background = 0x00000000;
|
||||
private int font_color = 0xFFFFFFFF;
|
||||
|
||||
public TrendRecycler(TrendDatabase trend, OnItemClicked mListener) {
|
||||
this.mListener = mListener;
|
||||
this.trend = trend;
|
||||
}
|
||||
|
||||
public TrendDatabase getData() { return trend; }
|
||||
|
||||
|
||||
public void setColor(int background, int font_color) {
|
||||
this.background = background;
|
||||
this.font_color = font_color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount(){
|
||||
return trend.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemHolder onCreateViewHolder(ViewGroup parent, int index) {
|
||||
this.parent = parent;
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.trend, parent,false);
|
||||
v.setBackgroundColor(background);
|
||||
v.setOnClickListener(this);
|
||||
return new ItemHolder(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ItemHolder vh, int index) {
|
||||
vh.pos.setText(trend.getTrendpos(index));
|
||||
vh.pos.setTextColor(font_color);
|
||||
vh.trends.setText(trend.getTrendname(index));
|
||||
vh.trends.setTextColor(font_color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ViewGroup p = TrendRecycler.this.parent;
|
||||
RecyclerView rv = (RecyclerView) p;
|
||||
int position = rv.getChildLayoutPosition(view);
|
||||
mListener.onItemClick(view, p, position);
|
||||
}
|
||||
|
||||
class ItemHolder extends ViewHolder {
|
||||
public TextView trends, pos;
|
||||
public ItemHolder(View v) {
|
||||
super(v);
|
||||
pos = v.findViewById(R.id.trendpos);
|
||||
trends = v.findViewById(R.id.trendname);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom Click Listener
|
||||
*/
|
||||
public interface OnItemClicked {
|
||||
void onItemClick(View v, ViewGroup parent, int position);
|
||||
}
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
import org.nuclearfog.twidda.window.ColorPreferences;
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
|
||||
public class UserAdapter extends ArrayAdapter implements View.OnClickListener {
|
||||
|
||||
private UserDatabase userDatabase;
|
||||
private ViewGroup p;
|
||||
private LayoutInflater inf;
|
||||
private int background;
|
||||
private Context context;
|
||||
|
||||
public UserAdapter(Context context, UserDatabase userDatabase) {
|
||||
super(context, R.layout.useritem);
|
||||
this.userDatabase = userDatabase;
|
||||
this.context = context;
|
||||
inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
ColorPreferences mColor = ColorPreferences.getInstance(context);
|
||||
background = mColor.getColor(ColorPreferences.BACKGROUND);
|
||||
}
|
||||
|
||||
public UserDatabase getData(){
|
||||
return userDatabase;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return userDatabase.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position){
|
||||
return userDatabase.getUserID(position);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(int position, View v, @NonNull ViewGroup parent) {
|
||||
p = parent;
|
||||
if(v == null) {
|
||||
v = inf.inflate(R.layout.useritem, parent,false);
|
||||
v.setBackgroundColor(background);
|
||||
v.setOnClickListener(this);
|
||||
}
|
||||
((TextView)v.findViewById(R.id.username_detail)).setText(userDatabase.getUsername(position));
|
||||
((TextView)v.findViewById(R.id.screenname_detail)).setText(userDatabase.getScreenname(position));
|
||||
ImageView pb = v.findViewById(R.id.user_profileimg);
|
||||
|
||||
if(userDatabase.loadImages()) {
|
||||
Picasso.with(context).load(userDatabase.getImageUrl(position)).into(pb);
|
||||
}
|
||||
if(userDatabase.isVerified(position)) {
|
||||
v.findViewById(R.id.verified).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
v.findViewById(R.id.verified).setVisibility(View.INVISIBLE);
|
||||
}
|
||||
if(userDatabase.isLocked(position)) {
|
||||
v.findViewById(R.id.locked_profile).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
v.findViewById(R.id.locked_profile).setVisibility(View.INVISIBLE);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
ListView parent = ((ListView)p);
|
||||
int position = parent.getPositionForView(v);
|
||||
parent.performItemClick(v,position,0);
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
package org.nuclearfog.twidda.viewadapter;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
|
||||
public class UserRecycler extends RecyclerView.Adapter<UserRecycler.ItemHolder> implements View.OnClickListener {
|
||||
|
||||
private UserDatabase mUser;
|
||||
private OnItemClicked mListener;
|
||||
private ViewGroup parent;
|
||||
|
||||
public UserRecycler(UserDatabase mUser, OnItemClicked mListener) {
|
||||
this.mListener = mListener;
|
||||
this.mUser = mUser;
|
||||
}
|
||||
|
||||
public UserDatabase getData(){return mUser; }
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount(){
|
||||
return mUser.getSize();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getItemId(int pos){
|
||||
return mUser.getUserID(pos);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemHolder onCreateViewHolder(ViewGroup parent, int index) {
|
||||
this.parent = parent;
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.useritem, parent,false);
|
||||
v.setOnClickListener(this);
|
||||
return new ItemHolder(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ItemHolder vh, int index) {
|
||||
vh.screenname.setText(mUser.getScreenname(index));
|
||||
vh.username.setText(mUser.getUsername(index));
|
||||
if(mUser.loadImages()) {
|
||||
Picasso.with(parent.getContext()).load(mUser.getImageUrl(index)).into(vh.profileImg);
|
||||
}
|
||||
if(mUser.isVerified(index)) {
|
||||
vh.verifyIco.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
vh.verifyIco.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
if(mUser.isLocked(index)) {
|
||||
vh.lockIco.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
vh.lockIco.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
ViewGroup p = UserRecycler.this.parent;
|
||||
RecyclerView rv = (RecyclerView) p;
|
||||
int position = rv.getChildLayoutPosition(view);
|
||||
mListener.onItemClick(view, p, position);
|
||||
}
|
||||
|
||||
class ItemHolder extends ViewHolder {
|
||||
ImageView profileImg, verifyIco, lockIco;
|
||||
TextView username, screenname;
|
||||
public ItemHolder(View v) {
|
||||
super(v);
|
||||
username = v.findViewById(R.id.username_detail);
|
||||
screenname = v.findViewById(R.id.screenname_detail);
|
||||
profileImg = v.findViewById(R.id.user_profileimg);
|
||||
verifyIco = v.findViewById(R.id.verified);
|
||||
lockIco = v.findViewById(R.id.locked_profile);
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnItemClicked {
|
||||
void onItemClick(View v, ViewGroup parent, int position);
|
||||
}
|
||||
}
|
@ -4,31 +4,32 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TabHost;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
import org.nuclearfog.twidda.backend.TwitterSearch;
|
||||
import org.nuclearfog.twidda.viewadapter.UserRecycler;
|
||||
|
||||
/**
|
||||
* SearchPage Tweets and Users
|
||||
* @see TwitterSearch
|
||||
*/
|
||||
public class SearchPage extends AppCompatActivity implements AdapterView.OnItemClickListener,
|
||||
SwipeRefreshLayout.OnRefreshListener, TabHost.OnTabChangeListener {
|
||||
public class SearchPage extends AppCompatActivity implements UserRecycler.OnItemClicked,
|
||||
SwipeRefreshLayout.OnRefreshListener, TabHost.OnTabChangeListener, TimelineRecycler.OnItemClicked {
|
||||
|
||||
private ListView tweetSearch, userSearch;
|
||||
private RecyclerView tweetSearch,userSearch;
|
||||
private SwipeRefreshLayout tweetReload;
|
||||
private TwitterSearch mSearch;
|
||||
private String search = "";
|
||||
@ -40,9 +41,12 @@ public class SearchPage extends AppCompatActivity implements AdapterView.OnItemC
|
||||
getExtras(getIntent().getExtras());
|
||||
|
||||
Toolbar tool = (Toolbar) findViewById(R.id.search_toolbar);
|
||||
tweetSearch = (ListView) findViewById(R.id.tweet_result);
|
||||
userSearch = (ListView) findViewById(R.id.user_result);
|
||||
|
||||
tweetSearch = (RecyclerView) findViewById(R.id.tweet_result);
|
||||
userSearch = (RecyclerView) findViewById(R.id.user_result);
|
||||
tweetReload = (SwipeRefreshLayout) findViewById(R.id.searchtweets);
|
||||
tweetSearch.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
userSearch.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
setSupportActionBar(tool);
|
||||
if(getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
@ -51,10 +55,7 @@ public class SearchPage extends AppCompatActivity implements AdapterView.OnItemC
|
||||
setTabs(tabhost);
|
||||
|
||||
tabhost.setOnTabChangedListener(this);
|
||||
tweetSearch.setOnItemClickListener(this);
|
||||
userSearch.setOnItemClickListener(this);
|
||||
tweetReload.setOnRefreshListener(this);
|
||||
|
||||
getContent();
|
||||
}
|
||||
|
||||
@ -115,11 +116,11 @@ public class SearchPage extends AppCompatActivity implements AdapterView.OnItemC
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
public void onItemClick(View view, ViewGroup parent, int position) {
|
||||
switch(parent.getId()) {
|
||||
case R.id.tweet_result:
|
||||
if(!tweetReload.isRefreshing()) {
|
||||
TimelineAdapter tlAdp = (TimelineAdapter) tweetSearch.getAdapter();
|
||||
TimelineRecycler tlAdp = (TimelineRecycler) tweetSearch.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
@ -134,7 +135,7 @@ public class SearchPage extends AppCompatActivity implements AdapterView.OnItemC
|
||||
}
|
||||
break;
|
||||
case R.id.user_result:
|
||||
UserAdapter uAdp = (UserAdapter) userSearch.getAdapter();
|
||||
UserRecycler uAdp = (UserRecycler) userSearch.getAdapter();
|
||||
UserDatabase uDb = uAdp.getData();
|
||||
Intent profile = new Intent(getApplicationContext(), UserProfile.class);
|
||||
Bundle bundle = new Bundle();
|
||||
@ -174,6 +175,7 @@ public class SearchPage extends AppCompatActivity implements AdapterView.OnItemC
|
||||
mSearch.execute(search);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void getExtras(Bundle b) {
|
||||
search = b.getString("search");
|
||||
|
@ -2,14 +2,16 @@ package org.nuclearfog.twidda.window;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.CollapsingToolbarLayout;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
@ -18,21 +20,20 @@ import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import static android.content.DialogInterface.*;
|
||||
|
||||
import org.nuclearfog.twidda.backend.ImagePopup;
|
||||
import org.nuclearfog.twidda.backend.StatusLoader;
|
||||
import org.nuclearfog.twidda.backend.TwitterEngine;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
|
||||
/**
|
||||
* Detailed Tweet Window
|
||||
* @see StatusLoader
|
||||
*/
|
||||
public class TweetDetail extends AppCompatActivity implements View.OnClickListener,
|
||||
AdapterView.OnItemClickListener, DialogInterface.OnClickListener, SwipeRefreshLayout.OnRefreshListener {
|
||||
TimelineRecycler.OnItemClicked, DialogInterface.OnClickListener, SwipeRefreshLayout.OnRefreshListener {
|
||||
|
||||
private ListView answer_list;
|
||||
private RecyclerView answer_list;
|
||||
private long tweetID;
|
||||
private long userID;
|
||||
private StatusLoader mStat, mReply;
|
||||
@ -46,22 +47,20 @@ public class TweetDetail extends AppCompatActivity implements View.OnClickListen
|
||||
|
||||
boolean home = userID == TwitterEngine.getHomeId();
|
||||
|
||||
answer_list = (ListView) findViewById(R.id.answer_list);
|
||||
answer_list = (RecyclerView) findViewById(R.id.answer_list);
|
||||
Button answer = (Button) findViewById(R.id.answer_button);
|
||||
Button retweet = (Button) findViewById(R.id.rt_button_detail);
|
||||
Button favorite = (Button) findViewById(R.id.fav_button_detail);
|
||||
Button delete = (Button) findViewById(R.id.delete);
|
||||
ImageView pb =(ImageView) findViewById(R.id.profileimage_detail);
|
||||
SwipeRefreshLayout answerReload = (SwipeRefreshLayout) findViewById(R.id.answer_reload);
|
||||
|
||||
TextView txtRt = (TextView) findViewById(R.id.no_rt_detail);
|
||||
TextView txtFav = (TextView) findViewById(R.id.no_fav_detail);
|
||||
TextView date = (TextView) findViewById(R.id.timedetail);
|
||||
answer_list.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
if(home) {
|
||||
delete.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
answer_list.setOnItemClickListener(this);
|
||||
favorite.setOnClickListener(this);
|
||||
retweet.setOnClickListener(this);
|
||||
answerReload.setOnRefreshListener(this);
|
||||
@ -159,8 +158,8 @@ public class TweetDetail extends AppCompatActivity implements View.OnClickListen
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
TimelineAdapter tlAdp = (TimelineAdapter) answer_list.getAdapter();
|
||||
public void onItemClick(View view, ViewGroup parent, int position) {
|
||||
TimelineRecycler tlAdp = (TimelineRecycler) answer_list.getAdapter();
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long userID = twDB.getUserID(position);
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
|
@ -3,27 +3,28 @@ package org.nuclearfog.twidda.window;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.nuclearfog.twidda.backend.UserLists;
|
||||
import org.nuclearfog.twidda.database.UserDatabase;
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.viewadapter.UserAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.UserRecycler;
|
||||
|
||||
/**
|
||||
* Get Follow Connections from an User
|
||||
* @see UserLists
|
||||
*/
|
||||
public class UserDetail extends AppCompatActivity implements AdapterView.OnItemClickListener {
|
||||
public class UserDetail extends AppCompatActivity implements UserRecycler.OnItemClicked {
|
||||
|
||||
private long userID, tweetID;
|
||||
private long mode;
|
||||
private ListView userListview;
|
||||
private RecyclerView userListview;
|
||||
private UserLists uList;
|
||||
|
||||
@Override
|
||||
@ -32,10 +33,10 @@ public class UserDetail extends AppCompatActivity implements AdapterView.OnItemC
|
||||
setContentView(R.layout.user);
|
||||
getExtras(getIntent().getExtras());
|
||||
|
||||
userListview = (ListView) findViewById(R.id.userlist);
|
||||
userListview = (RecyclerView) findViewById(R.id.userlist);
|
||||
userListview.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.user_toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
userListview.setOnItemClickListener(this);
|
||||
getUsers();
|
||||
}
|
||||
|
||||
@ -70,8 +71,8 @@ public class UserDetail extends AppCompatActivity implements AdapterView.OnItemC
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
UserAdapter uAdp = (UserAdapter) userListview.getAdapter();
|
||||
public void onItemClick(View view, ViewGroup parent, int position) {
|
||||
UserRecycler uAdp = (UserRecycler) userListview.getAdapter();
|
||||
UserDatabase uDB = uAdp.getData();
|
||||
long userID = uDB.getUserID(position);
|
||||
String username = uDB.getScreenname(position);
|
||||
|
@ -5,31 +5,32 @@ import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TabHost;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.nuclearfog.twidda.R;
|
||||
import org.nuclearfog.twidda.database.TweetDatabase;
|
||||
import org.nuclearfog.twidda.backend.ProfileLoader;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineAdapter;
|
||||
import org.nuclearfog.twidda.viewadapter.TimelineRecycler;
|
||||
|
||||
/**
|
||||
* User Profile Class uses AsyncTask
|
||||
* @see ProfileLoader
|
||||
*/
|
||||
public class UserProfile extends AppCompatActivity implements View.OnClickListener,
|
||||
AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener,
|
||||
TabHost.OnTabChangeListener {
|
||||
SwipeRefreshLayout.OnRefreshListener, TabHost.OnTabChangeListener,
|
||||
TimelineRecycler.OnItemClicked {
|
||||
|
||||
private ProfileLoader mProfile, mTweets, mFavorits;
|
||||
private SwipeRefreshLayout homeReload, favoriteReload;
|
||||
private ListView homeTweets, homeFavorits;
|
||||
private RecyclerView homeTweets, homeFavorits;
|
||||
private long userId;
|
||||
private boolean home;
|
||||
private String username = "";
|
||||
@ -47,8 +48,10 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen
|
||||
|
||||
SharedPreferences settings = getSharedPreferences("settings", 0);
|
||||
home = userId == settings.getLong("userID", -1);
|
||||
homeTweets = (ListView)findViewById(R.id.ht_list);
|
||||
homeFavorits = (ListView)findViewById(R.id.hf_list);
|
||||
homeTweets = (RecyclerView) findViewById(R.id.ht_list);
|
||||
homeFavorits = (RecyclerView)findViewById(R.id.hf_list);
|
||||
homeTweets.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
homeFavorits.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
|
||||
homeReload = (SwipeRefreshLayout) findViewById(R.id.hometweets);
|
||||
favoriteReload = (SwipeRefreshLayout) findViewById(R.id.homefavorits);
|
||||
TextView txtFollowing = (TextView)findViewById(R.id.following);
|
||||
@ -58,8 +61,6 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen
|
||||
mTab.setOnTabChangedListener(this);
|
||||
txtFollowing.setOnClickListener(this);
|
||||
txtFollower.setOnClickListener(this);
|
||||
homeTweets.setOnItemClickListener(this);
|
||||
homeFavorits.setOnItemClickListener(this);
|
||||
homeReload.setOnRefreshListener(this);
|
||||
favoriteReload.setOnRefreshListener(this);
|
||||
|
||||
@ -134,26 +135,6 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
TimelineAdapter tlAdp;
|
||||
if(parent.getId() == R.id.ht_list) {
|
||||
tlAdp = (TimelineAdapter) homeTweets.getAdapter();
|
||||
} else {
|
||||
tlAdp = (TimelineAdapter) homeFavorits.getAdapter();
|
||||
}
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(getApplicationContext(), TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username", username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
@ -176,6 +157,27 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen
|
||||
currentTab = tabId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(View v, ViewGroup parent, int position){
|
||||
TimelineRecycler tlAdp;
|
||||
if(parent.getId() == R.id.ht_list) {
|
||||
tlAdp = (TimelineRecycler) homeTweets.getAdapter();
|
||||
} else {
|
||||
tlAdp = (TimelineRecycler) homeFavorits.getAdapter();
|
||||
}
|
||||
TweetDatabase twDB = tlAdp.getData();
|
||||
long tweetID = twDB.getTweetId(position);
|
||||
long userID = twDB.getUserID(position);
|
||||
String username = twDB.getScreenname(position);
|
||||
Intent intent = new Intent(getApplicationContext(), TweetDetail.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putLong("tweetID",tweetID);
|
||||
bundle.putLong("userID",userID);
|
||||
bundle.putString("username", username);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private void setTabs(TabHost mTab) {
|
||||
mTab.setup();
|
||||
// Tab #1
|
||||
@ -197,17 +199,26 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen
|
||||
new Thread( new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ColorPreferences mcolor = ColorPreferences.getInstance(getApplicationContext());
|
||||
int background = mcolor.getColor(ColorPreferences.BACKGROUND);
|
||||
int font_color = mcolor.getColor(ColorPreferences.FONT_COLOR);
|
||||
|
||||
TweetDatabase mTweet = new TweetDatabase(UserProfile.this, TweetDatabase.USER_TL, userId);
|
||||
TweetDatabase fTweet = new TweetDatabase(UserProfile.this, TweetDatabase.FAV_TL, userId);
|
||||
|
||||
mTweets = new ProfileLoader(UserProfile.this);
|
||||
mFavorits = new ProfileLoader(UserProfile.this);
|
||||
if( mTweet.getSize() > 0 ) {
|
||||
homeTweets.setAdapter(new TimelineAdapter(UserProfile.this,mTweet));
|
||||
}else {
|
||||
TimelineRecycler tlRc = new TimelineRecycler(mTweet,UserProfile.this);
|
||||
tlRc.setColor(background,font_color);
|
||||
homeTweets.setAdapter(tlRc);
|
||||
} else {
|
||||
mTweets.execute(userId, ProfileLoader.GET_TWEETS,1L);
|
||||
}
|
||||
if( fTweet.getSize() > 0 ) {
|
||||
homeFavorits.setAdapter(new TimelineAdapter(UserProfile.this,fTweet));
|
||||
TimelineRecycler tlRc = new TimelineRecycler(fTweet,UserProfile.this);
|
||||
tlRc.setColor(background,font_color);
|
||||
homeFavorits.setAdapter(tlRc);
|
||||
} else {
|
||||
mFavorits.execute(userId, ProfileLoader.GET_FAVS,1L);
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/linkButton"
|
||||
android:layout_width="128dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="40dp"
|
||||
android:background="@android:color/darker_gray"
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
<EditText
|
||||
android:id="@+id/pin"
|
||||
android:layout_width="96dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/transparent"
|
||||
android:hint="@string/pin"
|
||||
@ -30,16 +30,18 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/clipboard"
|
||||
style="@style/Widget.AppCompat.Button.Borderless"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:background="@drawable/copy" />
|
||||
android:background="@drawable/copy"
|
||||
android:onClick="onClick" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/get"
|
||||
android:layout_width="128dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="30dp"
|
||||
android:background="@android:color/darker_gray"
|
||||
|
@ -34,7 +34,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/tl_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
@ -45,7 +45,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/tr_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
@ -56,7 +56,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/m_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
@ -248,11 +248,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/ht_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:nestedScrollingEnabled="true" />
|
||||
android:layout_height="match_parent" />
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
@ -260,11 +259,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/hf_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:nestedScrollingEnabled="true" />
|
||||
android:layout_height="match_parent" />
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
@ -35,22 +35,17 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/tweet_result"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
</ListView>
|
||||
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/user_result"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
</ListView>
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
@ -213,13 +213,11 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/answer_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:nestedScrollingEnabled="true">
|
||||
|
||||
</ListView>
|
||||
android:nestedScrollingEnabled="true"/>
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
|
@ -21,12 +21,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
<ListView
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/userlist"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
</ListView>
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user