Commit eb276ba8 authored by 0xd9a's avatar 0xd9a
Browse files

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
parent c41caddc
Loading
Loading
Loading
Loading
+29 −41
Original line number Diff line number Diff line
@@ -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,19 +625,12 @@ 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) {
    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) {
@@ -657,14 +651,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
        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;
            }
            return true;
        });
        popup.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() {
+60 −0
Original line number Diff line number Diff line
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;
            });
        }

    }

}
+9 −0
Original line number Diff line number Diff line
@@ -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 -> {
+8 −8
Original line number Diff line number Diff line
@@ -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(() -> {
+10 −0
Original line number Diff line number Diff line
<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>
Loading