From f48dd4fc1bb75a723b30abbbd33db01f393cfaf6 Mon Sep 17 00:00:00 2001 From: tom79 Date: Mon, 19 Aug 2019 18:30:47 +0200 Subject: [PATCH] Listen to lists --- .../android/activities/BaseMainActivity.java | 17 +++- .../android/activities/ListActivity.java | 4 +- .../asynctasks/SyncTimelinesAsyncTask.java | 96 +++++++++++-------- .../fragments/DisplayListsFragment.java | 6 ++ .../app/fedilab/android/helper/Helper.java | 1 + 5 files changed, 80 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java index 1dc340980..58b2f96be 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java @@ -170,7 +170,7 @@ public abstract class BaseMainActivity extends BaseActivity public static UpdateAccountInfoAsyncTask.SOCIAL social; private final int PICK_IMPORT = 5556; public static List timelines; - private BroadcastReceiver hidde_menu; + private BroadcastReceiver hidde_menu, update_topbar; public static HashMap mPageReferenceMap; private static boolean notificationChecked = false; @@ -694,6 +694,9 @@ public abstract class BaseMainActivity extends BaseActivity if( hidde_menu != null) LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu); + + if( update_topbar != null) + LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(update_topbar); hidde_menu = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -736,7 +739,17 @@ public abstract class BaseMainActivity extends BaseActivity } }; + update_topbar = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + int position = 0; + if( tabLayout != null) + position = tabLayout.getSelectedTabPosition(); + new SyncTimelinesAsyncTask(BaseMainActivity.this, position, BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }; LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(hidde_menu, new IntentFilter(Helper.RECEIVE_HIDE_ITEM)); + LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(update_topbar, new IntentFilter(Helper.RECEIVE_UPDATE_TOPBAR)); toolbar_search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override @@ -1649,6 +1662,8 @@ public abstract class BaseMainActivity extends BaseActivity sendBroadcast(new Intent("StopLiveNotificationService")); if( hidde_menu != null) LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu); + if( update_topbar != null) + LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(update_topbar); if( mPageReferenceMap != null) mPageReferenceMap = null; PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", false).apply(); diff --git a/app/src/main/java/app/fedilab/android/activities/ListActivity.java b/app/src/main/java/app/fedilab/android/activities/ListActivity.java index f71a96a0f..bb1bf7577 100644 --- a/app/src/main/java/app/fedilab/android/activities/ListActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ListActivity.java @@ -22,6 +22,7 @@ import android.os.AsyncTask; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.LinearLayoutManager; @@ -307,7 +308,8 @@ public class ListActivity extends BaseActivity implements OnListActionInterface swipeRefreshLayout.setRefreshing(false); firstLoad = false; }else if(actionType == ManageListsAsyncTask.action.UPDATE_LIST) { - + Intent intentUP = new Intent(Helper.RECEIVE_UPDATE_TOPBAR); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intentUP); } } } diff --git a/app/src/main/java/app/fedilab/android/asynctasks/SyncTimelinesAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/SyncTimelinesAsyncTask.java index 8e45cf42b..316af5db1 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/SyncTimelinesAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/SyncTimelinesAsyncTask.java @@ -32,6 +32,7 @@ import app.fedilab.android.helper.Helper; import app.fedilab.android.sqlite.InstancesDAO; import app.fedilab.android.sqlite.SearchDAO; import app.fedilab.android.sqlite.Sqlite; +import app.fedilab.android.sqlite.TimelineCacheDAO; import app.fedilab.android.sqlite.TimelinesDAO; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.interfaces.OnSyncTimelineInterface; @@ -250,57 +251,68 @@ public class SyncTimelinesAsyncTask extends AsyncTask { try { apiResponse = new API(contextReference.get()).getLists(); lists = apiResponse.getLists(); - } catch (Exception ignored) { - } - - if (lists != null && lists.size() > 0) { - //Loop through results - for (app.fedilab.android.client.Entities.List list : lists) { - boolean isInDb = false; - ManageTimelines timelines_tmp = null; - for (ManageTimelines manageTimeline : manageTimelines) { - if (manageTimeline.getListTimeline() == null) - continue; - if (manageTimeline.getListTimeline().getId().equals(list.getId())) { - isInDb = true; - timelines_tmp = manageTimeline; - break; - } - } - if (!isInDb) { - ManageTimelines manageTL = new ManageTimelines(); - manageTL.setListTimeline(list); - manageTL.setDisplayed(true); - manageTL.setType(ManageTimelines.Type.LIST); - manageTL.setPosition(manageTimelines.size()); - new TimelinesDAO(contextReference.get(), db).insert(manageTL); - } else { - //Update list - timelines_tmp.setListTimeline(list); - new TimelinesDAO(contextReference.get(), db).update(timelines_tmp); + List duplicated_id = new ArrayList<>(); + List present_id = new ArrayList<>(); + for (ManageTimelines manageTimeline : manageTimelines) { + if (manageTimeline.getListTimeline() == null) + continue; + if( !present_id.contains(manageTimeline.getListTimeline().getId())) { + present_id.add(manageTimeline.getListTimeline().getId()); + }else{ + duplicated_id.add(manageTimeline); + new TimelinesDAO(contextReference.get(), db).remove(manageTimeline); } } - for (ManageTimelines manageTimelines : manageTimelines) { - if (manageTimelines.getListTimeline() == null) - continue; - boolean shouldBeRemoved = true; + manageTimelines.removeAll(duplicated_id); + if (lists != null && lists.size() > 0) { + //Loop through results for (app.fedilab.android.client.Entities.List list : lists) { - if (list.getId().equals(manageTimelines.getListTimeline().getId())) { - shouldBeRemoved = false; + boolean isInDb = false; + ManageTimelines timelines_tmp = null; + for (ManageTimelines manageTimeline : manageTimelines) { + if (manageTimeline.getListTimeline() == null) + continue; + if (manageTimeline.getListTimeline().getId().equals(list.getId())) { + isInDb = true; + timelines_tmp = manageTimeline; + break; + } + } + if (!isInDb) { + ManageTimelines manageTL = new ManageTimelines(); + manageTL.setListTimeline(list); + manageTL.setDisplayed(true); + manageTL.setType(ManageTimelines.Type.LIST); + manageTL.setPosition(manageTimelines.size()); + new TimelinesDAO(contextReference.get(), db).insert(manageTL); + } else { + //Update list + timelines_tmp.setListTimeline(list); + new TimelinesDAO(contextReference.get(), db).update(timelines_tmp); } } - if (shouldBeRemoved) { + for (ManageTimelines manageTimelines : manageTimelines) { + if (manageTimelines.getListTimeline() == null) + continue; + boolean shouldBeRemoved = true; + for (app.fedilab.android.client.Entities.List list : lists) { + if (list.getId().equals(manageTimelines.getListTimeline().getId())) { + shouldBeRemoved = false; + } + } + if (shouldBeRemoved) { + new TimelinesDAO(contextReference.get(), db).remove(manageTimelines); + } + } + } else { + for (ManageTimelines manageTimelines : manageTimelines) { + if (manageTimelines.getListTimeline() == null) + continue; new TimelinesDAO(contextReference.get(), db).remove(manageTimelines); } } - } else { - for (ManageTimelines manageTimelines : manageTimelines) { - if (manageTimelines.getListTimeline() == null) - continue; - new TimelinesDAO(contextReference.get(), db).remove(manageTimelines); - } + } catch (Exception ignored) { } - } for (Iterator it = manageTimelines.iterator(); it.hasNext();) { if (!it.next().isDisplayed()) { diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayListsFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayListsFragment.java index 11ac431b5..e1de80336 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayListsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayListsFragment.java @@ -26,6 +26,8 @@ import androidx.annotation.NonNull; import com.google.android.material.floatingactionbutton.FloatingActionButton; import androidx.fragment.app.Fragment; import androidx.appcompat.app.AlertDialog; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import android.text.InputFilter; import android.view.LayoutInflater; import android.view.View; @@ -197,12 +199,16 @@ public class DisplayListsFragment extends Fragment implements OnListActionInterf this.lists.add(0, apiResponse.getLists().get(0)); listAdapter.notifyDataSetChanged(); textviewNoAction.setVisibility(View.GONE); + Intent intentUP = new Intent(Helper.RECEIVE_UPDATE_TOPBAR); + LocalBroadcastManager.getInstance(context).sendBroadcast(intentUP); }else{ Toasty.error(context, apiResponse.getError().getError(),Toast.LENGTH_LONG).show(); } }else if( actionType == ManageListsAsyncTask.action.DELETE_LIST){ if( this.lists.size() == 0) textviewNoAction.setVisibility(View.VISIBLE); + Intent intentUP = new Intent(Helper.RECEIVE_UPDATE_TOPBAR); + LocalBroadcastManager.getInstance(context).sendBroadcast(intentUP); } } } diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index c4cc10a5b..ff2163b7d 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -479,6 +479,7 @@ public class Helper { public static final String RECEIVE_FEDERATED_DATA = "receive_federated_data"; public static final String RECEIVE_LOCAL_DATA = "receive_local_data"; public static final String RECEIVE_HIDE_ITEM = "receive_hide_item"; + public static final String RECEIVE_UPDATE_TOPBAR = "receive_update_topbar"; //User agent //public static final String USER_AGENT = "Fedilab/"+ BuildConfig.VERSION_NAME + " Android/"+ Build.VERSION.RELEASE; public static final String USER_AGENT = System.getProperty("http.agent");