mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2024-12-23 01:00:04 +02:00
Fix issue #93 - Add about page
This commit is contained in:
parent
35bfc79c21
commit
568484554a
10 changed files with 448 additions and 13 deletions
|
@ -9,8 +9,8 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 31
|
targetSdk 31
|
||||||
versionCode 1
|
versionCode 13
|
||||||
versionName "1.0"
|
versionName "beta-13"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,11 @@
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/reorder_timelines"
|
android:label="@string/reorder_timelines"
|
||||||
android:theme="@style/AppThemeBar" />
|
android:theme="@style/AppThemeBar" />
|
||||||
|
<activity
|
||||||
|
android:name=".activities.AboutActivity"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
android:label="@string/action_about"
|
||||||
|
android:theme="@style/AppThemeBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.ActionActivity"
|
android:name=".activities.ActionActivity"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
|
|
@ -77,6 +77,7 @@ import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import app.fedilab.android.activities.AboutActivity;
|
||||||
import app.fedilab.android.activities.ActionActivity;
|
import app.fedilab.android.activities.ActionActivity;
|
||||||
import app.fedilab.android.activities.AdminActionActivity;
|
import app.fedilab.android.activities.AdminActionActivity;
|
||||||
import app.fedilab.android.activities.BaseActivity;
|
import app.fedilab.android.activities.BaseActivity;
|
||||||
|
@ -341,6 +342,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
||||||
} else if (id == R.id.nav_administration) {
|
} else if (id == R.id.nav_administration) {
|
||||||
Intent intent = new Intent(this, AdminActionActivity.class);
|
Intent intent = new Intent(this, AdminActionActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
} else if (id == R.id.nav_about) {
|
||||||
|
Intent intent = new Intent(this, AboutActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
binding.drawerLayout.close();
|
binding.drawerLayout.close();
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,139 @@
|
||||||
|
package app.fedilab.android.activities;
|
||||||
|
/* 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 <http://www.gnu.org/licenses>. */
|
||||||
|
|
||||||
|
|
||||||
|
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<String> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -103,15 +103,15 @@ public interface MastodonAdminService {
|
||||||
@Path("account_id") String account_id
|
@Path("account_id") String account_id
|
||||||
);
|
);
|
||||||
|
|
||||||
@FormUrlEncoded
|
|
||||||
@GET("admin/reports")
|
@GET("admin/reports")
|
||||||
Call<List<AdminReport>> getReports(
|
Call<List<AdminReport>> getReports(
|
||||||
@Header("Authorization") String token,
|
@Header("Authorization") String token,
|
||||||
@Field("resolved") Boolean resolved,
|
@Query("resolved") Boolean resolved,
|
||||||
@Field("account_id") String account_id,
|
@Query("account_id") String account_id,
|
||||||
@Field("target_account_id") String target_account_id,
|
@Query("target_account_id") String target_account_id,
|
||||||
@Field("max_id") String max_id,
|
@Query("max_id") String max_id,
|
||||||
@Field("limit") int limit
|
@Query("limit") int limit
|
||||||
);
|
);
|
||||||
|
|
||||||
@FormUrlEncoded
|
@FormUrlEncoded
|
||||||
|
|
|
@ -354,6 +354,52 @@ public class CrossActionHelper {
|
||||||
}).start();
|
}).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<Results> resultsCall = mastodonSearchService.search(MainActivity.currentToken, acct, null, "accounts", false, true, false, 0, null, null, 1);
|
||||||
|
Results results = null;
|
||||||
|
if (resultsCall != null) {
|
||||||
|
try {
|
||||||
|
Response<Results> 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 {
|
public enum TypeOfCrossAction {
|
||||||
FOLLOW_ACTION,
|
FOLLOW_ACTION,
|
||||||
UNFOLLOW_ACTION,
|
UNFOLLOW_ACTION,
|
||||||
|
|
|
@ -32,6 +32,7 @@ import java.util.List;
|
||||||
|
|
||||||
import app.fedilab.android.BaseMainActivity;
|
import app.fedilab.android.BaseMainActivity;
|
||||||
import app.fedilab.android.R;
|
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.AdminReport;
|
||||||
import app.fedilab.android.client.entities.api.AdminReports;
|
import app.fedilab.android.client.entities.api.AdminReports;
|
||||||
import app.fedilab.android.databinding.FragmentPaginationBinding;
|
import app.fedilab.android.databinding.FragmentPaginationBinding;
|
||||||
|
@ -81,7 +82,7 @@ public class FragmentAdminReport extends Fragment {
|
||||||
binding.recyclerView.setVisibility(View.GONE);
|
binding.recyclerView.setVisibility(View.GONE);
|
||||||
flagLoading = false;
|
flagLoading = false;
|
||||||
adminVM.getReports(
|
adminVM.getReports(
|
||||||
BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, null)
|
BaseMainActivity.currentInstance, BaseMainActivity.currentToken, AdminActionActivity.resolved, null, null, null)
|
||||||
.observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
|
.observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
|
||||||
return binding.getRoot();
|
return binding.getRoot();
|
||||||
}
|
}
|
||||||
|
@ -108,7 +109,7 @@ public class FragmentAdminReport extends Fragment {
|
||||||
max_id = null;
|
max_id = null;
|
||||||
flagLoading = false;
|
flagLoading = false;
|
||||||
adminVM.getReports(
|
adminVM.getReports(
|
||||||
BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, null)
|
BaseMainActivity.currentInstance, BaseMainActivity.currentToken, AdminActionActivity.resolved, null, null, null)
|
||||||
.observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
|
.observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -161,7 +162,7 @@ public class FragmentAdminReport extends Fragment {
|
||||||
flagLoading = true;
|
flagLoading = true;
|
||||||
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
||||||
adminVM.getReports(
|
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));
|
.observe(getViewLifecycleOwner(), adminReports1 -> dealWithPagination(adminReports1));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
237
app/src/main/res/layout/activity_about.xml
Normal file
237
app/src/main/res/layout/activity_about.xml
Normal file
|
@ -0,0 +1,237 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?><!--
|
||||||
|
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 <http://www.gnu.org/licenses>.
|
||||||
|
-->
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<!-- About app name -->
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
<!-- About version -->
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/about_version"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<!-- About developer -->
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/developer_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="@string/about_developer"
|
||||||
|
android:textColor="?colorAccent"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:id="@+id/acccount_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/account_pp"
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="60dp"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:contentDescription="@string/profile_picture" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/account_dn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/account_un"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
|
android:id="@+id/account_follow"
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_marginStart="6dp"
|
||||||
|
android:layout_marginTop="6dp"
|
||||||
|
android:contentDescription="@string/make_an_action"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/avatar_container"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/banner_container"
|
||||||
|
tools:src="@drawable/ic_baseline_person_add_24"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/txt_developers"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/about_support"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="@string/support_the_app_on_liberapay"
|
||||||
|
android:textColor="@color/cyanea_accent_dark_reference"
|
||||||
|
app:strokeColor="@color/cyanea_accent_dark_reference" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/about_support_paypal"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="PayPal"
|
||||||
|
android:textColor="@color/cyanea_accent_dark_reference"
|
||||||
|
app:strokeColor="@color/cyanea_accent_dark_reference"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/about_website"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text="https://fedilab.app"
|
||||||
|
android:textSize="16sp"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
<!-- About license -->
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="5dp">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/about_license"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/about_license"
|
||||||
|
style="@style/MyOutlinedButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="3"
|
||||||
|
android:text="@string/about_license_action" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
|
<!-- About license -->
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="5dp">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/about_code"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/about_code"
|
||||||
|
style="@style/MyOutlinedButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="3"
|
||||||
|
android:text="@string/about_code_action" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- About The Kinrar\'s API -->
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="5dp">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/about_thekinrar"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/about_thekinrar"
|
||||||
|
style="@style/MyOutlinedButton"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="3"
|
||||||
|
android:text="@string/about_thekinrar_action" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
|
||||||
|
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
|
</ScrollView>
|
|
@ -46,5 +46,9 @@
|
||||||
android:id="@+id/nav_settings"
|
android:id="@+id/nav_settings"
|
||||||
android:icon="@drawable/ic_baseline_settings_24"
|
android:icon="@drawable/ic_baseline_settings_24"
|
||||||
android:title="@string/settings" />
|
android:title="@string/settings" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_about"
|
||||||
|
android:icon="@drawable/ic_baseline_info_24"
|
||||||
|
android:title="@string/action_about" />
|
||||||
</group>
|
</group>
|
||||||
</menu>
|
</menu>
|
|
@ -203,7 +203,7 @@
|
||||||
<string name="about_license">License: </string>
|
<string name="about_license">License: </string>
|
||||||
<string name="about_license_action">GNU GPL V3</string>
|
<string name="about_license_action">GNU GPL V3</string>
|
||||||
<string name="about_code">Source code: </string>
|
<string name="about_code">Source code: </string>
|
||||||
<string name="about_code_action" translatable="false">FramaGit</string>
|
<string name="about_code_action" translatable="false">CodeBerg</string>
|
||||||
<string name="about_yandex">Translation of toots:</string>
|
<string name="about_yandex">Translation of toots:</string>
|
||||||
<string name="about_yandex_action" translatable="false">Powered by Yandex.Translate</string>
|
<string name="about_yandex_action" translatable="false">Powered by Yandex.Translate</string>
|
||||||
<string name="about_thekinrar">Search instances:</string>
|
<string name="about_thekinrar">Search instances:</string>
|
||||||
|
|
Loading…
Reference in a new issue