diff --git a/app/build.gradle b/app/build.gradle index 17afff7..7ab9949 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -153,6 +153,7 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + implementation 'com.github.amoskorir:avatarimagegenerator:1.5.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'com.github.GrenderG:Toasty:1.5.2' implementation 'com.google.android.exoplayer:exoplayer:2.12.2' diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/AccountActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/AccountActivity.java index 6286b6d..4d9a49b 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/AccountActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/AccountActivity.java @@ -94,12 +94,11 @@ public class AccountActivity extends BaseActivity { setTitle(String.format("@%s", account.getUsername())); - Helper.loadGiF(AccountActivity.this, account.getAvatar().getPath(), binding.profilePicture); + Helper.loadAvatar(AccountActivity.this, account, binding.profilePicture); binding.username.setText(String.format("@%s", account.getUsername())); binding.displayname.setText(account.getDisplayName()); binding.instance.setText(account.getHost()); - binding.editProfile.setOnClickListener(v -> startActivity(new Intent(AccountActivity.this, MyAccountActivity.class))); binding.logoutButton.setOnClickListener(v -> { AlertDialog.Builder dialogBuilderLogoutAccount = new AlertDialog.Builder(AccountActivity.this); @@ -216,7 +215,6 @@ public class AccountActivity extends BaseActivity { } else { binding.accountTabLayout.setVisibility(View.GONE); binding.accountViewpager.setVisibility(View.GONE); - binding.editProfile.setVisibility(View.GONE); binding.remoteAccount.setVisibility(View.VISIBLE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/MainActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/MainActivity.java index 1a8057c..ea66f28 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/MainActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/MainActivity.java @@ -111,31 +111,23 @@ public class MainActivity extends BaseMainActivity { String type = null; if (itemId == R.id.navigation_discover) { setTitleCustom(R.string.title_discover); - binding.viewpager.setCurrentItem(0); + binding.viewpager.setCurrentItem(3); type = HelperAcadInstance.DISCOVER; } else if (itemId == R.id.navigation_subscription) { - binding.viewpager.setCurrentItem(1); + binding.viewpager.setCurrentItem(4); setTitleCustom(R.string.subscriptions); type = HelperAcadInstance.SUBSCRIPTIONS; } else if (itemId == R.id.navigation_trending) { setTitleCustom(R.string.title_trending); - if (Helper.isLoggedIn(MainActivity.this)) { - binding.viewpager.setCurrentItem(2); - } else { - binding.viewpager.setCurrentItem(1); - } - type = HelperAcadInstance.TRENDING; - } else if (itemId == R.id.navigation_most_liked) { - setTitleCustom(R.string.title_most_liked); binding.viewpager.setCurrentItem(2); - type = HelperAcadInstance.MOSTLIKED; + type = HelperAcadInstance.TRENDING; } else if (itemId == R.id.navigation_recently_added) { setTitleCustom(R.string.title_recently_added); - binding.viewpager.setCurrentItem(3); + binding.viewpager.setCurrentItem(1); type = HelperAcadInstance.RECENTLY_ADDED; } else if (itemId == R.id.navigation_local) { setTitleCustom(R.string.title_local); - binding.viewpager.setCurrentItem(4); + binding.viewpager.setCurrentItem(0); type = HelperAcadInstance.LOCAL; } if (type != null) { @@ -281,7 +273,11 @@ public class MainActivity extends BaseMainActivity { invalidateOptionsMenu(); }).start(); } - binding.viewpager.setOffscreenPageLimit(5); + if (Helper.isLoggedIn(MainActivity.this)) { + binding.viewpager.setOffscreenPageLimit(5); + }else { + binding.viewpager.setOffscreenPageLimit(4); + } Matomo.sendEvent(MainActivity.this, "UTILISATEUR", "DEMARRAGE", HelperInstance.getLiveInstance(MainActivity.this), Helper.isLoggedIn(MainActivity.this) ? 1 : 0); @@ -555,7 +551,7 @@ public class MainActivity extends BaseMainActivity { playslistItem.setVisible(!BuildConfig.full_instances); historyItem.setVisible(false); settingsItem.setVisible(true); - mostLikedItem.setVisible(false); + mostLikedItem.setVisible(true); incognitoItem.setVisible(false); } break; @@ -790,28 +786,26 @@ public class MainActivity extends BaseMainActivity { if (Helper.isLoggedIn(MainActivity.this)) { switch (position) { case 0: - return overviewFragment; + return locaFragment; case 1: - return subscriptionFragment; + return recentFragment; case 2: return trendingFragment; case 3: - return recentFragment; + return overviewFragment; case 4: - return locaFragment; + return subscriptionFragment; } } else { switch (position) { case 0: - return overviewFragment; - case 1: - return trendingFragment; - case 2: - return mostLikedFragment; - case 3: - return recentFragment; - case 4: return locaFragment; + case 1: + return recentFragment; + case 2: + return trendingFragment; + case 3: + return overviewFragment; } } return overviewFragment; @@ -819,7 +813,11 @@ public class MainActivity extends BaseMainActivity { @Override public int getCount() { - return 5; + if (Helper.isLoggedIn(MainActivity.this)) { + return 5; + }else { + return 4; + } } } } \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/MyAccountActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/MyAccountActivity.java index e6a4997..ae135c2 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/MyAccountActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/MyAccountActivity.java @@ -99,8 +99,7 @@ public class MyAccountActivity extends BaseActivity { initializeValues(notificationSettings.getNewCommentOnMyVideo(), binding.notifNewCommentApp, binding.notifNewCommentMail); initializeValues(notificationSettings.getNewVideoFromSubscription(), binding.notifNewVideoApp, binding.notifNewVideoMail); - Helper.loadGiF(MyAccountActivity.this, MainActivity.userMe.getAccount().getAvatar() != null ? MainActivity.userMe.getAccount().getAvatar().getPath() : null, binding.profilePicture); - + Helper.loadAvatar(MyAccountActivity.this, MainActivity.userMe.getAccount(), binding.profilePicture); String[] refresh_array = getResources().getStringArray(R.array.refresh_time); ArrayAdapter refreshArray = new ArrayAdapter<>(MyAccountActivity.this, android.R.layout.simple_spinner_dropdown_item, refresh_array); diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/PeertubeActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/PeertubeActivity.java index 41ca805..4b7dbc1 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/PeertubeActivity.java @@ -23,6 +23,7 @@ import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPO import static app.fedilab.fedilabtube.helper.Helper.canMakeAction; import static app.fedilab.fedilabtube.helper.Helper.getAttColor; import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn; +import static app.fedilab.fedilabtube.helper.Helper.loadAvatar; import static app.fedilab.fedilabtube.helper.Helper.loadGiF; import static app.fedilab.fedilabtube.helper.Helper.peertubeInformation; @@ -307,7 +308,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis String token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); if (Helper.canMakeAction(PeertubeActivity.this) && !sepiaSearch) { Account account = new AccountDAO(PeertubeActivity.this, db).getAccountByToken(token); - Helper.loadGiF(PeertubeActivity.this, account.getAvatar() != null ? account.getAvatar().getPath() : null, binding.myPp); + Helper.loadAvatar(PeertubeActivity.this, account, binding.myPp); } isRemote = false; TorrentOptions torrentOptions = new TorrentOptions.Builder() @@ -1059,13 +1060,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.peertubeDislikeCount.setText(Helper.withSuffix(peertube.getDislikes())); binding.peertubeLikeCount.setText(Helper.withSuffix(peertube.getLikes())); binding.peertubeViewCount.setText(Helper.withSuffix(peertube.getViews())); - String ppChannelURL; - if (sepiaSearch) { - ppChannelURL = peertube.getChannel().getAvatar() != null ? "https://" + peertubeInstance + peertube.getChannel().getAvatar().getPath() : null; - } else { - ppChannelURL = peertube.getChannel().getAvatar() != null ? peertube.getChannel().getAvatar().getPath() : null; - } - loadGiF(PeertubeActivity.this, ppChannelURL, binding.ppChannel); + loadAvatar(PeertubeActivity.this, peertube.getChannel(), binding.ppChannel); binding.ppChannel.setOnClickListener(v -> { Intent intent = new Intent(PeertubeActivity.this, ShowChannelActivity.class); Bundle b = new Bundle(); @@ -2004,7 +1999,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis if (comment != null) { binding.replyContent.setVisibility(View.VISIBLE); Account account = comment.getAccount(); - Helper.loadGiF(PeertubeActivity.this, account.getAvatar() != null ? account.getAvatar().getPath() : null, binding.commentAccountProfile); + Helper.loadAvatar(PeertubeActivity.this, account, binding.commentAccountProfile); binding.commentAccountDisplayname.setText(account.getDisplayName()); binding.commentAccountUsername.setText(account.getAcct()); Spanned commentSpan; diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/ShowAccountActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/ShowAccountActivity.java index 4b04049..164b70e 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/ShowAccountActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/ShowAccountActivity.java @@ -221,7 +221,7 @@ public class ShowAccountActivity extends BaseActivity { account_dn.setText(account.getDisplayName()); manageNotes(account); - Helper.loadGiF(ShowAccountActivity.this, account.getAvatar() != null ? account.getAvatar().getPath() : null, account_pp); + Helper.loadAvatar(ShowAccountActivity.this, account, account_pp); } @Override diff --git a/app/src/main/java/app/fedilab/fedilabtube/activities/ShowChannelActivity.java b/app/src/main/java/app/fedilab/fedilabtube/activities/ShowChannelActivity.java index e000539..d2927ac 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/activities/ShowChannelActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/activities/ShowChannelActivity.java @@ -323,7 +323,7 @@ public class ShowChannelActivity extends BaseActivity { manageNotes(channel); - Helper.loadGiF(ShowChannelActivity.this, sepiaSearch ? peertubeInstance : null, channel.getAvatar() != null ? channel.getAvatar().getPath() : null, account_pp); + Helper.loadAvatar(ShowChannelActivity.this, channel, account_pp); //Follow button String target = channel.getAcct(); diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/AccountsHorizontalListAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/AccountsHorizontalListAdapter.java index fafc3fd..acfe903 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/AccountsHorizontalListAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/AccountsHorizontalListAdapter.java @@ -62,8 +62,7 @@ public class AccountsHorizontalListAdapter extends RecyclerView.Adapter { Bundle b = new Bundle(); Intent intent = new Intent(context, ShowAccountActivity.class); diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java index 00c52bc..1c933d9 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/OwnAccountsAdapter.java @@ -79,12 +79,7 @@ public class OwnAccountsAdapter extends ArrayAdapter { holder.account_un.setText(String.format("@%s", account.getAcct())); //Profile picture - if (account.getAvatar() != null && account.getAvatar().getPath().startsWith("http")) { - Helper.loadGiF(holder.account_pp.getContext(), account.getAvatar().getPath(), holder.account_pp); - } else { - Helper.loadGiF(holder.account_pp.getContext(), "https://" + account.getHost() + account.getAvatar().getPath(), holder.account_pp); - } - + Helper.loadAvatar(holder.account_pp.getContext(), account, holder.account_pp); return convertView; } diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java index df3752f..8e0ab7f 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java @@ -144,8 +144,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter markAsRead(notification, position)); } else if (notification.getComment() != null) { //Comment Notification - String profileUrl = notification.getComment().getAccount().getAvatar() != null ? notification.getComment().getAccount().getAvatar().getPath() : null; - Helper.loadGiF(context, profileUrl, holder.peertube_notif_pp); + Helper.loadAvatar(context, notification.getComment().getAccount(), holder.peertube_notif_pp); accountAction = notification.getComment().getAccount(); String message = context.getString(R.string.peertube_comment_on_video, accountAction.getDisplayName(), accountAction.getUsername()); diff --git a/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayChannelsFragment.java b/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayChannelsFragment.java index 16808fb..782a281 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayChannelsFragment.java +++ b/app/src/main/java/app/fedilab/fedilabtube/fragment/DisplayChannelsFragment.java @@ -277,15 +277,7 @@ public class DisplayChannelsFragment extends Fragment implements ChannelListAdap intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); startActivityForResult(intent, PICK_AVATAR); }); - if (position >= 0) { - Helper.loadGiF(context, channels.get(position).getAvatar() != null ? channels.get(position).getAvatar().getPath() : null, bindingDialog.profilePicture); - } else { - Glide.with(context) - .load(R.drawable.missing_peertube) - .thumbnail(0.1f) - .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) - .into(bindingDialog.profilePicture); - } + Helper.loadAvatar(context, channels.get(position), bindingDialog.profilePicture); int finalPosition = position; alertDialog.setOnShowListener(dialogInterface -> { diff --git a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java index 21b8332..5abf78b 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java +++ b/app/src/main/java/app/fedilab/fedilabtube/helper/Helper.java @@ -26,9 +26,11 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.content.res.TypedArray; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; @@ -48,6 +50,7 @@ import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; +import com.avatarfirst.avatargenlib.AvatarGenerator; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.load.resource.bitmap.CenterCrop; @@ -286,6 +289,113 @@ public class Helper { loadGif(context, null, url, imageView, round, false); } + + public static void loadAvatar(final Context context, Account account, final ImageView imageView) { + String url = null; + if(account.getAvatar() != null) { + url = account.getAvatar().getPath(); + } + String instance = account.getHost(); + if (url == null || url.trim().toLowerCase().compareTo("null") == 0 || url.endsWith("null")) { + BitmapDrawable avatar = new AvatarGenerator.AvatarBuilder(context) + .setLabel(account.getAcct()) + .setAvatarSize(120) + .setTextSize(30) + .toSquare() + .setBackgroundColor(Helper.fetchAccentColor(context)) + .build(); + Glide.with(imageView.getContext()) + .asDrawable() + .load(avatar) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + return; + } + if (url.startsWith("/")) { + url = instance != null ? instance + url : HelperInstance.getLiveInstance(context) + url; + } + if (!url.startsWith("http")) { + url = "https://" + url; + } + try { + RequestBuilder requestBuilder = Glide.with(imageView.getContext()) + .load(url) + .thumbnail(0.1f); + requestBuilder.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + } catch (Exception e) { + try { + BitmapDrawable avatar = new AvatarGenerator.AvatarBuilder(context) + .setLabel(account.getAcct()) + .setAvatarSize(120) + .setTextSize(30) + .toSquare() + .setBackgroundColor(fetchAccentColor(context)) + .build(); + Glide.with(imageView.getContext()) + .asDrawable() + .load(avatar) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + + } catch (Exception ignored) { + } + } + } + + public static void loadAvatar(final Context context, ChannelData.Channel channel, final ImageView imageView) { + String url = null; + if(channel.getAvatar() != null) { + url = channel.getAvatar().getPath(); + } + String instance = channel.getHost(); + if (url == null || url.trim().toLowerCase().compareTo("null") == 0 || url.endsWith("null")) { + BitmapDrawable avatar = new AvatarGenerator.AvatarBuilder(context) + .setLabel(channel.getAcct()) + .setAvatarSize(120) + .setTextSize(30) + .toSquare() + .setBackgroundColor(fetchAccentColor(context)) + .build(); + Glide.with(imageView.getContext()) + .asDrawable() + .load(avatar) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + return; + } + if (url.startsWith("/")) { + url = instance != null ? instance + url : HelperInstance.getLiveInstance(context) + url; + } + if (!url.startsWith("http")) { + url = "https://" + url; + } + try { + RequestBuilder requestBuilder = Glide.with(imageView.getContext()) + .load(url) + .thumbnail(0.1f); + requestBuilder.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + } catch (Exception e) { + try { + BitmapDrawable avatar = new AvatarGenerator.AvatarBuilder(context) + .setLabel(channel.getAcct()) + .setAvatarSize(120) + .setTextSize(30) + .toSquare() + .setBackgroundColor(fetchAccentColor(context)) + .build(); + Glide.with(imageView.getContext()) + .asDrawable() + .load(avatar) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(imageView); + + } catch (Exception ignored) { + } + } + } + @SuppressLint("CheckResult") @SuppressWarnings("SameParameterValue") private static void loadGif(final Context context, String instance, String url, final ImageView imageView, int round, boolean blur) { @@ -481,6 +591,13 @@ public class Helper { return ContextCompat.getColor(context, typedValue.resourceId); } + public static int fetchAccentColor(Context context) { + TypedValue typedValue = new TypedValue(); + TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent }); + int color = a.getColor(0, 0); + a.recycle(); + return color; + } /** * Returns boolean depending if the user is authenticated diff --git a/app/src/main/res/layout/activity_account.xml b/app/src/main/res/layout/activity_account.xml index 42d9c4d..0998ca1 100644 --- a/app/src/main/res/layout/activity_account.xml +++ b/app/src/main/res/layout/activity_account.xml @@ -61,28 +61,13 @@ - - - - - - + android:id="@+id/navigation_local" + android:icon="@drawable/ic_home_black_24dp" + android:title="@string/title_local" /> + android:id="@+id/navigation_trending" + android:icon="@drawable/ic_baseline_trending_up_24" + android:title="@string/title_trending" /> + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu_connected.xml b/app/src/main/res/menu/bottom_nav_menu_connected.xml index ef717fa..bf81516 100644 --- a/app/src/main/res/menu/bottom_nav_menu_connected.xml +++ b/app/src/main/res/menu/bottom_nav_menu_connected.xml @@ -2,19 +2,9 @@ - - - - + android:id="@+id/navigation_local" + android:icon="@drawable/ic_home_black_24dp" + android:title="@string/title_local" /> + android:id="@+id/navigation_trending" + android:icon="@drawable/ic_baseline_trending_up_24" + android:title="@string/title_trending" /> + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/main_preferences.xml b/app/src/main/res/xml/main_preferences.xml index f7015ab..804c8c3 100644 --- a/app/src/main/res/xml/main_preferences.xml +++ b/app/src/main/res/xml/main_preferences.xml @@ -8,8 +8,8 @@ android:key="my_account"> + android:targetPackage="app.fedilab.fedilabtube.activities" + android:targetClass="app.fedilab.fedilabtube.activities.MyAccountActivity" />