package io.github.droidkaigi.confsched.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import javax.inject.Inject;
import io.github.droidkaigi.confsched.R;
import io.github.droidkaigi.confsched.activity.ActivityNavigator;
import io.github.droidkaigi.confsched.dao.SessionDao;
import io.github.droidkaigi.confsched.databinding.FragmentSettingsBinding;
import io.github.droidkaigi.confsched.prefs.DefaultPrefs;
import io.github.droidkaigi.confsched.util.LocaleUtil;
import rx.Observable;
public class SettingsFragment extends BaseFragment {
public static final String TAG = SettingsFragment.class.getSimpleName();
@Inject
ActivityNavigator activityNavigator;
@Inject
SessionDao dao;
private FragmentSettingsBinding binding;
public static SettingsFragment newInstance() {
return new SettingsFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = FragmentSettingsBinding.inflate(inflater, container, false);
initView();
return binding.getRoot();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
getComponent().inject(this);
}
private void initView() {
binding.txtLanguage.setText(LocaleUtil.getCurrentLanguage(getActivity()));
binding.languageSettingsContainer.setOnClickListener(v -> showLanguagesDialog());
DefaultPrefs prefs = DefaultPrefs.get(getContext());
boolean shouldNotify = prefs.getNotificationFlag();
binding.notificationSwitchRow.init(shouldNotify, ((v, isChecked) -> {
prefs.putNotificationFlag(isChecked);
binding.headsUpSwitchRow.setEnabled(isChecked);
}));
binding.headsUpSwitchRow.setEnabled(shouldNotify);
binding.localTimeSwitchRow.init(prefs.getShowLocalTimeFlag(), ((buttonView, isChecked) -> {
prefs.putShowLocalTimeFlag(isChecked);
}));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
boolean headsUp = prefs.getHeadsUpFlag();
binding.headsUpSwitchRow.init(headsUp, (v, isChecked) -> {
prefs.putHeadsUpFlag(isChecked);
});
binding.headsUpSwitchRow.setVisibility(View.VISIBLE);
binding.headsUpBorder.setVisibility(View.VISIBLE);
}
}
private void showLanguagesDialog() {
List<String> languageIds = LocaleUtil.SUPPORT_LANG;
List<String> languages = Observable.from(languageIds)
.map(languageId -> LocaleUtil.getLanguage(getActivity(), languageId, languageId))
.toList()
.toBlocking()
.single();
String currentLanguageId = LocaleUtil.getCurrentLanguageId(getActivity());
int defaultItem = languageIds.indexOf(currentLanguageId);
String[] items = languages.toArray(new String[languages.size()]);
new AlertDialog.Builder(getActivity())
.setTitle(R.string.settings_language)
.setSingleChoiceItems(items, defaultItem, (dialog, which) -> {
String selectedLanguageId = languageIds.get(which);
if (!currentLanguageId.equals(selectedLanguageId)) {
Log.d(TAG, "Selected language_id: " + selectedLanguageId);
LocaleUtil.setLocale(getActivity(), selectedLanguageId);
dialog.dismiss();
restart();
}
})
.setNegativeButton(R.string.cancel, null)
.show();
}
private void restart() {
Activity activity = getActivity();
activityNavigator.showMain(activity, true);
activity.finish();
}
}