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; public static UpdateAccountInfoAsyncTask.SOCIAL social;
private final int PICK_IMPORT = 5556; private final int PICK_IMPORT = 5556;
public static List<ManageTimelines> timelines; public static List<ManageTimelines> timelines;
private BroadcastReceiver hidde_menu; private BroadcastReceiver hidde_menu, update_topbar;
public static HashMap<Integer, Fragment> mPageReferenceMap; public static HashMap<Integer, Fragment> mPageReferenceMap;
private static boolean notificationChecked = false; private static boolean notificationChecked = false;
@ -694,6 +694,9 @@ public abstract class BaseMainActivity extends BaseActivity
if( hidde_menu != null) if( hidde_menu != null)
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu); LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu);
if( update_topbar != null)
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(update_topbar);
hidde_menu = new BroadcastReceiver() { hidde_menu = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { 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(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() { toolbar_search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override @Override
@ -1649,6 +1662,8 @@ public abstract class BaseMainActivity extends BaseActivity
sendBroadcast(new Intent("StopLiveNotificationService")); sendBroadcast(new Intent("StopLiveNotificationService"));
if( hidde_menu != null) if( hidde_menu != null)
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu); LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(hidde_menu);
if( update_topbar != null)
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(update_topbar);
if( mPageReferenceMap != null) if( mPageReferenceMap != null)
mPageReferenceMap = null; mPageReferenceMap = null;
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", false).apply(); PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", false).apply();

View File

@ -22,6 +22,7 @@ import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@ -307,7 +308,8 @@ public class ListActivity extends BaseActivity implements OnListActionInterface
swipeRefreshLayout.setRefreshing(false); swipeRefreshLayout.setRefreshing(false);
firstLoad = false; firstLoad = false;
}else if(actionType == ManageListsAsyncTask.action.UPDATE_LIST) { }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.InstancesDAO;
import app.fedilab.android.sqlite.SearchDAO; import app.fedilab.android.sqlite.SearchDAO;
import app.fedilab.android.sqlite.Sqlite; import app.fedilab.android.sqlite.Sqlite;
import app.fedilab.android.sqlite.TimelineCacheDAO;
import app.fedilab.android.sqlite.TimelinesDAO; import app.fedilab.android.sqlite.TimelinesDAO;
import app.fedilab.android.activities.MainActivity; import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.interfaces.OnSyncTimelineInterface; import app.fedilab.android.interfaces.OnSyncTimelineInterface;
@ -250,57 +251,68 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
try { try {
apiResponse = new API(contextReference.get()).getLists(); apiResponse = new API(contextReference.get()).getLists();
lists = apiResponse.getLists(); lists = apiResponse.getLists();
} catch (Exception ignored) { List<ManageTimelines> duplicated_id = new ArrayList<>();
} List<String> present_id = new ArrayList<>();
for (ManageTimelines manageTimeline : manageTimelines) {
if (lists != null && lists.size() > 0) { if (manageTimeline.getListTimeline() == null)
//Loop through results continue;
for (app.fedilab.android.client.Entities.List list : lists) { if( !present_id.contains(manageTimeline.getListTimeline().getId())) {
boolean isInDb = false; present_id.add(manageTimeline.getListTimeline().getId());
ManageTimelines timelines_tmp = null; }else{
for (ManageTimelines manageTimeline : manageTimelines) { duplicated_id.add(manageTimeline);
if (manageTimeline.getListTimeline() == null) new TimelinesDAO(contextReference.get(), db).remove(manageTimeline);
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);
} }
} }
for (ManageTimelines manageTimelines : manageTimelines) { manageTimelines.removeAll(duplicated_id);
if (manageTimelines.getListTimeline() == null) if (lists != null && lists.size() > 0) {
continue; //Loop through results
boolean shouldBeRemoved = true;
for (app.fedilab.android.client.Entities.List list : lists) { for (app.fedilab.android.client.Entities.List list : lists) {
if (list.getId().equals(manageTimelines.getListTimeline().getId())) { boolean isInDb = false;
shouldBeRemoved = 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); new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
} }
} }
} else { } catch (Exception ignored) {
for (ManageTimelines manageTimelines : manageTimelines) {
if (manageTimelines.getListTimeline() == null)
continue;
new TimelinesDAO(contextReference.get(), db).remove(manageTimelines);
}
} }
} }
for (Iterator<ManageTimelines> it = manageTimelines.iterator(); it.hasNext();) { for (Iterator<ManageTimelines> it = manageTimelines.iterator(); it.hasNext();) {
if (!it.next().isDisplayed()) { if (!it.next().isDisplayed()) {

View File

@ -26,6 +26,8 @@ import androidx.annotation.NonNull;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.text.InputFilter; import android.text.InputFilter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -197,12 +199,16 @@ public class DisplayListsFragment extends Fragment implements OnListActionInterf
this.lists.add(0, apiResponse.getLists().get(0)); this.lists.add(0, apiResponse.getLists().get(0));
listAdapter.notifyDataSetChanged(); listAdapter.notifyDataSetChanged();
textviewNoAction.setVisibility(View.GONE); textviewNoAction.setVisibility(View.GONE);
Intent intentUP = new Intent(Helper.RECEIVE_UPDATE_TOPBAR);
LocalBroadcastManager.getInstance(context).sendBroadcast(intentUP);
}else{ }else{
Toasty.error(context, apiResponse.getError().getError(),Toast.LENGTH_LONG).show(); Toasty.error(context, apiResponse.getError().getError(),Toast.LENGTH_LONG).show();
} }
}else if( actionType == ManageListsAsyncTask.action.DELETE_LIST){ }else if( actionType == ManageListsAsyncTask.action.DELETE_LIST){
if( this.lists.size() == 0) if( this.lists.size() == 0)
textviewNoAction.setVisibility(View.VISIBLE); 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_FEDERATED_DATA = "receive_federated_data";
public static final String RECEIVE_LOCAL_DATA = "receive_local_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_HIDE_ITEM = "receive_hide_item";
public static final String RECEIVE_UPDATE_TOPBAR = "receive_update_topbar";
//User agent //User agent
//public static final String USER_AGENT = "Fedilab/"+ BuildConfig.VERSION_NAME + " Android/"+ Build.VERSION.RELEASE; //public static final String USER_AGENT = "Fedilab/"+ BuildConfig.VERSION_NAME + " Android/"+ Build.VERSION.RELEASE;
public static final String USER_AGENT = System.getProperty("http.agent"); public static final String USER_AGENT = System.getProperty("http.agent");