1
0
Fork 0
mirror of https://github.com/KokaKiwi/BarInsta synced 2026-03-05 20:11:36 +00:00

Migrate Profile bio and url views to RamboTextViewV2

This commit is contained in:
Ammar Githam 2020-11-07 00:52:04 +09:00
parent d0bfe73ae6
commit cc9cab9c15
3 changed files with 31 additions and 313 deletions

View file

@ -1,241 +0,0 @@
// package awais.instagrabber.asyncs;
//
// import android.app.PendingIntent;
// import android.content.ContentResolver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.res.Resources;
// import android.graphics.Bitmap;
// import android.graphics.BitmapFactory;
// import android.media.MediaMetadataRetriever;
// import android.media.MediaScannerConnection;
// import android.net.Uri;
// import android.os.AsyncTask;
// import android.os.Build;
// import android.util.Log;
// import android.util.Pair;
//
// import androidx.annotation.NonNull;
// import androidx.annotation.Nullable;
// import androidx.annotation.StringRes;
// import androidx.core.app.NotificationCompat;
// import androidx.core.app.NotificationManagerCompat;
// import androidx.core.content.FileProvider;
//
// import java.io.BufferedInputStream;
// import java.io.File;
// import java.io.FileOutputStream;
// import java.io.InputStream;
// import java.net.URL;
// import java.net.URLConnection;
// import java.util.concurrent.atomic.AtomicReference;
//
// import awais.instagrabber.BuildConfig;
// import awais.instagrabber.R;
// import awais.instagrabber.interfaces.FetchListener;
// import awais.instagrabber.utils.Constants;
// import awais.instagrabber.utils.Utils;
//
// import static awais.instagrabber.utils.Constants.NOTIF_GROUP_NAME;
// import static awais.instagrabber.utils.Utils.logCollector;
// import static awaisomereport.LogCollector.LogFile;
//
// public final class DownloadAsync extends AsyncTask<Void, Float, File> {
// private static final String TAG = "DownloadAsync";
//
// private static int lastNotifId = 1;
// private final int currentNotifId;
// private final AtomicReference<Context> context;
// private final File outFile;
// private final String url;
// private final FetchListener<File> fetchListener;
// private final Resources resources;
// private final NotificationCompat.Builder downloadNotif;
// private String shortCode, username;
// private final NotificationManagerCompat notificationManager;
//
// public DownloadAsync(@NonNull final Context context,
// final String url,
// final File outFile,
// final FetchListener<File> fetchListener) {
// this.context = new AtomicReference<>(context);
// this.resources = context.getResources();
// this.url = url;
// this.outFile = outFile;
// this.fetchListener = fetchListener;
// this.shortCode = this.username = resources.getString(R.string.downloader_started);
// this.currentNotifId = ++lastNotifId;
// if (++lastNotifId + 1 == Integer.MAX_VALUE) lastNotifId = 1;
//
// @StringRes final int titleRes = R.string.downloader_downloading_post;
// downloadNotif = new NotificationCompat.Builder(context, Constants.DOWNLOAD_CHANNEL_ID)
// .setCategory(NotificationCompat.CATEGORY_STATUS)
// .setSmallIcon(R.mipmap.ic_launcher)
// .setContentText(shortCode == null ? username : shortCode)
// .setOngoing(true)
// .setProgress(100, 0, false)
// .setAutoCancel(false)
// .setOnlyAlertOnce(true)
// .setContentTitle(resources.getString(titleRes));
//
// notificationManager = NotificationManagerCompat.from(context.getApplicationContext());
// notificationManager.notify(currentNotifId, downloadNotif.build());
// }
//
// public DownloadAsync setItems(final String shortCode, final String username) {
// this.shortCode = shortCode;
// this.username = username;
// if (downloadNotif != null) downloadNotif.setContentText(this.shortCode == null ? this.username : this.shortCode);
// return this;
// }
//
// @Nullable
// @Override
// protected File doInBackground(final Void... voids) {
// try {
// final URLConnection urlConnection = new URL(url).openConnection();
// final long fileSize = Build.VERSION.SDK_INT >= 24 ? urlConnection.getContentLengthLong() :
// urlConnection.getContentLength();
// float totalRead = 0;
//
// try (final BufferedInputStream bis = new BufferedInputStream(urlConnection.getInputStream());
// final FileOutputStream fos = new FileOutputStream(outFile)) {
// final byte[] buffer = new byte[0x2000];
//
// int count;
// boolean deletedIPTC = false;
// while ((count = bis.read(buffer, 0, 0x2000)) != -1) {
// totalRead = totalRead + count;
//
// if (!deletedIPTC) {
// int iptcStart = -1;
// int fbmdStart = -1;
// int fbmdBytesLen = -1;
//
// for (int i = 0; i < buffer.length; ++i) {
// if (buffer[i] == (byte) 0xFF && buffer[i + 1] == (byte) 0xED)
// iptcStart = i;
// else if (buffer[i] == (byte) 'F' && buffer[i + 1] == (byte) 'B'
// && buffer[i + 2] == (byte) 'M' && buffer[i + 3] == (byte) 'D') {
// fbmdStart = i;
// fbmdBytesLen = buffer[i - 10] << 24 | (buffer[i - 9] & 0xFF) << 16 |
// (buffer[i - 8] & 0xFF) << 8 | (buffer[i - 7] & 0xFF) |
// (buffer[i - 6] & 0xFF);
// break;
// }
// }
//
// if (iptcStart != -1 && fbmdStart != -1 && fbmdBytesLen != -1) {
// final int fbmdDataLen = (iptcStart + (fbmdStart - iptcStart) + (fbmdBytesLen - iptcStart)) - 4;
//
// fos.write(buffer, 0, iptcStart);
// fos.write(buffer, fbmdDataLen + iptcStart, count - fbmdDataLen - iptcStart);
//
// publishProgress(totalRead * 100f / fileSize);
//
// deletedIPTC = true;
// continue;
// }
// }
//
// fos.write(buffer, 0, count);
// publishProgress(totalRead * 100f / fileSize);
// }
// fos.flush();
// }
//
// return outFile;
// } catch (final Exception e) {
// if (logCollector != null)
// logCollector.appendException(e, LogFile.ASYNC_DOWNLOADER, "doInBackground",
// new Pair<>("context", context.get()),
// new Pair<>("resources", resources),
// new Pair<>("lastNotifId", lastNotifId),
// new Pair<>("downloadNotif", downloadNotif),
// new Pair<>("currentNotifId", currentNotifId),
// new Pair<>("notificationManager", notificationManager));
// if (BuildConfig.DEBUG) Log.e(TAG, "", e);
// }
// return null;
// }
//
// @Override
// protected void onPreExecute() {
// if (fetchListener != null) fetchListener.doBefore();
// }
//
// @Override
// protected void onProgressUpdate(@NonNull final Float... values) {
// if (downloadNotif != null) {
// downloadNotif.setProgress(100, values[0].intValue(), false);
// notificationManager.notify(currentNotifId, downloadNotif.build());
// }
// }
//
// @Override
// protected void onPostExecute(final File result) {
// if (result != null) {
// final Context context = this.context.get();
// context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(result.getAbsoluteFile())));
// MediaScannerConnection.scanFile(context, new String[]{result.getAbsolutePath()}, null, null);
//
// if (notificationManager != null) {
// final Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", result);
//
// final ContentResolver contentResolver = context.getContentResolver();
// Bitmap bitmap = null;
// if (Utils.isImage(uri, contentResolver)) {
// try (final InputStream inputStream = contentResolver.openInputStream(uri)) {
// bitmap = BitmapFactory.decodeStream(inputStream);
// } catch (final Exception e) {
// if (logCollector != null)
// logCollector.appendException(e, LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_1");
// if (BuildConfig.DEBUG) Log.e(TAG, "", e);
// }
// }
//
// if (bitmap == null) {
// final MediaMetadataRetriever retriever = new MediaMetadataRetriever();
// try {
// try {
// retriever.setDataSource(context, uri);
// } catch (final Exception e) {
// retriever.setDataSource(result.getAbsolutePath());
// }
// bitmap = retriever.getFrameAtTime();
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
// try {
// retriever.close();
// } catch (final Exception e) {
// if (logCollector != null)
// logCollector.appendException(e, LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_2");
// }
// } catch (final Exception e) {
// if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e);
// if (logCollector != null)
// logCollector.appendException(e, LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_3");
// }
// }
//
// final String downloadComplete = resources.getString(R.string.downloader_complete);
//
// downloadNotif.setContentText(null).setContentTitle(downloadComplete).setProgress(0, 0, false)
// .setWhen(System.currentTimeMillis()).setOngoing(false).setOnlyAlertOnce(false).setAutoCancel(true)
// .setGroup(NOTIF_GROUP_NAME).setGroupSummary(true).setContentIntent(
// PendingIntent.getActivity(context, 2020, new Intent(Intent.ACTION_VIEW, uri)
// .addFlags(
// Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
// .putExtra(Intent.EXTRA_STREAM, uri), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT));
//
// if (bitmap != null)
// downloadNotif.setStyle(new NotificationCompat.BigPictureStyle().setBigContentTitle(downloadComplete).bigPicture(bitmap))
// .setLargeIcon(bitmap).setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
//
// notificationManager.cancel(currentNotifId);
// notificationManager.notify(currentNotifId + 1, downloadNotif.build());
// }
// }
//
// if (fetchListener != null) fetchListener.onResult(result);
// }
// }

View file

@ -9,7 +9,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.SpannableStringBuilder;
import android.text.method.LinkMovementMethod;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.util.Log;
@ -20,7 +19,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
@ -90,6 +88,7 @@ import awais.instagrabber.webservices.ServiceCallback;
import awais.instagrabber.webservices.StoriesService;
import static androidx.core.content.PermissionChecker.checkSelfPermission;
import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG;
import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION;
import static awais.instagrabber.utils.Utils.settingsHelper;
@ -566,12 +565,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
} else {
binding.favCb.setVisibility(View.GONE);
}
// final ControllerListener<ImageInfo> listener = new BaseControllerListener<ImageInfo>() {
// @Override
// public void onFinalImageSet(final String id, final ImageInfo imageInfo, final Animatable animatable) {
// startPostponedEnterTransition();
// }
// };
binding.mainProfileImage.setImageURI(profileModel.getHdProfilePic());
final long followersCount = profileModel.getFollowersCount();
@ -604,33 +597,40 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
binding.mainFullName.setText(TextUtils.isEmpty(profileModel.getName()) ? profileModel.getUsername()
: profileModel.getName());
CharSequence biography = profileModel.getBiography();
if (TextUtils.hasMentions(biography)) {
biography = TextUtils.getMentionText(biography);
binding.mainBiography.setText(biography, TextView.BufferType.SPANNABLE);
binding.mainBiography.setMentionClickListener(mentionClickListener);
} else {
final String biography = profileModel.getBiography();
if (!TextUtils.isEmpty(biography)) {
binding.mainBiography.setText(biography);
binding.mainBiography.setMentionClickListener(null);
binding.mainBiography.addOnHashtagListener(autoLinkItem -> {
final NavController navController = NavHostFragment.findNavController(this);
final Bundle bundle = new Bundle();
final String originalText = autoLinkItem.getOriginalText().trim();
bundle.putString(ARG_HASHTAG, originalText);
navController.navigate(R.id.action_global_hashTagFragment, bundle);
});
binding.mainBiography.addOnMentionClickListener(autoLinkItem -> {
final String originalText = autoLinkItem.getOriginalText().trim();
navigateToProfile(originalText);
});
binding.mainBiography.addOnEmailClickListener(autoLinkItem -> Utils.openEmailAddress(getContext(),
autoLinkItem.getOriginalText().trim()));
binding.mainBiography.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
binding.mainBiography.setOnLongClickListener(v -> {
if (context != null) Utils.copyText(context, biography);
return true;
});
}
binding.mainBiography.setOnLongClickListener(v -> {
if (context != null) Utils.copyText(context, profileModel.getBiography());
return true;
});
final String url = profileModel.getUrl();
if (TextUtils.isEmpty(url)) {
binding.mainUrl.setVisibility(View.GONE);
} else {
binding.mainUrl.setVisibility(View.VISIBLE);
binding.mainUrl.setText(TextUtils.getSpannableUrl(url));
binding.mainUrl.setMovementMethod(LinkMovementMethod.getInstance());
binding.mainUrl.setText(url);
binding.mainUrl.addOnURLClickListener(autoLinkItem -> Utils.openURL(getContext(), autoLinkItem.getOriginalText().trim()));
binding.mainUrl.setOnLongClickListener(v -> {
if (context != null) Utils.copyText(context, url);
return true;
});
}
binding.mainFullName.setSelected(true);
binding.mainBiography.setEnabled(true);
binding.mainBiography.setClickable(true);
if (!profileModel.isReallyPrivate()) {
binding.mainFollowing.setClickable(true);
binding.mainFollowers.setClickable(true);
@ -904,47 +904,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe
.init();
binding.swipeRefreshLayout.setRefreshing(true);
postsSetupDone = true;
// postsAdapter = new PostsAdapter((postModel, position) -> {
// if (postsAdapter.isSelecting()) {
// if (actionMode == null) return;
// final String title = getString(R.string.number_selected,
// postsAdapter.getSelectedModels().size());
// actionMode.setTitle(title);
// return;
// }
// if (checkAndResetAction()) return;
// final List<PostModel> postModels = postsViewModel.getList().getValue();
// if (postModels == null || postModels.size() == 0) return;
// if (postModels.get(0) == null) return;
// final String postId = isLoggedIn ? postModels.get(0).getPostId() : postModels.get(0).getShortCode();
// final boolean isId = isLoggedIn && postId != null;
// final String[] idsOrShortCodes = new String[postModels.size()];
// for (int i = 0; i < postModels.size(); i++) {
// idsOrShortCodes[i] = isId ? postModels.get(i).getPostId()
// : postModels.get(i).getShortCode();
// }
// final NavDirections action = ProfileFragmentDirections.actionGlobalPostViewFragment(
// position,
// idsOrShortCodes,
// isId);
// NavHostFragment.findNavController(this).navigate(action);
//
// }, (model, position) -> {
// if (!postsAdapter.isSelecting()) {
// checkAndResetAction();
// return true;
// }
// if (onBackPressedCallback.isEnabled()) {
// return true;
// }
// final OnBackPressedDispatcher onBackPressedDispatcher = fragmentActivity.getOnBackPressedDispatcher();
// onBackPressedCallback.setEnabled(true);
// actionMode = fragmentActivity.startActionMode(multiSelectAction);
// final String title = getString(R.string.number_selected, 1);
// actionMode.setTitle(title);
// onBackPressedDispatcher.addCallback(getViewLifecycleOwner(), onBackPressedCallback);
// return true;
// });
}
private void updateSwipeRefreshState() {