Merge remote-tracking branch 'refs/remotes/commons-app/master'

This commit is contained in:
misaochan 2016-10-31 15:58:32 +13:00
commit c938f06690
53 changed files with 240 additions and 252 deletions

View file

@ -149,8 +149,6 @@
android:exported="false">
</provider>
</application>
</manifest>

View file

@ -1,38 +1,45 @@
package fr.free.nrw.commons;
import java.io.IOException;
import android.accounts.*;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.Application;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Build;
import android.support.v4.util.LruCache;
import android.util.Log;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;
import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.utils.StorageUtils;
import fr.free.nrw.commons.auth.WikiAccountAuthenticator;
import org.acra.ACRA;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
import org.apache.http.conn.*;
import org.apache.http.conn.scheme.*;
import org.apache.http.conn.ssl.*;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.mediawiki.api.*;
import org.apache.http.impl.client.*;
import org.apache.http.params.CoreProtocolPNames;
import org.mediawiki.api.MWApi;
import java.io.IOException;
import fr.free.nrw.commons.auth.WikiAccountAuthenticator;
import fr.free.nrw.commons.caching.CacheController;
import fr.free.nrw.commons.data.*;
import com.android.volley.toolbox.*;
// TODO: Use ProGuard to rip out reporting when publishing
@ReportsCrashes(
@ -59,7 +66,6 @@ public class CommonsApplication extends Application {
public static final Object[] EVENT_LOGIN_ATTEMPT = {"MobileAppLoginAttempts", 5257721L};
public static final Object[] EVENT_SHARE_ATTEMPT = {"MobileAppShareAttempts", 5346170L};
public static final Object[] EVENT_CATEGORIZATION_ATTEMPT = {"MobileAppCategorizationAttempts", 5359208L};
public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using Android Commons app";
@ -94,7 +100,6 @@ public class CommonsApplication extends Application {
System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0");
api = createMWApi();
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(getApplicationContext())
.discCache(new TotalSizeLimitedDiscCache(StorageUtils.getCacheDirectory(this), 128 * 1024 * 1024))
.build();
@ -111,7 +116,6 @@ public class CommonsApplication extends Application {
// Initialize EventLogging
EventLog.setApp(this);
// based off https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
// Cache for 1/8th of available VM memory
long maxMem = Runtime.getRuntime().maxMemory();

View file

@ -1,14 +1,21 @@
package fr.free.nrw.commons;
import android.content.SharedPreferences;
import android.os.*;
import android.os.AsyncTask;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.*;
import in.yuvi.http.fluent.Http;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.json.*;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.net.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import in.yuvi.http.fluent.Http;
public class EventLog {
@ -24,7 +31,6 @@ public class EventLog {
for(LogBuilder logBuilder: logBuilders) {
HttpURLConnection conn;
try {
URL url = logBuilder.toUrl();
HttpResponse response = Http.get(url.toString()).use(CommonsApplication.createHttpClient()).asResponse();
@ -37,7 +43,6 @@ public class EventLog {
// Probably just ignore for now. Can be much more robust with a service, etc later on.
Log.d("Commons", "IO Error, EventLog hit skipped");
}
}
return allSuccess;

View file

@ -1,8 +1,13 @@
package fr.free.nrw.commons;
import android.app.*;
import android.content.*;
import android.os.*;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
public abstract class HandlerService<T> extends Service {
private volatile Looper threadLooper;
@ -32,7 +37,6 @@ public abstract class HandlerService<T> extends Service {
public HandlerService getService() {
return HandlerService.this;
}
}
private final IBinder localBinder = new HandlerServiceLocalBinder();

View file

@ -2,7 +2,6 @@ package fr.free.nrw.commons;
import android.app.Activity;
import android.content.res.Resources;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
@ -28,7 +27,6 @@ public class LicenseList {
fr.free.nrw.commons.License license = new fr.free.nrw.commons.License(id, template, url, name);
licenses.put(id, license);
}
}
public Set<String> keySet() {

View file

@ -1,10 +1,16 @@
package fr.free.nrw.commons;
import android.net.Uri;
import android.os.*;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.*;
import java.util.regex.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Media implements Parcelable {
@ -143,10 +149,7 @@ public class Media implements Parcelable {
protected int width;
protected int height;
protected String license;
protected String creator;
protected ArrayList<String> categories; // as loaded at runtime?
protected Map<String, String> descriptions; // multilingual descriptions as loaded

View file

@ -1,6 +1,7 @@
package fr.free.nrw.commons;
import android.util.Log;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
import org.w3c.dom.Document;
@ -9,14 +10,18 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Fetch additional media data from the network that we don't store locally.

View file

@ -27,10 +27,10 @@ import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
public class MediaWikiImageView extends ImageView {
private Media mMedia;
@ -89,7 +89,6 @@ public class MediaWikiImageView extends ImageView {
return;
}
// Do not count for density when loading thumbnails.
// FIXME: Use another 'algorithm' that doesn't punish low res devices
if(isThumbnail) {
@ -160,7 +159,6 @@ public class MediaWikiImageView extends ImageView {
}
});
}
}
@Override

View file

@ -6,7 +6,6 @@ public class Prefs {
public static String TRACKING_ENABLED = "eventLogging";
public static final String DEFAULT_LICENSE = "defaultLicense";
public static class Licenses {
public static final String CC_BY_SA = "CC BY-SA";
public static final String CC_BY = "CC BY";

View file

@ -7,10 +7,7 @@ import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;

View file

@ -55,7 +55,6 @@ public class Utils {
return String.format("%s/%s/%s/%s", CommonsApplication.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name));
}
public static String getStringFromDOM(Node dom) {
javax.xml.transform.Transformer transformer = null;
try {
@ -102,7 +101,6 @@ public class Utils {
}
}
private static DisplayImageOptions.Builder defaultImageOptionsBuilder;
public static DisplayImageOptions.Builder getGenericDisplayOptions() {
if(defaultImageOptionsBuilder == null) {

View file

@ -1,19 +1,21 @@
package fr.free.nrw.commons.auth;
import java.io.IOException;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.accounts.*;
import android.os.*;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.io.IOException;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Utils;
public abstract class AuthenticatedActivity extends AppCompatActivity {
String accountType;
CommonsApplication app;
@ -22,7 +24,6 @@ public abstract class AuthenticatedActivity extends AppCompatActivity {
public AuthenticatedActivity(String accountType) {
this.accountType = accountType;
}
private class GetAuthCookieTask extends AsyncTask<Void, String, String> {
private Account account;
@ -59,7 +60,6 @@ public abstract class AuthenticatedActivity extends AppCompatActivity {
}
}
}
private class AddAccountTask extends AsyncTask<Void, String, String> {
private AccountManager accountManager;
@ -106,6 +106,7 @@ public abstract class AuthenticatedActivity extends AppCompatActivity {
}
}
protected void requestAuthToken() {
if(authCookie != null) {
onAuthCookieAcquired(authCookie);

View file

@ -9,10 +9,8 @@ import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.NavUtils;
import android.text.Editable;
import android.text.TextWatcher;

View file

@ -1,20 +1,14 @@
package fr.free.nrw.commons.auth;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import fr.free.nrw.commons.R;
public class SignupActivity extends Activity {
private WebView webView;

View file

@ -1,12 +1,18 @@
package fr.free.nrw.commons.auth;
import android.accounts.AbstractAccountAuthenticator;
import android.accounts.Account;
import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
import android.accounts.NetworkErrorException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import org.mediawiki.api.MWApi;
import java.io.IOException;
import android.accounts.*;
import android.content.*;
import android.os.*;
import org.mediawiki.api.*;
import fr.free.nrw.commons.CommonsApplication;
public class WikiAccountAuthenticator extends AbstractAccountAuthenticator {

View file

@ -1,8 +1,8 @@
package fr.free.nrw.commons.auth;
import android.app.*;
import android.content.*;
import android.os.*;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class WikiAccountAuthenticatorService extends Service{

View file

@ -31,26 +31,18 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.upload.MwVolleyApi;
@ -627,8 +619,6 @@ public class CategorizationFragment extends Fragment {
return super.onOptionsItemSelected(menuItem);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

View file

@ -104,7 +104,6 @@ public class Category {
COLUMN_TIMES_USED
};
private static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_ID + " INTEGER PRIMARY KEY,"
+ COLUMN_NAME + " STRING,"
@ -112,7 +111,6 @@ public class Category {
+ COLUMN_TIMES_USED + " INTEGER"
+ ");";
public static void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_STATEMENT);
}

View file

@ -9,7 +9,7 @@ import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.data.DBOpenHelper;
public class CategoryContentProvider extends ContentProvider {
@ -29,7 +29,6 @@ public class CategoryContentProvider extends ContentProvider {
uriMatcher.addURI(AUTHORITY, BASE_PATH + "/#", CATEGORIES_ID);
}
public static Uri uriForId(int id) {
return Uri.parse(BASE_URI.toString() + "/" + id);
}

View file

@ -12,14 +12,9 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import javax.net.ssl.SSLPeerUnverifiedException;
import fr.free.nrw.commons.CommonsApplication;
import static android.R.id.list;
/**
* Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that share the
* same prefix as the keyword typed in by the user. The 'acprefix' action-specific parameter is used

View file

@ -1,9 +1,7 @@
package fr.free.nrw.commons.category;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;

View file

@ -8,7 +8,6 @@ import android.net.Uri;
import android.os.Parcel;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -90,7 +89,6 @@ public class Contribution extends Media {
state = in.readInt();
transferred = in.readLong();
isMultiple = in.readInt() == 1;
}
public long getTransferred() {
@ -101,7 +99,6 @@ public class Contribution extends Media {
this.transferred = transferred;
}
public String getEditSummary() {
return editSummary != null ? editSummary : CommonsApplication.DEFAULT_EDIT_SUMMARY;
}
@ -267,7 +264,6 @@ public class Contribution extends Media {
this.localUri = localUri;
}
public static class Table {
public static final String TABLE_NAME = "contributions";

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.contributions;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import fr.free.nrw.commons.MediaWikiImageView;
import fr.free.nrw.commons.R;

View file

@ -27,8 +27,9 @@ import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.HandlerService;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.*;
import fr.free.nrw.commons.media.*;
import fr.free.nrw.commons.auth.AuthenticatedActivity;
import fr.free.nrw.commons.auth.WikiAccountAuthenticator;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.upload.UploadService;
public class ContributionsActivity
@ -57,7 +58,6 @@ public class ContributionsActivity
*/
private String CONTRIBUTION_SORT = Contribution.Table.COLUMN_STATE + " DESC, " + Contribution.Table.COLUMN_UPLOADED + " DESC , (" + Contribution.Table.COLUMN_TIMESTAMP + " * " + Contribution.Table.COLUMN_STATE + ")";
public ContributionsActivity() {
super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE);
}
@ -191,7 +191,6 @@ public class ContributionsActivity
finish(); // If authentication failed, we just exit
}
public void onItemClick(AdapterView<?> adapterView, View view, int position, long item) {
showDetail(position);
}
@ -218,13 +217,10 @@ public class ContributionsActivity
contributionsList.clearSyncMessage();
notifyAndMigrateDataSetObservers();
}
public void onLoaderReset(Loader cursorLoader) {
((CursorAdapter) contributionsList.getAdapter()).swapCursor(null);
}
//FIXME: Potential cause of wrong image display bug

View file

@ -1,14 +1,16 @@
package fr.free.nrw.commons.contributions;
import android.content.*;
import android.database.*;
import android.database.sqlite.*;
import android.net.*;
import android.text.*;
import android.util.*;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import fr.free.nrw.commons.data.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.data.DBOpenHelper;
public class ContributionsContentProvider extends ContentProvider{
@ -26,7 +28,6 @@ public class ContributionsContentProvider extends ContentProvider{
uriMatcher.addURI(AUTHORITY, BASE_PATH + "/#", CONTRIBUTIONS_ID);
}
public static Uri uriForId(int id) {
return Uri.parse(BASE_URI.toString() + "/" + id);
}

View file

@ -9,17 +9,18 @@ import android.support.v4.widget.CursorAdapter;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.MediaWikiImageView;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
class ContributionsListAdapter extends CursorAdapter {
private DisplayImageOptions contributionDisplayOptions = Utils.getGenericDisplayOptions().build();
private Activity activity;
@ -111,6 +112,5 @@ class ContributionsListAdapter extends CursorAdapter {
views.progressView.setVisibility(View.GONE);
break;
}
}
}

View file

@ -1,29 +1,26 @@
package fr.free.nrw.commons.contributions;
import android.Manifest;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.support.v4.app.Fragment;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import fr.free.nrw.commons.AboutActivity;
@ -31,7 +28,6 @@ import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.SettingsActivity;
import fr.free.nrw.commons.nearby.NearbyActivity;
import fr.free.nrw.commons.upload.UploadService;
import static android.app.Activity.RESULT_OK;
@ -108,7 +104,6 @@ public class ContributionsListFragment extends Fragment {
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
@ -210,7 +205,6 @@ public class ContributionsListFragment extends Fragment {
}
menu.findItem(R.id.menu_refresh).setVisible(false);
}
@Override

View file

@ -1,21 +1,28 @@
package fr.free.nrw.commons.contributions;
import android.content.*;
import android.accounts.Account;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProviderClient;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SyncResult;
import android.database.Cursor;
import android.os.Bundle;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.Log;
import android.accounts.Account;
import android.os.Bundle;
import java.io.*;
import java.util.*;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import org.mediawiki.api.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Utils;
public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter {
private static int COMMIT_THRESHOLD = 10;
public ContributionsSyncAdapter(Context context, boolean autoInitialize) {
@ -122,7 +129,5 @@ public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter {
}
prefs.edit().putString("lastSyncTimestamp", Utils.toMWDate(curTime)).apply();
Log.d("Commons", "Oh hai, everyone! Look, a kitty!");
}
}

View file

@ -1,8 +1,8 @@
package fr.free.nrw.commons.contributions;
import android.app.*;
import android.content.*;
import android.os.*;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ContributionsSyncService extends Service {

View file

@ -4,12 +4,13 @@ import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R;
import java.util.ArrayList;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
public class MediaListAdapter extends BaseAdapter {
private ArrayList<Media> mediaList;
private Activity activity;

View file

@ -1,11 +1,12 @@
package fr.free.nrw.commons.data;
import android.content.*;
import android.database.sqlite.*;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import fr.free.nrw.commons.modifications.ModifierSequence;
import fr.free.nrw.commons.category.Category;
import fr.free.nrw.commons.contributions.*;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.modifications.ModifierSequence;
public class DBOpenHelper extends SQLiteOpenHelper{

View file

@ -3,15 +3,17 @@ package fr.free.nrw.commons.media;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
import android.util.Log;
import org.mediawiki.api.ApiResult;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.Utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.Utils;
public class CategoryImagesLoader extends AsyncTaskLoader<List<Media>>{
private final CommonsApplication app;
private final String category;

View file

@ -6,7 +6,6 @@ import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
@ -82,7 +81,6 @@ public class MediaDetailFragment extends Fragment {
private AsyncTask<Void,Void,Boolean> detailFetchTask;
private LicenseList licenseList;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@ -175,7 +173,6 @@ public class MediaDetailFragment extends Fragment {
scrollView.scrollTo(0, initialListTop);
}
}
};
view.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);

View file

@ -269,7 +269,6 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa
// Default set of menu items works fine. Treat same as regular media object
break;
}
}
return;
}

View file

@ -6,7 +6,6 @@ import org.json.JSONObject;
public class CategoryModifier extends PageModifier {
public static String PARAM_CATEGORIES = "categories";
public static String MODIFIER_NAME = "CategoriesModifier";

View file

@ -1,14 +1,16 @@
package fr.free.nrw.commons.modifications;
import android.content.*;
import android.database.*;
import android.database.sqlite.*;
import android.net.*;
import android.text.*;
import android.util.*;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import fr.free.nrw.commons.data.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.data.DBOpenHelper;
public class ModificationsContentProvider extends ContentProvider{
@ -26,7 +28,6 @@ public class ModificationsContentProvider extends ContentProvider{
uriMatcher.addURI(AUTHORITY, BASE_PATH + "/#", MODIFICATIONS_ID);
}
public static Uri uriForId(int id) {
return Uri.parse(BASE_URI.toString() + "/" + id);
}

View file

@ -1,24 +1,28 @@
package fr.free.nrw.commons.modifications;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.*;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProviderClient;
import android.content.Context;
import android.content.SyncResult;
import android.database.Cursor;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
import android.accounts.Account;
import android.os.Bundle;
import java.io.*;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
import java.io.IOException;
import fr.free.nrw.commons.contributions.Contribution;
import org.mediawiki.api.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
public ModificationsSyncAdapter(Context context, boolean autoInitialize) {
@ -66,7 +70,6 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
return;
}
allModifications.moveToFirst();
Log.d("Commons", "Found " + allModifications.getCount() + " modifications to execute");
@ -129,13 +132,11 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
}
}
allModifications.moveToNext();
}
} finally {
if(contributionsClient != null) {
contributionsClient.release();
}
}
}
}

View file

@ -1,8 +1,8 @@
package fr.free.nrw.commons.modifications;
import android.app.*;
import android.content.*;
import android.os.*;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ModificationsSyncService extends Service {

View file

@ -6,6 +6,7 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.RemoteException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@ -127,14 +128,12 @@ public class ModifierSequence {
COLUMN_DATA
};
private static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
+ "_id INTEGER PRIMARY KEY,"
+ "mediauri STRING,"
+ "data STRING"
+ ");";
public static void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_STATEMENT);
}

View file

@ -15,7 +15,6 @@ public class TemplateRemoveModifier extends PageModifier {
public static final Pattern PATTERN_TEMPLATE_OPEN = Pattern.compile("\\{\\{");
public static final Pattern PATTERN_TEMPLATE_CLOSE = Pattern.compile("\\}\\}");
public TemplateRemoveModifier(String templateName) {
super(MODIFIER_NAME);
try {
@ -86,7 +85,6 @@ public class TemplateRemoveModifier extends PageModifier {
}
return pageContents;
}
@Override

View file

@ -1,7 +1,5 @@
package fr.free.nrw.commons.nearby;
import android.os.Parcel;
public class LatLng {
public final double latitude;

View file

@ -6,7 +6,6 @@ import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

View file

@ -354,7 +354,6 @@ public class NearbyListFragment extends ListFragment implements TaskListener {
return distanceRadians(Math.toRadians(from.latitude), Math.toRadians(from.longitude), Math.toRadians(to.latitude), Math.toRadians(to.longitude));
}
private static double distanceRadians(double lat1, double lng1, double lat2, double lng2) {
return arcHav(havDistance(lat1, lat2, lng1 - lng2));
}

View file

@ -1,6 +1,5 @@
package fr.free.nrw.commons.nearby;
import android.net.Uri;
import android.os.StrictMode;
import android.util.Log;
@ -26,7 +25,6 @@ public class NearbyPlaces {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
URL file = new URL("https://tools.wmflabs.org/wiki-needs-pictures/data/data.csv");
BufferedReader in = new BufferedReader(new InputStreamReader(file.openStream()));

View file

@ -6,8 +6,8 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
public class FileUtils {

View file

@ -10,8 +10,8 @@ import android.media.ExifInterface;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.util.Log;
import java.io.IOException;
/**

View file

@ -1,35 +1,41 @@
package fr.free.nrw.commons.upload;
import java.util.*;
import android.Manifest;
import android.app.*;
import android.content.*;
import android.app.ProgressDialog;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.DataSetObserver;
import android.net.*;
import android.os.*;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.*;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import android.widget.AdapterView;
import android.widget.Toast;
import java.util.ArrayList;
import fr.free.nrw.commons.*;
import fr.free.nrw.commons.auth.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.EventLog;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AuthenticatedActivity;
import fr.free.nrw.commons.auth.WikiAccountAuthenticator;
import fr.free.nrw.commons.category.CategorizationFragment;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.modifications.CategoryModifier;
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
import fr.free.nrw.commons.modifications.ModifierSequence;
import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
import fr.free.nrw.commons.contributions.*;
import fr.free.nrw.commons.media.*;
public class MultipleShareActivity
extends AuthenticatedActivity
@ -78,7 +84,6 @@ public class MultipleShareActivity
public void onItemClick(AdapterView<?> adapterView, View view, int index, long item) {
showDetail(index);
}
public void OnMultipleUploadInitiated() {
@ -201,10 +206,8 @@ public class MultipleShareActivity
getSupportFragmentManager().addOnBackStackChangedListener(this);
requestAuthToken();
}
@Override
protected void onDestroy() {
super.onDestroy();
@ -262,10 +265,8 @@ public class MultipleShareActivity
setTitle(getResources().getQuantityString(R.plurals.multiple_uploads_title, photosList.size(), photosList.size()));
uploadController.prepareService();
}
}
@Override
protected void onAuthFailure() {
Toast failureToast = Toast.makeText(this, R.string.authentication_failed, Toast.LENGTH_LONG);

View file

@ -1,21 +1,36 @@
package fr.free.nrw.commons.upload;
import android.content.*;
import android.graphics.*;
import android.net.*;
import android.os.*;
import android.content.Context;
import android.graphics.Point;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.*;
import android.util.*;
import android.view.*;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import com.nostra13.universalimageloader.core.*;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.contributions.*;
import fr.free.nrw.commons.media.*;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
public class MultipleUploadListFragment extends Fragment {
@ -92,7 +107,6 @@ public class MultipleUploadListFragment extends Fragment {
}
return view;
}
}
@ -117,8 +131,8 @@ public class MultipleUploadListFragment extends Fragment {
int picWidth = Math.min((int) Math.sqrt(screenWidth * screenHeight / count), screenWidth);
picWidth = Math.min((int)(192 * screenMetrics.density), Math.max((int) (120 * screenMetrics.density), picWidth / 48 * 48));
int picHeight = Math.min(picWidth, (int)(192 * screenMetrics.density)); // Max Height is same as Contributions list
return new Point(picWidth, picHeight);
return new Point(picWidth, picHeight);
}
public void notifyDatasetChanged() {
@ -144,7 +158,6 @@ public class MultipleUploadListFragment extends Fragment {
photosGrid = (GridView)view.findViewById(R.id.multipleShareBackground);
baseTitle = (EditText)view.findViewById(R.id.multipleBaseTitle);
photosAdapter = new PhotoDisplayAdapter();
photosGrid.setAdapter(photosAdapter);
photosGrid.setOnItemClickListener((AdapterView.OnItemClickListener)getActivity());
@ -169,7 +182,6 @@ public class MultipleUploadListFragment extends Fragment {
}
}
detailProvider.notifyDatasetChanged();
}
public void afterTextChanged(Editable editable) {
@ -207,6 +219,5 @@ public class MultipleUploadListFragment extends Fragment {
setHasOptionsMenu(true);
}
}

View file

@ -13,7 +13,6 @@ import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

View file

@ -12,7 +12,6 @@ import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@ -241,8 +240,8 @@ public class ShareActivity
if(savedInstanceState != null) {
contribution = savedInstanceState.getParcelable("contribution");
}
requestAuthToken();
requestAuthToken();
Log.d(TAG, "Uri: " + mediaUriString);
Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory());

View file

@ -133,7 +133,6 @@ public class SingleUploadFragment extends Fragment {
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

View file

@ -79,7 +79,6 @@ public class UploadController {
public void startUpload(final Contribution contribution, final ContributionUploadProgress onComplete) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
if(TextUtils.isEmpty(contribution.getCreator())) {
@ -93,7 +92,6 @@ public class UploadController {
String license = prefs.getString(Prefs.DEFAULT_LICENSE, Prefs.Licenses.CC_BY_SA);
contribution.setLicense(license);
//FIXME: Add permission request here. Only executeAsyncTask if permission has been granted
Utils.executeAsyncTask(new AsyncTask<Void, Void, Contribution>() {

View file

@ -1,30 +1,41 @@
package fr.free.nrw.commons.upload;
import java.io.*;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.webkit.MimeTypeMap;
import android.widget.Toast;
import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.graphics.*;
import android.os.Bundle;
import fr.free.nrw.commons.*;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.EventLog;
import org.mediawiki.api.*;
import in.yuvi.http.fluent.ProgressListener;
import android.app.*;
import android.content.*;
import android.support.v4.app.NotificationCompat;
import android.util.*;
import android.webkit.MimeTypeMap;
import android.widget.*;
import fr.free.nrw.commons.contributions.*;
import fr.free.nrw.commons.HandlerService;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.contributions.ContributionsActivity;
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
import in.yuvi.http.fluent.ProgressListener;
public class UploadService extends HandlerService<Contribution> {
@ -146,7 +157,6 @@ public class UploadService extends HandlerService<Contribution> {
default:
throw new IllegalArgumentException("Unknown value for what");
}
}
private boolean freshStart = true;
@ -235,7 +245,6 @@ public class UploadService extends HandlerService<Contribution> {
curProgressNotification = null;
String resultStatus = result.getString("/api/upload/@result");
if(!resultStatus.equals("Success")) {
String errorCode = result.getString("/api/error/@code");
@ -281,7 +290,6 @@ public class UploadService extends HandlerService<Contribution> {
stopForeground(true);
}
}
}
private void showFailedNotification(Contribution contribution) {