diff --git a/app/build.gradle b/app/build.gradle index 34b9f91..04b1a5f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.constraintlayout:constraintlayout:2.1.0-beta02' implementation 'androidx.navigation:navigation-fragment:2.3.5' implementation 'androidx.navigation:navigation-ui:2.3.5' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' diff --git a/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java b/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java index 685cd28..cef8653 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java +++ b/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java @@ -25,7 +25,6 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; -import android.widget.Toast; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; @@ -76,6 +75,7 @@ public class MainActivity extends AppCompatActivity implements AddButtonDialog.A setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); + toolbar.setBackgroundResource(R.drawable.toolbartop); setSupportActionBar(toolbar); FloatingActionButton addfab = findViewById(R.id.addbutton_fab); addfab.setOnClickListener(new View.OnClickListener() { @@ -101,7 +101,7 @@ public class MainActivity extends AppCompatActivity implements AddButtonDialog.A // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. mAppBarConfiguration = new AppBarConfiguration.Builder( - R.id.nav_home, R.id.nav_einstellungen, R.id.nav_kueche, R.id.nav_zeitsteuerung, R.id.nav_schlafzimmer, R.id.nav_flur, R.id.nav_credits, R.id.nav_konsole) + R.id.nav_home, R.id.nav_einstellungen, R.id.nav_kueche, R.id.nav_zeitsteuerung, R.id.nav_schlafzimmer, R.id.nav_flur, R.id.nav_über, R.id.nav_konsole) .setOpenableLayout(drawer) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); @@ -176,7 +176,6 @@ public class MainActivity extends AppCompatActivity implements AddButtonDialog.A } public void menurighttopeinstellungen(MenuItem i) { - Toast.makeText(this, "SETTINGS", Toast.LENGTH_LONG).show(); EinstellungenFragment pef = new EinstellungenFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.nav_host_fragment, pef).setPrimaryNavigationFragment(pef); @@ -186,28 +185,19 @@ public class MainActivity extends AppCompatActivity implements AddButtonDialog.A } public void menurighttopcredits(MenuItem i) { - Toast.makeText(this, "CREDITS", Toast.LENGTH_LONG).show(); CreditsFragment pef = new CreditsFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.nav_host_fragment, pef).setPrimaryNavigationFragment(pef); transaction.addToBackStack(null); transaction.commit(); - getSupportActionBar().setTitle(R.string.menu_credits); + getSupportActionBar().setTitle(R.string.menu_über); } public void menurighttopdocumentation(MenuItem i) { - Toast.makeText(this, "DOCUMENTATION", Toast.LENGTH_LONG).show(); Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.jg-cody.de/")); startActivity(in); } - public void menurighttoplogout(MenuItem i) { - Toast.makeText(this, "LOGOUT", Toast.LENGTH_LONG).show(); - getSharedPreferences("appsettings", Context.MODE_PRIVATE).edit().remove("ip").remove("user").remove("password").commit(); - startActivity(getIntent()); - finish(); - } - public void menurighttopschliessen(MenuItem i) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { finishAffinity(); @@ -234,6 +224,7 @@ public class MainActivity extends AppCompatActivity implements AddButtonDialog.A } }); AlertDialog mDialog = mBuilder.create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); mDialog.show(); } diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/Einstellungen/EinstellungenFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/Einstellungen/EinstellungenFragment.java index 9a54265..08ec8c2 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/Einstellungen/EinstellungenFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/Einstellungen/EinstellungenFragment.java @@ -61,12 +61,14 @@ public class EinstellungenFragment extends Fragment { Toast.makeText(getContext(), "Colorpicker", Toast.LENGTH_SHORT).show(); final ColorPickerView picker = new ColorPickerView(getContext()); picker.setColor(0xff12345); - new AlertDialog.Builder(getContext()).setView(picker).setTitle(R.string.colorpicker).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + AlertDialog mDialog = new AlertDialog.Builder(getContext()).setView(picker).setTitle(R.string.colorpicker).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } - }).show(); + }).create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); + mDialog.show(); } catch (Exception e) { } } @@ -84,7 +86,7 @@ public class EinstellungenFragment extends Fragment { @Override public void onClick(View view) { - new AlertDialog.Builder(getContext()) + AlertDialog mDialog = new AlertDialog.Builder(getContext()) .setTitle(R.string.reset_app) .setMessage(R.string.are_you_sure_to_reset) @@ -105,7 +107,9 @@ public class EinstellungenFragment extends Fragment { // A null listener allows the button to dismiss the dialog and take no further action. .setNegativeButton(android.R.string.no, null) - .show(); + .create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); + mDialog.show(); } }); @@ -148,6 +152,7 @@ public class EinstellungenFragment extends Fragment { } }); AlertDialog mDialog = mBuilder.create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); mDialog.show(); } diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/Konsole/KonsoleFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/Konsole/KonsoleFragment.java index 9499587..6f449e0 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/Konsole/KonsoleFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/Konsole/KonsoleFragment.java @@ -79,12 +79,33 @@ public class KonsoleFragment extends Fragment { reboot_Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + AlertDialog mDialog = new AlertDialog.Builder(getContext()) + .setTitle("SERVER NEUSTARTEN") + .setMessage("BIST DU SICHER?") + + // Specifying a listener allows you to take an action before dismissing the dialog. + // The dialog is automatically dismissed when a dialog button is clicked. + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + try { + Toast.makeText(getContext(), "Reboot wird ausgeführt...", Toast.LENGTH_SHORT).show(); + SSH_connection.executeRemoteCommand(ip, user, password, "reboot"); + } catch (Exception e) { + } + + // Continue with delete operation + } + }) + + // A null listener allows the button to dismiss the dialog and take no further action. + .setNegativeButton(android.R.string.no, null) + .create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); + mDialog.show(); + + + - try { - Toast.makeText(getContext(), "Reboot wird ausgeführt...", Toast.LENGTH_SHORT).show(); - SSH_connection.executeRemoteCommand(ip, user, password, "reboot"); - } catch (Exception e) { - } } }); shutdown_Button = (Button) root.findViewById(R.id.shutdown); @@ -93,9 +114,9 @@ public class KonsoleFragment extends Fragment { public void onClick(View v) { - new AlertDialog.Builder(getContext()) - .setTitle("Server herunterfahren") - .setMessage("Bist du sicher?") + AlertDialog mDialog = new AlertDialog.Builder(getContext()) + .setTitle("SERVER HERUNTERFAHREN") + .setMessage("BIST DU SICHER?") // Specifying a listener allows you to take an action before dismissing the dialog. // The dialog is automatically dismissed when a dialog button is clicked. @@ -113,7 +134,9 @@ public class KonsoleFragment extends Fragment { // A null listener allows the button to dismiss the dialog and take no further action. .setNegativeButton(android.R.string.no, null) - .show(); + .create(); + mDialog.getWindow().setBackgroundDrawableResource(R.drawable.button_round); + mDialog.show(); } }); diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerFragment.java index 22f7b33..ea7dfbd 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerFragment.java @@ -12,14 +12,11 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import java.util.Base64; @@ -60,13 +57,7 @@ public class SchlafzimmerFragment extends Fragment { I.setImageDrawable(new BitmapDrawable(getResources(), MainActivity.scaleCenterCrop(BitmapFactory.decodeByteArray(BA, 0, BA.length), MainActivity.getScreenHeight(), MainActivity.getScreenWidth()))); I.setScaleType(ImageView.ScaleType.CENTER_CROP); } - final TextView textView = root.findViewById(R.id.text_schlafzimmer); - schlafzimmerViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); + schlafzimmeru1aus = (Button) root.findViewById(R.id.schlafzimmeru1aus); schlafzimmeru1aus.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerViewModel.java b/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerViewModel.java index 67a12f3..dbaa7ce 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerViewModel.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/Schlafzimmer/SchlafzimmerViewModel.java @@ -1,19 +1,7 @@ package de.jg_cody.Teraplex.ui.Schlafzimmer; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class SchlafzimmerViewModel extends ViewModel { - private MutableLiveData mText; - - public SchlafzimmerViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("EINSTELLUNGEN"); - } - - public LiveData getText() { - return mText; - } } \ No newline at end of file diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/home/HomeFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/home/HomeFragment.java index 3533a9a..6841639 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/home/HomeFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/home/HomeFragment.java @@ -35,6 +35,7 @@ public class HomeFragment extends Fragment { public static EditText userInput; public static EditText passwordInput; Button loginButton; + Button logoutButton; Button wlan_aus_Button; Button wlan_an_Button; Button kodian; @@ -73,6 +74,11 @@ public class HomeFragment extends Fragment { passwordInput = (EditText) root.findViewById(R.id.loginpasswordInput); ipInput = (EditText) root.findViewById(R.id.ipInput); loginButton = (Button) root.findViewById(R.id.loginButton); + SharedPreferences t = getContext().getSharedPreferences("appsettings", Context.MODE_PRIVATE); + if (user == null || ip == null) { + loginButton.setVisibility(View.VISIBLE); + } + else {loginButton.setVisibility(View.INVISIBLE);} loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -89,10 +95,25 @@ public class HomeFragment extends Fragment { login_data.setText(""); } else { login_data.setText("Sie sind als " + user + " bei " + ip + " angemeldet!"); + logoutButton.setVisibility(View.VISIBLE); + loginButton.setVisibility(View.INVISIBLE); } } } }); + logoutButton = (Button) root.findViewById(R.id.logoutButton); + if (user == null || ip == null) { + logoutButton.setVisibility(View.INVISIBLE); + } + else {logoutButton.setVisibility(View.VISIBLE);} + logoutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getContext().getSharedPreferences("appsettings", Context.MODE_PRIVATE).edit().remove("ip").remove("user").remove("password").commit(); + startActivity(getActivity().getIntent()); + getActivity().finish(); + } + }); wlan_aus_Button = (Button) root.findViewById(R.id.wlan_aus); wlan_aus_Button.setOnClickListener(new View.OnClickListener() { @Override @@ -123,7 +144,7 @@ public class HomeFragment extends Fragment { public void onClick(View v) { try { - Toast.makeText(getContext(), "Lampe wird ausgeschaltet...", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "KODI wird ausgeschaltet...", Toast.LENGTH_SHORT).show(); SSH_connection.executeRemoteCommand(ip, user, password, "sudo /root/raspberry-remote/send 11111 3 0"); } catch (Exception e) { } @@ -136,7 +157,7 @@ public class HomeFragment extends Fragment { public void onClick(View v) { try { - Toast.makeText(getContext(), "Lampe wird angeschaltet...", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "KODI wird angeschaltet...", Toast.LENGTH_SHORT).show(); SSH_connection.executeRemoteCommand(ip, user, password, "sudo /root/raspberry-remote/send 11111 3 1"); } catch (Exception e) { } diff --git a/app/src/main/res/drawable/backgroundalpha.xml b/app/src/main/res/drawable/backgroundalpha.xml new file mode 100644 index 0000000..7953e52 --- /dev/null +++ b/app/src/main/res/drawable/backgroundalpha.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/button_left.xml b/app/src/main/res/drawable/button_left.xml new file mode 100644 index 0000000..f29e0e4 --- /dev/null +++ b/app/src/main/res/drawable/button_left.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_middle.xml b/app/src/main/res/drawable/button_middle.xml new file mode 100644 index 0000000..f704e72 --- /dev/null +++ b/app/src/main/res/drawable/button_middle.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_right.xml b/app/src/main/res/drawable/button_right.xml new file mode 100644 index 0000000..83b4e75 --- /dev/null +++ b/app/src/main/res/drawable/button_right.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/button_round.xml b/app/src/main/res/drawable/button_round.xml new file mode 100644 index 0000000..e87472e --- /dev/null +++ b/app/src/main/res/drawable/button_round.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/copyright_black_24dp.xml b/app/src/main/res/drawable/copyright_black_24dp.xml new file mode 100644 index 0000000..70ac338 --- /dev/null +++ b/app/src/main/res/drawable/copyright_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/graphite_raw.png b/app/src/main/res/drawable/graphite_raw.png new file mode 100644 index 0000000..fd372bd Binary files /dev/null and b/app/src/main/res/drawable/graphite_raw.png differ diff --git a/app/src/main/res/drawable/shape.xml b/app/src/main/res/drawable/shape.xml new file mode 100644 index 0000000..929fbde --- /dev/null +++ b/app/src/main/res/drawable/shape.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/app/src/main/res/drawable/toolbartop.xml b/app/src/main/res/drawable/toolbartop.xml new file mode 100644 index 0000000..b4efc3c --- /dev/null +++ b/app/src/main/res/drawable/toolbartop.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_credits.xml b/app/src/main/res/layout/fragment_credits.xml index f65e5b3..dad75a6 100644 --- a/app/src/main/res/layout/fragment_credits.xml +++ b/app/src/main/res/layout/fragment_credits.xml @@ -4,110 +4,283 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:clickable="true" android:layout_height="match_parent" tools:context=".ui.Credits.CreditsFragment"> + app:layout_constraintVertical_bias="0.0"/> + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/divider5" /> + app:layout_constraintEnd_toEndOf="@+id/julianG" + app:layout_constraintStart_toStartOf="@+id/julianG" + app:layout_constraintTop_toBottomOf="@+id/imageView3" /> + app:layout_constraintEnd_toEndOf="@+id/imageView5" + app:layout_constraintHorizontal_bias="0.483" + app:layout_constraintStart_toStartOf="@+id/imageView5" + app:layout_constraintTop_toBottomOf="@+id/imageView5" /> + app:layout_constraintEnd_toEndOf="@+id/imageView3" + app:layout_constraintStart_toStartOf="@+id/imageView3" + app:layout_constraintTop_toBottomOf="@+id/team" /> + app:layout_constraintEnd_toEndOf="@+id/cooperation" + app:layout_constraintStart_toStartOf="@+id/cooperation" + app:layout_constraintTop_toBottomOf="@+id/cooperation" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_einstellungen.xml b/app/src/main/res/layout/fragment_einstellungen.xml index ac35f7f..d48f828 100644 --- a/app/src/main/res/layout/fragment_einstellungen.xml +++ b/app/src/main/res/layout/fragment_einstellungen.xml @@ -4,180 +4,263 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:clickable="true" android:layout_height="match_parent" tools:context=".ui.Einstellungen.EinstellungenFragment"> + + + app:layout_constraintTop_toBottomOf="@+id/divider2" /> + app:layout_constraintTop_toBottomOf="@+id/divider" /> + app:layout_constraintBottom_toTopOf="@+id/divider4" + app:layout_constraintStart_toStartOf="@+id/Background" + app:layout_constraintTop_toBottomOf="@+id/divider3" /> + app:layout_constraintTop_toBottomOf="@+id/divider4" />