From 512f70b1519858c340de69328fad6eb4a2a5eb29 Mon Sep 17 00:00:00 2001 From: Jerry Wu Date: Mon, 16 Jul 2018 01:48:36 +0800 Subject: [PATCH] Add change password fragment --- .../tech/goda/studyck/ChpassFragment.java | 205 ++++++++++++++++++ .../java/tech/goda/studyck/MainActivity.java | 66 +++--- .../main/java/tech/goda/studyck/Network.java | 2 + app/src/main/res/layout/app_bar_main.xml | 6 +- app/src/main/res/layout/content_main.xml | 22 +- app/src/main/res/layout/fragment_chpass.xml | 172 +++++++++++++++ .../main/res/menu/activity_main_drawer.xml | 21 +- 7 files changed, 427 insertions(+), 67 deletions(-) create mode 100644 app/src/main/java/tech/goda/studyck/ChpassFragment.java create mode 100644 app/src/main/res/layout/fragment_chpass.xml diff --git a/app/src/main/java/tech/goda/studyck/ChpassFragment.java b/app/src/main/java/tech/goda/studyck/ChpassFragment.java new file mode 100644 index 0000000..a696f19 --- /dev/null +++ b/app/src/main/java/tech/goda/studyck/ChpassFragment.java @@ -0,0 +1,205 @@ +package tech.goda.studyck; + + import android.content.Context; + import android.graphics.drawable.Drawable; + import android.net.Uri; + import android.os.AsyncTask; + import android.os.Bundle; + import android.support.v4.app.Fragment; + import android.support.v4.app.FragmentTransaction; + import android.util.Log; + import android.view.LayoutInflater; + import android.view.View; + import android.view.ViewGroup; + import android.widget.Button; + import android.widget.EditText; + import android.widget.ImageView; + import android.widget.TextView; + import android.widget.Toast; + + import org.jsoup.Jsoup; + import org.jsoup.nodes.Document; + import org.jsoup.nodes.Element; + + import java.util.HashMap; + import java.util.Map; + + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link ChpassFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link ChpassFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class ChpassFragment extends Fragment { + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private EditText account, oldPass, newPass, newPassConf, code; + private Button button; + Bundle bundle; + + private OnFragmentInteractionListener mListener; + private ImageView imageView; + + public ChpassFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ChpassFragment. + */ + // TODO: Rename and change types and number of parameters + public static ChpassFragment newInstance(String param1, String param2) { + ChpassFragment fragment = new ChpassFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_chpass, container, false); + bundle = this.getArguments(); + + button = view.findViewById(R.id.button); + newPass = view.findViewById(R.id.passwordNew); + oldPass = view.findViewById(R.id.passwordOld); + account = view.findViewById(R.id.account); + code = view.findViewById(R.id.code); + newPassConf = view.findViewById(R.id.passwordConf); + imageView = view.findViewById(R.id.imageView); + + try{ + account.setText(bundle.getString("account")); + } catch(NullPointerException e){ + e.printStackTrace(); + } + + + + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + //Toast.makeText(getContext(), "Hello Toast", Toast.LENGTH_SHORT).show(); + final Map params = new HashMap<>(); + params.put("username", account.getText().toString()); + params.put("oldPassword", oldPass.getText().toString()); + params.put("newPassword1", newPass.getText().toString()); + params.put("newPassword2", newPassConf.getText().toString()); + params.put("f_magiccode", code.getText().toString()); + params.put("submitted", "變更"); // this field must have value to make system work + + new Thread(new Runnable() { + @Override + public void run() { + final String response = Network.httpsRequestPost(Network.CHANGE_PWD_SAVE, params); // Query this page to get the confirm code + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + String str = ""; + Document doc = Jsoup.parse(response); + if(!doc.select(".msg_no").isEmpty()){ + Element error = doc.selectFirst(".msg_no").selectFirst("p"); + str = error.text(); + } + else if(!doc.select(".msg_yes").isEmpty()){ + Element success = doc.selectFirst(".msg_yes").selectFirst("p"); + str = success.text(); + // TODO: switch fragment here + /*Fragment fragment = new ChpassFragment(); + FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.content_frame, fragment); + ft.commit();*/ + } + else{ + str = "驗證碼錯誤"; + } + Toast.makeText(getContext(), str, Toast.LENGTH_SHORT).show(); + + Log.e("TAG_INSIDE", response); + } + }); + } + + }).start(); + } + }); + + new Thread(new Runnable() { + @Override + public void run() { + Network.httpsRequestPost(Network.CHANGE_PWD_URI, new HashMap()); // Query this page to get the confirm code + final Drawable drawable = Network.getDrawable(Network.CHANGE_PWD_CODE); + Log.e("TAG", String.valueOf(drawable==null)); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + Log.e("TAG_INSIDE", String.valueOf(drawable==null)); + imageView.setImageDrawable(drawable); + } + }); + } + + }).start(); + return view; + } + + // TODO: Rename method, update argument and hook method into UI event + public void onButtonPressed(Uri uri) { + if (mListener != null) { + mListener.onFragmentInteraction(uri); + } + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + /*if (context instanceof OnFragmentInteractionListener) { + mListener = (OnFragmentInteractionListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement OnFragmentInteractionListener"); + }*/ + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnFragmentInteractionListener { + // TODO: Update argument type and name + void onFragmentInteraction(Uri uri); + } +} diff --git a/app/src/main/java/tech/goda/studyck/MainActivity.java b/app/src/main/java/tech/goda/studyck/MainActivity.java index c53d93f..03efbc7 100644 --- a/app/src/main/java/tech/goda/studyck/MainActivity.java +++ b/app/src/main/java/tech/goda/studyck/MainActivity.java @@ -18,6 +18,8 @@ import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; import android.support.v4.provider.DocumentFile; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; @@ -49,22 +51,25 @@ public class MainActivity extends AppCompatActivity private static final int PICK_FILE_REQUEST = 0; private static final int LOGIN = 1; - TextView messageText; + /*TextView messageText; Button uploadButton, choose; EditText editFileName; ImageView imageView; String uploadServerUri = null; InputStream in; - String fileName; + Button button3; + String fileName;*/ String loginResponse; /********** File Path *************/ String uploadFilePath = Environment.getExternalStorageDirectory().getPath() + "/test.png"; - Button button3; + KeyStoreHelper keyStoreHelper; SharedPreferencesHelper preferencesHelper; private View header; + private TextView navAccount; + private TextView navName; @Override protected void onCreate(Bundle savedInstanceState) { @@ -72,12 +77,12 @@ public class MainActivity extends AppCompatActivity setContentView(R.layout.activity_main); Log.e("Directory", uploadFilePath); - uploadButton = findViewById(R.id.uploadButton); + /*uploadButton = findViewById(R.id.uploadButton); choose = findViewById(R.id.choose); messageText = findViewById(R.id.messageText); editFileName = findViewById(R.id.fileName); button3 = findViewById(R.id.button3); - imageView = findViewById(R.id.imageView); + imageView = findViewById(R.id.imageView);*/ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -101,7 +106,7 @@ public class MainActivity extends AppCompatActivity preferencesHelper = new SharedPreferencesHelper(getApplicationContext()); keyStoreHelper = new KeyStoreHelper(getApplicationContext(), preferencesHelper); - messageText.setText("Uploading file path : " + uploadFilePath); + /*messageText.setText("Uploading file path : " + uploadFilePath); //uploadServerUri = "http://study.ck.tp.edu.tw/login_chk.asp"; @@ -147,7 +152,7 @@ public class MainActivity extends AppCompatActivity public void onClick(View v) { showFileChooser(); } - }); + });*/ String encryptedText = preferencesHelper.getInput(); final String mEmail = preferencesHelper.getString(SharedPreferencesHelper.PREF_AC); @@ -199,12 +204,12 @@ public class MainActivity extends AppCompatActivity private void LoginSuccess(String account, String password) { View layout = findViewById(android.R.id.content); - TextView navName = header.findViewById(R.id.userName); - TextView navAccount = header.findViewById(R.id.userAccount); + navName = header.findViewById(R.id.userName); + navAccount = header.findViewById(R.id.userAccount); Toast.makeText(getApplicationContext(), "登入成功!!", Toast.LENGTH_SHORT).show(); Document doc = Jsoup.parse(loginResponse); String name = doc.select("form > font").first().text(); - messageText.setText(name); + //messageText.setText(name); name = name.substring(0, name.length()-2); // 扣除 "您好" navName.setText(name); navAccount.setText(account); @@ -270,7 +275,7 @@ public class MainActivity extends AppCompatActivity switch (requestCode) { case PICK_FILE_REQUEST: - if (resultCode == RESULT_OK) { + /*if (resultCode == RESULT_OK) { if (data == null) { //no data present return; @@ -285,10 +290,10 @@ public class MainActivity extends AppCompatActivity try { if (isVirtualFile(selectedFileUri)) { - Log.e("GetPath", "This is virtual file"); - in = getInputStreamForVirtualFile(selectedFileUri, "*/*"); + Log.e("GetPath", "This is virtual file");*/ + //in = getInputStreamForVirtualFile(selectedFileUri, "*/*"); - } else { + /*} else { in = getContentResolver().openInputStream(selectedFileUri); } @@ -297,7 +302,7 @@ public class MainActivity extends AppCompatActivity e.printStackTrace(); Log.e("GetPathError", e.toString()); } - } + }*/ /*if(uploadFilePath != null && !uploadFilePath.equals("")){ messageText.setText(uploadFilePath); }else{ @@ -361,12 +366,13 @@ public class MainActivity extends AppCompatActivity return super.onOptionsItemSelected(item); } - @SuppressWarnings("StatementWithEmptyBody") + @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); - + Fragment fragment = null; + Bundle bundle = new Bundle(); if (id == R.id.nav_file) { } else if (id == R.id.nav_site) { @@ -380,23 +386,17 @@ public class MainActivity extends AppCompatActivity } else if (id == R.id.nav_info) { } else if (id == R.id.nav_passwd) { + fragment = new ChpassFragment(); + String account = navAccount.getText().toString(); + bundle.putString("account", account); + } + setTitle(item.getTitle()); + if (fragment != null) { + fragment.setArguments(bundle); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.content_frame, fragment); + ft.commit(); - new Thread(new Runnable() { - @Override - public void run() { - Network.httpsRequestPost(Network.CHANGE_PWD_URI, new HashMap()); - final Drawable drawable = Network.getDrawable("https://ldap.ck.tp.edu.tw/admin/code.php"); - Log.e("TAG", String.valueOf(drawable==null)); - runOnUiThread(new Runnable() { - @Override - public void run() { - Log.e("TAG_INSIDE", String.valueOf(drawable==null)); - imageView.setImageDrawable(drawable); - } - }); - } - - }).start(); } Toast.makeText(getApplicationContext(), "你點選了!!", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/tech/goda/studyck/Network.java b/app/src/main/java/tech/goda/studyck/Network.java index b4c9191..a406331 100644 --- a/app/src/main/java/tech/goda/studyck/Network.java +++ b/app/src/main/java/tech/goda/studyck/Network.java @@ -34,6 +34,8 @@ public class Network { public static final String LOGIN_URI = "http://study.ck.tp.edu.tw/login_chk.asp"; public static final String LOGOUT_URI = "http://study.ck.tp.edu.tw/logout.asp"; public static final String CHANGE_PWD_URI = "https://ldap.ck.tp.edu.tw/admin/chpass.php"; + public static final String CHANGE_PWD_CODE = "https://ldap.ck.tp.edu.tw/admin/code.php"; + public static final String CHANGE_PWD_SAVE = "https://ldap.ck.tp.edu.tw/admin/chpass_save.php"; public static String uploadFile(String sourceFileUri, InputStream in, String uploadFileName) { diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 16db609..41b33fe 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -20,7 +20,11 @@ - + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index b9eb2f3..b9719a9 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context="tech.goda.studyck.MainActivity"> - + app:layout_constraintGuide_percent="0.5" /--> - + diff --git a/app/src/main/res/layout/fragment_chpass.xml b/app/src/main/res/layout/fragment_chpass.xml new file mode 100644 index 0000000..707c590 --- /dev/null +++ b/app/src/main/res/layout/fragment_chpass.xml @@ -0,0 +1,172 @@ + + + + + + + + + +