From 568484554a1a81a06b293d08552e9ca7c456cbad Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 28 May 2022 19:05:44 +0200 Subject: [PATCH] Fix issue #93 - Add about page --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 6 +- .../app/fedilab/android/BaseMainActivity.java | 4 + .../android/activities/AboutActivity.java | 139 ++++++++++ .../endpoints/MastodonAdminService.java | 12 +- .../android/helper/CrossActionHelper.java | 46 ++++ .../fragment/admin/FragmentAdminReport.java | 7 +- app/src/main/res/layout/activity_about.xml | 237 ++++++++++++++++++ .../main/res/menu/activity_main_drawer.xml | 4 + app/src/main/res/values/strings.xml | 2 +- 10 files changed, 448 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/activities/AboutActivity.java create mode 100644 app/src/main/res/layout/activity_about.xml diff --git a/app/build.gradle b/app/build.gradle index e7ca274c9..ffbfa9201 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { defaultConfig { minSdk 21 targetSdk 31 - versionCode 1 - versionName "1.0" + versionCode 13 + versionName "beta-13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2194018b4..7e8520fb9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,7 +98,11 @@ android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/reorder_timelines" android:theme="@style/AppThemeBar" /> - + . */ + + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.MenuItem; +import android.view.View; + +import androidx.core.app.ActivityOptionsCompat; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.ViewModelProvider; + +import java.util.ArrayList; +import java.util.List; + +import app.fedilab.android.BuildConfig; +import app.fedilab.android.R; +import app.fedilab.android.client.entities.api.Account; +import app.fedilab.android.client.entities.api.Status; +import app.fedilab.android.databinding.ActivityAboutBinding; +import app.fedilab.android.helper.CrossActionHelper; +import app.fedilab.android.helper.Helper; +import app.fedilab.android.helper.MastodonHelper; +import app.fedilab.android.helper.ThemeHelper; +import app.fedilab.android.viewmodel.mastodon.AccountsVM; + + +public class AboutActivity extends BaseActivity { + + + private ActivityAboutBinding binding; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ThemeHelper.applyThemeBar(this); + binding = ActivityAboutBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary))); + } + + try { + PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); + String version = pInfo.versionName; + binding.aboutVersion.setText(getResources().getString(R.string.about_vesrion, version)); + } catch (PackageManager.NameNotFoundException ignored) { + } + + binding.aboutCode.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://codeberg.org/tom79/Fedilab")); + binding.aboutThekinrar.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://instances.social/")); + binding.aboutLicense.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://www.gnu.org/licenses/quick-guide-gplv3.fr.html")); + binding.aboutSupport.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://liberapay.com/tom79")); + if (BuildConfig.DONATIONS) { + binding.aboutSupport.setVisibility(View.VISIBLE); + } else { + binding.aboutSupport.setVisibility(View.GONE); + } + binding.aboutSupportPaypal.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://www.paypal.me/Mastalab")); + + + if (BuildConfig.DONATIONS) { + binding.aboutSupportPaypal.setVisibility(View.VISIBLE); + } else { + binding.aboutSupportPaypal.setVisibility(View.GONE); + } + binding.aboutWebsite.setOnClickListener(v -> Helper.openBrowser(AboutActivity.this, "https://fedilab.app")); + CrossActionHelper.fetchRemoteAccount(AboutActivity.this, "@apps@toot.fedilab.app", new CrossActionHelper.Callback() { + @Override + public void federatedStatus(Status status) { + + } + + @Override + public void federatedAccount(Account account) { + if (account != null && account.username.equalsIgnoreCase("apps")) { + binding.developerTitle.setVisibility(View.VISIBLE); + binding.acccountContainer.setVisibility(View.VISIBLE); + MastodonHelper.loadPPMastodon(binding.accountPp, account); + binding.accountDn.setText(account.display_name); + binding.accountUn.setText(account.acct); + binding.accountPp.setOnClickListener(v -> { + Intent intent = new Intent(AboutActivity.this, ProfileActivity.class); + Bundle b = new Bundle(); + b.putSerializable(Helper.ARG_ACCOUNT, account); + intent.putExtras(b); + ActivityOptionsCompat options = ActivityOptionsCompat + .makeSceneTransitionAnimation(AboutActivity.this, binding.accountPp, getString(R.string.activity_porfile_pp)); + startActivity(intent, options.toBundle()); + }); + AccountsVM accountsVM = new ViewModelProvider(AboutActivity.this).get(AccountsVM.class); + List ids = new ArrayList<>(); + ids.add(account.id); + accountsVM.getRelationships(MainActivity.currentInstance, MainActivity.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) + .observe(AboutActivity.this, relationShip -> binding.accountFollow.setVisibility(View.GONE))); + } + } + }); + } + } + }); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } + + +} diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAdminService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAdminService.java index 746462db0..ac0a19b62 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAdminService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAdminService.java @@ -103,15 +103,15 @@ public interface MastodonAdminService { @Path("account_id") String account_id ); - @FormUrlEncoded + @GET("admin/reports") Call> getReports( @Header("Authorization") String token, - @Field("resolved") Boolean resolved, - @Field("account_id") String account_id, - @Field("target_account_id") String target_account_id, - @Field("max_id") String max_id, - @Field("limit") int limit + @Query("resolved") Boolean resolved, + @Query("account_id") String account_id, + @Query("target_account_id") String target_account_id, + @Query("max_id") String max_id, + @Query("limit") int limit ); @FormUrlEncoded 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 c1f5e4046..df9eb7818 100644 --- a/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java @@ -354,6 +354,52 @@ public class CrossActionHelper { }).start(); } + /** + * Fetch and federate the remote status + */ + public static void fetchRemoteAccount(@NonNull Context context, String acct, Callback callback) { + + + MastodonSearchService mastodonSearchService = init(context, MainActivity.currentInstance); + new Thread(() -> { + Call resultsCall = mastodonSearchService.search(MainActivity.currentToken, acct, null, "accounts", false, true, false, 0, null, null, 1); + Results results = null; + if (resultsCall != null) { + try { + Response resultsResponse = resultsCall.execute(); + if (resultsResponse.isSuccessful()) { + results = resultsResponse.body(); + if (results != null) { + if (results.statuses == null) { + results.statuses = new ArrayList<>(); + } else { + results.statuses = SpannableHelper.convertStatus(context, results.statuses); + } + if (results.accounts == null) { + results.accounts = new ArrayList<>(); + } + if (results.hashtags == null) { + results.hashtags = new ArrayList<>(); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + Handler mainHandler = new Handler(Looper.getMainLooper()); + Results finalResults = results; + Runnable myRunnable = () -> { + if (finalResults != null && finalResults.accounts != null && finalResults.accounts.size() > 0) { + callback.federatedAccount(finalResults.accounts.get(0)); + } + }; + mainHandler.post(myRunnable); + + }).start(); + } + + public enum TypeOfCrossAction { FOLLOW_ACTION, UNFOLLOW_ACTION, diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminReport.java b/app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminReport.java index 9bd9fd2eb..50744da2b 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminReport.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/admin/FragmentAdminReport.java @@ -32,6 +32,7 @@ import java.util.List; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; +import app.fedilab.android.activities.AdminActionActivity; import app.fedilab.android.client.entities.api.AdminReport; import app.fedilab.android.client.entities.api.AdminReports; import app.fedilab.android.databinding.FragmentPaginationBinding; @@ -81,7 +82,7 @@ public class FragmentAdminReport extends Fragment { binding.recyclerView.setVisibility(View.GONE); flagLoading = false; adminVM.getReports( - BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, null) + BaseMainActivity.currentInstance, BaseMainActivity.currentToken, AdminActionActivity.resolved, null, null, null) .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); return binding.getRoot(); } @@ -108,7 +109,7 @@ public class FragmentAdminReport extends Fragment { max_id = null; flagLoading = false; adminVM.getReports( - BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, null) + BaseMainActivity.currentInstance, BaseMainActivity.currentToken, AdminActionActivity.resolved, null, null, null) .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); }); @@ -161,7 +162,7 @@ public class FragmentAdminReport extends Fragment { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); adminVM.getReports( - BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, max_id) + BaseMainActivity.currentInstance, BaseMainActivity.currentToken, AdminActionActivity.resolved, null, null, max_id) .observe(getViewLifecycleOwner(), adminReports1 -> dealWithPagination(adminReports1)); } } else { diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 000000000..bd9f11acd --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index c37cf29b2..cdbc7e8e1 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -46,5 +46,9 @@ android:id="@+id/nav_settings" android:icon="@drawable/ic_baseline_settings_24" android:title="@string/settings" /> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 935512306..1f30006e9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,7 +203,7 @@ License: GNU GPL V3 Source code: - FramaGit + CodeBerg Translation of toots: Powered by Yandex.Translate Search instances: