package com.xabber.android.ui.fragment;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.xabber.android.R;
import com.xabber.android.data.Application;
import com.xabber.android.data.log.LogManager;
import com.xabber.android.data.account.listeners.OnAccountChangedListener;
import com.xabber.android.data.entity.AccountJid;
import com.xabber.android.ui.adapter.NavigationDrawerAccountAdapter;
import com.xabber.android.ui.color.AccountPainter;
import com.xabber.android.ui.color.ColorManager;
import java.util.Collection;
public class ContactListDrawerFragment extends Fragment implements View.OnClickListener, OnAccountChangedListener, AdapterView.OnItemClickListener {
ContactListDrawerListener listener;
private NavigationDrawerAccountAdapter adapter;
private ListView listView;
private View divider;
private View headerTitle;
private ImageView drawerHeaderImage;
private int[] headerImageResources;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
listener = (ContactListDrawerListener) activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TypedArray defaultAvatars = Application.getInstance().getResources()
.obtainTypedArray(R.array.navigation_drawer_header_images);
headerImageResources = new int[defaultAvatars.length()];
for (int index = 0; index < defaultAvatars.length(); index++) {
headerImageResources[index] = defaultAvatars.getResourceId(index, -1);
}
defaultAvatars.recycle();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_drawer, container, false);
// to avoid strange bug on some 4.x androids
view.setBackgroundColor(ColorManager.getInstance().getNavigationDrawerBackgroundColor());
try {
((TextView)view.findViewById(R.id.version))
.setText(getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0)
.versionName);
} catch (PackageManager.NameNotFoundException e) {
LogManager.exception(this, e);
}
View drawerHeader = view.findViewById(R.id.drawer_header);
drawerHeaderImage = (ImageView) drawerHeader.findViewById(R.id.drawer_header_image);
listView = (ListView) view.findViewById(R.id.drawer_account_list);
View footerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.contact_list_drawer_footer, listView, false);
listView.addFooterView(footerView);
View headerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.contact_list_drawer_header, listView, false);
headerTitle = headerView.findViewById(R.id.drawer_header_action_xmpp_accounts);
headerTitle.setOnClickListener(this);
listView.addHeaderView(headerView);
adapter = new NavigationDrawerAccountAdapter(getActivity());
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
footerView.findViewById(R.id.drawer_action_settings).setOnClickListener(this);
footerView.findViewById(R.id.drawer_action_about).setOnClickListener(this);
footerView.findViewById(R.id.drawer_action_exit).setOnClickListener(this);
divider = footerView.findViewById(R.id.drawer_divider);
return view;
}
@Override
public void onResume() {
super.onResume();
Application.getInstance().addUIListener(OnAccountChangedListener.class, this);
update();
}
@Override
public void onPause() {
super.onPause();
Application.getInstance().removeUIListener(OnAccountChangedListener.class, this);
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
@Override
public void onClick(View v) {
listener.onContactListDrawerListener(v.getId());
}
@Override
public void onAccountsChanged(Collection<AccountJid> accounts) {
update();
}
private void update() {
adapter.onChange();
Glide.with(this)
.fromResource()
.load(headerImageResources[AccountPainter.getDefaultAccountColorLevel()])
.fitCenter()
.into(drawerHeaderImage);
if (adapter.getCount() == 0) {
headerTitle.setVisibility(View.GONE);
divider.setVisibility(View.GONE);
} else {
headerTitle.setVisibility(View.VISIBLE);
divider.setVisibility(View.VISIBLE);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listener.onAccountSelected((AccountJid) listView.getItemAtPosition(position));
}
public interface ContactListDrawerListener {
void onContactListDrawerListener(int viewId);
void onAccountSelected(AccountJid account);
}
}