1
0
mirror of https://github.com/KokaKiwi/BarInsta synced 2024-11-26 08:37:29 +00:00

restore dm button on profiles

This commit is contained in:
Austin Huang 2021-03-16 20:04:53 -04:00
parent 9bf72b2781
commit a55def53c5
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
14 changed files with 58 additions and 42 deletions

View File

@ -71,6 +71,7 @@ import awais.instagrabber.interfaces.FetchListener;
import awais.instagrabber.models.IntentModel; import awais.instagrabber.models.IntentModel;
import awais.instagrabber.models.SuggestionModel; import awais.instagrabber.models.SuggestionModel;
import awais.instagrabber.models.enums.SuggestionType; import awais.instagrabber.models.enums.SuggestionType;
import awais.instagrabber.repositories.responses.directmessages.DirectThread;
import awais.instagrabber.services.ActivityCheckerService; import awais.instagrabber.services.ActivityCheckerService;
import awais.instagrabber.services.DMSyncAlarmReceiver; import awais.instagrabber.services.DMSyncAlarmReceiver;
import awais.instagrabber.utils.AppExecutors; import awais.instagrabber.utils.AppExecutors;
@ -573,10 +574,10 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
private void showThread(@NonNull final Intent intent) { private void showThread(@NonNull final Intent intent) {
final String threadId = intent.getStringExtra(Constants.DM_THREAD_ACTION_EXTRA_THREAD_ID); final String threadId = intent.getStringExtra(Constants.DM_THREAD_ACTION_EXTRA_THREAD_ID);
final String threadTitle = intent.getStringExtra(Constants.DM_THREAD_ACTION_EXTRA_THREAD_TITLE); 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; if (threadId == null || threadTitle == null) return;
currentNavControllerLiveData.observe(this, new Observer<NavController>() { currentNavControllerLiveData.observe(this, new Observer<NavController>() {
@Override @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 // need handler.post() to wait for the fragment manager to be ready to navigate
new Handler().post(() -> { new Handler().post(() -> {
final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections
.actionInboxToThread(threadId, threadTitle); .actionInboxToThread(threadId, threadTitle, backup);
navController.navigate(action); navController.navigate(action);
}); });
return; return;
@ -603,7 +604,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
@Nullable final Bundle arguments) { @Nullable final Bundle arguments) {
if (destination.getId() == R.id.directMessagesInboxFragment) { if (destination.getId() == R.id.directMessagesInboxFragment) {
final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections final DirectMessageInboxFragmentDirections.ActionInboxToThread action = DirectMessageInboxFragmentDirections
.actionInboxToThread(threadId, threadTitle); .actionInboxToThread(threadId, threadTitle, backup);
controller.navigate(action); controller.navigate(action);
controller.removeOnDestinationChangedListener(this); controller.removeOnDestinationChangedListener(this);
} }

View File

@ -254,7 +254,7 @@ public class DirectMessageInboxFragment extends Fragment implements SwipeRefresh
navigating = true; navigating = true;
if (isAdded()) { if (isAdded()) {
final DirectMessageInboxFragmentDirections.ActionInboxToThread directions = DirectMessageInboxFragmentDirections final DirectMessageInboxFragmentDirections.ActionInboxToThread directions = DirectMessageInboxFragmentDirections
.actionInboxToThread(thread.getThreadId(), thread.getThreadTitle()); .actionInboxToThread(thread.getThreadId(), thread.getThreadTitle(), thread);
NavHostFragment.findNavController(this).navigate(directions); NavHostFragment.findNavController(this).navigate(directions);
} }
navigating = false; navigating = false;

View File

@ -79,6 +79,7 @@ public class DirectMessageSettingsFragment extends Fragment implements ConfirmDi
final AppStateViewModel appStateViewModel = new ViewModelProvider(fragmentActivity).get(AppStateViewModel.class); final AppStateViewModel appStateViewModel = new ViewModelProvider(fragmentActivity).get(AppStateViewModel.class);
viewModel = new ViewModelProvider(this, new DirectSettingsViewModelFactory(fragmentActivity.getApplication(), viewModel = new ViewModelProvider(this, new DirectSettingsViewModelFactory(fragmentActivity.getApplication(),
args.getThreadId(), args.getThreadId(),
args.getBackup(),
args.getPending(), args.getPending(),
appStateViewModel.getCurrentUser())) appStateViewModel.getCurrentUser()))
.get(DirectSettingsViewModel.class); .get(DirectSettingsViewModel.class);

View File

@ -327,6 +327,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
final DirectMessageThreadFragmentArgs fragmentArgs = DirectMessageThreadFragmentArgs.fromBundle(arguments); final DirectMessageThreadFragmentArgs fragmentArgs = DirectMessageThreadFragmentArgs.fromBundle(arguments);
viewModel = new ViewModelProvider(this, new DirectThreadViewModelFactory(fragmentActivity.getApplication(), viewModel = new ViewModelProvider(this, new DirectThreadViewModelFactory(fragmentActivity.getApplication(),
fragmentArgs.getThreadId(), fragmentArgs.getThreadId(),
fragmentArgs.getBackup(),
fragmentArgs.getPending(), fragmentArgs.getPending(),
appStateViewModel.getCurrentUser())) appStateViewModel.getCurrentUser()))
.get(DirectThreadViewModel.class); .get(DirectThreadViewModel.class);
@ -376,7 +377,7 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
final int itemId = item.getItemId(); final int itemId = item.getItemId();
if (itemId == R.id.info) { if (itemId == R.id.info) {
final DirectMessageThreadFragmentDirections.ActionThreadToSettings directions = DirectMessageThreadFragmentDirections final DirectMessageThreadFragmentDirections.ActionThreadToSettings directions = DirectMessageThreadFragmentDirections
.actionThreadToSettings(viewModel.getThreadId(), null); .actionThreadToSettings(viewModel.getThreadId(), null, null);
final Boolean pending = viewModel.isPending().getValue(); final Boolean pending = viewModel.isPending().getValue();
directions.setPending(pending == null ? false : pending); directions.setPending(pending == null ? false : pending);
NavHostFragment.findNavController(this).navigate(directions); NavHostFragment.findNavController(this).navigate(directions);

View File

@ -163,7 +163,7 @@ public class DirectPendingInboxFragment extends Fragment implements SwipeRefresh
navigating = true; navigating = true;
if (isAdded()) { if (isAdded()) {
final DirectPendingInboxFragmentDirections.ActionPendingInboxToThread directions = DirectPendingInboxFragmentDirections final DirectPendingInboxFragmentDirections.ActionPendingInboxToThread directions = DirectPendingInboxFragmentDirections
.actionPendingInboxToThread(thread.getThreadId(), thread.getThreadTitle()); .actionPendingInboxToThread(thread.getThreadId(), thread.getThreadTitle(), thread);
directions.setPending(true); directions.setPending(true);
NavHostFragment.findNavController(this).navigate(directions); NavHostFragment.findNavController(this).navigate(directions);
} }

View File

@ -56,6 +56,7 @@ import awais.instagrabber.R;
import awais.instagrabber.activities.MainActivity; import awais.instagrabber.activities.MainActivity;
import awais.instagrabber.adapters.FeedAdapterV2; import awais.instagrabber.adapters.FeedAdapterV2;
import awais.instagrabber.adapters.HighlightsAdapter; import awais.instagrabber.adapters.HighlightsAdapter;
import awais.instagrabber.asyncs.CreateThreadAction;
import awais.instagrabber.asyncs.ProfileFetcher; import awais.instagrabber.asyncs.ProfileFetcher;
import awais.instagrabber.asyncs.ProfilePostFetchService; import awais.instagrabber.asyncs.ProfilePostFetchService;
import awais.instagrabber.asyncs.UsernameFetcher; 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) { private void setupButtons(final long profileId, final long myId) {
profileDetailsBinding.btnTagged.setVisibility(isReallyPrivate() ? View.GONE : View.VISIBLE); profileDetailsBinding.btnTagged.setVisibility(isReallyPrivate() ? View.GONE : View.VISIBLE);
profileDetailsBinding.btnDM.setVisibility(View.GONE); // temporary measure
if (isLoggedIn) { if (isLoggedIn) {
if (Objects.equals(profileId, myId)) { if (Objects.equals(profileId, myId)) {
profileDetailsBinding.btnTagged.setVisibility(View.VISIBLE); profileDetailsBinding.btnTagged.setVisibility(View.VISIBLE);
profileDetailsBinding.btnSaved.setVisibility(View.VISIBLE); profileDetailsBinding.btnSaved.setVisibility(View.VISIBLE);
profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE); profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE);
// profileDetailsBinding.btnDM.setVisibility(View.GONE); profileDetailsBinding.btnDM.setVisibility(View.GONE);
profileDetailsBinding.btnSaved.setText(R.string.saved); profileDetailsBinding.btnSaved.setText(R.string.saved);
return; return;
} }
profileDetailsBinding.btnSaved.setVisibility(View.GONE); profileDetailsBinding.btnSaved.setVisibility(View.GONE);
profileDetailsBinding.btnLiked.setVisibility(View.GONE); profileDetailsBinding.btnLiked.setVisibility(View.GONE);
// profileDetailsBinding.btnDM.setVisibility(View.VISIBLE); profileDetailsBinding.btnDM.setVisibility(View.VISIBLE);
profileDetailsBinding.btnFollow.setVisibility(View.VISIBLE); profileDetailsBinding.btnFollow.setVisibility(View.VISIBLE);
final Context context = getContext(); final Context context = getContext();
if (context == null) return; if (context == null) return;
@ -1081,27 +1081,18 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
PostItemType.TAGGED); PostItemType.TAGGED);
NavHostFragment.findNavController(this).navigate(action); NavHostFragment.findNavController(this).navigate(action);
}); });
// profileDetailsBinding.btnDM.setOnClickListener(v -> { profileDetailsBinding.btnDM.setOnClickListener(v -> {
// profileDetailsBinding.btnDM.setEnabled(false); profileDetailsBinding.btnDM.setEnabled(false);
// new CreateThreadAction(cookie, profileModel.getPk(), thread -> { new CreateThreadAction(cookie, profileModel.getPk(), thread -> {
// if (thread == null) { if (thread == null) {
// Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
// profileDetailsBinding.btnDM.setEnabled(true); profileDetailsBinding.btnDM.setEnabled(true);
// return; return;
// } }
// if (isAdded()) { fragmentActivity.navigateToThread(thread.getThreadId(), profileModel.getUsername(), thread);
// final Bundle bundle = new Bundle(); profileDetailsBinding.btnDM.setEnabled(true);
// bundle.putString("threadId", thread.getThreadId()); }).execute();
// 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.mainProfileImage.setOnClickListener(v -> { profileDetailsBinding.mainProfileImage.setOnClickListener(v -> {
if (!hasStories) { if (!hasStories) {
// show profile pic // show profile pic

View File

@ -74,8 +74,9 @@ public final class DirectMessagesManager {
public ThreadManager getThreadManager(@NonNull final String threadId, public ThreadManager getThreadManager(@NonNull final String threadId,
final boolean pending, final boolean pending,
final DirectThread backup,
@NonNull final User currentUser, @NonNull final User currentUser,
@NonNull final ContentResolver contentResolver) { @NonNull final ContentResolver contentResolver) {
return ThreadManager.getInstance(threadId, pending, currentUser, contentResolver); return ThreadManager.getInstance(threadId, pending, backup, currentUser, contentResolver);
} }
} }

View File

@ -122,6 +122,7 @@ public final class ThreadManager {
public static ThreadManager getInstance(@NonNull final String threadId, public static ThreadManager getInstance(@NonNull final String threadId,
final boolean pending, final boolean pending,
final DirectThread backup,
@NonNull final User currentUser, @NonNull final User currentUser,
@NonNull final ContentResolver contentResolver) { @NonNull final ContentResolver contentResolver) {
ThreadManager instance = INSTANCE_MAP.get(threadId); ThreadManager instance = INSTANCE_MAP.get(threadId);
@ -129,7 +130,7 @@ public final class ThreadManager {
synchronized (LOCK) { synchronized (LOCK) {
instance = INSTANCE_MAP.get(threadId); instance = INSTANCE_MAP.get(threadId);
if (instance == null) { if (instance == null) {
instance = new ThreadManager(threadId, pending, currentUser, contentResolver); instance = new ThreadManager(threadId, pending, backup, currentUser, contentResolver);
INSTANCE_MAP.put(threadId, instance); INSTANCE_MAP.put(threadId, instance);
} }
} }
@ -143,6 +144,7 @@ public final class ThreadManager {
private ThreadManager(@NonNull final String threadId, private ThreadManager(@NonNull final String threadId,
final boolean pending, final boolean pending,
final DirectThread backup,
@NonNull final User currentUser, @NonNull final User currentUser,
@NonNull final ContentResolver contentResolver) { @NonNull final ContentResolver contentResolver) {
final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance();
@ -161,17 +163,17 @@ public final class ThreadManager {
service = DirectMessagesService.getInstance(csrfToken, viewerId, deviceUuid); service = DirectMessagesService.getInstance(csrfToken, viewerId, deviceUuid);
mediaService = MediaService.getInstance(deviceUuid, csrfToken, viewerId); mediaService = MediaService.getInstance(deviceUuid, csrfToken, viewerId);
friendshipService = FriendshipService.getInstance(deviceUuid, csrfToken, viewerId); friendshipService = FriendshipService.getInstance(deviceUuid, csrfToken, viewerId);
setupTransformations(); setupTransformations(backup);
// fetchChats(); // fetchChats();
} }
public void moveFromPending() { public void moveFromPending() {
final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance();
this.inboxManager = messagesManager.getInboxManager(); this.inboxManager = messagesManager.getInboxManager();
setupTransformations(); setupTransformations(null);
} }
private void setupTransformations() { private void setupTransformations(final DirectThread backup) {
// Transformations // Transformations
thread = distinctUntilChanged(map(inboxManager.getInbox(), inboxResource -> { thread = distinctUntilChanged(map(inboxManager.getInbox(), inboxResource -> {
if (inboxResource == null) { if (inboxResource == null) {
@ -185,7 +187,7 @@ public final class ThreadManager {
final DirectThread thread = threads.stream() final DirectThread thread = threads.stream()
.filter(t -> t.getThreadId().equals(threadId)) .filter(t -> t.getThreadId().equals(threadId))
.findFirst() .findFirst()
.orElse(null); .orElse(backup);
if (thread != null) { if (thread != null) {
cursor = thread.getOldestCursor(); cursor = thread.getOldestCursor();
hasOlder = thread.hasOlder(); hasOlder = thread.hasOlder();

View File

@ -45,6 +45,7 @@ public class DirectSettingsViewModel extends AndroidViewModel {
public DirectSettingsViewModel(final Application application, public DirectSettingsViewModel(final Application application,
@NonNull final String threadId, @NonNull final String threadId,
final DirectThread backup,
final boolean pending, final boolean pending,
@NonNull final User currentUser) { @NonNull final User currentUser) {
super(application); super(application);
@ -58,7 +59,7 @@ public class DirectSettingsViewModel extends AndroidViewModel {
final ContentResolver contentResolver = application.getContentResolver(); final ContentResolver contentResolver = application.getContentResolver();
resources = getApplication().getResources(); resources = getApplication().getResources();
final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance();
threadManager = messagesManager.getThreadManager(threadId, pending, currentUser, contentResolver); threadManager = messagesManager.getThreadManager(threadId, pending, backup, currentUser, contentResolver);
} }
@NonNull @NonNull

View File

@ -53,6 +53,7 @@ public class DirectThreadViewModel extends AndroidViewModel {
public DirectThreadViewModel(@NonNull final Application application, public DirectThreadViewModel(@NonNull final Application application,
@NonNull final String threadId, @NonNull final String threadId,
final DirectThread backup,
final boolean pending, final boolean pending,
@NonNull final User currentUser) { @NonNull final User currentUser) {
super(application); super(application);
@ -69,7 +70,7 @@ public class DirectThreadViewModel extends AndroidViewModel {
contentResolver = application.getContentResolver(); contentResolver = application.getContentResolver();
recordingsDir = DirectoryUtils.getOutputMediaDirectory(application, "Recordings"); recordingsDir = DirectoryUtils.getOutputMediaDirectory(application, "Recordings");
final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance(); final DirectMessagesManager messagesManager = DirectMessagesManager.getInstance();
threadManager = messagesManager.getThreadManager(threadId, pending, currentUser, contentResolver); threadManager = messagesManager.getThreadManager(threadId, pending, backup, currentUser, contentResolver);
threadManager.fetchPendingRequests(); threadManager.fetchPendingRequests();
} }

View File

@ -7,21 +7,25 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import awais.instagrabber.repositories.responses.User; import awais.instagrabber.repositories.responses.User;
import awais.instagrabber.repositories.responses.directmessages.DirectThread;
import awais.instagrabber.viewmodels.DirectSettingsViewModel; import awais.instagrabber.viewmodels.DirectSettingsViewModel;
public class DirectSettingsViewModelFactory implements ViewModelProvider.Factory { public class DirectSettingsViewModelFactory implements ViewModelProvider.Factory {
private final Application application; private final Application application;
private final String threadId; private final String threadId;
private final DirectThread backup;
private final boolean pending; private final boolean pending;
private final User currentUser; private final User currentUser;
public DirectSettingsViewModelFactory(@NonNull final Application application, public DirectSettingsViewModelFactory(@NonNull final Application application,
@NonNull final String threadId, @NonNull final String threadId,
@NonNull final DirectThread backup,
final boolean pending, final boolean pending,
@NonNull final User currentUser) { @NonNull final User currentUser) {
this.application = application; this.application = application;
this.threadId = threadId; this.threadId = threadId;
this.backup = backup;
this.pending = pending; this.pending = pending;
this.currentUser = currentUser; this.currentUser = currentUser;
} }
@ -30,6 +34,6 @@ public class DirectSettingsViewModelFactory implements ViewModelProvider.Factory
@Override @Override
public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) { public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) {
//noinspection unchecked //noinspection unchecked
return (T) new DirectSettingsViewModel(application, threadId, pending, currentUser); return (T) new DirectSettingsViewModel(application, threadId, backup, pending, currentUser);
} }
} }

View File

@ -7,21 +7,25 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import awais.instagrabber.repositories.responses.User; import awais.instagrabber.repositories.responses.User;
import awais.instagrabber.repositories.responses.directmessages.DirectThread;
import awais.instagrabber.viewmodels.DirectThreadViewModel; import awais.instagrabber.viewmodels.DirectThreadViewModel;
public class DirectThreadViewModelFactory implements ViewModelProvider.Factory { public class DirectThreadViewModelFactory implements ViewModelProvider.Factory {
private final Application application; private final Application application;
private final String threadId; private final String threadId;
private final DirectThread backup;
private final boolean pending; private final boolean pending;
private final User currentUser; private final User currentUser;
public DirectThreadViewModelFactory(@NonNull final Application application, public DirectThreadViewModelFactory(@NonNull final Application application,
@NonNull final String threadId, @NonNull final String threadId,
final DirectThread backup,
final boolean pending, final boolean pending,
@NonNull final User currentUser) { @NonNull final User currentUser) {
this.application = application; this.application = application;
this.threadId = threadId; this.threadId = threadId;
this.backup = backup;
this.pending = pending; this.pending = pending;
this.currentUser = currentUser; this.currentUser = currentUser;
} }
@ -30,6 +34,6 @@ public class DirectThreadViewModelFactory implements ViewModelProvider.Factory {
@Override @Override
public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) { public <T extends ViewModel> T create(@NonNull final Class<T> modelClass) {
//noinspection unchecked //noinspection unchecked
return (T) new DirectThreadViewModel(application, threadId, pending, currentUser); return (T) new DirectThreadViewModel(application, threadId, backup, pending, currentUser);
} }
} }

View File

@ -108,7 +108,7 @@ public class DirectMessagesService extends BaseService {
final String cursor) { final String cursor) {
final ImmutableMap.Builder<String, Object> queryMapBuilder = ImmutableMap.<String, Object>builder() final ImmutableMap.Builder<String, Object> queryMapBuilder = ImmutableMap.<String, Object>builder()
.put("visual_message_return_type", "unseen") .put("visual_message_return_type", "unseen")
.put("limit", 10) .put("limit", 20)
.put("direction", "older"); .put("direction", "older");
if (!TextUtils.isEmpty(cursor)) { if (!TextUtils.isEmpty(cursor)) {
queryMapBuilder.put("cursor", cursor); queryMapBuilder.put("cursor", cursor);

View File

@ -122,6 +122,10 @@
android:name="pending" android:name="pending"
android:defaultValue="false" android:defaultValue="false"
app:argType="boolean" /> app:argType="boolean" />
<argument
android:name="backup"
app:nullable="true"
app:argType="awais.instagrabber.repositories.responses.directmessages.DirectThread" />
<action <action
android:id="@+id/action_thread_to_settings" android:id="@+id/action_thread_to_settings"
app:destination="@id/directMessagesSettingsFragment" /> app:destination="@id/directMessagesSettingsFragment" />
@ -152,6 +156,11 @@
android:defaultValue="false" android:defaultValue="false"
app:argType="boolean" /> app:argType="boolean" />
<argument
android:name="backup"
app:nullable="true"
app:argType="awais.instagrabber.repositories.responses.directmessages.DirectThread" />
<action <action
android:id="@+id/action_settings_to_inbox" android:id="@+id/action_settings_to_inbox"
app:destination="@id/directMessagesInboxFragment" app:destination="@id/directMessagesInboxFragment"