mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
Override cursor loader methods
This commit is contained in:
parent
722f1ae915
commit
f2ab66cb1f
1 changed files with 86 additions and 9 deletions
|
|
@ -1,32 +1,41 @@
|
||||||
package fr.free.nrw.commons.contributions;
|
package fr.free.nrw.commons.contributions;
|
||||||
|
|
||||||
import android.app.FragmentManager;
|
import android.app.FragmentManager;
|
||||||
import android.app.LoaderManager;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.Loader;
|
import android.content.ServiceConnection;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.DataSetObserver;
|
import android.database.DataSetObserver;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.IBinder;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.support.v4.content.CursorLoader;
|
||||||
|
import android.support.v4.content.Loader;
|
||||||
|
import android.support.v4.app.LoaderManager;
|
||||||
|
import android.support.v4.widget.CursorAdapter;
|
||||||
import android.util.Log;
|
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;
|
||||||
|
import android.widget.Adapter;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import fr.free.nrw.commons.BuildConfig;
|
import fr.free.nrw.commons.BuildConfig;
|
||||||
|
import fr.free.nrw.commons.HandlerService;
|
||||||
import fr.free.nrw.commons.Media;
|
import fr.free.nrw.commons.Media;
|
||||||
import fr.free.nrw.commons.R;
|
import fr.free.nrw.commons.R;
|
||||||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||||
|
|
@ -35,10 +44,15 @@ import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||||
import fr.free.nrw.commons.nearby.NearbyPlaces;
|
import fr.free.nrw.commons.nearby.NearbyPlaces;
|
||||||
import fr.free.nrw.commons.notification.Notification;
|
import fr.free.nrw.commons.notification.Notification;
|
||||||
import fr.free.nrw.commons.notification.NotificationController;
|
import fr.free.nrw.commons.notification.NotificationController;
|
||||||
|
import fr.free.nrw.commons.upload.UploadService;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
import static fr.free.nrw.commons.contributions.ContributionDao.Table.ALL_FIELDS;
|
||||||
|
import static fr.free.nrw.commons.contributions.ContributionsContentProvider.BASE_URI;
|
||||||
|
import static fr.free.nrw.commons.settings.Prefs.UPLOADS_SHOWING;
|
||||||
|
|
||||||
public class ContributionsFragment
|
public class ContributionsFragment
|
||||||
extends CommonsDaggerSupportFragment
|
extends CommonsDaggerSupportFragment
|
||||||
implements LoaderManager.LoaderCallbacks<Cursor>,
|
implements LoaderManager.LoaderCallbacks<Cursor>,
|
||||||
|
|
@ -56,6 +70,11 @@ public class ContributionsFragment
|
||||||
@Inject
|
@Inject
|
||||||
NotificationController notificationController;
|
NotificationController notificationController;
|
||||||
|
|
||||||
|
private ArrayList<DataSetObserver> observersWaitingForLoad = new ArrayList<>();
|
||||||
|
private Cursor allContributions;
|
||||||
|
private UploadService uploadService;
|
||||||
|
private boolean isUploadServiceConnected;
|
||||||
|
|
||||||
public TextView numberOfUploads;
|
public TextView numberOfUploads;
|
||||||
public ProgressBar numberOfUploadsProgressBar;
|
public ProgressBar numberOfUploadsProgressBar;
|
||||||
|
|
||||||
|
|
@ -64,6 +83,25 @@ public class ContributionsFragment
|
||||||
public static final String CONTRIBUTION_LIST_FRAGMENT_TAG = "ContributionListFragmentTag";
|
public static final String CONTRIBUTION_LIST_FRAGMENT_TAG = "ContributionListFragmentTag";
|
||||||
public static final String MEDIA_DETAIL_PAGER_FRAGMENT_TAG = "MediaDetailFragmentTag";
|
public static final String MEDIA_DETAIL_PAGER_FRAGMENT_TAG = "MediaDetailFragmentTag";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Since we will need to use parent activity on onAuthCookieAcquired, we have to wait
|
||||||
|
* fragment to be attached. Latch will be responsible for this sync.
|
||||||
|
*/
|
||||||
|
private ServiceConnection uploadServiceConnection = new ServiceConnection() {
|
||||||
|
@Override
|
||||||
|
public void onServiceConnected(ComponentName componentName, IBinder binder) {
|
||||||
|
uploadService = (UploadService) ((HandlerService.HandlerServiceLocalBinder) binder)
|
||||||
|
.getService();
|
||||||
|
isUploadServiceConnected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onServiceDisconnected(ComponentName componentName) {
|
||||||
|
// this should never happen
|
||||||
|
Timber.e(new RuntimeException("UploadService died but the rest of the process did not!"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
|
@ -163,17 +201,49 @@ public class ContributionsFragment
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
|
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
|
||||||
return null;
|
int uploads = prefs.getInt(UPLOADS_SHOWING, 100);
|
||||||
}
|
return new CursorLoader(getActivity(), BASE_URI, //TODO find out the reason we pass activity here
|
||||||
|
ALL_FIELDS, "", null,
|
||||||
@Override
|
ContributionDao.CONTRIBUTION_SORT + "LIMIT " + uploads);
|
||||||
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<Cursor> loader) {
|
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
|
||||||
|
if (contributionsListFragment != null) {
|
||||||
|
contributionsListFragment.changeProgressBarVisibility(false);
|
||||||
|
|
||||||
|
if (contributionsListFragment.getAdapter() == null) {
|
||||||
|
Log.d("deneme", "contributionsListFragment adapter set");
|
||||||
|
contributionsListFragment.setAdapter(new ContributionsListAdapter(getActivity().getApplicationContext(),
|
||||||
|
cursor, 0, contributionDao));
|
||||||
|
} else {
|
||||||
|
((CursorAdapter) contributionsListFragment.getAdapter()).swapCursor(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
contributionsListFragment.clearSyncMessage();
|
||||||
|
notifyAndMigrateDataSetObservers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoaderReset(Loader<Cursor> cursorLoader) {
|
||||||
|
((CursorAdapter) contributionsListFragment.getAdapter()).swapCursor(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyAndMigrateDataSetObservers() {
|
||||||
|
Adapter adapter = contributionsListFragment.getAdapter();
|
||||||
|
|
||||||
|
// First, move the observers over to the adapter now that we have it.
|
||||||
|
for (DataSetObserver observer : observersWaitingForLoad) {
|
||||||
|
adapter.registerDataSetObserver(observer);
|
||||||
|
}
|
||||||
|
observersWaitingForLoad.clear();
|
||||||
|
|
||||||
|
// Now fire off a first notification...
|
||||||
|
for (DataSetObserver observer : observersWaitingForLoad) {
|
||||||
|
observer.onChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -181,12 +251,19 @@ public class ContributionsFragment
|
||||||
* @param uploadServiceIntent
|
* @param uploadServiceIntent
|
||||||
*/
|
*/
|
||||||
public void onAuthCookieAcquired(Intent uploadServiceIntent) {
|
public void onAuthCookieAcquired(Intent uploadServiceIntent) {
|
||||||
|
// Since we call onAuthCookieAcquired method from onAttach, isAdded is still false. So don't use it
|
||||||
|
|
||||||
|
if (getActivity() != null) { // If fragment is attached to parent activity
|
||||||
|
getActivity().bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE);
|
||||||
|
allContributions = contributionDao.loadAllContributions();
|
||||||
|
getActivity().getSupportLoaderManager().initLoader(0, null, ContributionsFragment.this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
|
// show detail at a position
|
||||||
|
showDetail(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue