mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-12-22 21:16:57 +00:00
Merge branch 'master' into pr/925
This commit is contained in:
commit
f55e519895
@ -130,6 +130,9 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activities.MainActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".utils.ProcessPhoenix"
|
||||
android:theme="@style/Theme.AppCompat.Translucent" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
|
@ -12,7 +12,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import java.util.Collections;
|
||||
@ -25,8 +24,10 @@ import awais.instagrabber.db.datasources.AccountDataSource;
|
||||
import awais.instagrabber.db.entities.Account;
|
||||
import awais.instagrabber.db.repositories.AccountRepository;
|
||||
import awais.instagrabber.db.repositories.RepositoryCallback;
|
||||
import awais.instagrabber.utils.AppExecutors;
|
||||
import awais.instagrabber.utils.Constants;
|
||||
import awais.instagrabber.utils.CookieUtils;
|
||||
import awais.instagrabber.utils.ProcessPhoenix;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
import awais.instagrabber.utils.Utils;
|
||||
|
||||
@ -55,9 +56,14 @@ public class AccountSwitcherDialogFragment extends DialogFragment {
|
||||
}
|
||||
CookieUtils.setupCookies(model.getCookie());
|
||||
settingsHelper.putString(Constants.COOKIE, model.getCookie());
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity != null) activity.recreate();
|
||||
dismiss();
|
||||
// final FragmentActivity activity = getActivity();
|
||||
// if (activity != null) activity.recreate();
|
||||
// dismiss();
|
||||
AppExecutors.getInstance().mainThread().execute(() -> {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
ProcessPhoenix.triggerRebirth(context);
|
||||
}, 200);
|
||||
};
|
||||
|
||||
private final AccountSwitcherAdapter.OnAccountLongClickListener accountLongClickListener = (model, isCurrent) -> {
|
||||
|
@ -78,8 +78,7 @@ public final class NotificationsViewerFragment extends Fragment implements Swipe
|
||||
try {
|
||||
binding.swipeRefreshLayout.setRefreshing(false);
|
||||
Toast.makeText(getContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
catch(Throwable e) {}
|
||||
} catch (Throwable ignored) {}
|
||||
}
|
||||
};
|
||||
|
||||
@ -92,10 +91,10 @@ public final class NotificationsViewerFragment extends Fragment implements Swipe
|
||||
@Override
|
||||
public void onPreviewClick(final Notification model) {
|
||||
final NotificationImage notificationImage = model.getArgs().getMedia().get(0);
|
||||
final long mediaId = Long.valueOf(notificationImage.getId().split("_")[0]);
|
||||
final long mediaId = Long.parseLong(notificationImage.getId().split("_")[0]);
|
||||
if (model.getType() == NotificationType.RESPONDED_STORY) {
|
||||
final NavDirections action = NotificationsViewerFragmentDirections
|
||||
.actionNotificationsViewerFragmentToStoryViewerFragment(
|
||||
.actionNotificationsToStory(
|
||||
StoryViewerOptions.forStory(
|
||||
mediaId,
|
||||
model.getArgs().getUsername()));
|
||||
@ -277,8 +276,7 @@ public final class NotificationsViewerFragment extends Fragment implements Swipe
|
||||
}
|
||||
|
||||
private void openProfile(final String username) {
|
||||
final NavDirections action = NotificationsViewerFragmentDirections
|
||||
.actionGlobalProfileFragment("@" + username);
|
||||
final NavDirections action = NotificationsViewerFragmentDirections.actionGlobalProfileFragment("@" + username);
|
||||
NavHostFragment.findNavController(this).navigate(action);
|
||||
}
|
||||
}
|
@ -137,14 +137,14 @@ public class StoryViewerFragment extends Fragment {
|
||||
private String[] mentions;
|
||||
private QuizModel quiz;
|
||||
private SliderModel slider;
|
||||
private MenuItem menuDownload;
|
||||
private MenuItem menuDm;
|
||||
private MenuItem menuDownload, menuDm, menuProfile;
|
||||
private SimpleExoPlayer player;
|
||||
// private boolean isHashtag;
|
||||
// private boolean isLoc;
|
||||
// private String highlight;
|
||||
private String actionBarTitle;
|
||||
private String actionBarTitle, actionBarSubtitle;
|
||||
private boolean fetching = false, sticking = false, shouldRefresh = true;
|
||||
private boolean downloadVisible = false, dmVisible = false, profileVisible = true;
|
||||
private int currentFeedStoryIndex;
|
||||
private double sliderValue;
|
||||
private StoriesViewModel storiesViewModel;
|
||||
@ -195,8 +195,10 @@ public class StoryViewerFragment extends Fragment {
|
||||
menuInflater.inflate(R.menu.story_menu, menu);
|
||||
menuDownload = menu.findItem(R.id.action_download);
|
||||
menuDm = menu.findItem(R.id.action_dms);
|
||||
menuDownload.setVisible(false);
|
||||
menuDm.setVisible(false);
|
||||
menuProfile = menu.findItem(R.id.action_profile);
|
||||
menuDownload.setVisible(downloadVisible);
|
||||
menuDm.setVisible(dmVisible);
|
||||
menuProfile.setVisible(profileVisible);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -215,7 +217,8 @@ public class StoryViewerFragment extends Fragment {
|
||||
else
|
||||
ActivityCompat.requestPermissions(requireActivity(), DownloadUtils.PERMS, 8020);
|
||||
return true;
|
||||
} else if (itemId == R.id.action_dms) {
|
||||
}
|
||||
if (itemId == R.id.action_dms) {
|
||||
final EditText input = new EditText(context);
|
||||
input.setHint(R.string.reply_hint);
|
||||
new AlertDialog.Builder(context)
|
||||
@ -259,6 +262,9 @@ public class StoryViewerFragment extends Fragment {
|
||||
.show();
|
||||
return true;
|
||||
}
|
||||
if (itemId == R.id.action_profile) {
|
||||
openProfile("@" + currentStory.getUsername());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -281,7 +287,9 @@ public class StoryViewerFragment extends Fragment {
|
||||
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setTitle(actionBarTitle);
|
||||
actionBar.setSubtitle(actionBarSubtitle);
|
||||
}
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -697,6 +705,10 @@ public class StoryViewerFragment extends Fragment {
|
||||
lastSlidePos = 0;
|
||||
if (menuDownload != null) menuDownload.setVisible(false);
|
||||
if (menuDm != null) menuDm.setVisible(false);
|
||||
if (menuProfile != null) menuProfile.setVisible(false);
|
||||
downloadVisible = false;
|
||||
dmVisible = false;
|
||||
profileVisible = false;
|
||||
binding.imageViewer.setController(null);
|
||||
releasePlayer();
|
||||
String currentStoryMediaId = null;
|
||||
@ -846,7 +858,6 @@ public class StoryViewerFragment extends Fragment {
|
||||
|
||||
final MediaItemType itemType = currentStory.getItemType();
|
||||
|
||||
if (menuDownload != null) menuDownload.setVisible(false);
|
||||
url = itemType == MediaItemType.MEDIA_TYPE_IMAGE ? currentStory.getStoryUrl() : currentStory.getVideoUrl();
|
||||
|
||||
if (itemType != MediaItemType.MEDIA_TYPE_LIVE) {
|
||||
@ -900,9 +911,10 @@ public class StoryViewerFragment extends Fragment {
|
||||
else setupImage();
|
||||
|
||||
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
||||
actionBarSubtitle = Utils.datetimeParser.format(new Date(currentStory.getTimestamp() * 1000L));
|
||||
if (actionBar != null) {
|
||||
try {
|
||||
actionBar.setSubtitle(Utils.datetimeParser.format(new Date(currentStory.getTimestamp() * 1000L)));
|
||||
actionBar.setSubtitle(actionBarSubtitle);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "refreshStory: ", e);
|
||||
}
|
||||
@ -948,11 +960,17 @@ public class StoryViewerFragment extends Fragment {
|
||||
final ImageInfo imageInfo,
|
||||
final Animatable animatable) {
|
||||
if (menuDownload != null) {
|
||||
downloadVisible = true;
|
||||
menuDownload.setVisible(true);
|
||||
}
|
||||
if (currentStory.canReply() && menuDm != null) {
|
||||
dmVisible = true;
|
||||
menuDm.setVisible(true);
|
||||
}
|
||||
if (!TextUtils.isEmpty(currentStory.getUsername())) {
|
||||
profileVisible = true;
|
||||
menuProfile.setVisible(true);
|
||||
}
|
||||
binding.progressView.setVisibility(View.GONE);
|
||||
}
|
||||
})
|
||||
@ -982,9 +1000,18 @@ public class StoryViewerFragment extends Fragment {
|
||||
@Nullable final MediaSource.MediaPeriodId mediaPeriodId,
|
||||
@NonNull final LoadEventInfo loadEventInfo,
|
||||
@NonNull final MediaLoadData mediaLoadData) {
|
||||
if (menuDownload != null) menuDownload.setVisible(true);
|
||||
if (currentStory.canReply() && menuDm != null)
|
||||
if (menuDownload != null) {
|
||||
downloadVisible = true;
|
||||
menuDownload.setVisible(true);
|
||||
}
|
||||
if (currentStory.canReply() && menuDm != null) {
|
||||
dmVisible = true;
|
||||
menuDm.setVisible(true);
|
||||
}
|
||||
if (!TextUtils.isEmpty(currentStory.getUsername()) && menuProfile != null) {
|
||||
profileVisible = true;
|
||||
menuProfile.setVisible(true);
|
||||
}
|
||||
binding.progressView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@ -993,9 +1020,18 @@ public class StoryViewerFragment extends Fragment {
|
||||
@Nullable final MediaSource.MediaPeriodId mediaPeriodId,
|
||||
@NonNull final LoadEventInfo loadEventInfo,
|
||||
@NonNull final MediaLoadData mediaLoadData) {
|
||||
if (menuDownload != null) menuDownload.setVisible(true);
|
||||
if (currentStory.canReply() && menuDm != null)
|
||||
if (menuDownload != null) {
|
||||
downloadVisible = true;
|
||||
menuDownload.setVisible(true);
|
||||
}
|
||||
if (currentStory.canReply() && menuDm != null) {
|
||||
dmVisible = true;
|
||||
menuDm.setVisible(true);
|
||||
}
|
||||
if (!TextUtils.isEmpty(currentStory.getUsername()) && menuProfile != null) {
|
||||
profileVisible = true;
|
||||
menuProfile.setVisible(true);
|
||||
}
|
||||
binding.progressView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@ -1014,8 +1050,18 @@ public class StoryViewerFragment extends Fragment {
|
||||
@NonNull final MediaLoadData mediaLoadData,
|
||||
@NonNull final IOException error,
|
||||
final boolean wasCanceled) {
|
||||
if (menuDownload != null) menuDownload.setVisible(false);
|
||||
if (menuDm != null) menuDm.setVisible(false);
|
||||
if (menuDownload != null) {
|
||||
downloadVisible = false;
|
||||
menuDownload.setVisible(false);
|
||||
}
|
||||
if (menuDm != null) {
|
||||
dmVisible = false;
|
||||
menuDm.setVisible(false);
|
||||
}
|
||||
if (menuProfile != null) {
|
||||
profileVisible = false;
|
||||
menuProfile.setVisible(false);
|
||||
}
|
||||
binding.progressView.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
|
@ -83,9 +83,12 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
||||
new FeedStoriesAdapter.OnFeedStoryClickListener() {
|
||||
@Override
|
||||
public void onFeedStoryClick(FeedStoryModel model, int position) {
|
||||
final NavDirections action = FeedFragmentDirections
|
||||
.actionFeedFragmentToStoryViewerFragment(StoryViewerOptions.forFeedStoryPosition(position));
|
||||
NavHostFragment.findNavController(FeedFragment.this).navigate(action);
|
||||
final NavController navController = NavHostFragment.findNavController(FeedFragment.this);
|
||||
if (isSafeToNavigate(navController)) {
|
||||
final NavDirections action = FeedFragmentDirections
|
||||
.actionFeedFragmentToStoryViewerFragment(StoryViewerOptions.forFeedStoryPosition(position));
|
||||
navController.navigate(action);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -437,4 +440,9 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
||||
binding.feedRecyclerView.smoothScrollToPosition(0);
|
||||
// binding.storiesContainer.setExpanded(true);
|
||||
}
|
||||
|
||||
private boolean isSafeToNavigate(final NavController navController) {
|
||||
return navController.getCurrentDestination() != null
|
||||
&& navController.getCurrentDestination().getId() == R.id.feedFragment;
|
||||
}
|
||||
}
|
||||
|
@ -11,8 +11,6 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.navigation.NavController;
|
||||
import androidx.navigation.NavDirections;
|
||||
@ -35,9 +33,11 @@ import awais.instagrabber.db.repositories.AccountRepository;
|
||||
import awais.instagrabber.db.repositories.RepositoryCallback;
|
||||
import awais.instagrabber.dialogs.AccountSwitcherDialogFragment;
|
||||
import awais.instagrabber.repositories.responses.User;
|
||||
import awais.instagrabber.utils.AppExecutors;
|
||||
import awais.instagrabber.utils.Constants;
|
||||
import awais.instagrabber.utils.CookieUtils;
|
||||
import awais.instagrabber.utils.FlavorTown;
|
||||
import awais.instagrabber.utils.ProcessPhoenix;
|
||||
import awais.instagrabber.utils.TextUtils;
|
||||
import awais.instagrabber.utils.Utils;
|
||||
import awais.instagrabber.webservices.ServiceCallback;
|
||||
@ -71,11 +71,15 @@ public class MorePreferencesFragment extends BasePreferencesFragment {
|
||||
accountCategory.setSummary(R.string.account_hint);
|
||||
accountCategory.addPreference(getAccountSwitcherPreference(cookie, context));
|
||||
accountCategory.addPreference(getPreference(R.string.logout, R.string.logout_summary, R.drawable.ic_logout_24, preference -> {
|
||||
if (getContext() == null) return false;
|
||||
final Context context1 = getContext();
|
||||
if (context1 == null) return false;
|
||||
CookieUtils.setupCookies("LOGOUT");
|
||||
shouldRecreate();
|
||||
Toast.makeText(context, R.string.logout_success, Toast.LENGTH_SHORT).show();
|
||||
// shouldRecreate();
|
||||
Toast.makeText(context1, R.string.logout_success, Toast.LENGTH_SHORT).show();
|
||||
settingsHelper.putString(Constants.COOKIE, "");
|
||||
AppExecutors.getInstance().mainThread().execute(() -> {
|
||||
ProcessPhoenix.triggerRebirth(context1);
|
||||
}, 200);
|
||||
return true;
|
||||
}));
|
||||
}
|
||||
@ -103,9 +107,14 @@ public class MorePreferencesFragment extends BasePreferencesFragment {
|
||||
CookieUtils.removeAllAccounts(context, new RepositoryCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(final Void result) {
|
||||
shouldRecreate();
|
||||
Toast.makeText(context, R.string.logout_success, Toast.LENGTH_SHORT).show();
|
||||
// shouldRecreate();
|
||||
final Context context1 = getContext();
|
||||
if (context1 == null) return;
|
||||
Toast.makeText(context1, R.string.logout_success, Toast.LENGTH_SHORT).show();
|
||||
settingsHelper.putString(Constants.COOKIE, "");
|
||||
AppExecutors.getInstance().mainThread().execute(() -> {
|
||||
ProcessPhoenix.triggerRebirth(context1);
|
||||
}, 200);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -265,9 +274,14 @@ public class MorePreferencesFragment extends BasePreferencesFragment {
|
||||
new RepositoryCallback<Account>() {
|
||||
@Override
|
||||
public void onSuccess(final Account result) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
if (activity == null) return;
|
||||
activity.recreate();
|
||||
// final FragmentActivity activity = getActivity();
|
||||
// if (activity == null) return;
|
||||
// activity.recreate();
|
||||
AppExecutors.getInstance().mainThread().execute(() -> {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
ProcessPhoenix.triggerRebirth(context);
|
||||
}, 200);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
111
app/src/main/java/awais/instagrabber/utils/ProcessPhoenix.java
Normal file
111
app/src/main/java/awais/instagrabber/utils/ProcessPhoenix.java
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Jake Wharton
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package awais.instagrabber.utils;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Process;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
|
||||
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
||||
|
||||
/**
|
||||
* Process Phoenix facilitates restarting your application process. This should only be used for
|
||||
* things like fundamental state changes in your debug builds (e.g., changing from staging to
|
||||
* production).
|
||||
* <p>
|
||||
* Trigger process recreation by calling {@link #triggerRebirth} with a {@link Context} instance.
|
||||
*/
|
||||
public final class ProcessPhoenix extends Activity {
|
||||
private static final String KEY_RESTART_INTENTS = "phoenix_restart_intents";
|
||||
|
||||
/**
|
||||
* Call to restart the application process using the {@linkplain Intent#CATEGORY_DEFAULT default}
|
||||
* activity as an intent.
|
||||
* <p>
|
||||
* Behavior of the current process after invoking this method is undefined.
|
||||
*/
|
||||
public static void triggerRebirth(Context context) {
|
||||
triggerRebirth(context, getRestartIntent(context));
|
||||
}
|
||||
|
||||
/**
|
||||
* Call to restart the application process using the specified intents.
|
||||
* <p>
|
||||
* Behavior of the current process after invoking this method is undefined.
|
||||
*/
|
||||
public static void triggerRebirth(Context context, Intent... nextIntents) {
|
||||
Intent intent = new Intent(context, ProcessPhoenix.class);
|
||||
intent.addFlags(FLAG_ACTIVITY_NEW_TASK); // In case we are called with non-Activity context.
|
||||
intent.putParcelableArrayListExtra(KEY_RESTART_INTENTS, new ArrayList<>(Arrays.asList(nextIntents)));
|
||||
context.startActivity(intent);
|
||||
if (context instanceof Activity) {
|
||||
((Activity) context).finish();
|
||||
}
|
||||
Runtime.getRuntime().exit(0); // Kill kill kill!
|
||||
}
|
||||
|
||||
private static Intent getRestartIntent(Context context) {
|
||||
String packageName = context.getPackageName();
|
||||
Intent defaultIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
|
||||
if (defaultIntent != null) {
|
||||
defaultIntent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
|
||||
return defaultIntent;
|
||||
}
|
||||
|
||||
throw new IllegalStateException("Unable to determine default activity for "
|
||||
+ packageName
|
||||
+ ". Does an activity specify the DEFAULT category in its intent filter?");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
ArrayList<Intent> intents = getIntent().getParcelableArrayListExtra(KEY_RESTART_INTENTS);
|
||||
startActivities(intents.toArray(new Intent[intents.size()]));
|
||||
finish();
|
||||
Runtime.getRuntime().exit(0); // Kill kill kill!
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the current process is a temporary Phoenix Process.
|
||||
* This can be used to avoid initialisation of unused resources or to prevent running code that
|
||||
* is not multi-process ready.
|
||||
*
|
||||
* @return true if the current process is a temporary Phoenix Process
|
||||
*/
|
||||
public static boolean isPhoenixProcess(Context context) {
|
||||
int currentPid = Process.myPid();
|
||||
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
|
||||
List<ActivityManager.RunningAppProcessInfo> runningProcesses = manager.getRunningAppProcesses();
|
||||
if (runningProcesses != null) {
|
||||
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
|
||||
if (processInfo.pid == currentPid && processInfo.processName.endsWith(":phoenix")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -31,7 +31,6 @@ import android.webkit.MimeTypeMap;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
@ -474,7 +473,11 @@ public final class Utils {
|
||||
final List<String> navGraphNameList = Arrays.asList(navGraphNames);
|
||||
if (TextUtils.isEmpty(tabOrderString)) {
|
||||
// Use top 5 entries for default list
|
||||
return navGraphNameList.subList(0, 5);
|
||||
final List<String> top5navGraphNames = navGraphNameList.subList(0, 5);
|
||||
final String newOrderString = android.text.TextUtils.join(",", top5navGraphNames);
|
||||
Utils.settingsHelper.putString(PreferenceKeys.PREF_TAB_ORDER, newOrderString);
|
||||
tabOrderString = newOrderString;
|
||||
return top5navGraphNames;
|
||||
}
|
||||
// Make sure that the list from preference does not contain any invalid values
|
||||
final List<String> orderGraphNames = Arrays.stream(tabOrderString.split(","))
|
||||
@ -489,6 +492,7 @@ public final class Utils {
|
||||
}
|
||||
|
||||
public static boolean isNavRootInCurrentTabs(final String navRootString) {
|
||||
if (navRootString == null || tabOrderString == null) return false;
|
||||
return tabOrderString.contains(navRootString);
|
||||
}
|
||||
}
|
||||
|
@ -56,9 +56,11 @@ public class NewsService extends BaseService {
|
||||
callback.onSuccess(null);
|
||||
return;
|
||||
}
|
||||
final List<Notification> result = new ArrayList<>();
|
||||
result.addAll(body.getNewStories());
|
||||
result.addAll(body.getOldStories());
|
||||
final List<Notification> result = new ArrayList<Notification>();
|
||||
final List<Notification> newStories = body.getNewStories();
|
||||
if (newStories != null) result.addAll(newStories);
|
||||
final List<Notification> oldStories = body.getOldStories();
|
||||
if (oldStories != null) result.addAll(oldStories);
|
||||
callback.onSuccess(result);
|
||||
}
|
||||
|
||||
|
@ -326,6 +326,7 @@
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/highlights_barrier"
|
||||
android:layout_width="wrap_content"
|
||||
app:constraint_referenced_ids="mainPostCount, mainFollowers, mainFollowing"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="bottom" />
|
||||
|
||||
|
@ -5,13 +5,18 @@
|
||||
<item
|
||||
android:id="@+id/action_dms"
|
||||
android:icon="@drawable/ic_round_send_24"
|
||||
android:title="@string/action_dms"
|
||||
android:titleCondensed="@string/action_dms"
|
||||
app:showAsAction="always" />
|
||||
android:title="@string/reply_story"
|
||||
android:titleCondensed="@string/reply_story"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_profile"
|
||||
android:title="@string/open_profile"
|
||||
android:titleCondensed="@string/open_profile"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:icon="@drawable/ic_download"
|
||||
android:title="@string/action_download"
|
||||
android:titleCondensed="@string/action_download"
|
||||
app:showAsAction="always" />
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
@ -5,25 +5,6 @@
|
||||
android:id="@+id/notification_viewer_nav_graph"
|
||||
app:startDestination="@id/notificationsViewer">
|
||||
|
||||
<fragment
|
||||
android:id="@+id/notificationsViewer"
|
||||
android:name="awais.instagrabber.fragments.NotificationsViewerFragment"
|
||||
android:label="@string/title_notifications"
|
||||
tools:layout="@layout/fragment_notifications_viewer">
|
||||
<argument
|
||||
android:name="type"
|
||||
app:argType="string"
|
||||
app:nullable="false"
|
||||
android:defaultValue="notif"/>
|
||||
<argument
|
||||
android:name="targetId"
|
||||
android:defaultValue="0L"
|
||||
app:argType="long" />
|
||||
<action
|
||||
android:id="@+id/action_notificationsViewerFragment_to_storyViewerFragment"
|
||||
app:destination="@id/storyViewerFragment" />
|
||||
</fragment>
|
||||
|
||||
<include app:graph="@navigation/profile_nav_graph" />
|
||||
|
||||
<action
|
||||
@ -100,4 +81,23 @@
|
||||
android:name="options"
|
||||
app:argType="awais.instagrabber.repositories.requests.StoryViewerOptions" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/notificationsViewer"
|
||||
android:name="awais.instagrabber.fragments.NotificationsViewerFragment"
|
||||
android:label="@string/title_notifications"
|
||||
tools:layout="@layout/fragment_notifications_viewer">
|
||||
<argument
|
||||
android:name="type"
|
||||
app:argType="string"
|
||||
app:nullable="false"
|
||||
android:defaultValue="notif"/>
|
||||
<argument
|
||||
android:name="targetId"
|
||||
android:defaultValue="0L"
|
||||
app:argType="long" />
|
||||
<action
|
||||
android:id="@+id/action_notifications_to_story"
|
||||
app:destination="@id/storyViewerFragment" />
|
||||
</fragment>
|
||||
</navigation>
|
@ -1 +0,0 @@
|
||||
{}
|
@ -1 +0,0 @@
|
||||
{}
|
Loading…
Reference in New Issue
Block a user