OpenSRP/opensrp-client-anc

View on GitHub
opensrp-anc/src/main/java/org/smartregister/anc/library/fragment/MeFragment.java

Summary

Maintainability
A
1 hr
Test Coverage
package org.smartregister.anc.library.fragment;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;

import org.apache.commons.lang3.StringUtils;
import org.smartregister.anc.library.AncLibrary;
import org.smartregister.anc.library.R;
import org.smartregister.anc.library.activity.AncP2pModeSelectActivity;
import org.smartregister.anc.library.activity.PopulationCharacteristicsActivity;
import org.smartregister.anc.library.activity.SiteCharacteristicsActivity;
import org.smartregister.anc.library.presenter.MePresenter;
import org.smartregister.anc.library.util.Utils;
import org.smartregister.util.LangUtils;
import org.smartregister.view.activity.DrishtiApplication;
import org.smartregister.view.contract.MeContract;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import timber.log.Timber;

public class MeFragment extends org.smartregister.view.fragment.MeFragment implements MeContract.View {
    private RelativeLayout mePopCharacteristicsSection;
    private RelativeLayout siteCharacteristicsSection;
    private RelativeLayout languageSwitcherSection;
    private RelativeLayout p2pSyncSetion;
    private TextView languageSwitcherText;
    private final Map<String, Locale> locales = new HashMap<>();
    private String[] languages;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_me, container, false);
    }

    @Override
    protected void setUpViews(View view) {
        super.setUpViews(view);
        mePopCharacteristicsSection = view.findViewById(R.id.me_pop_characteristics_section);
        siteCharacteristicsSection = view.findViewById(R.id.site_characteristics_section);
        p2pSyncSetion = view.findViewById(R.id.p2p_section);

        if (Utils.enableLanguageSwitching()) {
            languageSwitcherSection = view.findViewById(R.id.language_switcher_section);
            languageSwitcherSection.setVisibility(View.VISIBLE);

            View meLanguageSwitcherSeparator = view.findViewById(R.id.me_language_switcher_separator);
            meLanguageSwitcherSeparator.setVisibility(View.VISIBLE);

            languageSwitcherText = languageSwitcherSection.findViewById(R.id.language_switcher_text);
            registerLanguageSwitcher();
        }

        setManifestVersion(view);
    }

    private void setManifestVersion(View view) {
        TextView manifestVersionText = view.findViewById(R.id.form_manifest_version);
        if (getActivity() != null) {
            manifestVersionText.setText(new Utils().getManifestVersion(getActivity().getBaseContext()));
        } else {
            manifestVersionText.setVisibility(View.INVISIBLE);
        }
    }

    protected void setClickListeners() {
        super.setClickListeners();
        mePopCharacteristicsSection.setOnClickListener(meFragmentActionHandler);
        siteCharacteristicsSection.setOnClickListener(meFragmentActionHandler);
        if (Utils.enableLanguageSwitching()) {
            languageSwitcherSection.setOnClickListener(meFragmentActionHandler);
        }
        p2pSyncSetion.setOnClickListener(meFragmentActionHandler);
    }

    protected void initializePresenter() {
        presenter = new MePresenter(this);
    }

    @Override
    protected void onViewClicked(View view) {
        int viewId = view.getId();
        if (viewId == R.id.logout_section) {
            DrishtiApplication.getInstance().logoutCurrentUser();
        } else if (viewId == R.id.site_characteristics_section) {
            if (getContext() != null) {
                getContext().startActivity(new Intent(getContext(), SiteCharacteristicsActivity.class));
            }
        } else if (viewId == R.id.me_pop_characteristics_section) {
            if (getContext() != null) {
                getContext().startActivity(new Intent(getContext(), PopulationCharacteristicsActivity.class));
            }
        } else if (viewId == R.id.language_switcher_section) {
            languageSwitcherDialog();
        } else if (viewId == R.id.p2p_section) {
            startActivity(new Intent(getContext(), AncP2pModeSelectActivity.class));
        }
    }

    private void languageSwitcherDialog() {
        if (getActivity() != null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle(getActivity().getResources().getString(R.string.choose_language));
            builder.setItems(languages, (dialog, position) -> {
                if (MeFragment.this.getActivity() != null) {
                    String selectedLanguage = languages[position];
                    languageSwitcherText.setText(String.format(MeFragment.this.getActivity().getResources().getString(R.string.default_language_string), selectedLanguage));

                    saveLanguage(selectedLanguage);
                    MeFragment.this.reloadClass();
                    AncLibrary.getInstance().notifyAppContextChange();
                }
            });

            AlertDialog dialog = builder.create();
            dialog.show();
        }
    }

    private void saveLanguage(String selectedLanguage) {
        if (MeFragment.this.getActivity() != null && StringUtils.isNotBlank(selectedLanguage)) {
            Locale selectedLanguageLocale = locales.get(selectedLanguage);
            if (selectedLanguageLocale != null) {
                LangUtils.saveLanguage(MeFragment.this.getActivity().getApplication(), getFullLanguage(selectedLanguageLocale));
            } else {
                Timber.i("Language could not be set");
            }
        }
    }

    private void reloadClass() {
        if (getActivity() != null) {
            Intent intent = getActivity().getIntent();
            getActivity().finish();
            getActivity().startActivity(intent);
        }
    }

    private void registerLanguageSwitcher() {
        if (getActivity() != null) {
            addLanguages();

            languages = new String[locales.size()];
            Locale current = getActivity().getResources().getConfiguration().locale;
            int x = 0;
            for (Map.Entry<String, Locale> language : locales.entrySet()) {
                languages[x] = language.getKey(); //Update the languages strings array with the languages to be displayed on the alert dialog
                x++;

                if (getFullLanguage(current).equalsIgnoreCase(getFullLanguage(language.getValue()))) {
                    languageSwitcherText.setText(String.format(getActivity().getResources().getString(R.string.default_language_string), language.getKey()));
                }
            }
        }
    }

    private String getFullLanguage(Locale locale) {
        return StringUtils.isNotEmpty(locale.getCountry()) ? locale.getLanguage() + "_" + locale.getCountry() : locale.getLanguage();
    }

    private void addLanguages() {
        locales.put(getString(R.string.english_language), Locale.ENGLISH);
        locales.put(getString(R.string.french_language), Locale.FRENCH);
        locales.put(getString(R.string.portuguese_brazil_language), new Locale("pt"));
        locales.put(getString(R.string.bahasa_indonesia_language), new Locale("ind"));
    }

}