From 7b3b0a9a0c9fec39aa31f3885bd082340a51ecc3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 29 Jun 2022 18:53:39 +0200 Subject: Fix #206 - Home cache not filtered --- .../main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java index a877e57ae..bf4fa1e62 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java @@ -451,8 +451,10 @@ public class TimelinesVM extends AndroidViewModel { Statuses statuses = null; try { statuses = statusCacheDAO.geStatuses(StatusCache.CacheEnum.HOME, instance, user_id, maxId, minId, sinceId); + if (statuses != null) { - statuses.statuses = SpannableHelper.convertStatus(getApplication().getApplicationContext(), statuses.statuses); + List filteredStatuses = TimelineHelper.filterStatus(getApplication().getApplicationContext(), statuses.statuses, TimelineHelper.FilterTimeLineType.HOME); + statuses.statuses = SpannableHelper.convertStatus(getApplication().getApplicationContext(), filteredStatuses); if (statuses.statuses != null && statuses.statuses.size() > 0) { statuses.pagination = new Pagination(); statuses.pagination.min_id = statuses.statuses.get(0).id; -- cgit v1.2.3 From f8aeada68f99406b6cd7f3867b6089a202e650d5 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 29 Jun 2022 18:54:08 +0200 Subject: Some fixes --- .../java/app/fedilab/android/BaseMainActivity.java | 2 +- .../android/activities/ProfileActivity.java | 2 +- .../java/app/fedilab/android/helper/Helper.java | 27 ++++++++++++++-------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index 2f733a7cc..e72396dd5 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -612,7 +612,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt binding.profilePicture.setOnClickListener(v -> binding.drawerLayout.openDrawer(GravityCompat.START)); Helper.loadPP(binding.profilePicture, currentAccount); headerMainBinding.accountAcc.setText(String.format("%s@%s", currentAccount.mastodon_account.username, currentAccount.instance)); - if (currentAccount.mastodon_account.display_name.isEmpty()) { + if (currentAccount.mastodon_account.display_name == null || currentAccount.mastodon_account.display_name.isEmpty()) { currentAccount.mastodon_account.display_name = currentAccount.mastodon_account.acct; } headerMainBinding.accountName.setText(currentAccount.mastodon_account.display_name); diff --git a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java index ec1f3a9c1..e8d8fc522 100644 --- a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java @@ -348,7 +348,7 @@ public class ProfileActivity extends BaseActivity { binding.accountMoved.setText(spannableString, TextView.BufferType.SPANNABLE); binding.accountMoved.setMovementMethod(LinkMovementMethod.getInstance()); } - if (account.acct.contains("@")) + if (account.acct != null && account.acct.contains("@")) binding.warningMessage.setVisibility(View.VISIBLE); else binding.warningMessage.setVisibility(View.GONE); diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 7fbddaff3..6d5454d50 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -1032,17 +1032,26 @@ public class Helper { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); boolean disableGif = sharedpreferences.getBoolean(context.getString(R.string.SET_DISABLE_GIF), false); String targetedUrl = disableGif ? account.mastodon_account.avatar_static : account.mastodon_account.avatar; - if (disableGif || (!targetedUrl.endsWith(".gif"))) { - Glide.with(view.getContext()) - .asDrawable() - .load(targetedUrl) - .thumbnail(0.1f) - .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) - .into(view); + if (targetedUrl != null) { + if (disableGif || (!targetedUrl.endsWith(".gif"))) { + Glide.with(view.getContext()) + .asDrawable() + .load(targetedUrl) + .thumbnail(0.1f) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(view); + } else { + Glide.with(view.getContext()) + .asGif() + .load(targetedUrl) + .thumbnail(0.1f) + .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) + .into(view); + } } else { Glide.with(view.getContext()) - .asGif() - .load(targetedUrl) + .asDrawable() + .load(R.drawable.ic_person) .thumbnail(0.1f) .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10))) .into(view); -- cgit v1.2.3 From a5c3da14911944eac5e58dde1a339ef606673193 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 29 Jun 2022 19:20:58 +0200 Subject: Some fixes --- app/build.gradle | 2 +- app/src/main/java/app/fedilab/android/helper/TimelineHelper.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9aad03318..44cfccb2c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { minSdk 21 targetSdk 31 - versionCode 391 + versionCode 392 versionName "3.0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java b/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java index dc8f251d2..ba4589e19 100644 --- a/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java @@ -126,7 +126,9 @@ public class TimelineHelper { } } } - statuses.removeAll(statusesToRemove); + if (statuses != null) { + statuses.removeAll(statusesToRemove); + } return statuses; } -- cgit v1.2.3 From 5521a14fdd9f8b4d13b1ab8a6cef9cc5469f25ac Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 30 Jun 2022 14:38:38 +0200 Subject: Some fixes --- .../java/app/fedilab/android/BaseMainActivity.java | 9 +- .../android/activities/WebviewActivity.java | 36 +++--- .../android/activities/WebviewConnectActivity.java | 24 ++-- .../client/endpoints/MastodonTimelinesService.java | 2 + .../android/client/entities/app/BottomMenu.java | 9 +- .../android/client/entities/app/DomainsBlock.java | 127 +++++++++++++++++++++ .../android/client/entities/nitter/Nitter.java | 3 +- .../app/fedilab/android/helper/CountDrawable.java | 116 +++++++++++++++++++ .../app/fedilab/android/helper/PushHelper.java | 10 +- .../java/app/fedilab/android/sqlite/Sqlite.java | 13 ++- .../timeline/FragmentMastodonTimeline.java | 7 +- .../android/viewmodel/mastodon/TimelinesVM.java | 1 + .../android/webview/FedilabWebViewClient.java | 12 +- .../main/res/drawable/browser_calls_blocked.xml | 12 ++ app/src/main/res/drawable/ic_block_script.xml | 9 ++ app/src/main/res/menu/main_webview.xml | 2 +- app/src/main/res/values/dimens.xml | 2 +- 17 files changed, 338 insertions(+), 56 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/client/entities/app/DomainsBlock.java create mode 100644 app/src/main/java/app/fedilab/android/helper/CountDrawable.java create mode 100644 app/src/main/res/drawable/browser_calls_blocked.xml create mode 100644 app/src/main/res/drawable/ic_block_script.xml diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index e72396dd5..56c824fe6 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -90,7 +90,6 @@ import app.fedilab.android.activities.FollowRequestActivity; import app.fedilab.android.activities.InstanceActivity; import app.fedilab.android.activities.InstanceHealthActivity; import app.fedilab.android.activities.LoginActivity; -import app.fedilab.android.activities.MainActivity; import app.fedilab.android.activities.MastodonListActivity; import app.fedilab.android.activities.PartnerShipActivity; import app.fedilab.android.activities.ProfileActivity; @@ -109,6 +108,7 @@ import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.client.entities.app.Account; import app.fedilab.android.client.entities.app.BaseAccount; import app.fedilab.android.client.entities.app.BottomMenu; +import app.fedilab.android.client.entities.app.DomainsBlock; import app.fedilab.android.client.entities.app.Pinned; import app.fedilab.android.client.entities.app.PinnedTimeline; import app.fedilab.android.databinding.ActivityMainBinding; @@ -251,7 +251,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(PREF_USER_TOKEN, account.token); editor.commit(); - Intent mainActivity = new Intent(this, MainActivity.class); + Intent mainActivity = new Intent(this, BaseMainActivity.class); mainActivity.putExtra(Helper.INTENT_ACTION, Helper.OPEN_NOTIFICATION); startActivity(mainActivity); finish(); @@ -456,7 +456,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt editor.commit(); //The user is now aut //The user is now authenticated, it will be redirected to MainActivity - Intent mainActivity = new Intent(this, MainActivity.class); + Intent mainActivity = new Intent(this, BaseMainActivity.class); startActivity(mainActivity); finish(); headerMainBinding.ownerAccounts.setImageResource(R.drawable.ic_baseline_arrow_drop_down_24); @@ -694,7 +694,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE)); //For receiving data from other activities LocalBroadcastManager.getInstance(BaseMainActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); - if (emojis == null || !emojis.containsKey(MainActivity.currentInstance)) { + if (emojis == null || !emojis.containsKey(BaseMainActivity.currentInstance)) { new Thread(() -> { try { emojis.put(currentInstance, new EmojiInstance(BaseMainActivity.this).getEmojiList(BaseMainActivity.currentInstance)); @@ -703,6 +703,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } }).start(); } + DomainsBlock.updateDomains(BaseMainActivity.this); } diff --git a/app/src/main/java/app/fedilab/android/activities/WebviewActivity.java b/app/src/main/java/app/fedilab/android/activities/WebviewActivity.java index 818c62499..5c355ee62 100644 --- a/app/src/main/java/app/fedilab/android/activities/WebviewActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/WebviewActivity.java @@ -14,17 +14,18 @@ package app.fedilab.android.activities; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ + import android.Manifest; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.database.sqlite.SQLiteDatabase; import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; import android.net.Uri; -import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -39,14 +40,13 @@ import androidx.core.content.ContextCompat; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; import app.fedilab.android.R; import app.fedilab.android.databinding.ActivityWebviewBinding; +import app.fedilab.android.helper.CountDrawable; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; -import app.fedilab.android.sqlite.Sqlite; import app.fedilab.android.webview.CustomWebview; import app.fedilab.android.webview.FedilabWebChromeClient; import app.fedilab.android.webview.FedilabWebViewClient; @@ -55,12 +55,13 @@ import es.dmoral.toasty.Toasty; public class WebviewActivity extends BaseActivity { - public static List trackingDomains; + private String url; private boolean peertubeLink; private CustomWebview webView; private FedilabWebViewClient FedilabWebViewClient; private ActivityWebviewBinding binding; + private Menu defaultMenu; @SuppressLint("SetJavaScriptEnabled") @Override @@ -133,24 +134,12 @@ public class WebviewActivity extends BaseActivity { }); if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) url = "http://" + url; - if (trackingDomains == null) { - AsyncTask.execute(() -> { - SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - // trackingDomains = new DomainBlockDAO(WebviewActivity.this, db).getAll(); - if (trackingDomains == null) - trackingDomains = new ArrayList<>(); - // Get a handler that can be used to post to the main thread - Handler mainHandler = new Handler(getMainLooper()); - Runnable myRunnable = () -> webView.loadUrl(url); - mainHandler.post(myRunnable); + webView.loadUrl(url); - }); - } else - webView.loadUrl(url); } - /* public void setCount(Context context, String count) { + public void setCount(Context context, String count) { if (defaultMenu != null && !peertubeLink) { MenuItem menuItem = defaultMenu.findItem(R.id.action_block); LayerDrawable icon = (LayerDrawable) menuItem.getIcon(); @@ -169,17 +158,20 @@ public class WebviewActivity extends BaseActivity { icon.mutate(); icon.setDrawableByLayerId(R.id.ic_block_count, badge); } - }*/ + } @Override public boolean onPrepareOptionsMenu(Menu menu) { - + if (!peertubeLink) + setCount(WebviewActivity.this, "0"); + defaultMenu = menu; return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(@NotNull Menu menu) { getMenuInflater().inflate(R.menu.main_webview, menu); + defaultMenu = menu; if (peertubeLink) { menu.findItem(R.id.action_go).setVisible(false); menu.findItem(R.id.action_block).setVisible(false); diff --git a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java index fa2112846..1fc6159cc 100644 --- a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java @@ -55,6 +55,7 @@ import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.viewmodel.mastodon.AccountsVM; import app.fedilab.android.viewmodel.mastodon.AdminVM; import app.fedilab.android.viewmodel.mastodon.OauthVM; +import es.dmoral.toasty.Toasty; public class WebviewConnectActivity extends BaseActivity { @@ -214,18 +215,23 @@ public class WebviewConnectActivity extends BaseActivity { //API call to retrieve account information for the new token AccountsVM accountsVM = new ViewModelProvider(WebviewConnectActivity.this).get(AccountsVM.class); accountsVM.getConnectedAccount(currentInstanceLogin, account.token).observe(WebviewConnectActivity.this, mastodonAccount -> { - account.mastodon_account = mastodonAccount; - account.user_id = mastodonAccount.id; - //We check if user have really moderator rights - if (requestedAdmin) { - AdminVM adminVM = new ViewModelProvider(WebviewConnectActivity.this).get(AdminVM.class); - adminVM.getAccount(account.instance, account.token, account.user_id).observe(WebviewConnectActivity.this, adminAccount -> { - account.admin = adminAccount != null; + if (mastodonAccount != null) { + account.mastodon_account = mastodonAccount; + account.user_id = mastodonAccount.id; + //We check if user have really moderator rights + if (requestedAdmin) { + AdminVM adminVM = new ViewModelProvider(WebviewConnectActivity.this).get(AdminVM.class); + adminVM.getAccount(account.instance, account.token, account.user_id).observe(WebviewConnectActivity.this, adminAccount -> { + account.admin = adminAccount != null; + proceedLogin(WebviewConnectActivity.this, account); + }); + } else { proceedLogin(WebviewConnectActivity.this, account); - }); + } } else { - proceedLogin(WebviewConnectActivity.this, account); + Toasty.error(WebviewConnectActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); } + }); }); return true; diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java index ffe825668..36d8c9f65 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java @@ -225,12 +225,14 @@ public interface MastodonTimelinesService { @Query("count") int count ); + @Headers({"Accept: text/html,application/xhtml+xml,application/xml"}) @GET("{names}/rss") Call getNitter( @Path("names") String id, @Query("max_position") String max_position ); + @Headers({"Accept: text/html,application/xhtml+xml,application/xml"}) @GET("{account}/rss") Call getNitterAccount( @Path("account") String account diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/BottomMenu.java b/app/src/main/java/app/fedilab/android/client/entities/app/BottomMenu.java index b617029a0..97f252043 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/app/BottomMenu.java +++ b/app/src/main/java/app/fedilab/android/client/entities/app/BottomMenu.java @@ -33,7 +33,6 @@ import java.util.List; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; -import app.fedilab.android.activities.MainActivity; import app.fedilab.android.exception.DBException; import app.fedilab.android.sqlite.Sqlite; @@ -218,8 +217,8 @@ public class BottomMenu implements Serializable { return -1; } if (bottomMenu.user_id == null) { - bottomMenu.user_id = MainActivity.currentUserID; - bottomMenu.instance = MainActivity.currentInstance; + bottomMenu.user_id = BaseMainActivity.currentUserID; + bottomMenu.instance = BaseMainActivity.currentInstance; } boolean exists = bottomMenuExists(bottomMenu); long idReturned; @@ -299,8 +298,8 @@ public class BottomMenu implements Serializable { public BottomMenu defaultBottomMenu() { BottomMenu bottomMenu = new BottomMenu(); - bottomMenu.user_id = MainActivity.currentUserID; - bottomMenu.instance = MainActivity.currentInstance; + bottomMenu.user_id = BaseMainActivity.currentUserID; + bottomMenu.instance = BaseMainActivity.currentInstance; bottomMenu.bottom_menu = new ArrayList<>(); MenuItem menuItemHome = new MenuItem(); menuItemHome.position = 0; diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/DomainsBlock.java b/app/src/main/java/app/fedilab/android/client/entities/app/DomainsBlock.java new file mode 100644 index 000000000..6843b11fe --- /dev/null +++ b/app/src/main/java/app/fedilab/android/client/entities/app/DomainsBlock.java @@ -0,0 +1,127 @@ +package app.fedilab.android.client.entities.app; + +import android.content.ContentValues; +import android.content.Context; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import androidx.preference.PreferenceManager; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import javax.net.ssl.HttpsURLConnection; + +import app.fedilab.android.exception.DBException; +import app.fedilab.android.helper.Helper; +import app.fedilab.android.sqlite.Sqlite; + + +public class DomainsBlock { + + public static final String LAST_DATE_OF_UPDATE = "LAST_DATE_OF_UPDATE"; + public static List trackingDomains = null; + + private static void getDomains(Context context) { + if (trackingDomains == null) { + try { + SQLiteDatabase db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + Cursor c = db.query(Sqlite.TABLE_DOMAINS_TRACKING, null, null, null, null, null, null, null); + trackingDomains = cursorToDomain(c); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public static void updateDomains(Context _mContext) { + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(_mContext); + String last_date = sharedpreferences.getString(LAST_DATE_OF_UPDATE, null); + Date dateUpdate = new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10)); + Date dateLastUpdate = Helper.stringToDate(_mContext, last_date); + SQLiteDatabase db = Sqlite.getInstance(_mContext.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + if (last_date == null || dateUpdate.after(dateLastUpdate)) { + new Thread(() -> { + try { + HttpsURLConnection connection = (HttpsURLConnection) new URL("https://hosts.fedilab.app/hosts").openConnection(); + if (connection.getResponseCode() > HttpsURLConnection.HTTP_MOVED_TEMP) { + return; + } + BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + List domains = new ArrayList<>(); + while ((line = br.readLine()) != null) { + if (line.startsWith("0.0.0.0 ")) { + domains.add(line.replace("0.0.0.0 ", "").trim()); + } + } + br.close(); + connection.disconnect(); + insertDomains(db, domains); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(LAST_DATE_OF_UPDATE, Helper.dateToString(new Date())); + editor.apply(); + } catch (IOException | DBException e) { + e.printStackTrace(); + } + }).start(); + } else { + getDomains(_mContext); + } + } + + /** + * Insert a domains in db + * + * @param domains {@link List} + * @throws DBException exception with database + */ + private static void insertDomains(SQLiteDatabase db, List domains) throws DBException { + + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + db.delete(Sqlite.TABLE_DOMAINS_TRACKING, null, null); + DomainsBlock.trackingDomains = new ArrayList<>(); + for (String domain : domains) { + ContentValues values = new ContentValues(); + values.put(Sqlite.COL_DOMAIN, domain); + //Inserts token + try { + db.insertOrThrow(Sqlite.TABLE_DOMAINS_TRACKING, null, values); + } catch (Exception e) { + e.printStackTrace(); + } + DomainsBlock.trackingDomains.add(domain); + } + } + + + /*** + * Method to hydrate domain from database + * @param c Cursor + * @return List + */ + private static List cursorToDomain(Cursor c) { + //No element found + if (c.getCount() == 0) { + c.close(); + return null; + } + List domains = new ArrayList<>(); + while (c.moveToNext()) { + domains.add(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_DOMAIN))); + } + //Close the cursor + c.close(); + //domains list is returned + return domains; + } +} diff --git a/app/src/main/java/app/fedilab/android/client/entities/nitter/Nitter.java b/app/src/main/java/app/fedilab/android/client/entities/nitter/Nitter.java index 3338d7a85..2241b13c8 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/nitter/Nitter.java +++ b/app/src/main/java/app/fedilab/android/client/entities/nitter/Nitter.java @@ -79,11 +79,12 @@ public class Nitter implements Serializable { status.id = feedItem.pubDate; status.content = feedItem.description; status.text = feedItem.title; + status.content = status.content.replaceAll("]*src=\"[^\"]+\"[^>]*>", ""); status.visibility = "public"; status.created_at = Helper.stringToDateWithFormat(context, feedItem.pubDate, "EEE, dd MMM yyyy HH:mm:ss zzz"); status.uri = feedItem.guid; status.url = feedItem.link; - if (!accounts.containsValue(feedItem.creator)) { + if (!accounts.containsKey(feedItem.creator)) { MastodonTimelinesService mastodonTimelinesService = initInstanceXMLOnly(context, instance); Call accountCall = mastodonTimelinesService.getNitterAccount(feedItem.creator.replace("@", "")); if (accountCall != null) { diff --git a/app/src/main/java/app/fedilab/android/helper/CountDrawable.java b/app/src/main/java/app/fedilab/android/helper/CountDrawable.java new file mode 100644 index 000000000..3688109ea --- /dev/null +++ b/app/src/main/java/app/fedilab/android/helper/CountDrawable.java @@ -0,0 +1,116 @@ +package app.fedilab.android.helper; +/* Copyright 2022 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 . */ + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import app.fedilab.android.R; + + +public class CountDrawable extends Drawable { + + private final Paint mBadgePaint; + private final Paint mTextPaint; + private final Rect mTxtRect = new Rect(); + + private String mCount = ""; + private boolean mWillDraw; + + public CountDrawable(Context context) { + float mTextSize = context.getResources().getDimension(R.dimen.badge_count_textsize); + + mBadgePaint = new Paint(); + mBadgePaint.setColor(ContextCompat.getColor(context, R.color.red_1)); + mBadgePaint.setAntiAlias(true); + mBadgePaint.setStyle(Paint.Style.FILL); + + mTextPaint = new Paint(); + mTextPaint.setColor(Color.WHITE); + mTextPaint.setTypeface(Typeface.DEFAULT); + mTextPaint.setTextSize(mTextSize); + mTextPaint.setAntiAlias(true); + mTextPaint.setTextAlign(Paint.Align.CENTER); + } + + @Override + public void draw(@NonNull Canvas canvas) { + + if (!mWillDraw) { + return; + } + Rect bounds = getBounds(); + float width = bounds.right - bounds.left; + float height = bounds.bottom - bounds.top; + + // Position the badge in the top-right quadrant of the icon. + + /*Using Math.max rather than Math.min */ + + float radius = ((Math.max(width, height) / 2)) / 2; + float centerX = (width - radius - 1) + 5; + float centerY = radius - 5; + if (mCount.length() <= 2) { + // Draw badge circle. + canvas.drawCircle(centerX, centerY, (int) (radius + 5.5), mBadgePaint); + } else { + canvas.drawCircle(centerX, centerY, (int) (radius + 6.5), mBadgePaint); + } + // Draw badge count text inside the circle. + mTextPaint.getTextBounds(mCount, 0, mCount.length(), mTxtRect); + float textHeight = mTxtRect.bottom - mTxtRect.top; + float textY = centerY + (textHeight / 2f); + if (mCount.length() > 2) + canvas.drawText("99+", centerX, textY, mTextPaint); + else + canvas.drawText(mCount, centerX, textY, mTextPaint); + } + + /* + Sets the count (i.e notifications) to display. + */ + public void setCount(String count) { + mCount = count; + + // Only draw a badge if there are notifications. + mWillDraw = !count.equalsIgnoreCase("0"); + invalidateSelf(); + } + + @Override + public void setAlpha(int alpha) { + // do nothing + } + + @Override + public void setColorFilter(ColorFilter cf) { + // do nothing + } + + @Override + public int getOpacity() { + return PixelFormat.UNKNOWN; + } +} diff --git a/app/src/main/java/app/fedilab/android/helper/PushHelper.java b/app/src/main/java/app/fedilab/android/helper/PushHelper.java index b5317fa39..bcc7907b2 100644 --- a/app/src/main/java/app/fedilab/android/helper/PushHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/PushHelper.java @@ -86,10 +86,12 @@ public class PushHelper { case "REPEAT_NOTIFICATIONS": new Thread(() -> { List accounts = new Account(context).getPushNotificationAccounts(); - for (BaseAccount account : accounts) { - ((Activity) context).runOnUiThread(() -> { - UnifiedPush.unregisterApp(context, account.user_id + "@" + account.instance); - }); + if (accounts != null) { + for (BaseAccount account : accounts) { + ((Activity) context).runOnUiThread(() -> { + UnifiedPush.unregisterApp(context, account.user_id + "@" + account.instance); + }); + } } }).start(); new PeriodicWorkRequest.Builder(NotificationsWorker.class, 20, TimeUnit.MINUTES) diff --git a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java index d1142d4e1..b4e771d91 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java +++ b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java @@ -23,7 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper; public class Sqlite extends SQLiteOpenHelper { - public static final int DB_VERSION = 4; + public static final int DB_VERSION = 5; public static final String DB_NAME = "fedilab_db"; //Table of owned accounts @@ -81,7 +81,9 @@ public class Sqlite extends SQLiteOpenHelper { //Bottom menu public static final String TABLE_BOTTOM_MENU = "TABLE_BOTTOM_MENU"; public static final String COL_BOTTOM_MENU = "BOTTOM_MENU"; - + //Tracking domains + public static final String TABLE_DOMAINS_TRACKING = "TABLE_DOMAINS_TRACKING"; + public static final String COL_DOMAIN = "DOMAIN"; private static final String CREATE_TABLE_USER_ACCOUNT = "CREATE TABLE " + TABLE_USER_ACCOUNT + " (" + COL_USER_ID + " TEXT NOT NULL, " @@ -170,6 +172,10 @@ public class Sqlite extends SQLiteOpenHelper { + COL_USER_ID + " TEXT NOT NULL, " + COL_BOTTOM_MENU + " TEXT NOT NULL)"; + private static final String CREATE_DOMAINS_TRACKING = "CREATE TABLE IF NOT EXISTS " + TABLE_DOMAINS_TRACKING + " (" + + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + COL_DOMAIN + " TEXT NOT NULL)"; + public static SQLiteDatabase db; private static Sqlite sInstance; @@ -198,6 +204,7 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_SCHEDULE_BOOST); db.execSQL(CREATE_TABLE_QUICK_LOAD); db.execSQL(CREATE_TABLE_BOTTOM_MENU); + db.execSQL(CREATE_DOMAINS_TRACKING); } @Override @@ -214,6 +221,8 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_BOTTOM_MENU); case 3: db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_ADMIN + " INTEGER NOT NULL DEFAULT 0"); + case 4: + db.execSQL(CREATE_DOMAINS_TRACKING); default: break; } diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java index 7bb4f08df..f61acf1cb 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java @@ -43,7 +43,6 @@ import java.util.List; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; -import app.fedilab.android.activities.MainActivity; import app.fedilab.android.client.entities.api.Account; import app.fedilab.android.client.entities.api.Attachment; import app.fedilab.android.client.entities.api.Marker; @@ -236,7 +235,11 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else if (list_id != null) { ident = "@l@" + list_id; } else if (remoteInstance != null) { - ident = "@R@" + remoteInstance; + if (pinnedTimeline.remoteInstance.type == RemoteInstance.InstanceType.NITTER) { + ident = "@R@" + pinnedTimeline.remoteInstance.host; + } else { + ident = "@R@" + remoteInstance; + } } else if (search != null) { ident = "@S@" + search; } else { diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java index bf4fa1e62..13ffbb494 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java @@ -171,6 +171,7 @@ public class TimelinesVM extends AndroidViewModel { statusesMutableLiveData = new MutableLiveData<>(); new Thread(() -> { Call publicTlCall = mastodonTimelinesService.getNitter(accountsStr, max_position); + Statuses statuses = new Statuses(); if (publicTlCall != null) { try { diff --git a/app/src/main/java/app/fedilab/android/webview/FedilabWebViewClient.java b/app/src/main/java/app/fedilab/android/webview/FedilabWebViewClient.java index f910d5fb3..24b0337f3 100644 --- a/app/src/main/java/app/fedilab/android/webview/FedilabWebViewClient.java +++ b/app/src/main/java/app/fedilab/android/webview/FedilabWebViewClient.java @@ -15,6 +15,8 @@ package app.fedilab.android.webview; * see . */ +import static app.fedilab.android.client.entities.app.DomainsBlock.trackingDomains; + import android.app.Activity; import android.graphics.Bitmap; import android.net.http.SslError; @@ -59,7 +61,7 @@ public class FedilabWebViewClient extends WebViewClient { @Override public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { - if (WebviewActivity.trackingDomains != null) { + if (trackingDomains != null) { URI uri; try { uri = new URI(url); @@ -67,11 +69,11 @@ public class FedilabWebViewClient extends WebViewClient { if (domain != null) { domain = domain.startsWith("www.") ? domain.substring(4) : domain; } - if (domain != null && WebviewActivity.trackingDomains.contains(domain)) { + if (domain != null && trackingDomains.contains(domain)) { if (activity instanceof WebviewActivity) { count++; domains.add(url); - // ((WebviewActivity) activity).setCount(activity, String.valueOf(count)); + ((WebviewActivity) activity).setCount(activity, String.valueOf(count)); } ByteArrayInputStream nothing = new ByteArrayInputStream("".getBytes()); return new WebResourceResponse("text/plain", "utf-8", nothing); @@ -86,11 +88,11 @@ public class FedilabWebViewClient extends WebViewClient { if (domain != null) { domain = domain.startsWith("www.") ? domain.substring(4) : domain; } - if (domain != null && WebviewActivity.trackingDomains.contains(domain)) { + if (domain != null && trackingDomains.contains(domain)) { if (activity instanceof WebviewActivity) { count++; domains.add(url); - // ((WebviewActivity) activity).setCount(activity, String.valueOf(count)); + ((WebviewActivity) activity).setCount(activity, String.valueOf(count)); } ByteArrayInputStream nothing = new ByteArrayInputStream("".getBytes()); return new WebResourceResponse("text/plain", "utf-8", nothing); diff --git a/app/src/main/res/drawable/browser_calls_blocked.xml b/app/src/main/res/drawable/browser_calls_blocked.xml new file mode 100644 index 000000000..783a0a05b --- /dev/null +++ b/app/src/main/res/drawable/browser_calls_blocked.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_block_script.xml b/app/src/main/res/drawable/ic_block_script.xml new file mode 100644 index 000000000..5247c31e4 --- /dev/null +++ b/app/src/main/res/drawable/ic_block_script.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/menu/main_webview.xml b/app/src/main/res/menu/main_webview.xml index 2b18c42bb..abc6b2473 100644 --- a/app/src/main/res/menu/main_webview.xml +++ b/app/src/main/res/menu/main_webview.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> 2dp 180dp - + 12sp 35dp 50dp \ No newline at end of file -- cgit v1.2.3 From 6fea7bbe54332972c1f85f65866317a16aca618c Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 30 Jun 2022 14:44:52 +0200 Subject: Some fixes --- .../app/fedilab/android/activities/AboutActivity.java | 5 +++-- .../android/activities/AdminAccountActivity.java | 16 ++++++++-------- .../android/activities/AdminReportActivity.java | 16 ++++++++-------- .../fedilab/android/activities/ContextActivity.java | 7 ++++--- .../android/activities/PartnerShipActivity.java | 5 +++-- .../android/activities/WebviewConnectActivity.java | 9 +++++---- .../app/fedilab/android/helper/CrossActionHelper.java | 9 ++++----- .../main/java/app/fedilab/android/helper/Helper.java | 3 +-- .../fedilab/android/helper/NotificationsHelper.java | 6 +++--- .../app/fedilab/android/helper/TimelineHelper.java | 5 ++--- .../fedilab/android/services/PostMessageService.java | 3 +-- .../android/ui/drawer/AccountFollowRequestAdapter.java | 6 +++--- .../fedilab/android/ui/drawer/AnnouncementAdapter.java | 18 +++++++++--------- .../app/fedilab/android/ui/drawer/ComposeAdapter.java | 5 ++--- .../app/fedilab/android/ui/drawer/ReactionAdapter.java | 6 +++--- .../app/fedilab/android/ui/drawer/StatusAdapter.java | 5 ++--- .../ui/fragment/settings/FragmentComposeSettings.java | 6 +++--- .../timeline/FragmentMastodonNotification.java | 7 +++---- .../ui/fragment/timeline/FragmentMastodonTimeline.java | 6 +++--- 19 files changed, 70 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java index 7a780a11a..54974a2c4 100644 --- a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java @@ -30,6 +30,7 @@ import androidx.lifecycle.ViewModelProvider; import java.util.ArrayList; import java.util.List; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BuildConfig; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.Account; @@ -112,12 +113,12 @@ public class AboutActivity extends BaseActivity { AccountsVM accountsVM = new ViewModelProvider(AboutActivity.this).get(AccountsVM.class); List ids = new ArrayList<>(); ids.add(account.id); - accountsVM.getRelationships(MainActivity.currentInstance, MainActivity.currentToken, ids) + accountsVM.getRelationships(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, ids) .observe(AboutActivity.this, relationShips -> { if (relationShips != null && relationShips.size() > 0) { if (!relationShips.get(0).following) { binding.accountFollow.setVisibility(View.VISIBLE); - binding.accountFollow.setOnClickListener(v -> accountsVM.follow(MainActivity.currentInstance, MainActivity.currentToken, account.id, true, false) + binding.accountFollow.setOnClickListener(v -> accountsVM.follow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, true, false) .observe(AboutActivity.this, relationShip -> binding.accountFollow.setVisibility(View.GONE))); } } diff --git a/app/src/main/java/app/fedilab/android/activities/AdminAccountActivity.java b/app/src/main/java/app/fedilab/android/activities/AdminAccountActivity.java index 9ebe475d1..8421d924a 100644 --- a/app/src/main/java/app/fedilab/android/activities/AdminAccountActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AdminAccountActivity.java @@ -171,14 +171,14 @@ public class AdminAccountActivity extends BaseActivity { binding.disableAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.enable(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.enable(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminAccountActivity.this, adminAccountResult -> { adminAccount.disabled = false; binding.disableAction.setText(R.string.disable); binding.disabled.setText(R.string.no); }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "disable ", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "disable ", null, null, null, null); adminAccount.disabled = true; binding.disableAction.setText(R.string.undisable); binding.disabled.setText(R.string.yes); @@ -187,14 +187,14 @@ public class AdminAccountActivity extends BaseActivity { binding.approveAction.setOnClickListener(v -> { if (adminAccount.approved) { - adminVM.reject(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.reject(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminAccountActivity.this, adminAccountResult -> { adminAccount.approved = false; binding.approveAction.setText(R.string.approve); binding.approved.setText(R.string.no); }); } else { - adminVM.approve(MainActivity.currentInstance, MainActivity.currentToken, account.id); + adminVM.approve(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id); adminAccount.approved = true; binding.approveAction.setText(R.string.reject); binding.approved.setText(R.string.yes); @@ -203,14 +203,14 @@ public class AdminAccountActivity extends BaseActivity { binding.silenceAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.unsilence(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.unsilence(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminAccountActivity.this, adminAccountResult -> { adminAccount.silenced = false; binding.silenceAction.setText(R.string.silence); binding.disabled.setText(R.string.no); }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "silence", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "silence", null, null, null, null); adminAccount.silenced = true; binding.disableAction.setText(R.string.unsilence); binding.disabled.setText(R.string.yes); @@ -219,14 +219,14 @@ public class AdminAccountActivity extends BaseActivity { binding.suspendAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.unsuspend(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.unsuspend(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminAccountActivity.this, adminAccountResult -> { adminAccount.suspended = false; binding.suspendAction.setText(R.string.suspend); binding.suspended.setText(R.string.no); }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "suspend", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "suspend", null, null, null, null); adminAccount.suspended = true; binding.disableAction.setText(R.string.unsuspend); binding.suspended.setText(R.string.yes); diff --git a/app/src/main/java/app/fedilab/android/activities/AdminReportActivity.java b/app/src/main/java/app/fedilab/android/activities/AdminReportActivity.java index d3727cf3d..701dbd07f 100644 --- a/app/src/main/java/app/fedilab/android/activities/AdminReportActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AdminReportActivity.java @@ -171,7 +171,7 @@ public class AdminReportActivity extends BaseActivity { binding.disableAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.enable(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.enable(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminReportActivity.this, adminAccountResult -> { if (adminAccountResult != null) { adminAccount.disabled = false; @@ -183,7 +183,7 @@ public class AdminReportActivity extends BaseActivity { }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "disable ", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "disable ", null, null, null, null); adminAccount.disabled = true; binding.disableAction.setText(R.string.undisable); binding.disabled.setText(R.string.yes); @@ -192,7 +192,7 @@ public class AdminReportActivity extends BaseActivity { binding.approveAction.setOnClickListener(v -> { if (adminAccount.approved) { - adminVM.reject(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.reject(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminReportActivity.this, adminAccountResult -> { if (adminAccountResult != null) { adminAccount.approved = false; @@ -204,7 +204,7 @@ public class AdminReportActivity extends BaseActivity { }); } else { - adminVM.approve(MainActivity.currentInstance, MainActivity.currentToken, account.id); + adminVM.approve(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id); adminAccount.approved = true; binding.approveAction.setText(R.string.reject); binding.approved.setText(R.string.yes); @@ -213,7 +213,7 @@ public class AdminReportActivity extends BaseActivity { binding.silenceAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.unsilence(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.unsilence(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminReportActivity.this, adminAccountResult -> { if (adminAccountResult != null) { adminAccount.silenced = false; @@ -224,7 +224,7 @@ public class AdminReportActivity extends BaseActivity { } }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "silence", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "silence", null, null, null, null); adminAccount.silenced = true; binding.disableAction.setText(R.string.unsilence); binding.disabled.setText(R.string.yes); @@ -233,7 +233,7 @@ public class AdminReportActivity extends BaseActivity { binding.suspendAction.setOnClickListener(v -> { if (adminAccount.disabled) { - adminVM.unsuspend(MainActivity.currentInstance, MainActivity.currentToken, account.id) + adminVM.unsuspend(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id) .observe(AdminReportActivity.this, adminAccountResult -> { if (adminAccountResult != null) { adminAccount.suspended = false; @@ -244,7 +244,7 @@ public class AdminReportActivity extends BaseActivity { } }); } else { - adminVM.performAction(MainActivity.currentInstance, MainActivity.currentToken, account.id, "suspend", null, null, null, null); + adminVM.performAction(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, "suspend", null, null, null, null); adminAccount.suspended = true; binding.disableAction.setText(R.string.unsuspend); binding.suspended.setText(R.string.yes); diff --git a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java index 3710edf75..51fd8f320 100644 --- a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java @@ -34,6 +34,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.preference.PreferenceManager; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.client.entities.app.QuickLoad; @@ -97,11 +98,11 @@ public class ContextActivity extends BaseActivity { mainHandler.post(myRunnable); }).start(); StatusesVM timelinesVM = new ViewModelProvider(ContextActivity.this).get(StatusesVM.class); - timelinesVM.getStatus(MainActivity.currentInstance, MainActivity.currentToken, focusedStatus.id).observe(ContextActivity.this, status -> { + timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(ContextActivity.this, status -> { if (status != null) { StatusCache statusCache = new StatusCache(); - statusCache.instance = MainActivity.currentInstance; - statusCache.user_id = MainActivity.currentUserID; + statusCache.instance = BaseMainActivity.currentInstance; + statusCache.user_id = BaseMainActivity.currentUserID; statusCache.status = status; statusCache.status_id = status.id; //Update cache diff --git a/app/src/main/java/app/fedilab/android/activities/PartnerShipActivity.java b/app/src/main/java/app/fedilab/android/activities/PartnerShipActivity.java index ffa8e1307..353897f1c 100644 --- a/app/src/main/java/app/fedilab/android/activities/PartnerShipActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/PartnerShipActivity.java @@ -31,6 +31,7 @@ import androidx.lifecycle.ViewModelProvider; import java.util.ArrayList; import java.util.List; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.Account; import app.fedilab.android.client.entities.api.Status; @@ -92,12 +93,12 @@ public class PartnerShipActivity extends BaseActivity { AccountsVM accountsVM = new ViewModelProvider(PartnerShipActivity.this).get(AccountsVM.class); List ids = new ArrayList<>(); ids.add(account.id); - accountsVM.getRelationships(MainActivity.currentInstance, MainActivity.currentToken, ids) + accountsVM.getRelationships(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, ids) .observe(PartnerShipActivity.this, relationShips -> { if (relationShips != null && relationShips.size() > 0) { if (!relationShips.get(0).following) { binding.accountFollow.setVisibility(View.VISIBLE); - binding.accountFollow.setOnClickListener(v -> accountsVM.follow(MainActivity.currentInstance, MainActivity.currentToken, account.id, true, false) + binding.accountFollow.setOnClickListener(v -> accountsVM.follow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, true, false) .observe(PartnerShipActivity.this, relationShip -> binding.accountFollow.setVisibility(View.GONE))); } } diff --git a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java index 1fc6159cc..2120a7fb7 100644 --- a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java @@ -46,6 +46,7 @@ import androidx.preference.PreferenceManager; import java.util.regex.Matcher; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.app.Account; import app.fedilab.android.databinding.ActivityWebviewConnectBinding; @@ -90,16 +91,16 @@ public class WebviewConnectActivity extends BaseActivity { //update the database new Account(activity).insertOrUpdate(account); Handler mainHandler = new Handler(Looper.getMainLooper()); - MainActivity.currentToken = account.token; - MainActivity.currentUserID = account.user_id; - MainActivity.api = Account.API.MASTODON; + BaseMainActivity.currentToken = account.token; + BaseMainActivity.currentUserID = account.user_id; + BaseMainActivity.api = Account.API.MASTODON; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(activity); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(PREF_USER_TOKEN, account.token); editor.commit(); //The user is now authenticated, it will be redirected to MainActivity Runnable myRunnable = () -> { - Intent mainActivity = new Intent(activity, MainActivity.class); + Intent mainActivity = new Intent(activity, BaseMainActivity.class); activity.startActivity(mainActivity); activity.finish(); }; diff --git a/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java b/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java index 720891252..93048628f 100644 --- a/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java @@ -35,7 +35,6 @@ impor