From 8255bac32e06eee9c19adfcb5788c44dc347eb69 Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 15:15:21 -0400 Subject: [PATCH 1/9] Don't store Activity instance in adapter. --- .../commons/contributions/ContributionsActivity.java | 2 +- .../contributions/ContributionsListAdapter.java | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index b23bf7fbb..e1d39db06 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -227,7 +227,7 @@ public class ContributionsActivity @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { if(contributionsList.getAdapter() == null) { - contributionsList.setAdapter(new ContributionsListAdapter(this, cursor, 0)); + contributionsList.setAdapter(new ContributionsListAdapter(getApplicationContext(), cursor, 0)); } else { ((CursorAdapter)contributionsList.getAdapter()).swapCursor(cursor); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java index 08ed3198c..d34d74a5a 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java @@ -1,25 +1,23 @@ package fr.free.nrw.commons.contributions; -import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import fr.free.nrw.commons.R; class ContributionsListAdapter extends CursorAdapter { - private Activity activity; - public ContributionsListAdapter(Activity activity, Cursor c, int flags) { - super(activity, c, flags); - this.activity = activity; + public ContributionsListAdapter(Context context, Cursor c, int flags) { + super(context, c, flags); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { - View parent = activity.getLayoutInflater().inflate(R.layout.layout_contribution, viewGroup, false); + View parent = LayoutInflater.from(context).inflate(R.layout.layout_contribution, viewGroup, false); parent.setTag(new ContributionViewHolder(parent)); return parent; } From 1809475feae13bfd4795c14877d919b87f1ba4cf Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 15:34:10 -0400 Subject: [PATCH 2/9] Don't require Activity to be passed into UploadController. --- .../commons/upload/MultipleShareActivity.java | 2 +- .../nrw/commons/upload/ShareActivity.java | 2 +- .../nrw/commons/upload/UploadController.java | 26 ++++++++----------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 12b38a6ab..944c86edc 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -203,7 +203,7 @@ public class MultipleShareActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - uploadController = new UploadController(this); + uploadController = new UploadController(); setContentView(R.layout.activity_multiple_uploads); app = CommonsApplication.getInstance(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 5aca73a04..924557905 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -214,7 +214,7 @@ public class ShareActivity @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - uploadController = new UploadController(this); + uploadController = new UploadController(); setContentView(R.layout.activity_share); ButterKnife.bind(this); initBack(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index 4266384c1..cc3263460 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -1,6 +1,5 @@ package fr.free.nrw.commons.upload; -import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -26,16 +25,13 @@ import timber.log.Timber; public class UploadController { private UploadService uploadService; - - private final Activity activity; - final CommonsApplication app; + private final CommonsApplication app; public interface ContributionUploadProgress { void onUploadStarted(Contribution contribution); } - public UploadController(Activity activity) { - this.activity = activity; + public UploadController() { app = CommonsApplication.getInstance(); } @@ -55,15 +51,15 @@ public class UploadController { }; public void prepareService() { - Intent uploadServiceIntent = new Intent(activity, UploadService.class); + Intent uploadServiceIntent = new Intent(app, UploadService.class); uploadServiceIntent.setAction(UploadService.ACTION_START_SERVICE); - activity.startService(uploadServiceIntent); - activity.bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE); + app.startService(uploadServiceIntent); + app.bindService(uploadServiceIntent, uploadServiceConnection, Context.BIND_AUTO_CREATE); } public void cleanup() { if(isUploadServiceConnected) { - activity.unbindService(uploadServiceConnection); + app.unbindService(uploadServiceConnection); } } @@ -82,7 +78,7 @@ public class UploadController { public void startUpload(final Contribution contribution, final ContributionUploadProgress onComplete) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(app); //Set creator, desc, and license if(TextUtils.isEmpty(contribution.getCreator())) { @@ -107,10 +103,10 @@ public class UploadController { long length; try { if(contribution.getDataLength() <= 0) { - length = activity.getContentResolver().openAssetFileDescriptor(contribution.getLocalUri(), "r").getLength(); + length = app.getContentResolver().openAssetFileDescriptor(contribution.getLocalUri(), "r").getLength(); if(length == -1) { // Let us find out the long way! - length = Utils.countBytes(activity.getContentResolver().openInputStream(contribution.getLocalUri())); + length = Utils.countBytes(app.getContentResolver().openInputStream(contribution.getLocalUri())); } contribution.setDataLength(length); } @@ -126,7 +122,7 @@ public class UploadController { Boolean imagePrefix = false; if(mimeType == null || TextUtils.isEmpty(mimeType) || mimeType.endsWith("*")) { - mimeType = activity.getContentResolver().getType(contribution.getLocalUri()); + mimeType = app.getContentResolver().getType(contribution.getLocalUri()); } if(mimeType != null) { @@ -136,7 +132,7 @@ public class UploadController { } if(imagePrefix && contribution.getDateCreated() == null) { - Cursor cursor = activity.getContentResolver().query(contribution.getLocalUri(), + Cursor cursor = app.getContentResolver().query(contribution.getLocalUri(), new String[]{MediaStore.Images.ImageColumns.DATE_TAKEN}, null, null, null); if(cursor != null && cursor.getCount() != 0) { cursor.moveToFirst(); From b07432fce264ac7d9d1b8fe0c9a521d686b67d6a Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 16:18:27 -0400 Subject: [PATCH 3/9] Don't pass Activity into GPSExtractor. --- .../main/java/fr/free/nrw/commons/upload/FileUtils.java | 2 +- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 9 ++++----- .../java/fr/free/nrw/commons/upload/ShareActivity.java | 6 +++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java b/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java index 0c587d566..206e44f81 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java @@ -23,7 +23,7 @@ public class FileUtils { */ // Can be safely suppressed, checks for isKitKat before running isDocumentUri @SuppressLint("NewApi") - public static String getPath(final Context context, final Uri uri) { + public static String getPath(Context context, Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 6d1a2ac95..1954dcb69 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -13,6 +13,7 @@ import android.support.annotation.Nullable; import java.io.IOException; +import fr.free.nrw.commons.CommonsApplication; import timber.log.Timber; /** @@ -26,15 +27,13 @@ public class GPSExtractor { private double decLatitude, decLongitude; private Double currentLatitude = null; private Double currentLongitude = null; - private Context context; public boolean imageCoordsExists; private MyLocationListener myLocationListener; private LocationManager locationManager; - public GPSExtractor(String filePath, Context context){ + public GPSExtractor(String filePath){ this.filePath = filePath; - this.context = context; } /** @@ -42,7 +41,7 @@ public class GPSExtractor { * @return true if enabled, false if disabled */ private boolean gpsPreferenceEnabled() { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(CommonsApplication.getInstance()); boolean gpsPref = sharedPref.getBoolean("allowGps", false); Timber.d("Gps pref set to: %b", gpsPref); return gpsPref; @@ -52,7 +51,7 @@ public class GPSExtractor { * Registers a LocationManager to listen for current location */ protected void registerLocationManager() { - locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + locationManager = (LocationManager) CommonsApplication.getInstance().getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 924557905..9372c78c0 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -196,7 +196,7 @@ public class ShareActivity categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization"); if(shareView == null && categorizationFragment == null) { shareView = new SingleUploadFragment(); - this.getSupportFragmentManager() + getSupportFragmentManager() .beginTransaction() .add(R.id.single_upload_fragment_container, shareView, "shareView") .commitAllowingStateLoss(); @@ -373,11 +373,11 @@ public class ShareActivity * @param gpsEnabled */ public void getFileMetadata(boolean gpsEnabled) { - String filePath = FileUtils.getPath(this, mediaUri); + String filePath = FileUtils.getPath(getApplicationContext(), mediaUri); Timber.d("Filepath: %s", filePath); Timber.d("Calling GPSExtractor"); if(imageObj == null) { - imageObj = new GPSExtractor(filePath, this); + imageObj = new GPSExtractor(filePath); } if (filePath != null && !filePath.equals("")) { From bb5a6691f170183c63e9b3fd88d5b79216bb9759 Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 16:20:55 -0400 Subject: [PATCH 4/9] Don't pass Activity into MwVolleyApi. --- .../java/fr/free/nrw/commons/upload/MwVolleyApi.java | 12 +++--------- .../fr/free/nrw/commons/upload/ShareActivity.java | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java index 1f538d201..666b8cb31 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java @@ -1,6 +1,5 @@ package fr.free.nrw.commons.upload; -import android.content.Context; import android.net.Uri; import com.android.volley.Cache; @@ -21,6 +20,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import fr.free.nrw.commons.CommonsApplication; import timber.log.Timber; /** @@ -32,15 +32,13 @@ public class MwVolleyApi { private static RequestQueue REQUEST_QUEUE; private static final Gson GSON = new GsonBuilder().create(); - private Context context; protected static Set categorySet; private static List categoryList; private static final String MWURL = "https://commons.wikimedia.org/"; - public MwVolleyApi(Context context) { - this.context = context; + public MwVolleyApi() { categorySet = new HashSet<>(); } @@ -94,12 +92,8 @@ public class MwVolleyApi { } private synchronized RequestQueue getQueue() { - return getQueue(context); - } - - private static RequestQueue getQueue(Context context) { if (REQUEST_QUEUE == null) { - REQUEST_QUEUE = Volley.newRequestQueue(context); + REQUEST_QUEUE = Volley.newRequestQueue(CommonsApplication.getInstance()); } return REQUEST_QUEUE; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 9372c78c0..c600ed263 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -402,7 +402,7 @@ public class ShareActivity app.getCacheData().setQtPoint(decLongitude, decLatitude); } - MwVolleyApi apiCall = new MwVolleyApi(this); + MwVolleyApi apiCall = new MwVolleyApi(); List displayCatList = app.getCacheData().findCategory(); boolean catListEmpty = displayCatList.isEmpty(); From dea43c04b901aded34b3fb8da696f1e0df6e6674 Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 16:32:00 -0400 Subject: [PATCH 5/9] Make sure to remove backstackChangeListener when finished. --- .../fr/free/nrw/commons/auth/LoginActivity.java | 9 +++++---- .../contributions/ContributionsActivity.java | 1 + .../nrw/commons/upload/MultipleShareActivity.java | 13 +++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 0bec4bac6..a42fef7cf 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -43,7 +43,6 @@ public class LoginActivity extends AccountAuthenticatorActivity { app = CommonsApplication.getInstance(); setContentView(R.layout.activity_login); - final LoginActivity that = this; loginButton = (Button) findViewById(R.id.loginButton); Button signupButton = (Button) findViewById(R.id.signupButton); @@ -62,12 +61,14 @@ public class LoginActivity extends AccountAuthenticatorActivity { loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - that.performLogin(); + performLogin(); } }); signupButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View v) { that.signUp(v); } + public void onClick(View v) { + signUp(v); + } }); } @@ -115,7 +116,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { protected void onResume() { super.onResume(); if (prefs.getBoolean("firstrun", true)) { - this.startWelcomeIntent(); + startWelcomeIntent(); prefs.edit().putBoolean("firstrun", false).apply(); } if (app.getCurrentAccount() != null) { diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index e1d39db06..48b69b38b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -81,6 +81,7 @@ public class ContributionsActivity @Override protected void onDestroy() { + getSupportFragmentManager().removeOnBackStackChangedListener(this); super.onDestroy(); if(isUploadServiceConnected) { unbindService(uploadServiceConnection); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 944c86edc..5a4ea62b8 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -115,7 +115,7 @@ public class MultipleShareActivity Timber.d("Multiple upload begins"); - final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); + final ProgressDialog dialog = new ProgressDialog(this); dialog.setIndeterminate(false); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setMax(photosList.size()); @@ -145,12 +145,12 @@ public class MultipleShareActivity uploadsList.setImageOnlyMode(true); - categorizationFragment = (CategorizationFragment) this.getSupportFragmentManager().findFragmentByTag("categorization"); + categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization"); if(categorizationFragment == null) { categorizationFragment = new CategorizationFragment(); } // FIXME: Stops the keyboard from being shown 'stale' while moving out of this fragment into the next - View target = this.getCurrentFocus(); + View target = getCurrentFocus(); if (target != null) { InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(target.getWindowToken(), 0); @@ -221,18 +221,19 @@ public class MultipleShareActivity @Override protected void onDestroy() { super.onDestroy(); + getSupportFragmentManager().removeOnBackStackChangedListener(this); uploadController.cleanup(); } private void showDetail(int i) { if(mediaDetails == null ||!mediaDetails.isVisible()) { mediaDetails = new MediaDetailPagerFragment(true); - this.getSupportFragmentManager() + getSupportFragmentManager() .beginTransaction() .replace(R.id.uploadsFragmentContainer, mediaDetails) .addToBackStack(null) .commit(); - this.getSupportFragmentManager().executePendingTransactions(); + getSupportFragmentManager().executePendingTransactions(); } mediaDetails.showImage(i); } @@ -267,7 +268,7 @@ public class MultipleShareActivity uploadsList = (MultipleUploadListFragment) getSupportFragmentManager().findFragmentByTag("uploadsList"); if(uploadsList == null) { uploadsList = new MultipleUploadListFragment(); - this.getSupportFragmentManager() + getSupportFragmentManager() .beginTransaction() .add(R.id.uploadsFragmentContainer, uploadsList, "uploadsList") .commit(); From de1a3144cc1385b7500bc165ee21117a9d47b5ed Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 16:38:34 -0400 Subject: [PATCH 6/9] Don't pass Activity into WelcomePagerAdapter. --- .../fr/free/nrw/commons/WelcomeActivity.java | 3 +-- .../free/nrw/commons/WelcomePagerAdapter.java | 21 +++++-------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java index dab21a6e6..822d7f91a 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java @@ -28,8 +28,7 @@ public class WelcomeActivity extends BaseActivity { } private void setUpAdapter() { - WelcomePagerAdapter adapter = new WelcomePagerAdapter(this); - pager.setAdapter(adapter); + pager.setAdapter(new WelcomePagerAdapter()); indicator.setViewPager(pager); } } diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java b/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java index 6da880694..cb4db4f65 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons; import android.app.Activity; -import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; @@ -11,9 +10,6 @@ import butterknife.ButterKnife; import butterknife.OnClick; public class WelcomePagerAdapter extends PagerAdapter { - - private Context context; - private static final int PAGE_FINAL = 4; static final int[] PAGE_LAYOUTS = new int[]{ @@ -24,10 +20,6 @@ public class WelcomePagerAdapter extends PagerAdapter { R.layout.welcome_final }; - public WelcomePagerAdapter(Context context) { - this.context = context; - } - @Override public int getCount() { return PAGE_LAYOUTS.length; @@ -40,11 +32,11 @@ public class WelcomePagerAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { - LayoutInflater inflater = LayoutInflater.from(context); + LayoutInflater inflater = LayoutInflater.from(container.getContext()); ViewGroup layout = (ViewGroup) inflater.inflate(PAGE_LAYOUTS[position], container, false); if (position == PAGE_FINAL) { - ViewHolder holder = new ViewHolder(layout, context); + ViewHolder holder = new ViewHolder(layout); layout.setTag(holder); } container.addView(layout); @@ -57,16 +49,13 @@ public class WelcomePagerAdapter extends PagerAdapter { } public static class ViewHolder { - private Context context; - - public ViewHolder(View view, Context context) { + public ViewHolder(View view) { ButterKnife.bind(this, view); - this.context = context; } @OnClick(R.id.welcomeYesButton) - void onClicked() { - ((Activity) context).finish(); + void onClicked(View view) { + ((Activity) view.getContext()).finish(); } } } From 8656098dc51f669058aa5dbfddb38ae2a5d7a84b Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 16:41:38 -0400 Subject: [PATCH 7/9] Fix lint issues. --- .../commons/contributions/ContributionsActivity.java | 3 ++- .../contributions/ContributionsListAdapter.java | 3 ++- .../java/fr/free/nrw/commons/upload/GPSExtractor.java | 8 +++++--- .../fr/free/nrw/commons/upload/ShareActivity.java | 11 +++++------ .../fr/free/nrw/commons/upload/UploadController.java | 7 +++++-- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 48b69b38b..1586d8202 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -228,7 +228,8 @@ public class ContributionsActivity @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { if(contributionsList.getAdapter() == null) { - contributionsList.setAdapter(new ContributionsListAdapter(getApplicationContext(), cursor, 0)); + contributionsList + .setAdapter(new ContributionsListAdapter(getApplicationContext(), cursor, 0)); } else { ((CursorAdapter)contributionsList.getAdapter()).swapCursor(cursor); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java index d34d74a5a..0882d09c4 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListAdapter.java @@ -17,7 +17,8 @@ class ContributionsListAdapter extends CursorAdapter { @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { - View parent = LayoutInflater.from(context).inflate(R.layout.layout_contribution, viewGroup, false); + View parent = LayoutInflater.from(context) + .inflate(R.layout.layout_contribution, viewGroup, false); parent.setTag(new ContributionViewHolder(parent)); return parent; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index 1954dcb69..ab006bd94 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -32,7 +32,7 @@ public class GPSExtractor { private LocationManager locationManager; - public GPSExtractor(String filePath){ + public GPSExtractor(String filePath) { this.filePath = filePath; } @@ -41,7 +41,8 @@ public class GPSExtractor { * @return true if enabled, false if disabled */ private boolean gpsPreferenceEnabled() { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(CommonsApplication.getInstance()); + SharedPreferences sharedPref + = PreferenceManager.getDefaultSharedPreferences(CommonsApplication.getInstance()); boolean gpsPref = sharedPref.getBoolean("allowGps", false); Timber.d("Gps pref set to: %b", gpsPref); return gpsPref; @@ -51,7 +52,8 @@ public class GPSExtractor { * Registers a LocationManager to listen for current location */ protected void registerLocationManager() { - locationManager = (LocationManager) CommonsApplication.getInstance().getSystemService(Context.LOCATION_SERVICE); + locationManager = (LocationManager) CommonsApplication.getInstance() + .getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); myLocationListener = new MyLocationListener(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index c600ed263..f88cdd0f2 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -60,7 +60,6 @@ public class ShareActivity private UploadController uploadController; - private CommonsApplication cacheObj; private boolean cacheFound; private GPSExtractor imageObj; @@ -195,11 +194,11 @@ public class ShareActivity SingleUploadFragment shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView"); categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization"); if(shareView == null && categorizationFragment == null) { - shareView = new SingleUploadFragment(); - getSupportFragmentManager() - .beginTransaction() - .add(R.id.single_upload_fragment_container, shareView, "shareView") - .commitAllowingStateLoss(); + shareView = new SingleUploadFragment(); + getSupportFragmentManager() + .beginTransaction() + .add(R.id.single_upload_fragment_container, shareView, "shareView") + .commitAllowingStateLoss(); } uploadController.prepareService(); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index cc3263460..832062ed5 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -103,10 +103,13 @@ public class UploadController { long length; try { if(contribution.getDataLength() <= 0) { - length = app.getContentResolver().openAssetFileDescriptor(contribution.getLocalUri(), "r").getLength(); + length = app.getContentResolver() + .openAssetFileDescriptor(contribution.getLocalUri(), "r") + .getLength(); if(length == -1) { // Let us find out the long way! - length = Utils.countBytes(app.getContentResolver().openInputStream(contribution.getLocalUri())); + length = Utils.countBytes(app.getContentResolver() + .openInputStream(contribution.getLocalUri())); } contribution.setDataLength(length); } From 040789ca2ec0c699f9a9cd9b968de5d115ff4749 Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 17:06:03 -0400 Subject: [PATCH 8/9] Use callback pattern in Welcome activity/adapter. --- .../fr/free/nrw/commons/WelcomeActivity.java | 17 +++++++++++---- .../free/nrw/commons/WelcomePagerAdapter.java | 21 ++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java index 822d7f91a..007e0e7ab 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java @@ -13,6 +13,7 @@ public class WelcomeActivity extends BaseActivity { @BindView(R.id.welcomePager) ViewPager pager; @BindView(R.id.welcomePagerIndicator) CirclePageIndicator indicator; + private WelcomePagerAdapter adapter = new WelcomePagerAdapter(); @Override public void onCreate(Bundle savedInstanceState) { @@ -24,11 +25,19 @@ public class WelcomeActivity extends BaseActivity { } ButterKnife.bind(this); - setUpAdapter(); + pager.setAdapter(adapter); + indicator.setViewPager(pager); + adapter.setCallback(new WelcomePagerAdapter.Callback() { + @Override + public void onYesClicked() { + finish(); + } + }); } - private void setUpAdapter() { - pager.setAdapter(new WelcomePagerAdapter()); - indicator.setViewPager(pager); + @Override + public void onDestroy() { + adapter.setCallback(null); + super.onDestroy(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java b/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java index cb4db4f65..9669196e9 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java @@ -1,6 +1,6 @@ package fr.free.nrw.commons; -import android.app.Activity; +import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; @@ -11,6 +11,11 @@ import butterknife.OnClick; public class WelcomePagerAdapter extends PagerAdapter { private static final int PAGE_FINAL = 4; + private Callback callback; + + public interface Callback { + void onYesClicked(); + } static final int[] PAGE_LAYOUTS = new int[]{ R.layout.welcome_wikipedia, @@ -20,6 +25,10 @@ public class WelcomePagerAdapter extends PagerAdapter { R.layout.welcome_final }; + public void setCallback(@Nullable Callback callback) { + this.callback = callback; + } + @Override public int getCount() { return PAGE_LAYOUTS.length; @@ -48,14 +57,16 @@ public class WelcomePagerAdapter extends PagerAdapter { container.removeView((View) obj); } - public static class ViewHolder { - public ViewHolder(View view) { + class ViewHolder { + ViewHolder(View view) { ButterKnife.bind(this, view); } @OnClick(R.id.welcomeYesButton) - void onClicked(View view) { - ((Activity) view.getContext()).finish(); + void onClicked() { + if (callback != null) { + callback.onYesClicked(); + } } } } From 5ab060567a64d0fe97edc8689af02ae22485de46 Mon Sep 17 00:00:00 2001 From: Dmitry Brant Date: Fri, 26 May 2017 17:37:18 -0400 Subject: [PATCH 9/9] Fix vector placeholder images in API <21. --- .../fr/free/nrw/commons/MediaWikiImageView.java | 15 +++++++++++++++ .../upload/MultipleUploadListFragment.java | 11 ++++++++++- .../fr/free/nrw/commons/upload/ShareActivity.java | 9 +++++++++ app/src/main/res/layout/activity_share.xml | 4 +--- app/src/main/res/layout/fragment_media_detail.xml | 2 -- app/src/main/res/layout/layout_contribution.xml | 2 -- app/src/main/res/layout/layout_upload_item.xml | 2 -- 7 files changed, 35 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java index ccb75a3dd..bd64f77cb 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java @@ -3,9 +3,11 @@ package fr.free.nrw.commons; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.graphics.drawable.VectorDrawableCompat; import android.text.TextUtils; import android.util.AttributeSet; +import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; public class MediaWikiImageView extends SimpleDraweeView { @@ -13,14 +15,17 @@ public class MediaWikiImageView extends SimpleDraweeView { public MediaWikiImageView(Context context) { this(context, null); + init(); } public MediaWikiImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); + init(); } public MediaWikiImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + init(); } public void setMedia(Media media) { @@ -48,6 +53,16 @@ public class MediaWikiImageView extends SimpleDraweeView { super.onDetachedFromWindow(); } + private void init() { + setHierarchy(GenericDraweeHierarchyBuilder + .newInstance(getResources()) + .setPlaceholderImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_image_black_24dp, getContext().getTheme())) + .setFailureImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_image_black_24dp, getContext().getTheme())) + .build()); + } + private void setImageUrl(@Nullable String url) { setImageURI(url); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java index 52da98f54..b6ca9e598 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java @@ -4,7 +4,9 @@ import android.content.Context; import android.graphics.Point; import android.net.Uri; import android.os.Bundle; +import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -24,6 +26,7 @@ import android.widget.GridView; import android.widget.RelativeLayout; import android.widget.TextView; +import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; import fr.free.nrw.commons.R; @@ -82,7 +85,13 @@ public class MultipleUploadListFragment extends Fragment { holder.overlay = (RelativeLayout) view.findViewById(R.id.uploadOverlay); holder.image.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, photoSize.y)); - + holder.image.setHierarchy(GenericDraweeHierarchyBuilder + .newInstance(getResources()) + .setPlaceholderImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_image_black_24dp, getContext().getTheme())) + .setFailureImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_error_outline_black_24dp, getContext().getTheme())) + .build()); view.setTag(holder); } else { holder = (UploadHolderView)view.getTag(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index f88cdd0f2..5d9ec5fa1 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -9,6 +9,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.support.design.widget.Snackbar; +import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.view.MenuItem; @@ -16,6 +17,7 @@ import android.view.View; import android.widget.TextView; import android.widget.Toast; +import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; import java.io.IOException; @@ -219,6 +221,13 @@ public class ShareActivity initBack(); app = CommonsApplication.getInstance(); backgroundImageView = (SimpleDraweeView)findViewById(R.id.backgroundImage); + backgroundImageView.setHierarchy(GenericDraweeHierarchyBuilder + .newInstance(getResources()) + .setPlaceholderImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_image_black_24dp, getTheme())) + .setFailureImage(VectorDrawableCompat.create(getResources(), + R.drawable.ic_error_outline_black_24dp, getTheme())) + .build()); //Receive intent from ContributionController.java when user selects picture to upload Intent intent = getIntent(); diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index d2fd9ee74..2e53e2c76 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -26,9 +26,7 @@ android:id="@+id/backgroundImage" android:layout_width="match_parent" android:layout_height="match_parent" - app:actualImageScaleType="centerCrop" - app:placeholderImage="@drawable/ic_image_black_24dp" - app:failureImage="@drawable/ic_error_outline_black_24dp" /> + app:actualImageScaleType="centerCrop" />