Guest User

MainActivity

a guest
Mar 30th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.48 KB | None | 0 0
  1. package com.example.tim.timapp;
  2.  
  3. import android.app.AlertDialog;
  4. import android.app.Fragment;
  5. import android.app.FragmentManager;
  6. import android.content.DialogInterface;
  7. import android.os.AsyncTask;
  8. import android.os.Bundle;
  9. import android.support.design.widget.NavigationView;
  10. import android.support.v4.view.GravityCompat;
  11. import android.support.v4.widget.DrawerLayout;
  12. import android.support.v7.app.ActionBarDrawerToggle;
  13. import android.support.v7.app.AppCompatActivity;
  14. import android.support.v7.widget.Toolbar;
  15. import android.util.Base64;
  16. import android.util.Log;
  17. import android.view.Menu;
  18. import android.view.MenuItem;
  19. import android.widget.LinearLayout;
  20.  
  21. import com.example.fragments.MainFragments.FillableFragment;
  22. import com.example.fragments.MainFragments.MainFragment;
  23. import com.example.fragments.MainFragments.VariableFragments.GeneralSettingsEmptyFragment;
  24. import com.example.fragments.MainFragments.VariableFragments.GeneralSettingsVariableFragment;
  25. import com.example.fragments.MainFragments.VariableFragments.StuffManagerEmptyFragment;
  26. import com.example.fragments.MainFragments.VariableFragments.StuffManagerVariableFragment;
  27. import com.example.fragments.MainFragments.VariableFragments.VariableFragment;
  28. import com.example.fragments.MainFragments.WakeUpLightFragment;
  29. import com.example.fragments.Settings.GeneralSettingsFragment;
  30. import com.example.fragments.Settings.StuffManagerFragment;
  31.  
  32. import org.json.JSONArray;
  33. import org.json.JSONException;
  34. import org.json.JSONObject;
  35.  
  36. import java.io.BufferedReader;
  37. import java.io.IOException;
  38. import java.io.InputStream;
  39. import java.io.InputStreamReader;
  40. import java.net.HttpURLConnection;
  41. import java.net.URL;
  42. import java.util.ArrayList;
  43.  
  44. public class MainActivity extends AppCompatActivity
  45.         implements NavigationView.OnNavigationItemSelectedListener {
  46.  
  47.     private static boolean isMainShown = false;
  48.     private static boolean isSettingsShown = false;
  49.     private static boolean doSavePopup = false;
  50.     private static String backTitle = "";
  51.     private String tag = "TEST MA";
  52.     DBHandler dbHandler;
  53.  
  54.     Menu menu;
  55.  
  56.     @Override
  57.     protected void onCreate(Bundle savedInstanceState) {
  58.         super.onCreate(savedInstanceState);
  59.  
  60.         dbHandler = DBHandler.getInstance(this);
  61.  
  62.         setTitle(getString(R.string.navdrwaer_home));
  63.         setContentView(R.layout.activity_main);
  64.         isMainShown = true;
  65.         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  66.         setSupportActionBar(toolbar);
  67.  
  68.         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  69.         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
  70.                 this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
  71.         drawer.setDrawerListener(toggle);
  72.         toggle.syncState();
  73.  
  74.         NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
  75.         navigationView.setNavigationItemSelectedListener(this);
  76.  
  77. //        Menu menu = navigationView.getMenu();
  78. //        MenuItem it1 = menu.add(R.id.group1, 1, 2, "TEST DYNAMIC");
  79. //        it1.setIcon(R.drawable.ic_menu_camera);
  80.  
  81.         FragmentManager fm = getFragmentManager();
  82.         fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit();
  83.  
  84.         float amount = dbHandler.stuffTableSize();
  85.         ArrayList nameArray = dbHandler.stuffLinksNameArrayMethod();
  86.  
  87.         menu = navigationView.getMenu();
  88.         for (int i=0; i < amount; i++) {
  89.             menu.add(R.id.group1, i, 1, nameArray.get(i).toString());
  90. //            item.setIcon(R.drawable.ic_menu_camera);
  91.         }
  92.  
  93.         // Way to start app on specific page
  94.         onNavigationItemSelected(menu.findItem(R.id.nav_generalsettings));
  95.     }
  96.  
  97.     // TODO: 01-Mar-16
  98.     // TODO: 01-Mar-16 Fix and clean onBackPressed
  99.     // TODO: 01-Mar-16
  100.  
  101.     @Override
  102.     public void onBackPressed() {
  103.         Log.d("TEST", Boolean.toString(doSavePopup));
  104.         FragmentManager fm = getFragmentManager();
  105.         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  106.         if (drawer.isDrawerOpen(GravityCompat.START)) {
  107.             drawer.closeDrawer(GravityCompat.START);
  108.         } else if (isSettingsShown) {
  109.             getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
  110.             setTitle(backTitle);
  111.             isSettingsShown = false;
  112.         } else if (!isMainShown) {
  113.             fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit();
  114.             setTitle("Home");
  115.             isMainShown = true;
  116.         } else if (doSavePopup) {
  117.             new AlertDialog.Builder(MainActivity.this)
  118.                     .setMessage(R.string.generalSettingsLeaving)
  119.                     .setTitle("TEST")
  120.                     .setCancelable(true)
  121.                     .setPositiveButton(R.string.generalSettingsLeavingSave, new DialogInterface.OnClickListener() {
  122.                         @Override
  123.                         public void onClick(DialogInterface dialog, int which) {
  124.                             //TODO: Clicked Save, save.
  125.                         }
  126.                     })
  127.                     .setNegativeButton(R.string.generalSettingsLeavingDiscard, new DialogInterface.OnClickListener() {
  128.                         @Override
  129.                         public void onClick(DialogInterface dialog, int which) {
  130.                             //TODO: Clicked Discard, discard.
  131.                         }
  132.                     }).create().show();
  133. //            fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit();
  134. //            setTitle("Home");
  135.             isMainShown = true;
  136.             doSavePopup = false;
  137.             //TODO: Tidy up here, from changing to a general doSavePopup thingy.
  138.         } else {
  139.             super.onBackPressed();
  140.         }
  141.     }
  142.  
  143.     @Override
  144.     public boolean onOptionsItemSelected(MenuItem item) {
  145.         FragmentManager fm = getFragmentManager();
  146.         isMainShown = false;
  147.         isSettingsShown = true;
  148.  
  149.         //TODO Change from general-settings page to specific settings page.
  150.  
  151.         switch (item.getItemId()) {
  152.             case 0:
  153.                 fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment()).addToBackStack("backStack").commit();
  154.                 backTitle = getString(R.string.settings);
  155.                 setTitle(backTitle + " Settings");
  156.                 return true;
  157.             case 1:
  158.                 fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment()).addToBackStack("backStack").commit();
  159.                 backTitle = getString(R.string.navdrawer_timelight);
  160.                 setTitle(backTitle + " Settings");
  161.                 return true;
  162.             case 2:
  163.                 fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment()).addToBackStack("backStack").commit();
  164.                 backTitle = getString(R.string.navdrawer_togglelight);
  165.                 setTitle(backTitle + " Settings");
  166.                 return true;
  167.             case 3:
  168.                 fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment()).addToBackStack("backStack").commit();
  169.                 backTitle = getString(R.string.navdrawer_wakeuplight);
  170.                 setTitle(backTitle + " Settings");
  171.                 return true;
  172.         }
  173.  
  174.         return super.onOptionsItemSelected(item);
  175.     }
  176.  
  177.     // TODO: 01-Mar-16
  178.     // TODO: 01-Mar-16 Fix and clean onNavigationItemSelected
  179.     // TODO: 01-Mar-16
  180.  
  181.  
  182.     @SuppressWarnings("StatementWithEmptyBody")
  183.     @Override
  184.     public boolean onNavigationItemSelected(MenuItem item) {
  185.  
  186.         FragmentManager fm = getFragmentManager();
  187.         isMainShown = false;
  188.  
  189.         ArrayList<String> nameArray = dbHandler.stuffLinksNameArrayMethod();
  190.  
  191.         int id = item.getItemId();
  192.  
  193. //        if (id == R.id.nav_wakeuplight) {
  194. //            fm.beginTransaction().replace(R.id.content_frame, new WakeUpLightFragment(), getString(R.string.navdrawer_wakeuplight)).commit();
  195. //            setTitle(getString(R.string.navdrawer_wakeuplight));
  196. //            new JSONTask().execute("http://192.168.0.120:8080/json.htm?type=command&param=getuservariables", "WuL");
  197. //            doSavePopup = true;
  198. //        } else if (id == R.id.nav_togglelights) {
  199. //            fm.beginTransaction().replace(R.id.content_frame, new ToggleLightFragment(), getString(R.string.navdrawer_togglelight)).commit();
  200. //            setTitle(getString(R.string.navdrawer_togglelight));
  201. //        } else if (id == R.id.nav_timelight) {
  202. //            fm.beginTransaction().replace(R.id.content_frame, new TimeLightFragment(), getString(R.string.navdrawer_timelight)).commit();
  203. //            setTitle(getString(R.string.navdrawer_timelight));
  204. //        } else if (id == R.id.nav_generalsettings) {
  205. //            fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment(), getString(R.string.navdrawer_generalsettings)).commit();
  206. //            setTitle(getString(R.string.navdrawer_generalsettings));
  207. //        } else if (id == R.id.nav_stuffmanager) {
  208. //            fm.beginTransaction().replace(R.id.content_frame, new StuffManagerFragment(), getString(R.string.navdrawer_stuffmanager)).commit();
  209. //            setTitle(getString(R.string.navdrawer_stuffmanager));
  210. //            DrawVariableFragments();
  211. //        }
  212.  
  213. //        if (id == R.id.nav_generalsettings) {
  214. //            fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment(), getString(R.string.navdrawer_generalsettings)).commit();
  215. //            setTitle(getString(R.string.navdrawer_generalsettings));
  216.         if (id == R.id.nav_generalsettings) {
  217.             fm.beginTransaction().replace(R.id.content_frame, new GeneralSettingsFragment(), getString(R.string.navdrawer_generalsettings)).commit();
  218.             setTitle(getString(R.string.navdrawer_generalsettings));
  219.             DrawVariableFragments("GeneralSettings", "draw");
  220.         } else if (id == R.id.nav_stuffmanager) {
  221.             fm.beginTransaction().replace(R.id.content_frame, new StuffManagerFragment(), getString(R.string.navdrawer_stuffmanager)).commit();
  222.             setTitle(getString(R.string.navdrawer_stuffmanager));
  223.             DrawVariableFragments("StuffManager", "draw");
  224.         } else if (id == R.id.nav_wakeuplight) {
  225.             // TODO: 02-Mar-16 Remove this
  226.             fm.beginTransaction().replace(R.id.content_frame, new WakeUpLightFragment(), getString(R.string.navdrawer_wakeuplight)).commit();
  227.             setTitle(getString(R.string.navdrawer_wakeuplight));
  228.         } else {
  229.             Bundle args = new Bundle();
  230.             args.putInt("id", id);
  231.             Fragment fillableFragment = new FillableFragment();
  232.             fillableFragment.setArguments(args);
  233.  
  234.             fm.beginTransaction().replace(R.id.content_frame, fillableFragment, nameArray.get(id)).commit();
  235.             setTitle(nameArray.get(id));
  236.         }
  237.  
  238.         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  239.         drawer.closeDrawer(GravityCompat.START);
  240.         return true;
  241.     }
  242.  
  243.     public void DrawVariableFragments(String base,String token){
  244.         FragmentManager fm = getFragmentManager();
  245.         ArrayList<String> Data;
  246.  
  247.         dbHandler = DBHandler.getInstance(this);
  248.  
  249.         int AmountOfEntries;
  250.         int SettingsContainer;
  251.         Fragment SettingsVariableFragment;
  252.         Fragment SettingsEmptyFragment;
  253.  
  254.         if (base.equalsIgnoreCase("StuffManager")) {
  255.             Data = new ArrayList<String>() {{add("StuffManager"); add("name"); add("tag"); }};
  256.             SettingsContainer = R.id.FragmentContainer2;
  257.             SettingsVariableFragment = new StuffManagerVariableFragment();
  258.             SettingsEmptyFragment = new StuffManagerEmptyFragment();
  259.         } else if (base.equalsIgnoreCase("GeneralSettings")) {
  260.             Data = new ArrayList<String>() {{add("GeneralSettings"); add("name"); add("ip"); add("port"); add("username"); add("pass"); }};
  261.             SettingsContainer = R.id.FragmentContainerGeneralSettings;
  262.             SettingsVariableFragment = new GeneralSettingsVariableFragment();
  263.             SettingsEmptyFragment = new GeneralSettingsEmptyFragment();
  264.         } else {
  265.             Log.e(tag, "String Base not recognised");
  266.             return;
  267.         }
  268.         AmountOfEntries = dbHandler.returnArray(base, Data.get(1)).size();
  269.  
  270.         if ((dbHandler.returnArray(base, Data.get(1))).size() == 0 ) {
  271.             fm.beginTransaction().add(SettingsContainer, SettingsEmptyFragment, (base + "EmptyFragment")).commit();
  272.             fm.executePendingTransactions();
  273.             return;
  274.         }
  275.  
  276.         if (AmountOfEntries > 0) {
  277.             String EmptyFragName = (base + "EmptyFragment");
  278.             if ((fm.findFragmentByTag(EmptyFragName)) != null) {
  279.                 fm.beginTransaction().remove(fm.findFragmentByTag(EmptyFragName)).commit();
  280.                 fm.executePendingTransactions();
  281.             }
  282.             for (int i = 0; i < AmountOfEntries; i++) {
  283.                 ArrayList<String> fragmentData = new ArrayList<>();
  284.                 for (int k=1; k < Data.size(); k++) {
  285.                     int j=k-1;
  286.                     fragmentData.set(j, (dbHandler.returnArray(base, Data.get(k)).get(j)));
  287.                 }
  288.  
  289.                 if (token.equalsIgnoreCase("edit")) {
  290.                     LinearLayout linearLayout = (LinearLayout) findViewById(SettingsContainer);
  291.                     linearLayout.removeAllViews();
  292.                     DrawVariableFragments(base ,"draw");
  293.                 } else if (token.equalsIgnoreCase("add")) {
  294.                     if (fm.findFragmentByTag(fragmentData.get(i)) == null) {
  295.                         fm.beginTransaction().add(SettingsContainer, SettingsVariableFragment, fragmentData.get(0)).commit();
  296.                         fm.executePendingTransactions();
  297.                         if (base.equalsIgnoreCase("StuffManager")) {
  298.                             ((StuffManagerVariableFragment) fm
  299.                                     .findFragmentByTag(fragmentData.get(i)))
  300.                                     .setText(fragmentData.get(0), fragmentData.get(1));
  301.                         } else if (base.equalsIgnoreCase("GeneralSettings")) {
  302.                             ((GeneralSettingsVariableFragment) fm
  303.                                     .findFragmentByTag(fragmentData.get(i)))
  304.                                     .setText(fragmentData.get(0), fragmentData.get(1), fragmentData.get(2), fragmentData.get(3));
  305.                         }
  306.                     }
  307.                 } else if (token.equalsIgnoreCase("draw")) {
  308.                     fm.beginTransaction().add(SettingsContainer, SettingsVariableFragment, fragmentData.get(0)).commit();
  309.                     fm.executePendingTransactions();
  310.                     if (base.equalsIgnoreCase("StuffManager")) {
  311.                         ((StuffManagerVariableFragment) fm
  312.                                 .findFragmentByTag(fragmentData.get(i)))
  313.                                 .setText(fragmentData.get(0), fragmentData.get(1));
  314.                     } else if (base.equalsIgnoreCase("GeneralSettings")) {
  315.                         ((GeneralSettingsVariableFragment) fm
  316.                                 .findFragmentByTag(fragmentData.get(i)))
  317.                                 .setText(fragmentData.get(0), fragmentData.get(1), fragmentData.get(2), fragmentData.get(3));
  318.                     }
  319.                 }
  320.             }
  321.         } else {
  322.             Log.d("TEST", "WTF, nameArray.size != 0 && !> 0");
  323.         }
  324.     }
  325.  
  326.     private class JSONTask extends AsyncTask<String, String, String> {
  327.  
  328.         final String basicAuth = "Basic " + Base64.encodeToString("pi:pass".getBytes(), Base64.NO_WRAP);
  329.  
  330.         ArrayList<String> GlobalkArray = new ArrayList<>();
  331.         ArrayList<Integer> GlobalvArray = new ArrayList<>();
  332.  
  333.         @Override
  334.         protected String doInBackground(String... params) {
  335.             HttpURLConnection connection = null;
  336.             BufferedReader reader = null;
  337.             try {
  338.                 URL url = new URL(params[0]);
  339.                 connection = (HttpURLConnection) url.openConnection();
  340.                 connection.setRequestProperty("Authorization", basicAuth);
  341.                 connection.connect();
  342.  
  343.                 InputStream stream = connection.getInputStream();
  344.  
  345.                 reader = new BufferedReader(new InputStreamReader(stream));
  346.  
  347.                 StringBuilder buffer = new StringBuilder();
  348.                 String line;
  349.                 while ((line = reader.readLine()) != null) {
  350.                     buffer.append(line);
  351.                 }
  352.  
  353.                 try {
  354.                     JSONObject jsonRootObject = new JSONObject(buffer.toString());
  355.  
  356.                     JSONArray jsonArray = jsonRootObject.optJSONArray("result");
  357.                     ArrayList<String> kArray= new ArrayList<>();
  358.                     ArrayList<Integer> vArray= new ArrayList<>();
  359.                     for (int i = 0; i < jsonArray.length(); i++) {
  360.                         JSONObject jsonObject = jsonArray.getJSONObject(i);
  361.  
  362.                         int idx = Integer.parseInt(jsonObject.optString("idx"));
  363.                         String name = jsonObject.optString("Name");
  364.                         int value = Integer.parseInt(jsonObject.optString("Value"));
  365.  
  366.                         kArray.add(i, name);
  367.                         vArray.add(i, value);
  368.  
  369.                     }
  370.                     int j = 0;
  371.                     for (int i=0; i < kArray.size(); i++){
  372.                         if ((kArray.get(i)).contains(params[1])){
  373.                             GlobalkArray.add(j, kArray.get(i));
  374.                             GlobalvArray.add(j, vArray.get(i));
  375.                             j++;
  376.                         } else {
  377.                             Log.d("Array", "This value (" + kArray.get(i) + ") does not contain the parameter (" + params[1] + ")");
  378. //                            Do nothing, filters out all variables that do NOT have the given parameter in it.
  379.                         }
  380.                     }
  381.                 } catch (JSONException e) {e.printStackTrace();}
  382.  
  383.                 return "true";
  384.  
  385.             } catch (IOException e) {
  386.                 e.printStackTrace();
  387.             } finally {
  388.                 if (connection != null) {
  389.                     connection.disconnect();
  390.                 }
  391.                 try {
  392.                     if (reader != null) {
  393.                         reader.close();
  394.                     }
  395.                 } catch (IOException e) {
  396.                     e.printStackTrace();
  397.                 }
  398.             }
  399.             return null;
  400.         }
  401.  
  402.         @Override
  403.         protected void onPostExecute (String result){
  404.             super.onPostExecute(result);
  405.             FragmentManager fm = getFragmentManager();
  406.             if (result != null) {
  407.                 for (int i=0; i < GlobalkArray.size(); i++) {
  408.                     fm.beginTransaction().add(R.id.FragmentContainer, new VariableFragment(), "VariableFragment").commit();
  409.                     fm.executePendingTransactions();
  410.                     ((VariableFragment)getFragmentManager().findFragmentByTag("VariableFragment")).setTextView(GlobalkArray.get(i));
  411.                     ((VariableFragment)getFragmentManager().findFragmentByTag("VariableFragment")).setEditText(GlobalvArray.get(i).toString());
  412.                 }
  413.             } else {
  414.                 Log.e("OnPostExecute", "Result is null");
  415.             }
  416.         }
  417.     }
  418. }
Add Comment
Please, Sign In to add comment