mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-31 03:25:34 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/master' into raniapl/development
This commit is contained in:
		
						commit
						3ca326d520
					
				| @ -79,6 +79,25 @@ | ||||
|         "code" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "login": "stamatiap", | ||||
|       "name": "Stamatia Papageorgiou", | ||||
|       "avatar_url": "https://avatars.githubusercontent.com/u/57223967?v=4", | ||||
|       "profile": "https://github.com/stamatiap", | ||||
|       "contributions": [ | ||||
|         "code", | ||||
|         "translation" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "login": "The-EDev", | ||||
|       "name": "Farook Al-Sammarraie", | ||||
|       "avatar_url": "https://avatars.githubusercontent.com/u/60552923?v=4", | ||||
|       "profile": "https://github.com/The-EDev", | ||||
|       "contributions": [ | ||||
|         "code" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "login": "Zopieux", | ||||
|       "name": "Alexandre Macabies", | ||||
|  | ||||
							
								
								
									
										7
									
								
								.github/workflows/github_nightly_release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/github_nightly_release.yml
									
									
									
									
										vendored
									
									
								
							| @ -15,10 +15,11 @@ jobs: | ||||
|       uses: actions/checkout@v2 | ||||
|      | ||||
|     - name: set up JDK 1.8 | ||||
|       uses: actions/setup-java@v1 | ||||
|       uses: actions/setup-java@v2 | ||||
|       with: | ||||
|         java-version: 1.8 | ||||
|      | ||||
|         distribution: 'zulu' | ||||
|         java-version: '8' | ||||
| 
 | ||||
|     - name: Grant execute permission for gradlew | ||||
|       run: chmod +x gradlew | ||||
|      | ||||
|  | ||||
							
								
								
									
										5
									
								
								.github/workflows/github_pre_release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/github_pre_release.yml
									
									
									
									
										vendored
									
									
								
							| @ -16,9 +16,10 @@ jobs: | ||||
|       uses: actions/checkout@v2 | ||||
| 
 | ||||
|     - name: set up JDK 1.8 | ||||
|       uses: actions/setup-java@v1 | ||||
|       uses: actions/setup-java@v2 | ||||
|       with: | ||||
|         java-version: 1.8 | ||||
|         distribution: 'zulu' | ||||
|         java-version: '8' | ||||
| 
 | ||||
|     - name: Grant execute permission for gradlew | ||||
|       run: chmod +x gradlew | ||||
|  | ||||
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							| @ -9,7 +9,7 @@ | ||||
| [](http://makeapullrequest.com) | ||||
| [](./LICENSE) | ||||
| [](https://GitHub.com/austinhuang0131/barinsta/stargazers/)<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> | ||||
| [](#contributors) | ||||
| [](#contributors) | ||||
| <!-- ALL-CONTRIBUTORS-BADGE:END --> | ||||
| 
 | ||||
| Instagram client; previously known as InstaGrabber. | ||||
| @ -63,49 +63,53 @@ Prominent contributors are listed here in the [all-contributors](https://allcont | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://github.com/MeLlamoPablo"><img src="https://avatars.githubusercontent.com/u/11708035?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pablo Rodríguez</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=MeLlamoPablo" title="Code">💻</a></td> | ||||
|     <td align="center"><a href="https://github.com/stamatiap"><img src="https://avatars.githubusercontent.com/u/57223967?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stamatia Papageorgiou</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=stamatiap" title="Code">💻</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/The-EDev"><img src="https://avatars.githubusercontent.com/u/60552923?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Farook Al-Sammarraie</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=The-EDev" title="Code">💻</a></td> | ||||
|     <td align="center"><a href="https://github.com/Zopieux"><img src="https://avatars.githubusercontent.com/u/81353?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Macabies</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=Zopieux" title="Code">💻</a></td> | ||||
|     <td align="center"><a href="https://snajdovski.github.io"><img src="https://avatars2.githubusercontent.com/u/42580385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stefan Najdovski</b></sub></a><br /><a href="#design-snajdovski" title="Design">🎨</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/CrazyMarvin"><img src="https://avatars3.githubusercontent.com/u/15004217?v=4?s=100" width="100px;" alt=""/><br /><sub><b>CrazyMarvin</b></sub></a><br /><a href="#financial-CrazyMarvin" title="Financial">💵</a></td> | ||||
|     <td align="center"><a href="http://kevinthomas.dev"><img src="https://avatars2.githubusercontent.com/u/15370181?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Thomas</b></sub></a><br /><a href="#financial-KevinNThomas" title="Financial">💵</a></td> | ||||
|     <td align="center"><a href="https://github.com/Shadowspear123"><img src="https://avatars1.githubusercontent.com/u/50462281?s=100" width="100px;" alt=""/><br /><sub><b>Shadowspear123</b></sub></a><br /><a href="#blog-Shadowspear123" title="Blogposts">📝</a> <a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3AShadowspear123" title="Bug reports">🐛</a> <a href="#ideas-Shadowspear123" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-Shadowspear123" title="Answering Questions">💬</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="http://kevinthomas.dev"><img src="https://avatars2.githubusercontent.com/u/15370181?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Thomas</b></sub></a><br /><a href="#financial-KevinNThomas" title="Financial">💵</a></td> | ||||
|     <td align="center"><a href="https://github.com/Shadowspear123"><img src="https://avatars1.githubusercontent.com/u/50462281?s=100" width="100px;" alt=""/><br /><sub><b>Shadowspear123</b></sub></a><br /><a href="#blog-Shadowspear123" title="Blogposts">📝</a> <a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3AShadowspear123" title="Bug reports">🐛</a> <a href="#ideas-Shadowspear123" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-Shadowspear123" title="Answering Questions">💬</a></td> | ||||
|     <td align="center"><a href="https://github.com/RickyM7"><img src="https://avatars3.githubusercontent.com/u/24703825?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ricardo</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3ARickyM7" title="Bug reports">🐛</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Akrai"><img src="https://avatars1.githubusercontent.com/u/5624597?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Akrai</b></sub></a><br /><a href="#ideas-Akrai" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/avtkal"><img src="https://avatars.githubusercontent.com/u/63205014?v=4?s=100" width="100px;" alt=""/><br /><sub><b>avtkal</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/cizordj"><img src="https://avatars2.githubusercontent.com/u/32869222?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cézar Augusto</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/dimitrist19"><img src="https://avatars.githubusercontent.com/u/56406468?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dimitris T</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/farzadx"><img src="https://avatars2.githubusercontent.com/u/70059397?v=4?s=100" width="100px;" alt=""/><br /><sub><b>farzadx</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://github.com/dimitrist19"><img src="https://avatars.githubusercontent.com/u/56406468?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dimitris T</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/farzadx"><img src="https://avatars2.githubusercontent.com/u/70059397?v=4?s=100" width="100px;" alt=""/><br /><sub><b>farzadx</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/faydin"><img src="https://avatars2.githubusercontent.com/u/22706676?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fatih Aydın</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/fouze555"><img src="https://avatars3.githubusercontent.com/u/71935341?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fouze555</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Galang23"><img src="https://avatars3.githubusercontent.com/u/13700948?s=100" width="100px;" alt=""/><br /><sub><b>Galang23</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/initdebugs"><img src="https://avatars0.githubusercontent.com/u/75781464?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Initdebugs</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://janek.xyz/"><img src="https://avatars3.githubusercontent.com/u/8365659?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jakub Janek</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/GenosseFlosse"><img src="https://avatars.githubusercontent.com/u/59205524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>GenosseFlosse</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://janek.xyz/"><img src="https://avatars3.githubusercontent.com/u/8365659?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jakub Janek</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/GenosseFlosse"><img src="https://avatars.githubusercontent.com/u/59205524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>GenosseFlosse</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://becauseofprog.fr/"><img src="https://avatars3.githubusercontent.com/u/24623168?s=100" width="100px;" alt=""/><br /><sub><b>kernoeb</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/MoaufmKlo"><img src="https://avatars1.githubusercontent.com/u/45636897?s=100" width="100px;" alt=""/><br /><sub><b>MoaufmKlo</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/nalinalini"><img src="https://avatars0.githubusercontent.com/u/65640431?v=4?s=100" width="100px;" alt=""/><br /><sub><b>nalinalini</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/peterge1998"><img src="https://avatars2.githubusercontent.com/u/47355238?s=100" width="100px;" alt=""/><br /><sub><b>peterge1998</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/PierreM0"><img src="https://avatars3.githubusercontent.com/u/71077853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PierreM0</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Pyrobauve"><img src="https://avatars.githubusercontent.com/u/48654473?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pyrobauve</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://github.com/PierreM0"><img src="https://avatars3.githubusercontent.com/u/71077853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PierreM0</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Pyrobauve"><img src="https://avatars.githubusercontent.com/u/48654473?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pyrobauve</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/RAMAR-RAR"><img src="https://avatars3.githubusercontent.com/u/47423745?s=100" width="100px;" alt=""/><br /><sub><b>RAMAR-RAR</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/rohang02"><img src="https://avatars3.githubusercontent.com/u/47921164?v=4?s=100" width="100px;" alt=""/><br /><sub><b>rohang02</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/retiolus"><img src="https://avatars1.githubusercontent.com/u/65604466?v=4?s=100" width="100px;" alt=""/><br /><sub><b>retiolus</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/rikishi0071"><img src="https://avatars3.githubusercontent.com/u/18183855?v=4?s=100" width="100px;" alt=""/><br /><sub><b>rikishi0071</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://gitlab.com/sandboiii"><img src="https://avatars.githubusercontent.com/u/17468894?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexey Peschany</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Sitavi"><img src="https://avatars.githubusercontent.com/u/80586127?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sitavi</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://gitlab.com/sandboiii"><img src="https://avatars.githubusercontent.com/u/17468894?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexey Peschany</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Sitavi"><img src="https://avatars.githubusercontent.com/u/80586127?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sitavi</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://stillu.cc/"><img src="https://avatars2.githubusercontent.com/u/5843208?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Still Hsu</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/Lego8486"><img src="https://avatars1.githubusercontent.com/u/47414485?s=100" width="100px;" alt=""/><br /><sub><b>Ten_Lego</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/wagnim"><img src="https://avatars0.githubusercontent.com/u/30241419?s=100" width="100px;" alt=""/><br /><sub><b>wagnim</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/wokija"><img src="https://avatars.githubusercontent.com/u/14982166?v=4?s=100" width="100px;" alt=""/><br /><sub><b>wokija</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td align="center"><a href="https://github.com/ysakamoto"><img src="https://avatars3.githubusercontent.com/u/1331642?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ysakamoto</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|     <td align="center"><a href="https://github.com/ZDVokoun"><img src="https://avatars.githubusercontent.com/u/76393152?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ZDVokoun</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td> | ||||
|   </tr> | ||||
| @ -121,7 +125,7 @@ This app's predecessor, InstaGrabber, was originally made by [@AwaisKing](https: | ||||
| 
 | ||||
|     Barinsta | ||||
|     Copyright (C) 2020-2021  Austin Huang <im@austinhuang.me> | ||||
|                              Ammar Githam <ammargitham786@gmail.com> | ||||
|                              Ammar Githam <ammar.githam@outlook.com> | ||||
| 
 | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|  | ||||
| @ -23,23 +23,29 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St | ||||
|     private List<FeedStoryModel> list; | ||||
| 
 | ||||
|     private final Filter filter = new Filter() { | ||||
|         @Nullable | ||||
|         @NonNull | ||||
|         @Override | ||||
|         protected FilterResults performFiltering(final CharSequence filter) { | ||||
|             final boolean isFilterEmpty = TextUtils.isEmpty(filter); | ||||
|             final String query = isFilterEmpty ? null : filter.toString().toLowerCase(); | ||||
| 
 | ||||
|             for (FeedStoryModel item : list) { | ||||
|                 if (isFilterEmpty) item.setShown(true); | ||||
|                 else item.setShown(item.getProfileModel().getUsername().toLowerCase().contains(query)); | ||||
|             final String query = TextUtils.isEmpty(filter) ? null : filter.toString().toLowerCase(); | ||||
|             List<FeedStoryModel> filteredList = list; | ||||
|             if (list != null && query != null) { | ||||
|                 filteredList = list.stream() | ||||
|                                    .filter(feedStoryModel -> feedStoryModel.getProfileModel() | ||||
|                                                                            .getUsername() | ||||
|                                                                            .toLowerCase() | ||||
|                                                                            .contains(query)) | ||||
|                                    .collect(Collectors.toList()); | ||||
|             } | ||||
|             return null; | ||||
|             final FilterResults filterResults = new FilterResults(); | ||||
|             filterResults.count = filteredList != null ? filteredList.size() : 0; | ||||
|             filterResults.values = filteredList; | ||||
|             return filterResults; | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected void publishResults(final CharSequence constraint, final FilterResults results) { | ||||
|             submitList(list); | ||||
|             notifyDataSetChanged(); | ||||
|             //noinspection unchecked | ||||
|             submitList((List<FeedStoryModel>) results.values, true); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| @ -65,10 +71,16 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St | ||||
|         return filter; | ||||
|     } | ||||
| 
 | ||||
|     private void submitList(@Nullable final List<FeedStoryModel> list, final boolean isFiltered) { | ||||
|         if (!isFiltered) { | ||||
|             this.list = list; | ||||
|         } | ||||
|         super.submitList(list); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void submitList(final List<FeedStoryModel> list) { | ||||
|         super.submitList(list.stream().filter(i -> i.isShown()).collect(Collectors.toList())); | ||||
|         this.list = list; | ||||
|         submitList(list, false); | ||||
|     } | ||||
| 
 | ||||
|     @NonNull | ||||
| @ -82,11 +94,11 @@ public final class FeedStoriesListAdapter extends ListAdapter<FeedStoryModel, St | ||||
|     @Override | ||||
|     public void onBindViewHolder(@NonNull final StoryListViewHolder holder, final int position) { | ||||
|         final FeedStoryModel model = getItem(position); | ||||
|         holder.bind(model, position, listener); | ||||
|         holder.bind(model, listener); | ||||
|     } | ||||
| 
 | ||||
|     public interface OnFeedStoryClickListener { | ||||
|         void onFeedStoryClick(final FeedStoryModel model, final int position); | ||||
|         void onFeedStoryClick(final FeedStoryModel model); | ||||
| 
 | ||||
|         void onProfileClick(final String username); | ||||
|     } | ||||
|  | ||||
| @ -20,7 +20,6 @@ public final class StoryListViewHolder extends RecyclerView.ViewHolder { | ||||
|     } | ||||
| 
 | ||||
|     public void bind(final FeedStoryModel model, | ||||
|                      final int position, | ||||
|                      final OnFeedStoryClickListener notificationClickListener) { | ||||
|         if (model == null) return; | ||||
| 
 | ||||
| @ -53,7 +52,7 @@ public final class StoryListViewHolder extends RecyclerView.ViewHolder { | ||||
| 
 | ||||
|         itemView.setOnClickListener(v -> { | ||||
|             if (notificationClickListener == null) return; | ||||
|             notificationClickListener.onFeedStoryClick(model, position); | ||||
|             notificationClickListener.onFeedStoryClick(model); | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -18,6 +18,7 @@ import android.view.MenuItem; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.Window; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| @ -29,6 +30,7 @@ import androidx.appcompat.widget.PopupMenu; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| import androidx.constraintlayout.widget.ConstraintLayout; | ||||
| import androidx.core.content.PermissionChecker; | ||||
| import androidx.core.view.WindowCompat; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.fragment.app.FragmentActivity; | ||||
| import androidx.lifecycle.LiveData; | ||||
| @ -100,7 +102,6 @@ import static androidx.core.content.PermissionChecker.checkSelfPermission; | ||||
| import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG; | ||||
| import static awais.instagrabber.fragments.settings.PreferenceKeys.PREF_SHOWN_COUNT_TOOLTIP; | ||||
| import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION; | ||||
| import static awais.instagrabber.utils.Utils.getAttrValue; | ||||
| import static awais.instagrabber.utils.Utils.settingsHelper; | ||||
| 
 | ||||
| public class PostViewV2Fragment extends Fragment implements EditTextDialogFragment.EditTextDialogFragmentCallback { | ||||
| @ -131,6 +132,9 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
|     private boolean isInFullScreenMode; | ||||
|     private StyledPlayerView playerView; | ||||
|     private int playerViewOriginalHeight; | ||||
|     private Drawable originalRootBackground; | ||||
|     private ColorStateList originalLikeColorStateList; | ||||
|     private ColorStateList originalSaveColorStateList; | ||||
| 
 | ||||
|     private final Observer<Object> backStackSavedStateObserver = result -> { | ||||
|         if (result == null) return; | ||||
| @ -141,7 +145,6 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
|         // clear result | ||||
|         backStackSavedStateResultLiveData.postValue(null); | ||||
|     }; | ||||
|     private Drawable originalRootBackground; | ||||
| 
 | ||||
|     public void setOnDeleteListener(final OnDeleteListener onDeleteListener) { | ||||
|         if (onDeleteListener == null) return; | ||||
| @ -441,6 +444,7 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
|     } | ||||
| 
 | ||||
|     private void setupLike() { | ||||
|         originalLikeColorStateList = bottom.like.getIconTint(); | ||||
|         final boolean likableMedia = viewModel.hasPk() /*&& viewModel.getMedia().isCommentLikesEnabled()*/; | ||||
|         if (!likableMedia) { | ||||
|             bottom.like.setVisibility(View.GONE); | ||||
| @ -503,25 +507,25 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
| 
 | ||||
|     private void setLikedResources(final boolean liked) { | ||||
|         final int iconResource; | ||||
|         final int tintResource; | ||||
|         final ColorStateList tintColorStateList; | ||||
|         final Context context = getContext(); | ||||
|         if (context == null) return; | ||||
|         final Resources resources = context.getResources(); | ||||
|         if (resources == null) return; | ||||
|         if (liked) { | ||||
|             iconResource = R.drawable.ic_like; | ||||
|             tintResource = resources.getColor(R.color.red_600); | ||||
|             // textResId = R.string.unlike_without_count; | ||||
|             tintColorStateList = ColorStateList.valueOf(resources.getColor(R.color.red_600)); | ||||
|         } else { | ||||
|             iconResource = R.drawable.ic_not_liked; | ||||
|             tintResource = getAttrValue(context, R.attr.colorPrimary); | ||||
|             // textResId = R.string.like_without_count; | ||||
|             tintColorStateList = originalLikeColorStateList != null ? originalLikeColorStateList | ||||
|                                                                     : ColorStateList.valueOf(resources.getColor(R.color.white)); | ||||
|         } | ||||
|         bottom.like.setIconResource(iconResource); | ||||
|         bottom.like.setIconTint(ColorStateList.valueOf(tintResource)); | ||||
|         bottom.like.setIconTint(tintColorStateList); | ||||
|     } | ||||
| 
 | ||||
|     private void setupSave() { | ||||
|         originalSaveColorStateList = bottom.save.getIconTint(); | ||||
|         if (!viewModel.isLoggedIn() || !viewModel.hasPk() || !viewModel.getMedia().canViewerSave()) { | ||||
|             bottom.save.setVisibility(View.GONE); | ||||
|             return; | ||||
| @ -574,22 +578,21 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
| 
 | ||||
|     private void setSavedResources(final boolean saved) { | ||||
|         final int iconResource; | ||||
|         final int tintResource; | ||||
|         final ColorStateList tintColorStateList; | ||||
|         final Context context = getContext(); | ||||
|         if (context == null) return; | ||||
|         final Resources resources = context.getResources(); | ||||
|         if (resources == null) return; | ||||
|         if (saved) { | ||||
|             iconResource = R.drawable.ic_bookmark; | ||||
|             tintResource = resources.getColor(R.color.blue_700); | ||||
|             // textResId = R.string.saved; | ||||
|             tintColorStateList = ColorStateList.valueOf(resources.getColor(R.color.blue_700)); | ||||
|         } else { | ||||
|             iconResource = R.drawable.ic_round_bookmark_border_24; | ||||
|             tintResource = getAttrValue(context, R.attr.colorPrimary); | ||||
|             // textResId = R.string.save; | ||||
|             tintColorStateList = originalSaveColorStateList != null ? originalSaveColorStateList | ||||
|                                                                     : ColorStateList.valueOf(resources.getColor(R.color.white)); | ||||
|         } | ||||
|         bottom.save.setIconResource(iconResource); | ||||
|         bottom.save.setIconTint(ColorStateList.valueOf(tintResource)); | ||||
|         bottom.save.setIconTint(tintColorStateList); | ||||
|     } | ||||
| 
 | ||||
|     private void setupProfilePic(final User user) { | ||||
| @ -1427,8 +1430,10 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme | ||||
|         if (toolbar != null) { | ||||
|             toolbar.setVisibility(View.VISIBLE); | ||||
|         } | ||||
|         final View decorView = activity.getWindow().getDecorView(); | ||||
|         final Window window = activity.getWindow(); | ||||
|         final View decorView = window.getDecorView(); | ||||
|         decorView.setSystemUiVisibility(originalSystemUi); | ||||
|         WindowCompat.setDecorFitsSystemWindows(window, false); | ||||
|         isInFullScreenMode = false; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -23,9 +23,12 @@ import androidx.navigation.fragment.NavHostFragment; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | ||||
| 
 | ||||
| import com.google.common.collect.Iterables; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| import awais.instagrabber.R; | ||||
| import awais.instagrabber.adapters.FeedStoriesListAdapter; | ||||
| @ -58,15 +61,17 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr | ||||
|     private StoriesService storiesService; | ||||
|     private Context context; | ||||
|     private String type; | ||||
|     private String currentQuery; | ||||
|     private String endCursor = null; | ||||
|     private FeedStoriesListAdapter adapter; | ||||
|     private MenuItem menuSearch; | ||||
| 
 | ||||
|     private final OnFeedStoryClickListener clickListener = new OnFeedStoryClickListener() { | ||||
|         @Override | ||||
|         public void onFeedStoryClick(final FeedStoryModel model, final int position) { | ||||
|         public void onFeedStoryClick(final FeedStoryModel model) { | ||||
|             if (model == null) return; | ||||
|             final List<FeedStoryModel> feedStoryModels = feedStoriesViewModel.getList().getValue(); | ||||
|             if (feedStoryModels == null) return; | ||||
|             final int position = Iterables.indexOf(feedStoryModels, feedStoryModel -> feedStoryModel != null | ||||
|                     && Objects.equals(feedStoryModel.getStoryMediaId(), model.getStoryMediaId())); | ||||
|             final NavDirections action = StoryListViewerFragmentDirections | ||||
|                     .actionStoryListFragmentToStoryViewerFragment(StoryViewerOptions.forFeedStoryPosition(position)); | ||||
|             NavHostFragment.findNavController(StoryListViewerFragment.this).navigate(action); | ||||
| @ -153,7 +158,7 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr | ||||
|     @Override | ||||
|     public void onCreateOptionsMenu(@NonNull final Menu menu, final MenuInflater inflater) { | ||||
|         inflater.inflate(R.menu.search, menu); | ||||
|         menuSearch = menu.findItem(R.id.action_search); | ||||
|         final MenuItem menuSearch = menu.findItem(R.id.action_search); | ||||
|         final SearchView searchView = (SearchView) menuSearch.getActionView(); | ||||
|         searchView.setQueryHint(getResources().getString(R.string.action_search)); | ||||
|         searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { | ||||
| @ -166,7 +171,6 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr | ||||
|             @Override | ||||
|             public boolean onQueryTextChange(final String query) { | ||||
|                 if (adapter != null) { | ||||
|                     currentQuery = query; | ||||
|                     adapter.getFilter().filter(query); | ||||
|                 } | ||||
|                 return true; | ||||
|  | ||||
| @ -119,6 +119,7 @@ public class StoryViewerFragment extends Fragment { | ||||
|     private View root; | ||||
|     private FragmentStoryViewerBinding binding; | ||||
|     private String currentStoryUsername; | ||||
|     private String highlightTitle; | ||||
|     private StoriesAdapter storiesAdapter; | ||||
|     private SwipeEvent swipeEvent; | ||||
|     private GestureDetectorCompat gestureDetector; | ||||
| @ -274,7 +275,9 @@ public class StoryViewerFragment extends Fragment { | ||||
|     @Override | ||||
|     public void onPause() { | ||||
|         super.onPause(); | ||||
|         releasePlayer(); | ||||
|         if (player != null) { | ||||
|             player.pause(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
| @ -724,7 +727,7 @@ public class StoryViewerFragment extends Fragment { | ||||
|                 final HighlightModel model = models.get(currentFeedStoryIndex); | ||||
|                 currentStoryMediaId = model.getId(); | ||||
|                 fetchOptions = StoryViewerOptions.forHighlight(model.getId()); | ||||
|                 currentStoryUsername = model.getTitle(); | ||||
|                 highlightTitle = model.getTitle(); | ||||
|                 break; | ||||
|             } | ||||
|             case FEED_STORY_POSITION: { | ||||
| @ -824,8 +827,8 @@ public class StoryViewerFragment extends Fragment { | ||||
|         if (type == Type.HIGHLIGHT) { | ||||
|             final ActionBar actionBar = fragmentActivity.getSupportActionBar(); | ||||
|             if (actionBar != null) { | ||||
|                 actionBarTitle = options.getName(); | ||||
|                 actionBar.setTitle(options.getName()); | ||||
|                 actionBarTitle = highlightTitle; | ||||
|                 actionBar.setTitle(highlightTitle); | ||||
|             } | ||||
|         } else if (hasUsername) { | ||||
|             currentStoryUsername = currentStoryUsername.replace("@", ""); | ||||
|  | ||||
| @ -16,6 +16,7 @@ import android.view.ViewGroup; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.view.menu.ActionMenuItemView; | ||||
| import androidx.coordinatorlayout.widget.CoordinatorLayout; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.lifecycle.Observer; | ||||
| @ -27,6 +28,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | ||||
| 
 | ||||
| import com.google.android.material.badge.BadgeDrawable; | ||||
| import com.google.android.material.badge.BadgeUtils; | ||||
| import com.google.android.material.internal.ToolbarUtils; | ||||
| import com.google.android.material.snackbar.Snackbar; | ||||
| 
 | ||||
| import java.util.List; | ||||
| @ -102,7 +104,9 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh | ||||
|         super.onPause(); | ||||
|         unregisterReceiver(); | ||||
|         isPendingRequestTotalBadgeAttached = false; | ||||
|         if (pendingRequestTotalBadgeDrawable != null) { | ||||
|         @SuppressLint("RestrictedApi") final ActionMenuItemView menuItemView = ToolbarUtils | ||||
|                 .getActionMenuItemView(fragmentActivity.getToolbar(), pendingRequestsMenuItem.getItemId()); | ||||
|         if (pendingRequestTotalBadgeDrawable != null && menuItemView != null) { | ||||
|             BadgeUtils.detachBadgeDrawable(pendingRequestTotalBadgeDrawable, fragmentActivity.getToolbar(), pendingRequestsMenuItem.getItemId()); | ||||
|             pendingRequestTotalBadgeDrawable = null; | ||||
|         } | ||||
| @ -217,7 +221,11 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh | ||||
|             pendingRequestTotalBadgeDrawable = BadgeDrawable.create(context); | ||||
|         } | ||||
|         if (count == null || count == 0) { | ||||
|             BadgeUtils.detachBadgeDrawable(pendingRequestTotalBadgeDrawable, fragmentActivity.getToolbar(), pendingRequestsMenuItem.getItemId()); | ||||
|             @SuppressLint("RestrictedApi") final ActionMenuItemView menuItemView = ToolbarUtils | ||||
|                     .getActionMenuItemView(fragmentActivity.getToolbar(), pendingRequestsMenuItem.getItemId()); | ||||
|             if (menuItemView != null) { | ||||
|                 BadgeUtils.detachBadgeDrawable(pendingRequestTotalBadgeDrawable, fragmentActivity.getToolbar(), pendingRequestsMenuItem.getItemId()); | ||||
|             } | ||||
|             isPendingRequestTotalBadgeAttached = false; | ||||
|             pendingRequestTotalBadgeDrawable.setNumber(0); | ||||
|             pendingRequestsMenuItem.setVisible(false); | ||||
|  | ||||
| @ -31,6 +31,7 @@ import androidx.activity.OnBackPressedDispatcher; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.view.menu.ActionMenuItemView; | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowInsetsAnimationCompat; | ||||
| @ -56,6 +57,7 @@ import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat; | ||||
| 
 | ||||
| import com.google.android.material.badge.BadgeDrawable; | ||||
| import com.google.android.material.badge.BadgeUtils; | ||||
| import com.google.android.material.internal.ToolbarUtils; | ||||
| import com.google.android.material.snackbar.Snackbar; | ||||
| import com.google.common.collect.ImmutableList; | ||||
| 
 | ||||
| @ -554,7 +556,11 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact | ||||
|         } | ||||
|         isPendingRequestCountBadgeAttached = false; | ||||
|         if (pendingRequestCountBadgeDrawable != null) { | ||||
|             BadgeUtils.detachBadgeDrawable(pendingRequestCountBadgeDrawable, fragmentActivity.getToolbar(), R.id.info); | ||||
|             @SuppressLint("RestrictedApi") final ActionMenuItemView menuItemView = ToolbarUtils | ||||
|                     .getActionMenuItemView(fragmentActivity.getToolbar(), R.id.info); | ||||
|             if (menuItemView != null) { | ||||
|                 BadgeUtils.detachBadgeDrawable(pendingRequestCountBadgeDrawable, fragmentActivity.getToolbar(), R.id.info); | ||||
|             } | ||||
|             pendingRequestCountBadgeDrawable = null; | ||||
|         } | ||||
|     } | ||||
| @ -838,7 +844,11 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact | ||||
|             pendingRequestCountBadgeDrawable = BadgeDrawable.create(context); | ||||
|         } | ||||
|         if (count == null || count == 0) { | ||||
|             BadgeUtils.detachBadgeDrawable(pendingRequestCountBadgeDrawable, fragmentActivity.getToolbar(), R.id.info); | ||||
|             @SuppressLint("RestrictedApi") final ActionMenuItemView menuItemView = ToolbarUtils | ||||
|                     .getActionMenuItemView(fragmentActivity.getToolbar(), R.id.info); | ||||
|             if (menuItemView != null) { | ||||
|                 BadgeUtils.detachBadgeDrawable(pendingRequestCountBadgeDrawable, fragmentActivity.getToolbar(), R.id.info); | ||||
|             } | ||||
|             isPendingRequestCountBadgeAttached = false; | ||||
|             pendingRequestCountBadgeDrawable.setNumber(0); | ||||
|             return; | ||||
| @ -1107,7 +1117,9 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact | ||||
|                 if (!isAdded()) return; | ||||
|                 if (!entry.isVideo) { | ||||
|                     navigateToImageEditFragment(entry.path); | ||||
|                     return; | ||||
|                 } | ||||
|                 handleSentMessage(viewModel.sendUri(entry)); | ||||
|             }); | ||||
|             mediaPicker.show(getChildFragmentManager(), "MediaPicker"); | ||||
|         }); | ||||
|  | ||||
| @ -337,6 +337,12 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre | ||||
|         return super.onOptionsItemSelected(item); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onResume() { | ||||
|         super.onResume(); | ||||
|         binding.getRoot().postDelayed(feedStoriesAdapter::notifyDataSetChanged, 1000); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onRefresh() { | ||||
|         binding.feedRecyclerView.refresh(); | ||||
| @ -418,15 +424,16 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre | ||||
|     } | ||||
| 
 | ||||
|     private void fetchStories() { | ||||
|         if (storiesFetching) return; | ||||
|         // final String cookie = settingsHelper.getString(Constants.COOKIE); | ||||
|         storiesFetching = true; | ||||
|         updateSwipeRefreshState(); | ||||
|         storiesService.getFeedStories(new ServiceCallback<List<FeedStoryModel>>() { | ||||
|             @Override | ||||
|             public void onSuccess(final List<FeedStoryModel> result) { | ||||
|                 storiesFetching = false; | ||||
|                 feedStoriesViewModel.getList().postValue(result); | ||||
|                 feedStoriesAdapter.submitList(result); | ||||
|                 storiesFetching = false; | ||||
|                 if (storyListMenu != null) storyListMenu.setVisible(true); | ||||
|                 updateSwipeRefreshState(); | ||||
|             } | ||||
| @ -451,8 +458,10 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre | ||||
|     } | ||||
| 
 | ||||
|     public void scrollToTop() { | ||||
|         binding.feedRecyclerView.smoothScrollToPosition(0); | ||||
|         // binding.storiesContainer.setExpanded(true); | ||||
|         if (binding != null) { | ||||
|             binding.feedRecyclerView.smoothScrollToPosition(0); | ||||
|             // binding.storiesContainer.setExpanded(true); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private boolean isSafeToNavigate(final NavController navController) { | ||||
|  | ||||
| @ -408,7 +408,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|         } | ||||
|         chainingMenuItem = menu.findItem(R.id.chaining); | ||||
|         if (chainingMenuItem != null) { | ||||
|             chainingMenuItem.setVisible(isNotMe); | ||||
|             chainingMenuItem.setVisible(isNotMe && profileModel.hasChaining()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -528,7 +528,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
| 
 | ||||
|     @Override | ||||
|     public void onRefresh() { | ||||
|         profileDetailsBinding.countsBarrier.getRoot().setVisibility(View.GONE); | ||||
|         profileDetailsBinding.countsDivider.getRoot().setVisibility(View.GONE); | ||||
|         profileDetailsBinding.mainProfileImage.setVisibility(View.INVISIBLE); | ||||
|         fetchProfileDetails(); | ||||
|     } | ||||
| @ -663,18 +663,22 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|             Toast.makeText(context, R.string.error_loading_profile, Toast.LENGTH_SHORT).show(); | ||||
|             return; | ||||
|         } | ||||
|         if (!postsSetupDone) { | ||||
|             setupPosts(); | ||||
|         } else { | ||||
|             binding.postsRecyclerView.refresh(); | ||||
|         final long profileId = profileModel.getPk(); | ||||
|         if (!isReallyPrivate()) { | ||||
|             if (!postsSetupDone) { | ||||
|                 setupPosts(); | ||||
|             } | ||||
|             else { | ||||
|                 binding.postsRecyclerView.refresh(); | ||||
|             } | ||||
|             if (isLoggedIn) { | ||||
|                 fetchStoryAndHighlights(profileId); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         profileDetailsBinding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE); | ||||
|         profileDetailsBinding.isPrivate.setVisibility(profileModel.isPrivate() ? View.VISIBLE : View.GONE); | ||||
|         final long profileId = profileModel.getPk(); | ||||
|         if (isLoggedIn) { | ||||
|             fetchStoryAndHighlights(profileId); | ||||
|         } | ||||
| 
 | ||||
|         setupButtons(profileId); | ||||
|         final FavoriteRepository favoriteRepository = FavoriteRepository.getInstance(FavoriteDataSource.getInstance(getContext())); | ||||
|         favoriteRepository.getFavorite(profileModel.getUsername(), FavoriteType.USER, new RepositoryCallback<Favorite>() { | ||||
| @ -746,7 +750,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|         profileDetailsBinding.mainProfileImage.setImageURI(profileModel.getProfilePicUrl()); | ||||
|         profileDetailsBinding.mainProfileImage.setVisibility(View.VISIBLE); | ||||
| 
 | ||||
|         profileDetailsBinding.countsBarrier.getRoot().setVisibility(View.VISIBLE); | ||||
|         profileDetailsBinding.countsDivider.getRoot().setVisibility(View.VISIBLE); | ||||
| 
 | ||||
|         final long followersCount = profileModel.getFollowerCount(); | ||||
|         final long followingCount = profileModel.getFollowingCount(); | ||||
| @ -907,6 +911,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|             binding.privatePage1.setImageResource(R.drawable.lock); | ||||
|             binding.privatePage2.setText(R.string.priv_acc); | ||||
|             binding.privatePage.setVisibility(View.VISIBLE); | ||||
|             binding.privatePage1.setVisibility(View.VISIBLE); | ||||
|             binding.privatePage2.setVisibility(View.VISIBLE); | ||||
|             binding.postsRecyclerView.setVisibility(View.GONE); | ||||
|             binding.swipeRefreshLayout.setRefreshing(false); | ||||
|         } | ||||
| @ -972,7 +978,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|                 mutePostsMenuItem.setTitle(profileModel.getFriendshipStatus().isMuting() ? R.string.unmute_posts : R.string.mute_posts); | ||||
|             } | ||||
|             if (chainingMenuItem != null) { | ||||
|                 chainingMenuItem.setVisible(true); | ||||
|                 chainingMenuItem.setVisible(profileModel.hasChaining()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -16,11 +16,15 @@ public final class FeedStoryModel implements Serializable { | ||||
|     private final boolean isLive, isBestie; | ||||
|     private final long timestamp; | ||||
|     private final int mediaCount; | ||||
|     private boolean isShown = true; | ||||
| 
 | ||||
|     public FeedStoryModel(final String storyMediaId, final User profileModel, final boolean fullyRead, | ||||
|                           final long timestamp, final StoryModel firstStoryModel, final int mediaCount, | ||||
|                           final boolean isLive, final boolean isBestie) { | ||||
|     public FeedStoryModel(final String storyMediaId, | ||||
|                           final User profileModel, | ||||
|                           final boolean fullyRead, | ||||
|                           final long timestamp, | ||||
|                           final StoryModel firstStoryModel, | ||||
|                           final int mediaCount, | ||||
|                           final boolean isLive, | ||||
|                           final boolean isBestie) { | ||||
|         this.storyMediaId = storyMediaId; | ||||
|         this.profileModel = profileModel; | ||||
|         this.fullyRead = fullyRead; | ||||
| @ -52,10 +56,6 @@ public final class FeedStoryModel implements Serializable { | ||||
|         return profileModel; | ||||
|     } | ||||
| 
 | ||||
|     //    public void setFirstStoryModel(final StoryModel firstStoryModel) { | ||||
|     //        this.firstStoryModel = firstStoryModel; | ||||
|     //    } | ||||
| 
 | ||||
|     public StoryModel getFirstStoryModel() { | ||||
|         return firstStoryModel; | ||||
|     } | ||||
| @ -75,12 +75,4 @@ public final class FeedStoryModel implements Serializable { | ||||
|     public boolean isBestie() { | ||||
|         return isBestie; | ||||
|     } | ||||
| 
 | ||||
|     public boolean isShown() { | ||||
|         return isShown; | ||||
|     } | ||||
| 
 | ||||
|     public void setShown(final boolean shown) { | ||||
|         isShown = shown; | ||||
|     } | ||||
| } | ||||
| @ -17,6 +17,7 @@ public class User implements Serializable { | ||||
|     private final boolean isUnpublished; | ||||
|     private final boolean isFavorite; | ||||
|     private final boolean isDirectappInstalled; | ||||
|     private final boolean hasChaining; | ||||
|     private final String reelAutoArchive; | ||||
|     private final String allowedCommenterType; | ||||
|     private final long mediaCount; | ||||
| @ -28,11 +29,10 @@ public class User implements Serializable { | ||||
|     private final long usertagsCount; | ||||
|     private final String publicEmail; | ||||
|     private final HdProfilePicUrlInfo hdProfilePicUrlInfo; | ||||
|     private final String profileContext; | ||||
|     private final List<UserProfileContextLink> profileContextLinksWithUserIds; | ||||
|     private final String socialContext; | ||||
|     // if a DM member is a Facebook user, this is present | ||||
|     private final String interopMessagingUserFbid; | ||||
|     private final String profileContext; // "also followed by" your friends | ||||
|     private final List<UserProfileContextLink> profileContextLinksWithUserIds; // ^ | ||||
|     private final String socialContext; // AYML | ||||
|     private final String interopMessagingUserFbid; // in DMs only: Facebook user ID | ||||
| 
 | ||||
|     public User(final long pk, | ||||
|                 final String username, | ||||
| @ -46,6 +46,7 @@ public class User implements Serializable { | ||||
|                 final boolean isUnpublished, | ||||
|                 final boolean isFavorite, | ||||
|                 final boolean isDirectappInstalled, | ||||
|                 final boolean hasChaining, | ||||
|                 final String reelAutoArchive, | ||||
|                 final String allowedCommenterType, | ||||
|                 final long mediaCount, | ||||
| @ -73,6 +74,7 @@ public class User implements Serializable { | ||||
|         this.isUnpublished = isUnpublished; | ||||
|         this.isFavorite = isFavorite; | ||||
|         this.isDirectappInstalled = isDirectappInstalled; | ||||
|         this.hasChaining = hasChaining; | ||||
|         this.reelAutoArchive = reelAutoArchive; | ||||
|         this.allowedCommenterType = allowedCommenterType; | ||||
|         this.mediaCount = mediaCount; | ||||
| @ -90,6 +92,53 @@ public class User implements Serializable { | ||||
|         this.interopMessagingUserFbid = interopMessagingUserFbid; | ||||
|     } | ||||
| 
 | ||||
|     public User(final long pk, | ||||
|                 final String username, | ||||
|                 final String fullName, | ||||
|                 final boolean isPrivate, | ||||
|                 final String profilePicUrl, | ||||
|                 final boolean isVerified) { | ||||
|         this.pk = pk; | ||||
|         this.username = username; | ||||
|         this.fullName = fullName; | ||||
|         this.isPrivate = isPrivate; | ||||
|         this.profilePicUrl = profilePicUrl; | ||||
|         this.profilePicId = null; | ||||
|         this.friendshipStatus = new FriendshipStatus( | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false, | ||||
|                 false | ||||
|         ); | ||||
|         this.isVerified = isVerified; | ||||
|         this.hasAnonymousProfilePicture = false; | ||||
|         this.isUnpublished = false; | ||||
|         this.isFavorite = false; | ||||
|         this.isDirectappInstalled = false; | ||||
|         this.hasChaining = false; | ||||
|         this.reelAutoArchive = null; | ||||
|         this.allowedCommenterType = null; | ||||
|         this.mediaCount = 0; | ||||
|         this.followerCount = 0; | ||||
|         this.followingCount = 0; | ||||
|         this.followingTagCount = 0; | ||||
|         this.biography = null; | ||||
|         this.externalUrl = null; | ||||
|         this.usertagsCount = 0; | ||||
|         this.publicEmail = null; | ||||
|         this.hdProfilePicUrlInfo = null; | ||||
|         this.profileContext = null; | ||||
|         this.profileContextLinksWithUserIds = null; | ||||
|         this.socialContext = null; | ||||
|         this.interopMessagingUserFbid = null; | ||||
|     } | ||||
| 
 | ||||
|     public long getPk() { | ||||
|         return pk; | ||||
|     } | ||||
| @ -149,6 +198,10 @@ public class User implements Serializable { | ||||
|         return isDirectappInstalled; | ||||
|     } | ||||
| 
 | ||||
|     public boolean hasChaining() { | ||||
|         return hasChaining; | ||||
|     } | ||||
| 
 | ||||
|     public String getReelAutoArchive() { | ||||
|         return reelAutoArchive; | ||||
|     } | ||||
| @ -237,7 +290,7 @@ public class User implements Serializable { | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return Objects.hash(pk, username, fullName, isPrivate, profilePicUrl, profilePicId, friendshipStatus, isVerified, hasAnonymousProfilePicture, | ||||
|                             isUnpublished, isFavorite, isDirectappInstalled, reelAutoArchive, allowedCommenterType, mediaCount, followerCount, | ||||
|                             followingCount, followingTagCount, biography, externalUrl, usertagsCount, publicEmail); | ||||
|                             isUnpublished, isFavorite, isDirectappInstalled, hasChaining, reelAutoArchive, allowedCommenterType, mediaCount, | ||||
|                             followerCount, followingCount, followingTagCount, biography, externalUrl, usertagsCount, publicEmail); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -191,9 +191,7 @@ public class SearchItem { | ||||
|                 recentSearch.getName(), | ||||
|                 false, | ||||
|                 recentSearch.getPicUrl(), | ||||
|                 null, null, false, false, false, false, false, | ||||
|                 null, null, 0, 0, 0, 0, null, null, | ||||
|                 0, null, null, null, null, null, null | ||||
|                 false | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
| @ -205,9 +203,7 @@ public class SearchItem { | ||||
|                 favorite.getDisplayName(), | ||||
|                 false, | ||||
|                 favorite.getPicUrl(), | ||||
|                 null, null, false, false, false, false, false, | ||||
|                 null, null, 0, 0, 0, 0, null, null, | ||||
|                 0, null, null, null, null, null, null | ||||
|                 false | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -63,7 +63,7 @@ public class NavigationExtensions { | ||||
|         selectedItemTag = graphIdToTagMap.get(bottomNavigationView.getSelectedItemId()); | ||||
|         final String firstFragmentTag = graphIdToTagMap.get(firstFragmentGraphId); | ||||
|         isOnFirstFragment = selectedItemTag != null && selectedItemTag.equals(firstFragmentTag); | ||||
|         bottomNavigationView.setOnNavigationItemSelectedListener(item -> { | ||||
|         bottomNavigationView.setOnItemSelectedListener(item -> { | ||||
|             if (fragmentManager.isStateSaved()) { | ||||
|                 return false; | ||||
|             } | ||||
| @ -169,7 +169,7 @@ public class NavigationExtensions { | ||||
|     private static void setupItemReselected(final BottomNavigationView bottomNavigationView, | ||||
|                                             final SparseArray<String> graphIdToTagMap, | ||||
|                                             final FragmentManager fragmentManager) { | ||||
|         bottomNavigationView.setOnNavigationItemReselectedListener(item -> { | ||||
|         bottomNavigationView.setOnItemReselectedListener(item -> { | ||||
|             final String newlySelectedItemTag = graphIdToTagMap.get(item.getItemId()); | ||||
|             final Fragment fragmentByTag = fragmentManager.findFragmentByTag(newlySelectedItemTag); | ||||
|             if (fragmentByTag == null) { | ||||
|  | ||||
| @ -767,11 +767,7 @@ public final class ResponseBodyUtils { | ||||
|                     owner.optString("full_name"), | ||||
|                     false, | ||||
|                     owner.optString("profile_pic_url"), | ||||
|                     null, | ||||
|                     friendshipStatus, | ||||
|                     owner.optBoolean("is_verified"), | ||||
|                     false, false, false, false, null, null, 0, 0, 0, 0, null, null, 0, null, null, | ||||
|                     null, null, null, null); | ||||
|                     owner.optBoolean("is_verified")); | ||||
|         } | ||||
|         final String id = feedItem.getString(Constants.EXTRAS_ID); | ||||
|         VideoVersion videoVersion = null; | ||||
|  | ||||
| @ -104,7 +104,6 @@ public final class ViewUtils { | ||||
|         } else { | ||||
|             hiddenSuppressLayout($this$suppressLayoutCompat, suppress); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private static boolean tryHiddenSuppressLayout = true; | ||||
| @ -118,6 +117,5 @@ public final class ViewUtils { | ||||
|                 tryHiddenSuppressLayout = false; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -238,11 +238,7 @@ public class CommentsViewerViewModel extends ViewModel { | ||||
|                 null, | ||||
|                 false, | ||||
|                 owner.getString("profile_pic_url"), | ||||
|                 null, | ||||
|                 new FriendshipStatus(false, false, false, false, false, false, false, false, false, false), | ||||
|                 owner.optBoolean("is_verified"), | ||||
|                 false, false, false, false, null, null, 0, 0, 0, 0, null, null, 0, null, null, null, null, | ||||
|                 null, null); | ||||
|                 owner.optBoolean("is_verified")); | ||||
|         final JSONObject likedBy = commentJsonObject.optJSONObject("edge_liked_by"); | ||||
|         final String commentId = commentJsonObject.getString("id"); | ||||
|         final JSONObject childCommentsJsonObject = commentJsonObject.optJSONObject("edge_threaded_comments"); | ||||
|  | ||||
| @ -34,7 +34,6 @@ import retrofit2.Response; | ||||
| 
 | ||||
| public class GraphQLService extends BaseService { | ||||
|     private static final String TAG = "GraphQLService"; | ||||
|     // private static final boolean loadFromMock = false; | ||||
| 
 | ||||
|     private final GraphQLRepository repository; | ||||
| 
 | ||||
| @ -230,39 +229,7 @@ public class GraphQLService extends BaseService { | ||||
|                                 userObject.optString("full_name"), | ||||
|                                 userObject.optBoolean("is_private"), | ||||
|                                 userObject.getString("profile_pic_url"), | ||||
|                                 null, | ||||
|                                 new FriendshipStatus( | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false, | ||||
|                                         false | ||||
|                                 ), | ||||
|                                 userObject.optBoolean("is_verified"), | ||||
|                                 false, | ||||
|                                 false, | ||||
|                                 false, | ||||
|                                 false, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 0, | ||||
|                                 0, | ||||
|                                 0, | ||||
|                                 0, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 0, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 null, | ||||
|                                 null | ||||
|                                 userObject.optBoolean("is_verified") | ||||
|                         )); | ||||
|                         // userModels.add(new ProfileModel(userObject.optBoolean("is_private"), | ||||
|                         //                                 false, | ||||
| @ -357,6 +324,7 @@ public class GraphQLService extends BaseService { | ||||
|                             false, | ||||
|                             false, | ||||
|                             false, | ||||
|                             false, | ||||
|                             null, | ||||
|                             null, | ||||
|                             timelineMedia.getLong("count"), | ||||
|  | ||||
| @ -143,39 +143,7 @@ public class StoriesService extends BaseService { | ||||
|                                                userJson.optString("full_name"), | ||||
|                                                userJson.optBoolean("is_private"), | ||||
|                                                userJson.getString("profile_pic_url"), | ||||
|                                                null, | ||||
|                                                new FriendshipStatus( | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false, | ||||
|                                                        false | ||||
|                                                ), | ||||
|                                                userJson.optBoolean("is_verified"), | ||||
|                                                false, | ||||
|                                                false, | ||||
|                                                false, | ||||
|                                                false, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                0, | ||||
|                                                0, | ||||
|                                                0, | ||||
|                                                0, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                0, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                null, | ||||
|                                                null | ||||
|                                                userJson.optBoolean("is_verified") | ||||
|                     ); | ||||
|                     final long timestamp = node.getLong("latest_reel_media"); | ||||
|                     final boolean fullyRead = !node.isNull("seen") && node.getLong("seen") == timestamp; | ||||
| @ -210,39 +178,7 @@ public class StoriesService extends BaseService { | ||||
|                                            userJson.optString("full_name"), | ||||
|                                            userJson.optBoolean("is_private"), | ||||
|                                            userJson.getString("profile_pic_url"), | ||||
|                                            null, | ||||
|                                            new FriendshipStatus( | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false, | ||||
|                                                    false | ||||
|                                            ), | ||||
|                                            userJson.optBoolean("is_verified"), | ||||
|                                            false, | ||||
|                                            false, | ||||
|                                            false, | ||||
|                                            false, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            0, | ||||
|                                            0, | ||||
|                                            0, | ||||
|                                            0, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            0, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            null, | ||||
|                                            null | ||||
|                                            userJson.optBoolean("is_verified") | ||||
|                 ); | ||||
|                 feedStoryModels.add(new FeedStoryModel( | ||||
|                         node.getString("id"), | ||||
|  | ||||
| @ -38,7 +38,6 @@ | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_gravity="top" | ||||
|         android:layout_marginTop="@dimen/private_page_margins" | ||||
|         android:gravity="center" | ||||
|         android:orientation="vertical" | ||||
|         android:visibility="gone" | ||||
| @ -48,6 +47,8 @@ | ||||
|             android:id="@+id/privatePage1" | ||||
|             android:layout_width="@dimen/private_page_size" | ||||
|             android:layout_height="@dimen/private_page_size" | ||||
|             android:visibility="gone" | ||||
|             tools:visibility="visible" | ||||
|             app:srcCompat="@drawable/lock" /> | ||||
| 
 | ||||
|         <androidx.appcompat.widget.AppCompatTextView | ||||
| @ -55,6 +56,8 @@ | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:gravity="center" | ||||
|             android:visibility="gone" | ||||
|             tools:visibility="visible" | ||||
|             android:text="@string/priv_acc" | ||||
|             android:textAppearance="@style/TextAppearance.AppCompat.Large" /> | ||||
|     </LinearLayout> | ||||
|  | ||||
| @ -43,7 +43,9 @@ | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_below="@+id/title" | ||||
|             android:ellipsize="end" | ||||
|             android:gravity="center_vertical" | ||||
|             android:maxLines="1" | ||||
|             android:textAppearance="@style/TextAppearance.AppCompat.Subhead" | ||||
|             android:textSize="15sp" | ||||
|             android:visibility="visible" | ||||
|  | ||||
| @ -15,10 +15,11 @@ | ||||
|         android:transitionName="profile_pic" | ||||
|         android:visibility="invisible" | ||||
|         app:actualImageScaleType="centerCrop" | ||||
|         app:layout_constraintBottom_toBottomOf="@id/btnTagged" | ||||
|         app:layout_constraintBottom_toTopOf="@id/top_barrier" | ||||
|         app:layout_constraintEnd_toStartOf="@id/btnFollow" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" | ||||
|         app:layout_constraintVertical_bias="0" | ||||
|         tools:foreground="@mipmap/ic_launcher" | ||||
|         tools:visibility="visible" /> | ||||
| 
 | ||||
| @ -112,7 +113,7 @@ | ||||
|         app:chipBackgroundColor="@null" | ||||
|         app:chipIcon="@drawable/ic_outline_person_pin_24" | ||||
|         app:chipIconTint="@color/deep_orange_800" | ||||
|         app:layout_constraintBottom_toTopOf="@+id/mainFullName" | ||||
|         app:layout_constraintBottom_toTopOf="@+id/top_barrier" | ||||
|         app:layout_constraintStart_toEndOf="@id/mainProfileImage" | ||||
|         app:layout_constraintTop_toBottomOf="@id/fav_chip" | ||||
|         app:rippleColor="@color/deep_orange_400" | ||||
| @ -128,12 +129,18 @@ | ||||
|         app:chipBackgroundColor="@null" | ||||
|         app:chipIcon="@drawable/ic_round_send_24" | ||||
|         app:chipIconTint="@color/green" | ||||
|         app:layout_constraintBottom_toTopOf="@+id/mainFullName" | ||||
|         app:layout_constraintBottom_toTopOf="@+id/top_barrier" | ||||
|         app:layout_constraintStart_toEndOf="@id/btnTagged" | ||||
|         app:layout_constraintTop_toBottomOf="@id/fav_chip" | ||||
|         app:rippleColor="@color/green" | ||||
|         tools:visibility="visible" /> | ||||
| 
 | ||||
|     <androidx.constraintlayout.widget.Barrier | ||||
|         android:id="@+id/top_barrier" | ||||
|         android:layout_width="0dp" | ||||
|         android:layout_height="0dp" | ||||
|         app:barrierDirection="bottom" /> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.AppCompatTextView | ||||
|         android:id="@+id/mainFullName" | ||||
|         android:layout_width="wrap_content" | ||||
| @ -146,40 +153,37 @@ | ||||
|         android:singleLine="true" | ||||
|         android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|         android:textStyle="bold" | ||||
|         app:layout_constraintBottom_toTopOf="@id/mainBiography" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@id/btnTagged" | ||||
|         app:layout_constraintTop_toBottomOf="@id/top_barrier" | ||||
|         tools:text="Austin Huang" /> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.AppCompatImageView | ||||
|         android:id="@+id/isVerified" | ||||
|         android:layout_width="30dp" | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_height="0dp" | ||||
|         android:layout_gravity="center" | ||||
|         android:adjustViewBounds="true" | ||||
|         android:paddingTop="4dp" | ||||
|         android:paddingBottom="4dp" | ||||
|         android:scaleType="fitCenter" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintBottom_toBottomOf="@id/mainFullName" | ||||
|         app:layout_constraintStart_toEndOf="@id/mainFullName" | ||||
|         app:layout_constraintTop_toBottomOf="@id/btnTagged" | ||||
|         app:layout_constraintTop_toTopOf="@id/mainFullName" | ||||
|         app:srcCompat="@drawable/verified" | ||||
|         tools:visibility="visible" /> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.AppCompatImageView | ||||
|         android:id="@+id/isPrivate" | ||||
|         android:layout_width="25dp" | ||||
|         android:layout_height="match_parent" | ||||
|         android:layout_height="0dp" | ||||
|         android:layout_gravity="center" | ||||
|         android:adjustViewBounds="true" | ||||
|         android:paddingTop="4dp" | ||||
|         android:paddingBottom="4dp" | ||||
|         android:scaleType="fitCenter" | ||||
|         android:tint="@color/red_500" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintBottom_toBottomOf="@id/mainFullName" | ||||
|         app:layout_constraintStart_toEndOf="@id/isVerified" | ||||
|         app:layout_constraintTop_toBottomOf="@id/btnTagged" | ||||
|         app:layout_constraintTop_toTopOf="@id/mainFullName" | ||||
|         app:srcCompat="@drawable/lock" | ||||
|         tools:visibility="visible" /> | ||||
| 
 | ||||
| @ -233,6 +237,7 @@ | ||||
|         android:paddingBottom="4dp" | ||||
|         android:textAppearance="@style/TextAppearance.AppCompat.Body1" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintBottom_toTopOf="@id/profileContext" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@id/mainBiography" | ||||
| @ -254,7 +259,7 @@ | ||||
|         android:textSize="12sp" | ||||
|         android:textStyle="italic" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintBottom_toTopOf="@id/counts_barrier" | ||||
|         app:layout_constraintBottom_toTopOf="@id/counts_divider" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@id/mainUrl" | ||||
| @ -262,11 +267,12 @@ | ||||
|         tools:visibility="visible" /> | ||||
| 
 | ||||
|     <include | ||||
|         android:id="@+id/counts_barrier" | ||||
|         android:id="@+id/counts_divider" | ||||
|         layout="@layout/item_pref_divider" | ||||
|         android:layout_width="0dp" | ||||
|         android:layout_height="1dp" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintBottom_toTopOf="@id/mainPostCount" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@id/profileContext" | ||||
| @ -285,7 +291,7 @@ | ||||
|         app:layout_constraintBottom_toBottomOf="@id/highlights_barrier" | ||||
|         app:layout_constraintEnd_toStartOf="@id/mainFollowers" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_barrier" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_divider" | ||||
|         tools:text="35\nPosts" /> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.AppCompatTextView | ||||
| @ -302,7 +308,7 @@ | ||||
|         app:layout_constraintBottom_toBottomOf="@id/highlights_barrier" | ||||
|         app:layout_constraintEnd_toStartOf="@id/mainFollowing" | ||||
|         app:layout_constraintStart_toEndOf="@id/mainPostCount" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_barrier" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_divider" | ||||
|         tools:text="68\nFollowers" /> | ||||
| 
 | ||||
|     <androidx.appcompat.widget.AppCompatTextView | ||||
| @ -319,7 +325,7 @@ | ||||
|         app:layout_constraintBottom_toBottomOf="@id/highlights_barrier" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintStart_toEndOf="@id/mainFollowers" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_barrier" | ||||
|         app:layout_constraintTop_toBottomOf="@id/counts_divider" | ||||
|         tools:text="64\nFollowing" /> | ||||
| 
 | ||||
|     <androidx.constraintlayout.widget.Barrier | ||||
|  | ||||
| @ -19,9 +19,9 @@ | ||||
|     <color name="btn_lightpink_text_color">@color/text_color_light</color> | ||||
| 
 | ||||
|     <color name="btn_orange_background">#FF5500</color> | ||||
|     <color name="btn_orange_text_color">#FFFFFFFF</color> | ||||
|     <color name="btn_orange_text_color">@color/white</color> | ||||
|     <color name="btn_lightorange_background">#FFBB00</color> | ||||
|     <color name="btn_lightorange_text_color">#FF000000</color> | ||||
|     <color name="btn_lightorange_text_color">@color/black</color> | ||||
| 
 | ||||
|     <color name="dm_profile_button_color">#efefef</color> | ||||
| 
 | ||||
|  | ||||
| @ -9,6 +9,13 @@ | ||||
|             motion:layout_constraintEnd_toEndOf="parent" | ||||
|             motion:layout_constraintStart_toStartOf="parent" | ||||
|             motion:layout_constraintTop_toTopOf="parent" /> | ||||
|         <Constraint | ||||
|             android:id="@+id/privatePage" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginTop="@dimen/private_page_margins" | ||||
|             android:visibility="visible" | ||||
|             motion:layout_constraintTop_toBottomOf="@+id/header" /> | ||||
|     </ConstraintSet> | ||||
|     <ConstraintSet android:id="@+id/end"> | ||||
|         <Constraint | ||||
|  | ||||
| @ -5,7 +5,7 @@ buildscript { | ||||
|     } | ||||
| 
 | ||||
|     dependencies { | ||||
|         classpath 'com.android.tools.build:gradle:4.2.0' | ||||
|         classpath 'com.android.tools.build:gradle:4.2.1' | ||||
|         def nav_version = "2.3.5" | ||||
|         classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" | ||||
|     } | ||||
|  | ||||
							
								
								
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionSha256Sum=9af5c8e7e2cd1a3b0f694a4ac262b9f38c75262e74a9e8b5101af302a6beadd7 | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip | ||||
| distributionSha256Sum=13bf8d3cf8eeeb5770d19741a59bde9bd966dd78d17f1bbad787a05ef19d1c2d | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user