From 74afdc0a7abbba3bd03fd783a40fbc554df1ff9b Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 23 Jan 2023 09:31:32 +0100 Subject: [PATCH] Some changes --- .../android/ExampleInstrumentedTest.java | 6 +- .../activities/BasePeertubeActivity.java | 207 ++++++++++++++ .../activities/PeertubeBaseMainActivity.java | 262 ++++++++++++++++++ app/src/fdroid/res/menu/video_menu.xml | 10 + app/src/main/AndroidManifest.xml | 2 +- .../mastodon/activities/InstanceActivity.java | 4 +- .../admin/AdminDomainBlockActivity.java | 2 +- .../peertube/activities/PeertubeActivity.java | 101 +------ .../activities/PeertubeMainActivity.java | 11 +- .../peertube/client/RetrofitPeertubeAPI.java | 14 +- .../client/mastodon/RetrofitMastodonAPI.java | 7 +- .../peertube/drawer/AboutInstanceAdapter.java | 12 +- .../drawer/AccountsHorizontalListAdapter.java | 8 +- .../peertube/drawer/AccountsListAdapter.java | 2 +- .../peertube/drawer/ChannelListAdapter.java | 6 +- .../peertube/drawer/CommentListAdapter.java | 14 +- .../peertube/drawer/InstanceAdapter.java | 10 +- .../android/peertube/drawer/MenuAdapter.java | 8 +- .../peertube/drawer/MenuItemAdapter.java | 2 +- .../peertube/drawer/OwnAccountsAdapter.java | 2 +- .../peertube/drawer/PeertubeAdapter.java | 8 +- .../PeertubeNotificationsListAdapter.java | 6 +- .../peertube/drawer/PlaylistAdapter.java | 128 +-------- .../fragment/DisplayAccountsFragment.java | 4 +- .../fragment/DisplayChannelsFragment.java | 14 +- .../DisplayNotificationsFragment.java | 4 +- .../fragment/DisplayOverviewFragment.java | 4 +- .../fragment/DisplayPlaylistsFragment.java | 6 +- .../fragment/DisplaySepiaSearchFragment.java | 12 +- .../fragment/DisplayVideosFragment.java | 18 +- .../peertube/fragment/SettingsFragment.java | 12 +- .../helper/CacheDataSourceFactory.java | 1 - .../android/peertube/helper/Helper.java | 24 +- .../peertube/helper/HelperInstance.java | 8 +- .../peertube/helper/NotificationHelper.java | 4 +- .../helper/RoundedBackgroundSpan.java | 6 +- .../peertube/helper/SwitchAccountHelper.java | 6 +- .../services/RetrieveInfoService.java | 4 +- .../webview/MastalabWebChromeClient.java | 2 +- .../webview/MastalabWebViewClient.java | 2 +- .../peertube/worker/NotificationsWorker.java | 9 +- .../drawables/mastodon/drawable/ic_repeat.xml | 2 +- .../mastodon/drawable/tag_follow.xml | 6 +- .../mastodon/layout/activity_about.xml | 3 +- .../mastodon/layout/activity_actions.xml | 2 +- .../mastodon/layout/activity_conversation.xml | 6 +- .../mastodon/layout/activity_edit_image.xml | 2 +- .../mastodon/layout/activity_edit_profile.xml | 4 +- .../layouts/mastodon/layout/activity_main.xml | 4 +- .../mastodon/layout/activity_profile.xml | 8 +- .../mastodon/layout/datetime_picker.xml | 2 +- .../mastodon/layout/drawer_account.xml | 4 +- .../mastodon/layout/drawer_account_list.xml | 2 +- .../mastodon/layout/drawer_admin_account.xml | 4 +- .../mastodon/layout/drawer_admin_domain.xml | 2 +- .../mastodon/layout/drawer_announcement.xml | 4 +- .../layouts/mastodon/layout/drawer_cache.xml | 4 +- .../mastodon/layout/drawer_conversation.xml | 2 +- .../mastodon/layout/drawer_fetch_more.xml | 24 +- .../layouts/mastodon/layout/drawer_follow.xml | 8 +- .../mastodon/layout/drawer_instance_reg.xml | 2 +- .../mastodon/layout/drawer_keyword.xml | 5 +- .../layouts/mastodon/layout/drawer_list.xml | 3 +- .../mastodon/layout/drawer_reorder.xml | 6 +- .../layouts/mastodon/layout/drawer_report.xml | 3 +- .../layouts/mastodon/layout/drawer_status.xml | 121 ++++---- .../mastodon/layout/drawer_status_art.xml | 10 +- .../mastodon/layout/drawer_status_history.xml | 2 +- .../layout/drawer_status_pixelfed.xml | 6 +- .../mastodon/layout/drawer_status_simple.xml | 2 +- .../mastodon/layout/drawer_suggestion.xml | 2 +- .../layouts/mastodon/layout/drawer_tag.xml | 4 +- .../mastodon/layout/drawer_tag_search.xml | 2 +- .../mastodon/layout/fragment_login_main.xml | 4 +- .../mastodon/layout/fragment_pagination.xml | 6 +- .../layouts/mastodon/layout/layout_media.xml | 42 +-- .../mastodon/layout/nav_header_main.xml | 10 +- .../mastodon/layout/notification_badge.xml | 4 +- .../mastodon/layout/popup_add_filter.xml | 23 +- .../layout/popup_admin_filter_accounts.xml | 4 +- .../layout/popup_notification_settings.xml | 1 - .../layout/tab_custom_default_view.xml | 24 +- .../mastodon/layout/tab_custom_view.xml | 10 +- .../peertube/layout/activity_peertube.xml | 49 ---- .../peertube/menu/playlist_menu_peertube.xml | 6 - app/src/main/res/values/colors.xml | 2 - app/src/main/res/xml/pref_compose.xml | 4 +- app/src/main/res/xml/pref_interface.xml | 8 +- .../android/services/EmbeddedDistrib.java | 3 +- app/src/playstore/res/menu/video_menu.xml | 9 + .../app/fedilab/android/ExampleUnitTest.java | 4 +- 91 files changed, 838 insertions(+), 608 deletions(-) create mode 100644 app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java create mode 100644 app/src/fdroid/java/app/fedilab/android/activities/PeertubeBaseMainActivity.java create mode 100644 app/src/fdroid/res/menu/video_menu.xml create mode 100644 app/src/playstore/res/menu/video_menu.xml diff --git a/app/src/androidTest/java/app/fedilab/android/ExampleInstrumentedTest.java b/app/src/androidTest/java/app/fedilab/android/ExampleInstrumentedTest.java index f422a923..7c6eed8d 100644 --- a/app/src/androidTest/java/app/fedilab/android/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/app/fedilab/android/ExampleInstrumentedTest.java @@ -1,15 +1,15 @@ package app.fedilab.android; +import static org.junit.Assert.assertEquals; + import android.content.Context; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; - /** * Instrumented test, which will execute on an Android device. * diff --git a/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java b/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java new file mode 100644 index 00000000..22995631 --- /dev/null +++ b/app/src/fdroid/java/app/fedilab/android/activities/BasePeertubeActivity.java @@ -0,0 +1,207 @@ +package app.fedilab.android.activities; +/* Copyright 2021 Thomas Schneider + * + * This file is a part of TubeLab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with TubeLab; if not, + * see . */ + + +import static app.fedilab.android.peertube.helper.Helper.CAST_ID; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.webkit.MimeTypeMap; + +import androidx.appcompat.app.AlertDialog; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.android.exoplayer2.SimpleExoPlayer; + +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +import app.fedilab.android.R; +import app.fedilab.android.databinding.ActivityPeertubeBinding; +import app.fedilab.android.mastodon.activities.BaseBarActivity; +import app.fedilab.android.peertube.client.data.VideoData; +import app.fedilab.android.peertube.helper.Helper; +import su.litvak.chromecast.api.v2.ChromeCast; +import su.litvak.chromecast.api.v2.MediaStatus; +import su.litvak.chromecast.api.v2.Status; + + +public class BasePeertubeActivity extends BaseBarActivity { + + protected ActivityPeertubeBinding binding; + protected VideoData.Video peertube; + protected SimpleExoPlayer player; + protected String videoURL; + protected String subtitlesStr; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityPeertubeBinding.inflate(getLayoutInflater()); + View view = binding.getRoot(); + setContentView(view); + binding.minController.castPlay.setOnClickListener(v -> { + binding.minController.castLoader.setVisibility(View.VISIBLE); + if (PeertubeBaseMainActivity.chromeCast != null) { + new Thread(() -> { + try { + int icon = -1; + if (PeertubeBaseMainActivity.chromeCast.getMediaStatus().playerState == MediaStatus.PlayerState.PLAYING) { + PeertubeBaseMainActivity.chromeCast.pause(); + icon = R.drawable.ic_baseline_play_arrow_32; + } else if (PeertubeBaseMainActivity.chromeCast.getMediaStatus().playerState == MediaStatus.PlayerState.PAUSED) { + PeertubeBaseMainActivity.chromeCast.play(); + icon = R.drawable.ic_baseline_pause_32; + } + if (icon != -1) { + Handler mainHandler = new Handler(Looper.getMainLooper()); + int finalIcon = icon; + Runnable myRunnable = () -> binding.minController.castPlay.setImageResource(finalIcon); + mainHandler.post(myRunnable); + } + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> binding.minController.castLoader.setVisibility(View.GONE); + mainHandler.post(myRunnable); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + }); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.action_cast) { + if (PeertubeBaseMainActivity.chromeCasts != null && PeertubeBaseMainActivity.chromeCasts.size() > 0) { + String[] chromecast_choice = new String[PeertubeBaseMainActivity.chromeCasts.size()]; + AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); + alt_bld.setTitle(R.string.chromecast_choice); + int i = 0; + for (ChromeCast cc : PeertubeBaseMainActivity.chromeCasts) { + chromecast_choice[i] = cc.getTitle(); + i++; + } + i = 0; + for (ChromeCast cc : PeertubeBaseMainActivity.chromeCasts) { + if (PeertubeBaseMainActivity.chromecastActivated && cc.isConnected()) { + break; + } + i++; + } + + alt_bld.setSingleChoiceItems(chromecast_choice, i, (dialog, position) -> { + PeertubeBaseMainActivity.chromeCast = PeertubeBaseMainActivity.chromeCasts.get(position); + new Thread(() -> { + if (PeertubeBaseMainActivity.chromeCast != null) { + Intent intentBC = new Intent(Helper.RECEIVE_CAST_SETTINGS); + Bundle b = new Bundle(); + if (PeertubeBaseMainActivity.chromecastActivated) { + b.putInt("displayed", 0); + intentBC.putExtras(b); + LocalBroadcastManager.getInstance(BasePeertubeActivity.this).sendBroadcast(intentBC); + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + binding.doubleTapPlayerView.setVisibility(View.VISIBLE); + binding.minController.castMiniController.setVisibility(View.GONE); + }; + mainHandler.post(myRunnable); + + } else { + b.putInt("displayed", 1); + b.putParcelable("castedTube", peertube); + intentBC.putExtras(b); + LocalBroadcastManager.getInstance(BasePeertubeActivity.this).sendBroadcast(intentBC); + try { + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + invalidateOptionsMenu(); + binding.minController.castLoader.setVisibility(View.VISIBLE); + player.setPlayWhenReady(false); + binding.doubleTapPlayerView.setVisibility(View.GONE); + binding.minController.castMiniController.setVisibility(View.VISIBLE); + dialog.dismiss(); + if (videoURL != null) { + if (player != null && player.getCurrentPosition() > 0) { + videoURL += "?start=" + (player.getCurrentPosition() / 1000); + } + } + }; + mainHandler.post(myRunnable); + if (!PeertubeBaseMainActivity.chromeCast.isConnected()) { + PeertubeBaseMainActivity.chromeCast.connect(); + } + myRunnable = this::invalidateOptionsMenu; + mainHandler.post(myRunnable); + Status status = PeertubeBaseMainActivity.chromeCast.getStatus(); + if (PeertubeBaseMainActivity.chromeCast.isAppAvailable(CAST_ID) && !status.isAppRunning(CAST_ID)) { + PeertubeBaseMainActivity.chromeCast.launchApp(CAST_ID); + } + if (videoURL != null) { + String mime = MimeTypeMap.getFileExtensionFromUrl(videoURL); + PeertubeBaseMainActivity.chromeCast.setRequestTimeout(60000); + PeertubeBaseMainActivity.chromeCast.load(peertube.getTitle(), null, videoURL, mime); + PeertubeBaseMainActivity.chromeCast.play(); + binding.minController.castPlay.setImageResource(R.drawable.ic_baseline_pause_32); + } + myRunnable = () -> binding.minController.castLoader.setVisibility(View.GONE); + mainHandler.post(myRunnable); + } catch (IOException | GeneralSecurityException e) { + e.printStackTrace(); + } + } + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + invalidateOptionsMenu(); + dialog.dismiss(); + }; + mainHandler.post(myRunnable); + } + }).start(); + }); + alt_bld.setPositiveButton(R.string.close, (dialog, id) -> dialog.dismiss()); + AlertDialog alert = alt_bld.create(); + alert.show(); + } + } + return super.onOptionsItemSelected(item); + } + + + @Override + public boolean onCreateOptionsMenu(@NotNull Menu menu) { + getMenuInflater().inflate(R.menu.video_menu, menu); + MenuItem castItem = menu.findItem(R.id.action_cast); + if (PeertubeBaseMainActivity.chromeCasts != null && PeertubeBaseMainActivity.chromeCasts.size() > 0) { + castItem.setVisible(true); + if (PeertubeBaseMainActivity.chromeCast != null && PeertubeBaseMainActivity.chromeCast.isConnected()) { + castItem.setIcon(R.drawable.ic_baseline_cast_connected_24); + } else { + castItem.setIcon(R.drawable.ic_baseline_cast_24); + } + } + return true; + } + +} diff --git a/app/src/fdroid/java/app/fedilab/android/activities/PeertubeBaseMainActivity.java b/app/src/fdroid/java/app/fedilab/android/activities/PeertubeBaseMainActivity.java new file mode 100644 index 00000000..911a0ec7 --- /dev/null +++ b/app/src/fdroid/java/app/fedilab/android/activities/PeertubeBaseMainActivity.java @@ -0,0 +1,262 @@ +package app.fedilab.android.activities; +/* Copyright 2021 Thomas Schneider + * + * This file is a part of TubeLab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with TubeLab; if not, + * see . */ + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.databinding.ActivityMainPeertubeBinding; +import app.fedilab.android.peertube.client.data.VideoData; +import app.fedilab.android.peertube.helper.Helper; +import su.litvak.chromecast.api.v2.ChromeCast; +import su.litvak.chromecast.api.v2.ChromeCasts; +import su.litvak.chromecast.api.v2.ChromeCastsListener; +import su.litvak.chromecast.api.v2.MediaStatus; + +public abstract class PeertubeBaseMainActivity extends AppCompatActivity implements ChromeCastsListener { + + public static List chromeCasts; + public static ChromeCast chromeCast; + public static boolean chromecastActivated = false; + protected ActivityMainPeertubeBinding binding; + private BroadcastReceiver manage_chromecast; + private VideoData.Video castedTube; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityMainPeertubeBinding.inflate(getLayoutInflater()); + View view = binding.getRoot(); + setContentView(view); + ChromeCastsListener chromeCastsListener = this; + ChromeCasts.registerListener(chromeCastsListener); + + + binding.castClose.setOnClickListener(v -> { + Intent intentBC = new Intent(Helper.RECEIVE_CAST_SETTINGS); + Bundle b = new Bundle(); + b.putInt("displayed", 0); + intentBC.putExtras(b); + LocalBroadcastManager.getInstance(PeertubeBaseMainActivity.this).sendBroadcast(intentBC); + }); + + binding.castTogglePlay.setOnClickListener(v -> { + if (chromeCast != null) { + new Thread(() -> { + try { + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> binding.castTogglePlay.setVisibility(View.GONE); + mainHandler.post(myRunnable); + int icon = -1; + if (chromeCast.getMediaStatus().playerState == MediaStatus.PlayerState.PLAYING) { + chromeCast.pause(); + icon = R.drawable.ic_baseline_play_arrow_32; + } else if (chromeCast.getMediaStatus().playerState == MediaStatus.PlayerState.PAUSED) { + chromeCast.play(); + icon = R.drawable.ic_baseline_pause_32; + } + if (icon != -1) { + int finalIcon = icon; + myRunnable = () -> binding.castTogglePlay.setImageResource(finalIcon); + mainHandler.post(myRunnable); + } + myRunnable = () -> binding.castTogglePlay.setVisibility(View.VISIBLE); + mainHandler.post(myRunnable); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + }); + + + manage_chromecast = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Bundle b = intent.getExtras(); + assert b != null; + int state = b.getInt("state_asked", -1); + int displayed = b.getInt("displayed", -1); + castedTube = b.getParcelable("castedTube"); + + if (state == 1) { + discoverCast(); + } else if (state == 0) { + new Thread(() -> { + try { + if (chromeCast != null) { + chromeCast.stopApp(); + chromeCast.disconnect(); + } + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + if (displayed == 1) { + chromecastActivated = true; + if (castedTube != null) { + binding.castInfo.setVisibility(View.VISIBLE); + Helper.loadGiF(PeertubeBaseMainActivity.this, castedTube.getThumbnailPath(), binding.castView); + binding.castTitle.setText(castedTube.getTitle()); + binding.castDescription.setText(castedTube.getDescription()); + } + } else if (displayed == 0) { + chromecastActivated = false; + binding.castInfo.setVisibility(View.GONE); + new Thread(() -> { + try { + if (chromeCast != null) { + chromeCast.stopApp(); + } + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + } + }; + LocalBroadcastManager.getInstance(PeertubeBaseMainActivity.this).registerReceiver(manage_chromecast, new IntentFilter(Helper.RECEIVE_CAST_SETTINGS)); + } + + @Override + public void newChromeCastDiscovered(ChromeCast chromeCast) { + if (chromeCasts == null) { + chromeCasts = new ArrayList<>(); + chromeCasts.add(chromeCast); + } else { + boolean canBeAdded = true; + for (ChromeCast cast : chromeCasts) { + if (cast.getName().compareTo(chromeCast.getName()) == 0) { + canBeAdded = false; + break; + } + } + if (canBeAdded) { + chromeCasts.add(chromeCast); + } + } + try { + if (chromeCast.isAppRunning(Helper.CAST_ID) && chromeCast.getMediaStatus() != null && chromeCast.getMediaStatus().playerState != null) { + if (binding.castInfo.getVisibility() == View.GONE) { + binding.castInfo.setVisibility(View.VISIBLE); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + @Override + public void chromeCastRemoved(ChromeCast chromeCast) { + + } + + @Override + public void onDestroy() { + super.onDestroy(); + ChromeCasts.unregisterListener(this); + if (manage_chromecast != null) { + LocalBroadcastManager.getInstance(PeertubeBaseMainActivity.this).unregisterReceiver(manage_chromecast); + + new Thread(() -> { + if (chromeCasts != null && chromeCasts.size() > 0) { + for (ChromeCast cast : chromeCasts) { + try { + cast.stopApp(); + cast.disconnect(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }).start(); + } + if (chromeCasts != null) { + chromeCasts = null; + } + if (chromeCast != null) { + chromeCast = null; + } + } + + + //Method for discovering cast devices + public void discoverCast() { + + new Thread(() -> { + if (chromeCasts != null) { + for (ChromeCast cast : chromeCasts) { + try { + cast.disconnect(); + } catch (IOException e) { + e.printStackTrace(); + } + } + chromeCasts = null; + } + chromeCasts = new ArrayList<>(); + try { + List interfaces; + interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface ni : interfaces) { + if ((!ni.isLoopback()) && ni.isUp() && (ni.getName().equals("wlan0"))) { + Enumeration inetAddressEnumeration = ni.getInetAddresses(); + while (inetAddressEnumeration.hasMoreElements()) { + InetAddress inetAddress = inetAddressEnumeration.nextElement(); + ChromeCasts.restartDiscovery(inetAddress); + int tryFind = 0; + while (ChromeCasts.get().isEmpty() && tryFind < 5) { + try { + //noinspection BusyWait + Thread.sleep(1000); + tryFind++; + } catch (InterruptedException ignored) { + } + } + } + } + } + ChromeCasts.stopDiscovery(); + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = this::invalidateOptionsMenu; + mainHandler.post(myRunnable); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + } + + +} diff --git a/app/src/fdroid/res/menu/video_menu.xml b/app/src/fdroid/res/menu/video_menu.xml new file mode 100644 index 00000000..88d4e367 --- /dev/null +++ b/app/src/fdroid/res/menu/video_menu.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7d487f65..3c314c57 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,9 +28,9 @@ android:icon="@mipmap/ic_launcher_bubbles" android:label="@string/app_name" android:largeHeap="true" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_bubbles_round" android:supportsRtl="true" - android:requestLegacyExternalStorage="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" tools:replace="android:allowBackup"> diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/InstanceActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/InstanceActivity.java index ac1563e3..86cf4f64 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/InstanceActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/InstanceActivity.java @@ -89,8 +89,8 @@ public class InstanceActivity extends DialogFragment { editor.apply(); } catch (Exception ignored) { } - } - } + } + } requireDialog().dismiss(); } diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java index 0bdbba06..f28091c2 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java @@ -107,7 +107,7 @@ public class AdminDomainBlockActivity extends BaseBarActivity { } else { Toasty.error(AdminDomainBlockActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); } - Intent intent = new Intent(Helper.BROADCAST_DATA).putExtra(Helper.ARG_ADMIN_DOMAINBLOCK, adminDomainBlockResult); + Intent intent = new Intent(Helper.BROADCAST_DATA).putExtra(Helper.ARG_ADMIN_DOMAINBLOCK, adminDomainBlockResult); LocalBroadcastManager.getInstance(AdminDomainBlockActivity.this).sendBroadcast(intent); finish(); } diff --git a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java index 0027e6c7..2389c29c 100644 --- a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java @@ -23,6 +23,7 @@ import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType import static app.fedilab.android.peertube.helper.Helper.canMakeAction; import static app.fedilab.android.peertube.helper.Helper.getAttColor; import static app.fedilab.android.peertube.helper.Helper.isLoggedIn; +import static app.fedilab.android.peertube.helper.Helper.loadAvatar; import static app.fedilab.android.peertube.helper.Helper.peertubeInformation; import android.Manifest; @@ -120,12 +121,9 @@ import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; -import app.fedilab.android.activities.MainActivity; +import app.fedilab.android.R; +import app.fedilab.android.activities.BasePeertubeActivity; import app.fedilab.android.databinding.ActivityPeertubeBinding; -import app.fedilab.android.mastodon.activities.BaseBarActivity; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.Matomo; -import app.fedilab.android.peertube.R; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.MenuItemVideo; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; @@ -137,12 +135,12 @@ import app.fedilab.android.peertube.client.data.InstanceData; import app.fedilab.android.peertube.client.data.PlaylistData; import app.fedilab.android.peertube.client.data.PluginData; import app.fedilab.android.peertube.client.data.VideoData; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.File; import app.fedilab.android.peertube.client.entities.MenuItemView; import app.fedilab.android.peertube.client.entities.PlaylistExist; import app.fedilab.android.peertube.client.entities.Report; import app.fedilab.android.peertube.client.entities.UserSettings; -import app.fedilab.android.peertube.client.mastodon.RetrofitMastodonAPI; import app.fedilab.android.peertube.drawer.CommentListAdapter; import app.fedilab.android.peertube.drawer.MenuAdapter; import app.fedilab.android.peertube.drawer.MenuItemAdapter; @@ -164,7 +162,7 @@ import app.fedilab.android.peertube.webview.MastalabWebViewClient; import es.dmoral.toasty.Toasty; -public class PeertubeActivity extends BaseBarActivity implements CommentListAdapter.AllCommentRemoved, Player.EventListener, VideoListener, MenuAdapter.ItemClicked, MenuItemAdapter.ItemAction { +public class PeertubeActivity extends BasePeertubeActivity implements CommentListAdapter.AllCommentRemoved, Player.EventListener, VideoListener, MenuAdapter.ItemClicked, MenuItemAdapter.ItemAction { public static String video_id; public static List playedVideos = new ArrayList<>(); @@ -197,7 +195,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap private String currentCaption; private boolean isRemote; private boolean willPlayFromIntent; - private app.fedilab.android.peertube.client.mastodon.Status status; public static void hideKeyboard(Activity activity) { if (activity != null && activity.getWindow() != null) { @@ -228,7 +225,7 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap 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.loadAvatar(PeertubeActivity.this, account, binding.myPp); + loadAvatar(PeertubeActivity.this, account, binding.myPp); } isRemote = false; @@ -273,7 +270,7 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap willPlayFromIntent = manageIntentUrl(intent); - if (BuildConfig.allow_remote_connections && Helper.isLoggedInType(PeertubeActivity.this) == MainActivity.TypeOfConnection.REMOTE_ACCOUNT) { + if (Helper.isLoggedInType(PeertubeActivity.this) == PeertubeMainActivity.TypeOfConnection.REMOTE_ACCOUNT) { binding.peertubeLikeCount.setVisibility(View.GONE); binding.peertubeDislikeCount.setVisibility(View.GONE); binding.peertubePlaylist.setVisibility(View.GONE); @@ -329,7 +326,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap binding.webviewVideo.getSettings().setAllowFileAccess(true); binding.webviewVideo.setWebChromeClient(mastalabWebChromeClient); binding.webviewVideo.getSettings().setDomStorageEnabled(true); - binding.webviewVideo.getSettings().setAppCacheEnabled(true); binding.webviewVideo.getSettings().setMediaPlaybackRequiresUserGesture(false); binding.webviewVideo.setWebViewClient(new MastalabWebViewClient(PeertubeActivity.this)); binding.webviewVideo.loadUrl("https://" + peertubeInstance + "/videos/embed/" + videoUuid); @@ -689,7 +685,7 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap private void reportAlert(RetrofitPeertubeAPI.ActionType type, AlertDialog alertDialog) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(PeertubeActivity.this); LayoutInflater inflater1 = getLayoutInflater(); - View dialogView = inflater1.inflate(R.layout.popup_report, new LinearLayout(PeertubeActivity.this), false); + View dialogView = inflater1.inflate(R.layout.popup_report_peertube, new LinearLayout(PeertubeActivity.this), false); dialogBuilder.setView(dialogView); dialogBuilder.setNeutralButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); EditText report_content = dialogView.findViewById(R.id.report_content); @@ -991,35 +987,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap changeColor(); initResolution(); - binding.peertubeReblog.setOnClickListener(v -> { - if (status != null) { - MastodonPostActionsVM mastodonPostActionsVM = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class); - RetrofitMastodonAPI.actionType type = status.isReblogged() ? RetrofitMastodonAPI.actionType.UNBOOST : RetrofitMastodonAPI.actionType.BOOST; - mastodonPostActionsVM.post(type, status).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon); - } else { - Toasty.error(PeertubeActivity.this, getString(R.string.federation_issue), Toasty.LENGTH_LONG).show(); - } - }); - - binding.peertubeFavorite.setOnClickListener(v -> { - if (status != null) { - MastodonPostActionsVM mastodonPostActionsVM = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class); - RetrofitMastodonAPI.actionType type = status.isFavourited() ? RetrofitMastodonAPI.actionType.UNFAVOURITE : RetrofitMastodonAPI.actionType.FAVOURITE; - mastodonPostActionsVM.post(type, status).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon); - } else { - Toasty.error(PeertubeActivity.this, getString(R.string.federation_issue), Toasty.LENGTH_LONG).show(); - } - }); - - binding.peertubeBookmark.setOnClickListener(v -> { - if (status != null) { - MastodonPostActionsVM mastodonPostActionsVM = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class); - RetrofitMastodonAPI.actionType type = status.isBookmarked() ? RetrofitMastodonAPI.actionType.UNBOOKMARK : RetrofitMastodonAPI.actionType.BOOKMARK; - mastodonPostActionsVM.post(type, status).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon); - } else { - Toasty.error(PeertubeActivity.this, getString(R.string.federation_issue), Toasty.LENGTH_LONG).show(); - } - }); binding.peertubeLikeCount.setOnClickListener(v -> { if (isLoggedIn(PeertubeActivity.this) && !sepiaSearch) { @@ -1072,11 +1039,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap } }); - if (BuildConfig.allow_remote_connections && Helper.isLoggedInType(PeertubeActivity.this) == MainActivity.TypeOfConnection.REMOTE_ACCOUNT) { - String url = "https://" + peertube.getChannel().getHost() + "/videos/watch/" + peertube.getUuid(); - MastodonPostActionsVM postActionsVM = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class); - postActionsVM.searchRemoteStatus(url).observe(PeertubeActivity.this, this::retrieveRemoteStatus); - } if (mode != Helper.VIDEO_MODE_WEBVIEW) { @@ -1101,7 +1063,7 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap binding.moreActions.setOnClickListener(view -> { PopupMenu popup = new PopupMenu(PeertubeActivity.this, binding.moreActions); popup.getMenuInflater() - .inflate(R.menu.main_video, popup.getMenu()); + .inflate(R.menu.main_video_peertube, popup.getMenu()); if (!isMyVideo) { popup.getMenu().findItem(R.id.action_edit).setVisible(false); @@ -1883,7 +1845,7 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap if (comment != null) { binding.replyContent.setVisibility(View.VISIBLE); Account account = comment.getAccount(); - Helper.loadAvatar(PeertubeActivity.this, account, binding.commentAccountProfile); + loadAvatar(PeertubeActivity.this, account, binding.commentAccountProfile); binding.commentAccountDisplayname.setText(account.getDisplayName()); binding.commentAccountUsername.setText(account.getAcct()); Spanned commentSpan; @@ -1967,16 +1929,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap binding.postComment.startAnimation(animateComment); } - public void manageVIewPostActionsMastodon(app.fedilab.android.peertube.client.mastodon.Status status) { - if (status != null) { - this.status = status; - changeColorMastodon(); - binding.peertubeFavorite.setText(String.valueOf(status.getFavouriteCount())); - binding.peertubeReblog.setText(String.valueOf(status.getReblogsCount())); - } else { - Toasty.error(PeertubeActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show(); - } - } public void manageVIewPostActionsMastodon(RetrofitPeertubeAPI.ActionType statusAction, int position, app.fedilab.android.peertube.client.mastodon.Status status) { if (peertube.isCommentsEnabled() && statusAction == ADD_COMMENT) { @@ -2089,39 +2041,6 @@ public class PeertubeActivity extends BaseBarActivity implements CommentListAdap Drawable favorite = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_star_24); Drawable bookmark = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_bookmark_24); - int color = getAttColor(this, android.R.attr.colorControlNormal); - - if (reblog != null) { - reblog.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(reblog, color); - } - if (favorite != null) { - favorite.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(favorite, color); - } - - if (bookmark != null) { - bookmark.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(bookmark, color); - } - - if (reblog != null && status.isReblogged()) { - reblog.setColorFilter(getResources().getColor(R.color.positive_thumbs), PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(reblog, getResources().getColor(R.color.positive_thumbs)); - } - if (favorite != null && status.isFavourited()) { - favorite.setColorFilter(getResources().getColor(R.color.favorite), PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(favorite, getResources().getColor(R.color.favorite)); - } - - if (bookmark != null && status.isBookmarked()) { - bookmark.setColorFilter(getResources().getColor(R.color.bookmark), PorterDuff.Mode.SRC_ATOP); - DrawableCompat.setTint(bookmark, getResources().getColor(R.color.bookmark)); - } - - binding.peertubeReblog.setCompoundDrawablesWithIntrinsicBounds(null, reblog, null, null); - binding.peertubeFavorite.setCompoundDrawablesWithIntrinsicBounds(null, favorite, null, null); - binding.peertubeBookmark.setCompoundDrawablesWithIntrinsicBounds(null, bookmark, null, null); } private void changeColor() { diff --git a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java index e2a0f291..aa6ce867 100644 --- a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java +++ b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java @@ -59,12 +59,13 @@ import java.util.regex.Pattern; import app.fedilab.android.R; import app.fedilab.android.activities.AboutActivity; +import app.fedilab.android.activities.PeertubeBaseMainActivity; import app.fedilab.android.databinding.ActivityMainPeertubeBinding; -import app.fedilab.android.mastodon.activities.BaseActivity; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.data.AccountData.Account; import app.fedilab.android.peertube.client.data.InstanceData; import app.fedilab.android.peertube.client.entities.AcadInstances; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.OauthParams; import app.fedilab.android.peertube.client.entities.PeertubeInformation; import app.fedilab.android.peertube.client.entities.Token; @@ -85,7 +86,7 @@ import app.fedilab.android.peertube.viewmodel.TimelineVM; import es.dmoral.toasty.Toasty; -public abstract class PeertubeMainActivity extends BaseActivity { +public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity { public static int PICK_INSTANCE = 5641; @@ -205,6 +206,7 @@ public abstract class PeertubeMainActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + binding = super.binding; Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -313,7 +315,10 @@ public abstract class PeertubeMainActivity extends BaseActivity { final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - + int search_cast = sharedpreferences.getInt(getString(R.string.set_cast_choice), 0); + if (search_cast == 1) { + super.discoverCast(); + } //Instance if (HelperInstance.getLiveInstance(PeertubeMainActivity.this) == null) { diff --git a/app/src/main/java/app/fedilab/android/peertube/client/RetrofitPeertubeAPI.java b/app/src/main/java/app/fedilab/android/peertube/client/RetrofitPeertubeAPI.java index 96d4ab30..98a9ed5b 100644 --- a/app/src/main/java/app/fedilab/android/peertube/client/RetrofitPeertubeAPI.java +++ b/app/src/main/java/app/fedilab/android/peertube/client/RetrofitPeertubeAPI.java @@ -46,9 +46,8 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.R; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.client.data.AccountData; import app.fedilab.android.peertube.client.data.BlockData; import app.fedilab.android.peertube.client.data.CaptionData; @@ -62,6 +61,7 @@ import app.fedilab.android.peertube.client.data.VideoData; import app.fedilab.android.peertube.client.data.VideoPlaylistData; import app.fedilab.android.peertube.client.entities.AccountCreation; import app.fedilab.android.peertube.client.entities.ChannelParams; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.InstanceParams; import app.fedilab.android.peertube.client.entities.Oauth; import app.fedilab.android.peertube.client.entities.OauthParams; @@ -185,7 +185,7 @@ public class RetrofitPeertubeAPI { } Handler mainHandler = new Handler(Looper.getMainLooper()); Runnable myRunnable = () -> { - Intent mainActivity = new Intent(activity, MainActivity.class); + Intent mainActivity = new Intent(activity, PeertubeMainActivity.class); mainActivity.putExtra(Helper.INTENT_ACTION, Helper.ADD_USER_INTENT); activity.startActivity(mainActivity); activity.finish(); @@ -1518,11 +1518,7 @@ public class RetrofitPeertubeAPI { PeertubeService peertubeService = init(); try { Call oauth; - if (BuildConfig.full_instances) { - oauth = peertubeService.getOauth(client_name, redirect_uris, scopes, website); - } else { - oauth = peertubeService.getOauthAcad(); - } + oauth = peertubeService.getOauth(client_name, redirect_uris, scopes, website); Response response = oauth.execute(); if (response.isSuccessful() && response.body() != null) { return response.body(); diff --git a/app/src/main/java/app/fedilab/android/peertube/client/mastodon/RetrofitMastodonAPI.java b/app/src/main/java/app/fedilab/android/peertube/client/mastodon/RetrofitMastodonAPI.java index 354ceb1f..dee00d06 100644 --- a/app/src/main/java/app/fedilab/android/peertube/client/mastodon/RetrofitMastodonAPI.java +++ b/app/src/main/java/app/fedilab/android/peertube/client/mastodon/RetrofitMastodonAPI.java @@ -27,9 +27,10 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.concurrent.TimeUnit; -import app.fedilab.android.peertube.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.R; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.client.APIResponse; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.Oauth; import app.fedilab.android.peertube.client.entities.OauthParams; import app.fedilab.android.peertube.client.entities.Token; @@ -138,7 +139,7 @@ public class RetrofitMastodonAPI { } Handler mainHandler = new Handler(Looper.getMainLooper()); Runnable myRunnable = () -> { - Intent mainActivity = new Intent(activity, MainActivity.class); + Intent mainActivity = new Intent(activity, PeertubeMainActivity.class); mainActivity.putExtra(Helper.INTENT_ACTION, Helper.ADD_USER_INTENT); activity.startActivity(mainActivity); activity.finish(); diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/AboutInstanceAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/AboutInstanceAdapter.java index f5d0954f..74c12117 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/AboutInstanceAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/AboutInstanceAdapter.java @@ -40,9 +40,9 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.List; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; +import app.fedilab.android.databinding.DrawerAboutInstancePeertubeBinding; import app.fedilab.android.peertube.client.data.InstanceData; -import app.fedilab.android.peertube.databinding.DrawerAboutInstanceBinding; import app.fedilab.android.peertube.helper.Helper; import app.fedilab.android.peertube.sqlite.Sqlite; import app.fedilab.android.peertube.sqlite.StoredInstanceDAO; @@ -74,7 +74,7 @@ public class AboutInstanceAdapter extends RecyclerView.Adapter { PopupMenu popup = new PopupMenu(context, holder.binding.instanceMore); popup.getMenuInflater() - .inflate(R.menu.instance_menu, popup.getMenu()); + .inflate(R.menu.instance_menu_peertube, popup.getMenu()); popup.setOnMenuItemClickListener(item -> { int itemId = item.getItemId(); if (itemId == R.id.action_delete) { @@ -175,9 +175,9 @@ public class AboutInstanceAdapter extends RecyclerView.Adapter { PopupMenu popup = new PopupMenu(context, holder.more_actions); popup.getMenuInflater() - .inflate(R.menu.playlist_menu, popup.getMenu()); + .inflate(R.menu.playlist_menu_peertube, popup.getMenu()); if (channels.size() == 1) { popup.getMenu().findItem(R.id.action_delete).setEnabled(false); } diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/CommentListAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/CommentListAdapter.java index d813abd1..cddd4f80 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/CommentListAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/CommentListAdapter.java @@ -53,14 +53,14 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; +import app.fedilab.android.databinding.DrawerCommentPeertubeBinding; import app.fedilab.android.peertube.activities.PeertubeActivity; import app.fedilab.android.peertube.activities.ShowAccountActivity; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.data.CommentData.Comment; import app.fedilab.android.peertube.client.entities.Report; -import app.fedilab.android.peertube.databinding.DrawerCommentBinding; import app.fedilab.android.peertube.helper.CommentDecorationHelper; import app.fedilab.android.peertube.helper.EmojiHelper; import app.fedilab.android.peertube.helper.Helper; @@ -105,7 +105,7 @@ public class CommentListAdapter extends RecyclerView.Adapter { PopupMenu popup = new PopupMenu(context, holder.binding.moreActions); popup.getMenuInflater() - .inflate(R.menu.comment_menu, popup.getMenu()); + .inflate(R.menu.comment_menu_peertube, popup.getMenu()); if (!Helper.isOwner(context, comment.getAccount())) { popup.getMenu().findItem(R.id.action_delete).setVisible(false); } else { @@ -346,7 +346,7 @@ public class CommentListAdapter extends RecyclerView.Adapter dialog.dismiss()); @@ -374,9 +374,9 @@ public class CommentListAdapter extends RecyclerView.Adapter { @@ -52,7 +52,7 @@ public class MenuAdapter extends RecyclerView.Adapter { @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - DrawerMenuBinding itemBinding = DrawerMenuBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + DrawerMenuPeertubeBinding itemBinding = DrawerMenuPeertubeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new ViewHolder(itemBinding); } @@ -75,9 +75,9 @@ public class MenuAdapter extends RecyclerView.Adapter { static class ViewHolder extends RecyclerView.ViewHolder { - DrawerMenuBinding binding; + DrawerMenuPeertubeBinding binding; - ViewHolder(DrawerMenuBinding itemView) { + ViewHolder(DrawerMenuPeertubeBinding itemView) { super(itemView.getRoot()); binding = itemView; } diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/MenuItemAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/MenuItemAdapter.java index 1b8dd8af..96c4608a 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/MenuItemAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/MenuItemAdapter.java @@ -23,9 +23,9 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.List; +import app.fedilab.android.databinding.DrawerMenuItemBinding; import app.fedilab.android.peertube.client.MenuItemVideo; import app.fedilab.android.peertube.client.entities.MenuItemView; -import app.fedilab.android.peertube.databinding.DrawerMenuItemBinding; public class MenuItemAdapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/OwnAccountsAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/OwnAccountsAdapter.java index cb77dc28..4d910e31 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/OwnAccountsAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/OwnAccountsAdapter.java @@ -27,7 +27,7 @@ import androidx.annotation.NonNull; import java.util.List; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.client.data.AccountData.Account; import app.fedilab.android.peertube.helper.Helper; diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeAdapter.java index 51f31ff7..44913ec7 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeAdapter.java @@ -54,7 +54,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; +import app.fedilab.android.databinding.DrawerPeertubeBinding; import app.fedilab.android.peertube.activities.PeertubeActivity; import app.fedilab.android.peertube.activities.PeertubeEditUploadActivity; import app.fedilab.android.peertube.activities.ShowChannelActivity; @@ -66,7 +67,6 @@ import app.fedilab.android.peertube.client.data.PlaylistData; import app.fedilab.android.peertube.client.data.VideoData; import app.fedilab.android.peertube.client.entities.PlaylistExist; import app.fedilab.android.peertube.client.entities.Report; -import app.fedilab.android.peertube.databinding.DrawerPeertubeBinding; import app.fedilab.android.peertube.helper.Helper; import app.fedilab.android.peertube.helper.HelperInstance; import app.fedilab.android.peertube.viewmodel.PlaylistsVM; @@ -203,7 +203,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter { PopupMenu popup = new PopupMenu(context, holder.binding.moreActions); popup.getMenuInflater() - .inflate(R.menu.video_drawer_menu, popup.getMenu()); + .inflate(R.menu.video_drawer_menu_peertube, popup.getMenu()); if (timelineType == MY_VIDEOS) { popup.getMenu().findItem(R.id.action_report).setVisible(false); popup.getMenu().findItem(R.id.action_follow).setVisible(false); @@ -261,7 +261,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter dialog2.dismiss()); diff --git a/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeNotificationsListAdapter.java b/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeNotificationsListAdapter.java index 7844071a..84fbfdaa 100644 --- a/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeNotificationsListAdapter.java +++ b/app/src/main/java/app/fedilab/android/peertube/drawer/PeertubeNotificationsListAdapter.java @@ -14,7 +14,6 @@ package app.fedilab.android.peertube.drawer; * You should have received a copy of the GNU General Public License along with TubeLab; if not, * see . */ -import static app.fedilab.android.peertube.activities.MainActivity.badgeCount; import android.content.Context; import android.content.Intent; @@ -33,9 +32,10 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.List; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.activities.AccountActivity; import app.fedilab.android.peertube.activities.PeertubeActivity; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.activities.ShowAccountActivity; import app.fedilab.android.peertube.activities.ShowChannelActivity; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; @@ -213,7 +213,7 @@ public class PeertubeNotificationsListAdapter extends RecyclerView.Adapter. */ -import static app.fedilab.android.peertube.viewmodel.PlaylistsVM.action.GET_LIST_VIDEOS; -import android.Manifest; import android.annotation.SuppressLint; -import android.app.Activity; import android.app.AlertDialog; import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.os.Handler; -import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.appcompat.widget.PopupMenu; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.core.content.FileProvider; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelStoreOwner; import androidx.recyclerview.widget.RecyclerView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.FutureTarget; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; import java.util.List; -import java.util.concurrent.ExecutionException; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; +import app.fedilab.android.databinding.DrawerPlaylistPeertubeBinding; import app.fedilab.android.peertube.activities.AllPlaylistsActivity; -import app.fedilab.android.peertube.activities.LocalPlaylistsActivity; -import app.fedilab.android.peertube.activities.MainActivity; -import app.fedilab.android.peertube.activities.PlaylistsActivity; import app.fedilab.android.peertube.client.APIResponse; -import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.data.PlaylistData.Playlist; -import app.fedilab.android.peertube.client.data.VideoPlaylistData; -import app.fedilab.android.peertube.databinding.DrawerPlaylistBinding; import app.fedilab.android.peertube.helper.Helper; -import app.fedilab.android.peertube.helper.HelperInstance; -import app.fedilab.android.peertube.helper.NotificationHelper; -import app.fedilab.android.peertube.helper.PlaylistExportHelper; import app.fedilab.android.peertube.sqlite.ManagePlaylistsDAO; import app.fedilab.android.peertube.sqlite.Sqlite; import app.fedilab.android.peertube.viewmodel.PlaylistsVM; -import es.dmoral.toasty.Toasty; public class PlaylistAdapter extends RecyclerView.Adapter { @@ -91,7 +59,7 @@ public class PlaylistAdapter extends RecyclerView.Adapter { - Intent intent = new Intent(context, locale ? LocalPlaylistsActivity.class : PlaylistsActivity.class); - Bundle b = new Bundle(); - b.putParcelable("playlist", playlist); - intent.putExtras(b); - context.startActivity(intent); - }); if (playlist.getDisplayName().compareTo("Watch later") == 0) { holder.binding.playlistMore.setVisibility(View.GONE); @@ -137,12 +98,8 @@ public class PlaylistAdapter extends RecyclerView.Adapter { PopupMenu popup = new PopupMenu(context, holder.binding.playlistMore); popup.getMenuInflater() - .inflate(R.menu.playlist_menu, popup.getMenu()); - if (!BuildConfig.full_instances) { - popup.getMenu().findItem(R.id.action_export).setVisible(true); - } + .inflate(R.menu.playlist_menu_peertube, popup.getMenu()); if (locale) { - popup.getMenu().findItem(R.id.action_export).setVisible(false); popup.getMenu().findItem(R.id.action_edit).setVisible(false); } popup.setOnMenuItemClickListener(item -> { @@ -175,16 +132,6 @@ public class PlaylistAdapter extends RecyclerView.Adapter= 23) { - if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE); - } else { - doExport(playlist); - } - } else { - doExport(playlist); - } } return true; }); @@ -203,69 +150,6 @@ public class PlaylistAdapter extends RecyclerView.Adapter { - File file; - RetrofitPeertubeAPI retrofitPeertubeAPI = new RetrofitPeertubeAPI(context); - APIResponse apiResponse = retrofitPeertubeAPI.playlistAction(GET_LIST_VIDEOS, playlist.getId(), null, null, null); - if (apiResponse != null) { - List videos = apiResponse.getVideoPlaylist(); - VideoPlaylistData.VideoPlaylistExport videoPlaylistExport = new VideoPlaylistData.VideoPlaylistExport(); - videoPlaylistExport.setPlaylist(playlist); - videoPlaylistExport.setUuid(playlist.getUuid()); - videoPlaylistExport.setAcct(MainActivity.userMe.getAccount().getAcct()); - videoPlaylistExport.setVideos(videos); - - String data = PlaylistExportHelper.playlistToStringStorage(videoPlaylistExport); - - - File root = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), ""); - - if (!root.exists()) { - //noinspection ResultOfMethodCallIgnored - root.mkdirs(); - } - String fileName = "playlist_" + playlist.getUuid() + ".tubelab"; - file = new File(root, fileName); - FileWriter writer; - try { - writer = new FileWriter(file); - writer.append(data); - writer.flush(); - writer.close(); - } catch (IOException e) { - e.printStackTrace(); - Handler mainHandler = new Handler(Looper.getMainLooper()); - Runnable myRunnable = () -> Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_LONG).show(); - mainHandler.post(myRunnable); - return; - } - String urlAvatar = playlist.getThumbnailPath() != null ? HelperInstance.getLiveInstance(context) + playlist.getThumbnailPath() : null; - FutureTarget futureBitmapChannel = Glide.with(context.getApplicationContext()) - .asBitmap() - .load(urlAvatar != null ? urlAvatar : R.drawable.missing_peertube).submit(); - Bitmap icon = null; - try { - icon = futureBitmapChannel.get(); - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - Intent mailIntent = new Intent(Intent.ACTION_SEND); - mailIntent.setType("message/rfc822"); - Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", file); - mailIntent.putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.export_notification_subjet)); - mailIntent.putExtra(Intent.EXTRA_TEXT, context.getString(R.string.export_notification_body)); - mailIntent.putExtra(Intent.EXTRA_STREAM, contentUri); - mailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - NotificationHelper.notify_user(context.getApplicationContext(), - playlist.getOwnerAccount(), mailIntent, icon, - context.getString(R.string.export_notification_title), - context.getString(R.string.export_notification_content)); - } - - }).start(); - } - @SuppressWarnings({"unused", "RedundantSuppression"}) public void manageVIewPlaylists(PlaylistsVM.action actionType, APIResponse apiResponse) { @@ -277,9 +161,9 @@ public class PlaylistAdapter extends RecyclerView.Adapter(); diff --git a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayOverviewFragment.java b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayOverviewFragment.java index e1abda85..380fc8c8 100644 --- a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayOverviewFragment.java +++ b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayOverviewFragment.java @@ -44,7 +44,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.data.VideoData; import app.fedilab.android.peertube.client.entities.OverviewVideo; @@ -84,7 +84,7 @@ public class DisplayOverviewFragment extends Fragment implements PeertubeAdapter @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - rootView = inflater.inflate(R.layout.fragment_overview, container, false); + rootView = inflater.inflate(R.layout.fragment_overview_peertube, container, false); peertubes = new ArrayList<>(); diff --git a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayPlaylistsFragment.java b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayPlaylistsFragment.java index a5942e71..47deff5d 100644 --- a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayPlaylistsFragment.java +++ b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayPlaylistsFragment.java @@ -54,7 +54,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.activities.PlaylistsActivity; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; @@ -87,7 +87,7 @@ public class DisplayPlaylistsFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //View for fragment is the same that fragment accounts - View rootView = inflater.inflate(R.layout.fragment_playlists, container, false); + View rootView = inflater.inflate(R.layout.fragment_playlists_peertube, container, false); context = getContext(); playlists = new ArrayList<>(); @@ -122,7 +122,7 @@ public class DisplayPlaylistsFragment extends Fragment { add_new.setOnClickListener(view -> { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); LayoutInflater inflater1 = ((Activity) context).getLayoutInflater(); - View dialogView = inflater1.inflate(R.layout.add_playlist, new LinearLayout(context), false); + View dialogView = inflater1.inflate(R.layout.add_playlist_peertube, new LinearLayout(context), false); dialogBuilder.setView(dialogView); EditText display_name = dialogView.findViewById(R.id.display_name); EditText description = dialogView.findViewById(R.id.description); diff --git a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplaySepiaSearchFragment.java b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplaySepiaSearchFragment.java index f2e80462..21a15b0d 100644 --- a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplaySepiaSearchFragment.java +++ b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplaySepiaSearchFragment.java @@ -39,12 +39,12 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.R; +import app.fedilab.android.BuildConfig; +import app.fedilab.android.R; +import app.fedilab.android.databinding.FragmentVideoPeertubeBinding; import app.fedilab.android.peertube.client.data.ChannelData; import app.fedilab.android.peertube.client.data.VideoData; import app.fedilab.android.peertube.client.entities.SepiaSearch; -import app.fedilab.android.peertube.databinding.FragmentVideoBinding; import app.fedilab.android.peertube.drawer.AccountsHorizontalListAdapter; import app.fedilab.android.peertube.drawer.PeertubeAdapter; import app.fedilab.android.peertube.helper.Helper; @@ -65,7 +65,7 @@ public class DisplaySepiaSearchFragment extends Fragment implements AccountsHori private SharedPreferences sharedpreferences; private SepiaSearchVM viewModelSearch; private SepiaSearch sepiaSearchVideo; - private FragmentVideoBinding binding; + private FragmentVideoPeertubeBinding binding; public DisplaySepiaSearchFragment() { } @@ -73,7 +73,7 @@ public class DisplaySepiaSearchFragment extends Fragment implements AccountsHori @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - binding = FragmentVideoBinding.inflate(inflater, container, false); + binding = FragmentVideoPeertubeBinding.inflate(inflater, container, false); return binding.getRoot(); } @@ -209,7 +209,7 @@ public class DisplaySepiaSearchFragment extends Fragment implements AccountsHori int videoPerPage = sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE); sepiaSearchVideo.setStart(String.valueOf(Integer.parseInt(sepiaSearchVideo.getStart()) + videoPerPage)); - if (!BuildConfig.google_restriction) { + if (BuildConfig.FLAVOR.equalsIgnoreCase("fdroid")) { this.peertubes.addAll(videoData.data); } else { for (VideoData.Video video : videoData.data) { diff --git a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayVideosFragment.java b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayVideosFragment.java index b8142e9f..05ad9253 100644 --- a/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayVideosFragment.java +++ b/app/src/main/java/app/fedilab/android/peertube/fragment/DisplayVideosFragment.java @@ -32,6 +32,7 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.ViewModelProvider; +import androidx.multidex.BuildConfig; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -43,9 +44,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.R; +import app.fedilab.android.databinding.FragmentVideoPeertubeBinding; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.data.AccountData; @@ -53,7 +54,6 @@ import app.fedilab.android.peertube.client.data.ChannelData; import app.fedilab.android.peertube.client.data.VideoData; import app.fedilab.android.peertube.client.data.VideoPlaylistData; import app.fedilab.android.peertube.client.entities.PlaylistExist; -import app.fedilab.android.peertube.databinding.FragmentVideoBinding; import app.fedilab.android.peertube.drawer.AccountsHorizontalListAdapter; import app.fedilab.android.peertube.drawer.PeertubeAdapter; import app.fedilab.android.peertube.helper.Helper; @@ -93,7 +93,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta private String remoteInstance; private boolean sepiaSearch; private String startDate, endDate; - private FragmentVideoBinding binding; + private FragmentVideoPeertubeBinding binding; private String channelId; public DisplayVideosFragment() { @@ -102,7 +102,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - binding = FragmentVideoBinding.inflate(inflater, container, false); + binding = FragmentVideoPeertubeBinding.inflate(inflater, container, false); return binding.getRoot(); } @@ -351,7 +351,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta apiResponse.getPeertubes().add(v.getVideo()); } } - if (!BuildConfig.google_restriction) { + if (BuildConfig.FLAVOR.equalsIgnoreCase("fdroid")) { this.peertubes.addAll(apiResponse.getPeertubes()); } else { for (VideoData.Video video : apiResponse.getPeertubes()) { @@ -459,9 +459,9 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta public void pullToRefresh(boolean reload) { if (type == TimelineVM.TimelineType.SUBSCRIBTIONS && reload) { - DisplayVideosFragment subscriptionFragment = ((MainActivity) context).getSubscriptionFragment(); + DisplayVideosFragment subscriptionFragment = ((PeertubeMainActivity) context).getSubscriptionFragment(); if (subscriptionFragment != null) { - FragmentTransaction ft = ((MainActivity) context).getSupportFragmentManager().beginTransaction(); + FragmentTransaction ft = ((PeertubeMainActivity) context).getSupportFragmentManager().beginTransaction(); ft.detach(subscriptionFragment).attach(subscriptionFragment).commit(); } } else { diff --git a/app/src/main/java/app/fedilab/android/peertube/fragment/SettingsFragment.java b/app/src/main/java/app/fedilab/android/peertube/fragment/SettingsFragment.java index 73856c88..8fd057b9 100644 --- a/app/src/main/java/app/fedilab/android/peertube/fragment/SettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/peertube/fragment/SettingsFragment.java @@ -1,6 +1,7 @@ package app.fedilab.android.peertube.fragment; -import static app.fedilab.android.peertube.activities.MainActivity.userMe; + +import static app.fedilab.android.peertube.activities.PeertubeMainActivity.userMe; import android.content.Context; import android.content.Intent; @@ -38,11 +39,12 @@ import java.util.List; import java.util.Map; import java.util.Set; -import app.fedilab.android.peertube.BuildConfig; -import app.fedilab.android.peertube.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.BuildConfig; +import app.fedilab.android.R; import app.fedilab.android.peertube.activities.MyAccountActivity; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.UserSettings; import app.fedilab.android.peertube.helper.Helper; import app.fedilab.android.peertube.helper.HelperInstance; @@ -233,7 +235,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared SwitchPreference set_video_in_list_choice = findPreference(getString(R.string.set_video_in_list_choice)); assert set_video_in_list_choice != null; editor.putBoolean(getString(R.string.set_video_in_list_choice), set_video_in_list_choice.isChecked()); - Intent intent = new Intent(requireActivity(), MainActivity.class); + Intent intent = new Intent(requireActivity(), PeertubeMainActivity.class); startActivity(intent); } if (key.compareTo(getString(R.string.set_cast_choice)) == 0) { diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/CacheDataSourceFactory.java b/app/src/main/java/app/fedilab/android/peertube/helper/CacheDataSourceFactory.java index e02059d0..372a7ddf 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/CacheDataSourceFactory.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/CacheDataSourceFactory.java @@ -21,7 +21,6 @@ import com.google.android.exoplayer2.database.ExoDatabaseProvider; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; -import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; import com.google.android.exoplayer2.upstream.FileDataSource; import com.google.android.exoplayer2.upstream.cache.CacheDataSink; import com.google.android.exoplayer2.upstream.cache.CacheDataSource; diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/Helper.java b/app/src/main/java/app/fedilab/android/peertube/helper/Helper.java index 735ef97d..10ab2690 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/Helper.java @@ -71,7 +71,7 @@ import java.util.Locale; import java.util.regex.Pattern; import app.fedilab.android.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.activities.WebviewActivity; import app.fedilab.android.peertube.client.data.AccountData.Account; import app.fedilab.android.peertube.client.data.ChannelData; @@ -553,7 +553,7 @@ public class Helper { editor.putString(PREF_INSTANCE, null); editor.putString(ID, null); editor.apply(); - Intent loginActivity = new Intent(activity, MainActivity.class); + Intent loginActivity = new Intent(activity, PeertubeMainActivity.class); activity.startActivity(loginActivity); activity.finish(); } else { @@ -561,7 +561,7 @@ public class Helper { editor.putString(PREF_KEY_ID, newAccount.getId()); editor.putString(PREF_INSTANCE, newAccount.getHost().trim()); editor.commit(); - Intent changeAccount = new Intent(activity, MainActivity.class); + Intent changeAccount = new Intent(activity, PeertubeMainActivity.class); changeAccount.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); activity.startActivity(changeAccount); } @@ -582,7 +582,7 @@ public class Helper { editor.putString(PREF_KEY_ID, null); editor.putString(ID, null); editor.apply(); - Intent loginActivity = new Intent(activity, MainActivity.class); + Intent loginActivity = new Intent(activity, PeertubeMainActivity.class); activity.startActivity(loginActivity); activity.finish(); } @@ -609,7 +609,7 @@ public class Helper { * @return boolean */ public static boolean isLoggedIn(Context context) { - return isLoggedInType(context) == MainActivity.TypeOfConnection.NORMAL; + return isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.NORMAL; } /** @@ -619,30 +619,30 @@ public class Helper { * @return boolean */ public static boolean canMakeAction(Context context) { - return (isLoggedInType(context) == MainActivity.TypeOfConnection.NORMAL || isLoggedInType(context) == MainActivity.TypeOfConnection.REMOTE_ACCOUNT); + return (isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.NORMAL || isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.REMOTE_ACCOUNT); } /** * Returns boolean depending if the user is authenticated * * @param context Context - * @return MainActivity.TypeOfConnection + * @return PeertubeMainActivity.TypeOfConnection */ - public static MainActivity.TypeOfConnection isLoggedInType(Context context) { + public static PeertubeMainActivity.TypeOfConnection isLoggedInType(Context context) { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); String prefKeyOauthTokenT = sharedpreferences.getString(PREF_KEY_OAUTH_TOKEN, null); String prefSoftware = sharedpreferences.getString(PREF_SOFTWARE, null); if (prefKeyOauthTokenT != null && prefSoftware == null) { - return MainActivity.TypeOfConnection.NORMAL; + return PeertubeMainActivity.TypeOfConnection.NORMAL; } else if (prefKeyOauthTokenT != null) { - return MainActivity.TypeOfConnection.REMOTE_ACCOUNT; + return PeertubeMainActivity.TypeOfConnection.REMOTE_ACCOUNT; } else { - return MainActivity.TypeOfConnection.UNKNOWN; + return PeertubeMainActivity.TypeOfConnection.UNKNOWN; } } public static String getToken(Context context) { - if (isLoggedInType(context) == MainActivity.TypeOfConnection.NORMAL) { + if (isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.NORMAL) { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); return sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); } else { diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/HelperInstance.java b/app/src/main/java/app/fedilab/android/peertube/helper/HelperInstance.java index 4bd075e5..15b5fdb1 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/HelperInstance.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/HelperInstance.java @@ -17,8 +17,6 @@ package app.fedilab.android.peertube.helper; import android.content.Context; import android.content.SharedPreferences; -import app.fedilab.android.peertube.BuildConfig; - public class HelperInstance { @@ -31,11 +29,7 @@ public class HelperInstance { */ public static String getLiveInstance(Context context) { final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - if (BuildConfig.FLAVOR.compareTo("fdroid_full") == 0 || BuildConfig.FLAVOR.compareTo("google_full") == 0) { - return sharedpreferences.getString(Helper.PREF_INSTANCE, null); - } else { - return sharedpreferences.getString(Helper.PREF_INSTANCE, "tube-institutionnel.apps.education.fr"); - } + return sharedpreferences.getString(Helper.PREF_INSTANCE, null); } } diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/NotificationHelper.java b/app/src/main/java/app/fedilab/android/peertube/helper/NotificationHelper.java index 2a68d725..3ba317b1 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/NotificationHelper.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/NotificationHelper.java @@ -31,7 +31,7 @@ import android.os.Build; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.client.data.AccountData; public class NotificationHelper { @@ -60,7 +60,7 @@ public class NotificationHelper { RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, FETCH_NOTIFICATION_CHANNEL_ID) - .setSmallIcon(R.drawable.ic_notification_tubelab).setTicker(message) + .setSmallIcon(R.drawable.ic_notification).setTicker(message) .setWhen(System.currentTimeMillis()); notificationBuilder.setGroup(account.getAcct()) .setContentIntent(pIntent) diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/RoundedBackgroundSpan.java b/app/src/main/java/app/fedilab/android/peertube/helper/RoundedBackgroundSpan.java index 0ef1a31d..e3e215cc 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/RoundedBackgroundSpan.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/RoundedBackgroundSpan.java @@ -8,7 +8,7 @@ import android.text.style.ReplacementSpan; import org.jetbrains.annotations.NotNull; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; public class RoundedBackgroundSpan extends ReplacementSpan { @@ -17,8 +17,8 @@ public class RoundedBackgroundSpan extends ReplacementSpan { public RoundedBackgroundSpan(Context context) { super(); - backgroundColor = context.getResources().getColor(R.color.colorAccent); - textColor = context.getResources().getColor(R.color.tag_color_text); + backgroundColor = Helper.getAttColor(context, R.attr.colorError); + textColor = Helper.getAttColor(context, R.attr.colorOnError); } @Override diff --git a/app/src/main/java/app/fedilab/android/peertube/helper/SwitchAccountHelper.java b/app/src/main/java/app/fedilab/android/peertube/helper/SwitchAccountHelper.java index dd3bcb11..c4b56ee0 100644 --- a/app/src/main/java/app/fedilab/android/peertube/helper/SwitchAccountHelper.java +++ b/app/src/main/java/app/fedilab/android/peertube/helper/SwitchAccountHelper.java @@ -25,9 +25,9 @@ import androidx.appcompat.app.AlertDialog; import java.util.List; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.activities.LoginActivity; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.client.data.AccountData; import app.fedilab.android.peertube.drawer.OwnAccountsAdapter; import app.fedilab.android.peertube.sqlite.AccountDAO; @@ -65,7 +65,7 @@ public class SwitchAccountHelper { editor.putString(Helper.PREF_KEY_NAME, account.getUsername()); editor.apply(); dialog.dismiss(); - Intent intent = new Intent(activity, MainActivity.class); + Intent intent = new Intent(activity, PeertubeMainActivity.class); activity.startActivity(intent); activity.finish(); }); diff --git a/app/src/main/java/app/fedilab/android/peertube/services/RetrieveInfoService.java b/app/src/main/java/app/fedilab/android/peertube/services/RetrieveInfoService.java index 7af7565f..bed9ab60 100644 --- a/app/src/main/java/app/fedilab/android/peertube/services/RetrieveInfoService.java +++ b/app/src/main/java/app/fedilab/android/peertube/services/RetrieveInfoService.java @@ -32,7 +32,7 @@ import androidx.core.app.NotificationCompat; import java.util.LinkedHashMap; import java.util.Objects; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.entities.PeertubeInformation; import app.fedilab.android.peertube.helper.EmojiHelper; @@ -64,7 +64,7 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver ((NotificationManager) Objects.requireNonNull(getSystemService(Context.NOTIFICATION_SERVICE))).createNotificationChannel(channel); Notification notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) - .setSmallIcon(R.drawable.ic_notification_tubelab) + .setSmallIcon(R.drawable.ic_notification) .setContentTitle(getString(R.string.app_name)) .setContentText(getString(R.string.notification_channel_name)) .setAutoCancel(true).build(); diff --git a/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebChromeClient.java b/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebChromeClient.java index 5dcc8816..52dbfb15 100644 --- a/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebChromeClient.java +++ b/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebChromeClient.java @@ -32,7 +32,7 @@ import android.widget.TextView; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; public class MastalabWebChromeClient extends WebChromeClient implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener { diff --git a/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebViewClient.java b/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebViewClient.java index b72a0d47..d0ebfdbe 100644 --- a/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebViewClient.java +++ b/app/src/main/java/app/fedilab/android/peertube/webview/MastalabWebViewClient.java @@ -27,7 +27,7 @@ import android.widget.TextView; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import app.fedilab.android.peertube.R; +import app.fedilab.android.R; public class MastalabWebViewClient extends WebViewClient { diff --git a/app/src/main/java/app/fedilab/android/peertube/worker/NotificationsWorker.java b/app/src/main/java/app/fedilab/android/peertube/worker/NotificationsWorker.java index 8bf57b77..d6c53e28 100644 --- a/app/src/main/java/app/fedilab/android/peertube/worker/NotificationsWorker.java +++ b/app/src/main/java/app/fedilab/android/peertube/worker/NotificationsWorker.java @@ -41,15 +41,16 @@ import com.bumptech.glide.request.FutureTarget; import java.util.List; import java.util.concurrent.ExecutionException; -import app.fedilab.android.peertube.R; -import app.fedilab.android.peertube.activities.MainActivity; +import app.fedilab.android.R; import app.fedilab.android.peertube.activities.PeertubeActivity; +import app.fedilab.android.peertube.activities.PeertubeMainActivity; import app.fedilab.android.peertube.activities.ShowAccountActivity; import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.data.AccountData; import app.fedilab.android.peertube.client.data.NotificationData; import app.fedilab.android.peertube.client.entities.Actor; +import app.fedilab.android.peertube.client.entities.Error; import app.fedilab.android.peertube.client.entities.NotificationSettings; import app.fedilab.android.peertube.client.entities.UserMe; import app.fedilab.android.peertube.fragment.DisplayNotificationsFragment; @@ -306,7 +307,7 @@ public class NotificationsWorker extends Worker { channel.setSound(null, null); notificationManager.createNotificationChannel(channel); } - Intent myIntent = new Intent(getApplicationContext(), MainActivity.class); + Intent myIntent = new Intent(getApplicationContext(), PeertubeMainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( getApplicationContext(), 0, @@ -318,7 +319,7 @@ public class NotificationsWorker extends Worker { .setProgress(100, 0, false) .setOnlyAlertOnce(true) .setContentIntent(pendingIntent) - .setSmallIcon(R.drawable.ic_notification_tubelab) + .setSmallIcon(R.drawable.ic_notification) .setSound(null) .setAutoCancel(true) .setOngoing(true); diff --git a/app/src/main/res/drawables/mastodon/drawable/ic_repeat.xml b/app/src/main/res/drawables/mastodon/drawable/ic_repeat.xml index 99a7787e..d30f01b7 100644 --- a/app/src/main/res/drawables/mastodon/drawable/ic_repeat.xml +++ b/app/src/main/res/drawables/mastodon/drawable/ic_repeat.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/res/layouts/mastodon/layout/activity_about.xml b/app/src/main/res/layouts/mastodon/layout/activity_about.xml index 3333b94a..bc940ac2 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_about.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_about.xml @@ -129,8 +129,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:text="@string/support_the_app_on_liberapay" - /> + android:text="@string/support_the_app_on_liberapay" /> + android:layout_gravity="center_vertical" + android:ellipsize="end" + android:maxLines="1" /> diff --git a/app/src/main/res/layouts/mastodon/layout/activity_edit_image.xml b/app/src/main/res/layouts/mastodon/layout/activity_edit_image.xml index a9361fd6..c4138cac 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_edit_image.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_edit_image.xml @@ -32,9 +32,9 @@ diff --git a/app/src/main/res/layouts/mastodon/layout/activity_edit_profile.xml b/app/src/main/res/layouts/mastodon/layout/activity_edit_profile.xml index 9784a34b..40ee6c48 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_edit_profile.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_edit_profile.xml @@ -203,8 +203,8 @@ android:layout_marginHorizontal="12dp" android:layout_marginTop="6dp" android:orientation="vertical" - app:selectionRequired="true" app:layout_constraintTop_toBottomOf="@id/visibility_label" + app:selectionRequired="true" app:singleSelection="true"> diff --git a/app/src/main/res/layouts/mastodon/layout/activity_main.xml b/app/src/main/res/layouts/mastodon/layout/activity_main.xml index 2dc6aa85..9461de20 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_main.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_main.xml @@ -75,8 +75,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginEnd="10dp" - android:gravity="end" android:contentDescription="@string/display_timelines" + android:gravity="end" android:src="@drawable/ic_baseline_more_horiz_24" android:tint="?attr/colorControlNormal" android:visibility="gone" /> @@ -116,8 +116,8 @@ diff --git a/app/src/main/res/layouts/mastodon/layout/activity_profile.xml b/app/src/main/res/layouts/mastodon/layout/activity_profile.xml index d57d4e53..431f8332 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_profile.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_profile.xml @@ -108,8 +108,8 @@ android:layout_marginEnd="6dp" android:contentDescription="@string/set_notify" android:scaleType="fitCenter" - app:icon="@drawable/ic_baseline_notifications_off_24" android:visibility="gone" + app:icon="@drawable/ic_baseline_notifications_off_24" app:layout_constraintEnd_toStartOf="@id/avatar_container" app:layout_constraintTop_toBottomOf="@id/banner_container" tools:visibility="visible" /> @@ -123,8 +123,8 @@ android:layout_marginTop="6dp" android:contentDescription="@string/edit_profile" android:scaleType="fitCenter" - app:icon="@drawable/ic_baseline_edit_24" android:visibility="gone" + app:icon="@drawable/ic_baseline_edit_24" app:layout_constraintStart_toEndOf="@id/avatar_container" app:layout_constraintTop_toBottomOf="@id/banner_container" tools:visibility="visible" /> @@ -417,10 +417,10 @@ diff --git a/app/src/main/res/layouts/mastodon/layout/datetime_picker.xml b/app/src/main/res/layouts/mastodon/layout/datetime_picker.xml index 07c4d00c..2ee7cbfe 100644 --- a/app/src/main/res/layouts/mastodon/layout/datetime_picker.xml +++ b/app/src/main/res/layouts/mastodon/layout/datetime_picker.xml @@ -100,10 +100,10 @@ android:layout_margin="10dp" android:contentDescription="@string/validate" android:padding="0dp" + android:visibility="gone" app:icon="@drawable/ic_baseline_check_24" app:iconGravity="textStart" app:iconPadding="0dp" - android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_chainStyle="packed" diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_account.xml b/app/src/main/res/layouts/mastodon/layout/drawer_account.xml index e2d33830..1790242b 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_account.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_account.xml @@ -100,9 +100,9 @@ android:layout_width="48dp" android:layout_height="48dp" android:padding="0dp" + app:icon="@drawable/ic_baseline_volume_mute_24" app:iconGravity="textStart" app:iconPadding="0dp" - app:icon="@drawable/ic_baseline_volume_mute_24" app:strokeWidth="1dp" /> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_account_list.xml b/app/src/main/res/layouts/mastodon/layout/drawer_account_list.xml index 78b1b0af..43c9f7a5 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_account_list.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_account_list.xml @@ -83,9 +83,9 @@ android:layout_marginStart="12dp" android:layout_marginTop="6dp" android:padding="0dp" + app:icon="@drawable/ic_baseline_person_add_alt_1_24" app:iconGravity="textStart" app:iconPadding="0dp" - app:icon="@drawable/ic_baseline_person_add_alt_1_24" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_admin_account.xml b/app/src/main/res/layouts/mastodon/layout/drawer_admin_account.xml index 2b515294..8d3d18a2 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_admin_account.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_admin_account.xml @@ -21,8 +21,8 @@ + android:orientation="vertical" + android:padding="6dp"> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_announcement.xml b/app/src/main/res/layouts/mastodon/layout/drawer_announcement.xml index 93214f29..5308a5b9 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_announcement.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_announcement.xml @@ -20,10 +20,10 @@ android:id="@+id/cardview_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:clipChildren="false" - android:clipToPadding="false" android:layout_marginHorizontal="@dimen/card_margin" android:layout_marginTop="@dimen/card_margin" + android:clipChildren="false" + android:clipToPadding="false" app:cardElevation="0dp" app:strokeWidth="0dp"> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_cache.xml b/app/src/main/res/layouts/mastodon/layout/drawer_cache.xml index be24b045..197756e4 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_cache.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_cache.xml @@ -2,9 +2,9 @@ + android:layout_height="wrap_content" + android:layout_marginBottom="20dp"> + app:strokeColor="?colorPrimary" /> + android:padding="0dp" + app:icon="@drawable/ic_baseline_keyboard_double_arrow_up_24" + app:iconGravity="textStart" + app:iconPadding="0dp" + app:strokeColor="?colorPrimary" /> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_follow.xml b/app/src/main/res/layouts/mastodon/layout/drawer_follow.xml index a3cf4282..08b8e782 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_follow.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_follow.xml @@ -17,12 +17,12 @@ @@ -59,8 +59,8 @@ android:layout_height="20dp" android:layout_gravity="center" android:layout_marginStart="5dp" - android:tint="?colorPrimary" - android:src="@drawable/ic_baseline_supervised_user_circle_24" /> + android:src="@drawable/ic_baseline_supervised_user_circle_24" + android:tint="?colorPrimary" /> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_instance_reg.xml b/app/src/main/res/layouts/mastodon/layout/drawer_instance_reg.xml index 7eea23d1..33873f88 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_instance_reg.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_instance_reg.xml @@ -17,9 +17,9 @@ + android:layout_height="48dp" /> \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_list.xml b/app/src/main/res/layouts/mastodon/layout/drawer_list.xml index e6804db6..33ff1aaf 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_list.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_list.xml @@ -9,5 +9,4 @@ android:paddingVertical="12dp" android:textAlignment="textStart" app:icon="@drawable/ic_baseline_navigate_next_24" - app:iconGravity="end" - /> \ No newline at end of file + app:iconGravity="end" /> \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_reorder.xml b/app/src/main/res/layouts/mastodon/layout/drawer_reorder.xml index ef89d84e..3322b47a 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_reorder.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_reorder.xml @@ -3,9 +3,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?colorSurface" android:clickable="true" android:focusable="true" - android:background="?colorSurface" android:foregroundTint="?android:colorBackground"> + android:scaleType="center" + tools:src="@drawable/ic_baseline_home_24" /> - + android:visibility="gone" + tools:visibility="visible"> @@ -345,8 +345,7 @@ android:visibility="gone" app:cardCornerRadius="8dp" app:cardElevation="0dp" - app:strokeWidth="1dp" - > + app:strokeWidth="1dp"> + android:visibility="gone" + tools:src="@tools:sample/backgrounds/scenic" + tools:visibility="visible" /> + app:icon="@drawable/ic_baseline_share_24" + app:iconGravity="textStart" + app:iconPadding="0dp" + app:strokeColor="?colorPrimary" /> + tools:ignore="HardcodedText" + tools:visibility="visible" /> @@ -692,10 +691,6 @@ @@ -729,20 +728,20 @@ @@ -766,53 +765,53 @@ diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_art.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_art.xml index c7d4d5b6..1294ba7c 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_art.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_art.xml @@ -15,10 +15,10 @@ see . --> + android:padding="10dp" + app:layout_constraintBottom_toBottomOf="@+id/art_media" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> --> + android:layout_height="wrap_content" + android:layout_marginHorizontal="@dimen/card_margin" + android:layout_marginTop="@dimen/card_margin"> --> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_tag.xml b/app/src/main/res/layouts/mastodon/layout/drawer_tag.xml index 1819db94..9b21c5b1 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_tag.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_tag.xml @@ -15,10 +15,10 @@ see . --> --> diff --git a/app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml b/app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml index bba6be97..12a9a0a1 100644 --- a/app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml +++ b/app/src/main/res/layouts/mastodon/layout/fragment_login_main.xml @@ -17,8 +17,8 @@ + android:layout_height="match_parent" + android:background="?android:windowBackground"> + android:layout_height="match_parent" + android:background="?android:windowBackground"> - - + + + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@+id/media" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@id/media" /> + android:src="@drawable/ic_baseline_visibility_24" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@id/media" /> + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@+id/media" + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="visible" /> + android:textSize="16sp" + tools:text="@tools:sample/full_names" /> diff --git a/app/src/main/res/layouts/mastodon/layout/popup_add_filter.xml b/app/src/main/res/layouts/mastodon/layout/popup_add_filter.xml index 8e74b6d2..186b00d7 100644 --- a/app/src/main/res/layouts/mastodon/layout/popup_add_filter.xml +++ b/app/src/main/res/layouts/mastodon/layout/popup_add_filter.xml @@ -28,9 +28,9 @@ @@ -128,9 +128,9 @@ @@ -148,6 +148,7 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="vertical"> + + android:text="@string/hide_with_warning_description" + android:textSize="12sp" /> + android:checked="true" + android:text="@string/hide_completely" /> + android:text="@string/hide_completely_description" + android:textSize="12sp" /> + android:layout_height="wrap_content" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + android:orientation="vertical" + android:padding="@dimen/fab_margin"> - + tools:src="@drawable/ic_baseline_home_24" /> diff --git a/app/src/main/res/layouts/mastodon/layout/tab_custom_view.xml b/app/src/main/res/layouts/mastodon/layout/tab_custom_view.xml index 14fe5edf..c81f62cd 100644 --- a/app/src/main/res/layouts/mastodon/layout/tab_custom_view.xml +++ b/app/src/main/res/layouts/mastodon/layout/tab_custom_view.xml @@ -1,16 +1,16 @@ + android:layout_gravity="center" + tools:src="@drawable/nitter" /> + android:textSize="16sp" + tools:text="fedilab_app" /> - - - - - - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index acfdd793..7821d5dd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -125,8 +125,6 @@ #EF5350 - - #f3f3f3 diff --git a/app/src/main/res/xml/pref_compose.xml b/app/src/main/res/xml/pref_compose.xml index 250aa892..3bb9a7e6 100644 --- a/app/src/main/res/xml/pref_compose.xml +++ b/app/src/main/res/xml/pref_compose.xml @@ -84,8 +84,8 @@ @@ -104,9 +104,9 @@ app:useSimpleSummaryProvider="true" /> diff --git a/app/src/main/res/xml/pref_interface.xml b/app/src/main/res/xml/pref_interface.xml index 9d82b3f0..69a98c52 100644 --- a/app/src/main/res/xml/pref_interface.xml +++ b/app/src/main/res/xml/pref_interface.xml @@ -97,10 +97,10 @@ @@ -116,28 +116,28 @@ + + + diff --git a/app/src/test/java/app/fedilab/android/ExampleUnitTest.java b/app/src/test/java/app/fedilab/android/ExampleUnitTest.java index 7d868088..114eb966 100644 --- a/app/src/test/java/app/fedilab/android/ExampleUnitTest.java +++ b/app/src/test/java/app/fedilab/android/ExampleUnitTest.java @@ -1,8 +1,8 @@ package app.fedilab.android; -import org.junit.Test; +import static org.junit.Assert.assertEquals; -import static org.junit.Assert.*; +import org.junit.Test; /** * Example local unit test, which will execute on the development machine (host).