mirror of
				https://github.com/KokaKiwi/BarInsta
				synced 2025-10-31 19:45:35 +00:00 
			
		
		
		
	v16.9 part 1
This commit is contained in:
		
							parent
							
								
									604b147b4d
								
							
						
					
					
						commit
						7af96bf591
					
				| @ -9,11 +9,11 @@ android { | |||||||
|         minSdkVersion 16 |         minSdkVersion 16 | ||||||
|         targetSdkVersion 29 |         targetSdkVersion 29 | ||||||
| 
 | 
 | ||||||
|         // REMEMBER TO CHANGE versionCode as well |         // REMEMBER TO CHANGE versionCode AS WELL | ||||||
|         // 16.7 is 32 |         // 16.7 is 32 | ||||||
| 
 | 
 | ||||||
|         versionCode 33 |         versionCode 34 | ||||||
|         versionName '16.8' |         versionName '16.9' | ||||||
| 
 | 
 | ||||||
|         multiDexEnabled true |         multiDexEnabled true | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,15 +8,25 @@ import android.os.Bundle; | |||||||
| import android.text.SpannableString; | import android.text.SpannableString; | ||||||
| import android.text.Spanned; | import android.text.Spanned; | ||||||
| import android.text.style.RelativeSizeSpan; | import android.text.style.RelativeSizeSpan; | ||||||
|  | import android.util.Log; | ||||||
|  | import android.view.inputmethod.InputMethodManager; | ||||||
| import android.view.Menu; | import android.view.Menu; | ||||||
| import android.view.MenuItem; | import android.view.MenuItem; | ||||||
| import android.view.View; | import android.view.View; | ||||||
|  | import android.view.WindowManager; | ||||||
| import android.widget.ArrayAdapter; | import android.widget.ArrayAdapter; | ||||||
|  | import android.widget.Toast; | ||||||
| 
 | 
 | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.appcompat.app.AppCompatActivity; | import androidx.appcompat.app.AppCompatActivity; | ||||||
| import androidx.appcompat.widget.SearchView; | import androidx.appcompat.widget.SearchView; | ||||||
|  | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | ||||||
|  | 
 | ||||||
|  | import java.io.DataOutputStream; | ||||||
|  | import java.net.HttpURLConnection; | ||||||
|  | import java.net.URL; | ||||||
|  | import java.net.URLEncoder; | ||||||
| 
 | 
 | ||||||
| import awais.instagrabber.R; | import awais.instagrabber.R; | ||||||
| import awais.instagrabber.adapters.CommentsAdapter; | import awais.instagrabber.adapters.CommentsAdapter; | ||||||
| @ -29,35 +39,80 @@ import awais.instagrabber.models.ProfileModel; | |||||||
| import awais.instagrabber.utils.Constants; | import awais.instagrabber.utils.Constants; | ||||||
| import awais.instagrabber.utils.Utils; | import awais.instagrabber.utils.Utils; | ||||||
| 
 | 
 | ||||||
| public final class CommentsViewer extends AppCompatActivity { | import static awais.instagrabber.utils.Utils.settingsHelper; | ||||||
|  | 
 | ||||||
|  | public final class CommentsViewer extends BaseLanguageActivity implements SwipeRefreshLayout.OnRefreshListener { | ||||||
|     private CommentsAdapter commentsAdapter; |     private CommentsAdapter commentsAdapter; | ||||||
|     private CommentModel commentModel; |     private CommentModel commentModel; | ||||||
|  |     private ActivityCommentsBinding commentsBinding; | ||||||
|  |     private ArrayAdapter<String> commmentDialogAdapter; | ||||||
|  |     private String shortCode, postId, userId; | ||||||
|  |     private final String cookie = Utils.settingsHelper.getString(Constants.COOKIE); | ||||||
|  |     private Resources resources; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onCreate(@Nullable final Bundle savedInstanceState) { |     protected void onCreate(@Nullable final Bundle savedInstanceState) { | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
|         final ActivityCommentsBinding commentsBinding = ActivityCommentsBinding.inflate(getLayoutInflater()); |         commentsBinding = ActivityCommentsBinding.inflate(getLayoutInflater()); | ||||||
|         setContentView(commentsBinding.getRoot()); |         setContentView(commentsBinding.getRoot()); | ||||||
|  |         commentsBinding.swipeRefreshLayout.setOnRefreshListener(this); | ||||||
| 
 | 
 | ||||||
|         final String shortCode; |  | ||||||
|         final Intent intent = getIntent(); |         final Intent intent = getIntent(); | ||||||
|         if (intent == null || !intent.hasExtra(Constants.EXTRAS_SHORTCODE) |         if (intent == null || !intent.hasExtra(Constants.EXTRAS_SHORTCODE) | ||||||
|                 || Utils.isEmpty((shortCode = intent.getStringExtra(Constants.EXTRAS_SHORTCODE)))) { |                 || Utils.isEmpty((shortCode = intent.getStringExtra(Constants.EXTRAS_SHORTCODE))) | ||||||
|  |                 || !intent.hasExtra(Constants.EXTRAS_POST) | ||||||
|  |                 || Utils.isEmpty((postId = intent.getStringExtra(Constants.EXTRAS_POST))) | ||||||
|  |                 || !intent.hasExtra(Constants.EXTRAS_USER) | ||||||
|  |                 || Utils.isEmpty((userId = intent.getStringExtra(Constants.EXTRAS_USER)))) { | ||||||
|             Utils.errorFinish(this); |             Utils.errorFinish(this); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         commentsBinding.swipeRefreshLayout.setRefreshing(true); | ||||||
|         setSupportActionBar(commentsBinding.toolbar.toolbar); |         setSupportActionBar(commentsBinding.toolbar.toolbar); | ||||||
|         commentsBinding.toolbar.toolbar.setTitle(R.string.title_comments); |         commentsBinding.toolbar.toolbar.setTitle(R.string.title_comments); | ||||||
|         commentsBinding.toolbar.toolbar.setSubtitle(shortCode); |         commentsBinding.toolbar.toolbar.setSubtitle(shortCode); | ||||||
| 
 | 
 | ||||||
|         final Resources resources = getResources(); |         resources = getResources(); | ||||||
|  | 
 | ||||||
|  |         if (!Utils.isEmpty(cookie)) { | ||||||
|  |             commentsBinding.commentText.setVisibility(View.VISIBLE); | ||||||
|  |             commentsBinding.commentSend.setVisibility(View.VISIBLE); | ||||||
|  | 
 | ||||||
|  |             commentsBinding.commentSend.setOnClickListener(newCommentListener); | ||||||
|  |             commentsBinding.commentCancelParent.setOnClickListener(newCommentListener); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         new CommentsFetcher(shortCode, new FetchListener<CommentModel[]>() { | ||||||
|  |             @Override | ||||||
|  |             public void onResult(final CommentModel[] commentModels) { | ||||||
|  |                 commentsBinding.toolbar.progressCircular.setVisibility(View.GONE); | ||||||
|  | 
 | ||||||
|  |                 commentsAdapter = new CommentsAdapter(commentModels, true, clickListener, mentionClickListener); | ||||||
|  | 
 | ||||||
|  |                 commentsBinding.rvComments.setAdapter(commentsAdapter); | ||||||
|  |                 commentsBinding.swipeRefreshLayout.setRefreshing(false); | ||||||
|  |             } | ||||||
|  |         }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void onRefresh() { | ||||||
|  |         commentsBinding.swipeRefreshLayout.setRefreshing(true); | ||||||
|  |         new CommentsFetcher(shortCode, new FetchListener<CommentModel[]>() { | ||||||
|  |             @Override | ||||||
|  |             public void onResult(final CommentModel[] commentModels) { | ||||||
|  |                 commentsBinding.swipeRefreshLayout.setRefreshing(false); | ||||||
|  | 
 | ||||||
|  |                 commentsBinding.toolbar.progressCircular.setVisibility(View.GONE); | ||||||
|  | 
 | ||||||
|  |                 commentsAdapter = new CommentsAdapter(commentModels, true, clickListener, mentionClickListener); | ||||||
|  | 
 | ||||||
|  |                 commentsBinding.rvComments.setAdapter(commentsAdapter); | ||||||
|  |             } | ||||||
|  |         }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|         final ArrayAdapter<String> commmentDialogAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, |  | ||||||
|                 new String[]{resources.getString(R.string.open_profile), |  | ||||||
|                         resources.getString(R.string.view_pfp), |  | ||||||
|                         resources.getString(R.string.comment_viewer_copy_user), |  | ||||||
|                         resources.getString(R.string.comment_viewer_copy_comment)}); |  | ||||||
|     final DialogInterface.OnClickListener profileDialogListener = (dialog, which) -> { |     final DialogInterface.OnClickListener profileDialogListener = (dialog, which) -> { | ||||||
|         final ProfileModel profileModel = commentModel.getProfileModel(); |         final ProfileModel profileModel = commentModel.getProfileModel(); | ||||||
| 
 | 
 | ||||||
| @ -69,10 +124,29 @@ public final class CommentsViewer extends AppCompatActivity { | |||||||
|             Utils.copyText(this, profileModel.getUsername()); |             Utils.copyText(this, profileModel.getUsername()); | ||||||
|         } else if (which == 3) { |         } else if (which == 3) { | ||||||
|             Utils.copyText(this, commentModel.getText().toString()); |             Utils.copyText(this, commentModel.getText().toString()); | ||||||
|  |         } else if (which == 4) { | ||||||
|  |             commentsBinding.rvComments.findViewWithTag(commentModel).setBackgroundColor(0x80888888); | ||||||
|  |             commentsBinding.commentCancelParent.setVisibility(View.VISIBLE); | ||||||
|  |             String mention = "@"+profileModel.getUsername()+" "; | ||||||
|  |             commentsBinding.commentText.setText(mention); | ||||||
|  |             commentsBinding.commentText.requestFocus(); | ||||||
|  |             commentsBinding.commentText.setSelection(mention.length()); | ||||||
|  |             commentsBinding.commentText.postDelayed(new Runnable(){ | ||||||
|  |                @Override | ||||||
|  |                public void run(){ | ||||||
|  |                    final InputMethodManager imm = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); | ||||||
|  |                    imm.showSoftInput(commentsBinding.commentText, 0); | ||||||
|  |                } | ||||||
|  |             } | ||||||
|  |             ,200); | ||||||
|  |         } else if (which == 5) { | ||||||
|  |             new CommentAction().execute((commentModel.getLiked() ? "unlike/" : "like/")+commentModel.getId()); | ||||||
|  |         } else if (which == 6) { | ||||||
|  |             new CommentAction().execute("delete/"+commentModel.getId()); | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|         final View.OnClickListener clickListener = v -> { |     private final View.OnClickListener clickListener = v -> { | ||||||
|         final Object tag = v.getTag(); |         final Object tag = v.getTag(); | ||||||
|         if (tag instanceof CommentModel) { |         if (tag instanceof CommentModel) { | ||||||
|             commentModel = (CommentModel) tag; |             commentModel = (CommentModel) tag; | ||||||
| @ -81,6 +155,36 @@ public final class CommentsViewer extends AppCompatActivity { | |||||||
|             final SpannableString title = new SpannableString(username + ":\n" + commentModel.getText()); |             final SpannableString title = new SpannableString(username + ":\n" + commentModel.getText()); | ||||||
|             title.setSpan(new RelativeSizeSpan(1.23f), 0, username.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); |             title.setSpan(new RelativeSizeSpan(1.23f), 0, username.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); | ||||||
| 
 | 
 | ||||||
|  |             String[] commentDialogList; | ||||||
|  | 
 | ||||||
|  |             if (!Utils.isEmpty(cookie) && | ||||||
|  |                     (Utils.getUserIdFromCookie(cookie).equals(commentModel.getProfileModel().getId()) || | ||||||
|  |                             Utils.getUserIdFromCookie(cookie).equals(userId))) commentDialogList = new String[]{ | ||||||
|  |                     resources.getString(R.string.open_profile), | ||||||
|  |                     resources.getString(R.string.view_pfp), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_user), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_comment), | ||||||
|  |                     resources.getString(R.string.comment_viewer_reply_comment), | ||||||
|  |                     commentModel.getLiked() ? resources.getString(R.string.comment_viewer_unlike_comment) : resources.getString(R.string.comment_viewer_like_comment), | ||||||
|  |                     resources.getString(R.string.comment_viewer_delete_comment) | ||||||
|  |             }; | ||||||
|  |             else if (!Utils.isEmpty(cookie)) commentDialogList = new String[]{ | ||||||
|  |                     resources.getString(R.string.open_profile), | ||||||
|  |                     resources.getString(R.string.view_pfp), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_user), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_comment), | ||||||
|  |                     resources.getString(R.string.comment_viewer_reply_comment), | ||||||
|  |                     commentModel.getLiked() ? resources.getString(R.string.comment_viewer_unlike_comment) : resources.getString(R.string.comment_viewer_like_comment), | ||||||
|  |             }; | ||||||
|  |             else commentDialogList = new String[]{ | ||||||
|  |                     resources.getString(R.string.open_profile), | ||||||
|  |                     resources.getString(R.string.view_pfp), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_user), | ||||||
|  |                     resources.getString(R.string.comment_viewer_copy_comment) | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             commmentDialogAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, commentDialogList); | ||||||
|  | 
 | ||||||
|             new AlertDialog.Builder(this).setTitle(title) |             new AlertDialog.Builder(this).setTitle(title) | ||||||
|                     .setAdapter(commmentDialogAdapter, profileDialogListener) |                     .setAdapter(commmentDialogAdapter, profileDialogListener) | ||||||
|                     .setNeutralButton(R.string.cancel, null) |                     .setNeutralButton(R.string.cancel, null) | ||||||
| @ -88,28 +192,23 @@ public final class CommentsViewer extends AppCompatActivity { | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|         final MentionClickListener mentionClickListener = (view, text, isHashtag) -> |     private final MentionClickListener mentionClickListener = (view, text, isHashtag) -> | ||||||
|             new AlertDialog.Builder(this).setTitle(text) |             new AlertDialog.Builder(this).setTitle(text) | ||||||
|                     .setMessage(isHashtag ? R.string.comment_view_mention_hash_search : R.string.comment_view_mention_user_search) |                     .setMessage(isHashtag ? R.string.comment_view_mention_hash_search : R.string.comment_view_mention_user_search) | ||||||
|                     .setNegativeButton(R.string.cancel, null).setPositiveButton(R.string.ok, |                     .setNegativeButton(R.string.cancel, null).setPositiveButton(R.string.ok, | ||||||
|                     (dialog, which) -> searchUsername(text)).show(); |                     (dialog, which) -> searchUsername(text)).show(); | ||||||
| 
 | 
 | ||||||
|         new CommentsFetcher(shortCode, new FetchListener<CommentModel[]>() { |     private final View.OnClickListener newCommentListener = v -> { | ||||||
|             @Override |         if (Utils.isEmpty(commentsBinding.commentText.getText().toString()) && v == commentsBinding.commentSend) | ||||||
|             public void doBefore() { |             Toast.makeText(getApplicationContext(), R.string.comment_send_empty_comment, Toast.LENGTH_SHORT).show(); | ||||||
|                 commentsBinding.toolbar.progressCircular.setVisibility(View.VISIBLE); |         else if (v == commentsBinding.commentSend) new CommentAction().execute("add"); | ||||||
|             } |         else if (v == commentsBinding.commentCancelParent) { | ||||||
| 
 |             commentsBinding.rvComments.findViewWithTag(commentModel).setBackgroundColor(commentModel.getLiked() ? 0x40FF69B4 : 0x00000000); | ||||||
|             @Override |             commentsBinding.commentCancelParent.setVisibility(View.GONE); | ||||||
|             public void onResult(final CommentModel[] commentModels) { |             commentsBinding.commentText.setText(""); | ||||||
|                 commentsBinding.toolbar.progressCircular.setVisibility(View.GONE); |             commentModel = null; | ||||||
| 
 |  | ||||||
|                 commentsAdapter = new CommentsAdapter(commentModels, true, clickListener, mentionClickListener); |  | ||||||
| 
 |  | ||||||
|                 commentsBinding.rvComments.setAdapter(commentsAdapter); |  | ||||||
|             } |  | ||||||
|         }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |  | ||||||
|         } |         } | ||||||
|  |     }; | ||||||
| 
 | 
 | ||||||
|     private void searchUsername(final String text) { |     private void searchUsername(final String text) { | ||||||
|         if (Main.scanHack != null) { |         if (Main.scanHack != null) { | ||||||
| @ -143,4 +242,57 @@ public final class CommentsViewer extends AppCompatActivity { | |||||||
| 
 | 
 | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     class CommentAction extends AsyncTask<String, Void, Void> { | ||||||
|  |         boolean ok = false; | ||||||
|  | 
 | ||||||
|  |         protected Void doInBackground(String... rawAction) { | ||||||
|  |             final String action = rawAction[0]; | ||||||
|  |             final String url = "https://www.instagram.com/web/comments/"+postId+"/"+action+"/"; | ||||||
|  |             try { | ||||||
|  |                 final HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection(); | ||||||
|  |                 urlConnection.setRequestMethod("POST"); | ||||||
|  |                 urlConnection.setUseCaches(false); | ||||||
|  |                 urlConnection.setRequestProperty("User-Agent", Constants.USER_AGENT); | ||||||
|  |                 urlConnection.setRequestProperty("x-csrftoken", cookie.split("csrftoken=")[1].split(";")[0]); | ||||||
|  |                 if (action == "add") { | ||||||
|  |                     // https://stackoverflow.com/questions/14321873/java-url-encoding-urlencoder-vs-uri | ||||||
|  |                     final String commentText = URLEncoder.encode(commentsBinding.commentText.getText().toString(), "UTF-8") | ||||||
|  |                             .replaceAll("\\+", "%20").replaceAll("\\%21", "!").replaceAll("\\%27", "'") | ||||||
|  |                             .replaceAll("\\%28", "(").replaceAll("\\%29", ")").replaceAll("\\%7E", "~"); | ||||||
|  |                     final String urlParameters = "comment_text="+commentText+"&replied_to_comment_id="+ | ||||||
|  |                             (commentModel == null ? "" : commentModel.getId()); | ||||||
|  |                     urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); | ||||||
|  |                     urlConnection.setRequestProperty("Content-Length", "" + | ||||||
|  |                             Integer.toString(urlParameters.getBytes().length)); | ||||||
|  |                     urlConnection.setDoOutput(true); | ||||||
|  |                     DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); | ||||||
|  |                     wr.writeBytes(urlParameters); | ||||||
|  |                     wr.flush(); | ||||||
|  |                     wr.close(); | ||||||
|  |                 } | ||||||
|  |                 urlConnection.connect(); | ||||||
|  |                 if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { | ||||||
|  |                     ok = true; | ||||||
|  |                     if (action == "add") commentsBinding.commentText.setText(""); | ||||||
|  |                 } | ||||||
|  |                 else Toast.makeText(getApplicationContext(), R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); | ||||||
|  |                 urlConnection.disconnect(); | ||||||
|  |             } catch (Throwable ex) { | ||||||
|  |                 Log.e("austin_debug", action+": " + ex); | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         @Override | ||||||
|  |         protected void onPostExecute(Void result) { | ||||||
|  |             if (ok == true) { | ||||||
|  |                 if (commentModel != null) { | ||||||
|  |                     commentsBinding.rvComments.findViewWithTag(commentModel).setBackgroundColor(commentModel.getLiked() ? 0x40FF69B4 : 0x00000000); | ||||||
|  |                     commentsBinding.commentCancelParent.setVisibility(View.GONE); | ||||||
|  |                 } | ||||||
|  |                 onRefresh(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -316,7 +316,8 @@ public final class Main extends BaseLanguageActivity { | |||||||
|         searchView.setQueryHint(getResources().getString(R.string.action_search)); |         searchView.setQueryHint(getResources().getString(R.string.action_search)); | ||||||
|         searchView.setSuggestionsAdapter(suggestionAdapter); |         searchView.setSuggestionsAdapter(suggestionAdapter); | ||||||
|         searchView.setOnSearchClickListener(v -> { |         searchView.setOnSearchClickListener(v -> { | ||||||
|             searchView.setQuery(userQuery, false); |             searchView.setQuery((profileModel != null && profileModel.getId().equals( | ||||||
|  |                     Utils.getUserIdFromCookie(Utils.settingsHelper.getString(Constants.COOKIE))) ? "" : userQuery), false); | ||||||
|             menu.findItem(R.id.action_about).setVisible(false); |             menu.findItem(R.id.action_about).setVisible(false); | ||||||
|             menu.findItem(R.id.action_settings).setVisible(false); |             menu.findItem(R.id.action_settings).setVisible(false); | ||||||
|             menu.findItem(R.id.action_dms).setVisible(false); |             menu.findItem(R.id.action_dms).setVisible(false); | ||||||
|  | |||||||
| @ -81,7 +81,7 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|     private View viewsContainer, viewerCaptionParent; |     private View viewsContainer, viewerCaptionParent; | ||||||
|     private GestureDetectorCompat gestureDetector; |     private GestureDetectorCompat gestureDetector; | ||||||
|     private SwipeEvent swipeEvent; |     private SwipeEvent swipeEvent; | ||||||
|     private CharSequence postCaption = null, postShortCode; |     private CharSequence postCaption = null, postShortCode, postUserId; | ||||||
|     private Resources resources; |     private Resources resources; | ||||||
|     private boolean session = false, isFromShare; |     private boolean session = false, isFromShare; | ||||||
|     private int slidePos = 0, lastSlidePos = 0; |     private int slidePos = 0, lastSlidePos = 0; | ||||||
| @ -153,7 +153,7 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|                 if (player != null) { |                 if (player != null) { | ||||||
|                     final float intVol = player.getVolume() == 0f ? 1f : 0f; |                     final float intVol = player.getVolume() == 0f ? 1f : 0f; | ||||||
|                     player.setVolume(intVol); |                     player.setVolume(intVol); | ||||||
|                     viewerBinding.bottomPanel.btnMute.setImageResource(intVol == 0f ? R.drawable.vol : R.drawable.mute); |                     viewerBinding.bottomPanel.btnMute.setImageResource(intVol == 0f ? R.drawable.mute : R.drawable.vol); | ||||||
|                     Utils.sessionVolumeFull = intVol == 1f; |                     Utils.sessionVolumeFull = intVol == 1f; | ||||||
|                 } |                 } | ||||||
|             } else if (v == viewerBinding.btnLike) { |             } else if (v == viewerBinding.btnLike) { | ||||||
| @ -359,7 +359,9 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|                 viewerBinding.bottomPanel.btnComments.setOnClickListener(v -> |                 viewerBinding.bottomPanel.btnComments.setOnClickListener(v -> | ||||||
|                         startActivityForResult(new Intent(this, CommentsViewer.class) |                         startActivityForResult(new Intent(this, CommentsViewer.class) | ||||||
|                                 .putExtra(Constants.EXTRAS_END_CURSOR, commentsEndCursor) |                                 .putExtra(Constants.EXTRAS_END_CURSOR, commentsEndCursor) | ||||||
|                                 .putExtra(Constants.EXTRAS_SHORTCODE, postShortCode), 6969)); |                                 .putExtra(Constants.EXTRAS_SHORTCODE, postShortCode) | ||||||
|  |                                 .putExtra(Constants.EXTRAS_POST, viewerPostModel.getPostId()) | ||||||
|  |                                 .putExtra(Constants.EXTRAS_USER, postUserId), 6969)); | ||||||
|                 viewerBinding.bottomPanel.btnComments.setClickable(true); |                 viewerBinding.bottomPanel.btnComments.setClickable(true); | ||||||
|                 viewerBinding.bottomPanel.btnComments.setEnabled(true); |                 viewerBinding.bottomPanel.btnComments.setEnabled(true); | ||||||
|             } else { |             } else { | ||||||
| @ -592,12 +594,12 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|             postModel.setLike(viewerPostModel.getLike()); |             postModel.setLike(viewerPostModel.getLike()); | ||||||
|             postModel.setBookmark(viewerPostModel.getBookmark()); |             postModel.setBookmark(viewerPostModel.getBookmark()); | ||||||
|             if (viewerPostModel.getLike() == true) { |             if (viewerPostModel.getLike() == true) { | ||||||
|                 viewerBinding.btnLike.setText(R.string.unlike); |                 viewerBinding.btnLike.setText(resources.getString(R.string.unlike, postModel.getLikes())); | ||||||
|                 viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor( |                 viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor( | ||||||
|                         R.color.btn_pink_background, null))); |                         R.color.btn_pink_background, null))); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 viewerBinding.btnLike.setText(R.string.like); |                 viewerBinding.btnLike.setText(resources.getString(R.string.like, postModel.getLikes())); | ||||||
|                 viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor( |                 viewerBinding.btnLike.setBackgroundTintList(ColorStateList.valueOf(resources.getColor( | ||||||
|                         R.color.btn_lightpink_background, null))); |                         R.color.btn_lightpink_background, null))); | ||||||
|             } |             } | ||||||
| @ -620,7 +622,7 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|         url = viewerPostModel.getDisplayUrl(); |         url = viewerPostModel.getDisplayUrl(); | ||||||
|         releasePlayer(); |         releasePlayer(); | ||||||
| 
 | 
 | ||||||
|         viewerBinding.btnDownload.setVisibility(containerLayoutParams.weight == 3.3f ? View.GONE : View.VISIBLE); |         viewerBinding.btnDownload.setVisibility(containerLayoutParams.weight == 3.3f ? View.VISIBLE : View.GONE); | ||||||
|         if (viewerPostModel.getItemType() == MediaItemType.MEDIA_TYPE_VIDEO) setupVideo(); |         if (viewerPostModel.getItemType() == MediaItemType.MEDIA_TYPE_VIDEO) setupVideo(); | ||||||
|         else setupImage(); |         else setupImage(); | ||||||
|     } |     } | ||||||
| @ -645,6 +647,7 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|                     if (result != null) { |                     if (result != null) { | ||||||
|                         final String hdProfilePic = result.getHdProfilePic(); |                         final String hdProfilePic = result.getHdProfilePic(); | ||||||
|                         final String sdProfilePic = result.getSdProfilePic(); |                         final String sdProfilePic = result.getSdProfilePic(); | ||||||
|  |                         postUserId = result.getId(); | ||||||
| 
 | 
 | ||||||
|                         final boolean hdPicEmpty = Utils.isEmpty(hdProfilePic); |                         final boolean hdPicEmpty = Utils.isEmpty(hdProfilePic); | ||||||
|                         glideRequestManager.load(hdPicEmpty ? sdProfilePic : hdProfilePic).listener(new RequestListener<Drawable>() { |                         glideRequestManager.load(hdPicEmpty ? sdProfilePic : hdProfilePic).listener(new RequestListener<Drawable>() { | ||||||
| @ -732,13 +735,13 @@ public final class PostViewer extends BaseLanguageActivity { | |||||||
|         @Override |         @Override | ||||||
|         protected void onPostExecute(Void result) { |         protected void onPostExecute(Void result) { | ||||||
|             if (ok == true && action == "likes") { |             if (ok == true && action == "likes") { | ||||||
|                 viewerPostModel.setLike(postModel.getLike() == true ? false : true); |                 viewerPostModel.setLike(!postModel.getLike()); | ||||||
|                 postModel.setLike(postModel.getLike() == true ? false : true); |                 postModel.setManualLike(!postModel.getLike()); | ||||||
|                 refreshPost(); |                 refreshPost(); | ||||||
|             } |             } | ||||||
|             else if (ok == true && action == "save") { |             else if (ok == true && action == "save") { | ||||||
|                 viewerPostModel.setBookmark(postModel.getBookmark() == true ? false : true); |                 viewerPostModel.setBookmark(!postModel.getBookmark()); | ||||||
|                 postModel.setBookmark(postModel.getBookmark() == true ? false : true); |                 postModel.setBookmark(!postModel.getBookmark()); | ||||||
|                 refreshPost(); |                 refreshPost(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -121,8 +121,10 @@ public final class StoryViewer extends BaseLanguageActivity { | |||||||
| 
 | 
 | ||||||
|             @Override |             @Override | ||||||
|             public void onSwipe(final boolean isRightSwipe) { |             public void onSwipe(final boolean isRightSwipe) { | ||||||
|  |                 Log.d("austin_debug", "swipe: "+(isRightSwipe ? "backward " : "forward ") + slidePos + "/" + storiesLen + " " | ||||||
|  |                         + (slidePos == storiesLen - 1 && isRightSwipe == false) + " " + intent.hasExtra(Constants.FEED)); | ||||||
|                 if (storyModels != null && storiesLen > 0) { |                 if (storyModels != null && storiesLen > 0) { | ||||||
|                     if (((slidePos == storiesLen - 1 && isRightSwipe == false) || (slidePos == 0 && isRightSwipe == true)) |                     if (((slidePos + 1 >= storiesLen && isRightSwipe == false) || (slidePos == 0 && isRightSwipe == true)) | ||||||
|                             && intent.hasExtra(Constants.FEED)) { |                             && intent.hasExtra(Constants.FEED)) { | ||||||
|                         final FeedStoryModel[] storyFeed = (FeedStoryModel[]) intent.getSerializableExtra(Constants.FEED); |                         final FeedStoryModel[] storyFeed = (FeedStoryModel[]) intent.getSerializableExtra(Constants.FEED); | ||||||
|                         final int index = intent.getIntExtra(Constants.FEED_ORDER, 1738); |                         final int index = intent.getIntExtra(Constants.FEED_ORDER, 1738); | ||||||
| @ -148,9 +150,8 @@ public final class StoryViewer extends BaseLanguageActivity { | |||||||
|                         if (isRightSwipe) { |                         if (isRightSwipe) { | ||||||
|                             if (--slidePos <= 0) slidePos = 0; |                             if (--slidePos <= 0) slidePos = 0; | ||||||
|                         } else if (++slidePos >= storiesLen) slidePos = storiesLen - 1; |                         } else if (++slidePos >= storiesLen) slidePos = storiesLen - 1; | ||||||
| 
 |  | ||||||
|                         currentStory = storyModels[slidePos]; |                         currentStory = storyModels[slidePos]; | ||||||
|                         slidePos = currentStory.getPosition(); |                         //slidePos = currentStory.getPosition(); | ||||||
|                         refreshStory(); |                         refreshStory(); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -107,6 +107,7 @@ public final class CommentsAdapter extends RecyclerView.Adapter<CommentViewHolde | |||||||
| 
 | 
 | ||||||
|             holder.setCommment(commentModel.getText()); |             holder.setCommment(commentModel.getText()); | ||||||
|             holder.setDate(commentModel.getDateTime()); |             holder.setDate(commentModel.getDateTime()); | ||||||
|  |             holder.setLiked(commentModel.getLiked()); | ||||||
| 
 | 
 | ||||||
|             final long likes = commentModel.getLikes(); |             final long likes = commentModel.getLikes(); | ||||||
|             holder.setLikes(String.format(LocaleUtils.getCurrentLocale(), "%d %s", likes, quantityStrings[likes == 1 ? 0 : 1])); |             holder.setLikes(String.format(LocaleUtils.getCurrentLocale(), "%d %s", likes, quantityStrings[likes == 1 ? 0 : 1])); | ||||||
|  | |||||||
| @ -82,7 +82,9 @@ public final class FeedAdapter extends RecyclerView.Adapter<FeedItemViewHolder> | |||||||
|                     switch (id) { |                     switch (id) { | ||||||
|                         case R.id.btnComments: |                         case R.id.btnComments: | ||||||
|                             activity.startActivityForResult(new Intent(activity, CommentsViewer.class) |                             activity.startActivityForResult(new Intent(activity, CommentsViewer.class) | ||||||
|                                     .putExtra(Constants.EXTRAS_SHORTCODE, feedModel.getShortCode()), 6969); |                                     .putExtra(Constants.EXTRAS_SHORTCODE, feedModel.getShortCode()) | ||||||
|  |                                     .putExtra(Constants.EXTRAS_POST, feedModel.getPostId()) | ||||||
|  |                                     .putExtra(Constants.EXTRAS_USER, feedModel.getProfileModel().getId()), 6969); | ||||||
|                             break; |                             break; | ||||||
| 
 | 
 | ||||||
|                         case R.id.viewStoryPost: |                         case R.id.viewStoryPost: | ||||||
| @ -305,7 +307,7 @@ public final class FeedAdapter extends RecyclerView.Adapter<FeedItemViewHolder> | |||||||
|                                 final SimpleExoPlayer exoPlayer = (SimpleExoPlayer) player; |                                 final SimpleExoPlayer exoPlayer = (SimpleExoPlayer) player; | ||||||
|                                 final float intVol = exoPlayer.getVolume() == 0f ? 1f : 0f; |                                 final float intVol = exoPlayer.getVolume() == 0f ? 1f : 0f; | ||||||
|                                 exoPlayer.setVolume(intVol); |                                 exoPlayer.setVolume(intVol); | ||||||
|                                 viewHolder.btnMute.setImageResource(intVol == 0f ? R.drawable.vol : R.drawable.mute); |                                 viewHolder.btnMute.setImageResource(intVol == 0f ? R.drawable.mute : R.drawable.vol); | ||||||
|                                 Utils.sessionVolumeFull = intVol == 1f; |                                 Utils.sessionVolumeFull = intVol == 1f; | ||||||
|                             } |                             } | ||||||
|                         }; |                         }; | ||||||
|  | |||||||
| @ -65,6 +65,10 @@ public final class CommentViewHolder extends RecyclerView.ViewHolder { | |||||||
|         if (tvLikes != null) tvLikes.setText(likes); |         if (tvLikes != null) tvLikes.setText(likes); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public final void setLiked(final boolean liked) { | ||||||
|  |         if (liked) container.setBackgroundColor(0x40FF69B4); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public final void setCommment(final CharSequence commment) { |     public final void setCommment(final CharSequence commment) { | ||||||
|         if (tvComment != null) { |         if (tvComment != null) { | ||||||
|             tvComment.setText(commment, commment instanceof Spannable ? TextView.BufferType.SPANNABLE : TextView.BufferType.NORMAL); |             tvComment.setText(commment, commment instanceof Spannable ? TextView.BufferType.SPANNABLE : TextView.BufferType.NORMAL); | ||||||
|  | |||||||
| @ -123,6 +123,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]> | |||||||
|                                         childComment.getString("text"), |                                         childComment.getString("text"), | ||||||
|                                         childComment.getLong("created_at"), |                                         childComment.getLong("created_at"), | ||||||
|                                         likedBy != null ? likedBy.optLong("count", 0) : 0, |                                         likedBy != null ? likedBy.optLong("count", 0) : 0, | ||||||
|  |                                         childComment.getBoolean("viewer_has_liked"), | ||||||
|                                         profileModel)); |                                         profileModel)); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
| @ -201,6 +202,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]> | |||||||
|                                 comment.getString("text"), |                                 comment.getString("text"), | ||||||
|                                 comment.getLong("created_at"), |                                 comment.getLong("created_at"), | ||||||
|                                 likedBy != null ? likedBy.optLong("count", 0) : 0, |                                 likedBy != null ? likedBy.optLong("count", 0) : 0, | ||||||
|  |                                 comment.getBoolean("viewer_has_liked"), | ||||||
|                                 profileModel); |                                 profileModel); | ||||||
| 
 | 
 | ||||||
|                         JSONObject tempJsonObject; |                         JSONObject tempJsonObject; | ||||||
| @ -238,6 +240,7 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, CommentModel[]> | |||||||
|                                         childComment.getString("text"), |                                         childComment.getString("text"), | ||||||
|                                         childComment.getLong("created_at"), |                                         childComment.getLong("created_at"), | ||||||
|                                         tempJsonObject != null ? tempJsonObject.optLong("count", 0) : 0, |                                         tempJsonObject != null ? tempJsonObject.optLong("count", 0) : 0, | ||||||
|  |                                         childComment.getBoolean("viewer_has_liked"), | ||||||
|                                         childProfileModel); |                                         childProfileModel); | ||||||
|                             } |                             } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -131,7 +131,8 @@ public final class FeedFetcher extends AsyncTask<Void, Void, FeedModel[]> { | |||||||
|                             commentsCount, |                             commentsCount, | ||||||
|                             feedItem.optLong("taken_at_timestamp", -1), |                             feedItem.optLong("taken_at_timestamp", -1), | ||||||
|                             feedItem.getBoolean("viewer_has_liked"), |                             feedItem.getBoolean("viewer_has_liked"), | ||||||
|                             feedItem.getBoolean("viewer_has_saved")); |                             feedItem.getBoolean("viewer_has_saved"), | ||||||
|  |                             feedItem.getJSONObject("edge_media_preview_like").getLong("count")); | ||||||
| 
 | 
 | ||||||
|                     final boolean isSlider = "GraphSidecar".equals(mediaType) && feedItem.has("edge_sidecar_to_children"); |                     final boolean isSlider = "GraphSidecar".equals(mediaType) && feedItem.has("edge_sidecar_to_children"); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -81,6 +81,7 @@ public final class PostFetcher extends AsyncTask<Void, Void, ViewerPostModel[]> | |||||||
|                     endCursor = commentObject.optString("end_cursor"); |                     endCursor = commentObject.optString("end_cursor"); | ||||||
| 
 | 
 | ||||||
|                 if (mediaItemType != MediaItemType.MEDIA_TYPE_SLIDER) { |                 if (mediaItemType != MediaItemType.MEDIA_TYPE_SLIDER) { | ||||||
|  |                     Log.d("austin_debug", "m: "+media); | ||||||
|                     final ViewerPostModel postModel = new ViewerPostModel(mediaItemType, |                     final ViewerPostModel postModel = new ViewerPostModel(mediaItemType, | ||||||
|                             media.getString(Constants.EXTRAS_ID), |                             media.getString(Constants.EXTRAS_ID), | ||||||
|                             isVideo ? media.getString("video_url") : Utils.getHighQualityImage(media), |                             isVideo ? media.getString("video_url") : Utils.getHighQualityImage(media), | ||||||
|  | |||||||
| @ -107,7 +107,7 @@ public final class PostsFetcher extends AsyncTask<Void, Void, PostModel[]> { | |||||||
|                             mediaNode.getString(Constants.EXTRAS_SHORTCODE), |                             mediaNode.getString(Constants.EXTRAS_SHORTCODE), | ||||||
|                             captions.length() > 0 ? captions.getJSONObject(0).getJSONObject("node").getString("text") : null, |                             captions.length() > 0 ? captions.getJSONObject(0).getJSONObject("node").getString("text") : null, | ||||||
|                             mediaNode.getLong("taken_at_timestamp"), mediaNode.optBoolean("viewer_has_liked"), |                             mediaNode.getLong("taken_at_timestamp"), mediaNode.optBoolean("viewer_has_liked"), | ||||||
|                             mediaNode.optBoolean("viewer_has_saved")); |                             mediaNode.optBoolean("viewer_has_saved"), mediaNode.getJSONObject("edge_liked_by").getLong("count")); | ||||||
| 
 | 
 | ||||||
|                     Utils.checkExistence(downloadDir, customDir, username, isSlider, -1, models[i]); |                     Utils.checkExistence(downloadDir, customDir, username, isSlider, -1, models[i]); | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -48,7 +48,9 @@ public class VideoAwareRecyclerScroller extends RecyclerView.OnScrollListener { | |||||||
|             if (tag instanceof FeedModel && context instanceof Activity) { |             if (tag instanceof FeedModel && context instanceof Activity) { | ||||||
|                 if (player != null) player.setPlayWhenReady(false); |                 if (player != null) player.setPlayWhenReady(false); | ||||||
|                 ((Activity) context).startActivityForResult(new Intent(context, CommentsViewer.class) |                 ((Activity) context).startActivityForResult(new Intent(context, CommentsViewer.class) | ||||||
|                         .putExtra(Constants.EXTRAS_SHORTCODE, ((FeedModel) tag).getShortCode()), 6969); |                         .putExtra(Constants.EXTRAS_SHORTCODE, ((FeedModel) tag).getShortCode()) | ||||||
|  |                         .putExtra(Constants.EXTRAS_POST, ((FeedModel) tag).getPostId()) | ||||||
|  |                         .putExtra(Constants.EXTRAS_POST, ((FeedModel) tag).getProfileModel().getId()), 6969); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| @ -56,7 +58,7 @@ public class VideoAwareRecyclerScroller extends RecyclerView.OnScrollListener { | |||||||
|         if (player == null) return; |         if (player == null) return; | ||||||
|         final float intVol = player.getVolume() == 0f ? 1f : 0f; |         final float intVol = player.getVolume() == 0f ? 1f : 0f; | ||||||
|         player.setVolume(intVol); |         player.setVolume(intVol); | ||||||
|         if (btnMute != null) btnMute.setImageResource(intVol == 0f ? R.drawable.vol : R.drawable.mute); |         if (btnMute != null) btnMute.setImageResource(intVol == 0f ? R.drawable.mute : R.drawable.vol); | ||||||
|         Utils.sessionVolumeFull = intVol == 1f; |         Utils.sessionVolumeFull = intVol == 1f; | ||||||
|     }; |     }; | ||||||
|     private final VideoChangeCallback videoChangeCallback; |     private final VideoChangeCallback videoChangeCallback; | ||||||
|  | |||||||
| @ -36,6 +36,7 @@ public final class QuickAccessDialog extends BottomSheetDialogFragment implement | |||||||
|     private String userQuery; |     private String userQuery; | ||||||
|     private View btnFavorite, btnImportExport; |     private View btnFavorite, btnImportExport; | ||||||
|     private SimpleAdapter<DataBox.FavoriteModel> favoritesAdapter; |     private SimpleAdapter<DataBox.FavoriteModel> favoritesAdapter; | ||||||
|  |     private RecyclerView rvFavorites, rvQuickAccess; | ||||||
| 
 | 
 | ||||||
|     public QuickAccessDialog setQuery(final String userQuery) { |     public QuickAccessDialog setQuery(final String userQuery) { | ||||||
|         this.userQuery = userQuery; |         this.userQuery = userQuery; | ||||||
| @ -66,8 +67,8 @@ public final class QuickAccessDialog extends BottomSheetDialogFragment implement | |||||||
|         btnFavorite.setOnClickListener(this); |         btnFavorite.setOnClickListener(this); | ||||||
|         btnImportExport.setOnClickListener(this); |         btnImportExport.setOnClickListener(this); | ||||||
| 
 | 
 | ||||||
|         final RecyclerView rvFavorites = contentView.findViewById(R.id.rvFavorites); |         rvFavorites = contentView.findViewById(R.id.rvFavorites); | ||||||
|         final RecyclerView rvQuickAccess = contentView.findViewById(R.id.rvQuickAccess); |         rvQuickAccess = contentView.findViewById(R.id.rvQuickAccess); | ||||||
| 
 | 
 | ||||||
|         final DividerItemDecoration itemDecoration = new DividerItemDecoration(activity, DividerItemDecoration.VERTICAL); |         final DividerItemDecoration itemDecoration = new DividerItemDecoration(activity, DividerItemDecoration.VERTICAL); | ||||||
|         rvFavorites.addItemDecoration(itemDecoration); |         rvFavorites.addItemDecoration(itemDecoration); | ||||||
| @ -133,7 +134,10 @@ public final class QuickAccessDialog extends BottomSheetDialogFragment implement | |||||||
|         if (tag instanceof DataBox.FavoriteModel) { |         if (tag instanceof DataBox.FavoriteModel) { | ||||||
|             final DataBox.FavoriteModel favoriteModel = (DataBox.FavoriteModel) tag; |             final DataBox.FavoriteModel favoriteModel = (DataBox.FavoriteModel) tag; | ||||||
| 
 | 
 | ||||||
|             new AlertDialog.Builder(activity).setPositiveButton(R.string.yes, (d, which) -> Utils.dataBox.delFavorite(favoriteModel)) |             new AlertDialog.Builder(activity).setPositiveButton(R.string.yes, (d, which) -> { | ||||||
|  |                 Utils.dataBox.delFavorite(favoriteModel); | ||||||
|  |                 rvFavorites.findViewWithTag(favoriteModel).setVisibility(View.GONE); | ||||||
|  |             }) | ||||||
|             .setNegativeButton(R.string.no, null).setMessage(getString(R.string.quick_access_confirm_delete, |             .setNegativeButton(R.string.no, null).setMessage(getString(R.string.quick_access_confirm_delete, | ||||||
|             favoriteModel.getQuery())).show(); |             favoriteModel.getQuery())).show(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ public final class MultiDirectDialog extends BaseLanguageActivity { | |||||||
|         for (final ViewerPostModel postModel : postModels) |         for (final ViewerPostModel postModel : postModels) | ||||||
|             models.add(new PostModel(postModel.getItemType(), postModel.getPostId(), postModel.getDisplayUrl(), |             models.add(new PostModel(postModel.getItemType(), postModel.getPostId(), postModel.getDisplayUrl(), | ||||||
|                     postModel.getSliderDisplayUrl(), postModel.getShortCode(), postModel.getPostCaption(), postModel.getTimestamp(), |                     postModel.getSliderDisplayUrl(), postModel.getShortCode(), postModel.getPostCaption(), postModel.getTimestamp(), | ||||||
|                     postModel.getLike(), postModel.getBookmark())); |                     postModel.getLike(), postModel.getBookmark(), postModel.getLikes())); | ||||||
| 
 | 
 | ||||||
|         postsAdapter = new PostsAdapter(models, v -> { |         postsAdapter = new PostsAdapter(models, v -> { | ||||||
|             final Object tag = v.getTag(); |             final Object tag = v.getTag(); | ||||||
|  | |||||||
| @ -19,10 +19,14 @@ public abstract class BasePostModel implements Serializable { | |||||||
|     protected long timestamp; |     protected long timestamp; | ||||||
|     protected int position; |     protected int position; | ||||||
|     boolean liked, bookmarked; |     boolean liked, bookmarked; | ||||||
|  |     long likes; | ||||||
| 
 | 
 | ||||||
|     public boolean getLike() { |     public boolean getLike() { | ||||||
|         return liked; |         return liked; | ||||||
|     } |     } | ||||||
|  |     public long getLikes() { | ||||||
|  |         return likes; | ||||||
|  |     } | ||||||
|     public boolean getBookmark() { |     public boolean getBookmark() { | ||||||
|         return bookmarked; |         return bookmarked; | ||||||
|     } |     } | ||||||
| @ -30,6 +34,14 @@ public abstract class BasePostModel implements Serializable { | |||||||
|     public boolean setLike(final boolean like) { |     public boolean setLike(final boolean like) { | ||||||
|         liked = like; return liked; |         liked = like; return liked; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // setManualLike means user liked from InstaGrabber | ||||||
|  |     public boolean setManualLike(final boolean like) { | ||||||
|  |         liked = like; | ||||||
|  |         likes = (like) ? (likes + 1) : (likes - 1); | ||||||
|  |         return liked; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public boolean setBookmark(final boolean bookmark) { |     public boolean setBookmark(final boolean bookmark) { | ||||||
|         bookmarked = bookmark; return bookmarked; |         bookmarked = bookmark; return bookmarked; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -12,13 +12,15 @@ public final class CommentModel { | |||||||
|     private final CharSequence text; |     private final CharSequence text; | ||||||
|     private final long likes, timestamp; |     private final long likes, timestamp; | ||||||
|     private CommentModel[] childCommentModels; |     private CommentModel[] childCommentModels; | ||||||
|     private boolean hasNextPage; |     private boolean hasNextPage, liked; | ||||||
|     private String endCursor; |     private String endCursor; | ||||||
| 
 | 
 | ||||||
|     public CommentModel(final String id, final String text, final long timestamp, final long likes, final ProfileModel profileModel) { |     public CommentModel(final String id, final String text, final long timestamp, final long likes, final boolean liked, | ||||||
|  |                         final ProfileModel profileModel) { | ||||||
|         this.id = id; |         this.id = id; | ||||||
|         this.text = Utils.hasMentions(text) ? Utils.getMentionText(text) : text; |         this.text = Utils.hasMentions(text) ? Utils.getMentionText(text) : text; | ||||||
|         this.likes = likes; |         this.likes = likes; | ||||||
|  |         this.liked = liked; | ||||||
|         this.timestamp = timestamp; |         this.timestamp = timestamp; | ||||||
|         this.profileModel = profileModel; |         this.profileModel = profileModel; | ||||||
|     } |     } | ||||||
| @ -40,6 +42,10 @@ public final class CommentModel { | |||||||
|         return likes; |         return likes; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public boolean getLiked() { | ||||||
|  |         return liked; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public ProfileModel getProfileModel() { |     public ProfileModel getProfileModel() { | ||||||
|         return profileModel; |         return profileModel; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -10,8 +10,8 @@ public final class FeedModel extends PostModel { | |||||||
| 
 | 
 | ||||||
|     public FeedModel(final ProfileModel profileModel, final MediaItemType itemType, final long viewCount, final String postId, |     public FeedModel(final ProfileModel profileModel, final MediaItemType itemType, final long viewCount, final String postId, | ||||||
|                      final String displayUrl, final String thumbnailUrl, final String shortCode, final String postCaption, |                      final String displayUrl, final String thumbnailUrl, final String shortCode, final String postCaption, | ||||||
|                      final long commentsCount, final long timestamp, boolean liked, boolean bookmarked) { |                      final long commentsCount, final long timestamp, boolean liked, boolean bookmarked, long likes) { | ||||||
|         super(itemType, postId, displayUrl, thumbnailUrl, shortCode, postCaption, timestamp, liked, bookmarked); |         super(itemType, postId, displayUrl, thumbnailUrl, shortCode, postCaption, timestamp, liked, bookmarked, likes); | ||||||
|         this.profileModel = profileModel; |         this.profileModel = profileModel; | ||||||
|         this.commentsCount = commentsCount; |         this.commentsCount = commentsCount; | ||||||
|         this.viewCount = viewCount; |         this.viewCount = viewCount; | ||||||
|  | |||||||
| @ -13,7 +13,8 @@ public class PostModel extends BasePostModel { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public PostModel(final MediaItemType itemType, final String postId, final String displayUrl, final String thumbnailUrl, |     public PostModel(final MediaItemType itemType, final String postId, final String displayUrl, final String thumbnailUrl, | ||||||
|                      final String shortCode, final CharSequence postCaption, long timestamp, boolean liked, boolean bookmarked) { |                      final String shortCode, final CharSequence postCaption, long timestamp, boolean liked, boolean bookmarked, | ||||||
|  |                      long likes) { | ||||||
|         this.itemType = itemType; |         this.itemType = itemType; | ||||||
|         this.postId = postId; |         this.postId = postId; | ||||||
|         this.displayUrl = displayUrl; |         this.displayUrl = displayUrl; | ||||||
| @ -22,6 +23,7 @@ public class PostModel extends BasePostModel { | |||||||
|         this.postCaption = postCaption; |         this.postCaption = postCaption; | ||||||
|         this.timestamp = timestamp; |         this.timestamp = timestamp; | ||||||
|         this.liked = liked; |         this.liked = liked; | ||||||
|  |         this.likes = likes; | ||||||
|         this.bookmarked = bookmarked; |         this.bookmarked = bookmarked; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -33,6 +35,10 @@ public class PostModel extends BasePostModel { | |||||||
|         return endCursor; |         return endCursor; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public long getLikes() { | ||||||
|  |         return likes; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public boolean hasNextPage() { |     public boolean hasNextPage() { | ||||||
|         return endCursor != null && hasNextPage; |         return endCursor != null && hasNextPage; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ public final class FlavorTown { | |||||||
|         Resources res = context.getResources(); |         Resources res = context.getResources(); | ||||||
|         new UpdateChecker(version -> { |         new UpdateChecker(version -> { | ||||||
|             new AlertDialog.Builder(context) |             new AlertDialog.Builder(context) | ||||||
|                     .setTitle(res.getString(R.string.update_available) + " (" + version + ")") |                     .setTitle(res.getString(R.string.update_available, version)) | ||||||
|                     .setMessage(R.string.update_notice) |                     .setMessage(R.string.update_notice) | ||||||
|                     .setNeutralButton(R.string.cancel, null) |                     .setNeutralButton(R.string.cancel, null) | ||||||
|                     .setNegativeButton(R.string.action_github, (dialog, which) -> { |                     .setNegativeButton(R.string.action_github, (dialog, which) -> { | ||||||
|  | |||||||
| @ -5,12 +5,19 @@ | |||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="match_parent" | ||||||
|     android:orientation="vertical" |     android:orientation="vertical" | ||||||
|     tools:context=".activities.CommentsViewer"> |     tools:context=".activities.CommentsViewer" | ||||||
|  |     android:weightSum="8"> | ||||||
| 
 | 
 | ||||||
|     <include |     <include | ||||||
|         android:id="@+id/toolbar" |         android:id="@+id/toolbar" | ||||||
|  |         android:layout_weight="1" | ||||||
|         layout="@layout/layout_include_toolbar" /> |         layout="@layout/layout_include_toolbar" /> | ||||||
| 
 | 
 | ||||||
|  |     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout | ||||||
|  |         android:id="@+id/swipeRefreshLayout" | ||||||
|  |         android:layout_weight="8" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent"> | ||||||
|         <androidx.recyclerview.widget.RecyclerView |         <androidx.recyclerview.widget.RecyclerView | ||||||
|             android:id="@+id/rvComments" |             android:id="@+id/rvComments" | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
| @ -22,4 +29,43 @@ | |||||||
|             android:paddingRight="8dp" |             android:paddingRight="8dp" | ||||||
|             app:layoutManager="LinearLayoutManager" |             app:layoutManager="LinearLayoutManager" | ||||||
|             tools:listitem="@layout/item_comment" /> |             tools:listitem="@layout/item_comment" /> | ||||||
|  |     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> | ||||||
|  | 
 | ||||||
|  |     <LinearLayout android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content"> | ||||||
|  | 
 | ||||||
|  |         <androidx.appcompat.widget.AppCompatImageView | ||||||
|  |             android:id="@+id/commentCancelParent" | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:background="?selectableItemBackgroundBorderless" | ||||||
|  |             android:clickable="true" | ||||||
|  |             android:paddingRight="8dp" | ||||||
|  |             android:visibility="gone" | ||||||
|  |             app:srcCompat="@android:drawable/ic_menu_revert" /> | ||||||
|  |         <EditText | ||||||
|  |             android:id="@+id/commentText" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_weight="2" | ||||||
|  |             android:paddingLeft="8dp" | ||||||
|  |             android:gravity="bottom" | ||||||
|  |             android:hint="@string/comment_hint" | ||||||
|  |             android:inputType="textMultiLine" | ||||||
|  |             android:maxLength="2200" | ||||||
|  |             android:maxLines="10" | ||||||
|  |             android:visibility="gone" | ||||||
|  |             android:scrollHorizontally="false" /> | ||||||
|  | 
 | ||||||
|  |         <androidx.appcompat.widget.AppCompatImageView | ||||||
|  |             android:id="@+id/commentSend" | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:background="?selectableItemBackgroundBorderless" | ||||||
|  |             android:clickable="true" | ||||||
|  |             android:paddingRight="8dp" | ||||||
|  |             android:visibility="gone" | ||||||
|  |             app:srcCompat="@android:drawable/ic_menu_send" /> | ||||||
|  | 
 | ||||||
|  |     </LinearLayout> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @ -116,7 +116,7 @@ | |||||||
|             android:layout_weight="1" |             android:layout_weight="1" | ||||||
|             android:text="@string/like" |             android:text="@string/like" | ||||||
|             android:textColor="@color/btn_lightpink_text_color" |             android:textColor="@color/btn_lightpink_text_color" | ||||||
|             android:textSize="20sp" |             android:textSize="18sp" | ||||||
|             app:backgroundTint="@color/btn_lightpink_background" /> |             app:backgroundTint="@color/btn_lightpink_background" /> | ||||||
| 
 | 
 | ||||||
|         <androidx.appcompat.widget.AppCompatButton |         <androidx.appcompat.widget.AppCompatButton | ||||||
| @ -130,7 +130,7 @@ | |||||||
|             android:layout_weight="1" |             android:layout_weight="1" | ||||||
|             android:text="@string/bookmark" |             android:text="@string/bookmark" | ||||||
|             android:textColor="@color/btn_lightorange_text_color" |             android:textColor="@color/btn_lightorange_text_color" | ||||||
|             android:textSize="20sp" |             android:textSize="18sp" | ||||||
|             app:backgroundTint="@color/btn_lightorange_background" /> |             app:backgroundTint="@color/btn_lightorange_background" /> | ||||||
|     </androidx.appcompat.widget.LinearLayoutCompat> |     </androidx.appcompat.widget.LinearLayoutCompat> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @ -35,13 +35,9 @@ | |||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|             android:orientation="vertical"> |             android:orientation="vertical"> | ||||||
| 
 | 
 | ||||||
|             <LinearLayout |  | ||||||
|                 android:layout_width="match_parent" |  | ||||||
|                 android:layout_height="wrap_content"> |  | ||||||
| 
 |  | ||||||
|                 <androidx.appcompat.widget.AppCompatTextView |                 <androidx.appcompat.widget.AppCompatTextView | ||||||
|                     android:id="@+id/tvUsername" |                     android:id="@+id/tvUsername" | ||||||
|                     android:layout_width="0dp" |                     android:layout_width="match_parent" | ||||||
|                     android:layout_height="wrap_content" |                     android:layout_height="wrap_content" | ||||||
|                     android:layout_gravity="start" |                     android:layout_gravity="start" | ||||||
|                     android:layout_weight="1.0" |                     android:layout_weight="1.0" | ||||||
| @ -56,20 +52,6 @@ | |||||||
|                     android:textColor="?android:textColorPrimary" |                     android:textColor="?android:textColorPrimary" | ||||||
|                     android:textStyle="bold" /> |                     android:textStyle="bold" /> | ||||||
| 
 | 
 | ||||||
|                 <androidx.appcompat.widget.AppCompatTextView |  | ||||||
|                     android:id="@+id/tvDate" |  | ||||||
|                     android:layout_width="wrap_content" |  | ||||||
|                     android:layout_height="wrap_content" |  | ||||||
|                     android:layout_gravity="start" |  | ||||||
|                     android:ellipsize="marquee" |  | ||||||
|                     android:paddingStart="4dp" |  | ||||||
|                     android:paddingLeft="4dp" |  | ||||||
|                     android:paddingTop="4dp" |  | ||||||
|                     android:paddingEnd="8dp" |  | ||||||
|                     android:paddingRight="8dp" |  | ||||||
|                     android:singleLine="true" |  | ||||||
|                     android:textStyle="italic" /> |  | ||||||
|             </LinearLayout> |  | ||||||
| 
 | 
 | ||||||
|             <awais.instagrabber.customviews.RamboTextView |             <awais.instagrabber.customviews.RamboTextView | ||||||
|                 android:id="@+id/tvComment" |                 android:id="@+id/tvComment" | ||||||
| @ -86,11 +68,15 @@ | |||||||
|                 android:paddingRight="8dp" |                 android:paddingRight="8dp" | ||||||
|                 android:paddingBottom="8dp" |                 android:paddingBottom="8dp" | ||||||
|                 android:textAppearance="@style/TextAppearance.AppCompat" /> |                 android:textAppearance="@style/TextAppearance.AppCompat" /> | ||||||
| 
 |             <LinearLayout | ||||||
|             <androidx.appcompat.widget.AppCompatTextView |  | ||||||
|                 android:id="@+id/tvLikes" |  | ||||||
|                 android:layout_width="match_parent" |                 android:layout_width="match_parent" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
|  |                 android:weightSum="3.5"> | ||||||
|  |             <androidx.appcompat.widget.AppCompatTextView | ||||||
|  |                 android:id="@+id/tvLikes" | ||||||
|  |                 android:layout_width="0dp" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="1" | ||||||
|                 android:ellipsize="marquee" |                 android:ellipsize="marquee" | ||||||
|                 android:paddingStart="4dp" |                 android:paddingStart="4dp" | ||||||
|                 android:paddingLeft="4dp" |                 android:paddingLeft="4dp" | ||||||
| @ -100,6 +86,23 @@ | |||||||
|                 android:singleLine="true" |                 android:singleLine="true" | ||||||
|                 android:textAppearance="@style/TextAppearance.AppCompat.Small" |                 android:textAppearance="@style/TextAppearance.AppCompat.Small" | ||||||
|                 android:textSize="12sp" /> |                 android:textSize="12sp" /> | ||||||
|  | 
 | ||||||
|  |                 <androidx.appcompat.widget.AppCompatTextView | ||||||
|  |                     android:id="@+id/tvDate" | ||||||
|  |                     android:layout_width="0dp" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_weight="2.5" | ||||||
|  |                     android:layout_gravity="start" | ||||||
|  |                     android:ellipsize="marquee" | ||||||
|  |                     android:paddingStart="4dp" | ||||||
|  |                     android:paddingLeft="4dp" | ||||||
|  |                     android:paddingTop="4dp" | ||||||
|  |                     android:paddingEnd="8dp" | ||||||
|  |                     android:paddingRight="8dp" | ||||||
|  |                     android:singleLine="true" | ||||||
|  |                     android:textStyle="italic" | ||||||
|  |                     android:gravity="right"/> | ||||||
|  |             </LinearLayout> | ||||||
|         </LinearLayout> |         </LinearLayout> | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @ -51,13 +51,9 @@ | |||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:orientation="vertical"> |         android:orientation="vertical"> | ||||||
| 
 | 
 | ||||||
|         <LinearLayout |  | ||||||
|             android:layout_width="match_parent" |  | ||||||
|             android:layout_height="wrap_content"> |  | ||||||
| 
 |  | ||||||
|             <androidx.appcompat.widget.AppCompatTextView |             <androidx.appcompat.widget.AppCompatTextView | ||||||
|                 android:id="@+id/tvUsername" |                 android:id="@+id/tvUsername" | ||||||
|                 android:layout_width="0dp" |                 android:layout_width="match_parent" | ||||||
|                 android:layout_height="wrap_content" |                 android:layout_height="wrap_content" | ||||||
|                 android:layout_gravity="start" |                 android:layout_gravity="start" | ||||||
|                 android:layout_weight="1.0" |                 android:layout_weight="1.0" | ||||||
| @ -72,21 +68,6 @@ | |||||||
|                 android:textColor="?android:textColorPrimary" |                 android:textColor="?android:textColorPrimary" | ||||||
|                 android:textStyle="bold" /> |                 android:textStyle="bold" /> | ||||||
| 
 | 
 | ||||||
|             <androidx.appcompat.widget.AppCompatTextView |  | ||||||
|                 android:id="@+id/tvDate" |  | ||||||
|                 android:layout_width="wrap_content" |  | ||||||
|                 android:layout_height="wrap_content" |  | ||||||
|                 android:layout_gravity="start" |  | ||||||
|                 android:ellipsize="marquee" |  | ||||||
|                 android:paddingStart="4dp" |  | ||||||
|                 android:paddingLeft="4dp" |  | ||||||
|                 android:paddingTop="4dp" |  | ||||||
|                 android:paddingEnd="8dp" |  | ||||||
|                 android:paddingRight="8dp" |  | ||||||
|                 android:singleLine="true" |  | ||||||
|                 android:textStyle="italic" /> |  | ||||||
|         </LinearLayout> |  | ||||||
| 
 |  | ||||||
|             <LinearLayout |             <LinearLayout | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
| @ -118,10 +99,15 @@ | |||||||
|                 android:textAppearance="@style/TextAppearance.AppCompat" /> |                 android:textAppearance="@style/TextAppearance.AppCompat" /> | ||||||
|         </LinearLayout> |         </LinearLayout> | ||||||
| 
 | 
 | ||||||
|         <androidx.appcompat.widget.AppCompatTextView |         <LinearLayout | ||||||
|             android:id="@+id/tvLikes" |  | ||||||
|             android:layout_width="match_parent" |             android:layout_width="match_parent" | ||||||
|             android:layout_height="wrap_content" |             android:layout_height="wrap_content" | ||||||
|  |             android:weightSum="3"> | ||||||
|  |             <androidx.appcompat.widget.AppCompatTextView | ||||||
|  |                 android:id="@+id/tvLikes" | ||||||
|  |                 android:layout_width="0dp" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="1" | ||||||
|                 android:ellipsize="marquee" |                 android:ellipsize="marquee" | ||||||
|                 android:paddingStart="4dp" |                 android:paddingStart="4dp" | ||||||
|                 android:paddingLeft="4dp" |                 android:paddingLeft="4dp" | ||||||
| @ -131,5 +117,22 @@ | |||||||
|                 android:singleLine="true" |                 android:singleLine="true" | ||||||
|                 android:textAppearance="@style/TextAppearance.AppCompat.Small" |                 android:textAppearance="@style/TextAppearance.AppCompat.Small" | ||||||
|                 android:textSize="14sp" /> |                 android:textSize="14sp" /> | ||||||
|  |             <androidx.appcompat.widget.AppCompatTextView | ||||||
|  |                 android:id="@+id/tvDate" | ||||||
|  |                 android:layout_width="0dp" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="2" | ||||||
|  |                 android:layout_gravity="start" | ||||||
|  |                 android:ellipsize="marquee" | ||||||
|  |                 android:paddingStart="4dp" | ||||||
|  |                 android:paddingLeft="4dp" | ||||||
|  |                 android:paddingTop="4dp" | ||||||
|  |                 android:paddingEnd="8dp" | ||||||
|  |                 android:paddingRight="8dp" | ||||||
|  |                 android:singleLine="true" | ||||||
|  |                 android:textStyle="italic" | ||||||
|  |                 android:gravity="right"/> | ||||||
|  |         </LinearLayout> | ||||||
|  | 
 | ||||||
|     </LinearLayout> |     </LinearLayout> | ||||||
| </LinearLayout> | </LinearLayout> | ||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s not following</string> |     <string name="followers_not_follower">%s not following</string> | ||||||
|     <string name="login_error_loading_cookies">Error loading cookies</string> |     <string name="login_error_loading_cookies">Error loading cookies</string> | ||||||
|     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> |     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">App crashed</string> |     <string name="crash_title">App crashed</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s no está siguiendo</string> |     <string name="followers_not_follower">%s no está siguiendo</string> | ||||||
|     <string name="login_error_loading_cookies">Error al cargar cookies</string> |     <string name="login_error_loading_cookies">Error al cargar cookies</string> | ||||||
|     <string name="login_success_loading_cookies">¡Cookies cargadas con éxito!\nSi aún no puedes abrir páginas/publicaciones privadas, ¡vuelve a ingresar!</string> |     <string name="login_success_loading_cookies">¡Cookies cargadas con éxito!\nSi aún no puedes abrir páginas/publicaciones privadas, ¡vuelve a ingresar!</string> | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">App atascada</string> |     <string name="crash_title">App atascada</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">Comptes non suivis par %s </string> |     <string name="followers_not_follower">Comptes non suivis par %s </string> | ||||||
|     <string name="login_error_loading_cookies">Erreur de chargement des cookies</string> |     <string name="login_error_loading_cookies">Erreur de chargement des cookies</string> | ||||||
|     <string name="login_success_loading_cookies">Cookies chargés avec succès!\nSi vous ne pouvez toujours pas ouvrir de pages/postes privés, reconnectez-vous !</string> |     <string name="login_success_loading_cookies">Cookies chargés avec succès!\nSi vous ne pouvez toujours pas ouvrir de pages/postes privés, reconnectez-vous !</string> | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">L\'application a planté</string> |     <string name="crash_title">L\'application a planté</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s tidak mengikuti</string> |     <string name="followers_not_follower">%s tidak mengikuti</string> | ||||||
|     <string name="login_error_loading_cookies">Galat memuat cookies</string> |     <string name="login_error_loading_cookies">Galat memuat cookies</string> | ||||||
|     <string name="login_success_loading_cookies">Berhasil memuat cookies!\nJika anda tetap tidak dapat membuka laman/kiriman pribadi, coba masuk lagi!</string> |     <string name="login_success_loading_cookies">Berhasil memuat cookies!\nJika anda tetap tidak dapat membuka laman/kiriman pribadi, coba masuk lagi!</string> | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">Aplikasi berhenti bekerja…</string> |     <string name="crash_title">Aplikasi berhenti bekerja…</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s non segue</string> |     <string name="followers_not_follower">%s non segue</string> | ||||||
|     <string name="login_error_loading_cookies"> Errore durante il caricamento dei cookie</string> |     <string name="login_error_loading_cookies"> Errore durante il caricamento dei cookie</string> | ||||||
|     <string name="login_success_loading_cookies">Cookie caricati correttamente! \nSe non riesci ancora ad aprire pagine / post privati, accedi nuovamente!</string> |     <string name="login_success_loading_cookies">Cookie caricati correttamente! \nSe non riesci ancora ad aprire pagine / post privati, accedi nuovamente!</string> | ||||||
|     <string name="update_available">Un aggiornamento è disponibile!</string> |     <string name="update_available">Un aggiornamento è disponibile! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Grazie per aver aggiornato InstaGrabber!</string> |     <string name="updated">Grazie per aver aggiornato InstaGrabber!</string> | ||||||
|     <string name="crash_title">L\'app si è arrestata in modo anomalo</string> |     <string name="crash_title">L\'app si è arrestata in modo anomalo</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s not following</string> |     <string name="followers_not_follower">%s not following</string> | ||||||
|     <string name="login_error_loading_cookies">Error loading cookies</string> |     <string name="login_error_loading_cookies">Error loading cookies</string> | ||||||
|     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> |     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">App crashed</string> |     <string name="crash_title">App crashed</string> | ||||||
|  | |||||||
| @ -157,7 +157,7 @@ | |||||||
|     <string name="followers_not_follower">%s 未关注</string> |     <string name="followers_not_follower">%s 未关注</string> | ||||||
|     <string name="login_error_loading_cookies">载入 cookies 时出错</string> |     <string name="login_error_loading_cookies">载入 cookies 时出错</string> | ||||||
|     <string name="login_success_loading_cookies">成功载入 cookies!\n若你仍不能查看私密页面/帖子,重新登录!</string> |     <string name="login_success_loading_cookies">成功载入 cookies!\n若你仍不能查看私密页面/帖子,重新登录!</string> | ||||||
|     <string name="update_available">检测到有新版本!</string> |     <string name="update_available">检测到有新版本! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">感谢阁下更新InstaGrabber!</string> |     <string name="updated">感谢阁下更新InstaGrabber!</string> | ||||||
|     <string name="crash_title">应用崩溃了</string> |     <string name="crash_title">应用崩溃了</string> | ||||||
|  | |||||||
| @ -8,6 +8,8 @@ | |||||||
|         <item>Chinese Simplified</item> |         <item>Chinese Simplified</item> | ||||||
|         <item>Indonesian [Thanks to @Galang23 (GitLab)]</item> |         <item>Indonesian [Thanks to @Galang23 (GitLab)]</item> | ||||||
|         <item>Italian [Thanks to @RAR_Ramar (Telegram)]</item> |         <item>Italian [Thanks to @RAR_Ramar (Telegram)]</item> | ||||||
|  |         <item>German [Thanks to @MoaufmKlo (GitHub)]</item> | ||||||
|  |         <item>Polish [Thanks to @Lego8486 (GitHub)]</item> | ||||||
|     </string-array> |     </string-array> | ||||||
| 
 | 
 | ||||||
|     <string-array name="theme_presets"> |     <string-array name="theme_presets"> | ||||||
|  | |||||||
| @ -82,8 +82,8 @@ | |||||||
|     <string name="telegram_link">Join Telegram Group</string> |     <string name="telegram_link">Join Telegram Group</string> | ||||||
|     <string name="matrix_link">Join Matrix Room</string> |     <string name="matrix_link">Join Matrix Room</string> | ||||||
| 
 | 
 | ||||||
|     <string name="like">Like</string> |     <string name="like">Like (%s)</string> | ||||||
|     <string name="unlike">Unlike</string> |     <string name="unlike">Unlike (%s)</string> | ||||||
|     <string name="bookmark">Bookmark</string> |     <string name="bookmark">Bookmark</string> | ||||||
|     <string name="unbookmark">Unbookmark</string> |     <string name="unbookmark">Unbookmark</string> | ||||||
| 
 | 
 | ||||||
| @ -173,6 +173,11 @@ | |||||||
| 
 | 
 | ||||||
|     <string name="comment_viewer_copy_user">Copy username</string> |     <string name="comment_viewer_copy_user">Copy username</string> | ||||||
|     <string name="comment_viewer_copy_comment">Copy comment</string> |     <string name="comment_viewer_copy_comment">Copy comment</string> | ||||||
|  |     <string name="comment_viewer_reply_comment">Reply to comment</string> | ||||||
|  |     <string name="comment_viewer_like_comment">Like comment</string> | ||||||
|  |     <string name="comment_viewer_unlike_comment">Unlike comment</string> | ||||||
|  |     <string name="comment_viewer_delete_comment">Delete comment</string> | ||||||
|  |     <string name="comment_send_empty_comment">No empty comments, dawg!</string> | ||||||
|     <string name="comment_view_mention_user_search">Do you want to search the username?</string> |     <string name="comment_view_mention_user_search">Do you want to search the username?</string> | ||||||
|     <string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string> |     <string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string> | ||||||
| 
 | 
 | ||||||
| @ -186,7 +191,9 @@ | |||||||
|     <string name="login_error_loading_cookies">Error loading cookies</string> |     <string name="login_error_loading_cookies">Error loading cookies</string> | ||||||
|     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> |     <string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string> | ||||||
| 
 | 
 | ||||||
|     <string name="update_available">An update is available!</string> |     <string name="comment_hint">Write a new comment...</string> | ||||||
|  | 
 | ||||||
|  |     <string name="update_available">An update is available! (%s)</string> | ||||||
|     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |     <string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> | ||||||
|     <string name="updated">Thank you for updating InstaGrabber!</string> |     <string name="updated">Thank you for updating InstaGrabber!</string> | ||||||
|     <string name="crash_title">App crashed</string> |     <string name="crash_title">App crashed</string> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user