fedilab-Android-App/app/src/main/java/app/fedilab/android/activities/ContextActivity.java

177 lines
7.6 KiB
Java
Raw Normal View History

2022-04-27 15:20:42 +02:00
package app.fedilab.android.activities;
/* Copyright 2021 Thomas Schneider
*
* This file is a part of Fedilab
*
* 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.
*
* Fedilab 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 Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
2022-06-21 17:09:34 +02:00
import static app.fedilab.android.BaseMainActivity.currentAccount;
2022-06-14 19:17:35 +02:00
import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction;
2022-04-27 15:20:42 +02:00
import android.content.SharedPreferences;
import android.content.res.Resources;
2022-05-08 10:37:47 +02:00
import android.graphics.drawable.ColorDrawable;
2022-04-27 15:20:42 +02:00
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
2022-05-08 10:37:47 +02:00
import androidx.core.content.ContextCompat;
2022-04-27 15:20:42 +02:00
import androidx.fragment.app.Fragment;
2022-06-14 19:17:35 +02:00
import androidx.lifecycle.ViewModelProvider;
2022-04-27 15:20:42 +02:00
import androidx.preference.PreferenceManager;
2022-06-30 14:44:52 +02:00
import app.fedilab.android.BaseMainActivity;
2022-04-27 15:20:42 +02:00
import app.fedilab.android.R;
2022-05-24 10:12:04 +02:00
import app.fedilab.android.client.entities.api.Status;
2022-06-14 19:17:35 +02:00
import app.fedilab.android.client.entities.app.QuickLoad;
import app.fedilab.android.client.entities.app.StatusCache;
2022-04-27 15:20:42 +02:00
import app.fedilab.android.databinding.ActivityConversationBinding;
2022-06-14 19:17:35 +02:00
import app.fedilab.android.exception.DBException;
2022-04-27 15:20:42 +02:00
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.helper.SpannableHelper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext;
2022-06-14 19:17:35 +02:00
import app.fedilab.android.viewmodel.mastodon.StatusesVM;
2022-04-27 15:20:42 +02:00
public class ContextActivity extends BaseActivity {
public static boolean expand;
public static boolean displayCW;
2022-04-27 18:15:32 +02:00
public static Resources.Theme theme;
2022-04-27 15:20:42 +02:00
Fragment currentFragment;
private Status focusedStatus;
private ActivityConversationBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeHelper.applyTheme(this);
binding = ActivityConversationBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
ActionBar actionBar = getSupportActionBar();
//Remove title
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
2022-05-08 10:37:47 +02:00
actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary)));
2022-04-27 15:20:42 +02:00
}
binding.title.setText(R.string.context_conversation);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
binding.toolbar.setPopupTheme(Helper.popupStyle());
Bundle b = getIntent().getExtras();
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ContextActivity.this);
displayCW = sharedpreferences.getBoolean(getString(R.string.SET_EXPAND_CW), false);
focusedStatus = null; // or other values
if (b != null)
focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS);
2022-07-06 16:51:09 +02:00
if (focusedStatus == null && currentAccount == null || currentAccount.mastodon_account == null) {
2022-04-27 15:20:42 +02:00
finish();
return;
}
2022-06-21 17:09:34 +02:00
MastodonHelper.loadPPMastodon(binding.profilePicture, currentAccount.mastodon_account);
2022-04-27 15:20:42 +02:00
Bundle bundle = new Bundle();
new Thread(() -> {
focusedStatus = SpannableHelper.convertStatus(getApplication().getApplicationContext(), focusedStatus);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
bundle.putSerializable(Helper.ARG_STATUS, focusedStatus);
currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, new FragmentMastodonContext(), bundle, null, null);
};
mainHandler.post(myRunnable);
}).start();
2022-06-14 19:17:35 +02:00
StatusesVM timelinesVM = new ViewModelProvider(ContextActivity.this).get(StatusesVM.class);
2022-06-30 14:44:52 +02:00
timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(ContextActivity.this, status -> {
2022-06-21 16:01:27 +02:00
if (status != null) {
StatusCache statusCache = new StatusCache();
2022-06-30 14:44:52 +02:00
statusCache.instance = BaseMainActivity.currentInstance;
statusCache.user_id = BaseMainActivity.currentUserID;
2022-06-21 16:01:27 +02:00
statusCache.status = status;
statusCache.status_id = status.id;
//Update cache
new Thread(() -> {
try {
new StatusCache(getApplication()).updateIfExists(statusCache);
2022-06-21 17:09:34 +02:00
new QuickLoad(getApplication().getApplicationContext()).updateStatus(currentAccount, status);
2022-06-21 16:01:27 +02:00
Handler mainHandler = new Handler(Looper.getMainLooper());
//Update UI
Runnable myRunnable = () -> sendAction(ContextActivity.this, Helper.ARG_STATUS_ACTION, status, null);
mainHandler.post(myRunnable);
} catch (DBException e) {
e.printStackTrace();
}
}).start();
}
2022-06-14 19:17:35 +02:00
});
2022-04-27 15:20:42 +02:00
}
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_context, menu);
MenuItem itemExpand = menu.findItem(R.id.action_expand);
if (expand) {
itemExpand.setIcon(R.drawable.ic_baseline_expand_less_24);
} else {
itemExpand.setIcon(R.drawable.ic_baseline_expand_more_24);
}
MenuItem itemDisplayCW = menu.findItem(R.id.action_show_cw);
if (displayCW) {
itemDisplayCW.setIcon(R.drawable.ic_baseline_remove_red_eye_24);
} else {
itemDisplayCW.setIcon(R.drawable.ic_outline_remove_red_eye_24);
}
return true;
}
public void setCurrentFragment(FragmentMastodonContext fragmentMastodonContext) {
currentFragment = fragmentMastodonContext;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.action_expand) {
expand = !expand;
if (currentFragment != null && currentFragment instanceof FragmentMastodonContext) {
((FragmentMastodonContext) currentFragment).redraw();
}
invalidateOptionsMenu();
} else if (item.getItemId() == R.id.action_show_cw) {
displayCW = !displayCW;
if (currentFragment != null && currentFragment instanceof FragmentMastodonContext) {
((FragmentMastodonContext) currentFragment).refresh();
}
invalidateOptionsMenu();
}
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
binding = null;
currentFragment = null;
}
}