From d252275b7cf0651aeb31013efd765a0ba079a5aa Mon Sep 17 00:00:00 2001 From: misaochan Date: Mon, 23 Apr 2018 21:56:48 +1000 Subject: [PATCH 01/11] Fix error during merge conflict resolution --- .../main/java/fr/free/nrw/commons/nearby/NearbyActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index d1c6ae717..2a423de93 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -369,7 +369,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp Gson gson = new GsonBuilder() .registerTypeAdapter(Uri.class, new UriSerializer()) .create(); - String gsonCurLatLng = gson.toJson(curLatLang); + String gsonCurLatLng = gson.toJson(curLatLng); bundle.clear(); bundle.putString("CurLatLng", gsonCurLatLng); From fab3d32a8c5f8fbfbc4e7e4858b56680a83db367 Mon Sep 17 00:00:00 2001 From: misaochan Date: Tue, 24 Apr 2018 01:31:24 +1000 Subject: [PATCH 02/11] Remove author Javadocs for FeaturedImagesListFragment.java As mentioned at #1451 . Travis will fail prior to merge of #1460 --- .../nrw/commons/featured/FeaturedImagesListFragment.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/featured/FeaturedImagesListFragment.java b/app/src/main/java/fr/free/nrw/commons/featured/FeaturedImagesListFragment.java index 3e5c37bd6..19e33b0ee 100644 --- a/app/src/main/java/fr/free/nrw/commons/featured/FeaturedImagesListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/featured/FeaturedImagesListFragment.java @@ -16,11 +16,6 @@ import dagger.android.support.DaggerFragment; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; - -/** - * Created by root on 09.01.2018. - */ - public class FeaturedImagesListFragment extends DaggerFragment { private GridView gridView; private MockGridViewAdapter gridAdapter; From 9c91d7a799e332cf4d98dca6bb3fc9dc0f95189b Mon Sep 17 00:00:00 2001 From: Tanvi Dadu Date: Thu, 26 Apr 2018 03:18:58 +0530 Subject: [PATCH 03/11] Zoom (#1300) * Basic Zoom feature added along with button to control it * Pinch Zoom added * Merge Conflicts Resolved * Icons Changed * Compressed the high resolution images * Fixed null pointer exception * Fixed null pointer exception * Fixed exception * Fixed error * Fixed Resource availability issue --- app/build.gradle | 1 + .../upload/MultipleUploadListFragment.java | 1 - .../nrw/commons/upload/ShareActivity.java | 223 ++++++++++++++++++ .../commons/upload/SingleUploadFragment.java | 3 + .../drawable-hdpi/ic_zoom_in_white_24dp.png | Bin 0 -> 422 bytes .../drawable-hdpi/ic_zoom_out_white_24dp.png | Bin 0 -> 412 bytes .../drawable-mdpi/ic_zoom_in_white_24dp.png | Bin 0 -> 257 bytes .../drawable-mdpi/ic_zoom_out_white_24dp.png | Bin 0 -> 249 bytes .../drawable-xhdpi/ic_zoom_in_white_24dp.png | Bin 0 -> 486 bytes .../drawable-xhdpi/ic_zoom_out_white_24dp.png | Bin 0 -> 470 bytes .../drawable-xxhdpi/ic_zoom_in_white_24dp.png | Bin 0 -> 737 bytes .../ic_zoom_out_white_24dp.png | Bin 0 -> 731 bytes .../ic_zoom_in_white_24dp.png | Bin 0 -> 954 bytes .../ic_zoom_out_white_24dp.png | Bin 0 -> 925 bytes .../res/drawable/ic_zoom_in_white_24dp.png | Bin 0 -> 422 bytes .../res/drawable/ic_zoom_out_white_24dp.png | Bin 0 -> 412 bytes app/src/main/res/layout/activity_share.xml | 31 ++- .../res/layout/fragment_single_upload.xml | 1 + .../main/res/layout/layout_upload_item.xml | 1 + 19 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_zoom_out_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_zoom_out_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_zoom_in_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_zoom_out_white_24dp.png diff --git a/app/build.gradle b/app/build.gradle index 5bafd3f15..3a7547d58 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation 'com.github.nicolas-raoul:Quadtree:ac16ea8035bf07' implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' implementation 'in.yuvi:http.fluent:1.3' + implementation 'com.github.chrisbanes:PhotoView:2.0.0' implementation 'com.android.volley:volley:1.0.0' implementation 'ch.acra:acra:4.9.2' implementation 'org.mediawiki:api:1.3' 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 5b39b92f7..34fe1d0cb 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 @@ -11,7 +11,6 @@ import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.DisplayMetrics; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; 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 aca17601c..aea703f5e 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 @@ -2,33 +2,50 @@ package fr.free.nrw.commons.upload; import android.Manifest; import android.app.Activity; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapRegionDecoder; +import android.graphics.Point; +import android.graphics.Rect; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.ParcelFileDescriptor; +import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; +import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.BitmapCompat; import android.support.v7.app.AlertDialog; +import android.util.Log; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; +import android.view.animation.DecelerateInterpolator; +import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; +import com.github.chrisbanes.photoview.PhotoView; + import java.io.File; import java.io.FileNotFoundException; @@ -63,8 +80,11 @@ import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.mwapi.MediaWikiApi; import timber.log.Timber; + + import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.DUPLICATE_PROCEED; import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.NO_DUPLICATE; +import static java.lang.Long.min; /** * Activity for the title/desc screen after image is selected. Also starts processing image @@ -120,6 +140,12 @@ public class ShareActivity private boolean haveCheckedForOtherImages = false; private boolean isNearbyUpload = false; + private Animator CurrentAnimator; + private long ShortAnimationDuration; + private FloatingActionButton zoomInButton; + private FloatingActionButton zoomOutButton; + + /** * Called when user taps the submit button. */ @@ -257,6 +283,18 @@ public class ShareActivity if (mediaUri != null) { backgroundImageView.setImageURI(mediaUri); } + zoomInButton = (FloatingActionButton) findViewById(R.id.media_upload_zoom_in); + try { + zoomInButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + zoomImageFromThumb(backgroundImageView, mediaUri); + } + }); + } catch (Exception e){ + Log.i("exception", e.toString()); + } + zoomOutButton = (FloatingActionButton) findViewById(R.id.media_upload_zoom_out); if (savedInstanceState != null) { contribution = savedInstanceState.getParcelable("contribution"); @@ -690,4 +728,189 @@ public class ShareActivity } } } + + private void zoomImageFromThumb(final View thumbView, Uri imageuri ) { + // If there's an animation in progress, cancel it + // immediately and proceed with this one. + if (CurrentAnimator != null) { + CurrentAnimator.cancel(); + } + hideKeyboard(ShareActivity.this); + InputStream input = null; + Bitmap scaled = null; + try { + input = this.getContentResolver().openInputStream(imageuri); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + BitmapRegionDecoder decoder = null; + try { + decoder = BitmapRegionDecoder.newInstance(input, false); + } catch (IOException e) { + e.printStackTrace(); + } + Bitmap bitmap = decoder.decodeRegion(new Rect(10, 10, 50, 50), null); + try { + //Compress the Image + System.gc(); + Runtime rt = Runtime.getRuntime(); + long maxMemory = rt.freeMemory(); + bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageuri); + int bitmapByteCount= BitmapCompat.getAllocationByteCount(bitmap); + long height = bitmap.getHeight(); + long width = bitmap.getWidth(); + long calHeight = (long) ((height * maxMemory)/(bitmapByteCount * 1.1)); + long calWidth = (long) ((width * maxMemory)/(bitmapByteCount * 1.1)); + scaled = Bitmap.createScaledBitmap(bitmap,(int) Math.min(width,calWidth), (int) Math.min(height,calHeight), true); + } catch (IOException e) { + } catch (NullPointerException e){ + scaled = bitmap; + } + // Load the high-resolution "zoomed-in" image. + PhotoView expandedImageView = (PhotoView) findViewById( + R.id.expanded_image); + expandedImageView.setImageBitmap(scaled); + + + + // Calculate the starting and ending bounds for the zoomed-in image. + // This step involves lots of math. Yay, math. + final Rect startBounds = new Rect(); + final Rect finalBounds = new Rect(); + final Point globalOffset = new Point(); + + // The start bounds are the global visible rectangle of the thumbnail, + // and the final bounds are the global visible rectangle of the container + // view. Also set the container view's offset as the origin for the + // bounds, since that's the origin for the positioning animation + // properties (X, Y). + thumbView.getGlobalVisibleRect(startBounds); + findViewById(R.id.container) + .getGlobalVisibleRect(finalBounds, globalOffset); + startBounds.offset(-globalOffset.x, -globalOffset.y); + finalBounds.offset(-globalOffset.x, -globalOffset.y); + + // Adjust the start bounds to be the same aspect ratio as the final + // bounds using the "center crop" technique. This prevents undesirable + // stretching during the animation. Also calculate the start scaling + // factor (the end scaling factor is always 1.0). + float startScale; + if ((float) finalBounds.width() / finalBounds.height() + > (float) startBounds.width() / startBounds.height()) { + // Extend start bounds horizontally + startScale = (float) startBounds.height() / finalBounds.height(); + float startWidth = startScale * finalBounds.width(); + float deltaWidth = (startWidth - startBounds.width()) / 2; + startBounds.left -= deltaWidth; + startBounds.right += deltaWidth; + } else { + // Extend start bounds vertically + startScale = (float) startBounds.width() / finalBounds.width(); + float startHeight = startScale * finalBounds.height(); + float deltaHeight = (startHeight - startBounds.height()) / 2; + startBounds.top -= deltaHeight; + startBounds.bottom += deltaHeight; + } + + // Hide the thumbnail and show the zoomed-in view. When the animation + // begins, it will position the zoomed-in view in the place of the + // thumbnail. + thumbView.setAlpha(0f); + expandedImageView.setVisibility(View.VISIBLE); + zoomOutButton.setVisibility(View.VISIBLE); + zoomInButton.setVisibility(View.GONE); + + // Set the pivot point for SCALE_X and SCALE_Y transformations + // to the top-left corner of the zoomed-in view (the default + // is the center of the view). + expandedImageView.setPivotX(0f); + expandedImageView.setPivotY(0f); + + // Construct and run the parallel animation of the four translation and + // scale properties (X, Y, SCALE_X, and SCALE_Y). + AnimatorSet set = new AnimatorSet(); + set + .play(ObjectAnimator.ofFloat(expandedImageView, View.X, + startBounds.left, finalBounds.left)) + .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, + startBounds.top, finalBounds.top)) + .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, + startScale, 1f)) + .with(ObjectAnimator.ofFloat(expandedImageView, + View.SCALE_Y, startScale, 1f)); + set.setDuration(ShortAnimationDuration); + set.setInterpolator(new DecelerateInterpolator()); + set.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + CurrentAnimator = null; + } + + @Override + public void onAnimationCancel(Animator animation) { + CurrentAnimator = null; + } + }); + set.start(); + CurrentAnimator = set; + + // Upon clicking the zoomed-in image, it should zoom back down + // to the original bounds and show the thumbnail instead of + // the expanded image. + final float startScaleFinal = startScale; + zoomOutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (CurrentAnimator != null) { + CurrentAnimator.cancel(); + } + zoomOutButton.setVisibility(View.GONE); + zoomInButton.setVisibility(View.VISIBLE); + + // Animate the four positioning/sizing properties in parallel, + // back to their original values. + AnimatorSet set = new AnimatorSet(); + set.play(ObjectAnimator + .ofFloat(expandedImageView, View.X, startBounds.left)) + .with(ObjectAnimator + .ofFloat(expandedImageView, + View.Y,startBounds.top)) + .with(ObjectAnimator + .ofFloat(expandedImageView, + View.SCALE_X, startScaleFinal)) + .with(ObjectAnimator + .ofFloat(expandedImageView, + View.SCALE_Y, startScaleFinal)); + set.setDuration(ShortAnimationDuration); + set.setInterpolator(new DecelerateInterpolator()); + set.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + thumbView.setAlpha(1f); + expandedImageView.setVisibility(View.GONE); + CurrentAnimator = null; + } + + @Override + public void onAnimationCancel(Animator animation) { + thumbView.setAlpha(1f); + expandedImageView.setVisibility(View.GONE); + CurrentAnimator = null; + } + }); + set.start(); + CurrentAnimator = set; + + } + + }); + } + public static void hideKeyboard(Activity activity) { + View view = activity.findViewById(R.id.titleEdit | R.id.descEdit); + if (view != null) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index a88d03c03..d0e38dafe 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -11,6 +11,7 @@ import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.design.widget.FloatingActionButton; import android.support.v4.view.ViewCompat; import android.support.v7.app.AlertDialog; import android.text.Editable; @@ -61,6 +62,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { @BindView(R.id.share_license_summary) TextView licenseSummaryView; @BindView(R.id.licenseSpinner) Spinner licenseSpinner; + @Inject @Named("default_preferences") SharedPreferences prefs; @Inject @Named("direct_nearby_upload_prefs") SharedPreferences directPrefs; @@ -346,6 +348,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { } } + private void showInfoAlert (int titleStringID, int messageStringID){ new AlertDialog.Builder(getContext()) .setTitle(titleStringID) diff --git a/app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..637329408a28249f61fd4aee845891b153a466ac GIT binary patch literal 422 zcmV;X0a^ZuP)_r!kZa!Q5tM<9G1lvl#Np6PVfYXTMr9oR$7- zJ+I)+m7cE3mSYcqne|dAIk1q=42;!fP_k_T0N}-$b--Po%Ifx9y0_4n8#`TI@fdKc z4xpeqS!x9+soeo?)FBj5w|OdAo%*2;ppd!&^kXQdf)kZf{Z;QMs1GQvUxpAwAFi^H QT>t<807*qoM6N<$f(6mHd;kCd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7772ceea714619719877d3bab5fb286a9e0979bb GIT binary patch literal 412 zcmV;N0b~A&P)I|w$@3Bq7y zv4zOu7Z|26$(1wN+VeM;!_UX%!X13hqGQFL6Jv+AWCn3k%N>%*!0ksx1-Of$6L8j^zd3!Mb~ggE7#f4JJ)Z&q?JfiJ7&-)#kBZho6GL0z z!BV>D08C>j^91&j#mqf8ilKoLG*%PEAK=+nG31L!P}}_THXXxp-@jIP0k19;Ml$OT z+yiRMG1SGbne^0PDi5J98!CU#vt!GEn>3ZwZ98{oX09=H)IISOa4ip@Aj2e;fa2tC z09W!53aIN86+i*?QyxMAbp;s5P)zl|Q9z9seWM_sP@LbDcsnH${Es030000P#jd(6VUXdS7krMY%m884WHAk4%peJ{CfmfjuxI(qY* z|C!miR-0v*4NhJZ6P1+~b%t2twOExuG4=E>f{ z*|(j?#1}qQ8B668jgqlc8Z=7AQfcs^WGqGFL&1nK00z(x^&Ee&XK3jnD0nN2y@!K)v3ewzpR#T-|!dGh9lY1-Lgkp@eAr=1H*8jNvDI}Z#JPl+LZ(#{1{ z8oc0~cDDFPgHLSI&I~tidGhX#NxE3!W@&8b#iu*I(#^<9(-)4abTjqs@P)DsU(V<-p+}yyASTR^cTolit=r#Oy)H?{uUPBaF?GfD_%%#Bt=$ye8=Gow- zC>p1&eM>6q=N}f-4{Ca(sVQyDb3%t6B_%y_j+sMjt3O)h4}*GO_YXeTuE|6M4cZGIj13GAHL0|*z#s>7zCWF8<+KUY+ z(T4oRl|0l!dy4~x{~LIZd!nh}6V0H#+JGEwJqT=~3L?J@{lqqS|o9Ik~=fu-0# zn(%;DFpAV{jAyhv#0sq7x~(C`=%DraX$ORJTm_3CPM3Jbb&A9Q8C`r=Y%ooW7Bg&e zjjv=P4iLua5~@Tyi~)pKE50nE(I)07*qoM6N<$f=v0>=Kufz literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6ccea7b868ef0e31882985e38a4b3d7ae6bd64 GIT binary patch literal 470 zcmV;{0V)28P)@ECRS1d$?5Z6Jtjf0}N2MKW-LS$%#nZ{n4xBz+$j-($m{mq*< zk)tQ?nRyqJ^m(L#fvA|{m?j-kQaUs^VpjhOYy2R~1FQO5jBrjrXOvYO-*_ZXi*Xgh z2#+{jE?8%hA%>Y^gG;;?Wfj3W&J*+cgaz6-rwYd!&UZ$YfeN=cD+R(`88cNc)+x& z=nIVTjJZ=NR&j2rC<9|OFED4j(_l$%%=Iii(Q*hv*{DA|)<)rp_}JN-U70 z6QecWj}Ea-4fkqnG5D6CehzrOAN0Ki=p6;TX0b$~xu6V3_^V91d7w{R;lB#m=72IT zoI48S$kIxTRJLdNn}@NW97slD&OB&=B@kd@L+tZ$JyQjdbODcK~qt`~x>g8#~U+;}c|9MVi+Dm5_1)K%+=I8lX$0YyeOX(uD@- z8L71a;hF>2hV-NXsw2e$fMQ5>!vBUyBE4vUD*xLZDk0?qfX0w^H9!kU%K<=ZNOKyX z9MXM&m--QDL<7`G4QawBXbP!Hy9UUxg>+5Q2dJG}q)m(tXb^kfeJotZ-WM&9;V1T{ zJ+7O<-X2B|)Q5#+c_PhVA=UY;2{L@cS<&?_$=zAU*(^pEl%R~W8zxD(o}A(qXNSbK zL54IHoWTRDjM76JF_QE!#u|?_R-{EAWXK9BQ0HWHL54JC{B=kX>5Pmn$dF(O3vbn# zB~A_4fY!&~cJT>w#nj*r1AgRW=>3@_BHQ!OwIs%se|>@I;*#F4$#` zk%qs}kHJZX=1hh&oSl$X1}TtI;edp6>Yro?ffOFdkZvFylL`kUq>~0xw*p9;6eh@! z@=h{@Mfyc|I3OV%tAO-L!U-E>=;l~BA%lb@oKQhR5>ChWf5+zFT&`y>)@|;qnM3Dk{ zX35aj2$@%Ga7X3bvCcp}WnS=!f9C^z^^keQ0)BJPJc-)sbn_Xv?9o*_ooAfko&xDw ztxmblHx|f{rkNPcq{*_#Wd)^9eVxZ;n{~!0@d`8JjB#GJaoT68>?pq_S!H&L70>*6 z?Tc>To=G1}j(dyg)fBS(&ZJK&XHh$vUD?_!2h!fSel4L5>nJB3$R}I~c2!5G-FmY| z9qDnw-qNZel(qU!+>uUjCHO%Np*c}-AppN5_!$kMyeOCnzz++4Q$y%f6b$ex(Ifa1 z4WXha*eu4YM$Ai!;cE?{k|-DpAQThBr7)~eN(|p<2o=J1hU6{F2H-~ozoj8GD+(?K z;FkqIts#^V1up}1>hFRd(hzF1-m)=Adcu0kT8u_m7e&uWIgl-U73`YP2?N%Re&;~G zx5$@9D}1yH=X_GHEo$57g+9;sEHO+ENn)hvVT5I?@BCTMCZiwH6_i|ZOt=0j?Kw*9 zT0e!3^pz6KTeqiLN=y-_$r?LUS2BiPc6{h;|GMa&@xz+@V?;lz-2O%7mNnUxIj)P6 zF|;zs44a&AO^F*$*kYO??-Rj(yV<3Zdbq)4r$c^k8ejnCpjGa zaG0aB-2rj_Ac(hE?F@L%2ZE}SZCAi|ToHyE-?k&*xyQ#pVV+@+ zJi$Tr56Kn}9haya(k24#ap>~#AGExU<&sb|5ip4A6G>kiWvHR**B?+s_1gDVBdGRt z2RuTx;&C+q;Bmzos)u?5W{}mnA1EM>jcihHzy-1eM4$k{60$R$0SQ!30|)e?vh)Rv zB0E6@4iJ=(z0nttM>Zck!2Pf43fMw697@1TWb66@%E*$T1f-Fb^aWIqbs?l_jvCaB z?7hB#Yh)dv1jLYizUu+@UH=MwG+HyK`0pv=wc44DoP^id;x`bm zVF=U&a{+=FvpD!+GeHc2pwVx-1LVn2q*c5Bdu$PIg1=?`?9r?p<;>&mR}%s9JY7>3Mim} c0tyJ;AK9!R=?G29w*UYD07*qoM6N<$g1^0>_y7O^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d85e242b97041c9907ee8e2c94417645c034edbd GIT binary patch literal 925 zcmV;O17iG%P)KhH-uTH!aML{-J?H`c7zwK5;MQKT|Me!dHL3}|J zrHG>2rCTGSAXQR9T#9YNcNB@0)2v7A(pEqx3sh-Em5X$0bCKqE z!gxlY&BK1)6V@s@Z4Q27jdm#WqoT)t)~M$>^Bkd|(cwG(z~ve{^bG`D$K@$0MTG@wedL51#4nVobwSZ!4^?b$=v5QQ zvVyHjR{pV#$JpNRy_!V83brNr$02MV=~WBpr;P1@d}9gQ3AKnJY!BoYJF#6;2;9Kd zBcC{rX@eaKfix9NXXF#FFVa%`9cBHyxM>Q zrg{0o9ZW~m1{}k5Q@&8d)T=fii)mTDP{PzD0}YaaZcOjw3+tFVWS~JZkizsyzOas| zLk1co11U@u`9cX(mkcyW2D&kQkS`Q5^{EZ$$5fOr+{ScNZNPC%cjXHOObcoQ7BMZ# z7ltwYsWza9X-K}1#{RpwVUh*PXl>$IXmC(m%X!4LWdGTg%D2`NQ~fK^;7Twy?UkmD*dhE#RXHijVUge#BEe@!6a@YiVG%i8&O;^fm>d2!8mSt#RX%y_r!kZa!Q5tM<9G1lvl#Np6PVfYXTMr9oR$7- zJ+I)+m7cE3mSYcqne|dAIk1q=42;!fP_k_T0N}-$b--Po%Ifx9y0_4n8#`TI@fdKc z4xpeqS!x9+soeo?)FBj5w|OdAo%*2;ppd!&^kXQdf)kZf{Z;QMs1GQvUxpAwAFi^H QT>t<807*qoM6N<$f(6mHd;kCd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable/ic_zoom_out_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7772ceea714619719877d3bab5fb286a9e0979bb GIT binary patch literal 412 zcmV;N0b~A&P)I|w$@3Bq7y zv4zOu7Z|26$(1wN+VeM;!_UX%!X13hqGQFL6Jv+AWCn3k%N>%*!0ksx1-Of$6L8j^zd3!Mb~ggE7#f4JJ)Z&q?JfiJ7&-)#kBZho6GL0z z!BV>D08C>j^91&j#mqf8ilKoLG*%PEAK=+nG31L!P}}_THXXxp-@jIP0k19;Ml$OT z+yiRMG1SGbne^0PDi5J98!CU#vt!GEn>3ZwZ98{oX09=H)IISOa4ip@Aj2e;fa2tC z09W!53aIN86+i*?QyxMAbp;s5P)zl|Q9z9seWM_sP@LbDcsnH${Es030000 + android:background="?attr/mainBackground" + android:id="@+id/container"> + + + + + + + + diff --git a/app/src/main/res/layout/layout_upload_item.xml b/app/src/main/res/layout/layout_upload_item.xml index fb552560a..155664d91 100644 --- a/app/src/main/res/layout/layout_upload_item.xml +++ b/app/src/main/res/layout/layout_upload_item.xml @@ -34,6 +34,7 @@ android:textColor="#FFFFFFFF" style="?android:textAppearanceSmall" /> + \ No newline at end of file From 8a06aa5c14fa49ca49787fd6e7e718bf2b1e30be Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 26 Apr 2018 07:51:15 +0200 Subject: [PATCH 04/11] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-hu/strings.xml | 30 ++++++++++++++-- app/src/main/res/values-ji/strings.xml | 6 +++- app/src/main/res/values-lb/strings.xml | 2 +- app/src/main/res/values-li/strings.xml | 47 +++++++++++++++++++++++++ app/src/main/res/values-lv/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-skr/strings.xml | 2 ++ 7 files changed, 84 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index e17c0991a..5524afb0e 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -13,6 +13,7 @@ * ViDam --> + Általános Visszajelzés Helyszín Commons @@ -54,6 +55,7 @@ Megosztás Megtekintés böngészőben Cím + Kérlek, adj címet a fájlnak Leírás Nem lehet bejelentkezni - hálózati hiba Nem lehet bejelentkezni - ellenőrizd a felhasználóneved @@ -91,11 +93,12 @@ Kategóriák Beállítások Regisztráció + Kiemelt képek Névjegy A Wikimedia Commons applikáció egy nyílt forráskódú szoftver, amit a Wikimedia-közösség önkéntesei készítettek és tartanak karban. A Wikimédia Alapítvány nem vesz részt az applikáció megalkotásában, fejlesztésében és üzemeltetésében. Nyiss egy új <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-problémát</a> hibabejelentéssel vagy fejlesztési javaslattal. - <a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Adatvédelmi irányelvek</a> - <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Köszönetnyilvánítás</a> + <u>Adatvédelmi irányelvek</u> + <u>Köszönetnyilvánítás</u> Névjegy Visszajelzés küldése (e-mailben) Nincs telepített levelezőprogram @@ -136,7 +139,10 @@ A Wikimédia Commons tárolja a Wikipédián használt képek többségét. A képeid segítik az ismeretterjesztést az egész világon! Kérjük, tölts fel képeket, amelyeket teljes mértékben te fotóztál vagy készítettél: - - Természeti tárgyak (virágok, állatok, hegyek)\n- Hasznos tárgyak (kerékpárok, vasútállomások)\n- Híres emberek (a polgármestered, olimpikonok, akikkel találkoztál) + Természeti tárgyak (virágok, állatok, hegyek)\n• Hasznos tárgyak (kerékpárok, vasútállomások)\n• Híres emberek (a polgármestered, olimpikonok, akikkel találkoztál) + Természeti tárgyak (virágok, állatok, hegyek) + Hasznos tárgyak (kerékpárok, vasútállomások) + Híres emberek (a polgármestered, olimpikonok, akikkel találkoztál) Kérjük, NE tölts fel: - Szelfiket vagy képeket a barátaidról\n- Internetröl letöltött képeket\n- Kereskedelmi alkalmazások képernyőképeit Példa feltöltés: @@ -168,6 +174,7 @@ Média címe Leírás A média leírása kerül ide. Ez akár egészen hosszú is lehet, és több sorba fog kerülni. Azért reméljük, jól néz majd ki. + Szerző Feltöltési dátum Licenc Koordináták @@ -207,6 +214,7 @@ Kijelentkezés Bevezető Értesítések + Kiemelt Közeli helyek nem megjeleníthetőek a helyadatokhoz való hozzáférés engedélyezése nélkül nincs leírás Commons leírólap @@ -221,10 +229,26 @@ Bejelentkezés a fiókodba Naplófájlok küldése Naplófájlok küldése e-mailben a fejlesztőknek + Nem található böngésző az URL megnyitásához Hiba! URL nem található. Törlésre jelölés + Ezt a képet törlésre jelölték. + Megtekintés böngészőben A hely nem változott. A hely nem érhető el. + Közeli helyek listájának megtekintéséhez engedély szükséges Üdvözlünk a Wikimedia Commonson, %1$s! Örülünk, hogy itt vagy. Köszönjük a szerkesztésedet! + WIKIDATA + WIKIPÉDIA + COMMONS + <u>Értékelj minket</u> + <u>GYIK</u> + Útmutató átugrása + Internet nem elérhető + Internet elérhető + Nincs értesítés + Nyelvek + Mégse + Újra diff --git a/app/src/main/res/values-ji/strings.xml b/app/src/main/res/values-ji/strings.xml index 9122cc710..6bcb88760 100644 --- a/app/src/main/res/values-ji/strings.xml +++ b/app/src/main/res/values-ji/strings.xml @@ -3,6 +3,9 @@ * פוילישער --> + אַלגעמיין + פֿידבעק + לאקאציע קאמאנס איינשטעלונגען באַניצער־נאָמען @@ -48,6 +51,7 @@ זוכן קאטעגאריעס אויפֿהיטן דערפֿרישן + ליסטע \@string/contributions_subtitle_zero איין ארויפֿלאד @@ -66,7 +70,7 @@ לעצטיק־געניצטע קאטעגאריעס אַנולירן אראָפלאָדן - ליצענץ + סטאנדארט־ליצענץ Attribution-ShareAlike 3.0 Attribution 3.0 CC0 diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 321d2a189..5abca6562 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -89,7 +89,7 @@ D\'App Wikimedia Commons ass eng \'Open-Source-App\' déi vu Fräiwëllege vun der Wikimedia Foundation entwéckelt gouf an och vun hinnen ënnerhal gëtt. D\'Wikimedia Foundation ass net an d\'Entwécklung oder den Ënnerhalt vun der App implizéiert. Leet w.e.g. <a href=\"https://github.com/commons-app/apps-android-commons/issues\"> e GitHub Problem</a> fir Problemer ze mellen a Proposen ze maachen. <u>Dateschutzrichtlinn</u> - <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Merci</a> + <u>Merci</u> Iwwer Feedback schécken (per E-Mail) Keen E-Mail-Client installéiert diff --git a/app/src/main/res/values-li/strings.xml b/app/src/main/res/values-li/strings.xml index 59dc53188..0699d80cd 100644 --- a/app/src/main/res/values-li/strings.xml +++ b/app/src/main/res/values-li/strings.xml @@ -87,6 +87,27 @@ Registreer Oetgeleechde plaetjes Euver + De Wikimedia Commons-app is \'nen app op aope brónne, gemaak en óngerhaje door gerechtigde en vriewilligers vanne Wikimedia-gemeinsjap. De Wikimedia Foundation is neet betróch inne maak, óntwikkeling of \'t óngerhawd vannen app. + Maak e nuuj <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-perbleem</a> veur fouteverslaag en veurstèlle. + <u>Privaatbeleid</u> + <u>Toesjrif</u> + Euver + Sjik feedback (mitten e-mail) + Geine e-mailcliënt geïnstalleerd + Recèntelik gebroekde categorieje + Oppe ieëste synchronisatie \'nt wachte... + Doe höbs nag gein plaetjes geüpload. + Perbeer oppernuuj + Braek aaf + Dit plaetje weurt gelicenseerd ónger %1$s + Door dit plaetje toe te veuge verklaor ich det dit mien eige werk is en det \'t gein auteursrechtelik besjurmp matterjaal of selfies bevatj en angeszins instump mit \'t <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">beleid op Wikimedia Commons</a>. + Download + Standerdlicentie + Gebroek veurige naam/besjrieving + Haol autematis de hujige locatie op + Haol de hujige locatie op veur categorieveurstèlle te make wen \'t bild gein geotags haet + Nachmodus + Gebroeker duuster thema Naamsvermeljing-GeliekDeile 4.0 Naamsvermeljing 4.0 Naamsvermeljing-GeliekDeile 3.0 @@ -109,5 +130,31 @@ CC Zero Op Wikimedia Commons staon de meiste plaetjes die waere gebroek op Wikipedia. Dien plaetjes helpe luuj oppe ganse werreld mit \'t opdoon van kènnis! + Upload estebleef allein plaetjes die gans door dichzelf zint gemaak: + Netuurobjekte (blome, bieëster, berg)\n• Henjige veurwerpe (fietsje, treinstaasjes)\n• Bekandje luuj (de börgermeisters, Olumpische atlete die se kins) + Netuurobjekte (blome, bieëster, berg) + Henjige veurwerpe (fietsje, treinstaasjes) + Bekandje luuj (de börgermeisters, Olumpische atlete die se kins) + Upload estebleef NEET: + - Selfies of foto\'s van dien vrunj\n- Foto\'s die se höbs downgeload van \'t internet\n- Sjermplaetjes van eige apps + Selfies of foto\'s van dien vrunj + Foto\'s die se höbs downgeload van \'t internet + Sjermplaetjes van eige apps + Uploadveurbild: + - Titel: Operahoes in Sydney\n- Besjrieving: Operahoes in Sydney gezeen vanaaf d\'n euverkantj vanne bej\n- Categorieje: Operahoes in Sydney vanoet \'t wèste, Operahoes in Sydney van wied aaf + Titel: Operahoes in Sydney + Besjrieving: Operahoes in Sydney gezeen vanaaf d\'n euverkantj vanne bej + Categorieje: Operahoes in Sydney vanoet \'t wèste, Operahoes in Sydney van wied aaf + Draag dien plaetjes bie. Help Wikipedia-artikel toet laeve te kómme! + Plaetjes op Wikipedia kómme van Wikimedia Commons. + Dien plaetjes helpe luuj van euver de ganse werreld mit lieëre. + Verkóm auteursrechtelik besjurmp matterjaal det se op internet höbs gevónje wie plaetjes van poeasters, beuk en zo wiejer. + Versteis se \'t? + Jao! + Categorieje + \'nt laje... + Geine gekaoze + Gein besjrieving + Ónbekande licentie Vernuuj diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index d73312361..1eba570d2 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -79,6 +79,7 @@ Nosaukums Apraksts + Autors Augšupielādēšanas datums Licence Koordinātas diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d19dfc7c8..77cdb547d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -172,6 +172,7 @@ Tytuł pliku Opis Tu jest miejsce na opis pliku. Mogą być dość długie i wymagać przewijania podczas czytania. Chcemy, by wszystko wyglądało dobrze. + Autor Data przesłania Licencja Współrzędne diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index d1d1d5d87..796ae8555 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -89,6 +89,7 @@ عنوان میڈیا دا عنوان تفصیل + مصنف اپ لوڈ تھیوݨ دی تاریخ لائیسنس کوآرڈینیٹ @@ -113,6 +114,7 @@ تہاڈی رائے لاگ آؤٹ ٹیٹوریل + خاص وکی ڈیٹا آئٹم وکی پیڈیا دا مضمون اجازت ݙیوو From 5ebaa7418eb25d297e128395f5a08065f125950f Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 30 Apr 2018 08:19:57 +0200 Subject: [PATCH 05/11] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-fi/strings.xml | 23 ++++++++++++++++++--- app/src/main/res/values-is/strings.xml | 4 ++++ app/src/main/res/values-it/strings.xml | 4 ++++ app/src/main/res/values-iw/strings.xml | 5 +++++ app/src/main/res/values-ku/strings.xml | 1 + app/src/main/res/values-li/strings.xml | 10 +++++++++ app/src/main/res/values-tr/strings.xml | 28 ++++++++++++++++++++++++-- 7 files changed, 70 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index dd1d37993..e833932a8 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -71,6 +71,7 @@ Etsi luokkia Tallenna Päivitä + Lista GPS ei ole käytössä. Haluatko ottaa sen käyttöön? Ota GPS käyttöön Ei tallennuksia vielä @@ -161,8 +162,8 @@ Ei kuvausta Tuntematon lisenssi Päivitä - Vaadittu oikeus: Ulkoisen tallennustilan luku. Appi ei toimi ilman tätä oikeutta. - Vaadittava lupa: Kirjoita ulkoiseen tallennustilaan. Sovellus ei voi toimia ilman tätä. + Vaadittu oikeus: Ulkoisen tallennustilan luku. Appi ei voi päästä galleriaasi ilman tätä oikeutta. + Vaadittava lupa: Kirjoita ulkoiseen tallennustilaan. Appi ei voi päästä kameraasi ilman tätä oikeutta. Valinnainen lupa: Saada tämänhetkinen sijainti loukkasuosituksia varten. OK Lähellä olevat paikat @@ -175,6 +176,7 @@ Median otsikko Kuvaus Median kuvaus menee tänne. Tämä voi mahdollisesti olla melko pitkä, ja sen täytyy kääriä poikittain useita rivejä. Toivomme, että se näyttää silti hyvältä. + Tekijä Tallennuspäivämäärä Lisenssi Koordinaatit @@ -221,6 +223,7 @@ kuvausta ei löytynyt Commons-tiedostosivu Wikidata-kohde + Wikipedia-artikkeli Virhe varastoidessa kuvia Tiedoston yksilöllinen ja kuvaava otsikko, jota käytetään tiedostonimenä. Voit käyttää tavallista kieltä välilyönnein. Älä sisällytä tiedoston päätettä. Kuvaile mediaa niin paljon kuin mahdollista: Missä se otettiin? Mitä se esittää? Mikä on asiayhteys? Kuvaile esineitä tai henkilöitä. Tuo ilmi tietoja, joita ei ole helppo arvailla, esimerkiksi vuorokaudenaika, jos se on maisema. Jos media esittää jotain epätavallista, selitä, mikä tekee siitä epätavallisen. @@ -233,6 +236,9 @@ Lähetä lokitiedosto Lähetä lokitiedosto kehittäjille sähköpostin kautta Virhe! URL-osoitetta ei löytynyt + Ehdotettu poistettavaksi + Tätä kuvaa on ehdotettu poistettavaksi. + Näytä selaimessa Sijainti ei ole muuttunut. Sijainti ei käytettävissä. Lupa vaaditaan läheisten paikkojen luettelon näyttämiseen @@ -243,6 +249,17 @@ Kiitos muokkaamisestasi %1$s mainitsi sinut %2$s. Vaihda näkymä - Usein Kysytyt Kysymykset + WIKIDATA + WIKIPEDIA + COMMONS + <u>Arvostele meidät</u> + <u>UKK</u> Ohita opetus + Internet ei saatavissa + Internet saatavana + <u>Käännä</u> + Kielet + Jatka + Peruuta + Yritä uudelleen diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 3985a654b..ba5bdfe42 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -84,6 +84,7 @@ Flokkar Stillingar Nýskrá + Áberandi myndir Um Wikimedia Commons forritið er opinn og frjáls hugbúnaður sem gerður er og viðhaldið af stuðningsaðilum og sjálfboðaliðum Wikimedia samfélagsins. Wikimedia Foundation sjálfseignarstofnunin kemur ekki að gerð, forritun eða viðhaldi forritsins. \ Útbúðu nýjar <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub tilkynningar (issue)</a> til að koma villum og uppástungum á framfæri. @@ -169,6 +170,8 @@ Titill þessa gagnamiðils Lýsing Lýsing á gagnamiðlinum kemur hér. Þetta má vera nokkuð langt og mun þurfa að skríða yfir nokkrar línur. Við vonum að þetta líti samt þokkalega út. + Höfundur + Nafn höfundar myndarinnar kemur hér. Sent inn þann Notkunarleyfi Hnit @@ -211,6 +214,7 @@ Útskráning Kennsla Tilkynningar + Efst á baugi Ekki er hægt að birta nálæga staði an heimildar til að ná í hnattstaðsetningu engin lýsing fannst Síða Commons-skrár diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 27968b8d7..306a1e3a4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -5,6 +5,7 @@ * Davio * Nemo bis * S4b1nuz E.656 +* Sarah Bernabei * Una giornata uggiosa '94 * Wim b --> @@ -87,6 +88,7 @@ Categorie Impostazioni Registrati + Immagini in evidenza Informazioni L\'app di Wikimedia Commons è un\'applicazione open source creata e mantenuta da beneficiari e volontari della comunità Wikimedia. La Fondazione Wikimedia non è coinvolta nella creazione, sviluppo o manutenzione dell\'applicazione. Crea una nuova <a href=\"https://github.com/commons-app/apps-android-commons/issues\">segnalazione GitHub</a> per riportare errori e suggerimenti. @@ -161,6 +163,7 @@ Titolo del file multimediale Descrizione Autore + Il nome dell\'autore dell\'immagine in evidenza va scritto qui. Data di caricamento Licenza Coordinate @@ -194,6 +197,7 @@ Esci Tutorial Notifiche + In evidenza nessuna descrizione trovata Pagina di Commons del file Elemento Wikidata diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 186df118a..48750daf9 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -17,6 +17,7 @@ משוב מיקום ויקישיתוף + הגדרות שם משתמש ססמה @@ -208,6 +209,7 @@ בלי תמונות סלפי תמונה קניינית ברוך בואך ויקיפדיה + הודעה לגבי זכויות יוצרים בית האופרה של סידני ביטול פתיחה @@ -226,6 +228,7 @@ לא נמצא תיאור דף קובץ בוויקישיתוף פריט ויקינתונים + ערך בוויקיפדיה שגיאה במשירת תמונות במטמון כותרת מתארת ייחודית לקובץ, שתשמש שם קובץ. אפשר להשתמש בשפה פשוטה עם רווחים. אין לכלול סיומת קובץ נא לתאר את המדיה כמה שיותר: איפה היא נוצרה? מה היא מראה? מה ההקשר? נא לתאר את העצמים או את האנשים. נא לחשוף מידע שאי־אפשר לנחש בקלות, למשל, הזמן ביום אם זאת תמונת נוף. אם המדיה מציגה משהו בלתי־רגיל, נא להסביר מה מיוחד בה. @@ -238,8 +241,10 @@ שליחת קובץ יומן שליחת קובץ יומן למפתחים בדואר אלקטרוני לא נמצא דפדפן שיוכל לפתוח את הכתובת + שגיאה! כתובת ה־URL לא נמצאה להציע מחיקה התמונה הזאת מועמדת למחיקה + הצגה בדפדפן המיקום לא השתנה. המיקום אינו זמין. diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 16ba9fe2f..aac473c92 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -69,6 +69,7 @@ Hişyarî Erê Na + Xwedî Koordînat Betal bike Veke diff --git a/app/src/main/res/values-li/strings.xml b/app/src/main/res/values-li/strings.xml index 0699d80cd..a14add497 100644 --- a/app/src/main/res/values-li/strings.xml +++ b/app/src/main/res/values-li/strings.xml @@ -157,4 +157,14 @@ Gein besjrieving Ónbekande licentie Vernuuj + Klaor + Plaatse in de buurt + Gein plaatse in de buurt gevónje + Waorsjoewing + Dit bestandj besteit al op Commons. Wèts se zeker det se door wils gaon? + Jao + Nae + Titel + Bestandjstitel + Besjrieving diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 94d383ff9..95548b662 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -16,6 +16,7 @@ Geri bildirim Konum Commons + Ayarlar Kullanıcı adı Parola @@ -91,6 +92,7 @@ Kategoriler Ayarlar Kaydol + Seçkin Resimler Hakkında Wikimedia Commons uygulaması, Wikimedia topluluğunun imtiyaz sahibi ve gönüllüleri tarafından oluşturulmuş ve sürdürülmüş açık kaynak kodlu bir uygulamadır. Vikipedi Vakfı, uygulamanın oluşturulması, geliştirilmesi veya bakımına dahil değildir. GitHub üzerinde <a href=\"https://github.com/commons-app/apps-android-commons\">Kaynak</a> ve <a href=\"https://commons-app.github.io/\">website</a>. Hata raporları ve önerileri için yeni bir <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub sorunu</a> oluştur. @@ -149,6 +151,7 @@ - Başlık: Sydney Opera Binası\n- Tanım: Körfezin genelinden bakıldığında Sydney Opera Binası\n- Kategoriler: Sydney Opera Binası, batıdan Sydney Opera Binası Başlık: Sidney Opera Binası Açıklama: Sidney Opera Binası\'nın körfezin karşısından görünümü + Kategoriler: Batıdan Sidney Opera Binası, Sidney Opera Binası uzaktan manzaraları Resimleriniz ile Vikipedi maddelerinin canlandırılmasına katkıda bulunabilirsiniz! Vikipedi\'ye Wikimedia Commons\'tan gelen görüntüler. Görüntüler dünya insanlarının eğitiminde yardımcı olur. @@ -161,8 +164,8 @@ Açıklama yok Bilinmeyen lisans Yenile - Gerekli izinler: Harici depolama biriminin okunması. Uygulama buna izin verilmeden çalışmaz. - Gerekli izin: Harici depolama birimi üzerine yazma. Uygulama buna izin verilmeden çalışmaz. + Gerekli izin: Harici belleği oku. Uygulama, galerinize bu olmadan erişemez. + Gerekli izin: Harici depolama yazın. Uygulama kameranıza bu olmadan erişemez. İsteğe bağlı izin: Kategori önerileri için geçerli konum alma Tamam Yakındaki yerler @@ -175,6 +178,8 @@ Medyanın başlığı Açıklama Medya için yapılan tanımı/açıklamayı buraya yazınız. Açıklamanız uzun olabilir ve birden fazla satıra sığabilir. Umuyoruz ki güzel ve bilgilendirici olacaktır. + Yazar + Seçkin resim yazarının kullanıcı adı buraya eklenir. Yükleme tarihi Lisans Koordinatlar @@ -217,6 +222,7 @@ Çıkış Eğitim Bildirimler + Seçkin Yakındaki yerler, konum izinleri olmadan görüntülenemez hiçbir açıklama bulunamadı Commons dosya sayfası @@ -244,7 +250,25 @@ TALİMATLAR MADDE OKU Wikimedia Commons\'a hoşgedin %1$s! Burada olduğun için mutluyuz. + %1$s mesaj sayfasınıza bir mesaj bıraktı. Düzenlemeniz için teşekkürler %1$s , %2$s \'de senden bahsetti + Görünümü değiştir YOL TARİFİ + VİKİVERİ + VİKİPEDİ + COMMONS + <u>Bizi oyla</u> + <u>SSS</u> + Eğiticiyi Atla + İnternet kullanılamıyor + İnternet kullanılabilir + Bildirim alınırken hata oluştu + Bildirim bulunamadı + <u>Çevir</u> + Diller + Çevirileri göndermek istediğiniz dili seçin + İlerle + Vazgeç + Tekrar Deneyin From b017d1c99a5c3cad8adef4cf843c20048bd4f034 Mon Sep 17 00:00:00 2001 From: Ujjwal Agrawal Date: Mon, 30 Apr 2018 14:54:37 +0530 Subject: [PATCH 06/11] Changed webview to Custom Tabs in Settings Page (#1328) * Changed Webview to Custoom tabs in Settings Page * Get COntext changed to getActivity --- .../java/fr/free/nrw/commons/settings/SettingsFragment.java | 5 +++++ app/src/main/res/xml/preferences.xml | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 037f0d792..02b1dc29f 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -102,6 +102,11 @@ public class SettingsFragment extends PreferenceFragment { return true; }); + Preference betaTesterPreference = findPreference("becomeBetaTester"); + betaTesterPreference.setOnPreferenceClickListener(preference -> { + Utils.handleWebUrl(getActivity(),Uri.parse(getResources().getString(R.string.beta_opt_in_link))); + return true; + }); Preference sendLogsPreference = findPreference("sendLogFile"); sendLogsPreference.setOnPreferenceClickListener(preference -> { //first we need to check if we have the necessary permissions diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index baf1a760e..49720b247 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -52,10 +52,10 @@ - - Date: Mon, 30 Apr 2018 16:19:03 +0530 Subject: [PATCH 07/11] fixed crash while uploadiing certain images (#1388) --- app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 13056ad4b..612b86458 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 @@ -59,7 +59,7 @@ public class FileUtils { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + Uri.parse("content://downloads/document"), Long.valueOf(id)); returnPath = getDataColumn(context, contentUri, null, null); } else if (isMediaDocument(uri)) { // MediaProvider From 3c2cc26d3b82625bb2e2737eb54e97cc9dd318fa Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Mon, 30 Apr 2018 14:05:47 +0300 Subject: [PATCH 08/11] Fix conflicts from #1366 fixing lint issues (#1470) * lint issue #171 - added Locale.getDefault() * lint issue #171 - added Locale.getDefault() * lint issue #171 - added %d * lint issue #171 - Changed version * lint issue #171 - added singleLine="true" * lint issue #171 - changed commit to apply * lint issue #171 - added Locale.getDefault() * lint issue #171 - added Locale.getDefault() * Codacy issues #778 - nested if loop * Codacy issues #778 - nested if loop * Revert "lint issue #171 - added %d" since we dont edit translated string files This reverts commit e4917cddcf7e88b7cdcc570ea9ed8452d33ceea2. --- app/build.gradle | 2 +- .../java/fr/free/nrw/commons/auth/LoginActivity.java | 9 +++++---- .../main/java/fr/free/nrw/commons/delete/DeleteTask.java | 2 +- .../fr/free/nrw/commons/media/MediaDetailFragment.java | 2 +- .../fr/free/nrw/commons/settings/SettingsFragment.java | 4 ++-- .../free/nrw/commons/upload/MultipleShareActivity.java | 4 ++-- .../fr/free/nrw/commons/upload/SingleUploadFragment.java | 2 +- .../fr/free/nrw/commons/utils/StringSortingUtils.java | 5 +++-- .../res/layout/light_simple_spinner_dropdown_item.xml | 2 +- 9 files changed, 17 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3a7547d58..535f58143 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION" kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION" - implementation 'com.squareup.okhttp3:okhttp:3.8.1' + implementation 'com.squareup.okhttp3:okhttp:3.9.1' implementation 'com.squareup.okio:okio:1.13.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' 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 ef46869c4..dfdc6d7e4 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 @@ -29,6 +29,7 @@ import android.widget.EditText; import android.widget.TextView; import java.io.IOException; +import java.util.Locale; import javax.inject.Inject; import javax.inject.Named; @@ -267,18 +268,18 @@ public class LoginActivity extends AccountAuthenticatorActivity { if (result.equals("NetworkFailure")) { // Matches NetworkFailure which is created by the doInBackground method showMessageAndCancelDialog(R.string.login_failed_network); - } else if (result.toLowerCase().contains("nosuchuser".toLowerCase()) || result.toLowerCase().contains("noname".toLowerCase())) { + } else if (result.toLowerCase(Locale.getDefault()).contains("nosuchuser".toLowerCase()) || result.toLowerCase().contains("noname".toLowerCase())) { // Matches nosuchuser, nosuchusershort, noname showMessageAndCancelDialog(R.string.login_failed_username); emptySensitiveEditFields(); - } else if (result.toLowerCase().contains("wrongpassword".toLowerCase())) { + } else if (result.toLowerCase(Locale.getDefault()).contains("wrongpassword".toLowerCase())) { // Matches wrongpassword, wrongpasswordempty showMessageAndCancelDialog(R.string.login_failed_password); emptySensitiveEditFields(); - } else if (result.toLowerCase().contains("throttle".toLowerCase())) { + } else if (result.toLowerCase(Locale.getDefault()).contains("throttle".toLowerCase())) { // Matches unknown throttle error codes showMessageAndCancelDialog(R.string.login_failed_throttled); - } else if (result.toLowerCase().contains("userblocked".toLowerCase())) { + } else if (result.toLowerCase(Locale.getDefault()).contains("userblocked".toLowerCase())) { // Matches login-userblocked showMessageAndCancelDialog(R.string.login_failed_blocked); } else if (result.equals("2FA")) { diff --git a/app/src/main/java/fr/free/nrw/commons/delete/DeleteTask.java b/app/src/main/java/fr/free/nrw/commons/delete/DeleteTask.java index 0cce496f0..37b9a7a82 100644 --- a/app/src/main/java/fr/free/nrw/commons/delete/DeleteTask.java +++ b/app/src/main/java/fr/free/nrw/commons/delete/DeleteTask.java @@ -83,7 +83,7 @@ public class DeleteTask extends AsyncTask { String logPageString = "\n{{Commons:Deletion requests/" + media.getFilename() + "}}\n"; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd", Locale.getDefault()); String date = sdf.format(calendar.getTime()); String userPageString = "\n{{subst:idw|" + media.getFilename() + diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 5acfb218e..037f92e56 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -458,7 +458,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { if (date == null || date.toString() == null || date.toString().isEmpty()) { return "Uploaded date not available"; } - SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy"); + SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); return formatter.format(date); } diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 02b1dc29f..6dd6056f7 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -133,8 +133,8 @@ public class SettingsFragment extends PreferenceFragment { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + { sendAppLogsViaEmail(); } } 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 5525f1ba7..510076ce8 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 @@ -221,8 +221,8 @@ public class MultipleShareActivity extends AuthenticatedActivity //TODO: 15/10/17 should location permission be explicitly requested if not provided? //check if location permission is enabled - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + { locationPermitted = true; } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index d0e38dafe..e93ac12d6 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -226,7 +226,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { setLicenseSummary(license); prefs.edit() .putString(Prefs.DEFAULT_LICENSE, license) - .commit(); + .apply(); } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java index 03b1469e0..e409b856d 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java @@ -1,6 +1,7 @@ package fr.free.nrw.commons.utils; import java.util.Comparator; +import java.util.Locale; import info.debatty.java.stringsimilarity.Levenshtein; @@ -28,8 +29,8 @@ public class StringSortingUtils { } private static double calculateSimilarity(String firstString, String secondString) { - String longer = firstString.toLowerCase(); - String shorter = secondString.toLowerCase(); + String longer = firstString.toLowerCase(Locale.getDefault()); + String shorter = secondString.toLowerCase(Locale.getDefault()); if (firstString.length() < secondString.length()) { longer = secondString; diff --git a/app/src/main/res/layout/light_simple_spinner_dropdown_item.xml b/app/src/main/res/layout/light_simple_spinner_dropdown_item.xml index be4e086e4..11f95bf2e 100644 --- a/app/src/main/res/layout/light_simple_spinner_dropdown_item.xml +++ b/app/src/main/res/layout/light_simple_spinner_dropdown_item.xml @@ -2,7 +2,7 @@ Date: Mon, 30 Apr 2018 16:57:35 +0530 Subject: [PATCH 09/11] Error messages in LoginActivity persist after orientation change. (#1407) --- .../fr/free/nrw/commons/auth/LoginActivity.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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 dfdc6d7e4..75be2adde 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 @@ -84,6 +84,10 @@ public class LoginActivity extends AccountAuthenticatorActivity { private LoginTextWatcher textWatcher = new LoginTextWatcher(); private Boolean loginCurrentlyInProgress = false; + private Boolean errorMessageShown = false; + private String resultantError; + private static final String RESULTANT_ERROR = "resultantError"; + private static final String ERROR_MESSAGE_SHOWN = "errorMessageShown"; private static final String LOGING_IN = "logingIn"; @Override @@ -217,6 +221,8 @@ public class LoginActivity extends AccountAuthenticatorActivity { handlePassResult(username, password); } else { loginCurrentlyInProgress = false; + errorMessageShown = true; + resultantError = result; handleOtherResults(result); } } @@ -343,15 +349,22 @@ public class LoginActivity extends AccountAuthenticatorActivity { protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(LOGING_IN, loginCurrentlyInProgress); + outState.putBoolean(ERROR_MESSAGE_SHOWN, errorMessageShown); + outState.putString(RESULTANT_ERROR, resultantError); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); loginCurrentlyInProgress = savedInstanceState.getBoolean(LOGING_IN, false); + errorMessageShown = savedInstanceState.getBoolean(ERROR_MESSAGE_SHOWN, false); if(loginCurrentlyInProgress){ performLogin(); } + if(errorMessageShown){ + resultantError = savedInstanceState.getString(RESULTANT_ERROR); + handleOtherResults(resultantError); + } } public void askUserForTwoFactorAuth() { @@ -363,7 +376,9 @@ public class LoginActivity extends AccountAuthenticatorActivity { public void showMessageAndCancelDialog(@StringRes int resId) { showMessage(resId, R.color.secondaryDarkColor); - progressDialog.cancel(); + if(progressDialog != null){ + progressDialog.cancel(); + } } public void showSuccessAndDismissDialog() { From 6d2c41b91efc163756a5a407cf442d5275dea51d Mon Sep 17 00:00:00 2001 From: Balakrishnan S <97balakrishnan@gmail.com> Date: Mon, 30 Apr 2018 17:01:27 +0530 Subject: [PATCH 10/11] Help button (#1415) * Help button added to tutorial * debug typo removed * Help changed to more info * More option moved to bottom * Alignment changes made --- .../free/nrw/commons/WelcomePagerAdapter.java | 14 ++++++++ .../main/res/layout-land/welcome_final.xml | 32 ++++++++++++++++--- app/src/main/res/layout/welcome_final.xml | 30 ++++++++++++++--- app/src/main/res/values/strings.xml | 1 + 4 files changed, 68 insertions(+), 9 deletions(-) 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 705de23da..bca548632 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons; +import android.net.Uri; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; @@ -9,6 +10,7 @@ import android.widget.TextView; import butterknife.ButterKnife; import butterknife.OnClick; +import butterknife.Optional; public class WelcomePagerAdapter extends PagerAdapter { static final int[] PAGE_LAYOUTS = new int[]{ @@ -20,6 +22,7 @@ public class WelcomePagerAdapter extends PagerAdapter { }; private static final int PAGE_FINAL = 4; private Callback callback; + private ViewGroup container; /** * Changes callback to provided one @@ -53,6 +56,7 @@ public class WelcomePagerAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { + this.container=container; LayoutInflater inflater = LayoutInflater.from(container.getContext()); ViewGroup layout = (ViewGroup) inflater.inflate(PAGE_LAYOUTS[position], container, false); if( BuildConfig.FLAVOR == "beta"){ @@ -102,5 +106,15 @@ public class WelcomePagerAdapter extends PagerAdapter { } } + @Optional + @OnClick(R.id.welcomeInfo) + void onHelpClicked () { + try { + Utils.handleWebUrl(container.getContext(),Uri.parse("https://commons.wikimedia.org/wiki/Help:Contents" )); + } catch (Exception e) { + e.printStackTrace(); + } + } + } } diff --git a/app/src/main/res/layout-land/welcome_final.xml b/app/src/main/res/layout-land/welcome_final.xml index 0b99b481f..d44339647 100644 --- a/app/src/main/res/layout-land/welcome_final.xml +++ b/app/src/main/res/layout-land/welcome_final.xml @@ -1,13 +1,33 @@ - + > + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/welcome_final.xml b/app/src/main/res/layout/welcome_final.xml index 7f323253b..561e660aa 100644 --- a/app/src/main/res/layout/welcome_final.xml +++ b/app/src/main/res/layout/welcome_final.xml @@ -1,14 +1,18 @@ - + - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28ecaeb8f..efdeeec7e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -149,6 +149,7 @@ Avoid copyrighted materials you found from the Internet as well as images of posters, book covers, etc. You think you got it? Yes! + More Information Categories Loading… None selected From 35f05be8df4e5bfea09baac6683a0eab83ae092a Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Mon, 30 Apr 2018 14:42:19 +0300 Subject: [PATCH 11/11] fix memory leaks (they happened due to hiding keyboard) and lint null pointer warnings in the same code (#1471) --- .../free/nrw/commons/auth/LoginActivity.java | 10 +++++--- .../category/CategorizationFragment.java | 11 +++++--- .../commons/upload/MultipleShareActivity.java | 3 ++- .../upload/MultipleUploadListFragment.java | 25 ++++++++++--------- .../commons/upload/SingleUploadFragment.java | 22 ++++++++-------- 5 files changed, 39 insertions(+), 32 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 75be2adde..7b2b0a97f 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 @@ -128,7 +128,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { forgotPasswordText.setOnClickListener(view -> forgotPassword()); - if(BuildConfig.FLAVOR == "beta"){ + if(BuildConfig.FLAVOR.equals("beta")){ loginCredentials.setText(getString(R.string.login_credential)); } else { loginCredentials.setVisibility(View.GONE); @@ -145,8 +145,12 @@ public class LoginActivity extends AccountAuthenticatorActivity { } public void hideKeyboard(View view) { - InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + if (view != null) { + InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index a41a52139..101d4b21e 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -10,7 +10,6 @@ import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -43,7 +42,6 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.upload.MwVolleyApi; -import fr.free.nrw.commons.upload.SingleUploadFragment; import fr.free.nrw.commons.utils.StringSortingUtils; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -131,8 +129,13 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { } public void hideKeyboard(View view) { - InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + + if (view != null) { + InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } } @Override 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 510076ce8..9c31e2b4d 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 @@ -166,7 +166,8 @@ public class MultipleShareActivity extends AuthenticatedActivity View target = getCurrentFocus(); if (target != null) { InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(target.getWindowToken(), 0); + if (imm != null) + imm.hideSoftInputFromWindow(target.getWindowToken(), 0); } getSupportFragmentManager().beginTransaction() .add(R.id.uploadsFragmentContainer, categorizationFragment, "categorization") 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 34fe1d0cb..c7f3c39c0 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 @@ -88,9 +88,9 @@ public class MultipleUploadListFragment extends Fragment { if (view == null) { view = LayoutInflater.from(getContext()).inflate(R.layout.layout_upload_item, viewGroup, false); holder = new UploadHolderView(); - holder.image = (SimpleDraweeView) view.findViewById(R.id.uploadImage); - holder.title = (TextView) view.findViewById(R.id.uploadTitle); - holder.overlay = (RelativeLayout) view.findViewById(R.id.uploadOverlay); + holder.image = view.findViewById(R.id.uploadImage); + holder.title = view.findViewById(R.id.uploadTitle); + holder.overlay = view.findViewById(R.id.uploadOverlay); holder.image.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, photoSize.y)); holder.image.setHierarchy(GenericDraweeHierarchyBuilder @@ -128,11 +128,8 @@ public class MultipleUploadListFragment extends Fragment { super.onStop(); // FIXME: Stops the keyboard from being shown 'stale' while moving out of this fragment into the next - View target = getView().findFocus(); - if (target != null) { - InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(target.getWindowToken(), 0); - } + View target = getActivity().getCurrentFocus(); + hideKeyboard(target); } // FIXME: Wrong result type @@ -168,8 +165,8 @@ public class MultipleUploadListFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_multiple_uploads_list, container, false); - photosGrid = (GridView) view.findViewById(R.id.multipleShareBackground); - baseTitle = (EditText) view.findViewById(R.id.multipleBaseTitle); + photosGrid = view.findViewById(R.id.multipleShareBackground); + baseTitle = view.findViewById(R.id.multipleBaseTitle); photosAdapter = new PhotoDisplayAdapter(); photosGrid.setAdapter(photosAdapter); @@ -189,8 +186,12 @@ public class MultipleUploadListFragment extends Fragment { } public void hideKeyboard(View view) { - InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + if (view != null) { + InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index e93ac12d6..56d443d08 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -3,22 +3,20 @@ package fr.free.nrw.commons.upload; import android.annotation.SuppressLint; import android.app.Activity; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; -import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; import android.support.v4.view.ViewCompat; import android.support.v7.app.AlertDialog; + import android.text.Editable; import android.text.Html; import android.text.TextWatcher; import android.text.method.LinkMovementMethod; -import android.util.Log; + import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -186,9 +184,12 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { } public void hideKeyboard(View view) { - Log.i("hide", "hideKeyboard: "); - InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + if (view != null) { + InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } } @Override @@ -303,11 +304,8 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { super.onStop(); // FIXME: Stops the keyboard from being shown 'stale' while moving out of this fragment into the next - View target = getView().findFocus(); - if (target != null) { - InputMethodManager imm = (InputMethodManager) target.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(target.getWindowToken(), 0); - } + View target = getActivity().getCurrentFocus(); + hideKeyboard(target); } @NonNull