mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-31 03:25:34 +00:00 
			
		
		
		
	restore dm button on profiles
This commit is contained in:
		
							parent
							
								
									9bf72b2781
								
							
						
					
					
						commit
						a55def53c5
					
				| @ -71,6 +71,7 @@ import awais.instagrabber.interfaces.FetchListener; | ||||
| import awais.instagrabber.models.IntentModel; | ||||
| import awais.instagrabber.models.SuggestionModel; | ||||
| import awais.instagrabber.models.enums.SuggestionType; | ||||
| import awais.instagrabber.repositories.responses.directmessages.DirectThread; | ||||
| import awais.instagrabber.services.ActivityCheckerService; | ||||
| import awais.instagrabber.services.DMSyncAlarmReceiver; | ||||
| import awais.instagrabber.utils.AppExecutors; | ||||
| @ -573,10 +574,10 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
|     private void showThread(@NonNull final Intent intent) { | ||||
|         final String threadId = intent.getStringExtra(Constants.DM_THREAD_ACTION_EXTRA_THREAD_ID); | ||||
|         final String threadTitle = intent.getStringExtra(Constants.DM_THREAD_ACTION_EXTRA_THREAD_TITLE); | ||||
|         navigateToThread(threadId, threadTitle); | ||||
|         navigateToThread(threadId, threadTitle, null); | ||||
|     } | ||||
| 
 | ||||
|     public void navigateToThread(final String threadId, final String threadTitle) { | ||||
|     public void navigateToThread(final String threadId, final String threadTitle, final DirectThread backup) { | ||||
|         if (threadId == null || threadTitle == null) return; | ||||
|         currentNavControllerLiveData.observe(this, new Observer<NavController>() { | ||||
|             @Override | ||||
| @ -590,7 +591,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
|                         // need handler.post() to wait for the fragment manager to be ready to navigate | ||||
|                         new Handler().post(() -> { | ||||
|                             final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections | ||||
|                                     .actionInboxToThread(threadId, threadTitle); | ||||
|                                     .actionInboxToThread(threadId, threadTitle, backup); | ||||
|                             navController.navigate(action); | ||||
|                         }); | ||||
|                         return; | ||||
| @ -603,7 +604,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage | ||||
|                                                          @Nullable final Bundle arguments) { | ||||
|                             if (destination.getId() == R.id.directMessagesInboxFragment) { | ||||
|                                 final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections | ||||
|                                         .actionInboxToThread(threadId, threadTitle); | ||||
|                                         .actionInboxToThread(threadId, threadTitle, backup); | ||||
|                                 controller.navigate(action); | ||||
|                                 controller.removeOnDestinationChangedListener(this); | ||||
|                             } | ||||
|  | ||||
| @ -254,7 +254,7 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh | ||||
|             navigating = true; | ||||
|             if (isAdded()) { | ||||
|                 final DirectMessageInboxFragmentDirections.ActionInboxToThread directions = DirectMessageInboxFragmentDirections | ||||
|                         .actionInboxToThread(thread.getThreadId(), thread.getThreadTitle()); | ||||
|                         .actionInboxToThread(thread.getThreadId(), thread.getThreadTitle(), thread); | ||||
|                 NavHostFragment.findNavController(this).navigate(directions); | ||||
|             } | ||||
|             navigating = false; | ||||
|  | ||||
| @ -79,6 +79,7 @@ public class DirectMessageSettingsFragment extends Fragment implements ConfirmDi | ||||
|         final AppStateViewModel appStateViewModel = new ViewModelProvider(fragmentActivity).get(AppStateViewModel.class); | ||||
|         viewModel = new ViewModelProvider(this, new DirectSettingsViewModelFactory(fragmentActivity.getApplication(), | ||||
|                                                                                    args.getThreadId(), | ||||
|                                                                                    args.getBackup(), | ||||
|                                                                                    args.getPending(), | ||||
|                                                                                    appStateViewModel.getCurrentUser())) | ||||
|                 .get(DirectSettingsViewModel.class); | ||||
|  | ||||
| @ -327,6 +327,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact | ||||
|         final DirectMessageThreadFragmentArgs fragmentArgs = DirectMessageThreadFragmentArgs.fromBundle(arguments); | ||||
|         viewModel = new ViewModelProvider(this, new DirectThreadViewModelFactory(fragmentActivity.getApplication(), | ||||
|                                                                                  fragmentArgs.getThreadId(), | ||||
|                                                                                  fragmentArgs.getBackup(), | ||||
|                                                                                  fragmentArgs.getPending(), | ||||
|                                                                                  appStateViewModel.getCurrentUser())) | ||||
|                 .get(DirectThreadViewModel.class); | ||||
| @ -376,7 +377,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact | ||||
|         final int itemId = item.getItemId(); | ||||
|         if (itemId == R.id.info) { | ||||
|             final DirectMessageThreadFragmentDirections.ActionThreadToSettings directions = DirectMessageThreadFragmentDirections | ||||
|                     .actionThreadToSettings(viewModel.getThreadId(), null); | ||||
|                     .actionThreadToSettings(viewModel.getThreadId(), null, null); | ||||
|             final Boolean pending = viewModel.isPending().getValue(); | ||||
|             directions.setPending(pending == null ? false : pending); | ||||
|             NavHostFragment.findNavController(this).navigate(directions); | ||||
|  | ||||
| @ -163,7 +163,7 @@ public class DirectPendingInboxFragment extends Fragment implements SwipeRefresh | ||||
|             navigating = true; | ||||
|             if (isAdded()) { | ||||
|                 final DirectPendingInboxFragmentDirections.ActionPendingInboxToThread directions = DirectPendingInboxFragmentDirections | ||||
|                         .actionPendingInboxToThread(thread.getThreadId(), thread.getThreadTitle()); | ||||
|                         .actionPendingInboxToThread(thread.getThreadId(), thread.getThreadTitle(), thread); | ||||
|                 directions.setPending(true); | ||||
|                 NavHostFragment.findNavController(this).navigate(directions); | ||||
|             } | ||||
|  | ||||
| @ -56,6 +56,7 @@ import awais.instagrabber.R; | ||||
| import awais.instagrabber.activities.MainActivity; | ||||
| import awais.instagrabber.adapters.FeedAdapterV2; | ||||
| import awais.instagrabber.adapters.HighlightsAdapter; | ||||
| import awais.instagrabber.asyncs.CreateThreadAction; | ||||
| import awais.instagrabber.asyncs.ProfileFetcher; | ||||
| import awais.instagrabber.asyncs.ProfilePostFetchService; | ||||
| import awais.instagrabber.asyncs.UsernameFetcher; | ||||
| @ -911,19 +912,18 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
| 
 | ||||
|     private void setupButtons(final long profileId, final long myId) { | ||||
|         profileDetailsBinding.btnTagged.setVisibility(isReallyPrivate() ? View.GONE : View.VISIBLE); | ||||
|         profileDetailsBinding.btnDM.setVisibility(View.GONE); // temporary measure | ||||
|         if (isLoggedIn) { | ||||
|             if (Objects.equals(profileId, myId)) { | ||||
|                 profileDetailsBinding.btnTagged.setVisibility(View.VISIBLE); | ||||
|                 profileDetailsBinding.btnSaved.setVisibility(View.VISIBLE); | ||||
|                 profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE); | ||||
|                 // profileDetailsBinding.btnDM.setVisibility(View.GONE); | ||||
|                 profileDetailsBinding.btnDM.setVisibility(View.GONE); | ||||
|                 profileDetailsBinding.btnSaved.setText(R.string.saved); | ||||
|                 return; | ||||
|             } | ||||
|             profileDetailsBinding.btnSaved.setVisibility(View.GONE); | ||||
|             profileDetailsBinding.btnLiked.setVisibility(View.GONE); | ||||
|             // profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); | ||||
|             profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); | ||||
|             profileDetailsBinding.btnFollow.setVisibility(View.VISIBLE); | ||||
|             final Context context = getContext(); | ||||
|             if (context == null) return; | ||||
| @ -1081,27 +1081,18 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||||
|                                                                                                               PostItemType.TAGGED); | ||||
|             NavHostFragment.findNavController(this).navigate(action); | ||||
|         }); | ||||
|         // profileDetailsBinding.btnDM.setOnClickListener(v -> { | ||||
|         //     profileDetailsBinding.btnDM.setEnabled(false); | ||||
|         //     new CreateThreadAction(cookie, profileModel.getPk(), thread -> { | ||||
|         //         if (thread == null) { | ||||
|         //             Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); | ||||
|         //             profileDetailsBinding.btnDM.setEnabled(true); | ||||
|         //             return; | ||||
|         //         } | ||||
|         //         if (isAdded()) { | ||||
|         //             final Bundle bundle = new Bundle(); | ||||
|         //             bundle.putString("threadId", thread.getThreadId()); | ||||
|         //             bundle.putString("title", thread.getThreadTitle()); | ||||
|         //             if (isAdded()) { | ||||
|         //                 final NavDirections action = ProfileFragmentDirections | ||||
|         //                         .actionProfileFragmentToDMThreadFragment(thread.getThreadId(), profileModel.getUsername()); | ||||
|         //                 NavHostFragment.findNavController(this).navigate(action); | ||||
|         //             } | ||||
|         //         } | ||||
|         //         profileDetailsBinding.btnDM.setEnabled(true); | ||||
|         //     }).execute(); | ||||
|         // }); | ||||
|         profileDetailsBinding.btnDM.setOnClickListener(v -> { | ||||
|             profileDetailsBinding.btnDM.setEnabled(false); | ||||
|             new CreateThreadAction(cookie, profileModel.getPk(), thread -> { | ||||
|                 if (thread == null) { | ||||
|                     Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); | ||||
|                     profileDetailsBinding.btnDM.setEnabled(true); | ||||
|                     return; | ||||
|                 } | ||||
|                 fragmentActivity.navigateToThread(thread.getThreadId(), profileModel.getUsername(), thread); | ||||
|                 profileDetailsBinding.btnDM.setEnabled(true); | ||||
|             }).execute(); | ||||
|          }); | ||||
|         profileDetailsBinding.mainProfileImage.setOnClickListener(v -> { | ||||
|             if (!hasStories) { | ||||
|                 // show profile pic | ||||
|  | ||||
| @ -74,8 +74,9 @@ public final class DirectMessagesManager { | ||||
| 
 | ||||
|     public ThreadManager getThreadManager(@NonNull final String threadId, | ||||
|                                           final boolean pending, | ||||
|                                           final DirectThread backup, | ||||
|                                           @NonNull final User currentUser, | ||||
|                                           @NonNull final ContentResolver contentResolver) { | ||||
|         return ThreadManager.getInstance(threadId, pending, currentUser, contentResolver); | ||||
|         return ThreadManager.getInstance(threadId, pending, backup, currentUser, contentResolver); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -122,6 +122,7 @@ public final class ThreadManager { | ||||
| 
 | ||||
|     public static ThreadManager getInstance(@NonNull final String threadId, | ||||
|                                             final boolean pending, | ||||
|                                             final DirectThread backup, | ||||
|                                             @NonNull final User currentUser, | ||||
|                                             @NonNull final ContentResolver contentResolver) { | ||||
|         ThreadManager instance = INSTANCE_MAP.get(threadId); | ||||
| @ -129,7 +130,7 @@ public final class ThreadManager { | ||||
|             synchronized (LOCK) { | ||||
|                 instance = INSTANCE_MAP.get(threadId); | ||||
|                 if (instance == null) { | ||||
|                     instance = new ThreadManager(threadId, pending, currentUser, contentResolver); | ||||
|                     instance = new ThreadManager(threadId, pending, backup, currentUser, contentResolver); | ||||
|                     INSTANCE_MAP.put(threadId, instance); | ||||
|                 } | ||||
|             } | ||||
| @ -143,6 +144,7 @@ public final class ThreadManager { | ||||
| 
 | ||||
|     private ThreadManager(@NonNull final String threadId, | ||||
|                           final boolean pending, | ||||
|                           final DirectThread backup, | ||||
|                           @NonNull final User currentUser, | ||||
|                           @NonNull final ContentResolver contentResolver) { | ||||
|         final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); | ||||
| @ -161,17 +163,17 @@ public final class ThreadManager { | ||||
|         service = DirectMessagesService.getInstance(csrfToken, viewerId, deviceUuid); | ||||
|         mediaService = MediaService.getInstance(deviceUuid, csrfToken, viewerId); | ||||
|         friendshipService = FriendshipService.getInstance(deviceUuid, csrfToken, viewerId); | ||||
|         setupTransformations(); | ||||
|         setupTransformations(backup); | ||||
|         // fetchChats(); | ||||
|     } | ||||
| 
 | ||||
|     public void moveFromPending() { | ||||
|         final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); | ||||
|         this.inboxManager = messagesManager.getInboxManager(); | ||||
|         setupTransformations(); | ||||
|         setupTransformations(null); | ||||
|     } | ||||
| 
 | ||||
|     private void setupTransformations() { | ||||
|     private void setupTransformations(final DirectThread backup) { | ||||
|         // Transformations | ||||
|         thread = distinctUntilChanged(map(inboxManager.getInbox(), inboxResource -> { | ||||
|             if (inboxResource == null) { | ||||
| @ -185,7 +187,7 @@ public final class ThreadManager { | ||||
|             final DirectThread thread = threads.stream() | ||||
|                                                .filter(t -> t.getThreadId().equals(threadId)) | ||||
|                                                .findFirst() | ||||
|                                                .orElse(null); | ||||
|                                                .orElse(backup); | ||||
|             if (thread != null) { | ||||
|                 cursor = thread.getOldestCursor(); | ||||
|                 hasOlder = thread.hasOlder(); | ||||
|  | ||||
| @ -45,6 +45,7 @@ public class DirectSettingsViewModel extends AndroidViewModel { | ||||
| 
 | ||||
|     public DirectSettingsViewModel(final Application application, | ||||
|                                    @NonNull final String threadId, | ||||
|                                    final DirectThread backup, | ||||
|                                    final boolean pending, | ||||
|                                    @NonNull final User currentUser) { | ||||
|         super(application); | ||||
| @ -58,7 +59,7 @@ public class DirectSettingsViewModel extends AndroidViewModel { | ||||
|         final ContentResolver contentResolver = application.getContentResolver(); | ||||
|         resources = getApplication().getResources(); | ||||
|         final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); | ||||
|         threadManager = messagesManager.getThreadManager(threadId, pending, currentUser, contentResolver); | ||||
|         threadManager = messagesManager.getThreadManager(threadId, pending, backup, currentUser, contentResolver); | ||||
|     } | ||||
| 
 | ||||
|     @NonNull | ||||
|  | ||||
| @ -53,6 +53,7 @@ public class DirectThreadViewModel extends AndroidViewModel { | ||||
| 
 | ||||
|     public DirectThreadViewModel(@NonNull final Application application, | ||||
|                                  @NonNull final String threadId, | ||||
|                                  final DirectThread backup, | ||||
|                                  final boolean pending, | ||||
|                                  @NonNull final User currentUser) { | ||||
|         super(application); | ||||
| @ -69,7 +70,7 @@ public class DirectThreadViewModel extends AndroidViewModel { | ||||
|         contentResolver = application.getContentResolver(); | ||||
|         recordingsDir = DirectoryUtils.getOutputMediaDirectory(application, "Recordings"); | ||||
|         final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); | ||||
|         threadManager = messagesManager.getThreadManager(threadId, pending, currentUser, contentResolver); | ||||
|         threadManager = messagesManager.getThreadManager(threadId, pending, backup, currentUser, contentResolver); | ||||
|         threadManager.fetchPendingRequests(); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -7,21 +7,25 @@ import androidx.lifecycle.ViewModel; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| 
 | ||||
| import awais.instagrabber.repositories.responses.User; | ||||
| import awais.instagrabber.repositories.responses.directmessages.DirectThread; | ||||
| import awais.instagrabber.viewmodels.DirectSettingsViewModel; | ||||
| 
 | ||||
| public class DirectSettingsViewModelFactory implements ViewModelProvider.Factory { | ||||
| 
 | ||||
|     private final Application application; | ||||
|     private final String threadId; | ||||
|     private final DirectThread backup; | ||||
|     private final boolean pending; | ||||
|     private final User currentUser; | ||||
| 
 | ||||
|     public DirectSettingsViewModelFactory(@NonNull final Application application, | ||||
|                                           @NonNull final String threadId, | ||||
|                                           @NonNull final DirectThread backup, | ||||
|                                           final boolean pending, | ||||
|                                           @NonNull final User currentUser) { | ||||
|         this.application = application; | ||||
|         this.threadId = threadId; | ||||
|         this.backup = backup; | ||||
|         this.pending = pending; | ||||
|         this.currentUser = currentUser; | ||||
|     } | ||||
| @ -30,6 +34,6 @@ public class DirectSettingsViewModelFactory implements ViewModelProvider.Factory | ||||
|     @Override | ||||
|     public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) { | ||||
|         //noinspection unchecked | ||||
|         return (T) new DirectSettingsViewModel(application, threadId, pending, currentUser); | ||||
|         return (T) new DirectSettingsViewModel(application, threadId, backup, pending, currentUser); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -7,21 +7,25 @@ import androidx.lifecycle.ViewModel; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| 
 | ||||
| import awais.instagrabber.repositories.responses.User; | ||||
| import awais.instagrabber.repositories.responses.directmessages.DirectThread; | ||||
| import awais.instagrabber.viewmodels.DirectThreadViewModel; | ||||
| 
 | ||||
| public class DirectThreadViewModelFactory implements ViewModelProvider.Factory { | ||||
| 
 | ||||
|     private final Application application; | ||||
|     private final String threadId; | ||||
|     private final DirectThread backup; | ||||
|     private final boolean pending; | ||||
|     private final User currentUser; | ||||
| 
 | ||||
|     public DirectThreadViewModelFactory(@NonNull final Application application, | ||||
|                                         @NonNull final String threadId, | ||||
|                                         final DirectThread backup, | ||||
|                                         final boolean pending, | ||||
|                                         @NonNull final User currentUser) { | ||||
|         this.application = application; | ||||
|         this.threadId = threadId; | ||||
|         this.backup = backup; | ||||
|         this.pending = pending; | ||||
|         this.currentUser = currentUser; | ||||
|     } | ||||
| @ -30,6 +34,6 @@ public class DirectThreadViewModelFactory implements ViewModelProvider.Factory { | ||||
|     @Override | ||||
|     public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) { | ||||
|         //noinspection unchecked | ||||
|         return (T) new DirectThreadViewModel(application, threadId, pending, currentUser); | ||||
|         return (T) new DirectThreadViewModel(application, threadId, backup, pending, currentUser); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -108,7 +108,7 @@ public class DirectMessagesService extends BaseService { | ||||
|                                                       final String cursor) { | ||||
|         final ImmutableMap.Builder<String, Object> queryMapBuilder = ImmutableMap.<String, Object>builder() | ||||
|                 .put("visual_message_return_type", "unseen") | ||||
|                 .put("limit", 10) | ||||
|                 .put("limit", 20) | ||||
|                 .put("direction", "older"); | ||||
|         if (!TextUtils.isEmpty(cursor)) { | ||||
|             queryMapBuilder.put("cursor", cursor); | ||||
|  | ||||
| @ -122,6 +122,10 @@ | ||||
|             android:name="pending" | ||||
|             android:defaultValue="false" | ||||
|             app:argType="boolean" /> | ||||
|         <argument | ||||
|             android:name="backup" | ||||
|             app:nullable="true" | ||||
|             app:argType="awais.instagrabber.repositories.responses.directmessages.DirectThread" /> | ||||
|         <action | ||||
|             android:id="@+id/action_thread_to_settings" | ||||
|             app:destination="@id/directMessagesSettingsFragment" /> | ||||
| @ -152,6 +156,11 @@ | ||||
|             android:defaultValue="false" | ||||
|             app:argType="boolean" /> | ||||
| 
 | ||||
|         <argument | ||||
|             android:name="backup" | ||||
|             app:nullable="true" | ||||
|             app:argType="awais.instagrabber.repositories.responses.directmessages.DirectThread" /> | ||||
| 
 | ||||
|         <action | ||||
|             android:id="@+id/action_settings_to_inbox" | ||||
|             app:destination="@id/directMessagesInboxFragment" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user