saf cleanup, close #1439
This commit is contained in:
parent
96fd8de879
commit
ad69f7d382
@ -66,8 +66,6 @@ import awais.instagrabber.webservices.ServiceCallback;
|
|||||||
|
|
||||||
public class CollectionPostsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class CollectionPostsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = "CollectionPostsFragment";
|
private static final String TAG = "CollectionPostsFragment";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentCollectionPostsBinding binding;
|
private FragmentCollectionPostsBinding binding;
|
||||||
@ -76,8 +74,6 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay
|
|||||||
private SavedCollection savedCollection;
|
private SavedCollection savedCollection;
|
||||||
private ActionMode actionMode;
|
private ActionMode actionMode;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private CollectionService collectionService;
|
private CollectionService collectionService;
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_SAVED_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_SAVED_POSTS_LAYOUT);
|
||||||
private MenuItem deleteMenu, editMenu;
|
private MenuItem deleteMenu, editMenu;
|
||||||
@ -102,12 +98,8 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay
|
|||||||
if (CollectionPostsFragment.this.selectedFeedModels == null) return false;
|
if (CollectionPostsFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(CollectionPostsFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(CollectionPostsFragment.this.selectedFeedModels));
|
||||||
binding.posts.endSelection();
|
binding.posts.endSelection();
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -137,13 +129,7 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// downloadFeedModel = feedModel;
|
|
||||||
// downloadChildPosition = -1;
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -375,25 +361,6 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay
|
|||||||
resetToolbar();
|
resetToolbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.posts.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resetToolbar() {
|
private void resetToolbar() {
|
||||||
fragmentActivity.resetToolbar();
|
fragmentActivity.resetToolbar();
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout;
|
import androidx.constraintlayout.motion.widget.MotionLayout;
|
||||||
import androidx.constraintlayout.motion.widget.MotionScene;
|
import androidx.constraintlayout.motion.widget.MotionScene;
|
||||||
import androidx.core.content.PermissionChecker;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.NavDirections;
|
import androidx.navigation.NavDirections;
|
||||||
@ -72,14 +71,10 @@ import awais.instagrabber.webservices.StoriesRepository;
|
|||||||
import awais.instagrabber.webservices.TagsService;
|
import awais.instagrabber.webservices.TagsService;
|
||||||
import kotlinx.coroutines.Dispatchers;
|
import kotlinx.coroutines.Dispatchers;
|
||||||
|
|
||||||
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
|
||||||
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
|
||||||
import static awais.instagrabber.utils.Utils.settingsHelper;
|
import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||||
|
|
||||||
public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = "HashTagFragment";
|
private static final String TAG = "HashTagFragment";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
public static final String ARG_HASHTAG = "hashtag";
|
public static final String ARG_HASHTAG = "hashtag";
|
||||||
|
|
||||||
@ -98,8 +93,6 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private GraphQLRepository graphQLRepository;
|
private GraphQLRepository graphQLRepository;
|
||||||
private boolean storiesFetching;
|
private boolean storiesFetching;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_HASHTAG_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_HASHTAG_POSTS_LAYOUT);
|
||||||
private LayoutHashtagDetailsBinding hashtagDetailsBinding;
|
private LayoutHashtagDetailsBinding hashtagDetailsBinding;
|
||||||
|
|
||||||
@ -123,14 +116,10 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
if (HashTagFragment.this.selectedFeedModels == null) return false;
|
if (HashTagFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(HashTagFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(HashTagFragment.this.selectedFeedModels));
|
||||||
binding.posts.endSelection();
|
binding.posts.endSelection();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -159,13 +148,7 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
return;
|
|
||||||
}
|
|
||||||
downloadFeedModel = feedModel;
|
|
||||||
downloadChildPosition = childPosition;
|
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -349,25 +332,6 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.posts.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (getArguments() == null) return;
|
if (getArguments() == null) return;
|
||||||
final HashTagFragmentArgs fragmentArgs = HashTagFragmentArgs.fromBundle(getArguments());
|
final HashTagFragmentArgs fragmentArgs = HashTagFragmentArgs.fromBundle(getArguments());
|
||||||
|
@ -24,7 +24,6 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout;
|
import androidx.constraintlayout.motion.widget.MotionLayout;
|
||||||
import androidx.constraintlayout.motion.widget.MotionScene;
|
import androidx.constraintlayout.motion.widget.MotionScene;
|
||||||
import androidx.core.content.PermissionChecker;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.NavDirections;
|
import androidx.navigation.NavDirections;
|
||||||
@ -68,14 +67,10 @@ import awais.instagrabber.webservices.ServiceCallback;
|
|||||||
import awais.instagrabber.webservices.StoriesRepository;
|
import awais.instagrabber.webservices.StoriesRepository;
|
||||||
import kotlinx.coroutines.Dispatchers;
|
import kotlinx.coroutines.Dispatchers;
|
||||||
|
|
||||||
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
|
||||||
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
|
||||||
import static awais.instagrabber.utils.Utils.settingsHelper;
|
import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||||
|
|
||||||
public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = "LocationFragment";
|
private static final String TAG = "LocationFragment";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentLocationBinding binding;
|
private FragmentLocationBinding binding;
|
||||||
@ -92,8 +87,6 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
private boolean isLoggedIn;
|
private boolean isLoggedIn;
|
||||||
private boolean storiesFetching;
|
private boolean storiesFetching;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_LOCATION_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_LOCATION_POSTS_LAYOUT);
|
||||||
private LayoutLocationDetailsBinding locationDetailsBinding;
|
private LayoutLocationDetailsBinding locationDetailsBinding;
|
||||||
|
|
||||||
@ -117,13 +110,10 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
if (LocationFragment.this.selectedFeedModels == null) return false;
|
if (LocationFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(LocationFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(LocationFragment.this.selectedFeedModels));
|
||||||
binding.posts.endSelection();
|
binding.posts.endSelection();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -152,13 +142,7 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
return;
|
|
||||||
}
|
|
||||||
downloadFeedModel = feedModel;
|
|
||||||
downloadChildPosition = childPosition;
|
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -344,25 +328,6 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.posts.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (getArguments() == null) return;
|
if (getArguments() == null) return;
|
||||||
final LocationFragmentArgs fragmentArgs = LocationFragmentArgs.fromBundle(getArguments());
|
final LocationFragmentArgs fragmentArgs = LocationFragmentArgs.fromBundle(getArguments());
|
||||||
|
@ -30,7 +30,6 @@ import androidx.appcompat.widget.PopupMenu;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.appcompat.widget.TooltipCompat;
|
import androidx.appcompat.widget.TooltipCompat;
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.core.content.PermissionChecker;
|
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.core.view.WindowInsetsControllerCompat;
|
import androidx.core.view.WindowInsetsControllerCompat;
|
||||||
@ -105,10 +104,8 @@ import awais.instagrabber.utils.TextUtils;
|
|||||||
import awais.instagrabber.utils.Utils;
|
import awais.instagrabber.utils.Utils;
|
||||||
import awais.instagrabber.viewmodels.PostViewV2ViewModel;
|
import awais.instagrabber.viewmodels.PostViewV2ViewModel;
|
||||||
|
|
||||||
//import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
|
||||||
import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG;
|
import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG;
|
||||||
import static awais.instagrabber.fragments.settings.PreferenceKeys.PREF_SHOWN_COUNT_TOOLTIP;
|
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.settingsHelper;
|
import static awais.instagrabber.utils.Utils.settingsHelper;
|
||||||
|
|
||||||
public class PostViewV2Fragment extends Fragment implements EditTextDialogFragment.EditTextDialogFragmentCallback {
|
public class PostViewV2Fragment extends Fragment implements EditTextDialogFragment.EditTextDialogFragmentCallback {
|
||||||
@ -116,7 +113,6 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
|||||||
// private static final int DETAILS_HIDE_DELAY_MILLIS = 2000;
|
// private static final int DETAILS_HIDE_DELAY_MILLIS = 2000;
|
||||||
public static final String ARG_MEDIA = "media";
|
public static final String ARG_MEDIA = "media";
|
||||||
public static final String ARG_SLIDER_POSITION = "position";
|
public static final String ARG_SLIDER_POSITION = "position";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
|
|
||||||
private DialogPostViewBinding binding;
|
private DialogPostViewBinding binding;
|
||||||
private Context context;
|
private Context context;
|
||||||
@ -281,16 +277,6 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, viewModel.getMedia(), sliderPosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
final Bundle arguments = getArguments();
|
final Bundle arguments = getArguments();
|
||||||
if (arguments == null) {
|
if (arguments == null) {
|
||||||
|
@ -49,8 +49,6 @@ import static awais.instagrabber.utils.Utils.settingsHelper;
|
|||||||
|
|
||||||
public final class SavedViewerFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public final class SavedViewerFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = SavedViewerFragment.class.getSimpleName();
|
private static final String TAG = SavedViewerFragment.class.getSimpleName();
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private FragmentSavedBinding binding;
|
private FragmentSavedBinding binding;
|
||||||
private String username;
|
private String username;
|
||||||
@ -61,8 +59,6 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
private boolean isLoggedIn, shouldRefresh = true;
|
private boolean isLoggedIn, shouldRefresh = true;
|
||||||
private PostItemType type;
|
private PostItemType type;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private PostsLayoutPreferences layoutPreferences;
|
private PostsLayoutPreferences layoutPreferences;
|
||||||
|
|
||||||
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
||||||
@ -85,12 +81,8 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
if (SavedViewerFragment.this.selectedFeedModels == null) return false;
|
if (SavedViewerFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(SavedViewerFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(SavedViewerFragment.this.selectedFeedModels));
|
||||||
binding.posts.endSelection();
|
binding.posts.endSelection();
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -120,13 +112,7 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// downloadFeedModel = feedModel;
|
|
||||||
// downloadChildPosition = childPosition;
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -306,25 +292,6 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.posts.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTitle() {
|
private void setTitle() {
|
||||||
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
final ActionBar actionBar = fragmentActivity.getSupportActionBar();
|
||||||
if (actionBar == null) return;
|
if (actionBar == null) return;
|
||||||
|
@ -209,10 +209,7 @@ public class StoryViewerFragment extends Fragment {
|
|||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
int itemId = item.getItemId();
|
int itemId = item.getItemId();
|
||||||
if (itemId == R.id.action_download) {
|
if (itemId == R.id.action_download) {
|
||||||
if (ContextCompat.checkSelfPermission(context, DownloadUtils.PERMS[0]) == PackageManager.PERMISSION_GRANTED)
|
|
||||||
downloadStory();
|
downloadStory();
|
||||||
else
|
|
||||||
ActivityCompat.requestPermissions(requireActivity(), DownloadUtils.PERMS, 8020);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (itemId == R.id.action_dms) {
|
if (itemId == R.id.action_dms) {
|
||||||
@ -263,13 +260,6 @@ public class StoryViewerFragment extends Fragment {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
if (requestCode == 8020 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
|
||||||
downloadStory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
@ -61,8 +61,6 @@ import awais.instagrabber.webservices.DiscoverService;
|
|||||||
|
|
||||||
public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = TopicPostsFragment.class.getSimpleName();
|
private static final String TAG = TopicPostsFragment.class.getSimpleName();
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private FragmentTopicPostsBinding binding;
|
private FragmentTopicPostsBinding binding;
|
||||||
@ -71,8 +69,6 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
|||||||
private TopicCluster topicCluster;
|
private TopicCluster topicCluster;
|
||||||
private ActionMode actionMode;
|
private ActionMode actionMode;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_TOPIC_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_TOPIC_POSTS_LAYOUT);
|
||||||
|
|
||||||
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) {
|
||||||
@ -95,12 +91,9 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
|||||||
if (TopicPostsFragment.this.selectedFeedModels == null) return false;
|
if (TopicPostsFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(TopicPostsFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(TopicPostsFragment.this.selectedFeedModels));
|
||||||
binding.posts.endSelection();
|
binding.posts.endSelection();
|
||||||
return true;
|
return true;
|
||||||
// }
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -130,13 +123,7 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
// if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// downloadFeedModel = feedModel;
|
|
||||||
// downloadChildPosition = -1;
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -299,25 +286,6 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
|||||||
resetToolbar();
|
resetToolbar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.posts.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resetToolbar() {
|
private void resetToolbar() {
|
||||||
fragmentActivity.resetToolbar();
|
fragmentActivity.resetToolbar();
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,6 @@ import awais.instagrabber.viewmodels.factories.DirectThreadViewModelFactory;
|
|||||||
public class DirectMessageThreadFragment extends Fragment implements DirectReactionsAdapter.OnReactionClickListener,
|
public class DirectMessageThreadFragment extends Fragment implements DirectReactionsAdapter.OnReactionClickListener,
|
||||||
EmojiPicker.OnEmojiClickListener {
|
EmojiPicker.OnEmojiClickListener {
|
||||||
private static final String TAG = DirectMessageThreadFragment.class.getSimpleName();
|
private static final String TAG = DirectMessageThreadFragment.class.getSimpleName();
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int AUDIO_RECORD_PERM_REQUEST_CODE = 1000;
|
private static final int AUDIO_RECORD_PERM_REQUEST_CODE = 1000;
|
||||||
private static final int CAMERA_REQUEST_CODE = 200;
|
private static final int CAMERA_REQUEST_CODE = 200;
|
||||||
private static final String TRANSLATION_Y = "translationY";
|
private static final String TRANSLATION_Y = "translationY";
|
||||||
@ -490,17 +489,12 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
|
|||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (tempMedia == null) return;
|
|
||||||
downloadItem(context, tempMedia);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == AUDIO_RECORD_PERM_REQUEST_CODE) {
|
if (requestCode == AUDIO_RECORD_PERM_REQUEST_CODE) {
|
||||||
if (PermissionUtils.hasAudioRecordPerms(context)) {
|
if (PermissionUtils.hasAudioRecordPerms(context)) {
|
||||||
Toast.makeText(context, "You can send voice messages now!", Toast.LENGTH_LONG).show();
|
Toast.makeText(context, "You can send voice messages now!", Toast.LENGTH_LONG).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Toast.makeText(context, "Require RECORD_AUDIO and WRITE_EXTERNAL_STORAGE permissions", Toast.LENGTH_LONG).show();
|
Toast.makeText(context, "Require RECORD_AUDIO permission", Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1408,13 +1402,8 @@ public class DirectMessageThreadFragment extends Fragment implements DirectReact
|
|||||||
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// if (ContextCompat.checkSelfPermission(context, DownloadUtils.PERMS[0]) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, media);
|
DownloadUtils.download(context, media);
|
||||||
Toast.makeText(context, R.string.downloader_downloading_media, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, R.string.downloader_downloading_media, Toast.LENGTH_SHORT).show();
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// tempMedia = media;
|
|
||||||
// requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -20,7 +20,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout;
|
import androidx.constraintlayout.motion.widget.MotionLayout;
|
||||||
import androidx.constraintlayout.motion.widget.MotionScene;
|
import androidx.constraintlayout.motion.widget.MotionScene;
|
||||||
import androidx.core.content.PermissionChecker;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
@ -57,13 +56,8 @@ import awais.instagrabber.viewmodels.FeedStoriesViewModel;
|
|||||||
import awais.instagrabber.webservices.StoriesRepository;
|
import awais.instagrabber.webservices.StoriesRepository;
|
||||||
import kotlinx.coroutines.Dispatchers;
|
import kotlinx.coroutines.Dispatchers;
|
||||||
|
|
||||||
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
|
||||||
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
|
||||||
|
|
||||||
public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = "FeedFragment";
|
private static final String TAG = "FeedFragment";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private MotionLayout root;
|
private MotionLayout root;
|
||||||
@ -75,8 +69,6 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
private boolean storiesFetching;
|
private boolean storiesFetching;
|
||||||
private ActionMode actionMode;
|
private ActionMode actionMode;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_POSTS_LAYOUT);
|
||||||
private RecyclerView storiesRecyclerView;
|
private RecyclerView storiesRecyclerView;
|
||||||
private MenuItem storyListMenu;
|
private MenuItem storyListMenu;
|
||||||
@ -129,13 +121,7 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
return;
|
|
||||||
}
|
|
||||||
downloadFeedModel = feedModel;
|
|
||||||
downloadChildPosition = childPosition;
|
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -218,14 +204,10 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
if (FeedFragment.this.selectedFeedModels == null) return false;
|
if (FeedFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(FeedFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(FeedFragment.this.selectedFeedModels));
|
||||||
binding.feedRecyclerView.endSelection();
|
binding.feedRecyclerView.endSelection();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -359,29 +341,6 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (!granted) {
|
|
||||||
Toast.makeText(context, R.string.download_permission, Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.feedRecyclerView.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupFeed() {
|
private void setupFeed() {
|
||||||
binding.feedRecyclerView.setViewModelStoreOwner(this)
|
binding.feedRecyclerView.setViewModelStoreOwner(this)
|
||||||
.setLifeCycleOwner(this)
|
.setLifeCycleOwner(this)
|
||||||
|
@ -30,7 +30,6 @@ import androidx.appcompat.app.AlertDialog;
|
|||||||
import androidx.appcompat.content.res.AppCompatResources;
|
import androidx.appcompat.content.res.AppCompatResources;
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout;
|
import androidx.constraintlayout.motion.widget.MotionLayout;
|
||||||
import androidx.constraintlayout.motion.widget.MotionScene;
|
import androidx.constraintlayout.motion.widget.MotionScene;
|
||||||
import androidx.core.content.PermissionChecker;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
@ -105,14 +104,10 @@ import awais.instagrabber.webservices.StoriesRepository;
|
|||||||
import awais.instagrabber.webservices.UserRepository;
|
import awais.instagrabber.webservices.UserRepository;
|
||||||
import kotlinx.coroutines.Dispatchers;
|
import kotlinx.coroutines.Dispatchers;
|
||||||
|
|
||||||
import static androidx.core.content.PermissionChecker.checkSelfPermission;
|
|
||||||
import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG;
|
import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG;
|
||||||
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
|
|
||||||
|
|
||||||
public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
private static final String TAG = "ProfileFragment";
|
private static final String TAG = "ProfileFragment";
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE = 8020;
|
|
||||||
private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030;
|
|
||||||
|
|
||||||
private MainActivity fragmentActivity;
|
private MainActivity fragmentActivity;
|
||||||
private MotionLayout root;
|
private MotionLayout root;
|
||||||
@ -139,8 +134,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
private boolean accountIsUpdated = false;
|
private boolean accountIsUpdated = false;
|
||||||
private boolean postsSetupDone = false;
|
private boolean postsSetupDone = false;
|
||||||
private Set<Media> selectedFeedModels;
|
private Set<Media> selectedFeedModels;
|
||||||
private Media downloadFeedModel;
|
|
||||||
private int downloadChildPosition = -1;
|
|
||||||
private long myId;
|
private long myId;
|
||||||
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT);
|
private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT);
|
||||||
private LayoutProfileDetailsBinding profileDetailsBinding;
|
private LayoutProfileDetailsBinding profileDetailsBinding;
|
||||||
@ -199,14 +192,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
if (ProfileFragment.this.selectedFeedModels == null) return false;
|
if (ProfileFragment.this.selectedFeedModels == null) return false;
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return false;
|
if (context == null) return false;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(ProfileFragment.this.selectedFeedModels));
|
DownloadUtils.download(context, ImmutableList.copyOf(ProfileFragment.this.selectedFeedModels));
|
||||||
binding.postsRecyclerView.endSelection();
|
binding.postsRecyclerView.endSelection();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -235,13 +224,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) return;
|
if (context == null) return;
|
||||||
if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) {
|
|
||||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||||
return;
|
|
||||||
}
|
|
||||||
downloadFeedModel = feedModel;
|
|
||||||
downloadChildPosition = childPosition;
|
|
||||||
requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -638,25 +621,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
|
||||||
final Context context = getContext();
|
|
||||||
if (context == null) return;
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) {
|
|
||||||
if (downloadFeedModel == null) return;
|
|
||||||
DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition);
|
|
||||||
downloadFeedModel = null;
|
|
||||||
downloadChildPosition = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) {
|
|
||||||
DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels));
|
|
||||||
binding.postsRecyclerView.endSelection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
disableDm = !Utils.isNavRootInCurrentTabs("direct_messages_nav_graph");
|
disableDm = !Utils.isNavRootInCurrentTabs("direct_messages_nav_graph");
|
||||||
if (getArguments() != null) {
|
if (getArguments() != null) {
|
||||||
|
@ -427,7 +427,6 @@
|
|||||||
<item quantity="many">%s stories</item>
|
<item quantity="many">%s stories</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">لا يوجد إذن للوصول إلى ذاكرة التخزين!</string>
|
|
||||||
<string name="details">التفاصيل</string>
|
<string name="details">التفاصيل</string>
|
||||||
<string name="title">العنوان</string>
|
<string name="title">العنوان</string>
|
||||||
<string name="members">الأعضاء</string>
|
<string name="members">الأعضاء</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s història</item>
|
<item quantity="one">%s història</item>
|
||||||
<item quantity="other">%s històries</item>
|
<item quantity="other">%s històries</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">No s\'ha concedit el permís d\'emmagatzematge!</string>
|
|
||||||
<string name="details">Detalls</string>
|
<string name="details">Detalls</string>
|
||||||
<string name="title">Títol</string>
|
<string name="title">Títol</string>
|
||||||
<string name="members">Membres</string>
|
<string name="members">Membres</string>
|
||||||
|
@ -409,7 +409,6 @@
|
|||||||
<item quantity="many">%s příběhů</item>
|
<item quantity="many">%s příběhů</item>
|
||||||
<item quantity="other">%s příběhů</item>
|
<item quantity="other">%s příběhů</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Přístup k úložišti nebyl udělen!</string>
|
|
||||||
<string name="details">Podrobnosti</string>
|
<string name="details">Podrobnosti</string>
|
||||||
<string name="title">Název</string>
|
<string name="title">Název</string>
|
||||||
<string name="members">Členové</string>
|
<string name="members">Členové</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s Story</item>
|
<item quantity="one">%s Story</item>
|
||||||
<item quantity="other">%s Stories</item>
|
<item quantity="other">%s Stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Speicher-Zugriff nicht erteilt!</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Titel</string>
|
<string name="title">Titel</string>
|
||||||
<string name="members">Mitglieder</string>
|
<string name="members">Mitglieder</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s ιστορία</item>
|
<item quantity="one">%s ιστορία</item>
|
||||||
<item quantity="other">%s ιστορίες</item>
|
<item quantity="other">%s ιστορίες</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Δεν παραχωρήθηκε άδεια για πρόσβαση στον χώρο αποθήκευσης!</string>
|
|
||||||
<string name="details">Λεπτομέρειες</string>
|
<string name="details">Λεπτομέρειες</string>
|
||||||
<string name="title">Τίτλος</string>
|
<string name="title">Τίτλος</string>
|
||||||
<string name="members">Μέλη</string>
|
<string name="members">Μέλη</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s historia</item>
|
<item quantity="one">%s historia</item>
|
||||||
<item quantity="other">%s historias</item>
|
<item quantity="other">%s historias</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">¡Permiso de almacenamiento no concecido!</string>
|
|
||||||
<string name="details">Detalles</string>
|
<string name="details">Detalles</string>
|
||||||
<string name="title">Título</string>
|
<string name="title">Título</string>
|
||||||
<string name="members">Miembros</string>
|
<string name="members">Miembros</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">Istorio %s</item>
|
<item quantity="one">Istorio %s</item>
|
||||||
<item quantity="other">%s istorio</item>
|
<item quantity="other">%s istorio</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Biltegiratze-baimenik ez da eman!</string>
|
|
||||||
<string name="details">Xehetasunak</string>
|
<string name="details">Xehetasunak</string>
|
||||||
<string name="title">Izenburua</string>
|
<string name="title">Izenburua</string>
|
||||||
<string name="members">Kideak</string>
|
<string name="members">Kideak</string>
|
||||||
|
@ -392,7 +392,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Storage permission not granted!</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Title</string>
|
<string name="title">Title</string>
|
||||||
<string name="members">Members</string>
|
<string name="members">Members</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">L\'autorisation d\'accès au stockage a été refusée !</string>
|
|
||||||
<string name="details">Détails</string>
|
<string name="details">Détails</string>
|
||||||
<string name="title">Titre</string>
|
<string name="title">Titre</string>
|
||||||
<string name="members">Membres</string>
|
<string name="members">Membres</string>
|
||||||
|
@ -392,7 +392,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">स्टोरेज की अनुमति नहीं दी गई</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Title</string>
|
<string name="title">Title</string>
|
||||||
<string name="members">Members</string>
|
<string name="members">Members</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s cerita</item>
|
<item quantity="other">%s cerita</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Izin penyimpanan ditolak!</string>
|
|
||||||
<string name="details">Detail</string>
|
<string name="details">Detail</string>
|
||||||
<string name="title">Judul</string>
|
<string name="title">Judul</string>
|
||||||
<string name="members">Anggota</string>
|
<string name="members">Anggota</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s storia</item>
|
<item quantity="one">%s storia</item>
|
||||||
<item quantity="other">%s storie</item>
|
<item quantity="other">%s storie</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Permesso di archiviazione non garantito!</string>
|
|
||||||
<string name="details">Dettagli</string>
|
<string name="details">Dettagli</string>
|
||||||
<string name="title">Titolo</string>
|
<string name="title">Titolo</string>
|
||||||
<string name="members">Membri</string>
|
<string name="members">Membri</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s ストーリー</item>
|
<item quantity="other">%s ストーリー</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">ストレージへのアクセス権限がありません</string>
|
|
||||||
<string name="details">詳細</string>
|
<string name="details">詳細</string>
|
||||||
<string name="title">タイトル</string>
|
<string name="title">タイトル</string>
|
||||||
<string name="members">メンバー</string>
|
<string name="members">メンバー</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s개 스토리</item>
|
<item quantity="other">%s개 스토리</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Storage permission not granted!</string>
|
|
||||||
<string name="details">상세내용</string>
|
<string name="details">상세내용</string>
|
||||||
<string name="title">제목</string>
|
<string name="title">제목</string>
|
||||||
<string name="members">멤버</string>
|
<string name="members">멤버</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s приказна</item>
|
<item quantity="one">%s приказна</item>
|
||||||
<item quantity="other">%s приказни</item>
|
<item quantity="other">%s приказни</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Нема дозвола за пристап до меморија!</string>
|
|
||||||
<string name="details">Детали</string>
|
<string name="details">Детали</string>
|
||||||
<string name="title">Наслов</string>
|
<string name="title">Наслов</string>
|
||||||
<string name="members">Членови</string>
|
<string name="members">Членови</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s verhaal</item>
|
<item quantity="one">%s verhaal</item>
|
||||||
<item quantity="other">%s verhalen</item>
|
<item quantity="other">%s verhalen</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Opslag toestemming niet verleend!</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Titel</string>
|
<string name="title">Titel</string>
|
||||||
<string name="members">Members</string>
|
<string name="members">Members</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Storage permission not granted!</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Title</string>
|
<string name="title">Title</string>
|
||||||
<string name="members">Members</string>
|
<string name="members">Members</string>
|
||||||
|
@ -409,7 +409,6 @@
|
|||||||
<item quantity="many">%s relacji</item>
|
<item quantity="many">%s relacji</item>
|
||||||
<item quantity="other">%s relacji</item>
|
<item quantity="other">%s relacji</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Nie przyznano uprawnień do pamięci!</string>
|
|
||||||
<string name="details">Szczegóły</string>
|
<string name="details">Szczegóły</string>
|
||||||
<string name="title">Tytuł</string>
|
<string name="title">Tytuł</string>
|
||||||
<string name="members">Członkowie</string>
|
<string name="members">Członkowie</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Permissão de armazenamento não concedida!</string>
|
|
||||||
<string name="details">Detalhes</string>
|
<string name="details">Detalhes</string>
|
||||||
<string name="title">Título</string>
|
<string name="title">Título</string>
|
||||||
<string name="members">Membros</string>
|
<string name="members">Membros</string>
|
||||||
|
@ -409,7 +409,6 @@
|
|||||||
<item quantity="many">%s историй</item>
|
<item quantity="many">%s историй</item>
|
||||||
<item quantity="other">%s истории</item>
|
<item quantity="other">%s истории</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Разрешение на доступ к хранилищу не предоставлено!</string>
|
|
||||||
<string name="details">Подробнее</string>
|
<string name="details">Подробнее</string>
|
||||||
<string name="title">Заголовок</string>
|
<string name="title">Заголовок</string>
|
||||||
<string name="members">Участники</string>
|
<string name="members">Участники</string>
|
||||||
|
@ -409,7 +409,6 @@
|
|||||||
<item quantity="many">%s príbehu</item>
|
<item quantity="many">%s príbehu</item>
|
||||||
<item quantity="other">%s príbehov</item>
|
<item quantity="other">%s príbehov</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Povolenia na ukladanie neboli udelené!</string>
|
|
||||||
<string name="details">Detaily</string>
|
<string name="details">Detaily</string>
|
||||||
<string name="title">Nadpis</string>
|
<string name="title">Nadpis</string>
|
||||||
<string name="members">Členovia</string>
|
<string name="members">Členovia</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Storage permission not granted!</string>
|
|
||||||
<string name="details">Detaljer</string>
|
<string name="details">Detaljer</string>
|
||||||
<string name="title">Titel</string>
|
<string name="title">Titel</string>
|
||||||
<string name="members">Medlemmar</string>
|
<string name="members">Medlemmar</string>
|
||||||
|
@ -391,7 +391,6 @@
|
|||||||
<item quantity="one">%s hikaye</item>
|
<item quantity="one">%s hikaye</item>
|
||||||
<item quantity="other">%s hikaye</item>
|
<item quantity="other">%s hikaye</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Depolama izni verilmedi!</string>
|
|
||||||
<string name="details">Detaylar</string>
|
<string name="details">Detaylar</string>
|
||||||
<string name="title">Başlık</string>
|
<string name="title">Başlık</string>
|
||||||
<string name="members">Üyeler</string>
|
<string name="members">Üyeler</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s story</item>
|
<item quantity="other">%s story</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Chưa cấp quyền bộ nhớ!</string>
|
|
||||||
<string name="details">Chi tiết</string>
|
<string name="details">Chi tiết</string>
|
||||||
<string name="title">Tiêu đề</string>
|
<string name="title">Tiêu đề</string>
|
||||||
<string name="members">Thành viên</string>
|
<string name="members">Thành viên</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s 个故事</item>
|
<item quantity="other">%s 个故事</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">未授予存储权限!</string>
|
|
||||||
<string name="details">详情</string>
|
<string name="details">详情</string>
|
||||||
<string name="title">标题</string>
|
<string name="title">标题</string>
|
||||||
<string name="members">成员</string>
|
<string name="members">成员</string>
|
||||||
|
@ -382,7 +382,6 @@
|
|||||||
<plurals name="stories_count">
|
<plurals name="stories_count">
|
||||||
<item quantity="other">%s 個動態</item>
|
<item quantity="other">%s 個動態</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">儲存空間存取權限被拒</string>
|
|
||||||
<string name="details">詳情</string>
|
<string name="details">詳情</string>
|
||||||
<string name="title">標題</string>
|
<string name="title">標題</string>
|
||||||
<string name="members">成員</string>
|
<string name="members">成員</string>
|
||||||
|
@ -405,7 +405,6 @@
|
|||||||
<item quantity="one">%s story</item>
|
<item quantity="one">%s story</item>
|
||||||
<item quantity="other">%s stories</item>
|
<item quantity="other">%s stories</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="download_permission">Storage permission not granted!</string>
|
|
||||||
<string name="details">Details</string>
|
<string name="details">Details</string>
|
||||||
<string name="title">Title</string>
|
<string name="title">Title</string>
|
||||||
<string name="members">Members</string>
|
<string name="members">Members</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user