summaryrefslogtreecommitdiffstats
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/app/fedilab/android/BaseMainActivity.java69
-rw-r--r--app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java23
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ActionActivity.java18
-rw-r--r--app/src/main/java/app/fedilab/android/activities/CacheActivity.java6
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ComposeActivity.java15
-rw-r--r--app/src/main/java/app/fedilab/android/activities/FilterActivity.java9
-rw-r--r--app/src/main/java/app/fedilab/android/activities/InstanceActivity.java22
-rw-r--r--app/src/main/java/app/fedilab/android/activities/MastodonListActivity.java47
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ProfileActivity.java97
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ReorderTimelinesActivity.java53
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java3
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SuggestionActivity.java61
-rw-r--r--app/src/main/java/app/fedilab/android/activities/admin/AdminAccountActivity.java (renamed from app/src/main/java/app/fedilab/android/activities/AdminAccountActivity.java)11
-rw-r--r--app/src/main/java/app/fedilab/android/activities/admin/AdminActionActivity.java (renamed from app/src/main/java/app/fedilab/android/activities/AdminActionActivity.java)83
-rw-r--r--app/src/main/java/app/fedilab/android/activities/admin/AdminDomainBlockActivity.java159
-rw-r--r--app/src/main/java/app/fedilab/android/activities/admin/AdminReportActivity.java (renamed from app/src/main/java/app/fedilab/android/activities/AdminReportActivity.java)10
-rw-r--r--app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java5
-rw-r--r--app/src/main/java/app/fedilab/android/client/endpoints/MastodonAdminService.java84
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Domains.java22
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Status.java4
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Suggestion.java27
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Suggestions.java22
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminAccount.java (renamed from app/src/main/java/app/fedilab/android/client/entities/api/AdminAccount.java)81
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminAccounts.java (renamed from app/src/main/java/app/fedilab/android/client/entities/api/AdminAccounts.java)4
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminDomainBlock.java43
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminDomainBlocks.java26
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminEmailDomainBlock.java36
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminIp.java29
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminIpBlock.java37
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminMeasure.java45
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminReport.java (renamed from app/src/main/java/app/fedilab/android/client/entities/api/AdminReport.java)25
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/admin/AdminReports.java (renamed from app/src/main/java/app/fedilab/android/client/entities/api/AdminReports.java)4
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java143
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/Timeline.java4
-rw-r--r--app/src/main/java/app/fedilab/android/helper/CustomEmoji.java7
-rw-r--r--app/src/main/java/app/fedilab/android/helper/Helper.java87
-rw-r--r--app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java116
-rw-r--r--app/src/main/java/app/fedilab/android/helper/SpannableHelper.java61
-rw-r--r--app/src/main/java/app/fedilab/android/helper/TimelineHelper.java1
-rw-r--r--app/src/main/java/app/fedilab/android/helper/itemtouchhelper/SimpleItemTouchHelperCallback.java2
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java9
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/DomainBlockAdapter.java95
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/FieldAdapter.java13
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/FilterAdapter.java7
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ReorderBottomMenuAdapter.java4
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ReorderTabAdapter.java74
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java89
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/SuggestionAdapter.java143
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/admin/AdminAccountAdapter.java (renamed from app/src/main/java/app/fedilab/android/ui/drawer/AdminAccountAdapter.java)9
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/admin/AdminDomainAdapter.java101
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/admin/ReportAdapter.java (renamed from app/src/main/java/app/fedilab/android/ui/drawer/ReportAdapter.java)4
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminAccount.java8
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminDomain.java256
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminReport.java8
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/login/FragmentLoginMain.java4
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonDomainBlock.java214
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java3
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonSuggestion.java161
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentNotificationContainer.java28
-rw-r--r--app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabNotificationPageAdapter.java8
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java54
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/AdminVM.java228
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/AppsVM.java10
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/NotificationsVM.java74
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java78
65 files changed, 2717 insertions, 566 deletions
diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
index 4682d6318..f98860b45 100644
--- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java
+++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
@@ -95,7 +95,6 @@ import java.util.regex.Pattern;
import app.fedilab.android.activities.AboutActivity;
import app.fedilab.android.activities.ActionActivity;
-import app.fedilab.android.activities.AdminActionActivity;
import app.fedilab.android.activities.AnnouncementActivity;
import app.fedilab.android.activities.BaseActivity;
import app.fedilab.android.activities.CacheActivity;
@@ -117,7 +116,9 @@ import app.fedilab.android.activities.ReorderTimelinesActivity;
import app.fedilab.android.activities.ScheduledActivity;
import app.fedilab.android.activities.SearchResultTabActivity;
import app.fedilab.android.activities.SettingsActivity;
+import app.fedilab.android.activities.SuggestionActivity;
import app.fedilab.android.activities.TrendsActivity;
+import app.fedilab.android.activities.admin.AdminActionActivity;
import app.fedilab.android.broadcastreceiver.NetworkStateReceiver;
import app.fedilab.android.client.entities.api.Emoji;
import app.fedilab.android.client.entities.api.EmojiInstance;
@@ -391,6 +392,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} else if (id == R.id.nav_trends) {
Intent intent = new Intent(this, TrendsActivity.class);
startActivity(intent);
+ } else if (id == R.id.nav_suggestions) {
+ Intent intent = new Intent(this, SuggestionActivity.class);
+ startActivity(intent);
} else if (id == R.id.nav_cache) {
Intent intent = new Intent(BaseMainActivity.this, CacheActivity.class);
startActivity(intent);
@@ -582,7 +586,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
- if (currentAccount == null) {
+ if (currentAccount == null || currentAccount.mastodon_account == null) {
//It is not, the user is redirected to the login page
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
startActivity(myIntent);
@@ -650,13 +654,13 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
regex_public = sharedpreferences.getString(getString(R.string.SET_FILTER_REGEX_PUBLIC) + currentUserID + currentInstance, null);
show_art_nsfw = sharedpreferences.getBoolean(getString(R.string.SET_ART_WITH_NSFW) + currentUserID + currentInstance, false);
binding.profilePicture.setOnClickListener(v -> binding.drawerLayout.openDrawer(GravityCompat.START));
- Helper.loadPP(binding.profilePicture, currentAccount);
+ Helper.loadPP(BaseMainActivity.this, binding.profilePicture, currentAccount);
headerMainBinding.accountAcc.setText(String.format("%s@%s", currentAccount.mastodon_account.username, currentAccount.instance));
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);
- Helper.loadPP(headerMainBinding.accountProfilePicture, currentAccount, false);
+ Helper.loadPP(BaseMainActivity.this, headerMainBinding.accountProfilePicture, currentAccount, false);
MastodonHelper.loadProfileMediaMastodon(headerMainBinding.backgroundImage, currentAccount.mastodon_account, MastodonHelper.MediaAccountType.HEADER);
/*
* Some general data are loaded when the app starts such;
@@ -697,16 +701,18 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
new ViewModelProvider(BaseMainActivity.this).get(AccountsVM.class).getConnectedAccount(currentInstance, currentToken)
.observe(BaseMainActivity.this, mastodonAccount -> {
//Initialize static var
- currentAccount.mastodon_account = mastodonAccount;
- displayReleaseNotesIfNeeded(BaseMainActivity.this, false);
- new Thread(() -> {
- try {
- //Update account in db
- new Account(BaseMainActivity.this).insertOrUpdate(currentAccount);
- } catch (DBException e) {
- e.printStackTrace();
- }
- }).start();
+ if (mastodonAccount != null) {
+ currentAccount.mastodon_account = mastodonAccount;
+ displayReleaseNotesIfNeeded(BaseMainActivity.this, false);
+ new Thread(() -> {
+ try {
+ //Update account in db
+ new Account(BaseMainActivity.this).insertOrUpdate(currentAccount);
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
+ }).start();
+ }
});
};
@@ -805,10 +811,11 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
String action = intent.getAction();
String type = intent.getType();
Bundle extras = intent.getExtras();
- String userIdIntent, instanceIntent;
+ String userIdIntent, instanceIntent, urlOfMessage;
if (extras != null && extras.containsKey(Helper.INTENT_ACTION)) {
userIdIntent = extras.getString(Helper.PREF_KEY_ID); //Id of the account in the intent
instanceIntent = extras.getString(Helper.PREF_INSTANCE);
+ urlOfMessage = extras.getString(Helper.PREF_MESSAGE_URL);
if (extras.getInt(Helper.INTENT_ACTION) == Helper.NOTIFICATION_INTENT) {
if (userIdIntent != null && instanceIntent != null && userIdIntent.equals(currentUserID) && instanceIntent.equals(currentInstance)) {
openNotifications(intent);
@@ -834,6 +841,23 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
}
} else if (extras.getInt(Helper.INTENT_ACTION) == Helper.OPEN_NOTIFICATION) {
openNotifications(intent);
+ } else if (extras.getInt(Helper.INTENT_ACTION) == Helper.OPEN_WITH_ANOTHER_ACCOUNT) {
+ CrossActionHelper.fetchRemoteStatus(BaseMainActivity.this, MainActivity.currentAccount, urlOfMessage, new CrossActionHelper.Callback() {
+ @Override
+ public void federatedStatus(Status status) {
+ if (status != null) {
+ Intent intent = new Intent(BaseMainActivity.this, ContextActivity.class);
+ intent.putExtra(Helper.ARG_STATUS, status);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ public void federatedAccount(app.fedilab.android.client.entities.api.Account account) {
+
+ }
+ });
}
} else if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
@@ -949,7 +973,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
runOnUiThread(() -> {
Bundle b = new Bundle();
b.putString(Helper.ARG_SHARE_URL, url[0]);
- b.putString(Helper.ARG_SHARE_URL_MEDIA, finalImage);
+ if (fetchSharedMedia) {
+ b.putString(Helper.ARG_SHARE_URL_MEDIA, finalImage);
+ }
b.putString(Helper.ARG_SHARE_TITLE, finalTitle);
b.putString(Helper.ARG_SHARE_DESCRIPTION, finalDescription);
b.putString(Helper.ARG_SHARE_SUBJECT, sharedSubject);
@@ -1029,6 +1055,17 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
Matcher matcherLink = null;
matcherLink = link.matcher(url);
if (matcherLink.find()) {
+ if (currentAccount == null) {
+ SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(BaseMainActivity.this);
+ if (currentToken == null || currentToken.trim().isEmpty()) {
+ currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
+ }
+ try {
+ currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
+ }
if (matcherLink.group(3) != null && Objects.requireNonNull(matcherLink.group(3)).length() > 0) { //It's a toot
CrossActionHelper.fetchRemoteStatus(BaseMainActivity.this, currentAccount, url, new CrossActionHelper.Callback() {
@Override
diff --git a/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java b/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java
index 6cbbe4fda..63257fedf 100644
--- a/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java
@@ -31,9 +31,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList;
import app.fedilab.android.R;
-import app.fedilab.android.client.entities.api.AdminAccount;
-import app.fedilab.android.client.entities.api.AdminReport;
import app.fedilab.android.client.entities.api.Status;
+import app.fedilab.android.client.entities.api.admin.AdminAccount;
+import app.fedilab.android.client.entities.api.admin.AdminReport;
import app.fedilab.android.databinding.ActivityAdminReportBinding;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.ThemeHelper;
@@ -221,7 +221,7 @@ public class AccountReportActivity extends BaseActivity {
binding.email.setVisibility(View.GONE);
binding.emailLabel.setVisibility(View.GONE);
}
- if (accountAdmin.ip == null || accountAdmin.ip.ip.trim().equals("")) {
+ if (accountAdmin.ip == null || accountAdmin.ip.trim().equals("")) {
binding.recentIp.setVisibility(View.GONE);
binding.recentIpLabel.setVisibility(View.GONE);
}
@@ -243,7 +243,7 @@ public class AccountReportActivity extends BaseActivity {
binding.emailUser.setVisibility(View.VISIBLE);
binding.commentLabel.setVisibility(View.VISIBLE);
binding.comment.setVisibility(View.VISIBLE);
- binding.recentIp.setText(accountAdmin.ip != null ? accountAdmin.ip.ip : "");
+ binding.recentIp.setText(accountAdmin.ip != null ? accountAdmin.ip : "");
binding.disable.setVisibility(View.VISIBLE);
binding.suspend.setVisibility(View.VISIBLE);
} else {
@@ -260,18 +260,9 @@ public class AccountReportActivity extends BaseActivity {
}
if (accountAdmin.role != null) {
- switch (accountAdmin.role) {
- case "user":
- binding.permissions.setText(getString(R.string.user));
- break;
- case "moderator":
- binding.permissions.setText(getString(R.string.moderator));
- break;
- case "admin":
- binding.permissions.setText(getString(R.string.administrator));
- break;
- }
- if (accountAdmin.role.equals("admin") || accountAdmin.role.equals("moderator")) {
+ binding.permissions.setText(AdminAccount.permissions.get(accountAdmin.role.permissions));
+ binding.permissions.setText(getString(R.string.user));
+ if (accountAdmin.role.permissions == 1 || accountAdmin.role.permissions == 400) {
binding.warn.setVisibility(View.GONE);
binding.suspend.setVisibility(View.GONE);
binding.silence.setVisibility(View.GONE);
diff --git a/app/src/main/java/app/fedilab/android/activities/ActionActivity.java b/app/src/main/java/app/fedilab/android/activities/ActionActivity.java
index 7ff2e7b43..0088f7c37 100644
--- a/app/src/main/java/app/fedilab/android/activities/ActionActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ActionActivity.java
@@ -29,6 +29,7 @@ import app.fedilab.android.databinding.ActivityActionsBinding;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonAccount;
+import app.fedilab.android.ui.fragment.timeline.FragmentMastodonDomainBlock;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonTimeline;
public class ActionActivity extends BaseActivity {
@@ -37,6 +38,7 @@ public class ActionActivity extends BaseActivity {
private boolean canGoBack;
private FragmentMastodonTimeline fragmentMastodonTimeline;
private FragmentMastodonAccount fragmentMastodonAccount;
+ private FragmentMastodonDomainBlock fragmentMastodonDomainBlock;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -54,6 +56,7 @@ public class ActionActivity extends BaseActivity {
binding.bookmarks.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BOOKMARK_TIMELINE));
binding.muted.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE));
binding.blocked.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_TIMELINE));
+ binding.domainBlock.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_DOMAIN_TIMELINE));
}
private void displayTimeline(Timeline.TimeLineEnum type) {
@@ -73,6 +76,15 @@ public class ActionActivity extends BaseActivity {
fragmentTransaction.commit();
});
+ } else if (type == Timeline.TimeLineEnum.BLOCKED_DOMAIN_TIMELINE) {
+ ThemeHelper.slideViewsToLeft(binding.buttonContainer, binding.fragmentContainer, () -> {
+ fragmentMastodonDomainBlock = new FragmentMastodonDomainBlock();
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ FragmentTransaction fragmentTransaction =
+ fragmentManager.beginTransaction();
+ fragmentTransaction.replace(R.id.fragment_container, fragmentMastodonDomainBlock);
+ fragmentTransaction.commit();
+ });
} else {
ThemeHelper.slideViewsToLeft(binding.buttonContainer, binding.fragmentContainer, () -> {
@@ -102,6 +114,9 @@ public class ActionActivity extends BaseActivity {
case BOOKMARK_TIMELINE:
setTitle(R.string.bookmarks);
break;
+ case BLOCKED_DOMAIN_TIMELINE:
+ setTitle(R.string.blocked_domains);
+ break;
}
}
@@ -116,6 +131,9 @@ public class ActionActivity extends BaseActivity {
if (fragmentMastodonAccount != null) {
fragmentMastodonAccount.onDestroyView();
}
+ if (fragmentMastodonDomainBlock != null) {
+ fragmentMastodonDomainBlock.onDestroyView();
+ }
});
setTitle(R.string.interactions);
} else {
diff --git a/app/src/main/java/app/fedilab/android/activities/CacheActivity.java b/app/src/main/java/app/fedilab/android/activities/CacheActivity.java
index 124c78009..19cc67d45 100644
--- a/app/src/main/java/app/fedilab/android/activities/CacheActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/CacheActivity.java
@@ -143,7 +143,11 @@ public class CacheActivity extends BaseActivity {
dialogRestart.dismiss();
Helper.restart(CacheActivity.this);
});
- restartBuilder.create().show();
+ AlertDialog alertDialog = restartBuilder.create();
+ if (!isFinishing()) {
+ alertDialog.show();
+ }
+
}));