From b915b860c800ba1eb81bf28c20e6e38f88e637f6 Mon Sep 17 00:00:00 2001 From: JG-Cody Date: Sun, 15 Aug 2021 19:18:23 +0200 Subject: [PATCH] Import & Export & EditMode --- .../de/jg_cody/Teraplex/MainActivity.java | 117 ++++++++++++++++-- .../ui/settings/SettingsFragment.java | 107 +++++----------- .../jg_cody/Teraplex/ui/tabs/ListAdapter.java | 42 ++++++- .../Teraplex/ui/tabs/ListItemHeadline.java | 7 ++ .../Teraplex/ui/tabs/ListItemSingle.java | 12 ++ app/src/main/res/values-de-rDE/strings.xml | 8 +- app/src/main/res/values/strings.xml | 6 +- 7 files changed, 192 insertions(+), 107 deletions(-) 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 98906b1..3e8cdc5 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java +++ b/app/src/main/java/de/jg_cody/Teraplex/MainActivity.java @@ -19,6 +19,7 @@ import android.media.MediaPlayer; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.os.Vibrator; import android.provider.MediaStore; import android.text.SpannableString; @@ -33,7 +34,6 @@ import android.view.WindowManager; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; -import android.widget.ListView; import android.widget.Switch; import androidx.appcompat.app.AppCompatActivity; @@ -51,10 +51,16 @@ import com.google.android.material.navigation.NavigationView; import org.json.JSONArray; import org.json.JSONException; +import org.json.JSONObject; +import java.io.BufferedReader; import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -64,21 +70,20 @@ import java.util.Objects; import de.jg_cody.Teraplex.ui.credits.CreditsFragment; import de.jg_cody.Teraplex.ui.settings.SettingsFragment; -import de.jg_cody.Teraplex.ui.tabs.ListAdapter; -import de.jg_cody.Teraplex.ui.tabs.ListItem; import de.jg_cody.Teraplex.ui.tabs.TabsFragment; public class MainActivity extends AppCompatActivity { public static int RESULT_LOAD_IMAGE = 0; private AppBarConfiguration mAppBarConfiguration; + // Request code for selecting a PDF document. + public static final int PICK_PDF_FILE = 2; + public static final int CREATE_FILE = 1; public static boolean editmode = false; - ListAdapter listAdapter; - ListView listView; + EditText editText_name; - ArrayList items; int lastID = 6969; Map tabitems = new HashMap<>(); @@ -199,14 +204,14 @@ public class MainActivity extends AppCompatActivity { if (tabsString != null) { try { JSONArray tabsArray = new JSONArray(tabsString); - for (int i = 0; i listTabs = getTabsFromPrefs(); + jsonObject.put("tabs", new JSONArray(listTabs)); + JSONObject jsonTabs = new JSONObject(); + SharedPreferences p = this.getSharedPreferences("appsettings", Activity.MODE_PRIVATE); + for (String tab : listTabs) { + String listItems = p.getString("listItems." + tab, "[]"); + JSONArray listItems2 = new JSONArray(listItems); + jsonTabs.put(tab, listItems2); + } + jsonObject.put("tabitems", jsonTabs); + + fileOutputStream.write(jsonObject.toString().getBytes()); + // Let the document provider know you're done by closing the stream. + fileOutputStream.close(); + pfd.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (JSONException e) { + + } + + + } else if (requestCode == PICK_PDF_FILE && resultCode == RESULT_OK && null != data) { + try { + + + ParcelFileDescriptor pfd = getContentResolver(). + openFileDescriptor(data.getData(), "r"); + FileInputStream fileInputStream = + new FileInputStream(pfd.getFileDescriptor()); + BufferedReader bf = new BufferedReader(new InputStreamReader(fileInputStream)); + String s = bf.readLine(); + JSONObject jso = new JSONObject(s); + SharedPreferences p = this.getSharedPreferences("appsettings", Activity.MODE_PRIVATE); + JSONArray tabs = jso.getJSONArray("tabs"); + SharedPreferences.Editor sharedEditor = p.edit(); + sharedEditor.putString("tabs",tabs.toString()); + JSONObject tabitems = jso.getJSONObject("tabitems"); + + for (int i = 0; i < tabs.length(); i++) { + String tab = tabs.getString(i); + JSONArray tArray = tabitems.getJSONArray(tab); + sharedEditor.putString("listItems." + tab,tArray.toString()); + + } + sharedEditor.apply(); + startActivity(getIntent()); + finish(); + + + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + + + } } private void loadBackground() { @@ -598,5 +673,23 @@ public class MainActivity extends AppCompatActivity { return dest; } + //muss oben noch ausgebessert werden + public List getTabsFromPrefs() { + SharedPreferences p = getSharedPreferences("appsettings", Activity.MODE_PRIVATE); + String tabsString = p.getString("tabs", null); + List tabs = new ArrayList(); + if (tabsString != null) { + try { + JSONArray tabsArray = new JSONArray(tabsString); + for (int i = 0; i < tabsArray.length(); i++) { + tabs.add(tabsArray.getString(i)); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + return tabs; + } + } diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/settings/SettingsFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/settings/SettingsFragment.java index c63909b..4e76019 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/settings/SettingsFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/settings/SettingsFragment.java @@ -66,7 +66,7 @@ public class SettingsFragment extends Fragment { Vibrator vr = (Vibrator) requireContext().getSystemService(Context.VIBRATOR_SERVICE); assert vr != null; vr.vibrate(100); - showExportDialog(); + createFile(); } }); Button Import = root.findViewById(R.id.button_import); @@ -76,7 +76,8 @@ public class SettingsFragment extends Fragment { Vibrator vr = (Vibrator) requireContext().getSystemService(Context.VIBRATOR_SERVICE); assert vr != null; vr.vibrate(100); - showImportDialog(); + //showImportDialog(); + openFile(); } }); Button Reset = root.findViewById(R.id.button_reset); @@ -288,87 +289,37 @@ public class SettingsFragment extends Fragment { editor.putString("Language", lang); editor.apply(); } - private void showExportDialog() { - final String[] listItems = {"EXPORT BACKGROUND", "EXPORT LANGUAGESETTINGS", "EXPORT THEMESETTINGS", "EXPORT TABS"}; - AlertDialog.Builder mBuilder = new AlertDialog.Builder(getContext()); - mBuilder.setTitle(getString(R.string.export_settings)); - mBuilder.setMultiChoiceItems(listItems, null, new DialogInterface.OnMultiChoiceClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i, boolean b) { - Vibrator vr = (Vibrator) requireContext().getSystemService(Context.VIBRATOR_SERVICE); - assert vr != null; - vr.vibrate(100); - if (i == 0) { - } else if (i == 1) { - - } else if (i == 2) { - - } else if (i == 3) { - - } - } - - }); - mBuilder.setPositiveButton(getString(R.string.button_export), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - LayoutInflater inflater = requireActivity().getLayoutInflater(); - View view = inflater.inflate(R.layout.exportdialog, null); - - editExportFile_name = view.findViewById(R.id.dialogexport_editText_name); - - - builder.setView(view) - .setTitle("SINGLE BUTTON") - .setNegativeButton(getString(R.string.cancel), (dialogExport, r) -> { - - }) - .setPositiveButton(R.string.button_export, (dialogExport, r) -> { - String headline = editExportFile_name.getText().toString(); - if(headline.isEmpty()){ - MediaPlayer mp = MediaPlayer.create(getContext(), R.raw.state_change_confirm_up); - mp.start(); - AlertDialog mDialog = new AlertDialog.Builder(getContext()) - .setTitle(getString(R.string.invalid)) - .setMessage(getString(R.string.inputfields_cant_be_empty)) - - // 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, null ) - .create(); - Objects.requireNonNull(mDialog.getWindow()).setBackgroundDrawableResource(R.drawable.button_round); - mDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id - mDialog.show(); - return; - } - - }); - - - AlertDialog mDialog = builder.create(); - Objects.requireNonNull(mDialog.getWindow()).setBackgroundDrawableResource(R.drawable.button_round); - mDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id - mDialog.show(); - } - } - ); - mBuilder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }); - AlertDialog mDialog = mBuilder.create(); - Objects.requireNonNull(mDialog.getWindow()).setBackgroundDrawableResource(R.drawable.button_round); - mDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id - mDialog.show(); - } private void showImportDialog() { Intent a = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); requireActivity().startActivityForResult(a, MainActivity.RESULT_LOAD_IMAGE); } + + private void createFile() { + Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("application/json"); + intent.putExtra(Intent.EXTRA_TITLE, "export.json"); + + // Optionally, specify a URI for the directory that should be opened in + // the system file picker when your app creates the document. + //intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri); + + getActivity().startActivityForResult(intent, 1); + } + private void openFile() { + Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("application/json"); + + // Optionally, specify a URI for the file that should appear in the + // system file picker when it loads. + + + getActivity().startActivityForResult(intent, MainActivity.PICK_PDF_FILE); + } + + } \ No newline at end of file diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/tabs/ListAdapter.java b/app/src/main/java/de/jg_cody/Teraplex/ui/tabs/ListAdapter.java index 9cc21c8..f5d79d2 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/tabs/ListAdapter.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/tabs/ListAdapter.java @@ -29,8 +29,7 @@ public class ListAdapter extends RecyclerView.AdapterAUSLOGGEN WILLKOMMEN BEI TERAPLEX EINLOGGEN - WLAN - KODI - AUS - AN KONSOLE BEFEHL SENDEN SERVERBEFEHLE @@ -59,7 +55,7 @@ IN KOOPERATION MIT REGISTERKARTE HINZUFÜGEN REGISTERKARTE ENTFERNEN - BEARBEITEN + BEARBEITUNGSMODUS ABBRECHEN UNGÜLTIGE EINGABE TABNAME @@ -90,7 +86,7 @@ HINZUFÜGEN BEFEHL 1 NAME - BEFEHL 1 + BEFEHL 2 SCHALTFLÄCHE SCHALTFLÄCHE 1 SCHALTFLÄCHE 2 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a6ff276..4c90595 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ ANDROID.STUDIO@ANDROID.COM LOGOUT SSH-REMOTE - EDIT + EDITMODE //home WELCOME TO TERAPLEX @@ -15,10 +15,6 @@ PASSWORD LOGIN LOGOUT - WLAN - KODI - OFF - ON PLEASE CONNECT TO YOUR SERVER YOU ARE LOGGED IN ON {IP} AS {USERNAME} INPUTFIELDS CANT BE EMPTY!