Listen to lists

This commit is contained in:
tom79 2019-08-19 18:30:47 +02:00
parent a6846e8f55
commit f48dd4fc1b
5 changed files with 80 additions and 44 deletions

View File

@ -170,7 +170,7 @@ public abstract class BaseMainActivity extends BaseActivity
public static UpdateAccountInfoAsyncTask.SOCIAL social;
private final int PICK_IMPORT = 5556;
public static List<ManageTimelines> timelines;
private BroadcastReceiver hidde_menu;
private BroadcastReceiver hidde_menu, update_topbar;
public static HashMap<Integer, Fragment> 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();

View File

@ -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);
}
}
}

View File

@ -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<Void, Void, Void> {
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<ManageTimelines> duplicated_id = new ArrayList<>();
List<String> 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<ManageTimelines> it = manageTimelines.iterator(); it.hasNext();) {
if (!it.next().isDisplayed()) {

View File

@ -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);
}
}
}

View File

@ -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");