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:
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:
Java:
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();
}
}
}