emu.project64.settings.BaseSettingsFragment.java Source code

Java tutorial

Introduction

Here is the source code for emu.project64.settings.BaseSettingsFragment.java

Source

/*
 * *************************************************************************
 *  BasePreferenceFragment.java
 * **************************************************************************
 *  Copyright  2015 VLC authors and VideoLAN
 *  Author: Geoffrey Mtais
 *
 *  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 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program 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 this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *  ***************************************************************************
 */

package emu.project64.settings;

import emu.project64.R;
import emu.project64.SplashActivity;
import emu.project64.jni.NativeExports;
import emu.project64.profile.ControllerProfileActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;

public abstract class BaseSettingsFragment extends PreferenceFragmentCompat {
    private static final String DIALOG_FRAGMENT_TAG = "android.support.v7.preference.PreferenceFragment.DIALOG";

    protected abstract int getXml();

    protected abstract int getTitleId();

    @Override
    public void onCreatePreferences(Bundle bundle, String s) {
        addPreferencesFromResource(getXml());
    }

    @Override
    public void onStart() {
        super.onStart();
        final AppCompatActivity activity = (AppCompatActivity) getActivity();
        if (activity != null && activity.getSupportActionBar() != null) {
            activity.getSupportActionBar().setTitle(getString(getTitleId()));
        }
    }

    protected void loadFragment(Fragment fragment) {
        getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_placeholder, fragment)
                .addToBackStack("main").commit();
    }

    @Override
    public void onDisplayPreferenceDialog(Preference preference) {
        DialogFragment dialogFragment = null;
        if (preference instanceof SeekBarPreference) {
            dialogFragment = SeekBarPreferencePreferenceDialogFragmentCompat.newInstance(preference.getKey());
        } else if (preference instanceof TwoLinesListPreference) {
            dialogFragment = TwoLinesListPreferenceDialogFragmentCompat.newInstance(preference.getKey());
        } else {
            super.onDisplayPreferenceDialog(preference);
        }

        if (dialogFragment != null) {
            dialogFragment.setTargetFragment(this, 0);
            dialogFragment.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
        }
    }

    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        if (preference.getKey().equals("settings_input")) {
            loadFragment(new InputFragment());
        } else if (preference.getKey().equals("settings_touch_screen")) {
            loadFragment(new TouchScreenFragment());
        } else if (preference.getKey().equals("settings_gamepad_screen")) {
            final AppCompatActivity activity = (AppCompatActivity) getActivity();
            Intent intent = new Intent(activity, ControllerProfileActivity.class);
            activity.startActivity(intent);
        } else if (preference.getKey().equals("settings_video")) {
            loadFragment(new VideoFragment());
        } else if (preference.getKey().equals("settings_game_list")) {
            loadFragment(new GameListFragment());
        } else if (preference.getKey().equals("settings_audio")) {
            loadFragment(new AudioFragment());
        } else if (preference.getKey().equals("settings_advanced")) {
            loadFragment(new AdvancedFragment());
        } else if (preference.getKey().equals("logging_core")) {
            loadFragment(new LoggingProject64Core());
        } else if (preference.getKey().equals("logging_audio")) {
            loadFragment(new LoggingAudio());
        } else if (preference.getKey().equals("settings_reset")) {
            DialogInterface.OnClickListener internalListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (which == DialogInterface.BUTTON_POSITIVE) {
                        NativeExports.ResetApplicationSettings();
                        SplashActivity.Reset();
                        Intent SplashIntent = new Intent(getActivity(), SplashActivity.class);
                        SplashIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(SplashIntent);
                    }
                }
            };

            String title = getString(R.string.settings_reset_title);
            String message = getString(R.string.settings_reset_message);
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setTitle(title).setMessage(message)
                    .setCancelable(false).setNegativeButton(getString(android.R.string.cancel), internalListener)
                    .setPositiveButton(getString(android.R.string.ok), internalListener);
            builder.create().show();
        } else {
            return super.onPreferenceTreeClick(preference);
        }
        return true;
    }
}