From 2302fca788f48dfb71cf71e5542bbaab28f74d1a Mon Sep 17 00:00:00 2001 From: Ujjwal Agrawal Date: Sat, 30 Nov 2019 11:55:57 +0530 Subject: [PATCH] Fix #2881 (Change Media Details UI) (#2954) * Media Details UI changed - XML file * Onclicks added, design updated * Removed bookmark item from media detail menu * Update in XML --- .../commons/media/MediaDetailFragment.java | 103 +++ .../media/MediaDetailPagerFragment.java | 94 --- .../ic_mode_edit_primary_dark_24dp.png | Bin 0 -> 300 bytes .../ic_star_border_primary_dark_24dp.png | Bin 0 -> 638 bytes .../ic_star_filled_primary_dark_24dp.png | Bin 0 -> 459 bytes .../ic_mode_edit_primary_dark_24dp.png | Bin 0 -> 216 bytes .../ic_star_border_primary_dark_24dp.png | Bin 0 -> 409 bytes .../ic_star_filled_primary_dark_24dp.png | Bin 0 -> 306 bytes .../ic_mode_edit_primary_dark_24dp.png | Bin 0 -> 341 bytes .../ic_star_border_primary_dark_24dp.png | Bin 0 -> 827 bytes .../ic_star_filled_primary_dark_24dp.png | Bin 0 -> 593 bytes .../ic_mode_edit_primary_dark_24dp.png | Bin 0 -> 467 bytes .../ic_star_border_primary_dark_24dp.png | Bin 0 -> 1229 bytes .../ic_star_filled_primary_dark_24dp.png | Bin 0 -> 878 bytes .../ic_mode_edit_primary_dark_24dp.png | Bin 0 -> 532 bytes .../ic_star_border_primary_dark_24dp.png | Bin 0 -> 1676 bytes .../ic_star_filled_primary_dark_24dp.png | Bin 0 -> 1178 bytes .../main/res/drawable/bg_delete_button.xml | 9 +- .../res/drawable/copy_to_wikitext_button.xml | 18 + .../ic_file_download_primary_dark_24dp.xml | 4 + .../drawable/ic_share_primary_dark_24dp.xml | 4 + .../main/res/layout/detail_category_item.xml | 7 +- .../main/res/layout/fragment_media_detail.xml | 648 ++++++++++-------- .../main/res/menu/fragment_image_detail.xml | 15 - app/src/main/res/values/colors.xml | 3 +- 25 files changed, 504 insertions(+), 401 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_mode_edit_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_star_border_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_star_filled_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_mode_edit_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_star_border_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_star_filled_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_mode_edit_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_star_border_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_star_filled_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_mode_edit_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_star_border_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_star_filled_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_mode_edit_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_star_border_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_star_filled_primary_dark_24dp.png create mode 100644 app/src/main/res/drawable/copy_to_wikitext_button.xml create mode 100644 app/src/main/res/drawable/ic_file_download_primary_dark_24dp.xml create mode 100644 app/src/main/res/drawable/ic_share_primary_dark_24dp.xml 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 72789e1fc..f674ca3e3 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 @@ -2,20 +2,24 @@ package fr.free.nrw.commons.media; import android.annotation.SuppressLint; import android.app.AlertDialog; +import android.app.DownloadManager; import android.content.Intent; import android.database.DataSetObserver; import android.net.Uri; import android.os.Bundle; +import android.os.Environment; import android.text.Editable; import android.text.TextWatcher; import android.util.TypedValue; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.Spinner; @@ -44,6 +48,9 @@ import fr.free.nrw.commons.Media; import fr.free.nrw.commons.MediaDataExtractor; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; +import fr.free.nrw.commons.bookmarks.Bookmark; +import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesContentProvider; +import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao; import fr.free.nrw.commons.category.CategoryDetailsActivity; import fr.free.nrw.commons.contributions.ContributionsFragment; import fr.free.nrw.commons.delete.DeleteHelper; @@ -51,6 +58,9 @@ import fr.free.nrw.commons.delete.ReasonBuilder; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.ui.widget.CompatTextView; import fr.free.nrw.commons.ui.widget.HtmlTextView; +import fr.free.nrw.commons.utils.NetworkUtils; +import fr.free.nrw.commons.utils.PermissionUtils; +import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtilWrapper; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -61,6 +71,8 @@ import org.wikipedia.util.DateUtil; import org.wikipedia.util.StringUtil; import timber.log.Timber; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import static android.content.Context.DOWNLOAD_SERVICE; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -97,8 +109,12 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { DeleteHelper deleteHelper; @Inject ViewUtilWrapper viewUtil; + @Inject + BookmarkPicturesDao bookmarkDao; + private int initialListTop = 0; + private Bookmark bookmark; @BindView(R.id.mediaDetailImage) SimpleDraweeView image; @@ -130,6 +146,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { Button delete; @BindView(R.id.mediaDetailScrollView) ScrollView scrollView; + @BindView(R.id.iv_bookmark_icon) + ImageView ivBookmarkIcon; private ArrayList categoryNames; private boolean categoriesLoaded = false; @@ -276,6 +294,15 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::setTextFields); compositeDisposable.add(disposable); + + // Initialize bookmark object + bookmark = new Bookmark( + media.getFilename(), + media.getCreator(), + BookmarkPicturesContentProvider.uriForName(media.getFilename()) + ); + updateBookmarkState(); + } /** @@ -445,6 +472,82 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { } + @OnClick(R.id.ll_bookmark) + public void onBookMarkClick(){ + bookmarkDao.updateBookmark(bookmark); + updateBookmarkState(); + } + + private void updateBookmarkState() { + boolean isBookmarked = bookmarkDao.findBookmark(bookmark); + int icon = isBookmarked ? R.drawable.ic_star_filled_primary_dark_24dp : R.drawable.ic_star_border_primary_dark_24dp; + ivBookmarkIcon.setImageResource(icon); + } + + @OnClick(R.id.ll_share) + public void onShareClick(){ + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(Intent.EXTRA_TEXT, media.getDisplayTitle() + " \n" + media.getPageTitle().getCanonicalUri()); + startActivity(Intent.createChooser(shareIntent, "Share image via...")); + } + + @OnClick(R.id.ll_download) + public void onDownloadClick(){ + if (!NetworkUtils.isInternetConnectionEstablished(getActivity())) { + ViewUtil.showShortSnackbar(getView(), R.string.no_internet); + return; + } + downloadMedia(media); + } + + /** + * Start the media file downloading to the local SD card/storage. + * The file can then be opened in Gallery or other apps. + * + * @param m Media file to download + */ + private void downloadMedia(Media m) { + String imageUrl = m.getImageUrl(), fileName = m.getFilename(); + + if (imageUrl == null + || fileName == null + || getContext() == null + || getActivity() == null) { + Timber.d("Skipping download media as either imageUrl %s or filename %s activity is null", imageUrl, fileName); + return; + } + + // Strip 'File:' from beginning of filename, we really shouldn't store it + fileName = fileName.replaceFirst("^File:", ""); + + Uri imageUri = Uri.parse(imageUrl); + + DownloadManager.Request req = new DownloadManager.Request(imageUri); + //These are not the image title and description fields, they are download descs for notifications + req.setDescription(getString(R.string.app_name)); + req.setTitle(m.getDisplayTitle()); + req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); + + // Modern Android updates the gallery automatically. Yay! + req.allowScanningByMediaScanner(); + req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + PermissionUtils.checkPermissionsAndPerformAction(getActivity(), WRITE_EXTERNAL_STORAGE, + () -> enqueueRequest(req), () -> Toast.makeText(getContext(), + R.string.download_failed_we_cannot_download_the_file_without_storage_permission, + Toast.LENGTH_SHORT).show(), R.string.storage_permission, + R.string.write_storage_permission_rationale); + + } + + private void enqueueRequest(DownloadManager.Request req) { + DownloadManager systemService = + (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE); + if (systemService != null) { + systemService.enqueue(req); + } + } + @OnClick(R.id.seeMore) public void onSeeMoreClicked(){ if (nominatedForDeletion.getVisibility() == VISIBLE && getActivity() != null) { 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 573d35c95..ed1169b77 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 @@ -41,13 +41,8 @@ import fr.free.nrw.commons.explore.categories.ExploreActivity; import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.utils.ImageUtils; -import fr.free.nrw.commons.utils.NetworkUtils; -import fr.free.nrw.commons.utils.PermissionUtils; -import fr.free.nrw.commons.utils.ViewUtil; import timber.log.Timber; -import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; -import static android.content.Context.DOWNLOAD_SERVICE; import static fr.free.nrw.commons.Utils.handleWebUrl; public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener { @@ -55,13 +50,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple @Inject MediaWikiApi mwApi; @Inject SessionManager sessionManager; @Inject @Named("default_preferences") JsonKvStore store; - @Inject BookmarkPicturesDao bookmarkDao; @BindView(R.id.mediaDetailsPager) ViewPager pager; private Boolean editable; private boolean isFeaturedImage; MediaDetailAdapter adapter; - private Bookmark bookmark; private MediaDetailProvider provider; public MediaDetailPagerFragment() { @@ -157,28 +150,10 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple Media m = provider.getMediaAtPosition(pager.getCurrentItem()); switch (item.getItemId()) { - case R.id.menu_bookmark_current_image: - bookmarkDao.updateBookmark(bookmark); - updateBookmarkState(item); - return true; - case R.id.menu_share_current_image: - Intent shareIntent = new Intent(Intent.ACTION_SEND); - shareIntent.setType("text/plain"); - shareIntent.putExtra(Intent.EXTRA_TEXT, m.getDisplayTitle() + " \n" + m.getPageTitle().getCanonicalUri()); - startActivity(Intent.createChooser(shareIntent, "Share image via...")); - return true; case R.id.menu_browser_current_image: // View in browser handleWebUrl(requireContext(), Uri.parse(m.getPageTitle().getMobileUri())); return true; - case R.id.menu_download_current_image: - // Download - if (!NetworkUtils.isInternetConnectionEstablished(getActivity())) { - ViewUtil.showShortSnackbar(getView(), R.string.no_internet); - return false; - } - downloadMedia(m); - return true; case R.id.menu_set_as_wallpaper: // Set wallpaper setWallpaper(m); @@ -201,52 +176,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple ImageUtils.setWallpaperFromImageUrl(getActivity(), Uri.parse(media.getImageUrl())); } - /** - * Start the media file downloading to the local SD card/storage. - * The file can then be opened in Gallery or other apps. - * - * @param m Media file to download - */ - private void downloadMedia(Media m) { - String imageUrl = m.getImageUrl(), fileName = m.getFilename(); - - if (imageUrl == null - || fileName == null - || getContext() == null - || getActivity() == null) { - Timber.d("Skipping download media as either imageUrl %s or filename %s activity is null", imageUrl, fileName); - return; - } - - // Strip 'File:' from beginning of filename, we really shouldn't store it - fileName = fileName.replaceFirst("^File:", ""); - - Uri imageUri = Uri.parse(imageUrl); - - DownloadManager.Request req = new DownloadManager.Request(imageUri); - //These are not the image title and description fields, they are download descs for notifications - req.setDescription(getString(R.string.app_name)); - req.setTitle(m.getDisplayTitle()); - req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); - - // Modern Android updates the gallery automatically. Yay! - req.allowScanningByMediaScanner(); - req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - PermissionUtils.checkPermissionsAndPerformAction(getActivity(), WRITE_EXTERNAL_STORAGE, - () -> enqueueRequest(req), () -> Toast.makeText(getContext(), - R.string.download_failed_we_cannot_download_the_file_without_storage_permission, - Toast.LENGTH_SHORT).show(), R.string.storage_permission, - R.string.write_storage_permission_rationale); - - } - - private void enqueueRequest(DownloadManager.Request req) { - DownloadManager systemService = - (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE); - if (systemService != null) { - systemService.enqueue(req); - } - } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { @@ -263,33 +192,16 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple 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_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); - menu.findItem(R.id.menu_bookmark_current_image).setEnabled(true).setVisible(true); - - // Initialize bookmark object - bookmark = new Bookmark( - m.getFilename(), - m.getCreator(), - BookmarkPicturesContentProvider.uriForName(m.getFilename()) - ); - updateBookmarkState(menu.findItem(R.id.menu_bookmark_current_image)); if (m instanceof Contribution ) { Contribution c = (Contribution) m; switch (c.getState()) { case Contribution.STATE_FAILED: 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); - menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false).setVisible(false); break; case Contribution.STATE_IN_PROGRESS: case Contribution.STATE_QUEUED: 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); - menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false).setVisible(false); break; case Contribution.STATE_COMPLETED: // Default set of menu items works fine. Treat same as regular media object @@ -301,12 +213,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple } } - private void updateBookmarkState(MenuItem item) { - boolean isBookmarked = bookmarkDao.findBookmark(bookmark); - int icon = isBookmarked ? R.drawable.ic_round_star_filled_24px : R.drawable.ic_round_star_border_24px; - item.setIcon(icon); - } - public void showImage(int i) { Handler handler = new Handler(); handler.postDelayed(() -> pager.setCurrentItem(i), 5); diff --git a/app/src/main/res/drawable-hdpi/ic_mode_edit_primary_dark_24dp.png b/app/src/main/res/drawable-hdpi/ic_mode_edit_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b6da79b6a52a83bd2c762eb0a2c753d8fd8036 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBK6|=2hE&{od&8USkbywM!w1Kz zl-6Ikwz)z!cDE>36Tgd1M68GG!d406N>k(DBS-ghHvUv-beIyg?&=aD39H#$8H}iMg^;^(0hrkw^>tDaSyb}}f`P&*Ug z%<6S;&YE&H<_^Be42zDsG`%nsRFLyg=-?M-cyzSF;g1Bn2U~N)69WzpJ`kns_|s6? v!DNPufUFv$OLr&B#pITK$^RDIXWGl)G%J-oPf1h_=zRuHS3j3^P6Gb|y&+zRCspMEaWy*f$INYgPz)BIZ(&SU(Sj z!4N1G>&0U3v|AzQ6N9hv*$p0pkjTU@&?ZWx&9X5o1nn^R0H?W}EyqNAo(DI0>&JQY zl?tj5o2}_KU!cHh@J+1$VK%jAuS!7=5?qWSmdq{e-0YW70{eR^1@-GL+hI0yGW!y~ zw#du$jY>f)47vnrP4rzISf=lyDnW%T!Bbs%jFJmF86#hXAP-6R7fLxxnf*H^E67s* Y0QPke*m%QU~o_^5dVkbs)2S83lKj+a?oQS zW*$ffg&{cxhJy#vL5Hz8X#YStNFR%1U|44$95e@ygJ#g%K@vdx4UdDqkX;0z34nsy z6^NsOxDbfjfp{(uZwBI%Kztu+*?%H2NbNl!J^{p=pk}p0&5nlJrGw8wz9d>mDgFYr z6K|9m1Mzb@IOZ7;8xfm^1;l*h<}y|wo=-)`%z;)n z6leQd3LWx~=!%zwG9m`r%plbR-m_&pg8dQGd6T9<+-)1ZZeGAVFS3N0M8 zlmZ7WpoN1T;<4~A6yuV=Lv07i;<4-`w7M|?;!}9kNl?>4kytEv3&d$a%!H&4#7>9G zp{oy}rh}%U6>_tISQw9b5olB6ACkTa)O65AsG(O z9%3=5Ta*VigNGUp5`$t&dngjns2m-R8Fdg%F#wgCi4#9#LgN4c002ovPDHLkV1jeq Bx7z>! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_mode_edit_primary_dark_24dp.png b/app/src/main/res/drawable-mdpi/ic_mode_edit_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6fc7e9e7a63b12b5cb5b62dbf3f0e6df0344b3 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj^F3W0Ln>~)ow}R1K|#Rb<|)oU z=NqJN1n+2WExskW)v!usf`AL-`xiQKPG9AA3iNGUlkWMG*@0Wz8^YUKtdW3vUvix}pLMmEX_XRMhyTd;7lJ6q09$%i-6f2oxBs~QE=Ph)4f z_hfeXJI)7B^%+4$Et^JyQ$S{nt0r>aj6Eu8w_+Omav+MBytWiuO& Q1D(p?>FVdQ&MBb@0M6=EsQ>@~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_star_border_primary_dark_24dp.png b/app/src/main/res/drawable-mdpi/ic_star_border_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e5140eba200ccd46ca79c7dbebed6b94db2b543e GIT binary patch literal 409 zcmV;K0cQS*P)#iZTUEBBq5*dYCtA z7t++c;!5}W5#XjrRrroM45JfG8u?dkP{+CuNePU8`zIdLCg6 z2Hl9`0Ua4`-maRsuK80JHEK=X5b`)5(wxUsYt^Qk8eJgGv+;>2yL=rQ*9 z)iqWD)#{2FRAJlblr4lYtNpM|Ktvbs>ILU^$)dR1PuNk-kWIjq%^>xael=n z;0!ky@q7h*9vj6iPHf&qOZxq-5z4TPl7I0{F1&ybOVQ1`%+N|;00000NkvXXu0mjf DIcB^g literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_star_filled_primary_dark_24dp.png b/app/src/main/res/drawable-mdpi/ic_star_filled_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee5a5ac7bfe6e778973d535e451e10c68241f0c GIT binary patch literal 306 zcmV-20nPr2P)5O-2w zI1IN#&B7T(89@Ap41<3IaVoKK;0eT^Nih5q5WAC_iVUFPNyzZWK&(e@GF?N21;2ROiDQ`uSemK|h+J^^O3hwM|?QH>ysk3*2g>k&Y}HW05vfRE5liP*CM z%44%kKs*@$zcc@mts)U8G~oY%jX_*wLnNT?w$UKU_!06J3SE^=h;V$%fT`l1uS0B9 z@ht+h@l6QWyHIR=6|q1AQseb!zC}Ry@rD3Qyb%BwZvZIc@38nxKu-MCBt8Sc5uXU) ziBAAbsNy35eDM(g&UhstH-3!#GRGYs0Px2L0Q~U*0DrtO;MRG(ApjF^1i-}`0I>0y n0DOD~fFs_2@;Sf(4uJ0qjskUJO;A&N00000NkvXXu0mjfFNTi# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_star_border_primary_dark_24dp.png b/app/src/main/res/drawable-xhdpi/ic_star_border_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..28e901639892a0a2c32671fad33efec432108c7a GIT binary patch literal 827 zcmV-B1H}A^P)DXx9j6 zvqiu{P4Ny3Y!Gmn72HiYpD#vTzy$D}6}%tRvd=?ce3S(oV#R&~g;ekm8?TM3fHB}L zEA#^U?h+gCp}CP0u-;?C%8k9ov;g&s6@z(TC8z|uK^X7CVnf`0JV<7m{eQ4_b)XAG6|Gk8I@G*fLU1r*YPkqqf`u?@N4 zLx8vssJ65op**s|x|uX$KVv$12(5!s2;&I@fNc;sX z@@ct0i5RUE+lZA=U9w&jQ0`;>I=5qLd0b9_A0CcUT`i9?WA>4Kx6P!0Yr;~L)1x8_eon}7)xcJP z+idKLNdeuWiOB-L(k&~8*hgb>9&ct{rUXn*aq+l8b96SODaG1i69Ot+lB-^@JdO1$ z=$fdDvB89Z^CIaWz3cJw_Bof{Aq|RH=S&EA$`alLQv)=^Y2X%%_c+@Elw15wHlQrT z8`)~w#KXQXNj?*mf+MaM>|o?kk60Z4n>7{?3y1~S!+-r?Hsvm3O_B6_{)Imdh84$mU@obx`&J>PfEHJR)qCaEz53;}%$v=h<_ zY=bRX1uDTe_yRT=1!h5vn2}AO2s|bTJb*%(1o{)g$LW%c(}wc{G#T{%di*fU?|X*k7jO?p@26Z0s)2s z2ciX(e*T4_z>{c!dJel#ok)Qp4gzkG0vj4bT@qTJT@xt~&JgAuj8eT&7^C0R#$1aM zsLBvzhn`8*hU{h-TOmTAFU{i0(XUg(_%3jjW)7DKfrX?+BVe3vq_xgrp*y5V(p>W* z1cC_*?tz*dieW9-PnhqVw}8@#{?ZHQWO%344Q}X*P6A@4wapqhqBYk)QIt}Ev)RiLAy9c1* zYNd&Ej}A1plxrY$sWW7t|Moc&q%P|a3%m&|LF%$k_~1L_9He}lg#ncwAEqFc;VcNK zEyS6Ev=LpLIl!5M1bbnog=2^02|t??f$(t*fh=*Js^J&``N1&&@`a-ev_gpp=M(hbe*LN~foJyZl)Jw!K3 zqe3byDN~_`h>B9_W<*$#nMVsx|I)v-o&KG($K5?=*PVy&xZo(C%RaRIM#BF3tv40Gn~vxqwR$!fW1$Q?ElMzkqN?8^W=S+WQD? z{R}(@?g1BpV?Ys*jeT`n&_tj?gT}GAtl%kL(YXx`*w+qy#e^sLM90QWS0HGHj`tV( zHc0Il6e5!rD1EgX@oQO*U(+L)PAqd{EXZ*h+a6(}+pI!P8TL(+LD~-oLAjgRF^_T{ z9Q`~n(*y#;Fwjg!@mqivMte^wZkwBpDPY{R8uKV`uQBzOS>qNd(0iKCAd*QD;kA$S zqMYF}fvA`aXLu?OipQ~qYRDHL!3%QYWCBYEPVw=c4iraX5J)ws4Or?yIjM{>rw$n9 ztyH5A@R0F+FY)JvEdQ z1YBp_Z@*>>{Te^jY)0<%6d0_*J%sq`F(bEIY4qiexxjZufTp(o6EbxR_nc>z^`HsB z2ci?pHK;p_sP`ifW3~me3Zf%X8q^y})ce3}D~jDQKXVS&d^B3NZ6u;(e=`Z1LOkVC z4eKu<>YrvNLF=Qd!gf&fqNH&jM}d7evi66*6Uq%DinNSAijJoNJ6SgCHtS*-gxHg)Ub8q}x0B_|~}E63Q}z zpkkuo(g=4B@TvoA$ihO{Oi4XSGKsO_1=SJ@_o28$;%W=0MZsHj9vFyc7u$)`XoeQl zpXks_V55Q^h!Px=T#ZW(+^NmOjX>vXVMZ2|)`721JJcPv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_star_filled_primary_dark_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_star_filled_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..da3041b73bf4592127022c488a35f146a2cfcdad GIT binary patch literal 878 zcmV-!1CjiRP)j%fd7pF6dwv(6oAvHFzw_C4{(R4QmP%DMr5GPr z0t;e6EQkfMprBL|EGP?SKsO8WW;z%K-#{4)`k%dElxSl?e={DuatV4#Ut>YUW|tg? z8W!}2TONXLvY_8A@sQ)Nm<3feo%9iO!gfK^z!x7uLtv`Sf_C}HacHqs&^YisfS{-J zS?dI?3n0f~t&M_uBm`ZxP0#`fIf9>Hu1$hEB?SpOY!Orf215w?2#ReGv@?VphsJyt zQ~(}F5cD9Q1x*5*BFJ&r0E$cyB=VXWAPq904m5*9w7nTa|e{F-iwJn)_D!( zoQ-AA7GnV4u92K0lpJWcn-_V_4~1gBgL>WL4sinUS%I8SV2vqx&{FUwK{>DKjNhoh z>~?~JdQD3dC(_C_DM3TDUo=M0as^{hrAdNzD-hITlAy~91YIyiP=TV2>|0X=EmXKr zEH^<=y+T1dOc2zqP|zt81Vzb+z7k=-|B>#3W=80onEB=qQD(tXodtzCdl&Z+l#t3cH z(3?PhZ48g`Td7P?#;52Ja2QOE=?8I?o|&z^RXPgVpQYFvV1ABP?7dmqY|~Ltk4MT^ zo621v=TPU7US82nP@(GV!Z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_mode_edit_primary_dark_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_mode_edit_primary_dark_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1f76a5eb255436c3dceceb69bd1d7a3526e8d081 GIT binary patch literal 532 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 + android:color="@color/deleteRed"/> - + android:radius="2dp" /> @@ -25,7 +22,7 @@ + android:radius="2dp" /> diff --git a/app/src/main/res/drawable/copy_to_wikitext_button.xml b/app/src/main/res/drawable/copy_to_wikitext_button.xml new file mode 100644 index 000000000..01ce5bce9 --- /dev/null +++ b/app/src/main/res/drawable/copy_to_wikitext_button.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_file_download_primary_dark_24dp.xml b/app/src/main/res/drawable/ic_file_download_primary_dark_24dp.xml new file mode 100644 index 000000000..d8aa76399 --- /dev/null +++ b/app/src/main/res/drawable/ic_file_download_primary_dark_24dp.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_share_primary_dark_24dp.xml b/app/src/main/res/drawable/ic_share_primary_dark_24dp.xml new file mode 100644 index 000000000..c61a55a14 --- /dev/null +++ b/app/src/main/res/drawable/ic_share_primary_dark_24dp.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/layout/detail_category_item.xml b/app/src/main/res/layout/detail_category_item.xml index 02fb6c80f..f7880a59e 100644 --- a/app/src/main/res/layout/detail_category_item.xml +++ b/app/src/main/res/layout/detail_category_item.xml @@ -13,12 +13,9 @@ android:background="?attr/subBackground" android:foreground="?attr/selectableItemBackground" android:gravity="center_vertical" - android:minHeight="@dimen/overflow_button_dimen" - android:padding="@dimen/quarter_standard_height" - android:textColor="@android:color/white" + android:textColor="@color/linkColor" + android:paddingBottom="@dimen/small_gap" android:textSize="@dimen/description_text_size" - app:drawablePadding="@dimen/small_gap" - app:drawableStart="@drawable/ic_info_outline_24dp" /> diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml index 5c325aaaf..a6819fc4f 100644 --- a/app/src/main/res/layout/fragment_media_detail.xml +++ b/app/src/main/res/layout/fragment_media_detail.xml @@ -8,6 +8,12 @@ android:background="?attr/mainBackground" > + + + - - - - + android:layout_height="wrap_content" + android:adjustViewBounds="true" + android:scaleType="fitXY" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_gravity="start" + android:lineSpacingMultiplier="1.2" + android:background="?attr/subBackground" + android:textColor="@color/black" + android:textSize="@dimen/description_text_size" + tools:text="Description of the media goes here. This can potentially be fairly long, and will need to wrap across multiple lines. We hope it looks nice though." /> - + + + + + + android:textStyle="bold" + android:textColor="@color/black" + android:text="Categories" + /> - + - - + - + - + + + + + android:text="@string/media_detail_author" + android:textColor="@color/black" + android:textStyle="bold" + /> - - - - - - - - + android:textColor="@color/black" + /> - + - - + - - - + android:textStyle="bold" + android:text="@string/media_detail_license" + /> - - - - - - - - + android:layout_gravity="start" + android:gravity="center_vertical" + android:textColor="@android:color/black" + android:textSize="@dimen/description_text_size" + tools:text="License link" /> - + - - + - - - + android:textStyle="bold" + android:textColor="@color/black" + android:text="@string/media_detail_coordinates" + /> - - - - - - - + android:layout_gravity="start" + android:gravity="center_vertical" + android:textColor="@color/black" + tools:text="Coordinates link" /> - + - - + - - - - - - + android:text="@string/media_detail_uploaded_date" + android:textStyle="bold" + android:textColor="@color/black" + /> - - - + android:textColor="@color/black" + /> - + - - + + + + + + + + + +