vorbeth

Untitled

Jan 24th, 2014
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.40 KB | None | 0 0
  1. package com.cambercreak.xzdr;
  2.  
  3.  
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.app.Dialog;
  7. import android.app.DialogFragment;
  8. import android.app.Fragment;
  9. import android.app.FragmentManager;
  10. import android.app.ProgressDialog;
  11. import android.content.DialogInterface;
  12. import android.content.Intent;
  13. import android.content.SharedPreferences;
  14. import android.os.AsyncTask;
  15. import android.os.Build;
  16. import android.os.Bundle;
  17. import android.preference.PreferenceManager;
  18. import android.util.Log;
  19. import android.view.LayoutInflater;
  20. import android.view.View;
  21. import android.view.ViewGroup;
  22. import android.widget.AdapterView;
  23. import android.widget.ArrayAdapter;
  24. import android.widget.Button;
  25. import android.widget.LinearLayout;
  26. import android.widget.ListAdapter;
  27. import android.widget.ListView;
  28. import android.widget.ProgressBar;
  29. import android.widget.SimpleAdapter;
  30. import android.widget.Spinner;
  31. import android.widget.TextView;
  32. import android.widget.Toast;
  33.  
  34. import com.cambercreak.xzdr.Utils.AvailableRecoveries;
  35. import com.cambercreak.xzdr.Utils.Prefs;
  36. import com.cambercreak.xzdr.Utils.Utilities;
  37. import com.cambercreak.xzdr.Utils.Variable;
  38. import com.cambercreak.xzdr.Utils.XzdrInstall;
  39. import com.google.gson.Gson;
  40. import com.google.gson.GsonBuilder;
  41. import com.google.gson.JsonIOException;
  42. import com.google.gson.JsonSyntaxException;
  43. import com.spazedog.lib.rootfw3.RootFW;
  44.  
  45. import org.apache.http.HttpEntity;
  46. import org.apache.http.HttpResponse;
  47. import org.apache.http.HttpStatus;
  48. import org.apache.http.client.methods.HttpGet;
  49. import org.apache.http.impl.client.DefaultHttpClient;
  50.  
  51. import java.io.IOException;
  52. import java.io.InputStream;
  53. import java.io.InputStreamReader;
  54. import java.io.Reader;
  55. import java.util.ArrayList;
  56. import java.util.HashMap;
  57. import java.util.List;
  58.  
  59.  
  60. /**
  61.  * A simple {@link android.app.Fragment} subclass.
  62.  */
  63. public class RecoveryFragment extends Fragment {
  64.  
  65.     private static final String ARG_SECTION_NUMBER = "section_number";
  66.     private static final String TAG_TITLE = "title";
  67.     private static final String TAG_VERSION = "version";
  68.  
  69.     private SharedPreferences sp;
  70.  
  71.     private ArrayList<HashMap<String, String>> relaseList =
  72.             new ArrayList<HashMap<String, String>>();
  73.     private ListView available_listview;
  74.     private ProgressBar update_progressbar;
  75.     private Button update_button;
  76.  
  77.     /**
  78.      * Returns a new instance of this fragment for the given section
  79.      * number.
  80.      */
  81.     public static RecoveryFragment newInstance(int sectionNumber) {
  82.         RecoveryFragment fragment = new RecoveryFragment();
  83.         Bundle args = new Bundle();
  84.         args.putInt(ARG_SECTION_NUMBER, sectionNumber);
  85.         fragment.setArguments(args);
  86.         return fragment;
  87.     }
  88.  
  89.     public RecoveryFragment() {
  90.         // Required empty public constructor
  91.     }
  92.  
  93.  
  94.     @Override
  95.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  96.                              Bundle savedInstanceState) {
  97.         // Inflate the layout for this fragment
  98.         return inflater.inflate(R.layout.fragment_recovery, container, false);
  99.     }
  100.  
  101.     @Override
  102.     public void onAttach(Activity activity) {
  103.         super.onAttach(activity);
  104.         ((MainActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
  105.     }
  106.  
  107.     @Override
  108.     public void onActivityCreated(Bundle savedInstanceState) {
  109.         super.onActivityCreated(savedInstanceState);
  110.         sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
  111.         available_listview =
  112.                 (ListView) getActivity().findViewById(R.id.recovery_available_listView);
  113.         update_progressbar =
  114.                 (ProgressBar) getActivity().findViewById(R.id.recovery_update_progressbar);
  115.         update_button = (Button) getActivity().findViewById(R.id.recovery_update_button);
  116.         update_button.setOnClickListener(buttonPressedListener);
  117.         getAvailableRecoveries();
  118.     }
  119.  
  120.     @Override
  121.     public void onResume() {
  122.         super.onResume();
  123.         updateUI();
  124.     }
  125.  
  126.     public void updateUI() {
  127.         List<String> mRecoveryModeList = new ArrayList<String>();
  128.         mRecoveryModeList.clear();
  129.         mRecoveryModeList.add(Variable.RCVY_PHL);
  130.         mRecoveryModeList.add(Variable.RCVY_CWM);
  131.         mRecoveryModeList.add(Variable.RCVY_TWR);
  132.         if (!Variable.INST_RCVY_PHL) mRecoveryModeList.remove(Variable.RCVY_PHL);
  133.         if (!Variable.INST_RCVY_CWM) mRecoveryModeList.remove(Variable.RCVY_CWM);
  134.         if (!Variable.INST_RCVY_TWR) mRecoveryModeList.remove(Variable.RCVY_TWR);
  135.  
  136.         LinearLayout rcv_inst =
  137.                 (LinearLayout) getActivity().findViewById(R.id.recovery_layout_installed);
  138.         LinearLayout rcv_miss =
  139.                 (LinearLayout) getActivity().findViewById(R.id.recovery_layout_not_installed);
  140.  
  141.         if (mRecoveryModeList.size() > 0) {
  142.             rcv_inst.setVisibility(View.VISIBLE);
  143.             rcv_miss.setVisibility(View.GONE);
  144.  
  145.             ArrayAdapter<String> dataAdapter =
  146.                     new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item,
  147.                             mRecoveryModeList);
  148.             dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  149.  
  150.             Spinner mRecoverySpinner =
  151.                     (Spinner) getActivity().findViewById(R.id.spinner_select_recovery);
  152.             mRecoverySpinner.setAdapter(dataAdapter);
  153.             mRecoverySpinner.setOnItemSelectedListener(itemSelectedListener);
  154.  
  155.             for (int position = 0; position < dataAdapter.getCount(); position++) {
  156.                 if (dataAdapter.getItem(position)
  157.                         .matches(sp.getString(Prefs.RECOVERY_SPINNER_SELECTED, "philz"))) {
  158.                     mRecoverySpinner.setSelection(position);
  159.                     break;
  160.                 }
  161.             }
  162.  
  163.             Button mRebootButton = (Button) getActivity().findViewById(R.id.button_reboot_recovery);
  164.             mRebootButton.setOnClickListener(buttonRebootPressedListener);
  165.         } else {
  166.             TextView noRecoveries =
  167.                     (TextView) getActivity().findViewById(R.id.textView_no_recoveries);
  168.             rcv_inst.setVisibility(View.GONE);
  169.             rcv_miss.setVisibility(View.VISIBLE);
  170.             if (Utilities.isOldVersionInstalled()) {
  171.                 noRecoveries.setText(R.string.old_recovery_found);
  172.             } else {
  173.                 noRecoveries.setText(R.string.no_recovery_found);
  174.             }
  175.         }
  176.     }
  177.  
  178.     private AdapterView.OnItemSelectedListener itemSelectedListener =
  179.             new AdapterView.OnItemSelectedListener() {
  180.  
  181.                 @Override
  182.                 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
  183.                     sp.edit().putString(Prefs.RECOVERY_SPINNER_SELECTED,
  184.                             adapterView.getItemAtPosition(i).toString()).apply();
  185.                 }
  186.  
  187.                 @Override
  188.                 public void onNothingSelected(AdapterView<?> adapterView) {
  189.  
  190.                 }
  191.             };
  192.  
  193.     private View.OnClickListener buttonRebootPressedListener = new View.OnClickListener() {
  194.  
  195.         @Override
  196.         public void onClick(View arg0) {
  197.             RebootToRecovery rtr = new RebootToRecovery();
  198.             rtr.execute();
  199.         }
  200.     };
  201.  
  202.     private View.OnClickListener buttonPressedListener = new View.OnClickListener() {
  203.  
  204.         @Override
  205.         public void onClick(View view) {
  206.             getAvailableRecoveries();
  207.         }
  208.     };
  209.  
  210.     public void getAvailableRecoveries() {
  211.         String mURL = Variable.RMTE_JSON + Build.MODEL;
  212.         if (sp.getBoolean(Prefs.BETA_ALLOW, false)) {
  213.             mURL += "&beta";
  214.         }
  215.         if (sp.getBoolean(Prefs.APLHA_ALLOW, false) && sp.getBoolean(Prefs.ALPHA_UNLOCKED, false)) {
  216.             mURL += "&account=" + Utilities.encodeAccountInfo(getActivity());
  217.         }
  218.         new GetJson().execute(mURL);
  219.     }
  220.  
  221.     private class RebootToRecovery extends AsyncTask<String, Void, String> {
  222.  
  223.         private ProgressDialog pdia;
  224.  
  225.         public RebootToRecovery() {
  226.  
  227.         }
  228.  
  229.         @Override
  230.         protected void onPreExecute() {
  231.             super.onPreExecute();
  232.             Utilities.readPropFile(getActivity());
  233.             pdia = new ProgressDialog(getActivity());
  234.             pdia.setMessage("Rebooting...");
  235.             pdia.show();
  236.         }
  237.  
  238.         @Override
  239.         protected String doInBackground(String... strings) {
  240.             try {
  241.                 Thread.sleep(1000);
  242.             } catch (InterruptedException e) {
  243.                 e.printStackTrace();
  244.             }
  245.             return null;
  246.         }
  247.  
  248.         @Override
  249.         protected void onPostExecute(String s) {
  250.             super.onPostExecute(s);
  251.             if (sp.getString(Prefs.RECOVERY_SPINNER_SELECTED, "philz").matches(Variable.RCVY_CWM)) {
  252.                 sp.edit().putString(Prefs.PROP_RECOVERY_BOOT, "cwm").commit();
  253.             }
  254.             if (sp.getString(Prefs.RECOVERY_SPINNER_SELECTED, "philz").matches(Variable.RCVY_PHL)) {
  255.                 sp.edit().putString(Prefs.PROP_RECOVERY_BOOT, "philz").commit();
  256.             }
  257.             if (sp.getString(Prefs.RECOVERY_SPINNER_SELECTED, "philz").matches(Variable.RCVY_TWR)) {
  258.                 sp.edit().putString(Prefs.PROP_RECOVERY_BOOT, "twrp").commit();
  259.             }
  260.             Utilities.writePropFile(getActivity());
  261.             RootFW root = RootFW.getSharedRoot().get();
  262.             root.shell().run("touch /cache/recovery/boot");
  263.             root.power().reboot();
  264.  
  265.         }
  266.     }
  267.  
  268.     private class GetJson extends AsyncTask<String, Void, String> {
  269.  
  270.         @Override
  271.         protected void onPreExecute() {
  272.             super.onPreExecute();
  273.             update_progressbar.setVisibility(View.VISIBLE);
  274.             update_button.setVisibility(View.GONE);
  275.             available_listview.setVisibility(View.GONE);
  276.             if (!Utilities.isOnline(getActivity())) {
  277.                 cancel(true);
  278.             }
  279.         }
  280.  
  281.         @Override
  282.         protected void onCancelled() {
  283.             super.onCancelled();
  284.             Toast.makeText(getActivity(), R.string.recovery_update_check_fail, Toast.LENGTH_SHORT)
  285.                     .show();
  286.             update_progressbar.setVisibility(View.GONE);
  287.             update_button.setVisibility(View.VISIBLE);
  288.             available_listview.setVisibility(View.GONE);
  289.         }
  290.  
  291.         @Override
  292.         protected String doInBackground(String... args) {
  293.             InputStream source = retrieveStream(args[0]);
  294.             Gson gson = new GsonBuilder().create();
  295.             Reader reader = null;
  296.             try {
  297.                 reader = new InputStreamReader(source);
  298.             } catch (Exception e) {
  299.                 if (BuildConfig.DEBUG) Log.e(Variable.DEBUG_TAG, "InputStreamReaderException");
  300.                 this.cancel(true);
  301.                 return null;
  302.             }
  303.             AvailableRecoveries response = null;
  304.             try {
  305.                 response = gson.fromJson(reader, AvailableRecoveries.class);
  306.             } catch (JsonSyntaxException e) {
  307.                 if (BuildConfig.DEBUG) Log.e(Variable.DEBUG_TAG, "JsonSyntaxException");
  308.                 this.cancel(true);
  309.                 return null;
  310.             } catch (JsonIOException e) {
  311.                 if (BuildConfig.DEBUG) Log.e(Variable.DEBUG_TAG, "JsonIOException");
  312.                 this.cancel(true);
  313.                 return null;
  314.             }
  315.             if (!response.result.isEmpty()) {
  316.                 Variable.AVAILABLE_RECOVERIES = response.result;
  317.             }
  318.             return null;
  319.         }
  320.  
  321.         @Override
  322.         protected void onPostExecute(String s) {
  323.             super.onPostExecute(s);
  324.             relaseList.clear();
  325.             if (!Variable.AVAILABLE_RECOVERIES.isEmpty()) {
  326.                 for (AvailableRecoveries.Result result : Variable.AVAILABLE_RECOVERIES) {
  327.                     HashMap<String, String> map = new HashMap<String, String>();
  328.                     map.put(TAG_TITLE, result.version.title);
  329.                     map.put(TAG_VERSION, result.version.release_version);
  330.                     relaseList.add(map);
  331.                     Log.d(Variable.DEBUG_TAG, result.version.title);
  332.                     Log.d(Variable.DEBUG_TAG, result.version.release_version);
  333.                 }
  334.                 ListAdapter adapter =
  335.                         new SimpleAdapter(getActivity(), relaseList, R.layout.recoverylist_adapter,
  336.                                 new String[]{TAG_TITLE, TAG_VERSION,},
  337.                                 new int[]{R.id.ReleaseName, R.id.ReleaseVersion});
  338.                 available_listview.setAdapter(adapter);
  339.                 available_listview.setOnItemClickListener(onItemClickListener);
  340.                 update_progressbar.setVisibility(View.GONE);
  341.                 update_button.setVisibility(View.VISIBLE);
  342.                 available_listview.setVisibility(View.VISIBLE);
  343.             } else {
  344.                 this.cancel(true);
  345.             }
  346.         }
  347.  
  348.         private AdapterView.OnItemClickListener onItemClickListener =
  349.                 new AdapterView.OnItemClickListener() {
  350.  
  351.                     @Override
  352.                     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  353.                         FragmentManager fm = getFragmentManager();
  354.                         Bundle bundle = new Bundle();
  355.                         bundle.putInt("key", i);
  356.                         RecoveryDialogue alert = new RecoveryDialogue();
  357.                         alert.setArguments(bundle);
  358.                         alert.show(fm, "Alert_Dialog");
  359.                     }
  360.                 };
  361.  
  362.         private InputStream retrieveStream(String url) {
  363.  
  364.             DefaultHttpClient client = new DefaultHttpClient();
  365.             HttpGet getRequest = new HttpGet(url);
  366.             try {
  367.                 HttpResponse getResponse = client.execute(getRequest);
  368.                 final int statusCode = getResponse.getStatusLine().getStatusCode();
  369.                 if (statusCode != HttpStatus.SC_OK) {
  370.                     Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url);
  371.                     return null;
  372.                 }
  373.                 HttpEntity getResponseEntity = getResponse.getEntity();
  374.                 return getResponseEntity.getContent();
  375.             } catch (IOException e) {
  376.                 getRequest.abort();
  377.                 Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  378.             }
  379.             return null;
  380.         }
  381.     }
  382.  
  383.     private class RecoveryDialogue extends DialogFragment {
  384.  
  385.         @Override
  386.         public Dialog onCreateDialog(Bundle savedInstanceState) {
  387.  
  388.             Bundle bundle = getArguments();
  389.             final int position = bundle.getInt("key");
  390.  
  391.             DialogInterface.OnClickListener positiveClick = new DialogInterface.OnClickListener() {
  392.                 @Override
  393.                 public void onClick(DialogInterface dialog, int which) {
  394.                     Toast.makeText(getActivity().getBaseContext(), "Installing...",
  395.                             Toast.LENGTH_SHORT).show();
  396.                     Bundle bundle = new Bundle();
  397.                     bundle.putInt("key", position);
  398.                     Intent intent = new Intent(getActivity(), XzdrInstall.class);
  399.                     intent.putExtras(bundle);
  400.                     getActivity().startService(intent);
  401.                 }
  402.             };
  403.  
  404.             DialogInterface.OnClickListener negativeClick = new DialogInterface.OnClickListener() {
  405.                 @Override
  406.                 public void onClick(DialogInterface dialog, int which) {
  407.                     /*Toast.makeText(getActivity().getBaseContext(), "No option selecting",
  408.                             Toast.LENGTH_SHORT).show();*/
  409.  
  410.                 }
  411.             };
  412.  
  413.             AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  414.             builder.setMessage(Variable.AVAILABLE_RECOVERIES.get(position).version.changelog)
  415.                     .setNegativeButton("Cancel", negativeClick)
  416.                     .setPositiveButton("Install", positiveClick).setTitle("Changelog: v" +
  417.                     Variable.AVAILABLE_RECOVERIES.get(position).version.release_version);
  418.             Dialog dialog = builder.create();
  419.             return dialog;
  420.         }
  421.     }
  422. }
Advertisement
Add Comment
Please, Sign In to add comment