Fix some issues

This commit is contained in:
tom79 2019-04-25 07:38:34 +02:00
parent a7ad3f8c9d
commit 248b7e98b1
5 changed files with 68 additions and 56 deletions

View File

@ -23,9 +23,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.AsyncTask;
@ -41,7 +39,6 @@ import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
@ -56,7 +53,6 @@ import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.util.Patterns;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
@ -83,17 +79,10 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.Set;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -115,7 +104,6 @@ import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Filters;
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
import fr.gouv.etalab.mastodon.client.Entities.Peertube;
import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance;
import fr.gouv.etalab.mastodon.client.Entities.Results;
import fr.gouv.etalab.mastodon.client.Entities.Status;
@ -135,7 +123,6 @@ import fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment;
import fr.gouv.etalab.mastodon.fragments.DisplayPeertubeNotificationsFragment;
import fr.gouv.etalab.mastodon.fragments.DisplayReorderTabFragment;
import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
import fr.gouv.etalab.mastodon.fragments.SettingsFragment;
import fr.gouv.etalab.mastodon.fragments.SettingsPeertubeFragment;
import fr.gouv.etalab.mastodon.fragments.TabLayoutNotificationsFragment;
import fr.gouv.etalab.mastodon.fragments.TabLayoutScheduleFragment;
@ -156,9 +143,7 @@ import fr.gouv.etalab.mastodon.services.BackupStatusService;
import fr.gouv.etalab.mastodon.services.LiveNotificationService;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.InstancesDAO;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.sqlite.StatusCacheDAO;
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
import static fr.gouv.etalab.mastodon.asynctasks.ManageFiltersAsyncTask.action.GET_ALL_FILTER;
@ -203,13 +188,10 @@ public abstract class BaseMainActivity extends BaseActivity
private RelativeLayout main_app_container;
private Stack<Integer> stackBack = new Stack<>();
public static List<Filters> filters = new ArrayList<>();
private static final int ERROR_DIALOG_REQUEST_CODE = 97;
public static int countNewStatus;
public static int countNewNotifications;
public static String lastHomeId = null, lastNotificationId = null;
boolean show_boosts, show_replies , show_nsfw;
String show_filtered;
private AppBarLayout appBar;
private String userId;
private String instance;
@ -223,7 +205,6 @@ public abstract class BaseMainActivity extends BaseActivity
private String instance_id;
private int style;
private Activity activity;
private HashMap<String, Integer> tabPosition = new HashMap<>();
public static HashMap<Integer, RetrieveFeedsAsyncTask.Type> typePosition = new HashMap<>();
private FloatingActionButton federatedTimelines;
public static UpdateAccountInfoAsyncTask.SOCIAL social;
@ -352,7 +333,7 @@ public abstract class BaseMainActivity extends BaseActivity
if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
new SyncTimelinesAsyncTask(BaseMainActivity.this, BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new SyncTimelinesAsyncTask(BaseMainActivity.this, 0, BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){
TabLayout.Tab pTabsub = tabLayout.newTab();
@ -1346,7 +1327,7 @@ public abstract class BaseMainActivity extends BaseActivity
DrawerLayout drawer = findViewById(R.id.drawer_layout);
DisplayReorderTabFragment displayReorderTabFragment = (DisplayReorderTabFragment)getSupportFragmentManager().findFragmentByTag("REORDER_TIMELINES");
if (displayReorderTabFragment != null && displayReorderTabFragment.isVisible() && DisplayReorderTabFragment.updated) {
new SyncTimelinesAsyncTask(BaseMainActivity.this, BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new SyncTimelinesAsyncTask(BaseMainActivity.this, tabLayout.getSelectedTabPosition(), BaseMainActivity.this ).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
if (drawer.isDrawerOpen(GravityCompat.START)) {
@ -1787,7 +1768,7 @@ public abstract class BaseMainActivity extends BaseActivity
@Override
public void syncedTimelines(List<ManageTimelines> manageTimelines) {
public void syncedTimelines(List<ManageTimelines> manageTimelines, int position) {
DisplayReorderTabFragment.updated = false;
new ManageTimelines().createTabs(BaseMainActivity.this, manageTimelines);
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
@ -1797,6 +1778,11 @@ public abstract class BaseMainActivity extends BaseActivity
final NavigationView navigationView = findViewById(R.id.nav_view);
timelines = manageTimelines;
if( position >= manageTimelines.size()){
position = manageTimelines.size()-1;
}
if( position < 0)
position = 0;
if( !optimize_loading)
viewPager.setOffscreenPageLimit(countPage);
@ -1909,6 +1895,29 @@ public abstract class BaseMainActivity extends BaseActivity
}
});
if( tabLayout.getTabCount() > position) {
TabLayout.Tab tab = tabLayout.getTabAt(position);
if( tab != null) {
tab.select();
if( tab.getCustomView() != null){
ImageView icon = tab.getCustomView().findViewById(R.id.tab_icon);
if( icon != null){
if( theme == THEME_BLACK)
icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon), PorterDuff.Mode.SRC_IN);
else
icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.mastodonC4), PorterDuff.Mode.SRC_IN);
}else{
TextView tv = tabLayout.getChildAt(0).findViewById(android.R.id.title);
if( tv != null)
if( theme == THEME_BLACK)
tv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon));
else
tv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.mastodonC4));
}
}
}
}
//Scroll to top when top bar is clicked for favourites/blocked/muted
toolbarTitle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

View File

@ -17,16 +17,13 @@ package fr.gouv.etalab.mastodon.asynctasks;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance;
import fr.gouv.etalab.mastodon.client.Entities.TagTimeline;
@ -35,7 +32,6 @@ import fr.gouv.etalab.mastodon.sqlite.InstancesDAO;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
import static fr.gouv.etalab.mastodon.sqlite.Sqlite.DB_NAME;
@ -48,13 +44,15 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
private OnSyncTimelineInterface listener;
private int position;
private WeakReference<Context> contextReference;
private List<ManageTimelines> manageTimelines;
public SyncTimelinesAsyncTask(Context context, OnSyncTimelineInterface onSyncTimelineInterface){
public SyncTimelinesAsyncTask(Context context, int position, OnSyncTimelineInterface onSyncTimelineInterface){
this.contextReference = new WeakReference<>(context);
this.listener = onSyncTimelineInterface;
this.position = position;
}
@Override
@ -186,18 +184,19 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
new TimelinesDAO(contextReference.get(), db).update(timelines_tmp);
}
}
}
for(ManageTimelines manageTimelines: manageTimelines){
if( manageTimelines.getTagTimeline() == null )
continue;
boolean shouldBeRemoved = true;
for(TagTimeline tag: tagsInDb){
if( tag.getId() == manageTimelines.getTagTimeline().getId()){
shouldBeRemoved = false;
for(ManageTimelines manageTimelines: manageTimelines){
if( manageTimelines.getTagTimeline() == null )
continue;
boolean shouldBeRemoved = true;
for(TagTimeline tag: tagsInDb){
if( tag.getId() == manageTimelines.getTagTimeline().getId()){
shouldBeRemoved = false;
}
}
if( shouldBeRemoved){
new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
}
}
if( shouldBeRemoved){
new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
}
}
@ -227,22 +226,22 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
new TimelinesDAO(contextReference.get(), db).update(timelines_tmp);
}
}
}
for(ManageTimelines manageTimelines: manageTimelines){
if( manageTimelines.getRemoteInstance() == null )
continue;
boolean shouldBeRemoved = true;
for(RemoteInstance instance: instancesInDb){
if( instance.getId().equals(manageTimelines.getRemoteInstance().getId())){
shouldBeRemoved = false;
for(ManageTimelines manageTimelines: manageTimelines){
if( manageTimelines.getRemoteInstance() == null )
continue;
boolean shouldBeRemoved = true;
for(RemoteInstance instance: instancesInDb){
if( instance.getId().equals(manageTimelines.getRemoteInstance().getId())){
shouldBeRemoved = false;
}
}
if( shouldBeRemoved){
new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
}
}
if( shouldBeRemoved){
new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
}
}
APIResponse apiResponse = new API(contextReference.get()).getLists();
List<fr.gouv.etalab.mastodon.client.Entities.List> lists = apiResponse.getLists();
if( lists != null && lists.size() > 0){
@ -297,7 +296,7 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(Void result) {
listener.syncedTimelines(manageTimelines);
listener.syncedTimelines(manageTimelines, position);
}
}

View File

@ -21,6 +21,7 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.PorterDuff;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
@ -52,6 +53,7 @@ import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.SyncTimelinesAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
import fr.gouv.etalab.mastodon.fragments.TabLayoutNotificationsFragment;
@ -929,9 +931,8 @@ public class ManageTimelines {
dialogBuilder.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if( tabLayout.getTabCount() > tl.getPosition())
tabLayout.removeTab(tabLayout.getTabAt(tl.getPosition()));
new SearchDAO(context, db).remove(tag);
new SyncTimelinesAsyncTask(context, tabLayout.getSelectedTabPosition(), ((BaseMainActivity)context) ).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
dialog.dismiss();
}
});

View File

@ -34,6 +34,7 @@ import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.PopupMenu;
@ -145,6 +146,7 @@ import fr.gouv.etalab.mastodon.sqlite.StatusStoredDAO;
import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
import static fr.gouv.etalab.mastodon.activities.BaseMainActivity.mPageReferenceMap;
import static fr.gouv.etalab.mastodon.activities.BaseMainActivity.social;
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
@ -1359,7 +1361,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
List<ManageTimelines> timelines = new TimelinesDAO(context, db).getDisplayedTimelines();
for(ManageTimelines tl: timelines) {
if( tl.getType() == ManageTimelines.Type.HOME) {
DisplayStatusFragment homeFragment = (DisplayStatusFragment) ((MainActivity) context).getSupportFragmentManager().getFragments().get(tl.getPosition());
FragmentTransaction fragTransaction = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
DisplayStatusFragment homeFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition());
if (homeFragment != null)
homeFragment.fetchMore(status.getId());
break;

View File

@ -24,5 +24,5 @@ import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
* Interface when timelines are retrieved
*/
public interface OnSyncTimelineInterface {
void syncedTimelines(List<ManageTimelines> manageTimelines);
void syncedTimelines(List<ManageTimelines> manageTimelines, int position);
}