From 8141734b9e3a19a514903bf801288f2a3f3eb057 Mon Sep 17 00:00:00 2001 From: JG-Cody Date: Thu, 3 Jun 2021 23:34:38 +0200 Subject: [PATCH] =?UTF-8?q?sehr=20viel=20design=20=C3=BCberarbeitet=20cred?= =?UTF-8?q?its=20=C3=BCberarbeitet=20login/logout=20=C3=BCberarbeitet=20sh?= =?UTF-8?q?utdown=20hinweisfrage=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../de/jg_cody/Teraplex/MainActivity.java | 17 +- .../Einstellungen/EinstellungenFragment.java | 13 +- .../Teraplex/ui/Konsole/KonsoleFragment.java | 41 ++- .../ui/Schlafzimmer/SchlafzimmerFragment.java | 11 +- .../Schlafzimmer/SchlafzimmerViewModel.java | 12 - .../Teraplex/ui/home/HomeFragment.java | 25 +- app/src/main/res/drawable/backgroundalpha.xml | 12 + app/src/main/res/drawable/button_left.xml | 39 +++ app/src/main/res/drawable/button_middle.xml | 39 +++ app/src/main/res/drawable/button_right.xml | 39 +++ app/src/main/res/drawable/button_round.xml | 39 +++ .../res/drawable/copyright_black_24dp.xml | 9 + app/src/main/res/drawable/graphite_raw.png | Bin 0 -> 13240 bytes app/src/main/res/drawable/shape.xml | 14 + app/src/main/res/drawable/toolbartop.xml | 39 +++ app/src/main/res/layout/fragment_credits.xml | 249 +++++++++++++++--- .../res/layout/fragment_einstellungen.xml | 223 +++++++++++----- app/src/main/res/layout/fragment_flur.xml | 5 +- app/src/main/res/layout/fragment_home.xml | 146 ++++++---- app/src/main/res/layout/fragment_konsole.xml | 52 +++- app/src/main/res/layout/fragment_kueche.xml | 5 +- .../main/res/layout/fragment_schlafzimmer.xml | 23 +- .../res/layout/fragment_zeitsteuerung.xml | 14 +- app/src/main/res/menu/main.xml | 11 +- .../main/res/navigation/mobile_navigation.xml | 4 +- app/src/main/res/values/strings.xml | 3 +- app/src/main/res/values/themes.xml | 2 +- 28 files changed, 830 insertions(+), 258 deletions(-) create mode 100644 app/src/main/res/drawable/backgroundalpha.xml create mode 100644 app/src/main/res/drawable/button_left.xml create mode 100644 app/src/main/res/drawable/button_middle.xml create mode 100644 app/src/main/res/drawable/button_right.xml create mode 100644 app/src/main/res/drawable/button_round.xml create mode 100644 app/src/main/res/drawable/copyright_black_24dp.xml create mode 100644 app/src/main/res/drawable/graphite_raw.png create mode 100644 app/src/main/res/drawable/shape.xml create mode 100644 app/src/main/res/drawable/toolbartop.xml 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 0000000000000000000000000000000000000000..fd372bd62f13969027f373208b4b9323533cfd48 GIT binary patch literal 13240 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 + + + + + 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" />