Update navigation drawer header

- proxy setting moved to Network preferences page
- 'Instance information' is now a nav drawer item
- A 'Manage accounts' button to open accounts list
This commit is contained in:
0xd9a 2025-04-05 03:27:18 +05:30
parent c41caddcf5
commit eb276ba874
14 changed files with 272 additions and 172 deletions

View file

@ -72,6 +72,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.widget.TooltipCompat;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.GravityCompat;
@ -461,7 +462,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
public static void manageDrawerMenu(Activity activity, NavigationView navigationView, NavHeaderMainBinding headerMainBinding) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(activity);
if (headerMenuOpen) {
headerMainBinding.ownerAccounts.setImageResource(R.drawable.ic_baseline_arrow_drop_up_24);
headerMainBinding.ownerAccounts.setIconResource(R.drawable.ic_baseline_arrow_drop_up_24);
new Thread(() -> {
try {
List<BaseAccount> accounts = new Account(activity).getOtherAccounts();
@ -592,7 +593,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
Intent mainActivity = new Intent(activity, MainActivity.class);
activity.startActivity(mainActivity);
activity.finish();
headerMainBinding.ownerAccounts.setImageResource(R.drawable.ic_baseline_arrow_drop_down_24);
headerMainBinding.ownerAccounts.setIconResource(R.drawable.ic_accounts);
return true;
}
return false;
@ -624,47 +625,32 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} else if (Helper.getCurrentAccount(activity).peertube_account != null) {
navigationView.inflateMenu(R.menu.activity_main_drawer_peertube);
}
headerMainBinding.ownerAccounts.setImageResource(R.drawable.ic_baseline_arrow_drop_down_24);
headerMainBinding.ownerAccounts.setIconResource(R.drawable.ic_accounts);
headerMenuOpen = false;
}
}
public static void headerOptionInfoClick(Activity activity, NavHeaderMainBinding headerMainBinding, FragmentManager fragmentManager) {
PopupMenu popup = new PopupMenu(activity, headerMainBinding.headerOptionInfo);
popup.getMenuInflater()
.inflate(R.menu.main, popup.getMenu());
popup.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.action_logout_account) {
AlertDialog.Builder alt_bld = new MaterialAlertDialogBuilder(activity);
alt_bld.setTitle(R.string.action_logout);
if (Helper.getCurrentAccount(activity).mastodon_account != null && Helper.getCurrentAccount(activity).instance != null) {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, Helper.getCurrentAccount(activity).mastodon_account.username, Helper.getCurrentAccount(activity).instance));
} else if (Helper.getCurrentAccount(activity).peertube_account != null && Helper.getCurrentAccount(activity).instance != null) {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, Helper.getCurrentAccount(activity).peertube_account.getUsername(), Helper.getCurrentAccount(activity).instance));
} else {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, "", ""));
}
alt_bld.setPositiveButton(R.string.action_logout, (dialog, id) -> {
dialog.dismiss();
try {
Helper.removeAccount(activity);
} catch (DBException e) {
e.printStackTrace();
}
});
alt_bld.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
AlertDialog alert = alt_bld.create();
alert.show();
return true;
} else if (itemId == R.id.action_proxy) {
(new ProxyActivity()).show(fragmentManager, null);
return true;
public static void headerLogoutClick(Activity activity, NavHeaderMainBinding headerMainBinding, FragmentManager fragmentManager) {
AlertDialog.Builder alt_bld = new MaterialAlertDialogBuilder(activity);
alt_bld.setTitle(R.string.action_logout);
if (Helper.getCurrentAccount(activity).mastodon_account != null && Helper.getCurrentAccount(activity).instance != null) {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, Helper.getCurrentAccount(activity).mastodon_account.username, Helper.getCurrentAccount(activity).instance));
} else if (Helper.getCurrentAccount(activity).peertube_account != null && Helper.getCurrentAccount(activity).instance != null) {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, Helper.getCurrentAccount(activity).peertube_account.getUsername(), Helper.getCurrentAccount(activity).instance));
} else {
alt_bld.setMessage(activity.getString(R.string.logout_account_confirmation, "", ""));
}
alt_bld.setPositiveButton(R.string.action_logout, (dialog, id) -> {
dialog.dismiss();
try {
Helper.removeAccount(activity);
} catch (DBException e) {
e.printStackTrace();
}
return true;
});
popup.show();
alt_bld.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
AlertDialog alert = alt_bld.create();
alert.show();
}
/**
@ -1464,12 +1450,13 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
startActivity(intent);
} else if (id == R.id.nav_about_instance) {
(new InstanceActivity()).show(getSupportFragmentManager(), null);
} else if (id == R.id.nav_instance_info) {
(new InstanceHealthActivity()).show(getSupportFragmentManager(), null);
}
binding.drawerLayout.close();
return false;
});
headerMainBinding.instanceInfo.setOnClickListener(v -> (new InstanceHealthActivity()).show(getSupportFragmentManager(), null));
headerMainBinding.accountProfilePicture.setOnClickListener(v -> {
Intent intent = new Intent(BaseMainActivity.this, ProfileActivity.class);
Bundle args = new Bundle();
@ -1483,13 +1470,14 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
});
headerMainBinding.accountAcc.setOnClickListener(v -> headerMainBinding.changeAccount.callOnClick());
headerMainBinding.changeAccount.setOnClickListener(v -> {
TooltipCompat.setTooltipText(headerMainBinding.ownerAccounts, getString(R.string.manage_accounts));
headerMainBinding.ownerAccounts.setOnClickListener(v -> {
headerMenuOpen = !headerMenuOpen;
manageDrawerMenu(BaseMainActivity.this, binding.navView, headerMainBinding);
});
headerMainBinding.headerOptionInfo.setOnClickListener(v -> headerOptionInfoClick(BaseMainActivity.this, headerMainBinding, getSupportFragmentManager()));
TooltipCompat.setTooltipText(headerMainBinding.headerLogout,getString(R.string.action_logout));
headerMainBinding.headerLogout.setOnClickListener(v -> headerLogoutClick(BaseMainActivity.this, headerMainBinding, getSupportFragmentManager()));
//Toolbar search
binding.toolbarSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

View file

@ -0,0 +1,60 @@
package app.fedilab.android.mastodon.ui.fragment.settings;
/* 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.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import java.io.IOException;
import app.fedilab.android.R;
import app.fedilab.android.mastodon.activities.ProxyActivity;
import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.ZipHelper;
import es.dmoral.toasty.Toasty;
public class FragmentNetworkSettings extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
addPreferencesFromResource(R.xml.pref_network);
Preference pref_proxy = findPreference(getString(R.string.pref_key_proxy));
if (pref_proxy != null) {
pref_proxy.setOnPreferenceClickListener(preference -> {
(new ProxyActivity()).show(getParentFragmentManager(), null);
return false;
});
}
}
}

View file

@ -138,6 +138,15 @@ public class FragmentSettingsCategories extends PreferenceFragmentCompat {
});
}
Preference pref_category_key_network = findPreference(getString(R.string.pref_category_key_network));
if (pref_category_key_network != null) {
pref_category_key_network.setOnPreferenceClickListener(preference -> {
NavController navController = Navigation.findNavController(requireActivity(), R.id.fragment_container);
navController.navigate(FragmentSettingsCategoriesDirections.Companion.categoriesToNetwork());
return false;
});
}
Preference pref_category_key_extra_features = findPreference(getString(R.string.pref_category_key_extra_features));
if (pref_category_key_extra_features != null) {
pref_category_key_extra_features.setOnPreferenceClickListener(preference -> {

View file

@ -20,7 +20,7 @@ import static app.fedilab.android.BaseMainActivity.currentToken;
import static app.fedilab.android.BaseMainActivity.currentUserID;
import static app.fedilab.android.BaseMainActivity.fetchRecentAccounts;
import static app.fedilab.android.BaseMainActivity.headerMenuOpen;
import static app.fedilab.android.BaseMainActivity.headerOptionInfoClick;
import static app.fedilab.android.BaseMainActivity.headerLogoutClick;
import static app.fedilab.android.BaseMainActivity.mamageNewIntent;
import static app.fedilab.android.BaseMainActivity.manageDrawerMenu;
import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_ID;
@ -328,8 +328,8 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity {
headerMainBinding.accountAcc.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale);
app.fedilab.android.mastodon.helper.Helper.loadPP(PeertubeMainActivity.this, headerMainBinding.accountProfilePicture, app.fedilab.android.mastodon.helper.Helper.getCurrentAccount(PeertubeMainActivity.this), false);
headerMainBinding.backgroundImage.setAlpha(0.5f);
headerMainBinding.accountAcc.setOnClickListener(v -> headerMainBinding.changeAccount.callOnClick());
headerMainBinding.changeAccount.setOnClickListener(v -> {
TooltipCompat.setTooltipText(headerMainBinding.ownerAccounts, getString(R.string.manage_accounts));
headerMainBinding.ownerAccounts.setOnClickListener(v -> {
headerMenuOpen = !headerMenuOpen;
manageDrawerMenu(PeertubeMainActivity.this, binding.drawerNavView, headerMainBinding);
@ -345,9 +345,7 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity {
headerMainBinding.accountAcc.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale);
app.fedilab.android.mastodon.helper.Helper.loadPP(PeertubeMainActivity.this, headerMainBinding.accountProfilePicture, app.fedilab.android.mastodon.helper.Helper.getCurrentAccount(PeertubeMainActivity.this), false);
headerMainBinding.backgroundImage.setAlpha(0.5f);
headerMainBinding.accountAcc.setOnClickListener(v -> headerMainBinding.changeAccount.callOnClick());
headerMainBinding.changeAccount.setOnClickListener(v -> {
headerMainBinding.ownerAccounts.setOnClickListener(v -> {
headerMenuOpen = !headerMenuOpen;
manageDrawerMenu(PeertubeMainActivity.this, binding.drawerNavView, headerMainBinding);
});
@ -358,7 +356,8 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity {
};
mainHandler.post(myRunnable);
}).start();
headerMainBinding.instanceInfo.setVisibility(View.GONE);
View navInstanceInfo = binding.drawerNavView.findViewById(R.id.nav_instance_info);
binding.drawerNavView.removeView(navInstanceInfo);
binding.drawerNavView.addHeaderView(headerMainBinding.getRoot());
binding.drawerNavView.setNavigationItemSelectedListener(item -> {
if (item.getItemId() == R.id.action_settings) {
@ -414,7 +413,8 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity {
binding.drawerLayout.close();
return false;
});
headerMainBinding.headerOptionInfo.setOnClickListener(v -> headerOptionInfoClick(PeertubeMainActivity.this, headerMainBinding, getSupportFragmentManager()));
TooltipCompat.setTooltipText(headerMainBinding.headerLogout, getString(R.string.action_logout));
headerMainBinding.headerLogout.setOnClickListener(v -> headerLogoutClick(PeertubeMainActivity.this, headerMainBinding, getSupportFragmentManager()));
fetchRecentAccounts(PeertubeMainActivity.this, headerMainBinding);
} else {
new Thread(() -> {

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5s-3,1.34 -3,3 1.34,3 3,3zM8,11c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5L1,18c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-1.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 0.02,0.01 0.03,0.03 0.04,0.04 1.14,0.83 1.93,1.94 1.93,3.41L17,18c0,0.35 -0.07,0.69 -0.18,1L22,19c0.55,0 1,-0.45 1,-1v-1.5c0,-2.33 -4.67,-3.5 -7,-3.5z" />
</vector>

View file

@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="?colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M5,5h6c0.55,0 1,-0.45 1,-1v0c0,-0.55 -0.45,-1 -1,-1H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h6c0.55,0 1,-0.45 1,-1v0c0,-0.55 -0.45,-1 -1,-1H5V5z" />
<path
android:fillColor="@android:color/white"
android:pathData="M20.65,11.65l-2.79,-2.79C17.54,8.54 17,8.76 17,9.21V11h-7c-0.55,0 -1,0.45 -1,1v0c0,0.55 0.45,1 1,1h7v1.79c0,0.45 0.54,0.67 0.85,0.35l2.79,-2.79C20.84,12.16 20.84,11.84 20.65,11.65z" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M2.06,10.06c0.51,0.51 1.32,0.56 1.87,0.1 4.67,-3.84 11.45,-3.84 16.13,-0.01 0.56,0.46 1.38,0.42 1.89,-0.09 0.59,-0.59 0.55,-1.57 -0.1,-2.1 -5.71,-4.67 -13.97,-4.67 -19.69,0 -0.65,0.52 -0.7,1.5 -0.1,2.1zM9.82,17.82l1.47,1.47c0.39,0.39 1.02,0.39 1.41,0l1.47,-1.47c0.47,-0.47 0.37,-1.28 -0.23,-1.59 -1.22,-0.63 -2.68,-0.63 -3.91,0 -0.57,0.31 -0.68,1.12 -0.21,1.59zM6.09,14.09c0.49,0.49 1.26,0.54 1.83,0.13 2.44,-1.73 5.72,-1.73 8.16,0 0.57,0.4 1.34,0.36 1.83,-0.13l0.01,-0.01c0.6,-0.6 0.56,-1.62 -0.13,-2.11 -3.44,-2.49 -8.13,-2.49 -11.58,0 -0.69,0.5 -0.73,1.51 -0.12,2.12z" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12.65,10C11.7,7.31 8.9,5.5 5.77,6.12c-2.29,0.46 -4.15,2.29 -4.63,4.58C0.32,14.57 3.26,18 7,18c2.61,0 4.83,-1.67 5.65,-4H17v2c0,1.1 0.9,2 2,2s2,-0.9 2,-2v-2c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2h-8.35zM7,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z" />
</vector>

View file

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout 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="@dimen/nav_header_height">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/background_image"
android:layout_width="match_parent"
@ -13,135 +12,93 @@
android:minHeight="@dimen/nav_header_height"
android:scaleType="centerCrop"
tools:src="@tools:sample/backgrounds/scenic" />
<com.google.android.material.button.MaterialButton
android:id="@+id/header_option_info"
style="@style/Widget.Material3.Button.Icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:id="@+id/header_logout"
style="@style/Widget.Material3.Button.IconButton.Filled"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:layout_margin="12dp"
android:contentDescription="@string/action_logout"
app:icon="@drawable/ic_logout"
app:iconGravity="textStart"
app:iconPadding="0dp"
android:padding="0dp"
android:contentDescription="@string/information"
app:icon="@drawable/ic_baseline_more_vert_24" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/account_profile_picture"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="12dp"
android:contentDescription="@string/profile_picture"
android:scaleType="fitCenter"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/avatars" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="@color/transparent"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="5dp"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="5dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/other_account1"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="12dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_profile_picture"
app:layout_constraintTop_toTopOf="@id/account_profile_picture"
tools:src="@tools:sample/avatars"
tools:visibility="visible" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/other_account2"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="12dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/other_account1"
app:layout_constraintTop_toTopOf="@id/account_profile_picture"
tools:src="@tools:sample/avatars"
tools:visibility="visible" />
<ImageView
android:id="@+id/account_profile_picture"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center_vertical"
android:contentDescription="@string/profile_picture"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:scaleType="fitCenter"
tools:src="@tools:sample/avatars" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/account_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:ellipsize="end"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
app:layout_constraintEnd_toStartOf="@id/owner_accounts"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/account_profile_picture"
tools:text="@tools:sample/full_names" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/account_acc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:ellipsize="end"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.Material3.BodySmall"
app:layout_constraintEnd_toStartOf="@id/owner_accounts"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/account_name"
tools:text="@tools:sample/full_names" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/other_account1"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="bottom|end"
android:scaleType="fitCenter"
android:visibility="gone"
tools:src="@tools:sample/avatars"
tools:visibility="visible" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.IconButton"
android:id="@+id/owner_accounts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:contentDescription="@string/manage_accounts"
app:layout_constraintTop_toTopOf="@id/account_name"
app:layout_constraintBottom_toBottomOf="@id/account_acc"
app:layout_constraintEnd_toEndOf="parent"
app:icon="@drawable/ic_accounts" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/other_account2"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="bottom|end"
android:layout_marginStart="20dp"
android:scaleType="fitCenter"
android:visibility="gone"
tools:src="@tools:sample/avatars"
tools:visibility="visible" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/change_account"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/account_name"
style="@style/TextAppearance.Material3.TitleSmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:singleLine="true"
tools:text="@tools:sample/full_names" />
<ImageView
android:id="@+id/owner_accounts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:contentDescription="@string/open_menu"
android:gravity="center_vertical"
android:src="@drawable/ic_baseline_arrow_drop_down_24"
app:tint="?colorControlNormal" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/instance_info_container"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/account_acc"
style="@style/TextAppearance.Material3.TitleSmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true"
android:textSize="16sp"
tools:text="@tools:sample/full_names" />
<ImageView
android:id="@+id/instance_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:contentDescription="@string/information"
android:src="@drawable/ic_baseline_info_24"
app:tint="?colorControlNormal" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -73,6 +73,11 @@
android:icon="@drawable/ic_info_outline_white_24dp"
android:title="@string/action_about_instance"
android:visible="true" />
<item
android:id="@+id/nav_instance_info"
android:icon="@drawable/ic_info_outline_white_24dp"
android:title="@string/instance_information"
android:visible="true" />
</group>
</menu>

View file

@ -76,6 +76,14 @@
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit" />
<action
android:id="@+id/categories_to_network"
app:destination="@id/FragmentNetworkSettings"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit" />
<action
android:id="@+id/categories_to_language"
app:destination="@id/FragmentLanguageSettings"
@ -133,6 +141,11 @@
android:name="app.fedilab.android.mastodon.ui.fragment.settings.FragmentThemingSettings"
android:label="@string/theming" />
<fragment
android:id="@+id/FragmentNetworkSettings"
android:name="app.fedilab.android.mastodon.ui.fragment.settings.FragmentNetworkSettings"
android:label="@string/network" />
<fragment
android:id="@+id/FragmentLanguageSettings"
android:name="app.fedilab.android.mastodon.ui.fragment.settings.FragmentLanguageSettings"

View file

@ -369,6 +369,7 @@
<string name="peertube_instance">Peertube instance</string>
<string name="set_display_emoji">Use Emoji One</string>
<string name="information">Information</string>
<string name="instance_information">Instance information</string>
<string name="set_display_card">Display previews in all messages</string>
<string name="account_id_clipbloard">The account id has been copied in the clipboard!</string>
<string name="set_change_locale">Change the language</string>
@ -627,6 +628,7 @@
<string name="export_theme">Export the theme</string>
<string name="export_theme_title">Tap here to export the current theme</string>
<string name="theme_file_error">An error occurred when selecting the theme file</string>
<string name="network">Network</string>
<string name="user_count">User count</string>
<string name="status_count">Status count</string>
<string name="instance_count">Instance count</string>
@ -1792,10 +1794,13 @@
<string name="pref_category_key_pixelfed" translatable="false">pref_category_key_pixelfed</string>
<string name="pref_category_key_home_cache" translatable="false">pref_category_key_home_cache</string>
<string name="pref_category_key_theming" translatable="false">pref_category_theming</string>
<string name="pref_category_key_network" translatable="false">pref_category_network</string>
<string name="pref_category_key_administration" translatable="false">pref_category_administration</string>
<string name="pref_category_key_languages" translatable="false">pref_category_languages</string>
<string name="pref_category_key_extra_features" translatable="false">pref_category_key_extra_features</string>
<string name="pref_key_proxy" translatable="false">pref_key_proxy</string>
<string name="pref_export_settings" translatable="false">pref_export_settings</string>
<string name="pref_import_settings" translatable="false">pref_import_settings</string>
<string name="export_settings">Export settings</string>

View file

@ -67,6 +67,13 @@
app:icon="@drawable/ic_theming"
app:key="@string/pref_category_key_theming" />
<Preference
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/network"
app:icon="@drawable/ic_network_prefs"
app:key="@string/pref_category_key_network" />
<!--
<Preference
android:layout_width="match_parent"

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/proxy_set"
app:icon="@drawable/ic_proxy"
app:key="@string/pref_key_proxy" />
</PreferenceScreen>