From 6fa26af61c472e5a9e37b912eac338a3a9e5d13d Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Sat, 19 May 2018 19:17:16 +0300 Subject: [PATCH] Add ReviewController class --- .../nrw/commons/di/FragmentBuilderModule.java | 9 +++ .../mwapi/ApacheHttpClientMediaWikiApi.java | 10 +++- .../free/nrw/commons/mwapi/MediaWikiApi.java | 2 +- .../nrw/commons/review/ReviewActivity.java | 47 ++++++++------- .../review/ReviewCategoryMissuseFragment.java | 58 ++++++++++++++++++ .../nrw/commons/review/ReviewController.java | 44 ++++++++++++++ .../ReviewLicenceViolationFragment.java | 58 ++++++++++++++++++ .../review/ReviewOutOfContextFragment.java | 29 +++++++-- .../commons/review/ReviewPagerAdapter.java | 13 +++- .../commons/utils/MediaDataExtractorUtil.java | 26 ++++++++ ...layout.xml => review_category_missuse.xml} | 3 +- .../res/layout/review_licence_violation.xml | 60 +++++++++++++++++++ .../main/res/layout/review_out_of_context.xml | 60 +++++++++++++++++++ 13 files changed, 385 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/review/ReviewCategoryMissuseFragment.java create mode 100644 app/src/main/java/fr/free/nrw/commons/review/ReviewController.java create mode 100644 app/src/main/java/fr/free/nrw/commons/review/ReviewLicenceViolationFragment.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/MediaDataExtractorUtil.java rename app/src/main/res/layout/{out_of_context_question_layout.xml => review_category_missuse.xml} (94%) create mode 100644 app/src/main/res/layout/review_licence_violation.xml create mode 100644 app/src/main/res/layout/review_out_of_context.xml diff --git a/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java b/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java index 5f17dbc67..fd50dc64e 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java @@ -17,6 +17,8 @@ import fr.free.nrw.commons.nearby.NearbyFragment; import fr.free.nrw.commons.nearby.NearbyListFragment; import fr.free.nrw.commons.nearby.NearbyMapFragment; import fr.free.nrw.commons.nearby.NoPermissionsFragment; +import fr.free.nrw.commons.review.ReviewCategoryMissuseFragment; +import fr.free.nrw.commons.review.ReviewLicenceViolationFragment; import fr.free.nrw.commons.review.ReviewOutOfContextFragment; import fr.free.nrw.commons.settings.SettingsFragment; @@ -72,4 +74,11 @@ public abstract class FragmentBuilderModule { @ContributesAndroidInjector abstract ReviewOutOfContextFragment bindReviewOutOfContextFragment(); + @ContributesAndroidInjector + abstract ReviewLicenceViolationFragment bindReviewLicenceViolationFragment(); + + + @ContributesAndroidInjector + abstract ReviewCategoryMissuseFragment bindReviewCategoryMissuseFragment(); + } 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 4306705bf..a43080908 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 @@ -1097,8 +1097,8 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { return isoFormat.format(date); } - public MediaResult getRecentRandomImage() throws IOException { - MediaResult media = null; + public Media getRecentRandomImage() throws IOException { + Media media = null; int tries = 0; Random r = new Random(); @@ -1128,7 +1128,11 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { NodeList childNodes = recentChangesNode.getDocument().getChildNodes(); String imageTitle = RecentChangesImageUtils.findImageInRecentChanges(childNodes); if (imageTitle != null) { - media = fetchMediaByFilename(imageTitle); + boolean deletionStatus = pageExists("Commons:Deletion_requests/" + imageTitle); + if (!deletionStatus) { + media = new Media(imageTitle); + //media = fetchMediaByFilename(fileName); + } } } } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java index fe9986a7b..52f21f301 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java @@ -113,5 +113,5 @@ public interface MediaWikiApi { } @Nullable - MediaResult getRecentRandomImage() throws IOException; + Media getRecentRandomImage() throws IOException; } diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java index 744704d77..222ac27d1 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java @@ -21,8 +21,11 @@ import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; +import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.AuthenticatedActivity; +import fr.free.nrw.commons.mwapi.MediaResult; import fr.free.nrw.commons.mwapi.MediaWikiApi; import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; @@ -43,12 +46,13 @@ public class ReviewActivity extends AuthenticatedActivity { @BindView(R.id.reviewPager) ViewPager pager; - @Inject - MediaWikiApi mwApi; + @Inject MediaWikiApi mwApi; - public static final int MAX_NUM = 4; private ReviewPagerAdapter reviewPagerAdapter; + //private ReviewCallback reviewCallback; + private ReviewController reviewController; + @Override protected void onAuthCookieAcquired(String authCookie) { @@ -66,9 +70,11 @@ public class ReviewActivity extends AuthenticatedActivity { ButterKnife.bind(this); initDrawer(); + reviewController = new ReviewController(); + + reviewPagerAdapter = new ReviewPagerAdapter(getSupportFragmentManager()); pager.setAdapter(reviewPagerAdapter); - //pager.setAdapter(adapter); reviewPagerAdapter.getItem(0); } @@ -85,8 +91,14 @@ public class ReviewActivity extends AuthenticatedActivity { if (id == R.id.action_review_randomizer) { Observable.fromCallable(() -> { try { + Media result = mwApi.getRecentRandomImage(); + reviewController.onImageRefreshed(result.getFilename()); //file name is updated + reviewPagerAdapter.getItem(0); //new fragment with this new filename created - Log.d("review", mwApi.getRecentRandomImage().getWikiSource()); + //String thumBaseUrl = Utils.makeThumbBaseUrl(result.getFilename()); + //reviewPagerAdapter.currentThumbBasedUrl = thumBaseUrl; + + //Log.d("review", result.getWikiSource()); } catch (IOException e) { Log.d("review", e.toString()); @@ -120,21 +132,14 @@ public class ReviewActivity extends AuthenticatedActivity { Intent reviewActivity = new Intent(context, ReviewActivity.class); context.startActivity(reviewActivity); } -/* - @Override - public void onYesClicked() { - Log.d("deneme","onYesClicked"); + + interface ReviewCallback { + void onImageRefreshed(String itemTitle); + void onQuestionChanged(); + void onSurveyFinished(); + void onImproperImageReported(); + void onLicenceViolationReported(); + void oWrongCategoryReported(); + void onThankSent(); } - - @Override - public void onNoClicked() { - Log.d("deneme","onNoClicked"); - - } - - @Override - public void onNotSureClicked() { - Log.d("deneme","onNotSureClicked"); - - }*/ } diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewCategoryMissuseFragment.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewCategoryMissuseFragment.java new file mode 100644 index 000000000..a36e1a077 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewCategoryMissuseFragment.java @@ -0,0 +1,58 @@ +package fr.free.nrw.commons.review; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; + +import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; +import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; + +/** + * Created by root on 19.05.2018. + */ + +public class ReviewCategoryMissuseFragment extends CommonsDaggerSupportFragment { + int position; + String fileName; + + static ReviewCategoryMissuseFragment init(int val, String fileName) { + ReviewCategoryMissuseFragment fragment = new ReviewCategoryMissuseFragment(); + // Supply val input as an argument. + Bundle args = new Bundle(); + args.putInt("val", val); + args.putString("fileName", fileName); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + position = getArguments() != null ? getArguments().getInt("val") : 1; + fileName = getArguments() != null ? getArguments().getString("fileName") : ""; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View layoutView = inflater.inflate(R.layout.review_out_of_context, container, + false); + View textView = layoutView.findViewById(R.id.testingText); + + if (fileName!= null) { + SimpleDraweeView simpleDraweeView = layoutView.findViewById(R.id.imageView); + simpleDraweeView.setImageURI(Utils.makeThumbBaseUrl(fileName)); + } + + ((TextView) textView).setText("Fragment #" + position); + Log.d("deneme","Fragment #" + position); + return layoutView; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewController.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewController.java new file mode 100644 index 000000000..22eca424e --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewController.java @@ -0,0 +1,44 @@ +package fr.free.nrw.commons.review; + +/** + * Created by root on 19.05.2018. + */ + +public class ReviewController implements ReviewActivity.ReviewCallback { + public static String fileName; + + @Override + public void onImageRefreshed(String fileName) { + this.fileName = fileName; + } + + @Override + public void onQuestionChanged() { + + } + + @Override + public void onSurveyFinished() { + + } + + @Override + public void onImproperImageReported() { + + } + + @Override + public void onLicenceViolationReported() { + + } + + @Override + public void oWrongCategoryReported() { + + } + + @Override + public void onThankSent() { + + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewLicenceViolationFragment.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewLicenceViolationFragment.java new file mode 100644 index 000000000..7953ed3be --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewLicenceViolationFragment.java @@ -0,0 +1,58 @@ +package fr.free.nrw.commons.review; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; + +import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; +import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; + +/** + * Created by nes on 19.05.2018. + */ + +public class ReviewLicenceViolationFragment extends CommonsDaggerSupportFragment { + int position; + String fileName; + + static ReviewLicenceViolationFragment init(int val, String fileName) { + ReviewLicenceViolationFragment fragment = new ReviewLicenceViolationFragment(); + // Supply val input as an argument. + Bundle args = new Bundle(); + args.putInt("val", val); + args.putString("fileName", fileName); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + position = getArguments() != null ? getArguments().getInt("val") : 1; + fileName = getArguments() != null ? getArguments().getString("fileName") : ""; + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View layoutView = inflater.inflate(R.layout.review_out_of_context, container, + false); + View textView = layoutView.findViewById(R.id.testingText); + + if (fileName!= null) { + SimpleDraweeView simpleDraweeView = layoutView.findViewById(R.id.imageView); + simpleDraweeView.setImageURI(Utils.makeThumbBaseUrl(fileName)); + } + + ((TextView) textView).setText("Fragment #" + position); + Log.d("deneme","Fragment #" + position); + return layoutView; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewOutOfContextFragment.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewOutOfContextFragment.java index 249678c49..169cec118 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewOutOfContextFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewOutOfContextFragment.java @@ -7,7 +7,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import com.facebook.drawee.view.SimpleDraweeView; + import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; /** @@ -17,30 +20,46 @@ import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; public class ReviewOutOfContextFragment extends CommonsDaggerSupportFragment { int position; + String fileName; - static ReviewOutOfContextFragment init(int val) { - ReviewOutOfContextFragment truitonFrag = new ReviewOutOfContextFragment(); + static ReviewOutOfContextFragment init(int val, String fileName) { + ReviewOutOfContextFragment fragment = new ReviewOutOfContextFragment(); // Supply val input as an argument. Bundle args = new Bundle(); args.putInt("val", val); - truitonFrag.setArguments(args); - return truitonFrag; + args.putString("fileName", fileName); + fragment.setArguments(args); + if (fileName != null) { + //updateFragment(val, file); + } + return fragment; } + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); position = getArguments() != null ? getArguments().getInt("val") : 1; + fileName = getArguments() != null ? getArguments().getString("fileName") : ""; + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View layoutView = inflater.inflate(R.layout.out_of_context_question_layout, container, + View layoutView = inflater.inflate(R.layout.review_out_of_context, container, false); View textView = layoutView.findViewById(R.id.testingText); + + if (fileName!= null) { + SimpleDraweeView simpleDraweeView = layoutView.findViewById(R.id.imageView); + simpleDraweeView.setImageURI(Utils.makeThumbBaseUrl(fileName)); + } + ((TextView) textView).setText("Fragment #" + position); Log.d("deneme","Fragment #" + position); return layoutView; } + } diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewPagerAdapter.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewPagerAdapter.java index a78adfacd..4863299e3 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewPagerAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewPagerAdapter.java @@ -10,6 +10,9 @@ import android.support.v4.app.FragmentStatePagerAdapter; */ public class ReviewPagerAdapter extends FragmentStatePagerAdapter { + private int currentPosition; + ReviewOutOfContextFragment reviewOutOfContextFragment; + public ReviewPagerAdapter(FragmentManager fm) { super(fm); @@ -24,11 +27,15 @@ public class ReviewPagerAdapter extends FragmentStatePagerAdapter { public Fragment getItem(int position) { switch (position) { case 0: // Fragment # 0 - This will show image - return ReviewOutOfContextFragment.init(position); + currentPosition = 0; + return ReviewOutOfContextFragment.init(position, ReviewController.fileName); case 1: // Fragment # 1 - This will show image - return ReviewOutOfContextFragment.init(position); + currentPosition = 1; + return ReviewLicenceViolationFragment.init(position, ReviewController.fileName); default:// Fragment # 2-9 - Will show list - return ReviewOutOfContextFragment.init(position); + currentPosition = 2; + return ReviewCategoryMissuseFragment.init(position, ReviewController.fileName); } } + } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/MediaDataExtractorUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/MediaDataExtractorUtil.java new file mode 100644 index 000000000..e044cd84b --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/MediaDataExtractorUtil.java @@ -0,0 +1,26 @@ +package fr.free.nrw.commons.utils; + +import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by root on 19.05.2018. + */ + +public class MediaDataExtractorUtil { + + public static ArrayList extractCategories(String source) { + ArrayList categories = new ArrayList<>(); + Pattern regex = Pattern.compile("\\[\\[\\s*Category\\s*:([^]]*)\\s*\\]\\]", Pattern.CASE_INSENSITIVE); + Matcher matcher = regex.matcher(source); + while (matcher.find()) { + String cat = matcher.group(1).trim(); + categories.add(cat); + } + + return categories; + } + + +} diff --git a/app/src/main/res/layout/out_of_context_question_layout.xml b/app/src/main/res/layout/review_category_missuse.xml similarity index 94% rename from app/src/main/res/layout/out_of_context_question_layout.xml rename to app/src/main/res/layout/review_category_missuse.xml index 271437b92..dc2c8931f 100644 --- a/app/src/main/res/layout/out_of_context_question_layout.xml +++ b/app/src/main/res/layout/review_category_missuse.xml @@ -8,7 +8,8 @@ android:background="@color/main_background_light" > - + + + + + + + + +