Some changes

This commit is contained in:
Thomas 2023-01-23 15:01:44 +01:00
parent 4c5232039a
commit 82a5bfebb4
25 changed files with 130 additions and 346 deletions

View file

@ -29,7 +29,7 @@ import android.webkit.MimeTypeMap;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -50,7 +50,7 @@ public class BasePeertubeActivity extends BaseBarActivity {
protected ActivityPeertubeBinding binding; protected ActivityPeertubeBinding binding;
protected VideoData.Video peertube; protected VideoData.Video peertube;
protected SimpleExoPlayer player; protected ExoPlayer player;
protected String videoURL; protected String videoURL;
protected String subtitlesStr; protected String subtitlesStr;

View file

@ -106,6 +106,7 @@ import java.util.regex.Pattern;
import app.fedilab.android.activities.AboutActivity; import app.fedilab.android.activities.AboutActivity;
import app.fedilab.android.activities.LoginActivity; import app.fedilab.android.activities.LoginActivity;
import app.fedilab.android.activities.MainActivity; import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.activities.PeertubeBaseMainActivity;
import app.fedilab.android.databinding.ActivityMainBinding; import app.fedilab.android.databinding.ActivityMainBinding;
import app.fedilab.android.databinding.NavHeaderMainBinding; import app.fedilab.android.databinding.NavHeaderMainBinding;
import app.fedilab.android.mastodon.activities.ActionActivity; import app.fedilab.android.mastodon.activities.ActionActivity;
@ -334,6 +335,8 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
}); });
permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
} }
filteredAccounts = new ArrayList<>(); filteredAccounts = new ArrayList<>();
mamageNewIntent(getIntent()); mamageNewIntent(getIntent());
filterFetched = false; filterFetched = false;
@ -598,6 +601,10 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null); currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
} }
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount(); currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
if (currentAccount.api == Account.API.PEERTUBE) {
startActivity(new Intent(this, PeertubeBaseMainActivity.class));
finish();
}
} catch (DBException e) { } catch (DBException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1006,7 +1013,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras();
String userIdIntent, instanceIntent, urlOfMessage; String userIdIntent, instanceIntent, urlOfMessage;
if (extras != null && extras.containsKey(Helper.INTENT_ACTION)) { if (extras != null && extras.containsKey(Helper.INTENT_ACTION)) {
userIdIntent = extras.getString(Helper.PREF_KEY_ID); //Id of the account in the intent userIdIntent = extras.getString(Helper.PREF_USER_ID); //Id of the account in the intent
instanceIntent = extras.getString(Helper.PREF_INSTANCE); instanceIntent = extras.getString(Helper.PREF_INSTANCE);
urlOfMessage = extras.getString(Helper.PREF_MESSAGE_URL); urlOfMessage = extras.getString(Helper.PREF_MESSAGE_URL);
if (extras.getInt(Helper.INTENT_ACTION) == Helper.NOTIFICATION_INTENT) { if (extras.getInt(Helper.INTENT_ACTION) == Helper.NOTIFICATION_INTENT) {

View file

@ -266,7 +266,7 @@ public class Account extends BaseAccount implements Serializable {
if (token.getAccess_token() != null) if (token.getAccess_token() != null)
values.put(Sqlite.COL_TOKEN, token.getAccess_token()); values.put(Sqlite.COL_TOKEN, token.getAccess_token());
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String userId = sharedpreferences.getString(Helper.PREF_USER_ID, null);
String instance = HelperInstance.getLiveInstance(context); String instance = HelperInstance.getLiveInstance(context);
try { try {
return db.update(Sqlite.TABLE_USER_ACCOUNT, return db.update(Sqlite.TABLE_USER_ACCOUNT,

View file

@ -177,8 +177,6 @@ public class Helper {
public static final String INSTANCE_SOCIAL_KEY = "jGj9gW3z9ptyIpB8CMGhAlTlslcemMV6AgoiImfw3vPP98birAJTHOWiu5ZWfCkLvcaLsFZw9e3Pb7TIwkbIyrj3z6S7r2oE6uy6EFHvls3YtapP8QKNZ980p9RfzTb4"; public static final String INSTANCE_SOCIAL_KEY = "jGj9gW3z9ptyIpB8CMGhAlTlslcemMV6AgoiImfw3vPP98birAJTHOWiu5ZWfCkLvcaLsFZw9e3Pb7TIwkbIyrj3z6S7r2oE6uy6EFHvls3YtapP8QKNZ980p9RfzTb4";
public static final String WEBSITE_VALUE = "https://fedilab.app"; public static final String WEBSITE_VALUE = "https://fedilab.app";
public static final String OLD_DB_NAME = "mastodon_etalab_db";
public static final String RECEIVE_TOAST_MESSAGE = "RECEIVE_TOAST_MESSAGE"; public static final String RECEIVE_TOAST_MESSAGE = "RECEIVE_TOAST_MESSAGE";
public static final String RECEIVE_TOAST_TYPE = "RECEIVE_TOAST_TYPE"; public static final String RECEIVE_TOAST_TYPE = "RECEIVE_TOAST_TYPE";
public static final String RECEIVE_TOAST_CONTENT = "RECEIVE_TOAST_CONTENT"; public static final String RECEIVE_TOAST_CONTENT = "RECEIVE_TOAST_CONTENT";
@ -296,15 +294,16 @@ public class Helper {
public static final String SCHEDULE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ"; public static final String SCHEDULE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
public static final String PREF_USER_TOKEN = "PREF_USER_TOKEN"; public static final String PREF_USER_TOKEN = "PREF_USER_TOKEN";
public static final String PREF_USER_ID = "PREF_USER_ID"; public static final String PREF_USER_ID = "PREF_USER_ID";
public static final String PREF_USER_INSTANCE = "PREF_USER_INSTANCE"; public static final String PREF_USER_INSTANCE = "PREF_USER_INSTANCE";
public static final String PREF_IS_MODERATOR = "PREF_IS_MODERATOR"; public static final String PREF_IS_MODERATOR = "PREF_IS_MODERATOR";
public static final String PREF_IS_ADMINISTRATOR = "PREF_IS_ADMINISTRATOR"; public static final String PREF_IS_ADMINISTRATOR = "PREF_IS_ADMINISTRATOR";
public static final String PREF_KEY_ID = "PREF_KEY_ID";
public static final String PREF_MESSAGE_URL = "PREF_MESSAGE_URL"; public static final String PREF_MESSAGE_URL = "PREF_MESSAGE_URL";
public static final String PREF_INSTANCE = "PREF_INSTANCE"; public static final String PREF_INSTANCE = "PREF_INSTANCE";
public static final String SET_SECURITY_PROVIDER = "SET_SECURITY_PROVIDER"; public static final String SET_SECURITY_PROVIDER = "SET_SECURITY_PROVIDER";
public static final int NOTIFICATION_INTENT = 1; public static final int NOTIFICATION_INTENT = 1;

View file

@ -369,7 +369,7 @@ public class NotificationsHelper {
final Intent intent = new Intent(context, MainActivity.class); final Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Helper.INTENT_ACTION, Helper.NOTIFICATION_INTENT); intent.putExtra(Helper.INTENT_ACTION, Helper.NOTIFICATION_INTENT);
intent.putExtra(Helper.PREF_KEY_ID, account.user_id); intent.putExtra(Helper.PREF_USER_ID, account.user_id);
if (targeted_account != null) if (targeted_account != null)
intent.putExtra(Helper.INTENT_TARGETED_ACCOUNT, targeted_account); intent.putExtra(Helper.INTENT_TARGETED_ACCOUNT, targeted_account);
intent.putExtra(Helper.PREF_INSTANCE, account.instance); intent.putExtra(Helper.PREF_INSTANCE, account.instance);

View file

@ -14,6 +14,7 @@ package app.fedilab.android.peertube.activities;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import static app.fedilab.android.peertube.activities.PeertubeMainActivity.badgeCount; import static app.fedilab.android.peertube.activities.PeertubeMainActivity.badgeCount;
import android.content.Intent; import android.content.Intent;
@ -79,7 +80,7 @@ public class AccountActivity extends BaseBarActivity {
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); String token = sharedpreferences.getString(PREF_USER_TOKEN, null);
BaseAccount baseAccount = null; BaseAccount baseAccount = null;
try { try {

View file

@ -15,6 +15,7 @@ package app.fedilab.android.peertube.activities;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static com.google.android.exoplayer2.Player.MEDIA_ITEM_TRANSITION_REASON_AUTO; import static com.google.android.exoplayer2.Player.MEDIA_ITEM_TRANSITION_REASON_AUTO;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.ADD_COMMENT; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.ADD_COMMENT;
import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.RATEVIDEO; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.RATEVIDEO;
import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.REPLY; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.REPLY;
@ -38,7 +39,6 @@ import android.content.SharedPreferences;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@ -85,12 +85,12 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.github.vkay94.dtpv.youtube.YouTubeOverlay; import com.github.vkay94.dtpv.youtube.YouTubeOverlay;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector; import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
import com.google.android.exoplayer2.source.MergingMediaSource; import com.google.android.exoplayer2.source.MergingMediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.ProgressiveMediaSource;
@ -106,7 +106,7 @@ import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoListener; import com.google.android.exoplayer2.video.VideoSize;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -124,10 +124,13 @@ import java.util.regex.Pattern;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.activities.BasePeertubeActivity; import app.fedilab.android.activities.BasePeertubeActivity;
import app.fedilab.android.databinding.ActivityPeertubeBinding; import app.fedilab.android.databinding.ActivityPeertubeBinding;
import app.fedilab.android.mastodon.client.entities.app.BaseAccount;
import app.fedilab.android.mastodon.exception.DBException; import app.fedilab.android.mastodon.exception.DBException;
import app.fedilab.android.mastodon.helper.CacheDataSourceFactory;
import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.APIResponse;
import app.fedilab.android.peertube.client.MenuItemVideo; import app.fedilab.android.peertube.client.MenuItemVideo;
import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI;
import app.fedilab.android.peertube.client.data.AccountData;
import app.fedilab.android.peertube.client.data.CaptionData.Caption; import app.fedilab.android.peertube.client.data.CaptionData.Caption;
import app.fedilab.android.peertube.client.data.CommentData; import app.fedilab.android.peertube.client.data.CommentData;
import app.fedilab.android.peertube.client.data.CommentData.Comment; import app.fedilab.android.peertube.client.data.CommentData.Comment;
@ -144,7 +147,6 @@ import app.fedilab.android.peertube.client.entities.UserSettings;
import app.fedilab.android.peertube.drawer.CommentListAdapter; import app.fedilab.android.peertube.drawer.CommentListAdapter;
import app.fedilab.android.peertube.drawer.MenuAdapter; import app.fedilab.android.peertube.drawer.MenuAdapter;
import app.fedilab.android.peertube.drawer.MenuItemAdapter; import app.fedilab.android.peertube.drawer.MenuItemAdapter;
import app.fedilab.android.peertube.helper.CacheDataSourceFactory;
import app.fedilab.android.peertube.helper.Helper; import app.fedilab.android.peertube.helper.Helper;
import app.fedilab.android.peertube.helper.HelperInstance; import app.fedilab.android.peertube.helper.HelperInstance;
import app.fedilab.android.peertube.viewmodel.CaptionsVM; import app.fedilab.android.peertube.viewmodel.CaptionsVM;
@ -153,15 +155,13 @@ import app.fedilab.android.peertube.viewmodel.PlaylistsVM;
import app.fedilab.android.peertube.viewmodel.PostActionsVM; import app.fedilab.android.peertube.viewmodel.PostActionsVM;
import app.fedilab.android.peertube.viewmodel.SearchVM; import app.fedilab.android.peertube.viewmodel.SearchVM;
import app.fedilab.android.peertube.viewmodel.TimelineVM; import app.fedilab.android.peertube.viewmodel.TimelineVM;
import app.fedilab.android.peertube.viewmodel.mastodon.MastodonPostActionsVM;
import app.fedilab.android.peertube.webview.CustomWebview; import app.fedilab.android.peertube.webview.CustomWebview;
import app.fedilab.android.peertube.webview.MastalabWebChromeClient; import app.fedilab.android.peertube.webview.MastalabWebChromeClient;
import app.fedilab.android.peertube.webview.MastalabWebViewClient; import app.fedilab.android.peertube.webview.MastalabWebViewClient;
import app.fedilab.android.sqlite.Sqlite;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
public class PeertubeActivity extends BasePeertubeActivity implements CommentListAdapter.AllCommentRemoved, Player.EventListener, VideoListener, MenuAdapter.ItemClicked, MenuItemAdapter.ItemAction { public class PeertubeActivity extends BasePeertubeActivity implements CommentListAdapter.AllCommentRemoved, MenuAdapter.ItemClicked, MenuItemAdapter.ItemAction, Player.Listener {
public static String video_id; public static String video_id;
public static List<String> playedVideos = new ArrayList<>(); public static List<String> playedVideos = new ArrayList<>();
@ -198,18 +198,10 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
public static void hideKeyboard(Activity activity) { public static void hideKeyboard(Activity activity) {
if (activity != null && activity.getWindow() != null) { if (activity != null && activity.getWindow() != null) {
activity.getWindow().getDecorView(); activity.getWindow().getDecorView();
InputMethodManager imm = activity.getSystemService(INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE);
assert imm != null; if (imm != null) {
imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0); imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
} }
}
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
if (width < height) {
videoOrientationType = videoOrientation.PORTRAIT;
} else {
videoOrientationType = videoOrientation.LANDSCAPE;
} }
} }
@ -219,17 +211,18 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
videoOrientationType = videoOrientation.LANDSCAPE; videoOrientationType = videoOrientation.LANDSCAPE;
max_id = "0"; max_id = "0";
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); String token = sharedpreferences.getString(PREF_USER_TOKEN, null);
if (Helper.canMakeAction(PeertubeActivity.this) && !sepiaSearch) { if (Helper.canMakeAction(PeertubeActivity.this) && !sepiaSearch) {
Account account = null; BaseAccount account = null;
try { try {
account = new app.fedilab.android.mastodon.client.entities.app.Account(PeertubeActivity.this).getAccountByToken(token); account = new app.fedilab.android.mastodon.client.entities.app.Account(PeertubeActivity.this).getAccountByToken(token);
} catch (DBException e) { } catch (DBException e) {
e.printStackTrace(); e.printStackTrace();
} }
loadAvatar(PeertubeActivity.this, account, binding.myPp); if (account != null) {
loadAvatar(PeertubeActivity.this, account.peertube_account, binding.myPp);
}
} }
isRemote = false; isRemote = false;
@ -278,9 +271,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
binding.peertubeLikeCount.setVisibility(View.GONE); binding.peertubeLikeCount.setVisibility(View.GONE);
binding.peertubeDislikeCount.setVisibility(View.GONE); binding.peertubeDislikeCount.setVisibility(View.GONE);
binding.peertubePlaylist.setVisibility(View.GONE); binding.peertubePlaylist.setVisibility(View.GONE);
binding.peertubeReblog.setVisibility(View.VISIBLE);
binding.peertubeFavorite.setVisibility(View.VISIBLE);
binding.peertubeBookmark.setVisibility(View.VISIBLE);
} else { } else {
binding.peertubePlaylist.setVisibility(View.VISIBLE); binding.peertubePlaylist.setVisibility(View.VISIBLE);
} }
@ -424,7 +414,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
return; return;
} }
peertube = apiResponse.getPeertubes().get(0); peertube = apiResponse.getPeertubes().get(0);
Matomo.sendScreen(PeertubeActivity.this, "VIDEO_REGARDEE", peertube.getUuid());
if (peertube.isNsfw()) { if (peertube.isNsfw()) {
binding.videoSensitive.setVisibility(View.VISIBLE); binding.videoSensitive.setVisibility(View.VISIBLE);
} else { } else {
@ -583,7 +572,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
private void playVideo() { private void playVideo() {
if (player != null) { if (player != null) {
player.release(); player.release();
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build(); player = new ExoPlayer.Builder(PeertubeActivity.this).build();
binding.mediaVideo.player(player); binding.mediaVideo.player(player);
binding.doubleTapPlayerView.setPlayer(player); binding.doubleTapPlayerView.setPlayer(player);
binding.loader.setVisibility(View.GONE); binding.loader.setVisibility(View.GONE);
@ -889,7 +878,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
binding.videoInformation.setOnClickListener(v -> { binding.videoInformation.setOnClickListener(v -> {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(PeertubeActivity.this); AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(PeertubeActivity.this);
LayoutInflater inflater = getLayoutInflater(); LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.popup_video_info, new LinearLayout(PeertubeActivity.this), false); View dialogView = inflater.inflate(R.layout.popup_video_info_peertube, new LinearLayout(PeertubeActivity.this), false);
TextView info_privacy = dialogView.findViewById(R.id.info_privacy); TextView info_privacy = dialogView.findViewById(R.id.info_privacy);
TextView info_published_at = dialogView.findViewById(R.id.info_published_at); TextView info_published_at = dialogView.findViewById(R.id.info_published_at);
TextView info_category = dialogView.findViewById(R.id.info_category); TextView info_category = dialogView.findViewById(R.id.info_category);
@ -1046,8 +1035,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
if (mode != Helper.VIDEO_MODE_WEBVIEW) { if (mode != Helper.VIDEO_MODE_WEBVIEW) {
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build(); player = new ExoPlayer.Builder(PeertubeActivity.this).build();
player.addVideoListener(PeertubeActivity.this);
player.addListener(this); player.addListener(this);
binding.mediaVideo.player(player); binding.mediaVideo.player(player);
binding.doubleTapPlayerView.setPlayer(player); binding.doubleTapPlayerView.setPlayer(player);
@ -1437,7 +1425,8 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
@Override @Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
if (!isInPictureInPictureMode) { if (!isInPictureInPictureMode) {
if (onStopCalled) { if (onStopCalled) {
isPlayInMinimized = false; isPlayInMinimized = false;
@ -1446,7 +1435,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
} }
private void toogleFullscreen(boolean fullscreen) { private void toogleFullscreen(boolean fullscreen) {
if (fullscreen) { if (fullscreen) {
@ -1645,7 +1633,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
if (mode == Helper.VIDEO_MODE_NORMAL) { if (mode == Helper.VIDEO_MODE_NORMAL) {
if (player != null) if (player != null)
player.release(); player.release();
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build(); player = new ExoPlayer.Builder(PeertubeActivity.this).build();
binding.mediaVideo.player(player); binding.mediaVideo.player(player);
binding.doubleTapPlayerView.setPlayer(player); binding.doubleTapPlayerView.setPlayer(player);
binding.loader.setVisibility(View.GONE); binding.loader.setVisibility(View.GONE);
@ -1688,7 +1676,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
player.release(); player.release();
TrackSelector trackSelector = new DefaultTrackSelector(PeertubeActivity.this, new AdaptiveTrackSelection.Factory()); TrackSelector trackSelector = new DefaultTrackSelector(PeertubeActivity.this, new AdaptiveTrackSelection.Factory());
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).setTrackSelector(trackSelector).build(); player = new ExoPlayer.Builder(PeertubeActivity.this).setTrackSelector(trackSelector).build();
binding.mediaVideo.player(player); binding.mediaVideo.player(player);
binding.doubleTapPlayerView.setPlayer(player); binding.doubleTapPlayerView.setPlayer(player);
captionLang = item.getStrId(); captionLang = item.getStrId();
@ -1788,10 +1776,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
if (Helper.isLoggedIn(PeertubeActivity.this)) { if (Helper.isLoggedIn(PeertubeActivity.this)) {
PostActionsVM viewModelComment = new ViewModelProvider(PeertubeActivity.this).get(PostActionsVM.class); PostActionsVM viewModelComment = new ViewModelProvider(PeertubeActivity.this).get(PostActionsVM.class);
viewModelComment.comment(ADD_COMMENT, peertube.getId(), null, commentStr).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(ADD_COMMENT, 0, apiResponse1)); viewModelComment.comment(ADD_COMMENT, peertube.getId(), null, commentStr).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(ADD_COMMENT, 0, apiResponse1));
} else {//Remote account is posting a message
String url = "https://" + peertube.getChannel().getHost() + "/videos/watch/" + peertube.getUuid();
MastodonPostActionsVM viewModelCommentMastodon = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class);
viewModelCommentMastodon.comment(url, commentStr).observe(PeertubeActivity.this, status -> manageVIewPostActionsMastodon(ADD_COMMENT, position, status));
} }
binding.addCommentWrite.setText(""); binding.addCommentWrite.setText("");
} }
@ -1801,9 +1785,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
if (Helper.isLoggedIn(PeertubeActivity.this)) { if (Helper.isLoggedIn(PeertubeActivity.this)) {
PostActionsVM viewModelComment = new ViewModelProvider(PeertubeActivity.this).get(PostActionsVM.class); PostActionsVM viewModelComment = new ViewModelProvider(PeertubeActivity.this).get(PostActionsVM.class);
viewModelComment.comment(REPLY, peertube.getId(), comment.getId(), commentView).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(REPLY, position, apiResponse1)); viewModelComment.comment(REPLY, peertube.getId(), comment.getId(), commentView).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(REPLY, position, apiResponse1));
} else {//Remote account is posting a message
MastodonPostActionsVM viewModelCommentMastodon = new ViewModelProvider(PeertubeActivity.this).get(MastodonPostActionsVM.class);
viewModelCommentMastodon.comment(comment.getUrl(), commentView).observe(PeertubeActivity.this, status -> manageVIewPostActionsMastodon(REPLY, position, status));
} }
binding.addCommentWrite.setText(""); binding.addCommentWrite.setText("");
} }
@ -1848,7 +1829,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
public void openPostComment(Comment comment, int position) { public void openPostComment(Comment comment, int position) {
if (comment != null) { if (comment != null) {
binding.replyContent.setVisibility(View.VISIBLE); binding.replyContent.setVisibility(View.VISIBLE);
Account account = comment.getAccount(); AccountData.PeertubeAccount account = comment.getAccount();
loadAvatar(PeertubeActivity.this, account, binding.commentAccountProfile); loadAvatar(PeertubeActivity.this, account, binding.commentAccountProfile);
binding.commentAccountDisplayname.setText(account.getDisplayName()); binding.commentAccountDisplayname.setText(account.getDisplayName());
binding.commentAccountUsername.setText(account.getAcct()); binding.commentAccountUsername.setText(account.getAcct());
@ -1934,33 +1915,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
public void manageVIewPostActionsMastodon(RetrofitPeertubeAPI.ActionType statusAction, int position, app.fedilab.android.peertube.client.mastodon.Status status) {
if (peertube.isCommentsEnabled() && statusAction == ADD_COMMENT) {
if (status != null) {
Comment comment = app.fedilab.android.peertube.client.mastodon.Status.convertStatusToComment(status);
comments.add(0, comment);
commentListAdapter.notifyItemInserted(0);
}
} else if (peertube.isCommentsEnabled() && statusAction == REPLY) {
if (status != null) {
Comment comment = app.fedilab.android.peertube.client.mastodon.Status.convertStatusToComment(status);
if (commentsThread == null) {
commentsThread = new ArrayList<>();
}
commentsThread.add(position + 1, comment);
commentReplyListAdapter.notifyItemInserted(position + 1);
}
}
}
public void retrieveRemoteStatus(app.fedilab.android.peertube.client.mastodon.Status status) {
this.status = status;
if (status != null) {
changeColorMastodon();
binding.peertubeFavorite.setText(String.valueOf(status.getFavouriteCount()));
binding.peertubeReblog.setText(String.valueOf(status.getReblogsCount()));
}
}
@SuppressWarnings({"unused", "RedundantSuppression"}) @SuppressWarnings({"unused", "RedundantSuppression"})
public void manageVIewPostActions(RetrofitPeertubeAPI.ActionType statusAction, int position, APIResponse apiResponse) { public void manageVIewPostActions(RetrofitPeertubeAPI.ActionType statusAction, int position, APIResponse apiResponse) {
@ -2040,13 +1994,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
private void changeColorMastodon() {
Drawable reblog = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_repeat_24);
Drawable favorite = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_star_24);
Drawable bookmark = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_bookmark_24);
}
private void changeColor() { private void changeColor() {
Drawable thumbUp = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_thumb_up_alt_24); Drawable thumbUp = ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_thumb_up_alt_24);
@ -2063,13 +2010,13 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
if (peertube.getMyRating() != null && peertube.getMyRating().compareTo("like") == 0) { if (peertube.getMyRating() != null && peertube.getMyRating().compareTo("like") == 0) {
if (thumbUp != null) { if (thumbUp != null) {
thumbUp.setColorFilter(getResources().getColor(R.color.positive_thumbs), PorterDuff.Mode.SRC_ATOP); thumbUp.setColorFilter(getAttColor(PeertubeActivity.this, R.attr.primaryColor), PorterDuff.Mode.SRC_ATOP);
DrawableCompat.setTint(thumbUp, getResources().getColor(R.color.positive_thumbs)); DrawableCompat.setTint(thumbUp, getAttColor(PeertubeActivity.this, R.attr.primaryColor));
} }
} else if (peertube.getMyRating() != null && peertube.getMyRating().compareTo("dislike") == 0) { } else if (peertube.getMyRating() != null && peertube.getMyRating().compareTo("dislike") == 0) {
if (thumbDown != null) { if (thumbDown != null) {
thumbDown.setColorFilter(getResources().getColor(R.color.negative_thumbs), PorterDuff.Mode.SRC_ATOP); thumbDown.setColorFilter(getAttColor(PeertubeActivity.this, R.attr.colorError), PorterDuff.Mode.SRC_ATOP);
DrawableCompat.setTint(thumbDown, getResources().getColor(R.color.negative_thumbs)); DrawableCompat.setTint(thumbDown, getAttColor(PeertubeActivity.this, R.attr.colorError));
} }
} }
binding.peertubeLikeCount.setCompoundDrawablesWithIntrinsicBounds(null, thumbUp, null, null); binding.peertubeLikeCount.setCompoundDrawablesWithIntrinsicBounds(null, thumbUp, null, null);
@ -2228,11 +2175,21 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
} }
@Override @Override
public void onPlayerError(ExoPlaybackException error) { public void onVideoSizeChanged(@NonNull VideoSize videoSize) {
Player.Listener.super.onVideoSizeChanged(videoSize);
if (videoSize.width < videoSize.height) {
videoOrientationType = videoOrientation.PORTRAIT;
} else {
videoOrientationType = videoOrientation.LANDSCAPE;
}
} }
@Override
public void onPlayerError(PlaybackException error) {
Player.Listener.super.onPlayerError(error);
}
enum videoOrientation { enum videoOrientation {
LANDSCAPE, LANDSCAPE,
PORTRAIT PORTRAIT

View file

@ -14,6 +14,8 @@ package app.fedilab.android.peertube.activities;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import static app.fedilab.android.peertube.helper.Helper.peertubeInformation; import static app.fedilab.android.peertube.helper.Helper.peertubeInformation;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
@ -147,7 +149,7 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(activity, newInstance, null).getNodeInfo(); WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(activity, newInstance, null).getNodeInfo();
if (instanceNodeInfo.getSoftware() != null && instanceNodeInfo.getSoftware().getName().trim().toLowerCase().compareTo("peertube") == 0) { if (instanceNodeInfo.getSoftware() != null && instanceNodeInfo.getSoftware().getName().trim().toLowerCase().compareTo("peertube") == 0) {
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, newInstance); editor.putString(PREF_INSTANCE, newInstance);
editor.commit(); editor.commit();
if (storeInDb) { if (storeInDb) {
newInstance = newInstance.trim().toLowerCase(); newInstance = newInstance.trim().toLowerCase();
@ -352,8 +354,8 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
String tokenStr = Helper.getToken(PeertubeMainActivity.this); String tokenStr = Helper.getToken(PeertubeMainActivity.this);
String instance = HelperInstance.getLiveInstance(PeertubeMainActivity.this); String instance = HelperInstance.getLiveInstance(PeertubeMainActivity.this);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String instanceShar = sharedpreferences.getString(Helper.PREF_INSTANCE, null); String instanceShar = sharedpreferences.getString(PREF_INSTANCE, null);
String userIdShar = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String userIdShar = sharedpreferences.getString(PREF_USER_ID, null);
BaseAccount account = null; BaseAccount account = null;
try { try {
account = new Account(PeertubeMainActivity.this).getAccountByToken(tokenStr); account = new Account(PeertubeMainActivity.this).getAccountByToken(tokenStr);
@ -399,8 +401,7 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
e.printStackTrace(); e.printStackTrace();
} }
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_ID, account.user_id); editor.putString(PREF_USER_ID, account.user_id);
editor.putString(Helper.PREF_KEY_NAME, account.peertube_account.getUsername());
editor.putBoolean(getString(R.string.set_autoplay_choice), userMe.isAutoPlayVideo()); editor.putBoolean(getString(R.string.set_autoplay_choice), userMe.isAutoPlayVideo());
editor.putBoolean(getString(R.string.set_store_in_history), userMe.isVideosHistoryEnabled()); editor.putBoolean(getString(R.string.set_store_in_history), userMe.isVideosHistoryEnabled());
editor.putBoolean(getString(R.string.set_autoplay_next_video_choice), userMe.isAutoPlayNextVideo()); editor.putBoolean(getString(R.string.set_autoplay_next_video_choice), userMe.isAutoPlayNextVideo());
@ -686,7 +687,7 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
alt_bld.setSingleChoiceItems(academiesKey, position, (dialog, item) -> { alt_bld.setSingleChoiceItems(academiesKey, position, (dialog, item) -> {
String newInstance = academiesValue[item]; String newInstance = academiesValue[item];
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, newInstance); editor.putString(PREF_INSTANCE, newInstance);
editor.commit(); editor.commit();
dialog.dismiss(); dialog.dismiss();
recreate(); recreate();
@ -704,7 +705,7 @@ public abstract class PeertubeMainActivity extends PeertubeBaseMainActivity {
if (data != null && data.getData() != null) { if (data != null && data.getData() != null) {
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, String.valueOf(data.getData())); editor.putString(PREF_INSTANCE, String.valueOf(data.getData()));
editor.commit(); editor.commit();
recreate(); recreate();
} }

View file

@ -14,6 +14,10 @@ package app.fedilab.android.peertube.client;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -174,9 +178,8 @@ public class RetrofitPeertubeAPI {
boolean userExists = false; boolean userExists = false;
try { try {
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_ID, account.user_id); editor.putString(PREF_USER_ID, account.user_id);
editor.putString(Helper.PREF_KEY_NAME, peertubeAccount.getUsername()); editor.putString(PREF_INSTANCE, host);
editor.putString(Helper.PREF_INSTANCE, host);
editor.apply(); editor.apply();
new Account(activity).insertOrUpdate(account); new Account(activity).insertOrUpdate(account);
} catch (DBException e) { } catch (DBException e) {
@ -250,7 +253,7 @@ public class RetrofitPeertubeAPI {
if (oauthParams.getGrant_type().compareTo("refresh_token") == 0 && tokenReply != null) { if (oauthParams.getGrant_type().compareTo("refresh_token") == 0 && tokenReply != null) {
SharedPreferences sharedpreferences = _context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = _context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, tokenReply.getAccess_token()); editor.putString(PREF_USER_TOKEN, tokenReply.getAccess_token());
editor.putString(Helper.PREF_SOFTWARE, null); editor.putString(Helper.PREF_SOFTWARE, null);
editor.putString(Helper.PREF_REMOTE_INSTANCE, null); editor.putString(Helper.PREF_REMOTE_INSTANCE, null);
editor.apply(); editor.apply();

View file

@ -644,6 +644,7 @@ public class VideoData implements Serializable {
public static class UserHistory implements Serializable { public static class UserHistory implements Serializable {
@SerializedName("currentTime") @SerializedName("currentTime")
long currentTime; long currentTime;

View file

@ -16,6 +16,7 @@ package app.fedilab.android.peertube.drawer;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
@ -45,6 +46,7 @@ import app.fedilab.android.databinding.DrawerAboutInstancePeertubeBinding;
import app.fedilab.android.peertube.client.data.InstanceData; import app.fedilab.android.peertube.client.data.InstanceData;
import app.fedilab.android.peertube.helper.Helper; import app.fedilab.android.peertube.helper.Helper;
import app.fedilab.android.peertube.sqlite.StoredInstanceDAO; import app.fedilab.android.peertube.sqlite.StoredInstanceDAO;
import app.fedilab.android.sqlite.Sqlite;
public class AboutInstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class AboutInstanceAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -127,7 +129,7 @@ public class AboutInstanceAdapter extends RecyclerView.Adapter<RecyclerView.View
holder.binding.instanceContainer.setOnClickListener(v -> { holder.binding.instanceContainer.setOnClickListener(v -> {
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_INSTANCE, aboutInstance.getHost()); editor.putString(PREF_INSTANCE, aboutInstance.getHost());
editor.commit(); editor.commit();
Helper.logoutNoRemoval((Activity) context); Helper.logoutNoRemoval((Activity) context);
}); });

View file

@ -14,6 +14,9 @@ package app.fedilab.android.peertube.drawer;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -136,8 +139,8 @@ public class ChannelListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String channeIdOwner = channel.getOwnerAccount().getId(); String channeIdOwner = channel.getOwnerAccount().getId();
String channeInstanceOwner = channel.getOwnerAccount().getHost(); String channeInstanceOwner = channel.getOwnerAccount().getHost();
String instanceShar = sharedpreferences.getString(Helper.PREF_INSTANCE, null); String instanceShar = sharedpreferences.getString(PREF_INSTANCE, null);
String userIdShar = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String userIdShar = sharedpreferences.getString(PREF_USER_ID, null);
if (channeIdOwner != null && channeInstanceOwner != null && instanceShar != null && userIdShar != null) { if (channeIdOwner != null && channeInstanceOwner != null && instanceShar != null && userIdShar != null) {
return channeIdOwner.compareTo(userIdShar) == 0 && channeInstanceOwner.compareTo(instanceShar) == 0; return channeIdOwner.compareTo(userIdShar) == 0 && channeInstanceOwner.compareTo(instanceShar) == 0;
} else { } else {

View file

@ -76,10 +76,10 @@ public class OwnAccountsAdapter extends ArrayAdapter<BaseAccount> {
} else { } else {
holder = (ViewHolder) convertView.getTag(); holder = (ViewHolder) convertView.getTag();
} }
ac
holder.account_un.setText(String.format("@%s", account.getAcct())); holder.account_un.setText(String.format("@%s", account.peertube_account.getAcct()));
//Profile picture //Profile picture
Helper.loadAvatar(holder.account_pp.getContext(), account, holder.account_pp); Helper.loadAvatar(holder.account_pp.getContext(), account.peertube_account, holder.account_pp);
return convertView; return convertView;
} }

View file

@ -119,9 +119,6 @@ public class PeertubeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
return; return;
} }
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, "");
assert userId != null;
boolean videoInList = sharedpreferences.getBoolean(context.getString(R.string.set_video_in_list_choice), false); boolean videoInList = sharedpreferences.getBoolean(context.getString(R.string.set_video_in_list_choice), false);

View file

@ -18,7 +18,6 @@ package app.fedilab.android.peertube.drawer;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -110,15 +109,8 @@ public class PlaylistAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
.setPositiveButton(R.string.yes, (dialog, which) -> { .setPositiveButton(R.string.yes, (dialog, which) -> {
playlists.remove(playlist); playlists.remove(playlist);
notifyDataSetChanged(); notifyDataSetChanged();
if (!locale) { PlaylistsVM viewModel = new ViewModelProvider((ViewModelStoreOwner) context).get(PlaylistsVM.class);
PlaylistsVM viewModel = new ViewModelProvider((ViewModelStoreOwner) context).get(PlaylistsVM.class); viewModel.manage(PlaylistsVM.action.DELETE_PLAYLIST, playlist, null).observe((LifecycleOwner) context, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.DELETE_PLAYLIST, apiResponse));
viewModel.manage(PlaylistsVM.action.DELETE_PLAYLIST, playlist, null).observe((LifecycleOwner) context, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.DELETE_PLAYLIST, apiResponse));
} else {
new Thread(() -> {
SQLiteDatabase db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new ManagePlaylistsDAO(context, db).removePlaylist(playlist.getUuid());
}).start();
}
if (playlists.size() == 0) { if (playlists.size() == 0) {
allPlaylistRemoved.onAllPlaylistRemoved(); allPlaylistRemoved.onAllPlaylistRemoved();
} }

View file

@ -37,6 +37,7 @@ import java.util.List;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.APIResponse;
import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI;
import app.fedilab.android.peertube.client.data.AccountData;
import app.fedilab.android.peertube.client.data.BlockData; import app.fedilab.android.peertube.client.data.BlockData;
import app.fedilab.android.peertube.drawer.AccountsListAdapter; import app.fedilab.android.peertube.drawer.AccountsListAdapter;
import app.fedilab.android.peertube.viewmodel.AccountsVM; import app.fedilab.android.peertube.viewmodel.AccountsVM;
@ -49,7 +50,7 @@ public class DisplayAccountsFragment extends Fragment implements AccountsListAda
private Context context; private Context context;
private AccountsListAdapter accountsListAdapter; private AccountsListAdapter accountsListAdapter;
private String max_id; private String max_id;
private List<Account> accounts; private List<AccountData.PeertubeAccount> accounts;
private RelativeLayout mainLoader, nextElementLoader, textviewNoAction; private RelativeLayout mainLoader, nextElementLoader, textviewNoAction;
private boolean firstLoad; private boolean firstLoad;
private SwipeRefreshLayout swipeRefreshLayout; private SwipeRefreshLayout swipeRefreshLayout;
@ -168,7 +169,7 @@ public class DisplayAccountsFragment extends Fragment implements AccountsListAda
return; return;
} }
flag_loading = (apiResponse.getMax_id() == null); flag_loading = (apiResponse.getMax_id() == null);
List<Account> accounts = apiResponse.getAccounts(); List<AccountData.PeertubeAccount> accounts = apiResponse.getAccounts();
if (accountFetch == RetrofitPeertubeAPI.DataType.MUTED) { if (accountFetch == RetrofitPeertubeAPI.DataType.MUTED) {
accounts = new ArrayList<>(); accounts = new ArrayList<>();
List<BlockData.Block> blockList = apiResponse.getMuted(); List<BlockData.Block> blockList = apiResponse.getMuted();

View file

@ -1,68 +0,0 @@
package app.fedilab.android.peertube.helper;
/* Copyright 2020 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 <http://www.gnu.org/licenses>. */
import android.content.Context;
import android.content.SharedPreferences;
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.FileDataSource;
import com.google.android.exoplayer2.upstream.cache.CacheDataSink;
import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor;
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
import com.google.android.exoplayer2.util.Util;
import java.io.File;
public class CacheDataSourceFactory implements DataSource.Factory {
private static SimpleCache sDownloadCache;
private final Context context;
private final DefaultDataSourceFactory defaultDatasourceFactory;
private final long maxFileSize;
public CacheDataSourceFactory(Context context) {
super();
this.context = context;
this.maxFileSize = 5 * 1024 * 1024;
DefaultBandwidthMeter.Builder bandwidthMeterBuilder = new DefaultBandwidthMeter.Builder(context);
DefaultBandwidthMeter bandwidthMeter = bandwidthMeterBuilder.build();
defaultDatasourceFactory = new DefaultDataSourceFactory(this.context,
bandwidthMeter,
new DefaultHttpDataSourceFactory(Util.getUserAgent(context, null), bandwidthMeter));
}
public static SimpleCache getInstance(Context context) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
LeastRecentlyUsedCacheEvictor evictor = new LeastRecentlyUsedCacheEvictor(video_cache * 1024 * 1024);
ExoDatabaseProvider exoDatabaseProvider = new ExoDatabaseProvider(context);
if (sDownloadCache == null)
sDownloadCache = new SimpleCache(new File(context.getCacheDir(), "media"), evictor, exoDatabaseProvider);
return sDownloadCache;
}
@Override
public DataSource createDataSource() {
SimpleCache simpleCache = getInstance(context);
return new CacheDataSource(simpleCache, defaultDatasourceFactory.createDataSource(),
new FileDataSource(), new CacheDataSink(simpleCache, maxFileSize),
CacheDataSource.FLAG_BLOCK_ON_CACHE | CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR, null);
}
}

View file

@ -16,6 +16,9 @@ package app.fedilab.android.peertube.helper;
import static android.content.Context.DOWNLOAD_SERVICE; import static android.content.Context.DOWNLOAD_SERVICE;
import static android.content.Context.MODE_PRIVATE; import static android.content.Context.MODE_PRIVATE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
@ -122,7 +125,8 @@ public class Helper {
public static final String OAUTH_SCOPES_PEERTUBE = "openid profile"; public static final String OAUTH_SCOPES_PEERTUBE = "openid profile";
public static final String OAUTH_SCOPES_MASTODON = "read write follow"; public static final String OAUTH_SCOPES_MASTODON = "read write follow";
public static final String REDIRECT_CONTENT = "urn:ietf:wg:oauth:2.0:oob"; public static final String REDIRECT_CONTENT = "urn:ietf:wg:oauth:2.0:oob";
public static final String PREF_KEY_OAUTH_TOKEN = "oauth_token"; public static final String PREF_SOFTWARE = "pref_software";
public static final String PREF_REMOTE_INSTANCE = "pref_remote_instance";
public static final Pattern redirectPattern = Pattern.compile("externalAuthToken=(\\w+)&username=([\\w.-]+)"); public static final Pattern redirectPattern = Pattern.compile("externalAuthToken=(\\w+)&username=([\\w.-]+)");
public static final String SET_VIDEO_CACHE = "set_video_cache"; public static final String SET_VIDEO_CACHE = "set_video_cache";
public static final String RECEIVE_CAST_SETTINGS = "receive_cast_settings"; public static final String RECEIVE_CAST_SETTINGS = "receive_cast_settings";
@ -131,9 +135,6 @@ public class Helper {
public static final String SET_PROXY_HOST = "set_proxy_host"; public static final String SET_PROXY_HOST = "set_proxy_host";
public static final String SET_PROXY_PORT = "set_proxy_port"; public static final String SET_PROXY_PORT = "set_proxy_port";
public static final String INTENT_ACTION = "intent_action"; public static final String INTENT_ACTION = "intent_action";
public static final String PREF_KEY_ID = "userID";
public static final String PREF_KEY_NAME = "my_user_name";
public static final String PREF_INSTANCE = "instance";
public static final int EXTERNAL_STORAGE_REQUEST_CODE = 84; public static final int EXTERNAL_STORAGE_REQUEST_CODE = 84;
public static final String SET_VIDEOS_PER_PAGE = "set_videos_per_page"; public static final String SET_VIDEOS_PER_PAGE = "set_videos_per_page";
public static final String VIDEO_ID = "video_id_update"; public static final String VIDEO_ID = "video_id_update";
@ -565,11 +566,11 @@ public class Helper {
public static void logoutNoRemoval(Activity activity) { public static void logoutNoRemoval(Activity activity) {
SharedPreferences sharedpreferences = activity.getSharedPreferences(APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = activity.getSharedPreferences(APP_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(PREF_KEY_OAUTH_TOKEN, null); editor.putString(PREF_USER_TOKEN, null);
editor.putString(CLIENT_ID, null); editor.putString(CLIENT_ID, null);
editor.putString(CLIENT_SECRET, null); editor.putString(CLIENT_SECRET, null);
editor.putString(PREF_KEY_ID, null); editor.putString(PREF_USER_ID, null);
editor.putString(ID, null); editor.putString(PREF_INSTANCE, null);
editor.apply(); editor.apply();
Intent loginActivity = new Intent(activity, PeertubeMainActivity.class); Intent loginActivity = new Intent(activity, PeertubeMainActivity.class);
activity.startActivity(loginActivity); activity.startActivity(loginActivity);
@ -619,7 +620,7 @@ public class Helper {
*/ */
public static PeertubeMainActivity.TypeOfConnection isLoggedInType(Context context) { public static PeertubeMainActivity.TypeOfConnection isLoggedInType(Context context) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String prefKeyOauthTokenT = sharedpreferences.getString(PREF_KEY_OAUTH_TOKEN, null); String prefKeyOauthTokenT = sharedpreferences.getString(PREF_USER_TOKEN, null);
String prefSoftware = sharedpreferences.getString(PREF_SOFTWARE, null); String prefSoftware = sharedpreferences.getString(PREF_SOFTWARE, null);
if (prefKeyOauthTokenT != null && prefSoftware == null) { if (prefKeyOauthTokenT != null && prefSoftware == null) {
return PeertubeMainActivity.TypeOfConnection.NORMAL; return PeertubeMainActivity.TypeOfConnection.NORMAL;
@ -633,7 +634,7 @@ public class Helper {
public static String getToken(Context context) { public static String getToken(Context context) {
if (isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.NORMAL) { if (isLoggedInType(context) == PeertubeMainActivity.TypeOfConnection.NORMAL) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
return sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); return sharedpreferences.getString(PREF_USER_TOKEN, null);
} else { } else {
return null; return null;
} }
@ -660,28 +661,24 @@ public class Helper {
public static boolean isOwner(Context context, AccountData.PeertubeAccount account) { public static boolean isOwner(Context context, AccountData.PeertubeAccount account) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String userName = sharedpreferences.getString(Helper.PREF_KEY_NAME, ""); String userId = sharedpreferences.getString(PREF_USER_ID, "");
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, ""); String instance = sharedpreferences.getString(PREF_INSTANCE, "");
if (instance != null && userName != null) { return account.getUserId().compareTo(userId) == 0 && account.getHost().compareTo(instance) == 0;
return account.getUsername().compareTo(userName) == 0 && account.getHost().compareTo(instance) == 0;
} else {
return false;
}
} }
public static boolean isVideoOwner(Context context, VideoData.Video video) { public static boolean isVideoOwner(Context context, VideoData.Video video) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String userName = sharedpreferences.getString(Helper.PREF_KEY_NAME, ""); String userId = sharedpreferences.getString(PREF_USER_ID, "");
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, ""); String instance = sharedpreferences.getString(PREF_INSTANCE, "");
if (video == null) { if (video == null) {
return false; return false;
} }
AccountData.PeertubeAccount account = video.getAccount(); AccountData.PeertubeAccount account = video.getAccount();
ChannelData.Channel channel = video.getChannel(); ChannelData.Channel channel = video.getChannel();
if (account != null && instance != null && userName != null) { if (account != null) {
return account.getUsername().compareTo(userName) == 0 && account.getHost().compareTo(instance) == 0; return account.getUserId().compareTo(userId) == 0 && account.getHost().compareTo(instance) == 0;
} else if (channel != null && instance != null && userName != null) { } else if (channel != null) {
return channel.getName().compareTo(userName) == 0 && channel.getHost().compareTo(instance) == 0; return channel.getOwnerAccount().getUserId().compareTo(userId) == 0 && channel.getHost().compareTo(instance) == 0;
} else { } else {
return false; return false;
} }

View file

@ -14,6 +14,8 @@ package app.fedilab.android.peertube.helper;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -29,7 +31,7 @@ public class HelperInstance {
*/ */
public static String getLiveInstance(Context context) { public static String getLiveInstance(Context context) {
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
return sharedpreferences.getString(Helper.PREF_INSTANCE, null); return sharedpreferences.getString(PREF_INSTANCE, null);
} }
} }

View file

@ -15,6 +15,9 @@ package app.fedilab.android.peertube.helper;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static android.content.Context.MODE_PRIVATE; import static android.content.Context.MODE_PRIVATE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_INSTANCE;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
@ -57,10 +60,9 @@ public class SwitchAccountHelper {
final BaseAccount account = accountArray[which]; final BaseAccount account = accountArray[which];
SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.token); editor.putString(PREF_USER_TOKEN, account.token);
editor.putString(Helper.PREF_INSTANCE, account.instance); editor.putString(PREF_INSTANCE, account.instance);
editor.putString(Helper.PREF_KEY_ID, account.user_id); editor.putString(PREF_USER_ID, account.user_id);
editor.putString(Helper.PREF_KEY_NAME, account.peertube_account != null ? account.peertube_account.getUsername() : null);
editor.apply(); editor.apply();
dialog.dismiss(); dialog.dismiss();
Intent intent = new Intent(activity, BaseMainActivity.class); Intent intent = new Intent(activity, BaseMainActivity.class);

View file

@ -14,6 +14,8 @@ package app.fedilab.android.peertube.sqlite;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -88,7 +90,7 @@ public class StoredInstanceDAO {
} }
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String userId = sharedpreferences.getString(PREF_USER_ID, null);
String instance = HelperInstance.getLiveInstance(context); String instance = HelperInstance.getLiveInstance(context);
values.put(Sqlite.COL_USER_ID, userId != null ? userId : "_ALL_"); values.put(Sqlite.COL_USER_ID, userId != null ? userId : "_ALL_");

View file

@ -14,12 +14,8 @@ package app.fedilab.android.peertube.viewmodel;
* You should have received a copy of the GNU General Public License along with TubeLab; if not, * You should have received a copy of the GNU General Public License along with TubeLab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import static android.content.Context.MODE_PRIVATE;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
@ -28,6 +24,8 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import app.fedilab.android.mastodon.client.entities.app.Account;
import app.fedilab.android.mastodon.client.entities.app.BaseAccount;
import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.APIResponse;
import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI;
import app.fedilab.android.peertube.client.data.AccountData; import app.fedilab.android.peertube.client.data.AccountData;
@ -59,10 +57,9 @@ public class ChannelsVM extends AndroidViewModel {
String finalElement = element; String finalElement = element;
try { try {
if (type == RetrofitPeertubeAPI.DataType.MY_CHANNELS) { if (type == RetrofitPeertubeAPI.DataType.MY_CHANNELS) {
SharedPreferences sharedpreferences = _mContext.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SQLiteDatabase db = Sqlite.getInstance(_mContext.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String token = Helper.getToken(_mContext); String token = Helper.getToken(_mContext);
AccountData.PeertubeAccount account = new AccountDAO(_mContext, db).getAccountByToken(token); BaseAccount baseAccount = new Account(_mContext).getAccountByToken(token);
AccountData.PeertubeAccount account = baseAccount.peertube_account;
finalElement = account.getUsername() + "@" + account.getHost(); finalElement = account.getUsername() + "@" + account.getHost();
} }
RetrofitPeertubeAPI retrofitPeertubeAPI; RetrofitPeertubeAPI retrofitPeertubeAPI;

View file

@ -29,6 +29,7 @@ import java.util.List;
import app.fedilab.android.peertube.client.data.InstanceData; import app.fedilab.android.peertube.client.data.InstanceData;
import app.fedilab.android.peertube.sqlite.StoredInstanceDAO; import app.fedilab.android.peertube.sqlite.StoredInstanceDAO;
import app.fedilab.android.sqlite.Sqlite;
public class InfoInstanceVM extends AndroidViewModel { public class InfoInstanceVM extends AndroidViewModel {

View file

@ -24,8 +24,10 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import app.fedilab.android.mastodon.client.entities.app.BaseAccount;
import app.fedilab.android.peertube.client.APIResponse; import app.fedilab.android.peertube.client.APIResponse;
import app.fedilab.android.peertube.client.RetrofitPeertubeAPI; import app.fedilab.android.peertube.client.RetrofitPeertubeAPI;
import app.fedilab.android.peertube.client.entities.Error;
public class NotificationsVM extends AndroidViewModel { public class NotificationsVM extends AndroidViewModel {
@ -35,13 +37,13 @@ public class NotificationsVM extends AndroidViewModel {
super(application); super(application);
} }
public LiveData<APIResponse> getNotifications(Account account, String max_id) { public LiveData<APIResponse> getNotifications(BaseAccount account, String max_id) {
apiResponseMutableLiveData = new MutableLiveData<>(); apiResponseMutableLiveData = new MutableLiveData<>();
loadNotifications(account, max_id); loadNotifications(account, max_id);
return apiResponseMutableLiveData; return apiResponseMutableLiveData;
} }
private void loadNotifications(Account account, String max_id) { private void loadNotifications(BaseAccount account, String max_id) {
Context _mContext = getApplication().getApplicationContext(); Context _mContext = getApplication().getApplicationContext();
new Thread(() -> { new Thread(() -> {
try { try {
@ -55,7 +57,7 @@ public class NotificationsVM extends AndroidViewModel {
apiResponse = new APIResponse(); apiResponse = new APIResponse();
apiResponse.setError(new Error()); apiResponse.setError(new Error());
} }
api = new RetrofitPeertubeAPI(_mContext, account.getHost(), account.getToken()); api = new RetrofitPeertubeAPI(_mContext, account.instance, account.token);
apiResponse = api.getNotifications(null, max_id); apiResponse = api.getNotifications(null, max_id);
} }
Handler mainHandler = new Handler(Looper.getMainLooper()); Handler mainHandler = new Handler(Looper.getMainLooper());

View file

@ -1,115 +0,0 @@
package app.fedilab.android.peertube.viewmodel.mastodon;
/* 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 <http://www.gnu.org/licenses>. */
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import app.fedilab.android.peertube.client.mastodon.RetrofitMastodonAPI;
import app.fedilab.android.peertube.client.mastodon.Status;
public class MastodonPostActionsVM extends AndroidViewModel {
private MutableLiveData<Status> statusMutableLiveData;
public MastodonPostActionsVM(@NonNull Application application) {
super(application);
}
public LiveData<Status> post(RetrofitMastodonAPI.actionType type, Status status) {
statusMutableLiveData = new MutableLiveData<>();
postAction(type, status);
return statusMutableLiveData;
}
public LiveData<Status> comment(String url, String content) {
statusMutableLiveData = new MutableLiveData<>();
postComment(url, content);
return statusMutableLiveData;
}
public LiveData<Status> searchRemoteStatus(String url) {
statusMutableLiveData = new MutableLiveData<>();
search(url);
return statusMutableLiveData;
}
private void search(String videoURL) {
Context _mContext = getApplication().getApplicationContext();
new Thread(() -> {
try {
RetrofitMastodonAPI mastodonAPI = new RetrofitMastodonAPI(_mContext);
Status status = null;
try {
status = mastodonAPI.search(videoURL);
} catch (Error error) {
error.printStackTrace();
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Status finalStatus = status;
Runnable myRunnable = () -> statusMutableLiveData.setValue(finalStatus);
mainHandler.post(myRunnable);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
private void postComment(String videoURL, String content) {
Context _mContext = getApplication().getApplicationContext();
new Thread(() -> {
try {
RetrofitMastodonAPI mastodonAPI = new RetrofitMastodonAPI(_mContext);
Status status = null;
try {
status = mastodonAPI.commentAction(videoURL, content);
} catch (Error error) {
error.printStackTrace();
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Status finalStatus = status;
Runnable myRunnable = () -> statusMutableLiveData.setValue(finalStatus);
mainHandler.post(myRunnable);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
private void postAction(RetrofitMastodonAPI.actionType type, Status status) {
Context _mContext = getApplication().getApplicationContext();
new Thread(() -> {
try {
RetrofitMastodonAPI mastodonAPI = new RetrofitMastodonAPI(_mContext);
Status statusReply = mastodonAPI.postAction(type, status);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> statusMutableLiveData.setValue(statusReply);
mainHandler.post(myRunnable);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}