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

2577 lines
127 KiB
Java

/* Copyright 2017 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>. */
package app.fedilab.android.activities;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.preference.PreferenceManager;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.tabs.TabLayout;
import org.jetbrains.annotations.NotNull;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
import app.fedilab.android.asynctasks.ManageFiltersAsyncTask;
import app.fedilab.android.asynctasks.RetrieveAccountsAsyncTask;
import app.fedilab.android.asynctasks.RetrieveFeedsAsyncTask;
import app.fedilab.android.asynctasks.RetrieveInstanceAsyncTask;
import app.fedilab.android.asynctasks.RetrieveMetaDataAsyncTask;
import app.fedilab.android.asynctasks.RetrievePeertubeInformationAsyncTask;
import app.fedilab.android.asynctasks.RetrieveRelationshipAsyncTask;
import app.fedilab.android.asynctasks.RetrieveRemoteDataAsyncTask;
import app.fedilab.android.asynctasks.SyncTimelinesAsyncTask;
import app.fedilab.android.asynctasks.UpdateAccountInfoAsyncTask;
import app.fedilab.android.asynctasks.UpdateAccountInfoByIDAsyncTask;
import app.fedilab.android.client.APIResponse;
import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Announcement;
import app.fedilab.android.client.Entities.Error;
import app.fedilab.android.client.Entities.Filters;
import app.fedilab.android.client.Entities.Instance;
import app.fedilab.android.client.Entities.ManageTimelines;
import app.fedilab.android.client.Entities.Relationship;
import app.fedilab.android.client.Entities.Results;
import app.fedilab.android.client.Entities.Status;
import app.fedilab.android.client.Entities.TagTimeline;
import app.fedilab.android.drawers.AccountSearchDevAdapter;
import app.fedilab.android.fragments.DisplayAccountsFragment;
import app.fedilab.android.fragments.DisplayDraftsFragment;
import app.fedilab.android.fragments.DisplayFavoritesPeertubeFragment;
import app.fedilab.android.fragments.DisplayFiltersFragment;
import app.fedilab.android.fragments.DisplayFollowRequestSentFragment;
import app.fedilab.android.fragments.DisplayListsFragment;
import app.fedilab.android.fragments.DisplayNotificationsFragment;
import app.fedilab.android.fragments.DisplayPeertubeNotificationsFragment;
import app.fedilab.android.fragments.DisplayPlaylistsFragment;
import app.fedilab.android.fragments.DisplayStatusFragment;
import app.fedilab.android.fragments.DisplayStoriesFragment;
import app.fedilab.android.fragments.SettingsPeertubeFragment;
import app.fedilab.android.fragments.TabLayoutNotificationsFragment;
import app.fedilab.android.fragments.TabLayoutScheduleFragment;
import app.fedilab.android.fragments.WhoToFollowFragment;
import app.fedilab.android.helper.CrossActions;
import app.fedilab.android.helper.ExpandableHeightListView;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MenuFloating;
import app.fedilab.android.helper.PushHelper;
import app.fedilab.android.interfaces.OnFilterActionInterface;
import app.fedilab.android.interfaces.OnRetrieveEmojiAccountInterface;
import app.fedilab.android.interfaces.OnRetrieveFeedsInterface;
import app.fedilab.android.interfaces.OnRetrieveInstanceInterface;
import app.fedilab.android.interfaces.OnRetrieveMetaDataInterface;
import app.fedilab.android.interfaces.OnRetrieveRelationshipInterface;
import app.fedilab.android.interfaces.OnRetrieveRemoteAccountInterface;
import app.fedilab.android.interfaces.OnSyncTimelineInterface;
import app.fedilab.android.interfaces.OnUpdateAccountInfoInterface;
import app.fedilab.android.services.BackupStatusService;
import app.fedilab.android.services.DownloadTrackingDBScriptsService;
import app.fedilab.android.sqlite.AccountDAO;
import app.fedilab.android.sqlite.Sqlite;
import app.fedilab.android.sqlite.TempMuteDAO;
import app.fedilab.android.sqlite.TimelineCacheDAO;
import app.fedilab.android.sqlite.TimelinesDAO;
import es.dmoral.toasty.Toasty;
import static app.fedilab.android.activities.WebviewActivity.trackingDomains;
import static app.fedilab.android.asynctasks.ManageFiltersAsyncTask.action.GET_ALL_FILTER;
import static app.fedilab.android.helper.BaseHelper.NOTIF_NONE;
import static app.fedilab.android.helper.BaseHelper.NOTIF_PUSH;
import static app.fedilab.android.helper.Helper.changeDrawableColor;
public abstract class BaseMainActivity extends BaseActivity
implements NavigationView.OnNavigationItemSelectedListener, OnRetrieveFeedsInterface, OnUpdateAccountInfoInterface, OnRetrieveMetaDataInterface, OnRetrieveInstanceInterface, OnRetrieveRemoteAccountInterface, OnRetrieveEmojiAccountInterface, OnFilterActionInterface, OnSyncTimelineInterface, OnRetrieveRelationshipInterface {
public static String currentLocale;
public static List<Filters> filters = new ArrayList<>();
public static int countNewStatus;
public static int countNewNotifications;
public static String lastHomeId = null, lastNotificationId = null;
public static String displayPeertube = null;
public static UpdateAccountInfoAsyncTask.SOCIAL social;
public static List<ManageTimelines> timelines;
public static HashMap<Integer, Fragment> mPageReferenceMap;
public static HashMap<String, Integer> poll_limits = new HashMap<>();
public static List<String> mutedAccount = new ArrayList<>();
public static String regex_home, regex_local, regex_public;
public static boolean show_boosts, show_replies, show_art_nsfw;
public static iconLauncher mLauncher = iconLauncher.BUBBLES;
private static boolean notificationChecked = false;
private final int PICK_IMPORT = 5556;
private final HashMap<String, String> tagTile = new HashMap<>();
private final HashMap<String, Integer> tagItem = new HashMap<>();
private FloatingActionButton toot, delete_all, add_new;
private TextView toolbarTitle;
private SearchView toolbar_search;
private View headerLayout;
private TabLayout tabLayout;
private ViewPager viewPager;
private RelativeLayout main_app_container;
private AppBarLayout appBar;
private String userId;
private String instance;
private PagerAdapter adapter;
private ImageView delete_instance, display_timeline;
private int style;
private Activity activity;
private BroadcastReceiver hidde_menu, update_topbar;
private Instance instanceClass;
private View dialogReleaseNoteView;
private List<Account> developers;
@SuppressLint("ApplySharedPref")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(BaseMainActivity.this));
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
Account account = new AccountDAO(BaseMainActivity.this, db).getUniqAccount(userId, instance);
Intent intent = getIntent();
PackageManager pm = getPackageManager();
try {
if (intent != null && intent.getComponent() != null) {
ActivityInfo ai = pm.getActivityInfo(intent.getComponent(), PackageManager.GET_META_DATA);
String icon;
Bundle b = ai.metaData;
if (b != null) {
icon = b.getString("icon");
if (icon != null) {
switch (icon) {
case "fediverse":
mLauncher = iconLauncher.FEDIVERSE;
break;
case "hero":
mLauncher = iconLauncher.HERO;
break;
case "atom":
mLauncher = iconLauncher.ATOM;
break;
case "braincrash":
mLauncher = iconLauncher.BRAINCRASH;
break;
default:
mLauncher = iconLauncher.BUBBLES;
}
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.LOGO_LAUNCHER, icon);
editor.apply();
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (account == null) {
Helper.logoutCurrentUser(BaseMainActivity.this);
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
startActivity(myIntent);
finish();
return;
}
//Update the static variable which manages account type
Helper.setSoftware(account.getSocial(), true);
countNewStatus = 0;
countNewNotifications = 0;
regex_home = sharedpreferences.getString(Helper.SET_FILTER_REGEX_HOME, null);
regex_local = sharedpreferences.getString(Helper.SET_FILTER_REGEX_LOCAL, null);
regex_public = sharedpreferences.getString(Helper.SET_FILTER_REGEX_PUBLIC, null);
show_art_nsfw = sharedpreferences.getBoolean(Helper.SET_ART_WITH_NSFW, false);
show_boosts = sharedpreferences.getBoolean(Helper.SET_SHOW_BOOSTS, true);
show_replies = sharedpreferences.getBoolean(Helper.SET_SHOW_REPLIES, true);
if (mPageReferenceMap == null) {
mPageReferenceMap = new HashMap<>();
}
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
switch (theme) {
case Helper.THEME_LIGHT:
setTheme(R.style.AppTheme_NoActionBar_Fedilab);
break;
case Helper.THEME_BLACK:
setTheme(R.style.AppThemeBlack_NoActionBar);
break;
default:
setTheme(R.style.AppThemeDark_NoActionBar);
}
setContentView(R.layout.activity_main);
//Test if user is still log in
if (!Helper.isLoggedIn(BaseMainActivity.this)) {
//It is not, the user is redirected to the login page
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
startActivity(myIntent);
finish();
return;
}
activity = this;
rateThisApp();
//Intialize Peertube information
//This task will allow to instance a static PeertubeInformation class
if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
try {
new RetrievePeertubeInformationAsyncTask(BaseMainActivity.this);
} catch (Exception ignored) {
}
}
//Here, the user is authenticated
appBar = findViewById(R.id.appBar);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
toolbar_search = toolbar.findViewById(R.id.toolbar_search);
delete_instance = findViewById(R.id.delete_instance);
display_timeline = findViewById(R.id.display_timeline);
tabLayout = findViewById(R.id.tabLayout);
tabLayout.setBackgroundColor(ContextCompat.getColor(BaseMainActivity.this, R.color.cyanea_primary));
viewPager = findViewById(R.id.viewpager);
toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
toolbar_search = toolbar.findViewById(R.id.toolbar_search);
delete_instance = findViewById(R.id.delete_instance);
display_timeline = findViewById(R.id.display_timeline);
//TODO: without that code the search bar is invisible in light theme, should be fixed in another way.
if (theme == Helper.THEME_LIGHT) {
ImageView icon = toolbar_search.findViewById(R.id.search_button);
ImageView close = toolbar_search.findViewById(R.id.search_close_btn);
if (icon != null)
icon.setColorFilter(ContextCompat.getColor(BaseMainActivity.this, R.color.dark_icon));
if (close != null)
close.setColorFilter(ContextCompat.getColor(BaseMainActivity.this, R.color.dark_icon));
EditText editText = toolbar_search.findViewById(R.id.search_src_text);
editText.setHintTextColor(getResources().getColor(R.color.dark_icon));
editText.setTextColor(getResources().getColor(R.color.dark_icon));
changeDrawableColor(BaseMainActivity.this, delete_instance, R.color.dark_icon);
changeDrawableColor(BaseMainActivity.this, display_timeline, R.color.dark_icon);
}
display_timeline.setOnClickListener(v -> {
if (timelines == null || timelines.size() <= 0) {
return;
}
PopupMenu popup = new PopupMenu(BaseMainActivity.this, display_timeline);
try {
@SuppressLint("PrivateApi") Method method = popup.getMenu().getClass().getDeclaredMethod("setOptionalIconsVisible", boolean.class);
method.setAccessible(true);
method.invoke(popup.getMenu(), true);
} catch (Exception e) {
e.printStackTrace();
}
int i = 0;
for (ManageTimelines tl : timelines) {
MenuItem item = null;
switch (tl.getType()) {
case LIST:
item = popup.getMenu().add(0, 0, Menu.NONE, tl.getListTimeline().getTitle());
item.setIcon(R.drawable.ic_list_top_menu);
break;
case TAG:
String name = (tl.getTagTimeline().getDisplayname() != null && tl.getTagTimeline().getDisplayname().length() > 0) ? tl.getTagTimeline().getDisplayname() : tl.getTagTimeline().getName();
item = popup.getMenu().add(0, 0, Menu.NONE, name);
item.setIcon(R.drawable.ic_label_top_menu);
break;
case INSTANCE:
item = popup.getMenu().add(0, 0, Menu.NONE, tl.getRemoteInstance().getHost());
switch (tl.getRemoteInstance().getType()) {
case "MASTODON":
item.setIcon(R.drawable.mastodon_icon_item);
break;
case "PEERTUBE":
item.setIcon(R.drawable.peertube_icon);
break;
case "GNU":
item.setIcon(R.drawable.ic_gnu_social);
break;
case "MISSKEY":
item.setIcon(R.drawable.misskey);
break;
case "PIXELFED":
item.setIcon(R.drawable.pixelfed);
break;
}
break;
}
if (item != null) {
int finalI = i;
item.setOnMenuItemClickListener(item1 -> {
if (finalI < tabLayout.getTabCount() && tabLayout.getTabAt(finalI) != null) {
Objects.requireNonNull(tabLayout.getTabAt(finalI)).select();
}
return false;
});
}
i++;
}
popup.show();
});
final NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
Helper.hideMenuItem(BaseMainActivity.this, navigationView.getMenu());
toot = findViewById(R.id.toot);
tootShow();
delete_all = findViewById(R.id.delete_all);
add_new = findViewById(R.id.add_new);
main_app_container = findViewById(R.id.main_app_container);
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
new SyncTimelinesAsyncTask(BaseMainActivity.this, 0, Helper.canFetchList(BaseMainActivity.this, account), BaseMainActivity.this);
} else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
TabLayout.Tab pTabsub = tabLayout.newTab();
TabLayout.Tab pTabOver = tabLayout.newTab();
TabLayout.Tab pTabTrend = tabLayout.newTab();
TabLayout.Tab pTabAdded = tabLayout.newTab();
TabLayout.Tab pTabLocal = tabLayout.newTab();
pTabsub.setCustomView(R.layout.tab_badge);
pTabOver.setCustomView(R.layout.tab_badge);
pTabTrend.setCustomView(R.layout.tab_badge);
pTabAdded.setCustomView(R.layout.tab_badge);
pTabLocal.setCustomView(R.layout.tab_badge);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_subscriptions, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_overview, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_trending_up, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_recently_added, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_home, R.attr.iconColorMenu);
@SuppressLint("CutPasteId")
ImageView iconSub = pTabsub.getCustomView().findViewById(R.id.tab_icon);
iconSub.setImageResource(R.drawable.ic_subscriptions);
@SuppressLint("CutPasteId")
ImageView iconOver = pTabOver.getCustomView().findViewById(R.id.tab_icon);
iconOver.setImageResource(R.drawable.ic_overview);
@SuppressLint("CutPasteId")
ImageView iconTrend = pTabTrend.getCustomView().findViewById(R.id.tab_icon);
iconTrend.setImageResource(R.drawable.ic_trending_up);
@SuppressLint("CutPasteId")
ImageView iconAdded = pTabAdded.getCustomView().findViewById(R.id.tab_icon);
iconAdded.setImageResource(R.drawable.ic_recently_added);
@SuppressLint("CutPasteId")
ImageView iconLocal = pTabLocal.getCustomView().findViewById(R.id.tab_icon);
iconLocal.setImageResource(R.drawable.ic_home);
iconSub.setContentDescription(getString(R.string.subscriptions));
iconOver.setContentDescription(getString(R.string.overview));
iconTrend.setContentDescription(getString(R.string.trending));
iconAdded.setContentDescription(getString(R.string.recently_added));
iconLocal.setContentDescription(getString(R.string.local));
toot.setImageResource(R.drawable.ic_cloud_upload);
tabLayout.addTab(pTabsub);
tabLayout.addTab(pTabOver);
tabLayout.addTab(pTabTrend);
tabLayout.addTab(pTabAdded);
tabLayout.addTab(pTabLocal);
adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
delete_instance.setVisibility(View.GONE);
Helper.switchLayout(BaseMainActivity.this);
tootShow();
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
if (tab.getCustomView() != null) {
if (viewPager.getAdapter() != null) {
Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, tab.getPosition());
DisplayStatusFragment displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
}
}
}
});
//Scroll to top when top bar is clicked for favourites/blocked/muted
toolbarTitle.setOnClickListener(v -> {
Fragment fragment = (Fragment) Objects.requireNonNull(viewPager.getAdapter()).instantiateItem(viewPager, tabLayout.getSelectedTabPosition());
DisplayStatusFragment displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
});
} else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) {
TabLayout.Tab pfTabHome = tabLayout.newTab();
TabLayout.Tab pfTabLocal = tabLayout.newTab();
TabLayout.Tab pfTabNotification = tabLayout.newTab();
TabLayout.Tab pfStories = tabLayout.newTab();
//TabLayout.Tab pfTabDiscover = tabLayout.newTab();
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_notifications, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_people, R.attr.iconColorMenu);
Helper.changeDrawableColor(BaseMainActivity.this, R.drawable.ic_home, R.attr.iconColorMenu);
pfTabHome.setCustomView(R.layout.tab_badge);
pfTabLocal.setCustomView(R.layout.tab_badge);
pfTabNotification.setCustomView(R.layout.tab_badge);
pfStories.setCustomView(R.layout.tab_badge);
//pfTabDiscover.setCustomView(R.layout.tab_badge);
@SuppressLint("CutPasteId")
ImageView iconHome = pfTabHome.getCustomView().findViewById(R.id.tab_icon);
iconHome.setImageResource(R.drawable.ic_home);
@SuppressLint("CutPasteId")
ImageView iconLocal = pfTabLocal.getCustomView().findViewById(R.id.tab_icon);
iconLocal.setImageResource(R.drawable.ic_people);
@SuppressLint("CutPasteId")
ImageView iconNotif = pfTabNotification.getCustomView().findViewById(R.id.tab_icon);
iconNotif.setImageResource(R.drawable.ic_notifications);
/*@SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId")
ImageView iconDiscover = pfTabDiscover.getCustomView().findViewById(R.id.tab_icon);
iconDiscover.setImageResource(R.drawable.ic_people);*/
@SuppressLint("CutPasteId")
ImageView iconStories = pfStories.getCustomView().findViewById(R.id.tab_icon);
iconStories.setImageResource(R.drawable.ic_story);
iconHome.setContentDescription(getString(R.string.home_menu));
// iconDiscover.setContentDescription(getString(R.string.overview));
iconLocal.setContentDescription(getString(R.string.local));
iconNotif.setContentDescription(getString(R.string.notifications));
iconStories.setContentDescription(getString(R.string.stories));
tabLayout.addTab(pfTabHome);
tabLayout.addTab(pfTabLocal);
tabLayout.addTab(pfTabNotification);
tabLayout.addTab(pfStories);
//tabLayout.addTab(pfTabDiscover);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
toot.setImageResource(R.drawable.ic_add_a_photo_pixelfed);
adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
delete_instance.setVisibility(View.GONE);
Helper.switchLayout(BaseMainActivity.this);
tootShow();
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
if (tab.getCustomView() != null) {
if (viewPager.getAdapter() != null) {
Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, tab.getPosition());
DisplayStatusFragment displayStatusFragment;
if (tab.getPosition() == 0) {
if (fragment instanceof DisplayStatusFragment) {
displayStatusFragment = ((DisplayStatusFragment) fragment);
countNewStatus = 0;
updateHomeCounter();
displayStatusFragment.scrollToTop();
displayStatusFragment.updateLastReadToot();
}
} else if (tab.getPosition() == 2) {
countNewNotifications = 0;
updateNotifCounter();
} else {
View tabCustom = tab.getCustomView();
if (tabCustom != null) {
TextView tabCountertCustom = tabCustom.findViewById(R.id.tab_counter);
if (tabCountertCustom != null) {
tabCountertCustom.setText(String.valueOf(0));
tabCountertCustom.setVisibility(View.GONE);
}
}
if (fragment instanceof DisplayStatusFragment) {
displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
} else if (fragment instanceof DisplayNotificationsFragment) {
DisplayNotificationsFragment displayNotificationsFragment = ((DisplayNotificationsFragment) fragment);
displayNotificationsFragment.scrollToTop();
}
}
}
}
}
});
//Scroll to top when top bar is clicked for favourites/blocked/muted
toolbarTitle.setOnClickListener(v -> {
Fragment fragment = (Fragment) Objects.requireNonNull(viewPager.getAdapter()).instantiateItem(viewPager, tabLayout.getSelectedTabPosition());
DisplayStatusFragment displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
});
Objects.requireNonNull(tabLayout.getTabAt(0)).select();
}
if (theme == Helper.THEME_DARK) {
style = R.style.DialogDark;
} else if (theme == Helper.THEME_BLACK) {
style = R.style.DialogBlack;
} else {
style = R.style.Dialog;
}
boolean popupShown = sharedpreferences.getBoolean(Helper.SET_POPUP_PUSH, false);
if (popupShown) {
PushHelper.startStreaming(BaseMainActivity.this);
}
if (hidde_menu != null)
LocalBroadcastManager.getInstance(BaseMainActivity.this).unregisterReceiver(hidde_menu);
if (update_topbar != null)
LocalBroadcastManager.getInstance(BaseMainActivity.this).unregisterReceiver(update_topbar);
hidde_menu = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
assert b != null;
String menu = b.getString("menu");
if (menu != null) {
switch (menu) {
case "hide_admin": {
NavigationView navigationView = findViewById(R.id.nav_view);
MenuItem admin = navigationView.getMenu().findItem(R.id.nav_administration);
if (admin != null) {
admin.setVisible(false);
}
break;
}
case "show_admin": {
NavigationView navigationView = findViewById(R.id.nav_view);
MenuItem admin = navigationView.getMenu().findItem(R.id.nav_administration);
if (admin != null) {
admin.setVisible(true);
}
break;
}
case "hide_news": {
NavigationView navigationView = findViewById(R.id.nav_view);
MenuItem news = navigationView.getMenu().findItem(R.id.nav_news);
if (news != null) {
news.setVisible(false);
}
break;
}
case "show_news": {
NavigationView navigationView = findViewById(R.id.nav_view);
MenuItem news = navigationView.getMenu().findItem(R.id.nav_news);
if (news != null) {
news.setVisible(true);
}
break;
}
case "show_list_button":
displayTimelineMoreButton(true);
break;
case "hide_list_button":
displayTimelineMoreButton(false);
break;
case "theme":
recreate();
break;
}
}
}
};
update_topbar = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int position = 0;
if (tabLayout != null)
position = tabLayout.getSelectedTabPosition();
new SyncTimelinesAsyncTask(BaseMainActivity.this, position, true, BaseMainActivity.this);
}
};
LocalBroadcastManager.getInstance(BaseMainActivity.this).registerReceiver(hidde_menu, new IntentFilter(Helper.RECEIVE_HIDE_ITEM));
LocalBroadcastManager.getInstance(BaseMainActivity.this).registerReceiver(update_topbar, new IntentFilter(Helper.RECEIVE_UPDATE_TOPBAR));
toolbar_search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//Hide keyboard
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
assert imm != null;
imm.hideSoftInputFromWindow(toolbar_search.getWindowToken(), 0);
query = query.replaceAll("^#+", "");
//It's not a peertube search
//Peertube search
if (tabLayout != null && timelines != null && timelines.size() > tabLayout.getSelectedTabPosition() &&
(timelines.get(tabLayout.getSelectedTabPosition()).getType() == ManageTimelines.Type.PEERTUBE ||
(timelines.get(tabLayout.getSelectedTabPosition()).getRemoteInstance() != null &&
timelines.get(tabLayout.getSelectedTabPosition()).getRemoteInstance().getType().equals("PEERTUBE")))) {
DisplayStatusFragment statusFragment;
Bundle bundle = new Bundle();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
String instance = "peertube.fedilab.app";
if (timelines.get(tabLayout.getSelectedTabPosition()).getRemoteInstance() != null && timelines.get(tabLayout.getSelectedTabPosition()).getRemoteInstance().getType().equals("PEERTUBE"))
instance = timelines.get(tabLayout.getSelectedTabPosition()).getRemoteInstance().getHost();
bundle.putString("remote_instance", instance);
bundle.putString("instanceType", "PEERTUBE");
bundle.putString("search_peertube", query);
statusFragment.setArguments(bundle);
String fragmentTag = "REMOTE_INSTANCE";
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
if (main_app_container.getVisibility() == View.GONE) {
main_app_container.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
}
} else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
DisplayStatusFragment statusFragment;
Bundle bundle = new Bundle();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
bundle.putString("remote_instance", instance);
bundle.putString("instanceType", "PEERTUBE");
bundle.putString("search_peertube", query);
statusFragment.setArguments(bundle);
String fragmentTag = "REMOTE_INSTANCE";
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
if (main_app_container.getVisibility() == View.GONE) {
main_app_container.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
}
} else {
if (social != UpdateAccountInfoAsyncTask.SOCIAL.GNU) {
boolean isAccount = false;
if (query.split("@").length > 1) {
isAccount = true;
}
Intent intent;
if ((social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED)
&& !query.contains("http://") && !query.contains("https://") && !isAccount) {
intent = new Intent(BaseMainActivity.this, SearchResultTabActivity.class);
} else {
intent = new Intent(BaseMainActivity.this, SearchResultActivity.class);
}
intent.putExtra("search", query);
startActivity(intent);
} else {
Intent intent = new Intent(BaseMainActivity.this, HashTagActivity.class);
Bundle b = new Bundle();
b.putString("tag", query.trim());
intent.putExtras(b);
startActivity(intent);
}
}
toolbar_search.setQuery("", false);
toolbar_search.setIconified(true);
if (main_app_container.getVisibility() == View.VISIBLE) {
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
delete_instance.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
} else {
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
tabLayout.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.GONE);
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
//Hide/Close the searchview
toolbar_search.setOnCloseListener(() -> {
if (main_app_container.getVisibility() == View.VISIBLE) {
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
} else {
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
tabLayout.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.GONE);
}
delete_instance.setVisibility(View.GONE);
//your code here
return false;
});
toolbar_search.setOnSearchClickListener(v -> {
if (toolbar_search.isIconified()) {
if (main_app_container.getVisibility() == View.VISIBLE) {
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
} else {
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
tabLayout.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.GONE);
}
} else {
toolbarTitle.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
manageTimelineList(false);
}
delete_instance.setVisibility(View.GONE);
});
//Hide the default title
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(BaseMainActivity.this, R.color.cyanea_primary)));
}
//Defines the current locale of the device in a static variable
currentLocale = Helper.currentLocale(BaseMainActivity.this);
if (social != UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
if (social != UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) {
toot.setOnClickListener(view -> {
Intent intent13 = new Intent(BaseMainActivity.this, TootActivity.class);
startActivity(intent13);
});
toot.setOnLongClickListener(v -> {
CrossActions.doCrossReply(BaseMainActivity.this, null, null, false);
return false;
});
} else {
toot.setOnClickListener(view -> {
Intent intent12 = new Intent(BaseMainActivity.this, PixelfedComposeActivity.class);
startActivity(intent12);
});
}
} else {
toot.setOnClickListener(view -> {
Intent intent1 = new Intent(BaseMainActivity.this, PeertubeUploadActivity.class);
startActivity(intent1);
});
}
//Image loader configuration
final DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
toggle.setDrawerIndicatorEnabled(false);
ImageView iconbar = toolbar.findViewById(R.id.iconbar);
iconbar.setOnClickListener(v -> drawer.openDrawer(GravityCompat.START));
Helper.loadGiF(BaseMainActivity.this, account, iconbar);
headerLayout = navigationView.getHeaderView(0);
final ImageView menuMore = headerLayout.findViewById(R.id.header_option_menu);
menuMore.setOnClickListener(v -> {
PopupMenu popup = new PopupMenu(BaseMainActivity.this, menuMore);
popup.getMenuInflater()
.inflate(R.menu.main, popup.getMenu());
if (social != UpdateAccountInfoAsyncTask.SOCIAL.MASTODON && social != UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
MenuItem action_about_instance = popup.getMenu().findItem(R.id.action_about_instance);
if (action_about_instance != null)
action_about_instance.setVisible(false);
MenuItem action_export = popup.getMenu().findItem(R.id.action_export);
if (action_export != null)
action_export.setVisible(false);
MenuItem action_send_invitation = popup.getMenu().findItem(R.id.action_send_invitation);
if (action_send_invitation != null)
action_send_invitation.setVisible(false);
}
if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
MenuItem action_size = popup.getMenu().findItem(R.id.action_size);
if (action_size != null)
action_size.setVisible(false);
}
if (BuildConfig.lite) {
popup.getMenu().findItem(R.id.action_send_invitation).setVisible(false);
}
popup.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.action_logout_account) {
AlertDialog.Builder dialogBuilderLogoutAccount = new AlertDialog.Builder(BaseMainActivity.this, style);
dialogBuilderLogoutAccount.setMessage(getString(R.string.logout_account_confirmation, account.getUsername(), account.getInstance()));
dialogBuilderLogoutAccount.setPositiveButton(R.string.action_logout, (dialog, id) -> {
Helper.logoutCurrentUser(BaseMainActivity.this);
dialog.dismiss();
});
dialogBuilderLogoutAccount.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
AlertDialog alertDialogLogoutAccount = dialogBuilderLogoutAccount.create();
alertDialogLogoutAccount.show();
return true;
} else if (itemId == R.id.action_privacy) {
Intent intent14 = new Intent(BaseMainActivity.this, PrivacyActivity.class);
startActivity(intent14);
return true;
} else if (itemId == R.id.action_about_instance) {
Intent intent14;
intent14 = new Intent(BaseMainActivity.this, InstanceActivity.class);
startActivity(intent14);
return true;
} else if (itemId == R.id.action_send_invitation) {
if (instanceClass != null) {
if (instanceClass.isRegistration()) {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
String extra_text = getString(R.string.join_instance, Helper.getLiveInstance(BaseMainActivity.this),
"https://f-droid.org/en/packages/fr.gouv.etalab.mastodon/",
"https://play.google.com/store/apps/details?id=app.fedilab.android",
"https://fedilab.app/registration_helper/" + Helper.getLiveInstance(BaseMainActivity.this));
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
} else {
Toasty.info(BaseMainActivity.this, getString(R.string.registration_closed), Toast.LENGTH_SHORT).show();
}
}
return true;
} else if (itemId == R.id.action_cache) {
new Helper.CacheTask(BaseMainActivity.this);
return true;
} else if (itemId == R.id.action_size) {
final SharedPreferences sharedpreferences1 = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
int textSize = sharedpreferences1.getInt(Helper.SET_TEXT_SIZE, 110);
int iconSize = sharedpreferences1.getInt(Helper.SET_ICON_SIZE, 130);
AlertDialog.Builder builder = new AlertDialog.Builder(BaseMainActivity.this, style);
builder.setTitle(R.string.text_size);
View popup_quick_settings = getLayoutInflater().inflate(R.layout.popup_text_size, new LinearLayout(BaseMainActivity.this), false);
builder.setView(popup_quick_settings);
SeekBar set_text_size = popup_quick_settings.findViewById(R.id.set_text_size);
SeekBar set_icon_size = popup_quick_settings.findViewById(R.id.set_icon_size);
final TextView set_text_size_value = popup_quick_settings.findViewById(R.id.set_text_size_value);
final TextView set_icon_size_value = popup_quick_settings.findViewById(R.id.set_icon_size_value);
set_text_size_value.setText(String.format("%s%%", textSize));
set_icon_size_value.setText(String.format("%s%%", iconSize));
set_text_size.setMax(20);
set_icon_size.setMax(20);
set_text_size.setProgress(((textSize - 80) / 5));
set_icon_size.setProgress(((iconSize - 80) / 5));
set_text_size.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int value = 80 + progress * 5;
set_text_size_value.setText(String.format("%s%%", value));
SharedPreferences.Editor editor = sharedpreferences1.edit();
editor.putInt(Helper.SET_TEXT_SIZE, value);
editor.apply();
}
});
set_icon_size.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int value = 80 + progress * 5;
set_icon_size_value.setText(String.format("%s%%", value));
SharedPreferences.Editor editor = sharedpreferences1.edit();
editor.putInt(Helper.SET_ICON_SIZE, value);
editor.apply();
}
});
builder.setPositiveButton(R.string.validate, (dialog, which) -> {
BaseMainActivity.this.recreate();
dialog.dismiss();
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
return true;
} else if (itemId == R.id.action_proxy) {
Intent intent14;
intent14 = new Intent(BaseMainActivity.this, ProxyActivity.class);
startActivity(intent14);
return true;
} else if (itemId == R.id.action_export) {
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(BaseMainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(BaseMainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE);
} else {
Intent backupIntent = new Intent(BaseMainActivity.this, BackupStatusService.class);
startService(backupIntent);
}
} else {
Intent backupIntent = new Intent(BaseMainActivity.this, BackupStatusService.class);
startService(backupIntent);
}
return true;
} else if (itemId == R.id.action_import_data) {
Intent intent14;
if (ContextCompat.checkSelfPermission(BaseMainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(BaseMainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
TootActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
return true;
}
intent14 = new Intent(Intent.ACTION_GET_CONTENT);
intent14.addCategory(Intent.CATEGORY_OPENABLE);
intent14.setType("*/*");
String[] mimetypes = {"*/*"};
intent14.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent14, PICK_IMPORT);
return true;
} else if (itemId == R.id.action_export_data) {
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(BaseMainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(BaseMainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE);
return true;
}
}
Sqlite.exportDB(BaseMainActivity.this);
return true;
}
return true;
});
popup.show();
});
final ImageView optionInfo = headerLayout.findViewById(R.id.header_option_info);
optionInfo.setOnClickListener(view -> {
Intent intent15 = new Intent(BaseMainActivity.this, InstanceHealthActivity.class);
startActivity(intent15);
});
if (social != UpdateAccountInfoAsyncTask.SOCIAL.MASTODON)
optionInfo.setVisibility(View.GONE);
MenuFloating.tags = new ArrayList<>();
Helper.updateHeaderAccountInfo(activity, account, headerLayout);
//Locked account can see follow request
if (MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.GNU && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
navigationView.getMenu().findItem(R.id.nav_follow_request).setVisible(account.isLocked());
}
if (!BuildConfig.DONATIONS) {
MenuItem openCollectiveItem = navigationView.getMenu().findItem(R.id.nav_liberapay);
if (openCollectiveItem != null) {
openCollectiveItem.setVisible(false);
}
MenuItem partnerShipItem = navigationView.getMenu().findItem(R.id.nav_partnership);
if (partnerShipItem != null) {
partnerShipItem.setVisible(false);
}
}
if (MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.MASTODON && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
MenuItem adminItem = navigationView.getMenu().findItem(R.id.nav_administration);
if (adminItem != null) {
adminItem.setVisible(false);
}
MenuItem notificationArchive = navigationView.getMenu().findItem(R.id.nav_archive_notifications);
if (notificationArchive != null) {
notificationArchive.setVisible(false);
}
} else {
boolean display_admin_menu = sharedpreferences.getBoolean(Helper.SET_DISPLAY_ADMIN_MENU + userId + instance, false);
if (!display_admin_menu) {
MenuItem adminItem = navigationView.getMenu().findItem(R.id.nav_administration);
if (adminItem != null) {
adminItem.setVisible(false);
}
}
}
LinearLayout owner_container = headerLayout.findViewById(R.id.main_header_container);
owner_container.setOnClickListener(v -> {
Helper.menuAccounts(BaseMainActivity.this);
if (main_app_container.getVisibility() == View.VISIBLE) {
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
} else {
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
tabLayout.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.GONE);
}
delete_instance.setVisibility(View.GONE);
});
// Asked once for notification opt-in
if (!popupShown && (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA)) {
if (theme == Helper.THEME_DARK) {
style = R.style.DialogDark;
} else if (theme == Helper.THEME_BLACK) {
style = R.style.DialogBlack;
} else {
style = R.style.Dialog;
}
AlertDialog.Builder dialogBuilderOptin = new AlertDialog.Builder(BaseMainActivity.this, style);
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.popup_quick_settings, new LinearLayout(BaseMainActivity.this), false);
dialogBuilderOptin.setView(dialogView);
//Live notification mode
final Spinner set_live_type = dialogView.findViewById(R.id.set_live_type);
String[] labels = {getString(R.string.push_notif), getString(R.string.no_live_notif)};
ArrayAdapter<String> adapterLive = new ArrayAdapter<>(BaseMainActivity.this,
android.R.layout.simple_spinner_dropdown_item, labels);
set_live_type.setAdapter(adapterLive);
TextView set_live_type_indication = dialogView.findViewById(R.id.set_live_type_indication);
switch (Helper.liveNotifType(BaseMainActivity.this)) {
case Helper.NOTIF_PUSH:
set_live_type_indication.setText(R.string.set_push_notifications);
break;
case Helper.NOTIF_NONE:
set_live_type_indication.setText(R.string.no_live_indication);
break;
}
int livenotif = Helper.liveNotifType(BaseMainActivity.this);
int selection = 0;
if (livenotif == NOTIF_NONE)
selection = 1;
set_live_type.setSelection(selection, false);
set_live_type.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = sharedpreferences.edit();
switch (position) {
case 0:
editor.putBoolean(Helper.SET_PUSH_NOTIFICATIONS, true);
editor.apply();
PushHelper.startStreaming(BaseMainActivity.this);
set_live_type_indication.setText(R.string.set_push_notifications);
break;
case 1:
editor.putBoolean(Helper.SET_PUSH_NOTIFICATIONS, false);
set_live_type_indication.setText(R.string.no_live_indication);
editor.apply();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
dialogBuilderOptin.setTitle(R.string.settings_popup_title);
dialogBuilderOptin.setCancelable(false);
dialogBuilderOptin.setPositiveButton(R.string.validate, (dialog, id) -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_POPUP_PUSH, true);
editor.commit();
});
try {
Handler handler = new Handler();
handler.postDelayed(dialogBuilderOptin::show, 1000);
} catch (Exception ignored) {
}
} else {
int lastReleaseNoteRead = sharedpreferences.getInt(Helper.SET_POPUP_RELEASE_NOTES, 0);
int versionCode = BuildConfig.VERSION_CODE;
if (lastReleaseNoteRead != versionCode) { //Need to push release notes
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
new RetrieveRemoteDataAsyncTask(BaseMainActivity.this, BaseMainActivity.this);
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(getAssets().open("changelogs/" + versionCode + ".txt")))) {
String mLine;
StringBuilder finalContent = new StringBuilder();
while ((mLine = reader.readLine()) != null) {
finalContent.append(mLine).append("\n");
}
AlertDialog.Builder dialogBuilderOptin = new AlertDialog.Builder(BaseMainActivity.this, style);
LayoutInflater inflater = getLayoutInflater();
dialogReleaseNoteView = inflater.inflate(R.layout.popup_release_notes, new LinearLayout(BaseMainActivity.this), false);
dialogBuilderOptin.setView(dialogReleaseNoteView);
TextView release_title = dialogReleaseNoteView.findViewById(R.id.release_title);
TextView release_notes = dialogReleaseNoteView.findViewById(R.id.release_notes);
Button liberapay_support = dialogReleaseNoteView.findViewById(R.id.liberapay_support);
release_title.setText(getString(R.string.release_note_title, BuildConfig.VERSION_NAME));
release_notes.setText(finalContent);
if (BuildConfig.DONATIONS) {
liberapay_support.setVisibility(View.VISIBLE);
} else {
liberapay_support.setVisibility(View.GONE);
}
liberapay_support.setOnClickListener(v -> {
Intent intentLiberapay = new Intent(Intent.ACTION_VIEW);
intentLiberapay.setData(Uri.parse("https://liberapay.com/tom79"));
try {
startActivity(intentLiberapay);
} catch (Exception e) {
Helper.openBrowser(BaseMainActivity.this, "https://liberapay.com/tom79");
}
});
dialogBuilderOptin.setPositiveButton(R.string.close, (dialog, id) -> dialog.dismiss());
try {
Handler handler = new Handler();
handler.postDelayed(() -> {
if (!BaseMainActivity.this.isFinishing()) {
dialogBuilderOptin.show();
}
}, 1000);
} catch (Exception ignored) {
}
} catch (IOException ignored) {
}
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(Helper.SET_POPUP_RELEASE_NOTES, versionCode);
editor.apply();
}
}
Helper.switchLayout(BaseMainActivity.this);
mamageNewIntent(getIntent());
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
// Retrieves instance
new RetrieveInstanceAsyncTask(BaseMainActivity.this, BaseMainActivity.this);
// Retrieves filters
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
new ManageFiltersAsyncTask(BaseMainActivity.this, GET_ALL_FILTER, null, BaseMainActivity.this);
}
}
/* Clean cache for statuses */
AsyncTask.execute(() -> {
Date date = new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10));
String dateString = Helper.dateToString(date);
new TimelineCacheDAO(BaseMainActivity.this, db).removeAfterDate(dateString);
});
if (Helper.isLoggedIn(BaseMainActivity.this)) {
final Handler handler = new Handler();
handler.postDelayed(() -> new UpdateAccountInfoByIDAsyncTask(BaseMainActivity.this, account, BaseMainActivity.this), 2000);
}
mutedAccount = new TempMuteDAO(BaseMainActivity.this, db).getAllTimeMuted(account);
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) {
final Handler handler = new Handler();
handler.postDelayed(() -> {
new RetrieveFeedsAsyncTask(BaseMainActivity.this, RetrieveFeedsAsyncTask.Type.ANNOUNCEMENTS, null, BaseMainActivity.this);
if (BuildConfig.lite) {
String datesupdate = sharedpreferences.getString(Helper.TRACKING_LAST_UPDATE, null);
Date dateLastUpdate = Helper.stringToDate(BaseMainActivity.this, datesupdate);
Date dateUpdate = new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10));
//Refresh tracking db if needed
if (datesupdate == null || dateUpdate.after(dateLastUpdate)) {
Intent scriptIntent = new Intent(BaseMainActivity.this, DownloadTrackingDBScriptsService.class);
startService(scriptIntent);
}
}
}, 3000);
}
}
private void manageTimelineList(boolean displayed) {
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
boolean display_timeline_in_list = sharedpreferences.getBoolean(Helper.SET_DISPLAY_TIMELINE_IN_LIST, false);
if (!display_timeline_in_list || social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE || social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) {
display_timeline.setVisibility(View.GONE);
} else {
if (displayed) {
display_timeline.setVisibility(View.VISIBLE);
} else {
display_timeline.setVisibility(View.GONE);
}
}
}
protected abstract void rateThisApp();
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mamageNewIntent(intent);
}
/**
* Manages new intents
*
* @param intent Intent - intent related to a notification in top bar
*/
private void mamageNewIntent(Intent intent) {
if (intent == null)
return;
String action = intent.getAction();
String type = intent.getType();
Bundle extras = intent.getExtras();
String userIdIntent, instanceIntent;
if (extras != null && extras.containsKey(Helper.INTENT_ACTION)) {
final NavigationView navigationView = findViewById(R.id.nav_view);
userIdIntent = extras.getString(Helper.PREF_KEY_ID); //Id of the account in the intent
instanceIntent = extras.getString(Helper.PREF_INSTANCE);
if (extras.getInt(Helper.INTENT_ACTION) == Helper.NOTIFICATION_INTENT) {
Helper.changeUser(BaseMainActivity.this, userIdIntent, instanceIntent, true); //Connects the account which is related to the notification
Helper.unCheckAllMenuItems(navigationView);
notificationChecked = true;
if (extras.getString(Helper.INTENT_TARGETED_ACCOUNT) != null) {
Intent intentShow = new Intent(BaseMainActivity.this, ShowAccountActivity.class);
Bundle b = new Bundle();
b.putString("accountId", extras.getString(Helper.INTENT_TARGETED_ACCOUNT));
intentShow.putExtras(b);
startActivity(intentShow);
}
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.RELOAD_MYVIDEOS) {
Bundle bundle = new Bundle();
DisplayStatusFragment fragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.MYVIDEOS);
bundle.putString("instanceType", "PEERTUBE");
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(BaseMainActivity.this));
Account account = new AccountDAO(BaseMainActivity.this, db).getUniqAccount(userId, instance);
bundle.putString("targetedid", account.getUsername());
bundle.putBoolean("ownvideos", true);
fragment.setArguments(bundle);
String fragmentTag = "MY_VIDEOS";
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, fragment, fragmentTag).commit();
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.SEARCH_INSTANCE) {
String instance = extras.getString(Helper.INSTANCE_NAME);
DisplayStatusFragment statusFragment;
Bundle bundle = new Bundle();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
bundle.putString("remote_instance", instance);
statusFragment.setArguments(bundle);
String fragmentTag = "REMOTE_INSTANCE";
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
main_app_container.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setText(instance);
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.HOME_TIMELINE_INTENT) {
Helper.changeUser(BaseMainActivity.this, userIdIntent, instanceIntent, false); //Connects the account which is related to the notification
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.BACK_TO_SETTINGS) {
Helper.unCheckAllMenuItems(navigationView);
navigationView.setCheckedItem(R.id.nav_settings);
navigationView.getMenu().performIdentifierAction(R.id.nav_settings, 0);
toolbarTitle.setText(R.string.settings);
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.BACK_TO_SETTINGS) {
Helper.unCheckAllMenuItems(navigationView);
navigationView.setCheckedItem(R.id.nav_peertube_settings);
navigationView.getMenu().performIdentifierAction(R.id.nav_peertube_settings, 0);
toolbarTitle.setText(R.string.settings);
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.ADD_USER_INTENT) {
this.recreate();
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.BACKUP_INTENT) {
launchOwnerStatusesActivity();
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.BACKUP_NOTIFICATION_INTENT) {
launchOwnerNotificationsActivity();
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.REDRAW_MENU) {
Helper.hideMenuItem(BaseMainActivity.this, navigationView.getMenu());
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.SEARCH_TAG) {
new SyncTimelinesAsyncTask(BaseMainActivity.this, -1, false, BaseMainActivity.this);
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.REFRESH_TIMELINE) {
int position = 0;
boolean refreshList = extras.getBoolean(Helper.REFRESH_LIST_TIMELINE, false);
if (tabLayout != null)
position = tabLayout.getSelectedTabPosition();
new SyncTimelinesAsyncTask(BaseMainActivity.this, position, refreshList, BaseMainActivity.this);
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.SEARCH_REMOTE) {
String url = extras.getString(Helper.SEARCH_URL);
intent.replaceExtras(new Bundle());
intent.setAction("");
intent.setData(null);
intent.setFlags(0);
if (url == null)
return;
Matcher matcher;
matcher = Patterns.WEB_URL.matcher(url);
boolean isUrl = false;
while (matcher.find()) {
isUrl = true;
}
if (!isUrl)
return;
//Here we know that the intent contains a valid URL
new RetrieveRemoteDataAsyncTask(BaseMainActivity.this, url, BaseMainActivity.this);
}
} else if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
String url = null;
String sharedSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
boolean shouldRetrieveMetaData = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE).getBoolean(Helper.SET_RETRIEVE_METADATA_IF_URL_FROM_EXTERAL, true);
if (sharedText != null) {
/* Some apps don't send the URL as the first part of the EXTRA_TEXT,
the BBC News app being one such, in this case find where the URL
is and strip that out into sharedText.
*/
Matcher matcher;
matcher = Patterns.WEB_URL.matcher(sharedText);
while (matcher.find()) {
int matchStart = matcher.start(1);
int matchEnd = matcher.end();
if (matchStart < matchEnd && sharedText.length() >= matchEnd)
url = sharedText.substring(matchStart, matchEnd);
}
new RetrieveMetaDataAsyncTask(BaseMainActivity.this, shouldRetrieveMetaData, sharedSubject, sharedText, url, BaseMainActivity.this);
}
} else if (type.startsWith("image/") || type.startsWith("video/")) {
Uri imageUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (!TootActivity.active) {
if (imageUri != null) {
Bundle b = new Bundle();
b.putParcelable("sharedUri", imageUri);
b.putInt("uriNumberMast", 1);
CrossActions.doCrossShare(BaseMainActivity.this, b);
}
} else {
if (imageUri != null) {
intent = new Intent(BaseMainActivity.this, TootActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("imageUri", imageUri.toString());
startActivity(intent);
}
}
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/") || type.startsWith("video/")) {
ArrayList<Uri> imageList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageList != null) {
Bundle b = new Bundle();
b.putParcelableArrayList("sharedUri", imageList);
b.putInt("uriNumberMast", imageList.size());
CrossActions.doCrossShare(BaseMainActivity.this, b);
}
}
} else if (Intent.ACTION_VIEW.equals(action)) {
String url = intent.getDataString();
if (url == null) {
intent.replaceExtras(new Bundle());
intent.setAction("");
intent.setData(null);
intent.setFlags(0);
return;
}
Matcher matcher;
matcher = Patterns.WEB_URL.matcher(url);
boolean isUrl = false;
while (matcher.find()) {
isUrl = true;
}
if (!isUrl) {
intent.replaceExtras(new Bundle());
intent.setAction("");
intent.setData(null);
intent.setFlags(0);
return;
}
//Here we know that the intent contains a valid URL
if (!url.contains("medium.com")) {
new RetrieveRemoteDataAsyncTask(BaseMainActivity.this, url, BaseMainActivity.this);
} else {
forwardToBrowser(intent);
}
}
intent.replaceExtras(new Bundle());
intent.setAction("");
intent.setData(null);
intent.setFlags(0);
}
private void forwardToBrowser(Intent i) {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(i.getData(), i.getType());
List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent, 0);
ArrayList<Intent> targetIntents = new ArrayList<>();
String thisPackageName = BaseMainActivity.this.getPackageName();
for (ResolveInfo currentInfo : activities) {
String packageName = currentInfo.activityInfo.packageName;
if (!thisPackageName.equals(packageName)) {
Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW);
targetIntent.setDataAndType(intent.getData(), intent.getType());
targetIntent.setPackage(intent.getPackage());
targetIntent.setComponent(new ComponentName(packageName, currentInfo.activityInfo.name));
targetIntents.add(targetIntent);
}
}
if (targetIntents.size() > 0) {
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), getString(R.string.open_with));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
}
}
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
displayPeertube = null;
//Hide search bar on back pressed
if (!toolbar_search.isIconified()) {
toolbar_search.setIconified(true);
return;
}
if (viewPager.getVisibility() == View.VISIBLE) {
super.onBackPressed();
} else {
Helper.switchLayout(BaseMainActivity.this);
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
tabLayout.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.GONE);
delete_instance.setVisibility(View.GONE);
delete_all.hide();
add_new.hide();
final NavigationView navigationView = findViewById(R.id.nav_view);
Helper.unCheckAllMenuItems(navigationView);
tootShow();
}
}
}
@Override
public void onResume() {
super.onResume();
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", true).apply();
//Proceeds to update of the authenticated account
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
String datestr = sharedpreferences.getString(Helper.HOME_LAST_READ + userId + instance, null);
if (timelines != null && timelines.size() > 0 && mPageReferenceMap != null && datestr != null) {
Date date = Helper.stringToDate(BaseMainActivity.this, datestr);
Date dateAllowed = new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(30));
//Refresh home if needed
if (dateAllowed.after(date)) {
for (ManageTimelines tl : timelines) {
if (tl.getType() == ManageTimelines.Type.HOME && mPageReferenceMap != null && mPageReferenceMap.containsKey(tl.getPosition())) {
DisplayStatusFragment homeTimeline = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition());
if (homeTimeline != null) {
homeTimeline.retrieveMissingHome();
}
break;
}
}
}
}
}
@Override
protected void onPause() {
super.onPause();
if (userId != null && instance != null) {
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.HOME_LAST_READ + userId + instance, Helper.dateToString(new Date()));
editor.apply();
}
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", false).apply();
}
@Override
public void onDestroy() {
super.onDestroy();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
boolean clearCacheExit = sharedpreferences.getBoolean(Helper.SET_CLEAR_CACHE_EXIT, false);
WeakReference<Context> contextReference = new WeakReference<>(BaseMainActivity.this);
if (clearCacheExit) {
AsyncTask.execute(() -> {
try {
String path = Objects.requireNonNull(contextReference.get().getCacheDir().getParentFile()).getPath();
File dir = new File(path);
if (dir.isDirectory()) {
Helper.deleteDir(dir);
}
SQLiteDatabase db = Sqlite.getInstance(contextReference.get().getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new TimelineCacheDAO(contextReference.get(), db).removeAll();
} catch (Exception ignored) {
}
});
}
if (trackingDomains != null) {
trackingDomains = null;
}
if (hidde_menu != null)
LocalBroadcastManager.getInstance(BaseMainActivity.this).unregisterReceiver(hidde_menu);
if (update_topbar != null)
LocalBroadcastManager.getInstance(BaseMainActivity.this).unregisterReceiver(update_topbar);
if (mPageReferenceMap != null)
mPageReferenceMap = null;
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isMainActivityRunning", false).apply();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_archive) {
launchOwnerStatusesActivity();
return false;
}
if (id == R.id.nav_trends) {
Intent myIntent = new Intent(BaseMainActivity.this, SearchResultActivity.class);
Bundle b = new Bundle();
b.putString("search", "fedilab_trend");
myIntent.putExtras(b);
startActivity(myIntent);
return false;
} else if (id == R.id.nav_archive_notifications) {
launchOwnerNotificationsActivity();
return false;
} else if (id == R.id.nav_drag_timelines) {
Intent intent = new Intent(BaseMainActivity.this, ReorderTimelinesActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_administration) {
Intent intent = new Intent(BaseMainActivity.this, AdminActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_about) {
Intent intent = new Intent(BaseMainActivity.this, AboutActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_liberapay) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://liberapay.com/tom79"));
try {
startActivity(intent);
} catch (Exception e) {
Helper.openBrowser(BaseMainActivity.this, "https://liberapay.com/tom79");
}
return false;
} else if (id == R.id.nav_upload) {
Intent intent = new Intent(BaseMainActivity.this, PeertubeUploadActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_partnership) {
Intent intent = new Intent(BaseMainActivity.this, PartnerShipActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_settings) {
Intent intent = new Intent(BaseMainActivity.this, SettingsActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_blocked_domains) {
Intent intent = new Intent(BaseMainActivity.this, MutedInstanceActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_bookmarks) {
Intent intent = new Intent(BaseMainActivity.this, BookmarkActivity.class);
startActivity(intent);
return false;
} else if (id == R.id.nav_pixelfed_bookmarks) {
Intent intent = new Intent(BaseMainActivity.this, LiveBookmarkActivity.class);
startActivity(intent);
return false;
}
final NavigationView navigationView = findViewById(R.id.nav_view);
Helper.unCheckAllMenuItems(navigationView);
item.setChecked(true);
//Remove the search bar
if (!toolbar_search.isIconified()) {
toolbar_search.setIconified(true);
}
toolbarTitle.setText(item.getTitle());
DisplayStatusFragment statusFragment;
DisplayAccountsFragment accountsFragment;
Bundle bundle = new Bundle();
FragmentManager fragmentManager = getSupportFragmentManager();
String fragmentTag = null;
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
manageTimelineList(false);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
delete_instance.setVisibility(View.GONE);
appBar.setExpanded(true);
if (id != R.id.nav_drafts && id != R.id.nav_peertube) {
delete_all.hide();
} else {
delete_all.show();
}
if (id != R.id.nav_list && id != R.id.nav_filters && id != R.id.nav_peertube_playlists) {
add_new.hide();
} else {
add_new.show();
}
if (id == R.id.nav_peertube_settings) {
toot.hide();
SettingsPeertubeFragment settingsPeertubeFragment = new SettingsPeertubeFragment();
fragmentTag = "TABLAYOUT_PEERTUBE_SETTINGS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, settingsPeertubeFragment, fragmentTag).commit();
} else if (id == R.id.nav_peertube_notifications) {
toot.hide();
DisplayPeertubeNotificationsFragment displayPeertubeNotificationsFragment = new DisplayPeertubeNotificationsFragment();
fragmentTag = "PEERTUBE_NOTIFICATIONS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayPeertubeNotificationsFragment, fragmentTag).commit();
} else if (id == R.id.nav_favorites || id == R.id.nav_favorites_px) {
toot.hide();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.FAVOURITES);
if (social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) {
bundle.putString("instanceType", "PIXELFED");
}
statusFragment.setArguments(bundle);
fragmentTag = "FAVOURITES";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
} else if (id == R.id.nav_my_video) {
bundle = new Bundle();
DisplayStatusFragment fragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.MYVIDEOS);
bundle.putString("instanceType", "PEERTUBE");
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(BaseMainActivity.this));
Account account = new AccountDAO(BaseMainActivity.this, db).getUniqAccount(userId, instance);
bundle.putString("targetedid", account.getUsername());
bundle.putBoolean("ownvideos", true);
fragment.setArguments(bundle);
fragmentTag = "MY_VIDEOS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, fragment, fragmentTag).commit();
} else if (id == R.id.nav_peertube_history) {
bundle = new Bundle();
DisplayStatusFragment fragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PEERTUBE_HISTORY);
bundle.putString("instanceType", "PEERTUBE");
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(BaseMainActivity.this));
Account account = new AccountDAO(BaseMainActivity.this, db).getUniqAccount(userId, instance);
bundle.putString("targetedid", account.getUsername());
fragment.setArguments(bundle);
fragmentTag = "MY_HISTORY";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, fragment, fragmentTag).commit();
} else if (id == R.id.nav_news) {
toot.hide();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.NEWS);
statusFragment.setArguments(bundle);
fragmentTag = "NEWS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
} else if (id == R.id.nav_announcements) {
toot.hide();
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.ANNOUNCEMENTS);
statusFragment.setArguments(bundle);
fragmentTag = "ANNOUNCEMENTS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
} else if (id == R.id.nav_blocked) {
toot.hide();
accountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.BLOCKED);
accountsFragment.setArguments(bundle);
fragmentTag = "BLOCKS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, accountsFragment, fragmentTag).commit();
} else if (id == R.id.nav_muted) {
toot.hide();
accountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.MUTED);
accountsFragment.setArguments(bundle);
fragmentTag = "MUTED";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, accountsFragment, fragmentTag).commit();
} else if (id == R.id.nav_scheduled) {
tootShow();
TabLayoutScheduleFragment tabLayoutScheduleFragment = new TabLayoutScheduleFragment();
fragmentTag = "SCHEDULED";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, tabLayoutScheduleFragment, fragmentTag).commit();
} else if (id == R.id.nav_drafts) {
DisplayDraftsFragment displayDraftsFragment = new DisplayDraftsFragment();
fragmentTag = "DRAFTS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayDraftsFragment, fragmentTag).commit();
toot.hide();
} else if (id == R.id.nav_peertube) {
DisplayFavoritesPeertubeFragment displayFavoritesPeertubeFragment = new DisplayFavoritesPeertubeFragment();
fragmentTag = "BOOKMARKS_PEERTUBE";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayFavoritesPeertubeFragment, fragmentTag).commit();
toot.hide();
} else if (id == R.id.nav_follow_request) {
toot.hide();
DisplayFollowRequestSentFragment followRequestSentFragment = new DisplayFollowRequestSentFragment();
fragmentTag = "FOLLOW_REQUEST_SENT";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, followRequestSentFragment, fragmentTag).commit();
} else if (id == R.id.nav_list) {
toot.hide();
DisplayListsFragment displayListsFragment = new DisplayListsFragment();
fragmentTag = "LISTS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayListsFragment, fragmentTag).commit();
} else if (id == R.id.nav_group) {
toot.hide();
accountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.GROUPS);
accountsFragment.setArguments(bundle);
fragmentTag = "GROUPS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, accountsFragment, fragmentTag).commit();
} else if (id == R.id.nav_peertube_playlists) {
toot.hide();
DisplayPlaylistsFragment displayPlaylistsFragment = new DisplayPlaylistsFragment();
fragmentTag = "PLAYLISTS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayPlaylistsFragment, fragmentTag).commit();
} else if (id == R.id.nav_filters) {
toot.hide();
DisplayFiltersFragment displayFiltersFragment = new DisplayFiltersFragment();
fragmentTag = "FILTERS";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, displayFiltersFragment, fragmentTag).commit();
} else if (id == R.id.nav_who_to_follow) {
toot.hide();
WhoToFollowFragment whoToFollowFragment = new WhoToFollowFragment();
fragmentTag = "WHO_TO_FOLLOW";
fragmentManager.beginTransaction()
.replace(R.id.main_app_container, whoToFollowFragment, fragmentTag).commit();
}
populateTitleWithTag(fragmentTag, item.getTitle().toString(), item.getItemId());
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public void populateTitleWithTag(String tag, String title, int index) {
if (tag == null)
return;
if (tagTile.get(tag) == null)
tagTile.put(tag, title);
if (tagItem.get(tag) == null)
tagItem.put(tag, index);
}
@Override
public void setTitle(CharSequence title) {
if (toolbarTitle != null)
toolbarTitle.setText(title);
}
@Override
public void onUpdateAccountInfo(boolean error) {
if (error) {
//An error occurred, the user is redirected to the login page
Helper.logoutCurrentUser(BaseMainActivity.this);
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
startActivity(myIntent);
finish();
} else {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
Account account = new AccountDAO(BaseMainActivity.this, db).getUniqAccount(userId, instance);
Helper.updateHeaderAccountInfo(activity, account, headerLayout);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMPORT && resultCode == RESULT_OK) {
if (data == null || data.getData() == null) {
Toasty.error(BaseMainActivity.this, getString(R.string.toot_select_file_error), Toast.LENGTH_LONG).show();
return;
}
String filename = Helper.getFilePathFromURI(BaseMainActivity.this, data.getData());
Sqlite.importDB(BaseMainActivity.this, filename);
} else if (requestCode == PICK_IMPORT) {
Toasty.error(BaseMainActivity.this, getString(R.string.toot_select_file_error), Toast.LENGTH_LONG).show();
}
}
@Override
public void onRetrieveMetaData(boolean error, String sharedSubject, String sharedText, String image, String title, String description) {
Bundle b = new Bundle();
if (!error) {
b.putString("image", image);
b.putString("title", title);
b.putString("description", description);
}
b.putString("sharedSubject", sharedSubject);
b.putString("sharedContent", sharedText);
CrossActions.doCrossShare(BaseMainActivity.this, b);
}
@Override
public void onRetrieveInstance(APIResponse apiResponse) {
if (apiResponse.getError() != null) {
return;
}
if (apiResponse.getInstance() == null || apiResponse.getInstance().getVersion() == null || apiResponse.getInstance().getVersion().trim().length() == 0)
return;
instanceClass = apiResponse.getInstance();
poll_limits = apiResponse.getInstance().getPoll_limits();
}
@Override
public void onRetrieveRemoteAccount(Results results, boolean developerAccount) {
if (results == null)
return;
List<Account> accounts = results.getAccounts();
List<Status> statuses = results.getStatuses();
if (!developerAccount) {
if (accounts != null && accounts.size() > 0) {
Intent intent = new Intent(BaseMainActivity.this, ShowAccountActivity.class);
Bundle b = new Bundle();
b.putParcelable("account", accounts.get(0));
intent.putExtras(b);
startActivity(intent);
} else if (statuses != null && statuses.size() > 0) {
Intent intent = new Intent(BaseMainActivity.this, ShowConversationActivity.class);
Bundle b = new Bundle();
b.putParcelable("status", statuses.get(0));
intent.putExtras(b);
startActivity(intent);
}
} else {
if (accounts != null && accounts.size() > 0) {
developers = new ArrayList<>();
developers.addAll(accounts);
new RetrieveRelationshipAsyncTask(BaseMainActivity.this, accounts.get(0).getId(), BaseMainActivity.this);
}
}
}
@Override
public void onRetrieveRelationship(Relationship relationship, Error error) {
if (dialogReleaseNoteView != null && developers != null && developers.size() > 0) {
if (relationship != null && !relationship.isFollowing()) {
TextView dev_follow_title = dialogReleaseNoteView.findViewById(R.id.dev_follow_title);
if (dev_follow_title != null) {
dev_follow_title.setVisibility(View.VISIBLE);
}
ExpandableHeightListView lv_developers = dialogReleaseNoteView.findViewById(R.id.lv_developers);
lv_developers.setExpanded(true);
AccountSearchDevAdapter accountSearchWebAdapterDeveloper = new AccountSearchDevAdapter(developers);
lv_developers.setAdapter(accountSearchWebAdapterDeveloper);
accountSearchWebAdapterDeveloper.notifyDataSetChanged();
}
}
}
@Override
public void onRetrieveEmojiAccount(Account account) {
TextView displayedName = headerLayout.findViewById(R.id.displayedName);
displayedName.setText(account.getDisplayNameSpan(), TextView.BufferType.SPANNABLE);
}
@Override
public void onActionDone(ManageFiltersAsyncTask.action actionType, APIResponse apiResponse, int statusCode) {
if (apiResponse != null && apiResponse.getFilters() != null && apiResponse.getFilters().size() > 0) {
filters = apiResponse.getFilters();
}
}
public void displayTimelineMoreButton(boolean displayed) {
if (displayed) {
display_timeline.setVisibility(View.VISIBLE);
} else {
display_timeline.setVisibility(View.GONE);
}
}
@Override
public void syncedTimelines(List<ManageTimelines> manageTimelines, int position) {
ReorderTimelinesActivity.updated = false;
tabLayout = new ManageTimelines().createTabs(BaseMainActivity.this, tabLayout, manageTimelines);
tabLayout.setBackgroundColor(ContextCompat.getColor(BaseMainActivity.this, R.color.cyanea_primary));
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
final NavigationView navigationView = findViewById(R.id.nav_view);
timelines = manageTimelines;
main_app_container = findViewById(R.id.main_app_container);
boolean iconOnly = true;
for (ManageTimelines tl : timelines) {
if (tl.getType() == ManageTimelines.Type.INSTANCE || tl.getType() == ManageTimelines.Type.TAG || tl.getType() == ManageTimelines.Type.LIST) {
iconOnly = false;
break;
}
}
if (iconOnly && timelines.size() < 5) {
tabLayout.setTabMode(TabLayout.MODE_FIXED);
} else {
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
boolean display_timeline_in_list = sharedpreferences.getBoolean(Helper.SET_DISPLAY_TIMELINE_IN_LIST, false);
displayTimelineMoreButton(display_timeline_in_list);
adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
delete_instance.setVisibility(View.GONE);
Helper.switchLayout(BaseMainActivity.this);
if (manageTimelines.size() > tab.getPosition() && (manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.NOTIFICATION || manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.ART || manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.PEERTUBE)) {
toot.hide();
} else {
tootShow();
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
if (viewPager.getVisibility() == View.GONE) {
viewPager.setVisibility(View.VISIBLE);
manageTimelineList(true);
delete_instance.setVisibility(View.GONE);
Helper.switchLayout(BaseMainActivity.this);
main_app_container.setVisibility(View.GONE);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
if (manageTimelines.size() > tab.getPosition() && (manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.ART || manageTimelines.get(tab.getPosition()).getType() == ManageTimelines.Type.PEERTUBE)) {
toot.hide();
} else {
tootShow();
}
if (viewPager.getAdapter() != null) {
Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, tab.getPosition());
ManageTimelines tl = timelines.get(tab.getPosition());
DisplayStatusFragment displayStatusFragment;
if (tl.getType() == ManageTimelines.Type.HOME) {
displayStatusFragment = ((DisplayStatusFragment) fragment);
countNewStatus = 0;
updateHomeCounter();
displayStatusFragment.scrollToTop();
displayStatusFragment.updateLastReadToot();
} else if (tl.getType() == ManageTimelines.Type.NOTIFICATION) {
countNewNotifications = 0;
updateNotifCounter();
} else {
View tabCustom = tab.getCustomView();
if (tabCustom != null) {
TextView tabCountertCustom = tabCustom.findViewById(R.id.tab_counter);
if (tabCountertCustom != null) {
tabCountertCustom.setText(String.valueOf(0));
tabCountertCustom.setVisibility(View.GONE);
}
}
displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
}
}
}
});
//Scroll to top when top bar is clicked for favourites/blocked/muted
toolbarTitle.setOnClickListener(v -> {
FragmentManager fragmentManager = getSupportFragmentManager();
if (navigationView.getMenu().findItem(R.id.nav_favorites) != null && navigationView.getMenu().findItem(R.id.nav_favorites).isChecked()) {
DisplayStatusFragment faveFrag = (DisplayStatusFragment) fragmentManager.findFragmentByTag("FAVOURITES");
if (faveFrag != null && faveFrag.isVisible()) {
faveFrag.scrollToTop();
}
} else if (navigationView.getMenu().findItem(R.id.nav_favorites_px) != null && navigationView.getMenu().findItem(R.id.nav_favorites_px).isChecked()) {
DisplayStatusFragment faveFrag = (DisplayStatusFragment) fragmentManager.findFragmentByTag("FAVOURITES");
if (faveFrag != null && faveFrag.isVisible()) {
faveFrag.scrollToTop();
}
} else if (navigationView.getMenu().findItem(R.id.nav_blocked) != null && navigationView.getMenu().findItem(R.id.nav_blocked).isChecked()) {
DisplayAccountsFragment blockFrag = (DisplayAccountsFragment) fragmentManager.findFragmentByTag("BLOCKS");
if (blockFrag != null && blockFrag.isVisible()) {
blockFrag.scrollToTop();
}
} else if (navigationView.getMenu().findItem(R.id.nav_muted) != null && navigationView.getMenu().findItem(R.id.nav_muted).isChecked()) {
DisplayAccountsFragment muteFrag = (DisplayAccountsFragment) fragmentManager.findFragmentByTag("MUTED");
if (muteFrag != null && muteFrag.isVisible()) {
muteFrag.scrollToTop();
}
//Scroll to top when top bar is clicked (THEME_MENU only)
} else {
int pos = tabLayout.getSelectedTabPosition();
if (viewPager.getAdapter() != null) {
Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, pos);
ManageTimelines tl = timelines.get(pos);
if (tl.getType() != ManageTimelines.Type.NOTIFICATION) {
DisplayStatusFragment displayStatusFragment = ((DisplayStatusFragment) fragment);
displayStatusFragment.scrollToTop();
}
}
}
});
if (notificationChecked) {
notificationChecked = false;
int i = 0;
for (ManageTimelines tl : timelines) {
if (tl.getType() == ManageTimelines.Type.NOTIFICATION) {
if (tabLayout.getTabAt(i) != null) {
Objects.requireNonNull(tabLayout.getTabAt(i)).select();
}
break;
}
i++;
}
}
}
public void updateHomeCounter() {
int i = 0;
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
int tootperpage = sharedpreferences.getInt(Helper.SET_TOOT_PER_PAGE, Helper.TOOTS_PER_PAGE);
if (timelines != null && timelines.size() > 0) {
for (ManageTimelines tl : timelines) {
if (tl.getType() == ManageTimelines.Type.HOME) {
if (tabLayout.getTabCount() > i) {
View tabHome = Objects.requireNonNull(tabLayout.getTabAt(i)).getCustomView();
if (tabHome != null) {
TextView tabCounterHome = tabHome.findViewById(R.id.tab_counter);
if (countNewStatus == tootperpage) {
tabCounterHome.setText(String.format(Locale.getDefault(), "%d+", countNewStatus));
} else {
tabCounterHome.setText(String.valueOf(countNewStatus));
}
if (countNewStatus > 0) {
//New data are available
//The fragment is not displayed, so the counter is displayed
tabCounterHome.setVisibility(View.VISIBLE);
} else {
tabCounterHome.setVisibility(View.GONE);
}
}
}
}
i++;
}
}
}
public void manageTab(RetrieveFeedsAsyncTask.Type type, int value) {
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
List<ManageTimelines> tls = new TimelinesDAO(BaseMainActivity.this, db).getDisplayedTimelines();
for (ManageTimelines tl : tls) {
if (type == ManageTimelines.transform(BaseMainActivity.this, tl.getType())) {
View tabCustom = Objects.requireNonNull(tabLayout.getTabAt(tl.getPosition())).getCustomView();
assert tabCustom != null;
TextView tabCountertCustom = tabCustom.findViewById(R.id.tab_counter);
tabCountertCustom.setText(String.valueOf(value));
if (value > 0) {
tabCountertCustom.setVisibility(View.VISIBLE);
} else {
tabCountertCustom.setVisibility(View.GONE);
}
break;
}
}
}
public void updateNotifCounter() {
if (timelines == null)
return;
int i = 0;
int position = -1;
for (ManageTimelines tl : timelines) {
if (tl.getType() == ManageTimelines.Type.NOTIFICATION) {
if (tabLayout.getTabAt(i) != null) {
position = i;
}
break;
}
i++;
}
if (position == -1)
return;
View tabNotif = Objects.requireNonNull(tabLayout.getTabAt(position)).getCustomView();
if (tabNotif == null)
return;
TextView tabCounterNotif = tabNotif.findViewById(R.id.tab_counter);
if (tabCounterNotif == null)
return;
if (countNewNotifications == Helper.NOTIFICATIONS_PER_PAGE) {
tabCounterNotif.setText(String.format(Locale.getDefault(), "%d+", countNewNotifications));
} else {
tabCounterNotif.setText(String.valueOf(countNewNotifications));
}
if (countNewNotifications > 0) {
tabCounterNotif.setVisibility(View.VISIBLE);
} else {
tabCounterNotif.setVisibility(View.GONE);
}
try {
TabLayoutNotificationsFragment tabLayoutNotificationsFragment = (TabLayoutNotificationsFragment) mPageReferenceMap.get(position);
if (tabLayoutNotificationsFragment != null) {
ViewPager notifViewPager = tabLayoutNotificationsFragment.getViewPager();
if (notifViewPager != null && notifViewPager.getAdapter() != null) {
DisplayNotificationsFragment displayNotificationsFragment = (DisplayNotificationsFragment) notifViewPager.getAdapter().instantiateItem(notifViewPager, 0);
displayNotificationsFragment.updateNotificationRead();
}
}
} catch (Exception ignored) {
}
}
public void manageFloatingButton(boolean display) {
if (display) {
tootShow();
} else {
toot.hide();
}
}
public void tootShow() {
toot.show();
}
public boolean getFloatingVisibility() {
return toot.getVisibility() == View.VISIBLE;
}
@Override
public void onRetrieveFeeds(APIResponse apiResponse) {
if (apiResponse != null && apiResponse.getAnnouncements() != null && apiResponse.getAnnouncements().size() > 0) {
int unread = 0;
for (Announcement announcement : apiResponse.getAnnouncements()) {
if (!announcement.isRead()) {
unread++;
}
}
final NavigationView navigationView = findViewById(R.id.nav_view);
if (navigationView == null) {
return;
}
MenuItem item = navigationView.getMenu().findItem(R.id.nav_announcements);
if (item == null || item.getActionView() == null) {
return;
}
TextView actionView = item.getActionView().findViewById(R.id.counter);
if (actionView != null) {
if (unread > 0) {
actionView.setText(String.valueOf(unread));
actionView.setVisibility(View.VISIBLE);
} else {
actionView.setVisibility(View.GONE);
}
}
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
protected abstract void launchOwnerStatusesActivity();
protected abstract void launchOwnerNotificationsActivity();
public enum iconLauncher {
BUBBLES,
FEDIVERSE,
HERO,
ATOM,
BRAINCRASH,
MASTALAB
}
/**
* Page Adapter for Mastodon & Peertube & PixelFed
*/
public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
private PagerAdapter(FragmentManager fm, int NumOfTabs) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Parcelable saveState() {
return null;
}
@NotNull
@Override
public Fragment getItem(int position) {
if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA || social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
//Remove the search bar
if (!toolbar_search.isIconified()) {
toolbarTitle.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true);
}
//Selection comes from another menu, no action to do
Bundle bundle = new Bundle();
ManageTimelines tl = null;
if (position < timelines.size())
tl = timelines.get(position);
assert tl != null;
if (tl.getType() != ManageTimelines.Type.NOTIFICATION) {
DisplayStatusFragment displayStatusFragment = new DisplayStatusFragment();
RetrieveFeedsAsyncTask.Type type = ManageTimelines.transform(BaseMainActivity.this, tl.getType());
bundle.putSerializable("type", type);
if (tl.getType() == ManageTimelines.Type.TAG) {
TagTimeline ttl = tl.getTagTimeline();
bundle.putString("tag", ttl.getName());
if (ttl.isART())
bundle.putString("instanceType", "ART");
} else if (tl.getType() == ManageTimelines.Type.ART) {
bundle.putString("instanceType", "ART");
} else if (tl.getType() == ManageTimelines.Type.PEERTUBE) {
bundle.putString("instanceType", "PEERTUBE");
bundle.putString("remote_instance", "peertube.fedilab.app");
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
} else if (tl.getType() == ManageTimelines.Type.INSTANCE) {
if (tl.getRemoteInstance().getFilteredWith() == null) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
} else {
bundle.putString("currentfilter", tl.getRemoteInstance().getFilteredWith());
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED);
}
bundle.putString("remote_instance", tl.getRemoteInstance().getHost() != null ? tl.getRemoteInstance().getHost() : "");
bundle.putString("instanceType", tl.getRemoteInstance().getType());
} else if (tl.getType() == ManageTimelines.Type.LIST) {
bundle.putString("targetedid", tl.getListTimeline().getId());
}
bundle.putInt("timelineId", tl.getId());
displayStatusFragment.setArguments(bundle);
if (mPageReferenceMap == null) {
mPageReferenceMap = new HashMap<>();
}
mPageReferenceMap.put(tl.getPosition(), displayStatusFragment);
return displayStatusFragment;
} else {
TabLayoutNotificationsFragment tabLayoutNotificationsFragment = new TabLayoutNotificationsFragment();
if (mPageReferenceMap == null) {
mPageReferenceMap = new HashMap<>();
}
mPageReferenceMap.put(tl.getPosition(), tabLayoutNotificationsFragment);
return tabLayoutNotificationsFragment;
}
} else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) {
//Remove the search bar
if (!toolbar_search.isIconified()) {
toolbarTitle.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true);
}
//Selection comes from another menu, no action to do
Bundle bundle = new Bundle();
DisplayStatusFragment fragment = new DisplayStatusFragment();
if (position == 0) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PSUBSCRIPTIONS);
} else if (position == 1) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.POVERVIEW);
} else if (position == 2) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PTRENDING);
} else if (position == 3) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PRECENTLYADDED);
} else if (position == 4) {
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PLOCAL);
}
bundle.putString("instanceType", "PEERTUBE");
fragment.setArguments(bundle);
return fragment;
} else { //social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED
//Remove the search bar
if (!toolbar_search.isIconified()) {
toolbarTitle.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true);
}
//Selection comes from another menu, no action to do
Bundle bundle = new Bundle();
if (position == 0) {
DisplayStatusFragment fragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PF_HOME);
bundle.putString("instanceType", "PIXELFED");
fragment.setArguments(bundle);
return fragment;
} else if (position == 1) {
DisplayStatusFragment fragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PF_LOCAL);
bundle.putString("instanceType", "PIXELFED");
fragment.setArguments(bundle);
return fragment;
} else if (position == 2) {
DisplayNotificationsFragment fragment = new DisplayNotificationsFragment();
bundle.putSerializable("type", DisplayNotificationsFragment.Type.ALL);
fragment.setArguments(bundle);
return fragment;
} else {
return new DisplayStoriesFragment();
}
}
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
if (mPageReferenceMap != null) {
mPageReferenceMap.remove(position);
} else {
mPageReferenceMap = new HashMap<>();
}
// super.destroyItem(container, position, object);
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
}