From c7f6849cefcca66ab6f839f29dfc59a7822cfebe Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Wed, 12 Dec 2018 17:15:15 +0300 Subject: [PATCH 01/10] Add cancel and retry buttons on layout contribution --- .../contributions/ContributionViewHolder.java | 6 ++ .../ContributionsListAdapter.java | 23 +++++ .../mwapi/ApacheHttpClientMediaWikiApi.java | 2 + .../res/drawable-hdpi/ic_cancel_white.png | Bin 0 -> 351 bytes .../main/res/drawable-hdpi/ic_retry_white.png | Bin 0 -> 449 bytes .../res/drawable-mdpi/ic_cancel_white.png | Bin 0 -> 256 bytes .../main/res/drawable-mdpi/ic_retry_white.png | Bin 0 -> 279 bytes .../res/drawable-xhdpi/ic_cancel_white.png | Bin 0 -> 470 bytes .../res/drawable-xhdpi/ic_retry_white.png | Bin 0 -> 570 bytes .../res/drawable-xxhdpi/ic_cancel_white.png | Bin 0 -> 764 bytes .../res/drawable-xxhdpi/ic_retry_white.png | Bin 0 -> 945 bytes .../res/drawable-xxxhdpi/ic_cancel_white.png | Bin 0 -> 1016 bytes .../res/drawable-xxxhdpi/ic_retry_white.png | Bin 0 -> 1293 bytes .../main/res/layout/layout_contribution.xml | 96 +++++++++++++----- 14 files changed, 101 insertions(+), 26 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_cancel_white.png create mode 100644 app/src/main/res/drawable-hdpi/ic_retry_white.png create mode 100644 app/src/main/res/drawable-mdpi/ic_cancel_white.png create mode 100644 app/src/main/res/drawable-mdpi/ic_retry_white.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_cancel_white.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_retry_white.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_cancel_white.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_retry_white.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_cancel_white.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_retry_white.png diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java index 3dc79a50b..43a2af725 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java @@ -1,6 +1,8 @@ package fr.free.nrw.commons.contributions; import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; import android.widget.ProgressBar; import android.widget.TextView; @@ -13,6 +15,8 @@ class ContributionViewHolder { final TextView stateView; final TextView seqNumView; final ProgressBar progressView; + final ImageButton retryButton; + final ImageButton cancelButton; ContributionViewHolder(View parent) { imageView = parent.findViewById(R.id.contributionImage); @@ -20,5 +24,7 @@ class ContributionViewHolder { stateView = parent.findViewById(R.id.contributionState); seqNumView = parent.findViewById(R.id.contributionSequenceNumber); progressView = parent.findViewById(R.id.contributionProgress); + retryButton = parent.findViewById(R.id.retryButton); + cancelButton = parent.findViewById(R.id.cancelButton); } } 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 a31caf54f..eec0ab201 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 @@ -3,6 +3,7 @@ package fr.free.nrw.commons.contributions; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -37,20 +38,40 @@ class ContributionsListAdapter extends CursorAdapter { views.seqNumView.setText(String.valueOf(cursor.getPosition() + 1)); views.seqNumView.setVisibility(View.VISIBLE); + views.retryButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","Retry button is clicked"); + } + }); + + views.cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","Cancel button is clicked"); + } + }); + switch (contribution.getState()) { case Contribution.STATE_COMPLETED: views.stateView.setVisibility(View.GONE); views.progressView.setVisibility(View.GONE); + views.retryButton.setVisibility(View.GONE); + views.cancelButton.setVisibility(View.GONE); views.stateView.setText(""); break; case Contribution.STATE_QUEUED: views.stateView.setVisibility(View.VISIBLE); views.progressView.setVisibility(View.GONE); views.stateView.setText(R.string.contribution_state_queued); + views.retryButton.setVisibility(View.GONE); + views.cancelButton.setVisibility(View.GONE); break; case Contribution.STATE_IN_PROGRESS: views.stateView.setVisibility(View.GONE); views.progressView.setVisibility(View.VISIBLE); + views.retryButton.setVisibility(View.GONE); + views.cancelButton.setVisibility(View.GONE); long total = contribution.getDataLength(); long transferred = contribution.getTransferred(); if (transferred == 0 || transferred >= total) { @@ -63,6 +84,8 @@ class ContributionsListAdapter extends CursorAdapter { views.stateView.setVisibility(View.VISIBLE); views.stateView.setText(R.string.contribution_state_failed); views.progressView.setVisibility(View.GONE); + views.retryButton.setVisibility(View.VISIBLE); + views.cancelButton.setVisibility(View.VISIBLE); break; } } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index 2e1cbb1ac..815182480 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -8,6 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; +import android.util.Log; import com.google.gson.Gson; @@ -897,6 +898,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { if (!resultStatus.equals("Success")) { String errorCode = result.getString("/api/error/@code"); + Log.d("deneme","error code: "+errorCode); Timber.e(errorCode); return new UploadResult(resultStatus, errorCode); } else { diff --git a/app/src/main/res/drawable-hdpi/ic_cancel_white.png b/app/src/main/res/drawable-hdpi/ic_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..f8709859d18c8e40328df1ecd372c30c16878e7e GIT binary patch literal 351 zcmV-l0igbgP)|3_wc+j2wxXvA5s^SvUem=)gV5*pcK;)Ksp7QZObE)m0nmEy&S8Tnh|GkhggR!iE+r0; zndqohyJrsDH>p4whdGm_hh(^7yCYINWgO2ks?j5urnzv@&p$80LIF~K+>epCZHkjbomG7 zU>MH8-L08LJorFv_lD19cV;%1JH;mq!z-_3z?)Yx;KwT&b0L;lM>3{DdSy(74#_Y> z&<8D0wwBRs!4qiuA{6lrM&QCi>Jhwv_n5I)&@kE5_+0?kV5a7*z@^!-$GbcjfSs5( zC1KOVh_PGVOOaI1ymVkZ5JEJ+WLjJ?UICv%>c+hNP^&cdp%{0B(9#E?n#$z)Bp*{Q zxdZo1!GTaw2z@2m*qlSQB0$Z7P$TsUae$==&@tabbP_~>z=2SJ}fsgx~3T3+Ejp^~KyD?-TUY`=j>MEY<|iVDpE_hUXmb r))6CC<~vxQ?_~dbFFQZy=fLv|dbkFO;dJGM00000NkvXXu0mjf*;Udb literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_cancel_white.png b/app/src/main/res/drawable-mdpi/ic_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..2d693927fb2f78d1adb235343184aeb43da6fe11 GIT binary patch literal 256 zcmV+b0ssDqP)JQm&* zRDc6K5P%H{_^ia#U2zMnK>9*?$NrjzxkI>S?n>WH@x!DiE$Jcls-Shw7r+3K5Q-RE zh?*$Mz!4$_V^d{P<`c#YvCmNkzVVg2kj8aEH;i{YWe^%UJqzk;9vgcCbu_n&!W||Z z;t91zIRo|-Nfnv>nDYK;?5#qi*@?7k_6tYs$`rZu-xwde1j5l7_{G`)0000#h*m8;Ddn=+GMjslAW!pUm7vS zooaG0s3unt7$+xl&E&!f1kiw5L*P33_Fz>~WD6{Cpyk}Yn8;+_fCJaON|{nbPSO{7 zlPB|zr)ac%Vkr<(f)_%jz>)&zmp;Mb3>?8lHf0EGk^~qW7;Lq!s9~_n5J-PyDK(ay zl%7e5&o5Kjf1ruXo8>dCB002ovPDHLkV1jWQcV_?q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_cancel_white.png b/app/src/main/res/drawable-xhdpi/ic_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..495fed7ac6131bce605a6c8ba6fec1ca453d0cf4 GIT binary patch literal 470 zcmV;{0V)28P)g)ikFRu zTo_QUApS||V!;k88Za0yYz&om;v_Z#DbXo5F`yvE@CzUe#0wlt*-HwO9kwTkKTCO! z&=eow*fVjiM8|-f@ar!#(W)Yduhi&*f8vun(M;AVh`CcpF(B1+ z1*#wugH=+B0h#7voO21)ohW@MWE2Bx!-(?g>)N=DN=-4KF^uW2gxb1|OhYLHJBy8} zdY8W#x{XZtwmil9^r%t=Zi`2YX_ M07*qoM6N<$f%A_P)t6B0d9d$sRDiu4}6JCoAB_W1Vqy&JiIgkzYZ@( z08bk+0^-t!;S4wxl{O4-zzgsQjDa4|%yrr%z#5nW9jO9BY=I$gp63+$NFZd9$=66& z#7)2k9KZ#hVxD^iu5#Z-gN_6YVuUO+tBZXvGWs(2G3itlVI}Bm+$ls1#h5ufQwAQG z06*&%yO*7&bmBEJ6*bUMVMhgQfSQ<*63<$I$3*m`4MQ#yFqS63VFKpT1hkldm5ySp z2E`P@umDTpTCHOVgX{f00?VL)npOcsx@4p+g92>sjdYOC8L4AXz_s=w2FZkxx+%8N zi4M{pBlS$wfw7B>3TwlN2L=R~vl1YhG4jB8H8dW+p)hkZoxe_pEN=7#fdwvW;7-R* z)AoQ59;0KHRy5FzQWuyX}QKuOggDHZ+?R1R{D!Ays$!r?H{pP^ogUA zrH8j^QM*21xohWX7-^F27?S~9Q3`G8?|H7)>qQh%L=jrz8-5q7tvpHB&j0`b07*qo IM6N<$f-m>;O8@`> literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_cancel_white.png b/app/src/main/res/drawable-xxhdpi/ic_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4acd5247b5098a6c5610df6bffd8ecc9f15b0d GIT binary patch literal 764 zcmVuq*IZs^p-tD~lnK9w`0b-Ik@>oiFA*W855w1BP=ZPziss3qlnuK+Z zh)F_?t@$Z(T7;h*lkpP)3k*19NY9^Nfj(&u19Fs(fOS^+9##pi%aVnNoS3cw;UpkOT{}qVl#tYQ5!P3h)2f=Hb6{yn zQIeblNjB4MB?|jowF@nr=je@IQ%gFfkrUH7vT)q$**X$}CITlKXpj_1EGMQb5CnmV zgrJSknMxnbCDCcvNOm92!ib|YHHInoQQr+6Pt|+MeHu0d^(}WFY%S@W7_@K8iSL&5 zZ3vn=T-fPaQpm`{a^jfU5Hxq38blga5orDhS|zi9d?m)IHg0&w%d-ebw(Y+^|-BAqL!XRVor_=D%VOsHc?!bPAi4o0CK1YwGa zrx=_x!o09}hJ_+h4RNZ0WEJHOLAe73Gn8DNlw47?$F`5K+XEYi*m_3uLKe*nXn#Qi z6$q00005hE zD<-s}{7>~e_GxO{ncdReo!OoDlJ5oBdBdk~XWqPdbsRRf*jTgKJjWE|a1u~~Nk}3G zT8Dlzjoy*-LcoDenMil!{DZ@Qx+7=39S#HfKXMA4a2Svxau`tCRxX2MHK6vbTn5Kl zKwcupT0mYS$4Wq*NuWnvf-XSktxEzu>I?J<`T$j+B9w=&TCSDl3&51ZYajD@M+DCC+af1ZYMw$K5cTS0v6C4Fa^JZJVbX&0fw+5l9q^VK~oA zobLy^L-e;m?`u11hy$OZSe`Qgklw>8?PQyhNt6u$RMuYZ5XC3OrCnAd95V`La5hfK zVXujZvgeQnI72Qa*YU6?B-_nI;e15{pcO^YzNjOd(~A2jaRoCM;#}qw*FIv7X{pCSS67tm)h_MxY(V* z*6`SBcR+{AM^v5=uj&;lmtKSJQ1QLw(&Ez9g6EiQqLI>NO;WYaiMHM&=-6XVV&|F@ zjV4afk_){HsRj6yd_}GeI7v<3wE)4?$VbwNs!_&Wq*uo;Fh?|I+KG$dpBbYsqP(Rw zre7$>^sE?T%!#W}E|a0kWRYszdz2A3NQd;Z_OC-_BHg~i#>U3R#>U3R7BBk^v-?ws TB4n~`00000NkvXXu0mjf8oarl literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_cancel_white.png b/app/src/main/res/drawable-xxxhdpi/ic_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..8f131ab243469d0585f93e75704fbef2cb5561af GIT binary patch literal 1016 zcmV5M85RPC#f@08C`yjkFXqO^Yet?z#La?<@ZDnzdASejWDkg=ssQ<~#h7s=FGbVDg zJ9FMQ@HHm7d*A5n?9A-!%?$(sfj}S-2m}H-Cx^qKK)5B82xUT*QRdg&-wI$#j_?|x zP3RH^gb`svm=l(SH^!1*oACb(_&x5uH8A;m!tV)Bgg#+P*b(+AvE$F`^Jm|K>3>PT zBRmp@gq0BK=ajMHvD}zEGd<=TyCB;){f5 z!om>oNi2Ad#cLzKNq8k}4U>Pwmgm~M7Qg+4u+9MSNvwJ9g{+caVSjv+LGq8-@H14h zMt+?z&M@&wxM!(nh5Ux`g*MFs-LOvn1L5x#l7EDIwg=1K{A(sZu7rj~o4?2b`Ehep zx8&`Nb3}f8VXkPCUtl+FpHmD}_X)gF+2mLO?%7{7!wc&ilONwPH$#(OSIy8mv8RYUlV3@U+2XlKW!6eQ70?y@=C=YzQooI8vJ#|z30jfr4%j_i4msG$s zq;H<$+p1}Hl9)=7UkgyXDM6gJ**Rr~Y7z=)TPyuIVLGgsog~_pcE7&NktMSuzbjTq zIbKSrCA0Hi%2FcdJIZ<`nqsBiC{@mw54}y4vP{1=N5;%f9FDu&wBhHuVyZ7n^Gi@N zJ8{fYg{S%W=Q4|hu|^7n9e3rl>Bl$ahq%}rDVv>S(y0msWLN<(LCPiwi?H${3^!ES z4aG)Gb0daOgmNeX!8jYiIE15>!_i2{XeMNkl2lGfA}MbpDUY%g<+2nMW@#2?p)^ss zG!ezQHi~mmo~~J*F1#zo0gV*lX&h0~I-yd$))S5^Wpa4@0>Tw!8B3An_^h$3)}l@UeYA~z$7z*UBZl!41UjVT1z*&5te m;6i5z1OkCTAP@*7oqPhkWyb2u*IIl40000 z)RnAE)Be+T2F~^%xHI?eot>Gz-+}K%bnbW0=RGrXX3p_E7z_r31+iQ%R{<}WbN(U1 z19-yFf4*=&;SaoF#`zsnw z(%3H~0xU%8DD$8%LF3px5&?b@PI@qH0*ElQCJ~_rp3)~kC7-NeQ)WaYO4)-OZ(_E;g3cN`Yr zzU=0l4J3yoBvUTlEaMekO7d<)HV~C%4cA<(R&*vAMimxBUyDWs#DZ6I2$ zFcD8XD8RHc2QoxtTtarmrCl-a;$=sY<2Dg)S2)BTaY%p>h4*Q6Xy!4z@DB2jXb=fA1n?DJi77NhH9A)!ay{#`WtPndti;J)pa&KjB z?q1F%atX!KpLv_gKsoI^ufSWpTf+89tY5L%VakRIM8Sc%sBrFgVF_2k z2D#SysE(O)=KNO_wDEDBN*QR{#Fm~@C~3uN`c>zO^oVeuk8)Gda;&3-+&cJ~s{JGS zTuY_o*VLmvimrD!7Pn~R)WXl$@xg1<*+Ole;AVU_&B$_FfkcQr5&>Ej>@jz@TNUsU zFO>_{4N)}O=nk@E<>z+u7|Q{kpDLSU zIDh8*oU;nWcCsaM%qu73OHLDn?GPF(?Qs{x4Gt^c+2O@DZrWy!<=L=_C*~Ug`}gR^ z26HR_&M5SfNp6&9L(jN;)4rq^CF7&aTZAQp&R=2<(XI93*&2EI+fsgZ&pG z&TWO?X$nodJhpg793C&cWW7ij<6h63ML2zv#~9-=WAL#5Ra25Le~H7MS9~30k;BL~ zBg;Qq;NQu&uTMs%-x~}DgTY`h7z_r3!C){L%zFC=uGp{L3CbbI00000NkvXXu0mjf Dyv|VG literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/layout_contribution.xml b/app/src/main/res/layout/layout_contribution.xml index 87e7fe9e3..7b04c9140 100644 --- a/app/src/main/res/layout/layout_contribution.xml +++ b/app/src/main/res/layout/layout_contribution.xml @@ -28,39 +28,83 @@ - - + android:layout_weight="3" + android:layout_gravity="center|bottom" + android:orientation="vertical" + android:padding="@dimen/small_gap" + > + - + + + + + + + android:layout_weight="1" + android:orientation="horizontal" + android:padding="@dimen/small_gap" + > + + + + + + + \ No newline at end of file From bfd30e94352891319f2e6fc183b2cc673364ea14 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 17:27:58 +0300 Subject: [PATCH 02/10] Make sure your retry logic works --- .../contributions/ContributionViewHolder.java | 2 + .../contributions/ContributionsFragment.java | 2 + .../ContributionsListAdapter.java | 63 +++++++++++++++---- .../nrw/commons/upload/UploadService.java | 2 + 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java index 43a2af725..df50b9cb8 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java @@ -17,6 +17,7 @@ class ContributionViewHolder { final ProgressBar progressView; final ImageButton retryButton; final ImageButton cancelButton; + int position; ContributionViewHolder(View parent) { imageView = parent.findViewById(R.id.contributionImage); @@ -26,5 +27,6 @@ class ContributionViewHolder { progressView = parent.findViewById(R.id.contributionProgress); retryButton = parent.findViewById(R.id.retryButton); cancelButton = parent.findViewById(R.id.cancelButton); + position = 0; } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index c8f140575..568dcc649 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -291,6 +291,8 @@ public class ContributionsFragment contributionsListFragment.clearSyncMessage(); notifyAndMigrateDataSetObservers(); + + ((ContributionsListAdapter)contributionsListFragment.getAdapter()).setUploadService(allContributions, uploadService); } } 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 eec0ab201..268dda208 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 @@ -9,16 +9,27 @@ import android.view.View; import android.view.ViewGroup; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.upload.UploadService; +import timber.log.Timber; + +import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; class ContributionsListAdapter extends CursorAdapter { private final ContributionDao contributionDao; + private Cursor allContributions; + private UploadService uploadService; public ContributionsListAdapter(Context context, Cursor c, int flags, ContributionDao contributionDao) { super(context, c, flags); this.contributionDao = contributionDao; } + public void setUploadService(Cursor allContributions, UploadService uploadService) { + this.allContributions = allContributions; + this.uploadService = uploadService; + } + @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { View parent = LayoutInflater.from(context) @@ -37,20 +48,8 @@ class ContributionsListAdapter extends CursorAdapter { views.seqNumView.setText(String.valueOf(cursor.getPosition() + 1)); views.seqNumView.setVisibility(View.VISIBLE); + views.position = cursor.getPosition(); - views.retryButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.d("deneme","Retry button is clicked"); - } - }); - - views.cancelButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Log.d("deneme","Cancel button is clicked"); - } - }); switch (contribution.getState()) { case Contribution.STATE_COMPLETED: @@ -86,7 +85,45 @@ class ContributionsListAdapter extends CursorAdapter { views.progressView.setVisibility(View.GONE); views.retryButton.setVisibility(View.VISIBLE); views.cancelButton.setVisibility(View.VISIBLE); + + views.retryButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","contex:"+context); + Log.d("deneme","Retry button is clicked"); + retryUpload(cursor); + } + }); + + views.cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.d("deneme","Cancel button is clicked"); + } + }); + + break; } } + + /** + * Retry upload when it is failed + * @param cursor position of upload which will be retried + */ + public void retryUpload(Cursor cursor) { + // TODO: first check for internet connection, if not display a message and do nothing. + Log.d("deneme","Retrying i:"+cursor.getColumnName(1)); + Contribution c = contributionDao.fromCursor(cursor); + if (c.getState() == STATE_FAILED) { + uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); + Timber.d("Restarting for %s", c.toString()); + Log.d("deneme","Restarting for %s"+ c.getFilename()); + + } else { + Timber.d("Skipping re-upload for non-failed %s", c.toString()); + Log.d("deneme","Skipping re-upload for non-failed %s"+ c.getFilename()); + + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 0873d46d8..1ea8bc4ed 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -10,6 +10,7 @@ import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.app.NotificationCompat; +import android.util.Log; import android.webkit.MimeTypeMap; import android.widget.Toast; @@ -330,6 +331,7 @@ public class UploadService extends HandlerService { contribution.setState(Contribution.STATE_FAILED); contributionDao.save(contribution); + Log.d("deneme","failed and contrib saved, contribution name is"+contribution.getFilename()); } private String findUniqueFilename(String fileName) throws IOException { From e4c05d2fb3392886e362c7e581761215efb99749 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 17:35:36 +0300 Subject: [PATCH 03/10] Add cancel method too --- .../ContributionsListAdapter.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 268dda208..e822b9a97 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 @@ -99,6 +99,7 @@ class ContributionsListAdapter extends CursorAdapter { @Override public void onClick(View view) { Log.d("deneme","Cancel button is clicked"); + deleteUpload(cursor); } }); @@ -126,4 +127,22 @@ class ContributionsListAdapter extends CursorAdapter { } } + + /** + * Delete a failed upload attempt + * @param cursor position of upload attempt which will be deteled + */ + public void deleteUpload(Cursor cursor) { + // TODO: check internet connection, warn user and do nothing is a problem occurred + + Contribution c = contributionDao.fromCursor(cursor); + if (c.getState() == STATE_FAILED) { + Timber.d("Deleting failed contrib %s", c.toString()); + Log.d("deneme","Deleting failed:"+c.getFilename()); + contributionDao.delete(c); + } else { + Timber.d("Skipping deletion for non-failed contrib %s", c.toString()); + Log.d("deneme","Skipping deletion for non-failed contrib"+c.getFilename()); + } + } } From 59b8a4a70ae1000111b7486361719bdaab297abd Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 18:04:02 +0300 Subject: [PATCH 04/10] Add javadocs and remove debug logs --- .../contributions/ContributionsListAdapter.java | 14 ++------------ .../fr/free/nrw/commons/upload/UploadService.java | 1 - 2 files changed, 2 insertions(+), 13 deletions(-) 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 e822b9a97..36d0bb929 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 @@ -89,8 +89,6 @@ class ContributionsListAdapter extends CursorAdapter { views.retryButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Log.d("deneme","contex:"+context); - Log.d("deneme","Retry button is clicked"); retryUpload(cursor); } }); @@ -98,7 +96,6 @@ class ContributionsListAdapter extends CursorAdapter { views.cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Log.d("deneme","Cancel button is clicked"); deleteUpload(cursor); } }); @@ -110,27 +107,22 @@ class ContributionsListAdapter extends CursorAdapter { /** * Retry upload when it is failed - * @param cursor position of upload which will be retried + * @param cursor cursor will be retried */ public void retryUpload(Cursor cursor) { // TODO: first check for internet connection, if not display a message and do nothing. - Log.d("deneme","Retrying i:"+cursor.getColumnName(1)); Contribution c = contributionDao.fromCursor(cursor); if (c.getState() == STATE_FAILED) { uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); Timber.d("Restarting for %s", c.toString()); - Log.d("deneme","Restarting for %s"+ c.getFilename()); - } else { Timber.d("Skipping re-upload for non-failed %s", c.toString()); - Log.d("deneme","Skipping re-upload for non-failed %s"+ c.getFilename()); - } } /** * Delete a failed upload attempt - * @param cursor position of upload attempt which will be deteled + * @param cursor cursor which will be deleted */ public void deleteUpload(Cursor cursor) { // TODO: check internet connection, warn user and do nothing is a problem occurred @@ -138,11 +130,9 @@ class ContributionsListAdapter extends CursorAdapter { Contribution c = contributionDao.fromCursor(cursor); if (c.getState() == STATE_FAILED) { Timber.d("Deleting failed contrib %s", c.toString()); - Log.d("deneme","Deleting failed:"+c.getFilename()); contributionDao.delete(c); } else { Timber.d("Skipping deletion for non-failed contrib %s", c.toString()); - Log.d("deneme","Skipping deletion for non-failed contrib"+c.getFilename()); } } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 1ea8bc4ed..f4a624b18 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -331,7 +331,6 @@ public class UploadService extends HandlerService { contribution.setState(Contribution.STATE_FAILED); contributionDao.save(contribution); - Log.d("deneme","failed and contrib saved, contribution name is"+contribution.getFilename()); } private String findUniqueFilename(String fileName) throws IOException { From 915a8888432f8e35b65c50cff18428b895d5bea3 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 18:06:03 +0300 Subject: [PATCH 05/10] Remove two unused methods --- .../contributions/ContributionsFragment.java | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index 568dcc649..f80f1e9c8 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -382,36 +382,6 @@ public class ContributionsFragment mediaDetailPagerFragment.showImage(i); } - /** - * Retry upload when it is failed - * @param i position of upload which will be retried - */ - public void retryUpload(int i) { - allContributions.moveToPosition(i); - Contribution c = contributionDao.fromCursor(allContributions); - if (c.getState() == STATE_FAILED) { - uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); - Timber.d("Restarting for %s", c.toString()); - } else { - Timber.d("Skipping re-upload for non-failed %s", c.toString()); - } - } - - /** - * Delete a failed upload attempt - * @param i position of upload attempt which will be deteled - */ - public void deleteUpload(int i) { - allContributions.moveToPosition(i); - Contribution c = contributionDao.fromCursor(allContributions); - if (c.getState() == STATE_FAILED) { - Timber.d("Deleting failed contrib %s", c.toString()); - contributionDao.delete(c); - } else { - Timber.d("Skipping deletion for non-failed contrib %s", c.toString()); - } - } - @Override public void refreshSource() { getActivity().getSupportLoaderManager().restartLoader(0, null, this); From f3818c6e2305aebe941df3f27b2e507dd78f5d20 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 18:07:50 +0300 Subject: [PATCH 06/10] Remove old and unused retry buttons as we do for their functions --- .../commons/media/MediaDetailPagerFragment.java | 16 ---------------- app/src/main/res/menu/fragment_image_detail.xml | 13 ------------- 2 files changed, 29 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 3db8258fb..27eb08055 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -189,16 +189,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple // Set wallpaper setWallpaper(m); return true; - case R.id.menu_retry_current_image: - // Retry - //((MainActivity) getActivity()).retryUpload(pager.getCurrentItem()); - getActivity().getSupportFragmentManager().popBackStack(); - return true; - case R.id.menu_cancel_current_image: - // todo: delete image - //((MainActivity) getActivity()).deleteUpload(pager.getCurrentItem()); - getActivity().getSupportFragmentManager().popBackStack(); - return true; default: return super.onOptionsItemSelected(item); } @@ -279,8 +269,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple Media m = provider.getMediaAtPosition(pager.getCurrentItem()); if (m != null) { // Enable default set of actions, then re-enable different set of actions only if it is a failed contrib - menu.findItem(R.id.menu_retry_current_image).setEnabled(false).setVisible(false); - menu.findItem(R.id.menu_cancel_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_browser_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true); @@ -297,8 +285,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple Contribution c = (Contribution) m; switch (c.getState()) { case Contribution.STATE_FAILED: - menu.findItem(R.id.menu_retry_current_image).setEnabled(true).setVisible(true); - menu.findItem(R.id.menu_cancel_current_image).setEnabled(true).setVisible(true); menu.findItem(R.id.menu_browser_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_share_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_download_current_image).setEnabled(false).setVisible(false); @@ -306,8 +292,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple break; case Contribution.STATE_IN_PROGRESS: case Contribution.STATE_QUEUED: - menu.findItem(R.id.menu_retry_current_image).setEnabled(false).setVisible(false); - menu.findItem(R.id.menu_cancel_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_browser_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_share_current_image).setEnabled(false).setVisible(false); menu.findItem(R.id.menu_download_current_image).setEnabled(false).setVisible(false); diff --git a/app/src/main/res/menu/fragment_image_detail.xml b/app/src/main/res/menu/fragment_image_detail.xml index 3161bd155..21f5f9be9 100644 --- a/app/src/main/res/menu/fragment_image_detail.xml +++ b/app/src/main/res/menu/fragment_image_detail.xml @@ -25,18 +25,5 @@ android:id="@+id/menu_set_as_wallpaper" android:title="@string/menu_set_wallpaper" app:showAsAction="never" /> - - \ No newline at end of file From 2569bb45f72b4e15e1846e6f50f891b08a1e7f16 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Thu, 13 Dec 2018 20:22:20 +0300 Subject: [PATCH 07/10] Check internet connection before button function, since function requires internet connection --- .../ContributionsListAdapter.java | 35 ++++++++++++------- app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 24 insertions(+), 13 deletions(-) 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 36d0bb929..2e13c6df3 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 @@ -10,6 +10,8 @@ import android.view.ViewGroup; import fr.free.nrw.commons.R; import fr.free.nrw.commons.upload.UploadService; +import fr.free.nrw.commons.utils.NetworkUtils; +import fr.free.nrw.commons.utils.ViewUtil; import timber.log.Timber; import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; @@ -110,14 +112,18 @@ class ContributionsListAdapter extends CursorAdapter { * @param cursor cursor will be retried */ public void retryUpload(Cursor cursor) { - // TODO: first check for internet connection, if not display a message and do nothing. - Contribution c = contributionDao.fromCursor(cursor); - if (c.getState() == STATE_FAILED) { - uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); - Timber.d("Restarting for %s", c.toString()); + if (NetworkUtils.isInternetConnectionEstablished(mContext)) { + Contribution c = contributionDao.fromCursor(cursor); + if (c.getState() == STATE_FAILED) { + uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); + Timber.d("Restarting for %s", c.toString()); + } else { + Timber.d("Skipping re-upload for non-failed %s", c.toString()); + } } else { - Timber.d("Skipping re-upload for non-failed %s", c.toString()); + ViewUtil.showLongToast(mContext,R.string.this_function_needs_network_connection); } + } /** @@ -125,14 +131,17 @@ class ContributionsListAdapter extends CursorAdapter { * @param cursor cursor which will be deleted */ public void deleteUpload(Cursor cursor) { - // TODO: check internet connection, warn user and do nothing is a problem occurred - - Contribution c = contributionDao.fromCursor(cursor); - if (c.getState() == STATE_FAILED) { - Timber.d("Deleting failed contrib %s", c.toString()); - contributionDao.delete(c); + if (NetworkUtils.isInternetConnectionEstablished(mContext)) { + Contribution c = contributionDao.fromCursor(cursor); + if (c.getState() == STATE_FAILED) { + Timber.d("Deleting failed contrib %s", c.toString()); + contributionDao.delete(c); + } else { + Timber.d("Skipping deletion for non-failed contrib %s", c.toString()); + } } else { - Timber.d("Skipping deletion for non-failed contrib %s", c.toString()); + ViewUtil.showLongToast(mContext,R.string.this_function_needs_network_connection); } + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 531ddf740..8589d1dee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -433,4 +433,6 @@ Upload your first media by touching the camera or gallery icon above. Display location permission Ask for location permission when needed for nearby notification card view feature. + This function requires network connection, please check your connection settings. + From 5b25229a5ce7ee35501d96839a12995905d0eba0 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Fri, 14 Dec 2018 17:18:41 +0300 Subject: [PATCH 08/10] Remove unused variable --- .../free/nrw/commons/contributions/ContributionsFragment.java | 2 +- .../nrw/commons/contributions/ContributionsListAdapter.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index f80f1e9c8..1d73dad68 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -292,7 +292,7 @@ public class ContributionsFragment contributionsListFragment.clearSyncMessage(); notifyAndMigrateDataSetObservers(); - ((ContributionsListAdapter)contributionsListFragment.getAdapter()).setUploadService(allContributions, uploadService); + ((ContributionsListAdapter)contributionsListFragment.getAdapter()).setUploadService(uploadService); } } 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 2e13c6df3..e26599cbc 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 @@ -19,7 +19,6 @@ import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; class ContributionsListAdapter extends CursorAdapter { private final ContributionDao contributionDao; - private Cursor allContributions; private UploadService uploadService; public ContributionsListAdapter(Context context, Cursor c, int flags, ContributionDao contributionDao) { @@ -27,8 +26,7 @@ class ContributionsListAdapter extends CursorAdapter { this.contributionDao = contributionDao; } - public void setUploadService(Cursor allContributions, UploadService uploadService) { - this.allContributions = allContributions; + public void setUploadService( UploadService uploadService) { this.uploadService = uploadService; } From ce4a0c1194f353cb173f42277dc14ed1af36b6f3 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Fri, 14 Dec 2018 18:03:26 +0300 Subject: [PATCH 09/10] Display possible solution for badtoken error --- .../nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java | 9 ++++++++- app/src/main/res/values/strings.xml | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index 815182480..3f6c561af 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -44,6 +44,7 @@ import java.util.concurrent.Callable; import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.PageTitle; +import fr.free.nrw.commons.R; import fr.free.nrw.commons.achievements.FeedbackResponse; import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.category.CategoryImageUtils; @@ -52,6 +53,7 @@ import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.NotificationUtils; import fr.free.nrw.commons.utils.ContributionUtils; import fr.free.nrw.commons.utils.DateUtils; +import fr.free.nrw.commons.utils.ViewUtil; import in.yuvi.http.fluent.Http; import io.reactivex.Observable; import io.reactivex.Single; @@ -79,6 +81,8 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { private Gson gson; private final OkHttpClient okHttpClient; + private final String ERROR_CODE_BAD_TOKEN = "badtoken"; + public ApacheHttpClientMediaWikiApi(Context context, String apiURL, String wikidatApiURL, @@ -898,8 +902,11 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { if (!resultStatus.equals("Success")) { String errorCode = result.getString("/api/error/@code"); - Log.d("deneme","error code: "+errorCode); Timber.e(errorCode); + + if (errorCode.equals(ERROR_CODE_BAD_TOKEN)) { + ViewUtil.showLongToast(context, R.string.bad_token_error_proposed_solution); + } return new UploadResult(resultStatus, errorCode); } else { // If success we have to remove file from temp directory diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8589d1dee..b33a0a55c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -434,5 +434,6 @@ Upload your first media by touching the camera or gallery icon above. Ask for location permission when needed for nearby notification card view feature. This function requires network connection, please check your connection settings. + Upload failed with "badtoken" error. Logging out and in again usually help to solve this issue. Meanwhile, we are working to prevent this error. From 47f10cb6c899be281773d6b234730f2509e0cfa7 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Sun, 16 Dec 2018 15:47:36 +0300 Subject: [PATCH 10/10] Fix string --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b33a0a55c..a95677bf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -434,6 +434,6 @@ Upload your first media by touching the camera or gallery icon above. Ask for location permission when needed for nearby notification card view feature. This function requires network connection, please check your connection settings. - Upload failed with "badtoken" error. Logging out and in again usually help to solve this issue. Meanwhile, we are working to prevent this error. + Upload failed due to issues with edit token. Please try logging out and in again.