# Wie kann man OnClicklistener und OnCheckedChangeListener zusammen ausführen



## wer112 (20. Aug 2022)

Ich habe ein Problem. Ich habe in den Login Einstellungen ein Switch für Angemeldet bleiben. Wenn man rein kommt auf das Fragment, wird der Switch gesetzt.

Möchte man nicht angemeldet bleiben, drückt man auf den Switch und es erscheint ein Alert Dialog um sein Passwort zur Bestätigung einzugeben. Wenn das Passwort stimmt, wird der Switch das Ergebniss gespeichert und den Text und Checked gesetzt. bricht man es ab oder das Passwort ist falsch, dann bleibt es bei der alten Variante.

Probleme ist, das man es trotzdem den Regel verschieben kann (von An auf aus). Der Text bleibt zum Glück. Man soll den Regel garnicht verschieben können, ohne das richtige Passwort.

Habe dann OnCheckedChangeListener ausprobiert und es hat super geklappt, denn ich konnte es nicht verschieben. Danach habe ich den Inhalt da eingefügt, aber dann geht die Passwort Eingabe sofort auf, wenn man ins Fragment geht. Das Nervt, da es ja gesetzt ist(Wenn man angemeldet bleiben möchte.) Beides geht auch nicht.

Wie kann ich es machen, das es auf klicken und ziehen reagiert(onClick & CheckedChange) und dann das dialog aufruft um die Einstellung zu ändern?

Es darf aber auch nicht sofort kommen. Der Regler muss blockiert sein, wie beim checkdChange. Erst wenn das Passwort stimmt, muss es neu gesetzt werden.

Und weiteres Problem ist. das ich manchmal das Login überspringe und manchmal nicht, erst bei mehr malsigem neustarten der App....


Hier der aktuelle Code:



```
package ------;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import static android.content.Context.MODE_PRIVATE;

public class ----- extends Fragment {

    TextView ueber;

    Switch login_einstellung_angemeldet_bleiben, login_einstellung_abmelden_nach_10_minuten, login_einstellung_login_mit_fingerabdruck;

    Integer eingeloggt_bleiben = 0;


    private int i_b1 = Color.parseColor("#e0e0e0"), i_b2 = Color.parseColor("#e0e0e0"), i_b3 = Color.parseColor("#e0e0e0"), i_b4 = Color.parseColor("#000000"), i_b5 = Color.parseColor("#e0e0e0");

    private int i_hintergrund = Color.parseColor("#ffffff");



    RelativeLayout relativeLayout;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


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

        View fragmentlayout_--- = inflater.inflate(R.layout.activity_login__einstellungen, null);

        ueber = (TextView) fragmentlayout_---.findViewById(R.id.login_einstellungen_textView);

        login_einstellung_angemeldet_bleiben  =  (Switch)fragmentlayout_---.findViewById(R.id.switch1);
        login_einstellung_abmelden_nach_10_minuten = (Switch)  fragmentlayout_---.findViewById(R.id.switch2);
        login_einstellung_login_mit_fingerabdruck = (Switch)  fragmentlayout_---.findViewById(R.id.switch3);

        final String url = "https://www----";

        String sessionID = "";



        SharedPreferences pref = this.getActivity().getSharedPreferences("Session", MODE_PRIVATE);
        sessionID = pref.getString("SessionID", sessionID);





        RequestQueue queue = Volley.newRequestQueue(getActivity());

        String finalSessionID = sessionID;
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>(){


            @Override
            public void onResponse(JSONObject response) {

                if (response.equals("Ausgeloggt.")){

                }else if (response.equals("Session Fehler.")){

                }else{
                    try {


                        eingeloggt_bleiben = response.getInt("eingeloggtBleiben");

                        angemeldetBleibenSpeichern();

                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                        View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_erfolgreich_dialog, (ConstraintLayout)fragmentlayout_---.findViewById(R.id.layoutDialogContainer));
                        builder.setView(view);
                        ((TextView)view.findViewById(R.id.textTitle)).setText("Eingeloggt Bleiben");
                        ((TextView)view.findViewById(R.id.textView_erfolgreich)).setText("Eingeloggt bleiben: " + eingeloggt_bleiben);
                        ((Button)view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                        ((ImageView)view.findViewById(R.id.image_erfolgreich)).setImageResource(R.drawable.ic_erfolgreich);

                        final AlertDialog alertDialog = builder.create();

                        view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                alertDialog.dismiss();

                            }
                        });

                        if (alertDialog.getWindow() != null){
                            alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                        }



                        alertDialog.show();


                        Log.d("Import Json Werte: ", "eingeloggt Bleiben: " + eingeloggt_bleiben);






                    } catch (JSONException e) {
                        Log.d("JSON  Fehler: ", e.toString());
                    }
                }


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)fragmentlayout_---.findViewById(R.id.layoutDialogContainer));
                builder.setView(view);
                ((TextView)view.findViewById(R.id.textTitle)).setText("VolleyError");
                ((TextView)view.findViewById(R.id.textView_error)).setText("ERROR: " + error.toString());
                ((Button)view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                ((ImageView)view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                final AlertDialog alertDialog = builder.create();

                view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        alertDialog.dismiss();

                    }
                });

                if (alertDialog.getWindow() != null){
                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                }



                alertDialog.show();




            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> header = new HashMap<>();

                header.put("Set-Cookie", finalSessionID);

                return header;
            }
        };
        queue.add(jsonObjectRequest);





        Farbeimport();
        Farbesetzen();


        relativeLayout = fragmentlayout_---.findViewById(R.id.--_layout);
        relativeLayout.setBackgroundColor(i_hintergrund);

       SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences("User", Context.MODE_PRIVATE);



       login_einstellung_angemeldet_bleiben.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {

               if (login_einstellung_angemeldet_bleiben.isChecked()){
                   login_einstellung_angemeldet_bleiben.setText("An");

                   EditText passwort_edit;



                   AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                   View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_passwort_abfrage_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                   builder.setView(view);
                   ((TextView) view.findViewById(R.id.textTitle)).setText(getString(R.string.login_fehlgeschlagen_uber));
                   passwort_edit = (EditText)view.findViewById(R.id.editText_passwort_abfrage);
                   ((Button) view.findViewById(R.id.buttonYes)).setText(getString(R.string.okay));

                   final AlertDialog alertDialog = builder.create();

                   view.findViewById(R.id.buttonYes).setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           alertDialog.dismiss();

                           angemeldetBleibenSpeichern();

                       }
                   });


                   view.findViewById(R.id.buttonYes).setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           alertDialog.dismiss();

                           ProgressDialog dialog = new ProgressDialog(getActivity());
                           dialog.setTitle("Überprüfung");
                           dialog.setMessage("Das Passwort wird überprüft.");
                           dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                           dialog.setCancelable(false);
                           dialog.show();



                            String angemeldetBleiben = "2";

                           String passwort_abfrage = passwort_edit.getText().toString().trim();

                           String url = "https://www.---";

                           RequestQueue queue1 = Volley.newRequestQueue(getActivity());

                           StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                               @Override
                               public void onResponse(String response) {

                                   if(response.equals("Einstellung geändert.")){
                                       dialog.dismiss();

                                       eingeloggt_bleiben = 2;


                                       login_einstellung_angemeldet_bleiben.setText("An");
                                       login_einstellung_angemeldet_bleiben.setChecked(true);

                                       angemeldetBleibenSpeichern();

                                   }else{
                                       dialog.dismiss();


                                       login_einstellung_angemeldet_bleiben.setText("Aus");
                                       login_einstellung_angemeldet_bleiben.setChecked(false);

                                       angemeldetBleibenSpeichern();

                                       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                                       View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                                       builder.setView(view);
                                       ((TextView) view.findViewById(R.id.textTitle)).setText("Speichern fehlgeschlagen");
                                       ((TextView) view.findViewById(R.id.textView_error)).setText("Grund: " + response.toString());
                                       ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                                       ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                                       final AlertDialog alertDialog = builder.create();

                                       view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                           @Override
                                           public void onClick(View v) {
                                               alertDialog.dismiss();

                                           }
                                       });

                                       if (alertDialog.getWindow() != null) {
                                           alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                                       }


                                       alertDialog.show();


                                   }

                               }
                           }, new Response.ErrorListener() {
                               @Override
                               public void onErrorResponse(VolleyError error) {
                                   Log.e("PasswortPrüfung", "Response Error: " + error.toString());
                                   dialog.dismiss();
                               }
                           }){

                               @Nullable
                               @Override
                               protected Map<String, String> getParams() throws AuthFailureError {
                                   HashMap<String, String> param = new HashMap<>();

                                   param.put("---", passwort_abfrage);
                                   param.put("-----", angemeldetBleiben);

                                   return param;
                               }
                           };

                           queue1.add(stringRequest);



                       }
                   });

                   if (alertDialog.getWindow() != null) {
                       alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                   }


                   alertDialog.show();

                    angemeldetBleibenSpeichern();


               }else{
                   login_einstellung_angemeldet_bleiben.setText("Aus");

                   EditText passwort_edit;



                   AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                   View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_passwort_abfrage_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                   builder.setView(view);
                   ((TextView) view.findViewById(R.id.textTitle)).setText(getString(R.string.login_fehlgeschlagen_uber));
                   passwort_edit = (EditText)view.findViewById(R.id.editText_passwort_abfrage);
                   ((Button) view.findViewById(R.id.buttonYes)).setText(getString(R.string.okay));

                   final AlertDialog alertDialog = builder.create();

                   view.findViewById(R.id.buttonNo).setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           alertDialog.dismiss();
                           login_einstellung_angemeldet_bleiben.setChecked(false);
                           login_einstellung_angemeldet_bleiben.setText("Aus");

                           angemeldetBleibenSpeichern();

                       }
                   });


                   view.findViewById(R.id.buttonYes).setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           alertDialog.dismiss();

                           ProgressDialog dialog = new ProgressDialog(getActivity());
                           dialog.setTitle("Überprüfung");
                           dialog.setMessage("Das Passwort wird überprüft.");
                           dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                           dialog.setCancelable(false);
                           dialog.show();



                           String angemeldetBleiben = "1";

                           String passwort_abfrage = passwort_edit.getText().toString().trim();

                           String url = "https://www---";

                           RequestQueue queue1 = Volley.newRequestQueue(getActivity());

                           StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                               @Override
                               public void onResponse(String response) {


                                   if(response.equals("Einstellung geändert.")){
                                       dialog.dismiss();

                                       eingeloggt_bleiben = 1;


                                       login_einstellung_angemeldet_bleiben.setText("Aus");
                                       login_einstellung_angemeldet_bleiben.setChecked(false);

                                       angemeldetBleibenSpeichern();



                                   }else{
                                       dialog.dismiss();
                                       login_einstellung_angemeldet_bleiben.setText("An");
                                       login_einstellung_angemeldet_bleiben.setChecked(true);

                                       angemeldetBleibenSpeichern();

                                       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                                       View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                                       builder.setView(view);
                                       ((TextView) view.findViewById(R.id.textTitle)).setText("Speichern fehlgeschlagen");
                                       ((TextView) view.findViewById(R.id.textView_error)).setText("Grund: " + response.toString());
                                       ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                                       ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                                       final AlertDialog alertDialog = builder.create();

                                       view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                           @Override
                                           public void onClick(View v) {
                                               alertDialog.dismiss();

                                           }
                                       });

                                       if (alertDialog.getWindow() != null) {
                                           alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                                       }


                                       alertDialog.show();


                                   }



                               }
                           }, new Response.ErrorListener() {
                               @Override
                               public void onErrorResponse(VolleyError error) {
                                   Log.e("PasswortPrüfung", "Response Error: " + error.toString());
                                   dialog.dismiss();
                               }
                           }){

                               @Nullable
                               @Override
                               protected Map<String, String> getParams() throws AuthFailureError {
                                   HashMap<String, String> param = new HashMap<>();

                                   param.put("----", passwort_abfrage);
                                   param.put("------", angemeldetBleiben);

                                   return param;
                               }
                           };

                           queue1.add(stringRequest);



                       }
                   });

                   if (alertDialog.getWindow() != null) {
                       alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                   }


                   alertDialog.show();

                    angemeldetBleibenSpeichern();


               }

           }
       });


       /*
       login_einstellung_angemeldet_bleiben.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

               if (isChecked){
                   angemeldetBleibenSpeichern();

               }else{

                   angemeldetBleibenSpeichern();

               }

           }
       });

        */


        return fragmentlayout_---;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }


    private void Farbeimport() {

        SharedPreferences prefs = getActivity().getSharedPreferences("app_einstellungen", MODE_PRIVATE);
        i_b1 = prefs.getInt("schriftfarbe1", i_b1);
        i_b2 = prefs.getInt("schriftfarbe2", i_b2);
        i_b3 = prefs.getInt("schriftfarbe3", i_b3);
        i_b4 = prefs.getInt("schriftfarbe_button", i_b4);
        i_b5 = prefs.getInt("button_hintergrund", i_b5);
        i_hintergrund = prefs.getInt("hintergrund", i_hintergrund);
    }

    private void Farbesetzen() {

        ueber.setTextColor(i_b1);
       /* schrift1.setTextColor(i_b2);
        schrift2.setTextColor(i_b2);
        schrift3.setTextColor(i_b2);
        schrift_menue.setTextColor(i_b2);
        schrift_btn.setTextColor(i_b2); */





    }

    private void angemeldetBleibenSpeichern(){
        SharedPreferences sharedPreferences = getActivity().getSharedPreferences("User", Context.MODE_PRIVATE);


        if(eingeloggt_bleiben == 0){
            Toast.makeText(getActivity(), "eingeloggt Code: " + eingeloggt_bleiben, Toast.LENGTH_SHORT).show();


        }else if(eingeloggt_bleiben == 1){
            login_einstellung_angemeldet_bleiben.setChecked(false);
            login_einstellung_angemeldet_bleiben.setText("Aus");


            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString("Logged", "loggendout");
            editor.commit();


        }else if(eingeloggt_bleiben == 2){
            login_einstellung_angemeldet_bleiben.setChecked(true);
            login_einstellung_angemeldet_bleiben.setText("An");

            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString("Logged", "loggendin");
            editor.commit();

        }
    }

}
```


----------



## Jw456 (20. Aug 2022)

Ein Prüfen ob dein Switch "login_einstellung_angemeldet_bleiben" ein oder aus ist sehe ich nicht beim Start des Fragment.
Du machst gleich dein String Request, egal was der Schalter sagt.


----------



## wer112 (20. Aug 2022)

Jw456 hat gesagt.:


> Ein Prüfen on dein Switch "login_einstellung_angemeldet_bleiben" ein oder aus ist sehe ich nicht beim Start des Fragment.
> Du machst gleich dein String Request, egal was der Schalter sagt.


Am anfang wird das am Anfang direkt gemacht. Die Daten müssen erstmal geholt werden, danach wird es eingestellt. Wenn der Regler auf an dann ist und man den nach ausschiebt, ist der ja aus der Regler, aber der Text ist an. Durch onCheckedLisener wird das Schieben Blockiert, aber wenn er an ist, wird direkt das Dialo geöffnet. Oder ein onClick in onChange?


----------



## Jw456 (21. Aug 2022)

wer112 hat gesagt.:


> Habe dann OnCheckedChangeListener ausprobiert und es hat super geklappt, denn ich konnte es nicht verschieben. Danach habe ich den Inhalt da eingefügt, aber dann geht die Passwort Eingabe sofort auf, wenn man ins Fragment geht. Das Nervt, da es ja gesetzt ist(Wenn man angemeldet bleiben möchte.) Beides geht auch nicht.



Das dies Passiert ist logisch. Denn du setzt den Zustand des Schalters nicht auf dem in den Prefs gespeicherten Wert.
Den Listener hast du aber schon Definiert bevor das Ergebnis von deinem Server kommt, und mit dem Ergebnis setzt du denn Schalter löst somit ein CheckedChangeListener Event aus.

Wenn du dir nun überlegst was der Default Wert von einen Switch ist, solltest du zu einer Lösung kommen.



Im allgemeinen stellt man den in Prefs gespeicherten Wert bei Start wider her.


----------



## Jw456 (21. Aug 2022)

wer112 hat gesagt.:


> Probleme ist, das man es trotzdem den Regel verschieben kann (von An auf aus). Der Text bleibt zum Glück. Man soll den Regel garnicht verschieben können, ohne das richtige Passwort.


Dann setze ihn doch Inaktiv. Ein Blick in die Docu hilft.

Switch erbt von View


			https://developer.android.com/reference/android/view/View#setEnabled(boolean)
		



setClickable()
setEnabled()


----------



## Jw456 (21. Aug 2022)

Eines muss ich hier noch sagen.

Dein Code ist fast unlesbar für einen Außenstehenden. Packe nicht alles in eine Methode, Block sondern benutze kleine sinnvoll benannte Methoden damit er übersichtlicher wird.
Auch du wirst nach einiger Zeit nicht mehr durchsteigen. Tust du jetzt schon nicht mehr wie man hier sieht.

zb. ein If wo ein Block 140 Zeilen lang ist unmöglich.

Tipp: Clean Code.


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> Eines muss ich hier noch sagen.
> 
> Dein Code ist fast unlesbar für einen Außenstehenden. Packe nicht alles in eine Methode, Block sondern benutze kleine sinnvoll benannte Methoden damit er übersichtlicher wird.
> Auch du wirst nach einiger Zeit nicht mehr durchsteigen. Tust du jetzt schon nicht mehr wie man hier sieht.
> ...



Habe es versucht, aber weiter geht es nicht, da ich sonst auf gewissenen Ressorcen zugreifen kann. Du hast recht, das man bald net mehr durch blicken kann. Das mit dem Clean Code wollte ich in eine höhere Variante machen. Kein Plan, ob es clean ist...


```
package ------------;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import static android.content.Context.MODE_PRIVATE;

public class Login_Einstellungen extends Fragment {

    TextView ueber;

    Switch login_einstellung_angemeldet_bleiben, login_einstellung_abmelden_nach_10_minuten, login_einstellung_login_mit_fingerabdruck;

    Integer eingeloggt_bleiben = 0;


    private int i_b1 = Color.parseColor("#e0e0e0"), i_b2 = Color.parseColor("#e0e0e0"), i_b3 = Color.parseColor("#e0e0e0"), i_b4 = Color.parseColor("#000000"), i_b5 = Color.parseColor("#e0e0e0");

    private int i_hintergrund = Color.parseColor("#ffffff");





    RelativeLayout relativeLayout;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


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

        View fragmentlayout_login_einstellungen = inflater.inflate(R.layout.activity_login__einstellungen, null);

        //------------------  Wigdet finden -------------------------------------

        ueber = (TextView) fragmentlayout_login_einstellungen.findViewById(R.id.login_einstellungen_textView);
        relativeLayout = (RelativeLayout)fragmentlayout_login_einstellungen.findViewById(R.id.login_einstellungen_layout);

        login_einstellung_angemeldet_bleiben  =  (Switch) fragmentlayout_login_einstellungen.findViewById(R.id.switch1);
        login_einstellung_abmelden_nach_10_minuten = (Switch)  fragmentlayout_login_einstellungen.findViewById(R.id.switch2);
        login_einstellung_login_mit_fingerabdruck = (Switch)  fragmentlayout_login_einstellungen.findViewById(R.id.switch3);


        //---------------------- Farben Import & Setzen ----------------------------

        Farbeimport();
        Farbesetzen();

        relativeLayout.setBackgroundColor(i_hintergrund);


        //----------------------  Switch Status setzen ----------------------------

        angemeldetStatus();



        // -----------------------  Switch  Angemeldet Bleiben --------------------------

        login_einstellung_angemeldet_bleiben.setChecked(false);

        /* ---------- Regler schieben blockieren -------------- */




        /* ----------------- Regler OnClickListener setzen -------------- */



        login_einstellung_angemeldet_bleiben.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                angemeldetBleibenOnClickListener();
            }
        });




        return fragmentlayout_login_einstellungen;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }


    private void Farbeimport() {

        SharedPreferences prefs = getActivity().getSharedPreferences("app_einstellungen", MODE_PRIVATE);
        i_b1 = prefs.getInt("schriftfarbe1", i_b1);
        i_b2 = prefs.getInt("schriftfarbe2", i_b2);
        i_b3 = prefs.getInt("schriftfarbe3", i_b3);
        i_b4 = prefs.getInt("schriftfarbe_button", i_b4);
        i_b5 = prefs.getInt("button_hintergrund", i_b5);
        i_hintergrund = prefs.getInt("hintergrund", i_hintergrund);
    }

    private void Farbesetzen() {

        ueber.setTextColor(i_b1);
       /* schrift1.setTextColor(i_b2);
        schrift2.setTextColor(i_b2);
        schrift3.setTextColor(i_b2);
        schrift_menue.setTextColor(i_b2);
        schrift_btn.setTextColor(i_b2); */






    }

    private void angemeldetStatus(){
        final String url = "---";

        RequestQueue queue = Volley.newRequestQueue(getActivity());


        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>(){


            @Override
            public void onResponse(JSONObject response) {

                if (response.equals("Ausgeloggt.")){

                }else if (response.equals("Session Fehler.")){

                }else{
                    try {


                        eingeloggt_bleiben = response.getInt("eingeloggtBleiben");

                        angemeldetBleibenSpeichern();

                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                        View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_erfolgreich_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                        builder.setView(view);
                        ((TextView)view.findViewById(R.id.textTitle)).setText("Eingeloggt Bleiben");
                        ((TextView)view.findViewById(R.id.textView_erfolgreich)).setText("Eingeloggt bleiben: " + eingeloggt_bleiben);
                        ((Button)view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                        ((ImageView)view.findViewById(R.id.image_erfolgreich)).setImageResource(R.drawable.ic_erfolgreich);

                        final AlertDialog alertDialog = builder.create();

                        view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                alertDialog.dismiss();

                            }
                        });

                        if (alertDialog.getWindow() != null){
                            alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                        }



                        alertDialog.show();


                        Log.d("Import Json Werte: ", "eingeloggt Bleiben: " + eingeloggt_bleiben);






                    } catch (JSONException e) {
                        Log.d("JSON  Fehler: ", e.toString());
                    }
                }


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                builder.setView(view);
                ((TextView)view.findViewById(R.id.textTitle)).setText("VolleyError");
                ((TextView)view.findViewById(R.id.textView_error)).setText("ERROR: " + error.toString());
                ((Button)view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                ((ImageView)view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                final AlertDialog alertDialog = builder.create();

                view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        alertDialog.dismiss();

                    }
                });

                if (alertDialog.getWindow() != null){
                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                }



                alertDialog.show();




            }
        });
        queue.add(jsonObjectRequest);


    }

    private void angemeldetBleibenOnClickListener(){


        if (login_einstellung_angemeldet_bleiben.isChecked()){

            //--------------- Switch Zustand setzen wenn es gecheckt ist -----------------------------

            login_einstellung_angemeldet_bleiben.setText("An");
            login_einstellung_angemeldet_bleiben.setChecked(true);


            //------------------ Variablen u.s.w. --------------------------


            final String url = "------------";

            EditText passwort_edit;



            // --------------------------------- Passwort Alert Dialog --------------------------------



            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
            View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_passwort_abfrage_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
            builder.setView(view);
            ((TextView) view.findViewById(R.id.textTitle)).setText("Passwort Überprüfung");
            passwort_edit = (EditText)view.findViewById(R.id.editText_passwort_abfrage);
            ((Button) view.findViewById(R.id.buttonYes)).setText(getString(R.string.okay));

            final AlertDialog alertDialog = builder.create();

            view.findViewById(R.id.buttonNo).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.dismiss();

                    angemeldetBleibenSpeichern();

                }
            });



            view.findViewById(R.id.buttonYes).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.dismiss();

                    ProgressDialog dialog = new ProgressDialog(getActivity());
                    dialog.setTitle("Überprüfung");
                    dialog.setMessage("Das Passwort wird überprüft.");
                    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                    dialog.setCancelable(false);
                    dialog.show();



                    String angemeldetBleiben = "2";

                    String passwort_abfrage = passwort_edit.getText().toString().trim();



                    RequestQueue queue1 = Volley.newRequestQueue(getActivity());

                    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {

                            if(response.equals("Einstellung geändert.")){
                                dialog.dismiss();

                                eingeloggt_bleiben = 2;


                                login_einstellung_angemeldet_bleiben.setText("An");
                                login_einstellung_angemeldet_bleiben.setChecked(true);

                                angemeldetBleibenSpeichern();


                            }else{
                                dialog.dismiss();


                                login_einstellung_angemeldet_bleiben.setText("Aus");
                                login_einstellung_angemeldet_bleiben.setChecked(false);

                                angemeldetBleibenSpeichern();

                                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                                View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                                builder.setView(view);
                                ((TextView) view.findViewById(R.id.textTitle)).setText("Speichern fehlgeschlagen");
                                ((TextView) view.findViewById(R.id.textView_error)).setText("Grund: " + response.toString());
                                ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                                ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                                final AlertDialog alertDialog = builder.create();

                                view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        alertDialog.dismiss();

                                    }
                                });

                                if (alertDialog.getWindow() != null) {
                                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                                }


                                alertDialog.show();


                            }

                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("PasswortPrüfung", "Response Error: " + error.toString());
                            dialog.dismiss();
                        }
                    }){

                        @Nullable
                        @Override
                        protected Map<String, String> getParams() throws AuthFailureError {
                            HashMap<String, String> param = new HashMap<>();

                            param.put("-----", passwort_abfrage);
                            param.put("------", angemeldetBleiben);

                            return param;
                        }
                    };

                    queue1.add(stringRequest);



                }
            });

            if (alertDialog.getWindow() != null) {
                alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
            }


            alertDialog.show();

            angemeldetBleibenSpeichern();


        }else{

            //--------------- Switch Zustand setzen wenn es gecheckt ist -----------------------------

            login_einstellung_angemeldet_bleiben.setText("Aus");
            login_einstellung_angemeldet_bleiben.setChecked(false);


            //------------------ Variablen u.s.w. --------------------------


            final String url = "-------";

            EditText passwort_edit;



            // --------------------------------- Passwort Alert Dialog --------------------------------




            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
            View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_passwort_abfrage_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
            builder.setView(view);
            ((TextView) view.findViewById(R.id.textTitle)).setText(getString(R.string.login_fehlgeschlagen_uber));
            passwort_edit = (EditText)view.findViewById(R.id.editText_passwort_abfrage);
            ((Button) view.findViewById(R.id.buttonYes)).setText(getString(R.string.okay));

            final AlertDialog alertDialog = builder.create();

            view.findViewById(R.id.buttonNo).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.dismiss();
                    login_einstellung_angemeldet_bleiben.setChecked(false);
                    login_einstellung_angemeldet_bleiben.setText("Aus");

                    angemeldetBleibenSpeichern();

                }
            });


            view.findViewById(R.id.buttonYes).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.dismiss();

                    ProgressDialog dialog = new ProgressDialog(getActivity());
                    dialog.setTitle("Überprüfung");
                    dialog.setMessage("Das Passwort wird überprüft.");
                    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                    dialog.setCancelable(false);
                    dialog.show();



                    String angemeldetBleiben = "1";

                    String passwort_abfrage = passwort_edit.getText().toString().trim();


                    RequestQueue queue1 = Volley.newRequestQueue(getActivity());

                    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {


                            if(response.equals("Einstellung geändert.")){
                                dialog.dismiss();

                                eingeloggt_bleiben = 1;


                                login_einstellung_angemeldet_bleiben.setText("Aus");
                                login_einstellung_angemeldet_bleiben.setChecked(false);



                                angemeldetBleibenSpeichern();



                            }else{
                                dialog.dismiss();
                                login_einstellung_angemeldet_bleiben.setText("An");
                                login_einstellung_angemeldet_bleiben.setChecked(true);

                                angemeldetBleibenSpeichern();

                                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                                View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                                builder.setView(view);
                                ((TextView) view.findViewById(R.id.textTitle)).setText("Speichern fehlgeschlagen");
                                ((TextView) view.findViewById(R.id.textView_error)).setText("Grund: " + response.toString());
                                ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                                ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                                final AlertDialog alertDialog = builder.create();

                                view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        alertDialog.dismiss();

                                    }
                                });

                                if (alertDialog.getWindow() != null) {
                                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                                }


                                alertDialog.show();


                            }



                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("PasswortPrüfung", "Response Error: " + error.toString());
                            dialog.dismiss();
                        }
                    }){

                        @Nullable
                        @Override
                        protected Map<String, String> getParams() throws AuthFailureError {
                            HashMap<String, String> param = new HashMap<>();

                            param.put("-----", passwort_abfrage);
                            param.put("-------", angemeldetBleiben);

                            return param;
                        }
                    };

                    queue1.add(stringRequest);



                }
            });

            if (alertDialog.getWindow() != null) {
                alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
            }


            alertDialog.show();

            angemeldetBleibenSpeichern();


        }
    }
    
    

    private void angemeldetBleibenSpeichern(){
        SharedPreferences sharedPreferences = getActivity().getSharedPreferences("User", Context.MODE_PRIVATE);


        if(eingeloggt_bleiben == 0){
            Toast.makeText(getActivity(), "eingeloggt Code: " + eingeloggt_bleiben, Toast.LENGTH_SHORT).show();


        }else if(eingeloggt_bleiben == 1){
            login_einstellung_angemeldet_bleiben.setChecked(false);
            login_einstellung_angemeldet_bleiben.setText("Aus");


            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(getResources().getString(R.string.prefLoginState), "loggendout");
            editor.commit();


        }else if(eingeloggt_bleiben == 2){
            login_einstellung_angemeldet_bleiben.setChecked(true);
            login_einstellung_angemeldet_bleiben.setText("An");



            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(getResources().getString(R.string.prefLoginState), "loggendin");
            editor.commit();

        }
    }

}
```




Jw456 hat gesagt.:


> Dann setze ihn doch Inaktiv. Ein Blick in die Docu hilft.


Das habe ich probiert, was geklappt hat, aber der Nutzer trotzdem nicht auf ihn klicken kann, um den Zustand zu ändern. Er darf ja nicht geschoben werden, aber er muss geklickt werden.



Jw456 hat gesagt.:


> setClickable()
> setEnabled()


Wenn ich es Clickable auf false macht, dann kann ich den ClickListener nicht benutzen..

Irgendwie geht beides nicht, keine Ahnung was große Unternehmen machen um das zu verhindern, aber trozdem änderbar sein muss.

Probleme wenn man den Regler verschieben kann und man dann dadrauf klickt, das der Zustand falsch gesetz wird. 

z.B. der Nutzer will angemeldet bleiben (2) und er hat die (1), dann schiebt er den Regler auf (2), dann ist der Regler gecheckt. Wenn man dann sein Passwort richtig eingegeben hat, wird in die Datenbank eine (1) eingetragen, was der Nutzer nicht möchte. 

Und nur durch richtiges passwort, darf er den Zustand ändern und nicht durch schieben.....

Cool wäre sowas in der Art:


```
if(angemeldetBleibenSwitch.isgeschoben){

Code A

}else if(angemeldetBleibenSwitch.isgeklickt){

Code A

}else{

Code B(Alter Zustand belassen)
}
```


----------



## Jw456 (26. Aug 2022)

Für deine Auswertung hätte ich bestimmt zwei boolean werte benutz.
Angemeldet ja/nein
Angemeldet bleiben ja/nein

Wenn du es mit eimen  int machst da würde ich echt je ein bit dafür benutzen.

bin 0000  dez 0    eingeloggt nein / bleiben nein
bin 0001 dez 1     eingeloggt  ja    / bleiben nein
bin 0010  dez 2    eingeloggt nein / bleiben ja
bin 0011  dez 3.   eingeloggt ja     / bleiben ja

Das sind dann auch 4 Zustände.


----------



## Jw456 (26. Aug 2022)

wer112 hat gesagt.:


> Wenn ich es Clickable auf false macht, dann kann ich den ClickListener nicht benutzen..


Das soll ja auch so sein. Wenn er das pw eingegeben hat sollst st du ihn wider freigeben.

Von selber geht das nicht.


Wemn du die Tür abschließt musst du auch erst wider aufschließen um sie wieder zubenutzen.


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> Das soll ja auch so sein. Wenn er das pw eingegeben hat sollst st du ihn wider freigeben.


Ich glaube du verstehst mich grade nicht. Denn wenn du auf die Seite kommst, wird ja jedes Switch ordnungsmäßig gesetzt. Wenn ich alle Sperre, kann man ja nicht mehr anklicken und somit nicht das Passwort eingeben.
Wenn der Nutzer auf die Seite kommt und möchte angemeldet bleiben, wie soll er ein Passwort eingeben, wenn der Switch deaktiviert ist?
Er muss angeklickt werden, aber nicht verschoben werden können, da sonst der Zustand ja net mehr stimmt und sonst das falsche Ergebniss in die Datenbank erscheint...


Jw456 hat gesagt.:


> Wemn du die Tür abschließt musst du auch erst wider aufschließen um sie wieder zubenutzen.


Wenn ich den Deaktiviere, wie soll ich den wieder aktivieren?

Ich glaube du stellst dir ein Fragment vor, wo man erst PW eingeben muss, bevor es zur Switch Seite kommt.?


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> Für deine Auswertung hätte ich bestimmt zwei boolean werte benutz.
> Angemeldet ja/nein


Angemeldet ja/nein, wäre sinnlos, da man sonst ja garnicht erst ins Fragment kommt und das Fragment ist ja an der Steuerung gebunden. Die Steuerung erhält ja das Ergebniss und muss ja nicht in jedes Fragment nachprüfen, da man ja sonst nicht in der Steuerung bleiben kann und man sonst ja zur Login Seite geleitet würde...


Jw456 hat gesagt.:


> Angemeldet bleiben ja/nein
> 
> Wenn du es mit eimen  int machst da würde ich echt je ein bit dafür benutzen.
> 
> ...


----------



## Jw456 (26. Aug 2022)

Vor dem Aufruf von angemeldetStatus() sollte du die Schalter Inaktiv setzen. Denn du bekommst ja den aktuellen Wert erst von Server.

Im positiven Respons Listener kannst du den Schalter wider freigeben.

Beim negativen eben erst wenn das PW richtig ist.
Hier solltest du auch angemeldetBleibenOnClickListener() aufrufen um das PW zu erfragen.

Sinnvoll ist das wahrscheinlich in dem Klicklistener deines Allert Dialog.
Und das ist genau das was ich mit dem Türe abschließen meinte was du nicht versanden hast.



Deine Programm ist wenn der Server sagt angemeldet Ok zu ende .
Außer der User klickt ich möchte nicht angemeldet bleiben.






Da du ja deinen Zustand der Schalte auf dem Server speicherst und das wohl auch so willst wozu dann die Prefs eigentlich sinnlos.


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> Vor dem Aufruf von angemeldetStatus() sollte du die Schalter Inaktiv setzen. Denn du bekommst ja den aktuellen Wert erst von Server.


Das habe ich jetzt gemacht. und bevor diese Methode: angemeldetBleibenSpeichern(); aufgerufen ist, wieder freigegeben.


Jw456 hat gesagt.:


> Im positiven Respons Listener kannst du den Schalter wider freigeben.
> 
> Beim negativen eben erst wenn das PW richtig ist.


Der Schalter muss aber in beide richtung frei sein, damit man es ja aktivieren oder deaktivieren kann. 
Das Passwort Dialog kommt ja erst wenn man auf dem negativen Zustand drück oder im Positiven Zustand, um es wieder zu ändern zu können.


Jw456 hat gesagt.:


> Hier solltest du auch angemeldetBleibenOnClickListener() aufrufen um das PW zu erfragen.


Das Passwort wird ja erst erfragt, wenn man auf den Switch drückt, damit man dies ändern kann...


Jw456 hat gesagt.:


> Sinnvoll ist das wahrscheinlich in dem Klicklistener deines Allert Dialog.
> Und das ist genau das was ich mit dem Türe abschließen meinte was du nicht versanden hast.


Welches Dialog meinst du genau?


Jw456 hat gesagt.:


> Deine Programm ist wenn der Server sagt angemeldet Ok zu ende .
> Außer der User klickt ich möchte nicht angemeldet bleiben.


Wie meinst du das genau?


Jw456 hat gesagt.:


> Da du ja deinen Zustand der Schalte auf dem Server speicherst und das wohl auch so willst wozu dann die Prefs eigentlich sinnlos.


Das Speichern in den ShaPrefs hat damit zu tun, wenn du den Zustand geändert hast, muss es ja dadrinnen abgespeichert werden, damit die Login Seite überspungen werden kann(diese Weiterleitung zur Steuerung). Erst in der Steuerung wird es abgefragt, ansonsten wieder zur Login Seite....


----------



## Jw456 (26. Aug 2022)

wir sprechen die ganze Zeit immer vom ersten Volley was nach dem start ausfgefürt  wird.

wo ist denn die Weiterleitung zur Steuerung


----------



## Jw456 (26. Aug 2022)

wer112 hat gesagt.:


> Das Passwort wird ja erst erfragt, wenn man auf den Switch drückt, damit man dies ändern kann...


deshalb sagte ich auch wenn der Server sagt du bist nicht eingeloggt weshalb auch immer dann verzweige gleich in dem Error listener zu PW Abfrage. was du nicht tust. Und  wenn das Pw korrekt war kannst du den Schalter wider freigeben. 
Es sind sind somit zwei Wege zum gleichen Ziel.


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> deshalb sagte ich auch wenn der Server sagt du bist nicht eingeloggt weshalb auch immer dann verzweige gleich in dem Error listener zu PW Abfrage. was du nicht tust. Und  wenn das Pw korrekt war kannst du den Schalter wider freigeben.
> Es sind sind somit zwei Wege zum gleichen Ziel.


Da hast du zum Teil recht, da fehlt was. Wenn ich ausgeloggt sein, wird die Login Seite aufgerufen, da brauche ich keine Passwort Dialog. Das PW Dialog ist ja nicht zum Login da, sondern zum Vergleich.



Jw456 hat gesagt.:


> wir sprechen die ganze Zeit immer vom ersten Volley was nach dem start ausfgefürt  wird.
> 
> wo ist denn die Weiterleitung zur Steuerung


Auf der Login Seite, wird ja weitergeleitet zur Steuerung...


Ich danke dir für den Tipp, das der Regler deaktiviert bleibt, bsi die Antwort vom Server kommt. Da wenn man schlechtes Internet hat, schiebt der Nutzer den Regler hoch und gibt das Passwort ein, dann erhält er das falsche Ergebniss...

Aber wenn der Nutzer eingeloggt ist, muss ich das ja verhindern das Schieben, aber das Klicken muss gehen... 

Schweres Thema xD


----------



## Jw456 (26. Aug 2022)

Zum verhalten von Switch probiere doch mal das aus .

Sind beide Listener gesetzt (vorhanden) kommt das Schieben im ChangeListener an.
Und der Kick in onClick



Ist nur der Change Listener vorhanden kommt beides da an.


Ist nur OnClick vorhanden kommt nur der Klick dort an das schieben geht nicht. Kommt zu mindestens nicht an.


```
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Switch sw = findViewById(R.id.switch1);

        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d("test"," Switch schieben ist :  "+ (sw.isChecked() ? "true": "false") );
            }
        });

        sw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean bb = sw.isChecked();
                Log.d("test"," Switch Klick :  "+ (sw.isChecked() ? "true": "false") );
            }
        });
    }
}
```


----------



## wer112 (26. Aug 2022)

Jw456 hat gesagt.:


> Zum verhalten von Switch probiere doch mal das aus .
> 
> Sind beide Listener gesetzt (vorhanden) kommt das Schieben im ChangeListener an.
> Und der Kick in onClick
> ...


Habs mal ausprobiert, hat nicht richtig funktioniert, da er nicht auf das Schieben reagiert, sondern auf dem zusand. Wenn man ihn berührt ist der Wer entweder auf false oder True. Sobald Volley die Regler setzt, erscheinen da mehrere Passwort Abfragen, was stört....


Ich habe die Touch Methode noch mal probiert. Problem war dort wenn ich kurz drücke bzw. schiebe, dann geht zwischen 4 bis 30 mal die Passwort Abfrage auf. Was das ganze Wegdrücken stört.

Habe da an den setEnable gedacht, da es nicht im Click klappen tut, weil da das Schieben nicht erfasst wird, habe ich nun onTouchListener benutzt und mit Enable. Wenn mans an die richtige Stelle macht, funktioniert es auch!

Musste aber den Dialog auf canceble false setzen....

Problem ist nun, wenn ich das richtige Passwort eingebe, dann setzt er alles falsch....


----------



## Jw456 (26. Aug 2022)

wer112 hat gesagt.:


> Habs mal ausprobiert, hat nicht richtig funktioniert, da er nicht auf das Schieben reagiert, sondern auf dem zusand. Wenn man ihn berührt ist der Wer entweder auf false oder True. Sobald Volley die Regler setzt, erscheinen da mehrere Passwort Abfragen, was stört....


Du sollst das in einer eignen app testen nicht in deinem Projekt um das Verhalten zu erforschen.



Wenn du nur den OnCheckedChangeListener() benutzt dann kommen beide Events dort an. Was willst du noch. Du bekommt eine Veränderung mit, egal ob Klick oder Schieben .

Du brauchst keine Unterscheidung der Zustand des Schaltes ist immer nur ein oder aus. Wie der User es macht ist doch egal. Wichtig ist das du es mitbekommst. Und das ist mit OnCheckedChangeListener() gegeben. 
Benutze  nur setEnabled()


----------

