MarshallAsch/veil-droid

View on GitHub
app/src/main/java/ca/marshallasch/veil/FragmentSettings.java

Summary

Maintainability
A
1 hr
Test Coverage
package ca.marshallasch.veil;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Switch;

import java.util.Random;

import static ca.marshallasch.veil.database.SyncStatsContract.SYNC_MESSAGE_V1;
import static ca.marshallasch.veil.database.SyncStatsContract.SYNC_MESSAGE_V2;

/**
 * This class holds the UI view for the settings page of the application
 *
 * @author Weihan Li
 * @version 1.0
 * @since 2018-07-18
 */
public class FragmentSettings extends Fragment {

    public static final String PREF_DARK_THEME = "PREF_DARK_THEME";
    public static final String PREF_LOGIN_RAND_VAL = "PREF_LOGIN_RAND_VAL";
    public static final String PREF_SYNC_VERSION = "PREF_SYNC_VERSION";
    public static final String PREF_MEMORY_SAVER = "PREF_MEMORY_SAVER";

    public static final String PREF_NOTIFY_POST = "PREF_NOTIFY_POST";
    public static final String PREF_NOTIFY_COMMENT = "PREF_NOTIFY_COMMENT";

    public FragmentSettings() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_settings, container, false);

        //set dark theme toggle to save preference
        Switch darkThemeToggle = view.findViewById(R.id.toggle_dark_theme);
        //set the sync protocal version
        Switch protocolVersionToggle = view.findViewById(R.id.toggle_sync_protocol);
        //set the memory saver option
        Switch memorySaverToggle = view.findViewById(R.id.memory_save_toggle);

        Switch alertPostToggle = view.findViewById(R.id.toggle_post_alerts);
        Switch alertCommentToggle = view.findViewById(R.id.toggle_comment_alerts);


        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        darkThemeToggle.setChecked(preferences.getBoolean(PREF_DARK_THEME, false));
        memorySaverToggle.setChecked(preferences.getBoolean(PREF_MEMORY_SAVER, false));
        protocolVersionToggle.setChecked(preferences.getInt(PREF_SYNC_VERSION, SYNC_MESSAGE_V2) == SYNC_MESSAGE_V2);

        alertPostToggle.setChecked(preferences.getBoolean(PREF_NOTIFY_POST, true));
        alertCommentToggle.setChecked(preferences.getBoolean(PREF_NOTIFY_COMMENT, true));

        //on click listener so allows for toggle to reset itself
        darkThemeToggle.setOnClickListener(view1 -> {
            toggleDarkTheme(darkThemeToggle.isChecked());
        });

        protocolVersionToggle.setOnClickListener(view1 -> {
            toggleProtocol(protocolVersionToggle.isChecked());
        });

        memorySaverToggle.setOnClickListener(view1 -> {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(PREF_MEMORY_SAVER, memorySaverToggle.isChecked());
            editor.apply();
        });
      
        alertPostToggle.setOnClickListener(view1 -> {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(PREF_NOTIFY_POST, alertPostToggle.isChecked());
            editor.apply();
        });

        alertCommentToggle.setOnClickListener(view1 -> {
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(PREF_NOTIFY_COMMENT, alertCommentToggle.isChecked());
            editor.apply();
        });

        // Inflate the layout for this fragment
        return view;
    }

    private void toggleDarkTheme(boolean isDarkTheme){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());

        int random = new Random().nextInt();

        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(PREF_DARK_THEME, isDarkTheme);
        editor.putInt(PREF_LOGIN_RAND_VAL, random);              // to protect against replay attacks
        editor.apply();

        String userID = ((MainActivity) getActivity()).getCurrentUser().getUuid();

        // set the arguments in the intent to automatically login the user
        Intent intent = new Intent(getActivity(), MainActivity.class);
        intent.putExtra(MainActivity.EXTRA_LOGGED_IN_RAND, random);
        intent.putExtra(MainActivity.EXTRA_LOGGED_IN_USER_ID, userID);

        getActivity().startActivity(intent);
        getActivity().finish();
    }

    private void toggleProtocol(boolean isV2) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt(PREF_SYNC_VERSION, isV2 ? SYNC_MESSAGE_V2 : SYNC_MESSAGE_V1);
        editor.apply();
    }
}