diff options
44 files changed, 589 insertions, 197 deletions
diff --git a/app/build.gradle b/app/build.gradle index 9aad03318..b541a491d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { defaultConfig { minSdk 21 targetSdk 31 - versionCode 391 - versionName "3.0.1" + versionCode 393 + versionName "3.0.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index 2f733a7cc..c69760d7a 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -109,6 +109,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; @@ -612,7 +613,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); @@ -694,7 +695,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 +704,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/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<String> 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<String> 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/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/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 <http://www.gnu.org/licenses>. */ + 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<String> 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..d02a4217e 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; @@ -55,6 +56,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 { @@ -89,9 +91,9 @@ 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); @@ -214,18 +216,23 @@ public class Webv |