Add all timeline in tabs

This commit is contained in:
tom79 2019-04-22 13:16:35 +02:00
parent 2df9d3193d
commit a528d878e5
9 changed files with 157 additions and 60 deletions

View File

@ -55,7 +55,6 @@ import android.support.v7.widget.Toolbar;
import android.text.Editable; import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.util.Patterns; import android.util.Patterns;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.Gravity; import android.view.Gravity;
@ -823,11 +822,12 @@ public abstract class BaseMainActivity extends BaseActivity
//Defines the current locale of the device in a static variable //Defines the current locale of the device in a static variable
currentLocale = Helper.currentLocale(getApplicationContext()); currentLocale = Helper.currentLocale(getApplicationContext());
if( tabLayout.getTabAt(0) == null) { /*if( tabLayout.getTabAt(0) == null) {
Helper.logout(BaseMainActivity.this); Helper.logout(BaseMainActivity.this);
return; return;
} }
tabLayout.getTabAt(0).select(); tabLayout.getTabAt(0).select();
*/
if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) { if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
toot.setOnClickListener(new View.OnClickListener() { toot.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -1829,7 +1829,8 @@ public abstract class BaseMainActivity extends BaseActivity
viewPager.setVisibility(View.VISIBLE); viewPager.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.GONE); delete_instance.setVisibility(View.GONE);
Helper.switchLayout(BaseMainActivity.this); Helper.switchLayout(BaseMainActivity.this);
if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))||(tabPosition.containsKey("peertube") && tab.getPosition() == tabPosition.get("peertube"))) { //TODO: not hiding the compose button
if( manageTimelines.size() > tab.getPosition() && (manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.ART || manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.PEERTUBE)) {
toot.hide(); toot.hide();
federatedTimelines.hide(); federatedTimelines.hide();
}else { }else {
@ -1874,7 +1875,7 @@ public abstract class BaseMainActivity extends BaseActivity
DrawerLayout drawer = findViewById(R.id.drawer_layout); DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START); drawer.closeDrawer(GravityCompat.START);
} }
if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))||(tabPosition.containsKey("peertube") && tab.getPosition() == tabPosition.get("peertube"))) { if( manageTimelines.size() > tab.getPosition() && (manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.ART || manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.PEERTUBE)) {
toot.hide(); toot.hide();
federatedTimelines.hide(); federatedTimelines.hide();
}else { }else {
@ -1995,19 +1996,19 @@ public abstract class BaseMainActivity extends BaseActivity
tabLayout.setVisibility(View.VISIBLE); tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true); toolbar_search.setIconified(true);
} }
//Selection comes from another menu, no action to do //Selection comes from another menu, no action to do
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
ManageTimelines tl = null; ManageTimelines tl = null;
for (ManageTimelines timeline: timelines){ if( position < timelines.size())
if( timeline.getPosition() == position) tl = timelines.get(position);
tl = timeline;
}
if( tl == null) if( tl == null)
return null; return null;
if( tl.getType() != ManageTimelines.Type.NOTIFICATION){ if( tl.getType() != ManageTimelines.Type.NOTIFICATION){
DisplayStatusFragment displayStatusFragment = new DisplayStatusFragment(); DisplayStatusFragment displayStatusFragment = new DisplayStatusFragment();
RetrieveFeedsAsyncTask.Type type = ManageTimelines.transform(BaseMainActivity.this, tl.getType()); RetrieveFeedsAsyncTask.Type type = ManageTimelines.transform(BaseMainActivity.this, tl.getType());
bundle.putSerializable("type", type); bundle.putSerializable("type", type);
if (tl.getType() == ManageTimelines.Type.TAG) { if (tl.getType() == ManageTimelines.Type.TAG) {
TagTimeline ttl = tl.getTagTimeline(); TagTimeline ttl = tl.getTagTimeline();
bundle.putString("tag", ttl.getName()); bundle.putString("tag", ttl.getName());
@ -2022,7 +2023,10 @@ public abstract class BaseMainActivity extends BaseActivity
}else if( tl.getType() == ManageTimelines.Type.INSTANCE){ }else if( tl.getType() == ManageTimelines.Type.INSTANCE){
bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():""); bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():"");
bundle.putString("instanceType", tl.getRemoteInstance().getType()); bundle.putString("instanceType", tl.getRemoteInstance().getType());
}else if( tl.getType() == ManageTimelines.Type.LIST){
bundle.putString("targetedid", tl.getListTimeline().getId());
} }
displayStatusFragment.setArguments(bundle);
return displayStatusFragment; return displayStatusFragment;
}else{ }else{
return new TabLayoutNotificationsFragment(); return new TabLayoutNotificationsFragment();

View File

@ -30,6 +30,7 @@ import fr.gouv.etalab.mastodon.client.Entities.TagTimeline;
import fr.gouv.etalab.mastodon.client.GNUAPI; import fr.gouv.etalab.mastodon.client.GNUAPI;
import fr.gouv.etalab.mastodon.client.PeertubeAPI; import fr.gouv.etalab.mastodon.client.PeertubeAPI;
import fr.gouv.etalab.mastodon.helper.FilterToots; import fr.gouv.etalab.mastodon.helper.FilterToots;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.sqlite.InstancesDAO; import fr.gouv.etalab.mastodon.sqlite.InstancesDAO;
import fr.gouv.etalab.mastodon.sqlite.PeertubeFavoritesDAO; import fr.gouv.etalab.mastodon.sqlite.PeertubeFavoritesDAO;
@ -119,6 +120,7 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
this.filterToots = filterToots; this.filterToots = filterToots;
} }
public RetrieveFeedsAsyncTask(Context context, Type action, String max_id, OnRetrieveFeedsInterface onRetrieveFeedsInterface){ public RetrieveFeedsAsyncTask(Context context, Type action, String max_id, OnRetrieveFeedsInterface onRetrieveFeedsInterface){
this.contextReference = new WeakReference<>(context); this.contextReference = new WeakReference<>(context);
this.action = action; this.action = action;
@ -175,6 +177,8 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... params) { protected Void doInBackground(Void... params) {
API api = new API(this.contextReference.get()); API api = new API(this.contextReference.get());
SQLiteDatabase db = Sqlite.getInstance(this.contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(this.contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
if( action == null )
return null;
switch (action){ switch (action){
case HOME: case HOME:
apiResponse = api.getHomeTimeline(max_id); apiResponse = api.getHomeTimeline(max_id);

View File

@ -29,6 +29,7 @@ import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines; import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance; import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance;
import fr.gouv.etalab.mastodon.client.Entities.TagTimeline; import fr.gouv.etalab.mastodon.client.Entities.TagTimeline;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnSyncTimelineInterface; import fr.gouv.etalab.mastodon.interfaces.OnSyncTimelineInterface;
import fr.gouv.etalab.mastodon.sqlite.InstancesDAO; import fr.gouv.etalab.mastodon.sqlite.InstancesDAO;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO; import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
@ -61,55 +62,71 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
SQLiteDatabase db = Sqlite.getInstance(contextReference.get(), DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(contextReference.get(), DB_NAME, null, Sqlite.DB_VERSION).open();
manageTimelines = new TimelinesDAO(contextReference.get(), db).getAllTimelines(); manageTimelines = new TimelinesDAO(contextReference.get(), db).getAllTimelines();
//First time that the timeline is created //First time that the timeline is created
int i = 0;
if( manageTimelines == null || manageTimelines.size() == 0){ if( manageTimelines == null || manageTimelines.size() == 0){
manageTimelines = new ArrayList<>(); manageTimelines = new ArrayList<>();
//Add home TL //Add home TL
ManageTimelines manageHome = new ManageTimelines(); ManageTimelines manageHome = new ManageTimelines();
manageHome.setDisplayed(true); manageHome.setDisplayed(true);
manageHome.setType(ManageTimelines.Type.HOME); manageHome.setType(ManageTimelines.Type.HOME);
manageHome.setPosition(0); manageHome.setPosition(i);
manageTimelines.add(manageHome); manageTimelines.add(manageHome);
i++;
new TimelinesDAO(contextReference.get(), db).insert(manageHome);
//Add Direct notification TL //Add Direct notification TL
ManageTimelines manageNotif = new ManageTimelines(); ManageTimelines manageNotif = new ManageTimelines();
manageNotif.setDisplayed(true); manageNotif.setDisplayed(true);
manageNotif.setType(ManageTimelines.Type.NOTIFICATION); manageNotif.setType(ManageTimelines.Type.NOTIFICATION);
manageNotif.setPosition(1); manageNotif.setPosition(i);
i++;
manageTimelines.add(manageNotif); manageTimelines.add(manageNotif);
new TimelinesDAO(contextReference.get(), db).insert(manageNotif);
//Add Direct message TL //Add Direct message TL
ManageTimelines manageDirect = new ManageTimelines(); ManageTimelines manageDirect = new ManageTimelines();
manageDirect.setDisplayed(true); manageDirect.setDisplayed(true);
manageDirect.setType(ManageTimelines.Type.DIRECT); manageDirect.setType(ManageTimelines.Type.DIRECT);
manageDirect.setPosition(2); manageDirect.setPosition(i);
i++;
manageTimelines.add(manageDirect); manageTimelines.add(manageDirect);
new TimelinesDAO(contextReference.get(), db).insert(manageDirect);
//Add Local TL //Add Local TL
ManageTimelines manageLocal = new ManageTimelines(); ManageTimelines manageLocal = new ManageTimelines();
manageLocal.setDisplayed(true); manageLocal.setDisplayed(true);
manageLocal.setType(ManageTimelines.Type.LOCAL); manageLocal.setType(ManageTimelines.Type.LOCAL);
manageLocal.setPosition(3); manageLocal.setPosition(i);
i++;
manageTimelines.add(manageLocal); manageTimelines.add(manageLocal);
//Add Public TL new TimelinesDAO(contextReference.get(), db).insert(manageLocal);
ManageTimelines managePublic = new ManageTimelines(); if(MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA){
managePublic.setDisplayed(true); //Add Public TL
managePublic.setType(ManageTimelines.Type.PUBLIC); ManageTimelines managePublic = new ManageTimelines();
managePublic.setPosition(4); managePublic.setDisplayed(true);
manageTimelines.add(managePublic); managePublic.setType(ManageTimelines.Type.PUBLIC);
//Add Public ART managePublic.setPosition(i);
ManageTimelines manageArt = new ManageTimelines(); i++;
manageArt.setDisplayed(true); manageTimelines.add(managePublic);
manageArt.setType(ManageTimelines.Type.ART); new TimelinesDAO(contextReference.get(), db).insert(managePublic);
manageArt.setPosition(5); }
manageTimelines.add(manageArt); if(MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
//Add Public PEERTUBE //Add Public ART
ManageTimelines managePeertube = new ManageTimelines(); ManageTimelines manageArt = new ManageTimelines();
managePeertube.setDisplayed(true); manageArt.setDisplayed(true);
managePeertube.setType(ManageTimelines.Type.ART); manageArt.setType(ManageTimelines.Type.ART);
managePeertube.setPosition(6); manageArt.setPosition(i);
manageTimelines.add(managePeertube); i++;
manageTimelines.add(manageArt);
new TimelinesDAO(contextReference.get(), db).insert(manageArt);
//Add Public PEERTUBE
ManageTimelines managePeertube = new ManageTimelines();
managePeertube.setDisplayed(true);
managePeertube.setType(ManageTimelines.Type.PEERTUBE);
managePeertube.setPosition(i);
i++;
manageTimelines.add(managePeertube);
new TimelinesDAO(contextReference.get(), db).insert(managePeertube);
}
int i = 6;
List<TagTimeline> tagTimelines = new SearchDAO(contextReference.get(), db).getAll(); List<TagTimeline> tagTimelines = new SearchDAO(contextReference.get(), db).getAll();
if( tagTimelines != null && tagTimelines.size() > 0 ){ if( tagTimelines != null && tagTimelines.size() > 0 ){
for(TagTimeline ttl: tagTimelines){ for(TagTimeline ttl: tagTimelines){
@ -117,9 +134,11 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
ManageTimelines manageTagTimeline = new ManageTimelines(); ManageTimelines manageTagTimeline = new ManageTimelines();
manageTagTimeline.setDisplayed(true); manageTagTimeline.setDisplayed(true);
manageTagTimeline.setType(ManageTimelines.Type.TAG); manageTagTimeline.setType(ManageTimelines.Type.TAG);
manageTagTimeline.setPosition(i++); manageTagTimeline.setPosition(i);
manageTagTimeline.setTagTimeline(ttl); manageTagTimeline.setTagTimeline(ttl);
manageTimelines.add(manageTagTimeline); manageTimelines.add(manageTagTimeline);
new TimelinesDAO(contextReference.get(), db).insert(manageTagTimeline);
i++;
} }
} }
List<RemoteInstance> instances = new InstancesDAO(contextReference.get(), db).getAllInstances(); List<RemoteInstance> instances = new InstancesDAO(contextReference.get(), db).getAllInstances();
@ -129,11 +148,14 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
ManageTimelines manageRemoteTimline = new ManageTimelines(); ManageTimelines manageRemoteTimline = new ManageTimelines();
manageRemoteTimline.setDisplayed(true); manageRemoteTimline.setDisplayed(true);
manageRemoteTimline.setType(ManageTimelines.Type.INSTANCE); manageRemoteTimline.setType(ManageTimelines.Type.INSTANCE);
manageRemoteTimline.setPosition(i++); manageRemoteTimline.setPosition(i);
manageRemoteTimline.setRemoteInstance(ritl); manageRemoteTimline.setRemoteInstance(ritl);
manageTimelines.add(manageRemoteTimline); manageTimelines.add(manageRemoteTimline);
new TimelinesDAO(contextReference.get(), db).insert(manageRemoteTimline);
i++;
} }
} }
}else{
} }
APIResponse apiResponse = new API(contextReference.get()).getLists(); APIResponse apiResponse = new API(contextReference.get()).getLists();

View File

@ -66,7 +66,7 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected Void doInBackground(Void... params) { protected Void doInBackground(Void... params) {
Account account = null; Account account;
if( social == SOCIAL.MASTODON || social == SOCIAL.PIXELFED) { if( social == SOCIAL.MASTODON || social == SOCIAL.PIXELFED) {
account = new API(this.contextReference.get(), instance, null).verifyCredentials(); account = new API(this.contextReference.get(), instance, null).verifyCredentials();
account.setSocial(account.getSocial()); account.setSocial(account.getSocial());
@ -77,18 +77,17 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
account = new GNUAPI(this.contextReference.get(), instance, null).verifyCredentials(); account = new GNUAPI(this.contextReference.get(), instance, null).verifyCredentials();
account.setSocial(account.getSocial()); account.setSocial(account.getSocial());
} }
try { try {
//At the state the instance can be encoded //At the state the instance can be encoded
instance = URLDecoder.decode(instance, "utf-8"); instance = URLDecoder.decode(instance, "utf-8");
} catch (UnsupportedEncodingException ignored) {} } catch (UnsupportedEncodingException ignored) {}
SharedPreferences sharedpreferences = this.contextReference.get().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = this.contextReference.get().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
account.setToken(token); account.setToken(token);
account.setClient_id(client_id); account.setClient_id(client_id);
account.setClient_secret(client_secret); account.setClient_secret(client_secret);
account.setRefresh_token(refresh_token); account.setRefresh_token(refresh_token);
account.setInstance(instance); account.setInstance(instance);
SQLiteDatabase db = Sqlite.getInstance(this.contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(this.contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
boolean userExists = new AccountDAO(this.contextReference.get(), db).userExist(account); boolean userExists = new AccountDAO(this.contextReference.get(), db).userExist(account);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();

View File

@ -28,7 +28,6 @@ import android.support.v7.app.AlertDialog;
import android.support.v7.widget.PopupMenu; import android.support.v7.widget.PopupMenu;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -36,9 +35,8 @@ import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import java.util.ArrayList;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
@ -49,10 +47,8 @@ import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment; import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
import fr.gouv.etalab.mastodon.fragments.TabLayoutNotificationsFragment; import fr.gouv.etalab.mastodon.fragments.TabLayoutNotificationsFragment;
import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.sqlite.InstancesDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO; import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT; import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT;
import static fr.gouv.etalab.mastodon.sqlite.Sqlite.DB_NAME; import static fr.gouv.etalab.mastodon.sqlite.Sqlite.DB_NAME;
@ -283,19 +279,19 @@ public class ManageTimelines {
public void createTabs(Context context, TabLayout tabLayout, java.util.List<ManageTimelines> manageTimelines){ public void createTabs(Context context, TabLayout tabLayout, java.util.List<ManageTimelines> manageTimelines){
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
for(ManageTimelines tl: manageTimelines){ for(ManageTimelines tl: manageTimelines){
TabLayout.Tab tb = tabLayout.newTab(); TabLayout.Tab tb = tabLayout.newTab();
tb.setCustomView(R.layout.tab_badge);
ImageView icon = null; ImageView icon = null;
if( tl.getType() != Type.TAG && tl.getType() != Type.INSTANCE && tl.getType() != Type.LIST) { if( tl.getType() != Type.TAG && tl.getType() != Type.INSTANCE && tl.getType() != Type.LIST) {
tb.setCustomView(R.layout.tab_badge);
if( tb.getCustomView() != null) if( tb.getCustomView() != null)
icon = tb.getCustomView().findViewById(R.id.tab_icon); icon = tb.getCustomView().findViewById(R.id.tab_icon);
} }
if( icon != null){ if( icon != null){
if( tl.getPosition() == 0)
icon.setColorFilter(ContextCompat.getColor(context, R.color.mastodonC4), PorterDuff.Mode.SRC_IN);
switch (tl.getType()){ switch (tl.getType()){
case HOME: case HOME:
icon.setImageResource(R.drawable.ic_home); icon.setImageResource(R.drawable.ic_home);
@ -332,6 +328,24 @@ public class ManageTimelines {
icon.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN); icon.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
} }
tabLayout.addTab(tb); tabLayout.addTab(tb);
}else{
if( tl.getType() == Type.TAG){
if( tl.getTagTimeline().getDisplayname() != null) {
tb.setText(tl.getTagTimeline().getDisplayname());
}else {
tb.setText(tl.getTagTimeline().getName());
}
}else if( tl.getType() == Type.INSTANCE){
tb.setText(tl.getRemoteInstance().getHost());
}else if( tl.getType() == Type.LIST){
tb.setText(tl.getListTimeline().getTitle());
}
tabLayout.addTab(tb);
if( tl.getPosition() == 0){
TextView tv = tabLayout.getChildAt(0).findViewById(android.R.id.title);
if( tv != null)
tv.setTextColor(ContextCompat.getColor(context, R.color.mastodonC4));
}
} }
final LinearLayout tabStrip = (LinearLayout) tabLayout.getChildAt(0); final LinearLayout tabStrip = (LinearLayout) tabLayout.getChildAt(0);
if( tl.getType() == Type.NOTIFICATION){ if( tl.getType() == Type.NOTIFICATION){
@ -348,7 +362,7 @@ public class ManageTimelines {
} }
} }
} }
// tabLayout.getTabAt(0).select();
} }
public static void insertUpdateTL(Context context, ManageTimelines manageTimelines){ public static void insertUpdateTL(Context context, ManageTimelines manageTimelines){

View File

@ -32,7 +32,6 @@ import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -48,7 +47,9 @@ import java.util.List;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity; import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.ListActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.asynctasks.ManageListsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAfterBookmarkAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAfterBookmarkAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingFeedsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingFeedsAsyncTask;
@ -68,6 +69,7 @@ import fr.gouv.etalab.mastodon.drawers.PeertubeAdapter;
import fr.gouv.etalab.mastodon.drawers.PixelfedListAdapter; import fr.gouv.etalab.mastodon.drawers.PixelfedListAdapter;
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter; import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnListActionInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsAfterBookmarkInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsAfterBookmarkInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingFeedsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingFeedsInterface;
@ -85,7 +87,7 @@ import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
* Created by Thomas on 24/04/2017. * Created by Thomas on 24/04/2017.
* Fragment to display content related to status * Fragment to display content related to status
*/ */
public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveMissingFeedsInterface, OnRetrieveFeedsAfterBookmarkInterface { public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveMissingFeedsInterface, OnRetrieveFeedsAfterBookmarkInterface, OnListActionInterface {
private boolean flag_loading; private boolean flag_loading;
@ -157,6 +159,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
remote_channel_name = bundle.getString("remote_channel_name", null); remote_channel_name = bundle.getString("remote_channel_name", null);
instanceType = bundle.getString("instanceType", "MASTODON"); instanceType = bundle.getString("instanceType", "MASTODON");
ischannel = bundle.getBoolean("ischannel",false); ischannel = bundle.getBoolean("ischannel",false);
} }
if( ischannel) if( ischannel)
type = RetrieveFeedsAsyncTask.Type.CHANNEL; type = RetrieveFeedsAsyncTask.Type.CHANNEL;
@ -991,24 +994,24 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
} }
} }
private void manageAsyncTask(boolean pagination){ private void manageAsyncTask(boolean pagination) {
//Message for an account //Message for an account
if (type == RetrieveFeedsAsyncTask.Type.USER || type == RetrieveFeedsAsyncTask.Type.CHANNEL) if (type == RetrieveFeedsAsyncTask.Type.USER || type == RetrieveFeedsAsyncTask.Type.CHANNEL)
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, showPinned, showReply,DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, showPinned, showReply, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//Tag timelines //Tag timelines
else if (type == RetrieveFeedsAsyncTask.Type.TAG || type == RetrieveFeedsAsyncTask.Type.SEARCH) else if (type == RetrieveFeedsAsyncTask.Type.TAG || type == RetrieveFeedsAsyncTask.Type.SEARCH)
asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if( type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE) { else if (type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE) {
//Remote instances //Remote instances
if( search_peertube == null) { //Not a Peertube search if (search_peertube == null) { //Not a Peertube search
if( remote_channel_name == null) { //Not a channel if (remote_channel_name == null) { //Not a channel
asyncTask = new RetrieveFeedsAsyncTask(context, type, remoteInstance, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, remoteInstance, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} } else
else
asyncTask = new RetrieveFeedsAsyncTask(context, remoteInstance, remote_channel_name, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, remoteInstance, remote_channel_name, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} } else
else
asyncTask = new RetrievePeertubeSearchAsyncTask(context, remoteInstance, search_peertube, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrievePeertubeSearchAsyncTask(context, remoteInstance, search_peertube, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else if( type == RetrieveFeedsAsyncTask.Type.LIST){
new ManageListsAsyncTask(context,targetedId, max_id ,null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else { }else {
if( !pagination) { if( !pagination) {
if (type == RetrieveFeedsAsyncTask.Type.HOME) { if (type == RetrieveFeedsAsyncTask.Type.HOME) {
@ -1029,4 +1032,46 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
} }
@Override
public void onActionDone(ManageListsAsyncTask.action actionType, APIResponse apiResponse, int statusCode) {
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
mainLoader.setVisibility(View.GONE);
nextElementLoader.setVisibility(View.GONE);
//Discards 404 - error which can often happen due to toots which have been deleted
if (apiResponse.getError() != null) {
if ( !apiResponse.getError().getError().startsWith("404 -"))
Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
swipeRefreshLayout.setRefreshing(false);
isSwipped = false;
flag_loading = false;
return;
}
if( actionType == ManageListsAsyncTask.action.GET_LIST_TIMELINE) {
int previousPosition = this.statuses.size();
List<Status> statuses = apiResponse.getStatuses();
max_id = apiResponse.getMax_id();
flag_loading = (max_id == null);
if (!isSwipped && firstLoad && (statuses == null || statuses.size() == 0))
textviewNoAction.setVisibility(View.VISIBLE);
else
textviewNoAction.setVisibility(View.GONE);
if (isSwipped) {
if (previousPosition > 0) {
for (int i = 0; i < previousPosition; i++) {
this.statuses.remove(0);
}
statusListAdapter.notifyItemRangeRemoved(0, previousPosition);
}
isSwipped = false;
}
if (statuses != null && statuses.size() > 0) {
this.statuses.addAll(statuses);
statusListAdapter.notifyItemRangeInserted(previousPosition, statuses.size());
}
swipeRefreshLayout.setRefreshing(false);
firstLoad = false;
}
}
} }

View File

@ -598,6 +598,7 @@ public class Helper {
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, newAccount.getToken()); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, newAccount.getToken());
editor.putString(Helper.PREF_KEY_ID, newAccount.getId()); editor.putString(Helper.PREF_KEY_ID, newAccount.getId());
editor.putString(Helper.PREF_INSTANCE, newAccount.getInstance().trim()); editor.putString(Helper.PREF_INSTANCE, newAccount.getInstance().trim());
editor.putBoolean(Helper.PREF_IS_MODERATOR, newAccount.isModerator()); editor.putBoolean(Helper.PREF_IS_MODERATOR, newAccount.isModerator());
editor.putBoolean(Helper.PREF_IS_ADMINISTRATOR, newAccount.isAdmin()); editor.putBoolean(Helper.PREF_IS_ADMINISTRATOR, newAccount.isAdmin());
editor.commit(); editor.commit();

View File

@ -265,7 +265,7 @@ public class Sqlite extends SQLiteOpenHelper {
static final String COL_REMOTE_INSTANCE = "REMOTE_INSTANCE"; static final String COL_REMOTE_INSTANCE = "REMOTE_INSTANCE";
static final String COL_TAG_TIMELINE = "TAG_TIMELINE"; static final String COL_TAG_TIMELINE = "TAG_TIMELINE";
private static final String CREATE_TABLE_TIMELINES = "CREATE TABLE " + TABLE_TIMELINES + " (" private static final String CREATE_TABLE_TIMELINES = "CREATE TABLE IF NOT EXISTS " + TABLE_TIMELINES + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_POSITION + " INTEGER NOT NULL, " + COL_POSITION + " INTEGER NOT NULL, "
+ COL_USER_ID + " TEXT NOT NULL, " + COL_INSTANCE + " TEXT NOT NULL, " + COL_USER_ID + " TEXT NOT NULL, " + COL_INSTANCE + " TEXT NOT NULL, "

View File

@ -65,6 +65,14 @@ public class TimelinesDAO {
return db.delete(Sqlite.TABLE_TIMELINES, Sqlite.COL_ID + " = \"" + timeline.getId() + "\"", null); return db.delete(Sqlite.TABLE_TIMELINES, Sqlite.COL_ID + " = \"" + timeline.getId() + "\"", null);
} }
//------- REMOVE -------
public int removeAll(){
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = Helper.getLiveInstance(context);
return db.delete(Sqlite.TABLE_TIMELINES, Sqlite.COL_USER_ID + " = '" + userId+ "' AND " + Sqlite.COL_INSTANCE + " = '" + instance+ "'", null);
}
//------- UPDATE ------- //------- UPDATE -------
public int update(ManageTimelines timeline) { public int update(ManageTimelines timeline) {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();