mirror of
https://codeberg.org/gitnex/GitNex.git
synced 2023-12-13 20:50:18 +01:00
15a8340e5e
Potentially closes #1226 closes #1234 - Fix UI issues - Use FAB where needed instead of bottom sheet entries - Other fixes Update: added screen shots Co-authored-by: M M Arif <mmarif@swatian.com> Co-authored-by: qwerty287 <qwerty287@noreply.codeberg.org> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1259 Reviewed-by: qwerty287 <qwerty287@noreply.codeberg.org>
178 lines
5.4 KiB
Java
178 lines
5.4 KiB
Java
package org.mian.gitnex.fragments;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Typeface;
|
|
import android.os.Bundle;
|
|
import android.text.Html;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import androidx.fragment.app.FragmentStatePagerAdapter;
|
|
import androidx.viewpager.widget.ViewPager;
|
|
import com.google.android.material.progressindicator.LinearProgressIndicator;
|
|
import com.google.android.material.tabs.TabLayout;
|
|
import java.util.Locale;
|
|
import org.mian.gitnex.R;
|
|
import org.mian.gitnex.activities.BaseActivity;
|
|
import org.mian.gitnex.activities.MainActivity;
|
|
import org.mian.gitnex.clients.PicassoService;
|
|
import org.mian.gitnex.helpers.AppUtil;
|
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
|
import org.mian.gitnex.helpers.contexts.AccountContext;
|
|
|
|
/**
|
|
* @author M M Arif
|
|
*/
|
|
public class MyProfileFragment extends Fragment {
|
|
|
|
private Context ctx;
|
|
|
|
@Nullable @Override
|
|
public View onCreateView(
|
|
@NonNull LayoutInflater inflater,
|
|
@Nullable ViewGroup container,
|
|
@Nullable Bundle savedInstanceState) {
|
|
|
|
ctx = getContext();
|
|
|
|
View v = inflater.inflate(R.layout.fragment_profile, container, false);
|
|
setHasOptionsMenu(false);
|
|
|
|
((MainActivity) requireActivity())
|
|
.setActionBarTitle(getResources().getString(R.string.navProfile));
|
|
|
|
AccountContext account = ((BaseActivity) requireActivity()).getAccount();
|
|
if (account.getUserInfo() != null) {
|
|
viewData(v, account);
|
|
} else {
|
|
// we have to wait until loading is finished
|
|
LinearProgressIndicator loading = v.findViewById(R.id.loadingIndicator);
|
|
loading.setVisibility(View.VISIBLE);
|
|
((MainActivity) requireActivity())
|
|
.setProfileInitListener(
|
|
(text) -> {
|
|
loading.setVisibility(View.GONE);
|
|
viewData(v, account);
|
|
});
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
public void viewData(View v, AccountContext account) {
|
|
|
|
TextView userFullName = v.findViewById(R.id.userFullName);
|
|
ImageView userAvatar = v.findViewById(R.id.userAvatar);
|
|
TextView userLogin = v.findViewById(R.id.userLogin);
|
|
TextView userLanguage = v.findViewById(R.id.userLanguage);
|
|
TextView userFollowersCount = v.findViewById(R.id.user_followers_count);
|
|
TextView userFollowingCount = v.findViewById(R.id.user_following_count);
|
|
TextView userStarredReposCount = v.findViewById(R.id.user_starred_repos_count);
|
|
|
|
String[] userLanguageCodes =
|
|
account.getUserInfo().getLanguage() != null
|
|
? account.getUserInfo().getLanguage().split("-")
|
|
: new String[] {""};
|
|
|
|
if (userLanguageCodes.length >= 2) {
|
|
Locale locale = new Locale(userLanguageCodes[0], userLanguageCodes[1]);
|
|
userLanguage.setText(locale.getDisplayLanguage());
|
|
} else {
|
|
userLanguage.setText(getResources().getConfiguration().locale.getDisplayLanguage());
|
|
}
|
|
|
|
userAvatar.setOnClickListener(
|
|
loginId ->
|
|
AppUtil.copyToClipboard(
|
|
ctx,
|
|
account.getAccount().getUserName(),
|
|
ctx.getString(
|
|
R.string.copyLoginIdToClipBoard,
|
|
account.getAccount().getUserName())));
|
|
|
|
userFullName.setText(Html.fromHtml(account.getFullName()));
|
|
userLogin.setText(getString(R.string.usernameWithAt, account.getAccount().getUserName()));
|
|
|
|
int avatarRadius = AppUtil.getPixelsFromDensity(ctx, 60);
|
|
|
|
PicassoService.getInstance(ctx)
|
|
.get()
|
|
.load(account.getUserInfo().getAvatarUrl())
|
|
.transform(new RoundedTransformation(avatarRadius, 0))
|
|
.placeholder(R.drawable.loader_animated)
|
|
.resize(120, 120)
|
|
.centerCrop()
|
|
.into(userAvatar);
|
|
|
|
userFollowersCount.setText(String.valueOf(account.getUserInfo().getFollowersCount()));
|
|
userFollowingCount.setText(String.valueOf(account.getUserInfo().getFollowingCount()));
|
|
userStarredReposCount.setText(String.valueOf(account.getUserInfo().getStarredReposCount()));
|
|
|
|
MyProfileFragment.SectionsPagerAdapter mSectionsPagerAdapter =
|
|
new SectionsPagerAdapter(getChildFragmentManager());
|
|
|
|
ViewPager mViewPager = v.findViewById(R.id.container);
|
|
mViewPager.setAdapter(mSectionsPagerAdapter);
|
|
|
|
Typeface myTypeface = AppUtil.getTypeface(requireContext());
|
|
TabLayout tabLayout = v.findViewById(R.id.tabs);
|
|
|
|
ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
|
|
int tabsCount = vg.getChildCount();
|
|
|
|
for (int j = 0; j < tabsCount; j++) {
|
|
|
|
ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);
|
|
int tabChildCount = vgTab.getChildCount();
|
|
|
|
for (int i = 0; i < tabChildCount; i++) {
|
|
|
|
View tabViewChild = vgTab.getChildAt(i);
|
|
|
|
if (tabViewChild instanceof TextView) {
|
|
((TextView) tabViewChild).setTypeface(myTypeface);
|
|
}
|
|
}
|
|
}
|
|
|
|
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
|
|
tabLayout.addOnTabSelectedListener(
|
|
new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
|
|
}
|
|
|
|
public static class SectionsPagerAdapter extends FragmentStatePagerAdapter {
|
|
|
|
SectionsPagerAdapter(FragmentManager fm) {
|
|
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
|
|
}
|
|
|
|
@NonNull @Override
|
|
public Fragment getItem(int position) {
|
|
|
|
switch (position) {
|
|
case 0: // followers
|
|
return new MyProfileFollowersFragment();
|
|
|
|
case 1: // following
|
|
return new MyProfileFollowingFragment();
|
|
|
|
case 2: // emails
|
|
return new MyProfileEmailsFragment();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public int getCount() {
|
|
return 3;
|
|
}
|
|
}
|
|
}
|