setup page view

This commit is contained in:
NudeDude 2019-05-05 12:01:52 +02:00
parent c24bce64a9
commit a0efc085b4
37 changed files with 470 additions and 669 deletions

View File

@ -12,7 +12,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import org.nuclearfog.twidda.adapter.HomeTabAdapter;
import org.nuclearfog.twidda.adapter.HomePagerAdapter;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.window.AppSettings;
import org.nuclearfog.twidda.window.LoginPage;
@ -27,10 +27,10 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
private static final int LOGIN = 1;
private static final int SETTING = 2;
private static final int[] icons = {R.drawable.home, R.drawable.hash, R.drawable.mention};
private GlobalSettings settings;
private HomeTabAdapter adapter;
private HomePagerAdapter adapter;
private TabLayout tab;
private ViewPager pager;
private int tabIndex = 0;
@ -40,28 +40,22 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
setContentView(R.layout.page_main);
Toolbar toolbar = findViewById(R.id.profile_toolbar);
pager = findViewById(R.id.home_pager);
tab = findViewById(R.id.home_tab);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayShowTitleEnabled(false);
settings = GlobalSettings.getInstance(this);
pager = findViewById(R.id.home_pager);
TabLayout tab = findViewById(R.id.home_tab);
View root = findViewById(R.id.main_layout);
root.setBackgroundColor(settings.getBackgroundColor());
adapter = new HomeTabAdapter(getSupportFragmentManager());
pager.setOffscreenPageLimit(3);
adapter = new HomePagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(3);
tab.setupWithViewPager(pager);
tab.addOnTabSelectedListener(this);
for(int i = 0 ; i < icons.length ; i++) {
Tab t = tab.getTabAt(i);
if(t != null)
t.setIcon(icons[i]);
}
initView();
}
@ -72,25 +66,22 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
Intent i = new Intent(this, LoginPage.class);
startActivityForResult(i, LOGIN);
}
}
@Override
protected void onActivityResult(int reqCode, int returnCode, Intent i) {
protected void onActivityResult(int reqCode, int returnCode, Intent intent) {
switch (reqCode) {
case LOGIN:
if (returnCode == RESULT_CANCELED)
finish();
break;
case SETTING:
View root = findViewById(R.id.main_layout);
root.setBackgroundColor(settings.getBackgroundColor());
adapter.notifyDataSetChanged();
adapter.notifySettingsChanged();
initView();
break;
}
super.onActivityResult(reqCode, returnCode, i);
super.onActivityResult(reqCode, returnCode, intent);
}
@ -132,14 +123,12 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
setting.setVisible(false);
search.collapseActionView();
break;
case 1:
profile.setVisible(false);
search.setVisible(true);
tweet.setVisible(false);
setting.setVisible(true);
break;
case 2:
profile.setVisible(false);
search.setVisible(false);
@ -162,12 +151,10 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
user.putExtra("username", "");
startActivity(user);
break;
case R.id.action_tweet:
Intent tweet = new Intent(this, TweetPopup.class);
startActivity(tweet);
break;
case R.id.action_settings:
Intent settings = new Intent(this, AppSettings.class);
startActivityForResult(settings, SETTING);
@ -195,9 +182,25 @@ public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSe
@Override
public void onTabUnselected(TabLayout.Tab tab) { }
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) { }
public void onTabReselected(TabLayout.Tab tab) {
}
private void initView() {
final int[] icons = {R.drawable.home, R.drawable.hash, R.drawable.mention};
View root = findViewById(R.id.main_layout);
root.setBackgroundColor(settings.getBackgroundColor());
tab.setSelectedTabIndicatorColor(settings.getHighlightColor());
for (int i = 0; i < icons.length; i++) {
Tab t = tab.getTabAt(i);
if (t != null)
t.setIcon(icons[i]);
}
}
}

View File

@ -1,38 +1,36 @@
package org.nuclearfog.twidda.adapter;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import org.nuclearfog.twidda.fragment.TrendListFragment;
import org.nuclearfog.twidda.fragment.TweetListFragment;
import static org.nuclearfog.twidda.fragment.TweetListFragment.HOME;
import static org.nuclearfog.twidda.fragment.TweetListFragment.MENT;
import org.nuclearfog.twidda.fragment.TweetListFragment.TweetType;
public class HomeTabAdapter extends FragmentPagerAdapter {
public class HomePagerAdapter extends FragmentPagerAdapter {
private static final int COUNT = 3;
private static final Bundle HOME_TL, MENT_TL;
private final Fragment[] fragments;
static {
HOME_TL = new Bundle();
MENT_TL = new Bundle();
HOME_TL.putInt("mode",HOME);
HOME_TL.putBoolean("fix", true);
MENT_TL.putInt("mode", MENT);
MENT_TL.putBoolean("fix", true);
}
public HomeTabAdapter(FragmentManager fm) {
public HomePagerAdapter(FragmentManager fm) {
super(fm);
fragments = new Fragment[COUNT];
fragments[0] = new TweetListFragment();
fragments[1] = new TrendListFragment();
fragments[2] = new TweetListFragment();
Bundle HOME_TL = new Bundle();
Bundle MENT_TL = new Bundle();
HOME_TL.putSerializable("mode", TweetType.HOME);
MENT_TL.putSerializable("mode", TweetType.MENT);
HOME_TL.putBoolean("fix", true);
MENT_TL.putBoolean("fix", true);
fragments[0].setArguments(HOME_TL);
fragments[2].setArguments(MENT_TL);
}
@ -48,4 +46,24 @@ public class HomeTabAdapter extends FragmentPagerAdapter {
public int getCount() {
return COUNT;
}
@Override
public int getItemPosition(@NonNull Object o) {
return POSITION_NONE;
}
public void notifySettingsChanged() {
for (Fragment fragment : fragments) {
if (fragment instanceof OnSettingsChanged)
((OnSettingsChanged) fragment).settingsChanged();
}
}
public interface OnSettingsChanged {
void settingsChanged();
}
}

View File

@ -14,7 +14,7 @@ import java.lang.ref.WeakReference;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder> {
private WeakReference<OnImageClickListener> itemClickListener;
private Bitmap images[];
private Bitmap[] images;
public ImageAdapter(OnImageClickListener l) {
@ -23,7 +23,7 @@ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder>
}
public void setImages(@NonNull Bitmap images[]) {
public void setImages(@NonNull Bitmap[] images) {
this.images = images;
}

View File

@ -27,7 +27,7 @@ import java.util.List;
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageHolder> {
private WeakReference<OnItemSelected> itemClickListener;
private Message messages[];
private Message[] messages;
private int highlight;
private int fontColor;
private boolean loadImage;

View File

@ -6,29 +6,27 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import org.nuclearfog.twidda.fragment.TweetListFragment;
import org.nuclearfog.twidda.fragment.TweetListFragment.TweetType;
import static org.nuclearfog.twidda.fragment.TweetListFragment.USER_FAVOR;
import static org.nuclearfog.twidda.fragment.TweetListFragment.USER_TWEET;
public class ProfileTabAdapter extends FragmentPagerAdapter {
public class ProfilePagerAdapter extends FragmentPagerAdapter {
private static final int COUNT = 2;
private final Fragment[] fragments;
public ProfileTabAdapter(FragmentManager fm, long userId) {
public ProfilePagerAdapter(FragmentManager fm, long userId) {
super(fm);
Bundle usr_tweet = new Bundle();
Bundle usr_favor = new Bundle();
usr_tweet.putLong("id", userId);
usr_tweet.putInt("mode", USER_TWEET);
usr_tweet.putBoolean("fix", false);
usr_favor.putLong("id", userId);
usr_favor.putInt("mode", USER_FAVOR);
usr_tweet.putBoolean("fix", false);
usr_tweet.putBoolean("fix", false);
usr_tweet.putSerializable("mode", TweetType.USER_TWEET);
usr_favor.putSerializable("mode", TweetType.USER_FAVOR);
fragments = new Fragment[COUNT];
fragments[0] = new TweetListFragment();

View File

@ -6,19 +6,17 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
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 static org.nuclearfog.twidda.fragment.TweetListFragment.SEARCH;
import static org.nuclearfog.twidda.fragment.UserListFragment.USEARCH;
public class SearchTabAdapter extends FragmentPagerAdapter {
public class SearchPagerAdapter extends FragmentPagerAdapter {
private static final int COUNT = 2;
private final Fragment[] fragments;
public SearchTabAdapter(FragmentManager fm, String search) {
public SearchPagerAdapter(FragmentManager fm, String search) {
super(fm);
fragments = new Fragment[COUNT];
fragments[0] = new TweetListFragment();
@ -26,12 +24,12 @@ public class SearchTabAdapter extends FragmentPagerAdapter {
Bundle tweetSearch = new Bundle();
Bundle userSearch = new Bundle();
tweetSearch.putInt("mode", SEARCH);
tweetSearch.putBoolean("fix", true);
tweetSearch.putString("search", search);
userSearch.putInt("mode", USEARCH);
userSearch.putString("search", search);
tweetSearch.putSerializable("mode", TweetType.SEARCH);
userSearch.putSerializable("mode", UserType.USEARCH);
tweetSearch.putBoolean("fix", true);
userSearch.putBoolean("fix", true);
fragments[0].setArguments(tweetSearch);
fragments[1].setArguments(userSearch);

View File

@ -0,0 +1,64 @@
package org.nuclearfog.twidda.adapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.fragment.UserListFragment;
import org.nuclearfog.twidda.fragment.UserListFragment.UserType;
public class UserPagerAdapter extends FragmentPagerAdapter {
public enum Mode {
FOLLOWERS,
FOLLOWING,
RETWEETER,
FAVORS
}
private static final int COUNT = 1;
private final Fragment[] fragments;
public UserPagerAdapter(FragmentManager fm, Mode mode, long id) {
super(fm);
Bundle param = new Bundle();
fragments = new Fragment[COUNT];
fragments[0] = new UserListFragment();
switch (mode) {
case FOLLOWERS:
param.putSerializable("mode", UserType.FOLLOWS);
break;
case FOLLOWING:
param.putSerializable("mode", UserType.FRIENDS);
break;
case RETWEETER:
param.putSerializable("mode", UserType.RETWEET);
break;
case FAVORS:
param.putSerializable("mode", UserType.FAVORIT);
break;
default:
if (BuildConfig.DEBUG)
throw new AssertionError("mode failure");
break;
}
param.putLong("id", id);
fragments[0].setArguments(param);
}
@Override
public Fragment getItem(int pos) {
return fragments[pos];
}
@Override
public int getCount() {
return COUNT;
}
}

View File

@ -12,7 +12,6 @@ import android.widget.TextView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
import twitter4j.TwitterException;
import org.nuclearfog.tag.Tagger;
import org.nuclearfog.twidda.R;
@ -20,7 +19,6 @@ import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.database.DatabaseAdapter;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.window.ImageDetail;
import org.nuclearfog.twidda.window.UserDetail;
import org.nuclearfog.twidda.window.UserProfile;
import java.lang.ref.WeakReference;
@ -28,6 +26,8 @@ import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import twitter4j.TwitterException;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
@ -40,6 +40,7 @@ public class ProfileLoader extends AsyncTask<Long, Void, Boolean> {
ACTION_BLOCK,
ACTION_MUTE
}
private final Mode mode;
private WeakReference<UserProfile> ui;
@ -183,25 +184,6 @@ public class ProfileLoader extends AsyncTask<Long, Void, Boolean> {
followback.setVisibility(VISIBLE);
if (user.isLocked()) {
locked.setVisibility(VISIBLE);
} else {
txtFollowing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent following = new Intent(ui.get(), UserDetail.class);
following.putExtra("ID", user.getId());
following.putExtra("mode", 0);
ui.get().startActivity(following);
}
});
txtFollower.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent follower = new Intent(ui.get(), UserDetail.class);
follower.putExtra("ID", user.getId());
follower.putExtra("mode", 1);
ui.get().startActivity(follower);
}
});
}
profile.setOnClickListener(new View.OnClickListener() {
@Override
@ -277,7 +259,7 @@ public class ProfileLoader extends AsyncTask<Long, Void, Boolean> {
break;
}
if (!isHome) {
ui.get().setConnection(isFollowing, isMuted, isBlocked, canDm, user.followRequested());
ui.get().setConnection(isFollowing, isMuted, isBlocked, user.isLocked(), canDm, user.followRequested());
ui.get().invalidateOptionsMenu();
}
} else {

View File

@ -1,103 +0,0 @@
package org.nuclearfog.twidda.backend;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.UserAdapter;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.window.UserDetail;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import twitter4j.TwitterException;
public class UserLoader extends AsyncTask<Long, Void, Boolean> {
public enum Mode {
FOLLOWING,
FOLLOWERS,
RETWEET,
FAVORIT
}
private Mode mode;
private WeakReference<UserDetail> ui;
private TwitterEngine mTwitter;
private TwitterException err;
private UserAdapter usrAdp;
private List<TwitterUser> user;
public UserLoader(@NonNull UserDetail context, Mode mode) {
ui = new WeakReference<>(context);
mTwitter = TwitterEngine.getInstance(context);
RecyclerView userList = context.findViewById(R.id.userlist);
usrAdp = (UserAdapter) userList.getAdapter();
user = new ArrayList<>();
this.mode = mode;
}
@Override
protected Boolean doInBackground(Long... data) {
long id = data[0];
long cursor = data[1];
try {
switch (mode) {
case FOLLOWING:
user = mTwitter.getFollowing(id, cursor);
break;
case FOLLOWERS:
user = mTwitter.getFollower(id, cursor);
break;
case RETWEET:
user = mTwitter.getRetweeter(id, cursor);
break;
case FAVORIT:
// TODO get User favoriting a tweet
break;
}
} catch (TwitterException err) {
this.err = err;
return false;
} catch (Exception err) {
if (err.getMessage() != null)
Log.e("User List", err.getMessage());
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean success) {
if (ui.get() == null) return;
SwipeRefreshLayout refresh = ui.get().findViewById(R.id.user_refresh);
refresh.setRefreshing(false);
if (success) {
usrAdp.setData(user);
usrAdp.notifyDataSetChanged();
} else {
if (err != null) {
ErrorHandler.printError(ui.get(), err);
}
}
}
@Override
protected void onCancelled() {
if (ui.get() == null) return;
SwipeRefreshLayout refresh = ui.get().findViewById(R.id.user_refresh);
refresh.setRefreshing(false);
}
}

View File

@ -10,19 +10,17 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.nuclearfog.twidda.adapter.MessageAdapter;
import org.nuclearfog.twidda.fragment.backend.MessageLoader;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.fragment.backend.MessageLoader.Mode.LOAD;
public class MessageListFragment extends Fragment implements OnRefreshListener{
public class MessageListFragment extends Fragment implements OnRefreshListener {
private MessageLoader messageTask;
private SwipeRefreshLayout root;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
root = new SwipeRefreshLayout(inflater.getContext());
@ -36,7 +34,7 @@ public class MessageListFragment extends Fragment implements OnRefreshListener{
@Override
public void onStart() {
super.onStart();
if(messageTask == null) {
if (messageTask == null) {
messageTask = new MessageLoader(root, LOAD);
messageTask.execute();
}
@ -46,7 +44,7 @@ public class MessageListFragment extends Fragment implements OnRefreshListener{
@Override
public void onStop() {
super.onStop();
if(messageTask != null && messageTask.getStatus() == RUNNING)
if (messageTask != null && messageTask.getStatus() == RUNNING)
messageTask.cancel(true);
}
@ -58,8 +56,4 @@ public class MessageListFragment extends Fragment implements OnRefreshListener{
}
}

View File

@ -1,6 +1,7 @@
package org.nuclearfog.twidda.fragment;
import android.content.Intent;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
@ -13,19 +14,18 @@ import android.view.View;
import android.view.ViewGroup;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.HomePagerAdapter.OnSettingsChanged;
import org.nuclearfog.twidda.adapter.OnItemClickListener;
import org.nuclearfog.twidda.adapter.TrendAdapter;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.fragment.backend.TrendLoader;
import org.nuclearfog.twidda.fragment.backend.TrendLoader.Mode;
import org.nuclearfog.twidda.window.SearchPage;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.fragment.backend.TrendLoader.Mode.DB_TRND;
import static org.nuclearfog.twidda.fragment.backend.TrendLoader.Mode.LD_TRND;
public class TrendListFragment extends Fragment implements OnRefreshListener, OnItemClickListener, OnSettingsChanged {
public class TrendListFragment extends Fragment implements OnRefreshListener, OnItemClickListener {
private GlobalSettings settings;
private TrendLoader trendTask;
private SwipeRefreshLayout reload;
private TrendAdapter adapter;
@ -36,7 +36,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
super.onCreateView(inflater, parent, param);
View v = inflater.inflate(R.layout.fragment_list, parent, false);
GlobalSettings settings = GlobalSettings.getInstance(getContext());
settings = GlobalSettings.getInstance(getContext());
adapter = new TrendAdapter(this);
adapter.setColor(settings.getFontColor());
@ -54,7 +54,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onViewCreated(@NonNull View v, Bundle param) {
super.onViewCreated(v,param);
super.onViewCreated(v, param);
root = v;
}
@ -63,7 +63,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
public void onStart() {
super.onStart();
if (trendTask == null) {
trendTask = new TrendLoader(root, DB_TRND);
trendTask = new TrendLoader(root, Mode.DB_TRND);
trendTask.execute();
}
}
@ -71,7 +71,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onStop() {
if(trendTask != null && trendTask.getStatus() == RUNNING)
if (trendTask != null && trendTask.getStatus() == Status.RUNNING)
trendTask.cancel(true);
super.onStop();
}
@ -79,7 +79,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onRefresh() {
trendTask = new TrendLoader(root, LD_TRND);
trendTask = new TrendLoader(root, Mode.LD_TRND);
trendTask.execute();
}
@ -95,4 +95,12 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
startActivity(intent);
}
}
@Override
public void settingsChanged() {
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
adapter.setColor(settings.getFontColor());
adapter.notifyDataSetChanged();
}
}

View File

@ -1,8 +1,8 @@
package org.nuclearfog.twidda.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
@ -15,6 +15,7 @@ import android.view.ViewGroup;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.HomePagerAdapter.OnSettingsChanged;
import org.nuclearfog.twidda.adapter.OnItemClickListener;
import org.nuclearfog.twidda.adapter.TweetAdapter;
import org.nuclearfog.twidda.backend.items.Tweet;
@ -24,47 +25,50 @@ import org.nuclearfog.twidda.fragment.backend.TweetLoader.Mode;
import org.nuclearfog.twidda.window.TweetDetail;
public class TweetListFragment extends Fragment implements OnRefreshListener, OnItemClickListener {
public class TweetListFragment extends Fragment implements OnRefreshListener, OnItemClickListener, OnSettingsChanged {
public static final int HOME = 0;
public static final int MENT = 1;
public static final int USER_TWEET = 2;
public static final int USER_FAVOR = 3;
public static final int TWEET_ANSR = 4;
public static final int SEARCH = 5;
public enum TweetType {
HOME,
MENT,
USER_TWEET,
USER_FAVOR,
TWEET_ANSR,
SEARCH,
}
private GlobalSettings settings;
private TweetLoader tweetTask;
private SwipeRefreshLayout reload;
private TweetAdapter adapter;
private View root;
private int mode;
private TweetType mode;
private String search;
private long id;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
super.onCreateView(inflater, parent, param);
boolean fixSize;
Bundle b = getArguments();
if(b != null && b.containsKey("mode")) {
mode = b.getInt("mode");
if (b != null && b.containsKey("mode")) {
mode = (TweetType) b.getSerializable("mode");
id = b.getLong("id", -1);
search = b.getString("search", "");
fixSize = b.getBoolean("fix", false);
} else {
throw new AssertionError("Bundle error!");
throw new AssertionError();
}
View v = inflater.inflate(R.layout.fragment_list, parent, false);
GlobalSettings settings = GlobalSettings.getInstance(getContext());
reload = v.findViewById(R.id.fragment_reload);
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reload.setOnRefreshListener(this);
adapter = new TweetAdapter(this);
settings = GlobalSettings.getInstance(getContext());
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
adapter.setColor(settings.getHighlightColor(), settings.getFontColor());
adapter.toggleImage(settings.getImageLoad());
@ -86,8 +90,9 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onStart() {
super.onStart();
if(tweetTask == null) {
switch(mode) {
if (tweetTask == null) {
switch (mode) {
case HOME:
tweetTask = new TweetLoader(root, Mode.DB_HOME);
tweetTask.execute();
@ -113,7 +118,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
tweetTask.execute(search);
break;
default:
if(BuildConfig.DEBUG)
if (BuildConfig.DEBUG)
throw new AssertionError("mode failure");
break;
}
@ -123,7 +128,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onStop() {
if(tweetTask != null && tweetTask.getStatus() == Status.RUNNING)
if (tweetTask != null && tweetTask.getStatus() == Status.RUNNING)
tweetTask.cancel(true);
super.onStop();
}
@ -131,7 +136,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
@Override
public void onRefresh() {
switch(mode) {
switch (mode) {
case HOME:
tweetTask = new TweetLoader(root, Mode.TL_HOME);
tweetTask.execute();
@ -157,7 +162,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
tweetTask.execute(search);
break;
default:
if(BuildConfig.DEBUG)
if (BuildConfig.DEBUG)
throw new AssertionError("mode failure");
break;
}
@ -176,4 +181,13 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
startActivity(intent);
}
}
@Override
public void settingsChanged() {
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
adapter.setColor(settings.getHighlightColor(), settings.getFontColor());
adapter.toggleImage(settings.getImageLoad());
adapter.notifyDataSetChanged();
}
}

View File

@ -26,29 +26,32 @@ import org.nuclearfog.twidda.window.UserProfile;
public class UserListFragment extends Fragment implements OnRefreshListener, OnItemClickListener {
public static final int FOLLOWS = 0;
public static final int FRIENDS = 1;
public static final int RETWEET = 2;
public static final int FAVORIT = 3;
public static final int USEARCH = 4;
public enum UserType {
FOLLOWS,
FRIENDS,
RETWEET,
FAVORIT,
USEARCH
}
private SwipeRefreshLayout reload;
private UserAdapter adapter;
private UserLoader userTask;
private View root;
private UserType mode;
private String search;
private long id;
private int mode;
private boolean fixLayout;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup parent, Bundle param) {
Bundle b = getArguments();
if(b != null && b.containsKey("mode")) {
mode = b.getInt("mode");
if (b != null && b.containsKey("mode")) {
mode = (UserType) b.getSerializable("mode");
id = b.getLong("id", -1);
search = b.getString("search", "");
} else if(BuildConfig.DEBUG) {
fixLayout = b.getBoolean("fix", true);
} else if (BuildConfig.DEBUG) {
throw new AssertionError("Bundle error!");
}
GlobalSettings settings = GlobalSettings.getInstance(getContext());
@ -63,7 +66,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
adapter.setColor(settings.getFontColor());
adapter.toggleImage(settings.getImageLoad());
list.setLayoutManager(new LinearLayoutManager(getContext()));
list.setHasFixedSize(true);
list.setHasFixedSize(fixLayout);
list.setAdapter(adapter);
return v;
}
@ -78,7 +81,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
@Override
public void onStart() {
super.onStart();
if(userTask == null) {
if (userTask == null) {
load();
}
}
@ -86,7 +89,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
@Override
public void onStop() {
if(userTask != null && userTask.getStatus() == Status.RUNNING)
if (userTask != null && userTask.getStatus() == Status.RUNNING)
userTask.cancel(true);
super.onStop();
}
@ -100,7 +103,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
@Override
public void onItemClick(RecyclerView rv, int pos) {
if(!reload.isRefreshing()) {
if (!reload.isRefreshing()) {
TwitterUser user = adapter.getData(pos);
long userID = user.getId();
String username = user.getScreenname();
@ -135,7 +138,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
userTask.execute(search);
break;
default:
if(BuildConfig.DEBUG)
if (BuildConfig.DEBUG)
throw new AssertionError("mode failure");
break;
}

View File

@ -14,16 +14,18 @@ import org.nuclearfog.twidda.database.DatabaseAdapter;
import java.lang.ref.WeakReference;
import java.util.List;
import twitter4j.TwitterException;
public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
public enum Mode {
LOAD,
DEL
}
private Mode mode;
private WeakReference<ViewGroup> ui;
private TwitterEngine mTwitter;
@ -45,10 +47,10 @@ public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
@Override
protected void onPreExecute() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = (SwipeRefreshLayout)ui.get();
SwipeRefreshLayout reload = (SwipeRefreshLayout) ui.get();
reload.setRefreshing(true);
}
@ -57,7 +59,7 @@ public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
protected Boolean doInBackground(Long[] param) {
long messageId = 0;
try {
switch(mode) {
switch (mode) {
case LOAD:
messages = mTwitter.getMessages();
db.storeMessage(messages);
@ -70,14 +72,14 @@ public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
messages = db.getMessages();
break;
}
} catch(TwitterException err) {
} catch (TwitterException err) {
if (err.getErrorCode() == 34) {
db.deleteDm(messageId);
} else {
this.err = err;
}
return false;
} catch(Exception err) {
} catch (Exception err) {
return false;
}
return true;
@ -86,26 +88,26 @@ public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
@Override
protected void onPostExecute(Boolean success) {
if(ui.get() == null)
if (ui.get() == null)
return;
if(success) {
if (success) {
adapter.setData(messages);
adapter.notifyDataSetChanged();
} else {
if(err != null)
if (err != null)
ErrorHandler.printError(ui.get().getContext(), err);
}
SwipeRefreshLayout reload = (SwipeRefreshLayout)ui.get();
SwipeRefreshLayout reload = (SwipeRefreshLayout) ui.get();
reload.setRefreshing(false);
}
@Override
protected void onCancelled() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = (SwipeRefreshLayout)ui.get();
SwipeRefreshLayout reload = (SwipeRefreshLayout) ui.get();
reload.setRefreshing(false);
}
}

View File

@ -20,12 +20,13 @@ import java.util.List;
import twitter4j.TwitterException;
public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
public enum Mode {
DB_TRND,
LD_TRND
}
private Mode mode;
private WeakReference<View> ui;
private TwitterException err;
@ -50,7 +51,7 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
reload.setRefreshing(true);
@ -60,10 +61,10 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void[] v) {
try {
switch(mode) {
switch (mode) {
case DB_TRND:
trends = db.getTrends(woeId);
if(!trends.isEmpty())
if (!trends.isEmpty())
break;
case LD_TRND:
@ -71,10 +72,10 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
db.storeTrends(trends, woeId);
break;
}
} catch(TwitterException err) {
} catch (TwitterException err) {
this.err = err;
return false;
} catch(Exception err) {
} catch (Exception err) {
return false;
}
return true;
@ -83,14 +84,14 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPostExecute(Boolean success) {
if(ui.get() == null)
if (ui.get() == null)
return;
if(success) {
if (success) {
adapter.setData(trends);
adapter.notifyDataSetChanged();
} else {
if(err != null)
if (err != null)
ErrorHandler.printError(ui.get().getContext(), err);
}
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
@ -100,7 +101,7 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onCancelled() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);

View File

@ -30,6 +30,7 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
TWEET_ANS, DB_ANS,
TWEET_SEARCH
}
private Mode mode;
private WeakReference<View> ui;
private TweetAdapter adapter;
@ -45,7 +46,7 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
settings = GlobalSettings.getInstance(root.getContext());
mTwitter = TwitterEngine.getInstance(root.getContext());
RecyclerView list = root.findViewById(R.id.fragment_list);
adapter = (TweetAdapter)list.getAdapter();
adapter = (TweetAdapter) list.getAdapter();
db = new DatabaseAdapter(root.getContext());
this.mode = mode;
}
@ -53,7 +54,7 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onPreExecute() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
@ -65,10 +66,10 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
protected Boolean doInBackground(Object[] param) {
long sinceId = 1;
try {
switch(mode) {
switch (mode) {
case DB_HOME:
tweets = db.getHomeTimeline();
if(!tweets.isEmpty())
if (!tweets.isEmpty())
break;
case TL_HOME:
@ -81,54 +82,54 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
case DB_MENT:
tweets = db.getMentions();
if(!tweets.isEmpty())
if (!tweets.isEmpty())
break;
case TL_MENT:
if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0);
tweets = mTwitter.getMention(1, sinceId);
tweets.addAll(adapter.getData());
db.storeMentions(tweets);
tweets.addAll(adapter.getData());
publishProgress();
break;
case DB_TWEETS:
tweets = db.getUserTweets((long)param[0]);
if(!tweets.isEmpty())
tweets = db.getUserTweets((long) param[0]);
if (!tweets.isEmpty())
break;
case USR_TWEETS:
if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0);
tweets = mTwitter.getUserTweets((long)param[0], sinceId, 1);
tweets = mTwitter.getUserTweets((long) param[0], sinceId, 1);
db.storeUserTweets(tweets);
tweets.addAll(adapter.getData());
break;
case DB_FAVORS:
tweets = db.getUserFavs((long)param[0]);
if(!tweets.isEmpty())
tweets = db.getUserFavs((long) param[0]);
if (!tweets.isEmpty())
break;
case USR_FAVORS:
if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0);
tweets = mTwitter.getUserFavs((long)param[0], sinceId, 1);
db.storeUserFavs(tweets, (long)param[0]);
tweets = mTwitter.getUserFavs((long) param[0], sinceId, 1);
db.storeUserFavs(tweets, (long) param[0]);
tweets.addAll(adapter.getData());
break;
case DB_ANS:
tweets = db.getAnswers((long)param[0]);
if(tweets.isEmpty() || !settings.getAnswerLoad())
tweets = db.getAnswers((long) param[0]);
if (tweets.isEmpty() || !settings.getAnswerLoad())
break;
case TWEET_ANS:
if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0);
tweets = mTwitter.getAnswers((String)param[1], (long)param[0], sinceId);
if (!tweets.isEmpty() && db.containStatus((long)param[0]))
tweets = mTwitter.getAnswers((String) param[1], (long) param[0], sinceId);
if (!tweets.isEmpty() && db.containStatus((long) param[0]))
db.storeReplies(tweets);
tweets.addAll(adapter.getData());
break;
@ -136,14 +137,14 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
case TWEET_SEARCH:
if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0);
tweets = mTwitter.searchTweets((String)param[0], sinceId);
tweets = mTwitter.searchTweets((String) param[0], sinceId);
tweets.addAll(adapter.getData());
break;
}
} catch(TwitterException err) {
} catch (TwitterException err) {
this.err = err;
return false;
}
catch(Exception err) {
} catch (Exception err) {
return false;
}
return true;
@ -152,14 +153,14 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onPostExecute(Boolean success) {
if(ui.get() == null)
if (ui.get() == null)
return;
if(success) {
if (success) {
adapter.setData(tweets);
adapter.notifyDataSetChanged();
} else {
if(err != null)
if (err != null)
ErrorHandler.printError(ui.get().getContext(), err);
}
@ -170,7 +171,7 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onCancelled() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
reload.setRefreshing(false);

View File

@ -26,6 +26,7 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
FAVORIT,
SEARCH
}
private Mode mode;
private WeakReference<View> ui;
private TwitterEngine mTwitter;
@ -45,7 +46,7 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onPreExecute() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
@ -56,30 +57,30 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected Boolean doInBackground(Object[] param) {
try {
switch(mode) {
switch (mode) {
case FOLLOWS:
users = mTwitter.getFollower((long)param[0], -1);
users = mTwitter.getFollower((long) param[0], -1);
break;
case FRIENDS:
users = mTwitter.getFollowing((long)param[0], -1);
users = mTwitter.getFollowing((long) param[0], -1);
break;
case RETWEET:
users = mTwitter.getRetweeter((long)param[0], -1);
users = mTwitter.getRetweeter((long) param[0], -1);
break;
case FAVORIT:
break;
case SEARCH:
users = mTwitter.searchUsers((String)param[0]);
users = mTwitter.searchUsers((String) param[0]);
break;
}
} catch(TwitterException err) {
} catch (TwitterException err) {
this.err = err;
return false;
} catch(Exception err) {
} catch (Exception err) {
return false;
}
return true;
@ -88,14 +89,14 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onPostExecute(Boolean success) {
if(ui.get() == null)
if (ui.get() == null)
return;
if(success) {
if (success) {
adapter.setData(users);
adapter.notifyDataSetChanged();
} else {
if(err != null)
if (err != null)
ErrorHandler.printError(ui.get().getContext(), err);
}
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);
@ -105,7 +106,7 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
@Override
protected void onCancelled() {
if(ui.get() == null)
if (ui.get() == null)
return;
SwipeRefreshLayout reload = ui.get().findViewById(R.id.fragment_reload);

View File

@ -29,11 +29,7 @@ import org.nuclearfog.twidda.adapter.WorldIdAdapter;
import org.nuclearfog.twidda.backend.TwitterEngine;
import org.nuclearfog.twidda.database.GlobalSettings;
/**
* App settings page
*
* @see GlobalSettings
*/
public class AppSettings extends AppCompatActivity implements OnClickListener,
OnDismissListener, OnItemSelectedListener, OnCheckedChangeListener {

View File

@ -2,6 +2,7 @@ package org.nuclearfog.twidda.window;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
@ -18,19 +19,11 @@ import org.nuclearfog.twidda.R;
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 static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.MessageLoader.Mode.DEL;
import static org.nuclearfog.twidda.backend.MessageLoader.Mode.GET;
import static org.nuclearfog.twidda.backend.MessageLoader.Mode.LDR;
/**
* Direct Message page
*
* @see MessageLoader
*/
public class DirectMessage extends AppCompatActivity implements OnRefreshListener, OnItemSelected {
private MessageLoader messageAsync;
@ -39,7 +32,6 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
private GlobalSettings settings;
private RecyclerView dmList;
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
@ -71,7 +63,7 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
mAdapter.setColor(settings.getFontColor(), settings.getHighlightColor());
mAdapter.setImageLoad(settings.getImageLoad());
dmList.setAdapter(mAdapter);
messageAsync = new MessageLoader(this, LDR);
messageAsync = new MessageLoader(this, Mode.LDR);
messageAsync.execute();
}
}
@ -79,7 +71,7 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
@Override
protected void onStop() {
if (messageAsync != null && messageAsync.getStatus() == RUNNING) {
if (messageAsync != null && messageAsync.getStatus() == Status.RUNNING) {
messageAsync.cancel(true);
}
super.onStop();
@ -95,12 +87,10 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (messageAsync != null && messageAsync.getStatus() != RUNNING) {
switch (item.getItemId()) {
case R.id.message:
Intent sendDm = new Intent(this, MessagePopup.class);
startActivity(sendDm);
break;
if (messageAsync != null && messageAsync.getStatus() != Status.RUNNING) {
if (item.getItemId() == R.id.message) {
Intent sendDm = new Intent(this, MessagePopup.class);
startActivity(sendDm);
}
}
return super.onOptionsItemSelected(item);
@ -128,7 +118,7 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
.setPositiveButton(R.string.yes_confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
messageAsync = new MessageLoader(DirectMessage.this, DEL);
messageAsync = new MessageLoader(DirectMessage.this, Mode.DEL);
messageAsync.execute(messageId);
}
}).show();
@ -162,7 +152,7 @@ public class DirectMessage extends AppCompatActivity implements OnRefreshListene
@Override
public void onRefresh() {
messageAsync = new MessageLoader(this, GET);
messageAsync = new MessageLoader(this, Mode.GET);
messageAsync.execute();
}
}

View File

@ -2,6 +2,7 @@ package org.nuclearfog.twidda.window;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
@ -26,22 +27,17 @@ import java.util.Locale;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.AsyncTask.Status.RUNNING;
import static android.support.v7.widget.LinearLayoutManager.HORIZONTAL;
/**
* @see ImageLoader
*/
public class ImageDetail extends AppCompatActivity implements OnImageClickListener {
boolean storable;
private ImageLoader imageAsync;
private ZoomView zoomImage;
private String link[];
private String[] link;
private int width;
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
@ -78,7 +74,7 @@ public class ImageDetail extends AppCompatActivity implements OnImageClickListen
@Override
protected void onDestroy() {
if (imageAsync != null && imageAsync.getStatus() == RUNNING)
if (imageAsync != null && imageAsync.getStatus() == Status.RUNNING)
imageAsync.cancel(true);
super.onDestroy();
}

View File

@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
@ -15,13 +16,7 @@ import android.widget.Toast;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.Registration;
import static android.os.AsyncTask.Status.RUNNING;
/**
* Login Page
*
* @see Registration
*/
public class LoginPage extends AppCompatActivity implements OnClickListener {
private Registration registerAsync;
@ -40,7 +35,7 @@ public class LoginPage extends AppCompatActivity implements OnClickListener {
@Override
protected void onDestroy() {
if (registerAsync != null && registerAsync.getStatus() == RUNNING)
if (registerAsync != null && registerAsync.getStatus() == Status.RUNNING)
registerAsync.cancel(true);
super.onDestroy();
}
@ -55,7 +50,7 @@ public class LoginPage extends AppCompatActivity implements OnClickListener {
@Override
public void onClick(View v) {
if (registerAsync != null && registerAsync.getStatus() == RUNNING)
if (registerAsync != null && registerAsync.getStatus() == Status.RUNNING)
registerAsync.cancel(true);
switch (v.getId()) {

View File

@ -5,6 +5,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
@ -21,13 +22,8 @@ import org.nuclearfog.twidda.backend.MessageUpload;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.AsyncTask.Status.RUNNING;
/**
* Message Window
*
* @see MessageUpload
*/
public class MessagePopup extends AppCompatActivity implements View.OnClickListener {
private MessageUpload messageAsync;
@ -74,7 +70,7 @@ public class MessagePopup extends AppCompatActivity implements View.OnClickListe
closeDialog.setPositiveButton(R.string.yes_confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (messageAsync != null && messageAsync.getStatus() == RUNNING)
if (messageAsync != null && messageAsync.getStatus() == Status.RUNNING)
messageAsync.cancel(true);
finish();
}

View File

@ -5,7 +5,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
@ -22,22 +22,17 @@ import android.widget.Toast;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.ProfileEditor;
import org.nuclearfog.twidda.backend.ProfileEditor.Mode;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.ProfileEditor.Mode.READ_DATA;
import static org.nuclearfog.twidda.backend.ProfileEditor.Mode.WRITE_DATA;
/**
* @see org.nuclearfog.twidda.backend.ProfileEditor
*/
public class ProfileEdit extends AppCompatActivity implements View.OnClickListener {
private ProfileEditor editorAsync;
private TextView txtImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -62,7 +57,7 @@ public class ProfileEdit extends AppCompatActivity implements View.OnClickListen
protected void onStart() {
super.onStart();
if (editorAsync == null) {
editorAsync = new ProfileEditor(this, READ_DATA);
editorAsync = new ProfileEditor(this, Mode.READ_DATA);
editorAsync.execute();
}
}
@ -70,7 +65,7 @@ public class ProfileEdit extends AppCompatActivity implements View.OnClickListen
@Override
protected void onStop() {
if (editorAsync != null && editorAsync.getStatus() == AsyncTask.Status.RUNNING)
if (editorAsync != null && editorAsync.getStatus() == Status.RUNNING)
editorAsync.cancel(true);
super.onStop();
}
@ -100,12 +95,9 @@ public class ProfileEdit extends AppCompatActivity implements View.OnClickListen
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
if (editorAsync == null || editorAsync.getStatus() != RUNNING) {
save();
}
break;
if (item.getItemId() == R.id.action_save) {
if (editorAsync == null || editorAsync.getStatus() != Status.RUNNING)
save();
}
return super.onOptionsItemSelected(item);
}
@ -147,9 +139,9 @@ public class ProfileEdit extends AppCompatActivity implements View.OnClickListen
if (name.getText().toString().trim().isEmpty()) {
Toast.makeText(this, R.string.edit_empty_name, Toast.LENGTH_SHORT).show();
} else {
if (editorAsync != null && editorAsync.getStatus() == RUNNING)
if (editorAsync != null && editorAsync.getStatus() == Status.RUNNING)
editorAsync.cancel(true);
editorAsync = new ProfileEditor(this, WRITE_DATA);
editorAsync = new ProfileEditor(this, Mode.WRITE_DATA);
editorAsync.execute();
}
}

View File

@ -3,6 +3,7 @@ package org.nuclearfog.twidda.window;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.design.widget.TabLayout.OnTabSelectedListener;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
@ -13,18 +14,16 @@ import android.view.View;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.SearchTabAdapter;
import org.nuclearfog.twidda.adapter.SearchPagerAdapter;
import org.nuclearfog.twidda.database.GlobalSettings;
/**
* Search Page
*/
public class SearchPage extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
public class SearchPage extends AppCompatActivity implements OnTabSelectedListener {
private static final int[] icons = {R.drawable.search, R.drawable.user};
private ViewPager pager;
private String search = "";
private String search;
private int tabIndex = 0;
@Override
@ -33,8 +32,8 @@ public class SearchPage extends AppCompatActivity implements TabLayout.OnTabSele
setContentView(R.layout.page_search);
Toolbar tool = findViewById(R.id.search_toolbar);
View root = findViewById(R.id.search_layout);
TabLayout tab = findViewById(R.id.search_tab);
View root = findViewById(R.id.search_layout);
pager = findViewById(R.id.search_pager);
setSupportActionBar(tool);
@ -43,21 +42,23 @@ public class SearchPage extends AppCompatActivity implements TabLayout.OnTabSele
Bundle param = getIntent().getExtras();
if (param != null) {
if (BuildConfig.DEBUG && param.size() != 1)
if (BuildConfig.DEBUG && !param.containsKey("search"))
throw new AssertionError();
search = param.getString("search");
search = param.getString("search", "");
}
GlobalSettings settings = GlobalSettings.getInstance(this);
root.setBackgroundColor(settings.getBackgroundColor());
SearchTabAdapter adapter = new SearchTabAdapter(getSupportFragmentManager(), search);
pager.setAdapter(adapter);
tab.setSelectedTabIndicatorColor(settings.getHighlightColor());
SearchPagerAdapter adapter = new SearchPagerAdapter(getSupportFragmentManager(), search);
tab.setupWithViewPager(pager);
tab.addOnTabSelectedListener(this);
pager.setAdapter(adapter);
for(int i = 0 ; i < icons.length ; i++) {
for (int i = 0; i < icons.length; i++) {
TabLayout.Tab t = tab.getTabAt(i);
if(t != null)
if (t != null)
t.setIcon(icons[i]);
}
}
@ -117,9 +118,11 @@ public class SearchPage extends AppCompatActivity implements TabLayout.OnTabSele
@Override
public void onTabUnselected(TabLayout.Tab tab) { }
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) { }
public void onTabReselected(TabLayout.Tab tab) {
}
}

View File

@ -7,6 +7,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
@ -30,24 +31,15 @@ import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.OnItemClickListener;
import org.nuclearfog.twidda.adapter.TweetAdapter;
import org.nuclearfog.twidda.backend.StatusLoader;
import org.nuclearfog.twidda.backend.StatusLoader.Mode;
import org.nuclearfog.twidda.backend.items.Tweet;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.window.UserDetail.UserType;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.StatusLoader.Mode.ANS;
import static org.nuclearfog.twidda.backend.StatusLoader.Mode.DELETE;
import static org.nuclearfog.twidda.backend.StatusLoader.Mode.FAVORITE;
import static org.nuclearfog.twidda.backend.StatusLoader.Mode.LOAD;
import static org.nuclearfog.twidda.backend.StatusLoader.Mode.RETWEET;
/**
* Detailed Tweet Activity
*
* @see StatusLoader
*/
public class TweetDetail extends AppCompatActivity implements OnClickListener,
OnItemClickListener, OnRefreshListener, OnTagClickListener {
@ -124,7 +116,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
answerAdapter.toggleImage(settings.getImageLoad());
answerAdapter.setColor(settings.getHighlightColor(), settings.getFontColor());
answer_list.setAdapter(answerAdapter);
statusAsync = new StatusLoader(this, LOAD);
statusAsync = new StatusLoader(this, Mode.LOAD);
statusAsync.execute(tweetID);
}
}
@ -132,7 +124,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
@Override
protected void onStop() {
if (statusAsync != null && statusAsync.getStatus() == RUNNING)
if (statusAsync != null && statusAsync.getStatus() == Status.RUNNING)
statusAsync.cancel(true);
super.onStop();
}
@ -164,7 +156,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (statusAsync != null && statusAsync.getStatus() != RUNNING) {
if (statusAsync != null && statusAsync.getStatus() != Status.RUNNING) {
switch (item.getItemId()) {
case R.id.delete_tweet:
Builder deleteDialog = new Builder(this);
@ -172,9 +164,9 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
deleteDialog.setPositiveButton(R.string.yes_confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (statusAsync != null && statusAsync.getStatus() == RUNNING)
if (statusAsync != null && statusAsync.getStatus() == Status.RUNNING)
statusAsync.cancel(true);
statusAsync = new StatusLoader(TweetDetail.this, DELETE);
statusAsync = new StatusLoader(TweetDetail.this, Mode.DELETE);
statusAsync.execute(tweetID);
}
});
@ -208,36 +200,32 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
@Override
public void onClick(View v) {
if (statusAsync != null && statusAsync.getStatus() != RUNNING) {
if (statusAsync != null && statusAsync.getStatus() != Status.RUNNING) {
switch (v.getId()) {
case R.id.rt_button_detail:
if (statusAsync != null && statusAsync.getStatus() == RUNNING)
statusAsync.cancel(true);
statusAsync = new StatusLoader(this, RETWEET);
statusAsync = new StatusLoader(this, Mode.RETWEET);
statusAsync.execute(tweetID);
Toast.makeText(this, R.string.loading, Toast.LENGTH_SHORT).show();
break;
case R.id.fav_button_detail:
if (statusAsync != null && statusAsync.getStatus() == RUNNING)
statusAsync.cancel(true);
statusAsync = new StatusLoader(this, FAVORITE);
statusAsync = new StatusLoader(this, Mode.FAVORITE);
statusAsync.execute(tweetID);
Toast.makeText(this, R.string.loading, Toast.LENGTH_SHORT).show();
break;
case R.id.no_rt_detail:
Intent retweet = new Intent(this, UserDetail.class);
retweet.putExtra("ID", tweetID);
retweet.putExtra("mode", 2);
startActivity(retweet);
Intent userList = new Intent(this, UserDetail.class);
userList.putExtra("ID", tweetID);
userList.putExtra("mode", UserType.RETWEETS);
startActivity(userList);
break;
case R.id.no_fav_detail:
Intent favorit = new Intent(this, UserDetail.class);
favorit.putExtra("ID", tweetID);
favorit.putExtra("mode", 3);
startActivity(favorit);
userList = new Intent(this, UserDetail.class);
userList.putExtra("ID", tweetID);
userList.putExtra("mode", UserType.FAVORITS);
startActivity(userList);
break;
case R.id.answer_button:
@ -273,7 +261,7 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
@Override
public void onRefresh() {
statusAsync = new StatusLoader(this, ANS);
statusAsync = new StatusLoader(this, Mode.ANS);
statusAsync.execute(tweetID);
}

View File

@ -3,6 +3,7 @@ package org.nuclearfog.twidda.window;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask.Status;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
@ -26,14 +27,9 @@ import java.util.List;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.content.Intent.ACTION_PICK;
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;
/**
* Tweet Window
*
* @see StatusUploader
*/
public class TweetPopup extends AppCompatActivity implements OnClickListener {
private StatusUploader uploaderAsync;
@ -84,7 +80,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener {
@Override
protected void onDestroy() {
if (uploaderAsync != null && uploaderAsync.getStatus() == RUNNING)
if (uploaderAsync != null && uploaderAsync.getStatus() == Status.RUNNING)
uploaderAsync.cancel(true);
super.onDestroy();
}
@ -135,7 +131,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener {
switch (v.getId()) {
case R.id.sendTweet:
String tweetStr = tweet.getText().toString();
if (uploaderAsync != null && uploaderAsync.getStatus() == RUNNING)
if (uploaderAsync != null && uploaderAsync.getStatus() == Status.RUNNING)
uploaderAsync.cancel(true);
uploaderAsync = new StatusUploader(this, tweetStr, inReplyId);

View File

@ -1,154 +1,81 @@
package org.nuclearfog.twidda.window;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.support.v4.view.ViewPager;
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.View;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.OnItemClickListener;
import org.nuclearfog.twidda.adapter.UserAdapter;
import org.nuclearfog.twidda.backend.UserLoader;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.adapter.UserPagerAdapter;
import org.nuclearfog.twidda.adapter.UserPagerAdapter.Mode;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.UserLoader.Mode.FAVORIT;
import static org.nuclearfog.twidda.backend.UserLoader.Mode.FOLLOWERS;
import static org.nuclearfog.twidda.backend.UserLoader.Mode.FOLLOWING;
import static org.nuclearfog.twidda.backend.UserLoader.Mode.RETWEET;
/**
* User List Activity
*
* @see UserLoader
*/
public class UserDetail extends AppCompatActivity implements OnItemClickListener, OnRefreshListener {
public class UserDetail extends AppCompatActivity {
private RecyclerView userList;
private SwipeRefreshLayout userReload;
private UserAdapter usrAdp;
private GlobalSettings settings;
private UserLoader userAsync;
private int mode;
public enum UserType {
FOLLOWING,
FOLLOWERS,
RETWEETS,
FAVORITS,
}
private UserType mode;
private long id;
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.page_userlist);
Bundle param = getIntent().getExtras();
if (param != null) {
if (BuildConfig.DEBUG && param.size() != 2)
throw new AssertionError();
mode = param.getInt("mode");
if (param != null && param.size() == 2) {
mode = (UserType) param.getSerializable("mode");
id = param.getLong("ID");
} else if (BuildConfig.DEBUG) {
throw new AssertionError();
}
UserPagerAdapter adapter;
View root = findViewById(R.id.user_view);
ViewPager pager = findViewById(R.id.user_pager);
Toolbar toolbar = findViewById(R.id.user_toolbar);
userReload = findViewById(R.id.user_refresh);
userList = findViewById(R.id.userlist);
userList.setLayoutManager(new LinearLayoutManager(this));
GlobalSettings settings = GlobalSettings.getInstance(this);
root.setBackgroundColor(settings.getBackgroundColor());
setSupportActionBar(toolbar);
settings = GlobalSettings.getInstance(this);
root.setBackgroundColor(settings.getBackgroundColor());
userReload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
userReload.setRefreshing(true);
userReload.setOnRefreshListener(this);
}
@Override
protected void onStart() {
super.onStart();
if (userAsync == null) {
int titleId;
usrAdp = new UserAdapter(this);
usrAdp.toggleImage(settings.getImageLoad());
usrAdp.setColor(settings.getFontColor());
userList.setAdapter(usrAdp);
switch (mode) {
case 0:
titleId = R.string.following;
userAsync = new UserLoader(UserDetail.this, FOLLOWING);
break;
case 1:
titleId = R.string.follower;
userAsync = new UserLoader(UserDetail.this, FOLLOWERS);
break;
case 2:
titleId = R.string.retweet;
userAsync = new UserLoader(UserDetail.this, RETWEET);
break;
case 3:
default:
titleId = R.string.favorite;
userAsync = new UserLoader(UserDetail.this, FAVORIT);
break;
}
userAsync.execute(id, -1L);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(titleId);
}
}
}
@Override
protected void onStop() {
if (userAsync != null && userAsync.getStatus() == RUNNING)
userAsync.cancel(true);
super.onStop();
}
@Override
public void onItemClick(RecyclerView rv, int position) {
if (!userReload.isRefreshing() && usrAdp != null) {
TwitterUser user = usrAdp.getData(position);
long userID = user.getId();
String username = user.getScreenname();
Intent intent = new Intent(this, UserProfile.class);
intent.putExtra("userID", userID);
intent.putExtra("username", username);
startActivity(intent);
}
}
@Override
public void onRefresh() {
switch (mode) {
case 0:
userAsync = new UserLoader(UserDetail.this, FOLLOWING);
case FOLLOWING:
if (getSupportActionBar() != null)
getSupportActionBar().setTitle(R.string.following);
adapter = new UserPagerAdapter(getSupportFragmentManager(), Mode.FOLLOWING, id);
pager.setAdapter(adapter);
break;
case 1:
userAsync = new UserLoader(UserDetail.this, FOLLOWERS);
case FOLLOWERS:
if (getSupportActionBar() != null)
getSupportActionBar().setTitle(R.string.follower);
adapter = new UserPagerAdapter(getSupportFragmentManager(), Mode.FOLLOWERS, id);
pager.setAdapter(adapter);
break;
case 2:
userAsync = new UserLoader(UserDetail.this, RETWEET);
case RETWEETS:
if (getSupportActionBar() != null)
getSupportActionBar().setTitle(R.string.retweet);
adapter = new UserPagerAdapter(getSupportFragmentManager(), Mode.RETWEETER, id);
pager.setAdapter(adapter);
break;
case FAVORITS:
if (getSupportActionBar() != null)
getSupportActionBar().setTitle(R.string.favorite);
adapter = new UserPagerAdapter(getSupportFragmentManager(), Mode.FAVORS, id);
pager.setAdapter(adapter);
break;
case 3:
default:
userAsync = new UserLoader(UserDetail.this, FAVORIT);
if (BuildConfig.DEBUG)
throw new AssertionError("mode failure");
break;
}
userAsync.execute(id, -1L);
}
}

View File

@ -2,6 +2,7 @@ package org.nuclearfog.twidda.window;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.design.widget.TabLayout.OnTabSelectedListener;
@ -14,35 +15,27 @@ import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import org.nuclearfog.tag.Tagger.OnTagClickListener;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.ProfileTabAdapter;
import org.nuclearfog.twidda.adapter.ProfilePagerAdapter;
import org.nuclearfog.twidda.backend.ProfileLoader;
import org.nuclearfog.twidda.backend.ProfileLoader.Mode;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.text.NumberFormat;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.ProfileLoader.Mode.LDR_PROFILE;
import static org.nuclearfog.twidda.window.TweetDetail.STAT_CHANGED;
/**
* User Profile Activity
*
* @see ProfileLoader
*/
public class UserProfile extends AppCompatActivity implements OnTagClickListener, OnTabSelectedListener {
private static final int TWEET = 1;
public class UserProfile extends AppCompatActivity implements OnClickListener, OnTagClickListener, OnTabSelectedListener {
private ProfileLoader profileAsync;
private ViewPager pager;
private View[] icons;
private boolean home, isFollowing, isBlocked, isMuted, canDm, requested;
private boolean home, isFriend, isBlocked, isMuted, isLocked, canDm, requested;
private String username;
private long userId;
@ -53,48 +46,53 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
super.onCreate(b);
setContentView(R.layout.page_profile);
Bundle param = getIntent().getExtras();
if (param != null && param.size() == 2) {
userId = param.getLong("userID");
username = param.getString("username");
} else if (BuildConfig.DEBUG) {
throw new AssertionError();
}
Toolbar tool = findViewById(R.id.profile_toolbar);
TabLayout tab = findViewById(R.id.profile_tab);
TextView bioTxt = findViewById(R.id.bio);
TextView lnkTxt = findViewById(R.id.links);
View following = findViewById(R.id.following);
View follower = findViewById(R.id.follower);
View root = findViewById(R.id.user_view);
TabLayout tab = findViewById(R.id.profile_tab);
pager = findViewById(R.id.profile_pager);
Toolbar tool = findViewById(R.id.profile_toolbar);
setSupportActionBar(tool);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayShowTitleEnabled(false);
Bundle param = getIntent().getExtras();
if (param != null) {
if (BuildConfig.DEBUG && param.size() != 2)
throw new AssertionError();
userId = param.getLong("userID");
username = param.getString("username");
}
GlobalSettings settings = GlobalSettings.getInstance(this);
home = userId == settings.getUserId();
root.setBackgroundColor(settings.getBackgroundColor());
bioTxt.setMovementMethod(ScrollingMovementMethod.getInstance());
lnkTxt.setMovementMethod(ScrollingMovementMethod.getInstance());
tab.setSelectedTabIndicatorColor(settings.getHighlightColor());
bioTxt.setLinkTextColor(settings.getHighlightColor());
lnkTxt.setLinkTextColor(settings.getHighlightColor());
root.setBackgroundColor(settings.getBackgroundColor());
icons = new View[2];
LayoutInflater inflater = LayoutInflater.from(this);
icons[0] = inflater.inflate(R.layout.tab_tw, null);
icons[1] = inflater.inflate(R.layout.tab_fa, null);
ProfileTabAdapter adapter = new ProfileTabAdapter(getSupportFragmentManager(), userId);
ProfilePagerAdapter adapter = new ProfilePagerAdapter(getSupportFragmentManager(), userId);
pager.setOffscreenPageLimit(2);
pager.setAdapter(adapter);
tab.setupWithViewPager(pager);
tab.addOnTabSelectedListener(this);
following.setOnClickListener(this);
follower.setOnClickListener(this);
for(int i = 0 ; i < icons.length ; i++) {
for (int i = 0; i < icons.length; i++) {
TabLayout.Tab t = tab.getTabAt(i);
if(t != null)
if (t != null)
t.setCustomView(icons[i]);
}
}
@ -103,8 +101,8 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
@Override
protected void onStart() {
super.onStart();
if(profileAsync == null) {
profileAsync = new ProfileLoader(this, LDR_PROFILE);
if (profileAsync == null) {
profileAsync = new ProfileLoader(this, Mode.LDR_PROFILE);
profileAsync.execute(userId);
}
}
@ -112,20 +110,12 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
@Override
protected void onStop() {
if (profileAsync != null && profileAsync.getStatus() == RUNNING)
if (profileAsync != null && profileAsync.getStatus() == Status.RUNNING)
profileAsync.cancel(true);
super.onStop();
}
@Override
protected void onActivityResult(int reqCode, int returnCode, Intent i) {
if (reqCode == TWEET && returnCode == STAT_CHANGED)
profileAsync = null;
super.onActivityResult(reqCode, returnCode, i);
}
@Override
public boolean onCreateOptionsMenu(Menu m) {
getMenuInflater().inflate(R.menu.profile, m);
@ -147,7 +137,7 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
MenuItem muteIcon = m.findItem(R.id.profile_mute);
MenuItem dmIcon = m.findItem(R.id.profile_message);
if (isFollowing) {
if (isFriend) {
followIcon.setIcon(R.drawable.follow_enabled);
followIcon.setTitle(R.string.unfollow);
} else if (requested) {
@ -179,7 +169,7 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (profileAsync != null && profileAsync.getStatus() != RUNNING) {
if (profileAsync != null && profileAsync.getStatus() != Status.RUNNING) {
switch (item.getItemId()) {
case R.id.profile_tweet:
Intent tweet = new Intent(this, TweetPopup.class);
@ -190,7 +180,7 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
case R.id.profile_follow:
profileAsync = new ProfileLoader(this, ProfileLoader.Mode.ACTION_FOLLOW);
if (!isFollowing) {
if (!isFriend) {
profileAsync.execute(userId);
} else {
new Builder(this).setMessage(R.string.confirm_unfollow)
@ -267,6 +257,28 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
}
@Override
public void onClick(View v) {
if (!isLocked) {
switch (v.getId()) {
case R.id.following:
Intent following = new Intent(this, UserDetail.class);
following.putExtra("ID", userId);
following.putExtra("mode", UserDetail.UserType.FOLLOWING);
startActivity(following);
break;
case R.id.follower:
Intent follower = new Intent(this, UserDetail.class);
follower.putExtra("ID", userId);
follower.putExtra("mode", UserDetail.UserType.FOLLOWERS);
startActivity(follower);
break;
}
}
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabIndex = tab.getPosition();
@ -274,11 +286,13 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
@Override
public void onTabUnselected(TabLayout.Tab tab) { }
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) { }
public void onTabReselected(TabLayout.Tab tab) {
}
public void setTweetCount(int tweets, int favors) {
@ -290,10 +304,12 @@ public class UserProfile extends AppCompatActivity implements OnTagClickListener
}
public void setConnection(boolean isFollowing, boolean isMuted, boolean isBlocked, boolean canDm, boolean requested) {
this.isFollowing = isFollowing;
public void setConnection(boolean isFriend, boolean isMuted, boolean isBlocked,
boolean isLocked, boolean canDm, boolean requested) {
this.isFriend = isFriend;
this.isMuted = isMuted;
this.isBlocked = isBlocked;
this.isLocked = isLocked;
this.canDm = canDm;
this.requested = requested;
}

View File

@ -10,17 +10,10 @@
android:layout_width="match_parent"
android:layout_height="@dimen/bar_wide" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/user_refresh"
<android.support.v4.view.ViewPager
android:id="@+id/user_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/userlist"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
android:layout_height="match_parent" />
</LinearLayout>

View File

@ -20,7 +20,6 @@
android:textSize="10sp" />
<View
android:id="@+id/favor_divider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="2dp" />

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">
<ImageView
android:id="@android:id/icon"
android:layout_width="@dimen/tab_icon_size"
android:layout_height="@dimen/tab_icon_size" />
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingTop="@dimen/tab_padding_top">
<ImageView
android:layout_width="@dimen/tab_icon_size"
android:layout_height="@dimen/tab_icon_size"
android:contentDescription="@string/profile_tweets"
app:srcCompat="@drawable/search" />
<View
android:id="@+id/ts_divider"
android:layout_width="match_parent"
android:layout_height="@dimen/tab_div_height"
android:layout_marginTop="@dimen/tab_div_margin" />
</LinearLayout>

View File

@ -20,7 +20,6 @@
android:textSize="10sp" />
<View
android:id="@+id/tweet_divider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="2dp" />

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingTop="@dimen/tab_padding_top">
<ImageView
android:layout_width="@dimen/tab_icon_size"
android:layout_height="@dimen/tab_icon_size"
android:contentDescription="@string/profile_tweets"
app:srcCompat="@drawable/user" />
<View
android:id="@+id/us_divider"
android:layout_width="match_parent"
android:layout_height="@dimen/tab_div_height"
android:layout_marginTop="@dimen/tab_div_margin" />
</LinearLayout>

View File

@ -49,9 +49,6 @@
<dimen name="editprofile_padding">20dp</dimen>
<!--Tabs-->
<dimen name="tab_icon_size">24dp</dimen>
<dimen name="tab_div_height">2dp</dimen>
<dimen name="tab_div_margin">12dp</dimen>
<dimen name="tab_padding_top">5dp</dimen>
<!--Text limitation-->

View File

@ -52,10 +52,6 @@
<item name="android:fontFamily">RobotoTextView</item>
</style>
<style name="CustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabTextAppearance">@style/CustomTextAppearance</item>
</style>
<style name="CustomTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textAllCaps">false</item>
</style>

View File

@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath 'com.android.tools.build:gradle:3.3.1'
}
}