diff --git a/Android Project/PersonalTutorService/.idea/compiler.xml b/Android Project/PersonalTutorService/.idea/compiler.xml index 9a8b7e5..96cc43e 100644 --- a/Android Project/PersonalTutorService/.idea/compiler.xml +++ b/Android Project/PersonalTutorService/.idea/compiler.xml @@ -1,7 +1,6 @@ - \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/build.gradle b/Android Project/PersonalTutorService/app/build.gradle index 93d1e82..98ff88d 100644 --- a/Android Project/PersonalTutorService/app/build.gradle +++ b/Android Project/PersonalTutorService/app/build.gradle @@ -1,14 +1,16 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 21 + compileSdkVersion 'Google Inc.:Google APIs:23' buildToolsVersion '21.1.2' + useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "edu.uta.cse.personaltutorservice" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 21 versionCode 1 versionName "1.0" + multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -20,15 +22,16 @@ android { productFlavors { } } - +apply plugin: 'com.android.application' dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' - - - compile 'com.android.support:appcompat-v7:21.0.3' + compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.google.code.gson:gson:2.6.1' compile 'com.google.maps:google-maps-services:0.1.11' + compile 'com.android.support:appcompat-v7:24.0.0-alpha1' + compile 'com.google.android.gms:play-services:8.4.0' + compile 'com.google.android.gms:play-services-ads:8.4.0' + compile 'com.android.support:design:23.2.1' compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:cardview-v7:21.+' compile 'com.android.support:recyclerview-v7:21.+' diff --git a/Android Project/PersonalTutorService/app/src/androidTest/java/edu/uta/cse/personaltutorservice/ApplicationTest.java b/Android Project/PersonalTutorService/app/src/androidTest/java/edu/uta/cse/personaltutorservice/ApplicationTest.java index e83ca59..e3d447e 100644 --- a/Android Project/PersonalTutorService/app/src/androidTest/java/edu/uta/cse/personaltutorservice/ApplicationTest.java +++ b/Android Project/PersonalTutorService/app/src/androidTest/java/edu/uta/cse/personaltutorservice/ApplicationTest.java @@ -3,7 +3,7 @@ import android.app.Application; import android.test.AndroidTestRunner; import android.test.ApplicationTestCase; -import android.support.test.runner.*; + diff --git a/Android Project/PersonalTutorService/app/src/debug/res/values/google_maps_api.xml b/Android Project/PersonalTutorService/app/src/debug/res/values/google_maps_api.xml new file mode 100644 index 0000000..01e20d1 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/debug/res/values/google_maps_api.xml @@ -0,0 +1,21 @@ + + + + AIzaSyBBTe4rX8CaFTRqU53UcgKbuaKMlCZpFqY + + diff --git a/Android Project/PersonalTutorService/app/src/main/AndroidManifest.xml b/Android Project/PersonalTutorService/app/src/main/AndroidManifest.xml index 5e361c3..22a6187 100644 --- a/Android Project/PersonalTutorService/app/src/main/AndroidManifest.xml +++ b/Android Project/PersonalTutorService/app/src/main/AndroidManifest.xml @@ -6,6 +6,13 @@ + + + @@ -22,21 +29,41 @@ + android:parentActivityName=".Activities.LoginActivity"> + android:value=".Activities.LoginActivity" /> + android:parentActivityName=".Activities.LoginActivity"> + + + + + + + android:value=".Activities.LoginActivity" /> + diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/LoginActivity.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/LoginActivity.java new file mode 100644 index 0000000..9e73d1b --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/LoginActivity.java @@ -0,0 +1,216 @@ +package edu.uta.cse.personaltutorservice.Activities; + +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import java.security.MessageDigest; + +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Model_Objects.User; + +public class LoginActivity extends Activity { + + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String loginmethod = "Authenticate/"; + Button registerButton; + Button loginButton; + EditText usernameEditText, passwordEditText; + String username, password; + ProgressBar loginprogress; + User user; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout); + // layout.setBackgroundColor(Color.parseColor("#03A9F4")); + user = new User(); + registerButton = (Button) findViewById(R.id.RegisterButton); + registerButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getApplicationContext(), RegisterActivity.class); + startActivity(intent); + } + }); + loginprogress = (ProgressBar) findViewById(R.id.loginProgressBar); + usernameEditText = (EditText) findViewById(R.id.txtUserName); + passwordEditText = (EditText) findViewById(R.id.txtPassword); + + loginButton = (Button) findViewById(R.id.loginButton); + loginButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + /*if (usernameEditText.getText().length()==0 || usernameEditText.getText().toString()=="" || !RegisterActivity.isValidEmail( usernameEditText.getText().toString()) ) { + Toast.makeText(LoginActivity.this, "Please Enter Valid Email", Toast.LENGTH_SHORT).show(); + } else if (passwordEditText.getText().length()==0 || passwordEditText.getText().toString()=="") { + Toast.makeText(LoginActivity.this, "Please Enter Password", Toast.LENGTH_SHORT).show(); + } else { + username = usernameEditText.getText().toString(); + password = md5(passwordEditText.getText().toString()); + AuthenticatorAsyncTask task = new AuthenticatorAsyncTask(); + task.execute(); + + }*/ + //username validation + if (usernameEditText.getText().length() == 0 || usernameEditText.getText().toString() == "") { + usernameEditText.setError("Email Field is Required"); + } else if (!RegisterActivity.isValidEmail(usernameEditText.getText().toString())) { + usernameEditText.setError("Please Enter a Valid Email"); + } else { + usernameEditText.setError(null); + } + + if (passwordEditText.getText().length() == 0 || passwordEditText.getText().toString() == "") { + passwordEditText.setError("Password Field is Required"); + } else { + passwordEditText.setError(null); + } + + if(usernameEditText.getError() ==null && passwordEditText.getError() ==null){ + username = usernameEditText.getText().toString(); + password = md5(passwordEditText.getText().toString()); + AuthenticatorAsyncTask task = new AuthenticatorAsyncTask(); + task.execute(); + } + + + } + }); + + + } + + public static final String md5(final String toEncrypt) { + try { + final MessageDigest digest = MessageDigest.getInstance("md5"); + digest.update(toEncrypt.getBytes()); + final byte[] bytes = digest.digest(); + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + sb.append(String.format("%02X", bytes[i])); + } + return sb.toString().toLowerCase(); + } catch (Exception exc) { + return ""; // Impossibru! + } + } + + public User authenticateUser(String username, String password) { + User user = new User(); + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + loginmethod + username + "/" + password; + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + user = User.parseUserjsonToJavaObject(result); + Log.w("PTS-Android", "User:" + user.toString()); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + + return user; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_login, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + private class AuthenticatorAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + loginprogress.setVisibility(View.VISIBLE); + + } + + @Override + protected void onPostExecute(Void aVoid) { + loginprogress.setVisibility(View.GONE); + if (user.getEmail() == null) { + Toast.makeText(LoginActivity.this, "Invalid User Name / Password", Toast.LENGTH_LONG).show(); + } else { + Intent mainIntent = new Intent(getApplicationContext(), MainActivity.class); + //session to store the user ID + SharedPreferences sharedPreferences = getSharedPreferences("MyPref",MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("UserId", String.valueOf(user.getUserId())); + editor.putString("FirstName", user.getFirstName()); + editor.putString("LastName", user.getLastName()); + editor.putString("Email",user.getEmail()); + editor.putString("PhoneNumber",user.getPhoneNumber()); + String address = user.getAddress().getAddressLine1()+", "; + if(user.getAddress().getAddressLine2()!=""){ + address+=user.getAddress().getAddressLine2()+", "; + } + address+=user.getAddress().getCity()+", "; + address+=user.getAddress().getState()+"- "; + address+=user.getAddress().getZipCode(); + editor.putString("Address",address); + editor.putString("User-Lattitude",user.getAddress().getLattitude()); + editor.putString("User-Longitude",user.getAddress().getLongitude()); + editor.commit(); + startActivity(mainIntent); + } + } + + @Override + protected Void doInBackground(Void... params) { + user = authenticateUser(username, password); + return null; + } + + @Override + protected void onProgressUpdate(Void... values) { + loginprogress.animate(); + } + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/MainActivity.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/MainActivity.java new file mode 100644 index 0000000..46b8a1d --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/MainActivity.java @@ -0,0 +1,143 @@ +package edu.uta.cse.personaltutorservice.Activities; + +import android.app.Activity; +import android.content.SharedPreferences; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.app.ActionBar; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.support.v4.widget.DrawerLayout; + +import edu.uta.cse.personaltutorservice.Fragments.HomeFragment; +import edu.uta.cse.personaltutorservice.Fragments.NavigationDrawerFragment; +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Fragments.registerTutorService_Fragment; +import edu.uta.cse.personaltutorservice.Fragments.viewTutorProfile_Fragment; + +public class MainActivity extends ActionBarActivity + implements NavigationDrawerFragment.NavigationDrawerCallbacks { + + /** + * Fragment managing the behaviors, interactions and presentation of the navigation drawer. + */ + private NavigationDrawerFragment mNavigationDrawerFragment; + + /** + * Used to store the last screen title. For use in {@link #restoreActionBar()}. + */ + private CharSequence mTitle; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + SharedPreferences sharedPreferences = getSharedPreferences("MyPref",MODE_PRIVATE); + String userId = sharedPreferences.getString("UserId",null); + if(userId==null){ + onBackPressed(); + } + + mNavigationDrawerFragment = (NavigationDrawerFragment) + getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); + mTitle = getTitle(); + + // Set up the drawer. + mNavigationDrawerFragment.setUp( + R.id.navigation_drawer, + (DrawerLayout) findViewById(R.id.drawer_layout)); + } + + @Override + public void onNavigationDrawerItemSelected(int position) { + + android.support.v4.app.Fragment objFragment = null; + + switch (position){ + + case 0: + objFragment = new HomeFragment(); + break; + case 1: + objFragment= new registerTutorService_Fragment(); + break; + case 2: + objFragment= new viewTutorProfile_Fragment(); + break; + } + + // update the main content by replacing fragments + FragmentManager fragmentManager = getSupportFragmentManager(); + fragmentManager.beginTransaction() + .replace(R.id.container,objFragment) + .commit(); + } + + public void onSectionAttached(int number) { + switch (number) { + case 1: + mTitle = "Home"; + break; + case 2: + mTitle = getString(R.string.title_section1); + break; + case 3: + mTitle = getString(R.string.title_section2); + break; + /*case 3: + mTitle = getString(R.string.title_section2); + break;*/ + } + } + + public void restoreActionBar() { + ActionBar actionBar = getSupportActionBar(); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setTitle(mTitle); + } + + /** + * A placeholder fragment containing a simple view. + */ + public static class PlaceholderFragment extends Fragment { + /** + * The fragment argument representing the section number for this + * fragment. + */ + private static final String ARG_SECTION_NUMBER = "section_number"; + + public PlaceholderFragment() { + } + + /** + * Returns a new instance of this fragment for the given section + * number. + */ + public static PlaceholderFragment newInstance(int sectionNumber) { + PlaceholderFragment fragment = new PlaceholderFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_SECTION_NUMBER, sectionNumber); + fragment.setArguments(args); + return fragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_main, container, false); + return rootView; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + ((MainActivity) activity).onSectionAttached( + getArguments().getInt(ARG_SECTION_NUMBER)); + } + } + +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/NearbyTutorsActivity.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/NearbyTutorsActivity.java new file mode 100644 index 0000000..78ff25c --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/NearbyTutorsActivity.java @@ -0,0 +1,192 @@ +package edu.uta.cse.personaltutorservice.Activities; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.support.v4.app.FragmentActivity; +import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; + +import com.google.android.gms.maps.CameraUpdate; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.LatLngBounds; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; +import com.google.gson.Gson; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; + +import edu.uta.cse.personaltutorservice.Request_Objects.NearbyServicesResponse; +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Model_Objects.Service; + +public class NearbyTutorsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnInfoWindowClickListener { + + private GoogleMap mMap; + public String lattitude,longitude; + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String getNearestTutorsmethod = "GetNearestTutors/"; + public String userId; + public NearbyServicesResponse services = new NearbyServicesResponse(); + LatLngBounds.Builder builder = new LatLngBounds.Builder(); + public HashMap idtoUserId = new HashMap(); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_nearby_tutors); + + NearbyTutorsAsyncTask task = new NearbyTutorsAsyncTask(); + task.execute(); + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + mapFragment.getMapAsync(this); + } + + + /** + * Manipulates the map once available. + * This callback is triggered when the map is ready to be used. + * This is where we can add markers or lines, add listeners or move the camera. In this case, + * we just add a marker near Sydney, Australia. + * If Google Play services is not installed on the device, the user will be prompted to install + * it inside the SupportMapFragment. This method will only be triggered once the user has + * installed Google Play services and returned to the app. + */ + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + mMap.setOnInfoWindowClickListener(this); + if(services!=null && services.getServices()!=null){ + //Services list = new Services(); + List list = services.getServices().getServices(); + Service[] services_list = list.toArray(new Service[list.size()]); + for(Service s : services_list){ + if(s.getUser().getUserId() == Integer.parseInt(userId)) { + LatLng userLocation = new LatLng(Double.parseDouble(s.getServiceLattitude()),Double.parseDouble(s.getServiceLongitude())); + + Marker marker = mMap.addMarker(new MarkerOptions().position(userLocation).title("My Location").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); + // idtoUserId.put(marker.getId(),s.getUser().getUserId()+""); + builder.include(userLocation); + mMap.moveCamera(CameraUpdateFactory.newLatLng(userLocation)); + } + else{ + LatLng serviceLocation = new LatLng(Double.parseDouble(s.getServiceLattitude()),Double.parseDouble(s.getServiceLongitude())); + DecimalFormat df = new DecimalFormat("#.##"); + builder.include(serviceLocation); + String miles = df.format(s.getMiles()); + Marker marker = mMap.addMarker(new MarkerOptions().position(serviceLocation).title(s.getServiceName() + "(" + miles + " miles)")); + // idtoUserId.put(marker.getId(),s.getUser().getUserId()+""); + idtoUserId.put(marker.getId(),s.getServiceId()+""); + mMap.moveCamera(CameraUpdateFactory.newLatLng(serviceLocation)); + } + } + LatLngBounds bounds = builder.build(); + int padding = 0; // offset from edges of the map in pixels + CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding); + googleMap.animateCamera(cu); + } + + + + + + // Add a marker in Sydney and move the camera + // LatLng sydney = new LatLng(-34, 151); + // mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); + //mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); + } + @Override + public void onInfoWindowClick(Marker marker){ + Log.w("PTS-Android",marker.getId()); + + Log.w("PTS-Android", "Service Id -->" + idtoUserId.get(marker.getId())); + Intent intent = new Intent(getApplicationContext(), SubjectProfileActivity.class); + intent.putExtra("SERVICE_ID", idtoUserId.get(marker.getId())); + startActivity(intent); + + } + private String getNearestTutors(){ + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + getNearestTutorsmethod + lattitude.trim() + "/" + longitude.trim(); + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + Gson gson = new Gson(); + services = gson.fromJson(result,NearbyServicesResponse.class); + + Log.w("PTS-Android", "Services:" + services.toString()); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + + + return result; + } + private class NearbyTutorsAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + // super.onPreExecute(); + // progressBar.setVisibility(View.VISIBLE); + SharedPreferences sharedPreferences = getSharedPreferences("MyPref", MODE_PRIVATE); + lattitude = sharedPreferences.getString("User-Lattitude", "NA"); + longitude = sharedPreferences.getString("User-Longitude","NA"); + userId = sharedPreferences.getString("UserId",null); + + } + + @Override + protected void onPostExecute(Void aVoid) { + // super.onPostExecute(aVoid); + // progressBar.setVisibility(View.GONE); + + if(services.getServices().getServices().size()==1 && services.getServices().getServices().get(0).getUser().getUserId()==Integer.parseInt(userId) ){ + Toast.makeText(NearbyTutorsActivity.this, "No Services Available near your location", Toast.LENGTH_SHORT).show(); + onMapReady(mMap); + } + else{ + //call the on map ready because we got the service nw only + onMapReady(mMap); + } + } + + @Override + protected Void doInBackground(Void... params) { + String Result = getNearestTutors(); + return null; + } + + @Override + protected void onProgressUpdate(Void... values) { + + + } + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/RegisterActivity.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/RegisterActivity.java new file mode 100644 index 0000000..110f9d2 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/RegisterActivity.java @@ -0,0 +1,520 @@ +package edu.uta.cse.personaltutorservice.Activities; + +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.app.ActionBarActivity; +import android.util.Log; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import edu.uta.cse.personaltutorservice.Model_Objects.Address; +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Model_Objects.User; + +public class RegisterActivity extends ActionBarActivity { + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String checkmethod = "CheckAvailability/"; + public static String registermethod = "Register"; + public static String address_hostname = "http://api.matchbox.io/address/"; + public static String address_addr_1 = "?addr_1="; + public static String address_addr_2 = "?addr_2="; + public static String address_city_state_zip = "&city_state_zip="; + public String address_validate_request = ""; + public String registerResult = ""; + Spinner userTypeSpinner; + EditText firstNameEditText, lastNameEditText, emailEditText, passwordEditText, confirmPasswordEditText; + TextView spinnerErrorText; + EditText addressLine1Text, addressLine2Text, cityEditText, zipEditText, phoneEditText; + AutoCompleteTextView stateEditText; + Button registerButton; + String firstName, lastName, email, password, userType, addressLine1, addressLine2, city, state, zipcode, phone, lattitude, longitude; + boolean isuserNameAvailable, isAddressValidated; + String registerRequestJson; + ProgressBar progressBar; + + public void emailOnFocusChange(boolean hasFocus){ + if (!hasFocus) { + + if (emailEditText.getText().length() > 0 && emailEditText.getText().toString() != "" && isValidEmail(emailEditText.getText().toString())) { + email = emailEditText.getText().toString(); + CheckAvailabilityAsyncTask task = new CheckAvailabilityAsyncTask(); + task.execute(); + + } else { + Toast.makeText(RegisterActivity.this, "Please Enter Valid Email", Toast.LENGTH_SHORT).show(); + } + + } + } + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + String[] states = getResources().getStringArray(R.array.statearray); + lattitude = "NA"; + longitude = "NA"; + isAddressValidated = false; + setContentView(R.layout.activity_register); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + registerButton = (Button) findViewById(R.id.SignUpButton); + userTypeSpinner = (Spinner) findViewById(R.id.userTypeSpinner); + firstNameEditText = (EditText) findViewById(R.id.txtFirstName); + lastNameEditText = (EditText) findViewById(R.id.txtLastName); + emailEditText = (EditText) findViewById(R.id.txtEmail); + // spinnerErrorText = (TextView)findViewById(R.id.spinnerErrorText); + progressBar = (ProgressBar)findViewById(R.id.loginProgressBar); + emailEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + emailOnFocusChange(hasFocus); + } + }); + passwordEditText = (EditText) findViewById(R.id.txtPassword); + confirmPasswordEditText = (EditText) findViewById(R.id.txtConfirmPassword); + userTypeSpinner = (Spinner) findViewById(R.id.userTypeSpinner); + + addressLine1Text = (EditText) findViewById(R.id.txtAddressLine1); + addressLine2Text = (EditText) findViewById(R.id.txtAddressLine2); + cityEditText = (EditText) findViewById(R.id.txtCity); + stateEditText = (AutoCompleteTextView) findViewById(R.id.txtState); + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, states); + + stateEditText.setAdapter(adapter); + zipEditText = (EditText) findViewById(R.id.txtZipCode); + + phoneEditText = (EditText) findViewById(R.id.txtPhoneNumber); + + registerButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (firstNameEditText.getText().length() == 0 || firstNameEditText.getText().toString().equals("")) { + firstNameEditText.setError("First Name Field is Required"); + } else { + firstNameEditText.setError(null); + firstName = firstNameEditText.getText().toString(); + + } + + if (lastNameEditText.getText().length() == 0 || lastNameEditText.getText().toString().equals("")) { + lastNameEditText.setError("Last Name Field is Required"); + } else { + lastNameEditText.setError(null); + lastName = lastNameEditText.getText().toString(); + + } + if (emailEditText.getText().length() == 0 || emailEditText.getText().toString().equals("")) { + emailEditText.setError("Email Field is Required"); + } else if (!RegisterActivity.isValidEmail(emailEditText.getText().toString())) { + emailEditText.setError("Please enter a valid Email"); + } else { + emailEditText.setError(null); + email = emailEditText.getText().toString(); + emailEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + emailOnFocusChange(hasFocus); + } + }); + } + + if (passwordEditText.getText().length() == 0 || passwordEditText.getText().toString().equals("")) { + passwordEditText.setError("Password Field is Required"); + } else { + passwordEditText.setError(null); + } + + if (confirmPasswordEditText.getText().length() == 0 || confirmPasswordEditText.getText().toString().equals("")) { + confirmPasswordEditText.setError("Password Field is Required"); + } else if (!passwordEditText.getText().toString().equals(confirmPasswordEditText.getText().toString())) { + confirmPasswordEditText.setError("Passwords do not Match"); + } else { + confirmPasswordEditText.setError(null); + password = LoginActivity.md5(passwordEditText.getText().toString()); + } + View view = userTypeSpinner.getSelectedView(); + TextView textView = null; + if(view!=null && view instanceof TextView){ + textView = (TextView) view; + if(userTypeSpinner.getSelectedItemPosition()==0){ + + textView.setError("Please Select UserType"); + } + else{ + textView.setError(null); + userType = Integer.toString(userTypeSpinner.getSelectedItemPosition()); + } + } + if (addressLine1Text.getText().length() == 0 || addressLine1Text.getText().toString().equals("")) { + addressLine1Text.setError("Address Line 1 is Required"); + } else { + addressLine1Text.setError(null); + addressLine1 = addressLine1Text.getText().toString(); + } + addressLine2 = ""; + if(addressLine2Text.getText().length()>0){ + addressLine2 = addressLine2Text.getText().toString(); + } + + if(cityEditText.getText().length()==0 ||cityEditText.getText().toString().equals("") ){ + cityEditText.setError("City Field is Required"); + } + else{ + cityEditText.setError(null); + city = cityEditText.getText().toString(); + } + + if(stateEditText.getText().length()==0 ||stateEditText.getText().toString().equals("") ){ + stateEditText.setError("State Field is Required"); + } + else{ + stateEditText.setError(null); + state = stateEditText.getText().toString(); + } + + if(zipEditText.getText().length()==0 ||zipEditText.getText().toString().equals("") ){ + zipEditText.setError("ZipCode Field is Required"); + } + else{ + zipEditText.setError(null); + zipcode = zipEditText.getText().toString(); + } + if(phoneEditText.getText().length()==0 ||phoneEditText.getText().toString().equals("") ){ + phoneEditText.setError("Phone Number Field is Required"); + } + else{ + phoneEditText.setError(null); + phone = phoneEditText.getText().toString(); + } + + if(firstNameEditText.getError()==null && lastNameEditText.getError()==null && emailEditText.getError()==null && passwordEditText.getError()==null && confirmPasswordEditText.getError()==null && !userType.equals("0") && addressLine1Text.getError()==null && cityEditText.getError()==null && stateEditText.getError()==null && phoneEditText.getError()==null){ + //validate the address + ValidateAddressAsyncTask validateTask = new ValidateAddressAsyncTask(); + validateTask.execute(); + + } + else{ + Toast.makeText(RegisterActivity.this, "Some Field is buggy", Toast.LENGTH_SHORT).show(); + } + + + + + } + + + }); + + + } + + public boolean validCellPhone(String number) { + return android.util.Patterns.PHONE.matcher(number).matches(); + } + + public static boolean isValidEmail(CharSequence target) { + return target != null && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches(); + } + + public boolean checkAvailability(String username) { + boolean isavailable = false; + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + checkmethod + username; + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + if (result.equals("YES")) { + isavailable = false; + } else + isavailable = true; + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + return isavailable; + } + + public String validateAddressWithGoogleApi() { + String result = ""; + final Address validateAddr = new Address(); + validateAddr.setAddressLine1(addressLine1); + validateAddr.setAddressLine2(addressLine2); + validateAddr.setCity(city); + validateAddr.setState(state); + validateAddr.setZipCode(zipcode); + + List
la = new ArrayList
(); + + try { + String path = "http://maps.google.com/maps/api/geocode/json?address="; + path += validateAddr.getAddressLine1() + ',' + validateAddr.getAddressLine2() + ',' + validateAddr.getCity() + ',' + validateAddr.getState() + ',' + validateAddr.getZipCode(); + path = path.replaceAll(" ", ""); + URL url = new URL(path); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + if (connection.getResponseCode() == 200) { + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8")); + StringBuilder sb = new StringBuilder(); + String line; + + while ((line = reader.readLine()) != null) { + sb.append(line); + } + int count = 0; + List va = new ArrayList(); + JSONObject addr = new JSONObject(sb.toString()); + Log.w("PTS-Android", "re:" + addr); + + JSONArray resultsArray = (JSONArray) addr.get("results"); + Log.w("PTS-Android", "re:" + addr.getString("status")); + if (addr.getString("status").equals("OK")) { + Log.w("PTS-Android", "num:" + resultsArray.length()); + lattitude = resultsArray.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getString("lat"); + longitude = resultsArray.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getString("lng"); + isAddressValidated = true; + } + } + } catch (Exception e) { + isAddressValidated = false; + e.printStackTrace(); + } + + + return result; + } + + @Deprecated + public String validateAddress() { + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + HttpGet getRequest = new HttpGet(address_validate_request); + getRequest.setHeader("Cookie", "connect.sid=s%3Apxju73iJEdw8pbqqc9IYk8_HWt3owKfS.fmbhZBZR2ktoIKlAW5GHJPUYH2dMd3tb3KjzOPcRkqA"); + getRequest.setHeader("apikey", "62b245edf9b70fb5a2f88c824ddb6013"); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + JSONObject resultJson = new JSONObject(result); + try { + lattitude = resultJson.getJSONArray("results").getJSONObject(0).getJSONObject("geometry").getString("lat"); + longitude = resultJson.getJSONObject("location").getString("longitude"); + if (lattitude.equals("0") || longitude.equals("0")) + isAddressValidated = false; + else + isAddressValidated = true; + } catch (Exception ex) { + isAddressValidated = false; + } + + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + + + return result; + } + + private class ValidateAddressAsyncTask extends AsyncTask { + + @Override + protected void onPreExecute() { + // super.onPreExecute(); + // address_validate_request = address_hostname +address_addr_1 +Uri.encode(addressLine1 + " "+addressLine2 )+ address_city_state_zip+ Uri.encode(city+" "+state+" "+zipcode); + // Log.w("PTS-Android",address_validate_request); + + } + + @Override + protected Void doInBackground(Void... params) { + // validateAddress(); + validateAddressWithGoogleApi(); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + if(isAddressValidated==false){ + addressLine1Text.setError("Invalid Address"); + } + else{ + //register the address + + RegisterAsyncTask registerTask = new RegisterAsyncTask(); + registerTask.execute(); + } + } + + @Override + protected void onProgressUpdate(Void... values) { + + } + } + + private class CheckAvailabilityAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + + progressBar.setVisibility(View.VISIBLE); + emailEditText.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,0,0); + } + + @Override + protected Void doInBackground(Void... params) { + isuserNameAvailable = checkAvailability(email); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + progressBar.setVisibility(View.GONE); + if (isuserNameAvailable) { + emailEditText.setError(null); + emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.mipmap.tick, 0); + } else { + + emailEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.mipmap.cross, 0); + emailEditText.setError("User Name not available"); + } + + } + + @Override + protected void onProgressUpdate(Void... values) { + progressBar.animate(); + } + } + + private void generateRegisterJson() { + User user = new User(); + user.setFirstName(firstName); + user.setLastName(lastName); + user.setUserType(userType); + user.setEmail(email); + user.setPassword(password); + + Address address = new Address(); + address.setAddressLine1(addressLine1); + address.setAddressLine2(addressLine2); + address.setCity(city); + address.setState(state); + address.setZipCode(zipcode); + address.setLattitude(lattitude); + address.setLongitude(longitude); + + user.setAddress(address); + user.setPhoneNumber(phone); + + registerRequestJson = User.toJsonString(user); + + } + + public String registerUser() { + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + registermethod; + HttpPost postRequest = new HttpPost(url); + postRequest.addHeader("Content-Type", "application/json"); + StringEntity postentity = new StringEntity(registerRequestJson, "UTF-8"); + postentity.setContentType("application/json"); + postRequest.setEntity(postentity); + + HttpResponse httpResponse = httpclient.execute(postRequest); + + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + return result; + } + + private class RegisterAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + // super.onPreExecute(); + progressBar.setVisibility(View.VISIBLE); + + + generateRegisterJson(); + } + + @Override + protected void onPostExecute(Void aVoid) { + // super.onPostExecute(aVoid); + progressBar.setVisibility(View.GONE); + if (registerResult.equals("YES")) { + Toast.makeText(RegisterActivity.this, "Registered Successfully", Toast.LENGTH_SHORT).show(); + + } else { + Toast.makeText(RegisterActivity.this, "Registration Failed, Please Try again Later", Toast.LENGTH_SHORT).show(); + } + onBackPressed(); + } + + @Override + protected Void doInBackground(Void... params) { + registerResult = registerUser(); + return null; + } + + @Override + protected void onProgressUpdate(Void... values) { + progressBar.animate(); + } + } + +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/SubjectProfileActivity.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/SubjectProfileActivity.java new file mode 100644 index 0000000..5b27987 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Activities/SubjectProfileActivity.java @@ -0,0 +1,145 @@ +package edu.uta.cse.personaltutorservice.Activities; + +import android.content.Intent; +import android.net.Uri; +import android.os.AsyncTask; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.google.gson.Gson; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Model_Objects.Services; + +public class SubjectProfileActivity extends AppCompatActivity { +String serviceId; + String miles; + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String method = "GetServiceByServiceId/"; + public Services services = new Services(); + public TextView tvCourseName,tvCategory, tvSubCategory, tvTutorName, tvPricePerHour,tvAddress,tvPhoneNumber,tvEmail; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_subject_profile); + serviceId = getIntent().getStringExtra("SERVICE_ID"); + // miles = getIntent().getStringExtra("DISTANCE"); + tvCourseName = (TextView) findViewById(R.id.service_details_coursename); + tvCategory = (TextView) findViewById(R.id.service_details_category); + tvSubCategory = (TextView) findViewById(R.id.service_details_subcategory); + tvTutorName = (TextView) findViewById(R.id.service_details_tutorname); + tvPricePerHour = (TextView) findViewById(R.id.service_details_priceperhour); + tvAddress = (TextView) findViewById(R.id.service_details_address); + tvPhoneNumber = (TextView) findViewById(R.id.service_details_phonenumber); + tvEmail = (TextView) findViewById(R.id.service_details_email); + + NearbyTutorsAsyncTask task = new NearbyTutorsAsyncTask(); + task.execute(); + + + } + private String getServiceDetails(){ + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + method + serviceId; + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + Gson gson = new Gson(); + services = gson.fromJson(result,Services.class); + + Log.w("PTS-Android", "Services:" + services.toString()); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + + + return result; + } + private class NearbyTutorsAsyncTask extends AsyncTask { + @Override + protected Void doInBackground(Void... voids) { + getServiceDetails(); + + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + + tvCourseName.setText(services.getServices().get(0).getSubCategory().getSubCategoryName() + " by" + services.getServices().get(0).getUser().getLastName()); + tvCategory.setText(services.getServices().get(0).getCategory().getCategoryName()); + tvSubCategory.setText(services.getServices().get(0).getSubCategory().getSubCategoryName()); + tvTutorName.setText(services.getServices().get(0).getUser().getLastName()+","+services.getServices().get(0).getUser().getFirstName()); + tvTutorName.setText(services.getServices().get(0).getPricePerHour()); + String address =""; + address+=services.getServices().get(0).getAddress().getAddressLine1(); + if(services.getServices().get(0).getAddress().getAddressLine2()!=""){ + address+=", "+services.getServices().get(0).getAddress().getAddressLine2(); + } + address+=","+services.getServices().get(0).getAddress().getCity(); + address+=","+services.getServices().get(0).getAddress().getState(); + address+=","+services.getServices().get(0).getAddress().getZipCode(); + + tvAddress.setText(address); + tvPhoneNumber.setText(services.getServices().get(0).getUser().getPhoneNumber()); + tvPricePerHour.setText(services.getServices().get(0).getPricePerHour()); + tvEmail.setText(services.getServices().get(0).getUser().getEmail()); + + ((ImageView) findViewById(R.id.update_iv_sms)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent sendIntent = new Intent(Intent.ACTION_VIEW); + sendIntent.putExtra("address", tvPhoneNumber.getText().toString()); + sendIntent.putExtra("sms_body", ""); + sendIntent.setType("vnd.android-dir/mms-sms"); + startActivity(sendIntent); + } + }); + + ((ImageView) findViewById(R.id.service_details_iv_phone)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent callIntent = new Intent(Intent.ACTION_CALL); + callIntent.setData(Uri.parse("tel:" + tvPhoneNumber.getText().toString())); + startActivity(callIntent); + } + }); + + ((ImageView)findViewById(R.id.service_details_iv_email_send)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( + "mailto",tvEmail.getText().toString(), null)); + emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject:"); + emailIntent.putExtra(Intent.EXTRA_TEXT, ""); + startActivity(Intent.createChooser(emailIntent, "Send email...")); + } + }); + + } + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Adapters/ServicesListAdapter.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Adapters/ServicesListAdapter.java new file mode 100644 index 0000000..2115e5c --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Adapters/ServicesListAdapter.java @@ -0,0 +1,111 @@ +package edu.uta.cse.personaltutorservice.Adapters; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RatingBar; +import android.widget.TextView; + +import java.util.List; + +import edu.uta.cse.personaltutorservice.Model_Objects.Service; +import edu.uta.cse.personaltutorservice.Model_Objects.Services; +import edu.uta.cse.personaltutorservice.R; + +/** + * Created by Chris on 3/26/2016. + */ +public class ServicesListAdapter extends RecyclerView.Adapter { + List data; + private LayoutInflater inflater; + private Context mContext; + public ServicesListAdapter(Context context, Services services){ + this.mContext = context; + inflater = LayoutInflater.from(context); + this.data = services.getServices(); + } + + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = inflater.inflate(R.layout.services_list_item, parent, false); + ViewHolder holder = new ViewHolder(view); + return holder; + } + + @Override + public int getItemViewType(int position) { + return 0; + } + + private void checkDevider(int position, ViewHolder holder) { + if (position == (data.size() - 1)) { + holder.devider.setVisibility(View.INVISIBLE); + } else { + holder.devider.setVisibility(View.VISIBLE); + } + } + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + Log.d("ARJUN", "MajorListAdapter() - onBindViewHolder() postion : " + position); + createServiceRow((ViewHolder)holder,position); + } + + private void createServiceRow(ViewHolder holder, int position){ + Service curService = data.get(position); + Log.w("PTS-Android", "Itemcount: " + curService); + holder.tv_maincategory.setText(curService.getCategory().getCategoryName() + " - " + curService.getSubCategory().getSubCategoryName()); + holder.tv_firstname.setText(curService.getUser().getFirstName()); + holder.tv_lastname.setText(curService.getUser().getLastName()); + holder.tv_initials.setText(curService.getUser().getInitials()); + holder.rb_avgrating.setRating(curService.getAvgRating()); + holder.tv_numOfFeedbacks.setText(curService.getNumOfFeedbacks() + ""); + holder.tv_address.setText(curService.getAddress().toString()); + holder.tv_description.setText(curService.getDescription()); + holder.tv_withinMiles.setText(curService.getMiles() + ""); + if(curService.getIsAdvertisment().equals("YES")){ + holder.iv_ad.setVisibility(View.VISIBLE); + } + + Log.w("PTS-Android", "holder : " + holder.toString()); + checkDevider(position, holder); + } + + public static class ViewHolder extends RecyclerView.ViewHolder{ + TextView tv_initials; + TextView tv_maincategory; + TextView tv_firstname; + TextView tv_lastname; + RatingBar rb_avgrating; + TextView tv_numOfFeedbacks; + TextView tv_address; + TextView tv_description; + TextView tv_withinMiles; + LinearLayout devider; + ImageView iv_ad; + public ViewHolder(View itemView) { + super(itemView); + tv_initials = (TextView) itemView.findViewById(R.id.course_list_item_tv_initials); + tv_maincategory = (TextView) itemView.findViewById(R.id.service_list_item_tv_maincatagory); + tv_firstname = (TextView) itemView.findViewById(R.id.course_list_item_tv_tutor_firstname); + tv_lastname = (TextView) itemView.findViewById(R.id.course_list_item_tv_tutor_lasttname); + rb_avgrating = (RatingBar) itemView.findViewById(R.id.service_list_item_ratingbar); + tv_numOfFeedbacks = (TextView) itemView.findViewById(R.id.service_list_item_tv_num_feedback); + tv_address = (TextView) itemView.findViewById(R.id.service_list_item_tv_address); + tv_description = (TextView) itemView.findViewById(R.id.service_list_item_tv_description); + tv_withinMiles = (TextView) itemView.findViewById(R.id.service_list_item_tv_distance); + iv_ad = (ImageView) itemView.findViewById(R.id.service_details_iv_ad); + devider = (LinearLayout) itemView.findViewById(R.id.course_list_item_devider); + } + } + + @Override + public int getItemCount() { + return data.size(); + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/HomeFragment.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/HomeFragment.java new file mode 100644 index 0000000..bf68454 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/HomeFragment.java @@ -0,0 +1,142 @@ +package edu.uta.cse.personaltutorservice.Fragments; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import edu.uta.cse.personaltutorservice.Activities.NearbyTutorsActivity; +import edu.uta.cse.personaltutorservice.R; + + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link HomeFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link HomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class HomeFragment 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 String mParam1; + private String mParam2; + View rootView; + Button logOutButton,mapsButton; + TextView userNameTV; + private OnFragmentInteractionListener mListener; + + public HomeFragment() { + // 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 HomeFragment. + */ + // TODO: Rename and change types and number of parameters + public static HomeFragment newInstance(String param1, String param2) { + HomeFragment fragment = new HomeFragment(); + 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); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + rootView = inflater.inflate(R.layout.fragment_home, container, false); + final SharedPreferences sharedPreferences = getActivity().getSharedPreferences("MyPref", Context.MODE_PRIVATE); + String firstName = sharedPreferences.getString("FirstName", null); + String LastName = sharedPreferences.getString("LastName", null); + String greetingName = LastName+", "+firstName; + userNameTV = (TextView) rootView.findViewById(R.id.userName); + userNameTV.setText(greetingName); + mapsButton = (Button) rootView.findViewById(R.id.btnNearbyPlaces); + mapsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(getActivity(),NearbyTutorsActivity.class); + startActivity(intent); + } + }); + logOutButton = (Button)rootView.findViewById(R.id.logOutButton); + logOutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.clear(); + editor.commit(); + getActivity().finish(); + } + }); + return rootView; + } + + // 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/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/NavigationDrawerFragment.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/NavigationDrawerFragment.java new file mode 100644 index 0000000..085409e --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/NavigationDrawerFragment.java @@ -0,0 +1,287 @@ +package edu.uta.cse.personaltutorservice.Fragments; + +import android.support.v7.app.ActionBarActivity; +import android.app.Activity; +import android.support.v7.app.ActionBar; +import android.support.v4.app.Fragment; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Toast; + +import edu.uta.cse.personaltutorservice.R; + +/** + * Fragment used for managing interactions for and presentation of a navigation drawer. + * See the + * design guidelines for a complete explanation of the behaviors implemented here. + */ +public class NavigationDrawerFragment extends Fragment { + + /** + * Remember the position of the selected item. + */ + private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; + + /** + * Per the design guidelines, you should show the drawer on launch until the user manually + * expands it. This shared preference tracks this. + */ + private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; + + /** + * A pointer to the current callbacks instance (the Activity). + */ + private NavigationDrawerCallbacks mCallbacks; + + /** + * Helper component that ties the action bar to the navigation drawer. + */ + private ActionBarDrawerToggle mDrawerToggle; + + private DrawerLayout mDrawerLayout; + private ListView mDrawerListView; + private View mFragmentContainerView; + + private int mCurrentSelectedPosition = 0; + private boolean mFromSavedInstanceState; + private boolean mUserLearnedDrawer; + + public NavigationDrawerFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Read in the flag indicating whether or not the user has demonstrated awareness of the + // drawer. See PREF_USER_LEARNED_DRAWER for details. + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); + mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); + + if (savedInstanceState != null) { + mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); + mFromSavedInstanceState = true; + } + + // Select either the default item (0) or the last selected item. + selectItem(mCurrentSelectedPosition); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + // Indicate that this fragment would like to influence the set of actions in the action bar. + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mDrawerListView = (ListView) inflater.inflate( + R.layout.drawer_main, container, false); + mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + selectItem(position); + } + }); + mDrawerListView.setAdapter(new ArrayAdapter( + getActionBar().getThemedContext(), + android.R.layout.simple_list_item_activated_1, + android.R.id.text1, + new String[]{ + "Home", + getString(R.string.title_section1), + getString(R.string.title_section2), + + })); + mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); + return mDrawerListView; + } + + public boolean isDrawerOpen() { + return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); + } + + /** + * Users of this fragment must call this method to set up the navigation drawer interactions. + * + * @param fragmentId The android:id of this fragment in its activity's layout. + * @param drawerLayout The DrawerLayout containing this fragment's UI. + */ + public void setUp(int fragmentId, DrawerLayout drawerLayout) { + mFragmentContainerView = getActivity().findViewById(fragmentId); + mDrawerLayout = drawerLayout; + + // set a custom shadow that overlays the main content when the drawer opens + mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); + // set up the drawer's list view with items and click listener + + ActionBar actionBar = getActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + + // ActionBarDrawerToggle ties together the the proper interactions + // between the navigation drawer and the action bar app icon. + mDrawerToggle = new ActionBarDrawerToggle( + getActivity(), /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ + R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ + R.string.navigation_drawer_close /* "close drawer" description for accessibility */ + ) { + @Override + public void onDrawerClosed(View drawerView) { + super.onDrawerClosed(drawerView); + if (!isAdded()) { + return; + } + + getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + if (!isAdded()) { + return; + } + + if (!mUserLearnedDrawer) { + // The user manually opened the drawer; store this flag to prevent auto-showing + // the navigation drawer automatically in the future. + mUserLearnedDrawer = true; + SharedPreferences sp = PreferenceManager + .getDefaultSharedPreferences(getActivity()); + sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); + } + + getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + }; + + // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, + // per the navigation drawer design guidelines. + if (!mUserLearnedDrawer && !mFromSavedInstanceState) { + mDrawerLayout.openDrawer(mFragmentContainerView); + } + + // Defer code dependent on restoration of previous instance state. + mDrawerLayout.post(new Runnable() { + @Override + public void run() { + mDrawerToggle.syncState(); + } + }); + + mDrawerLayout.setDrawerListener(mDrawerToggle); + } + + private void selectItem(int position) { + mCurrentSelectedPosition = position; + if (mDrawerListView != null) { + mDrawerListView.setItemChecked(position, true); + } + if (mDrawerLayout != null) { + mDrawerLayout.closeDrawer(mFragmentContainerView); + } + if (mCallbacks != null) { + mCallbacks.onNavigationDrawerItemSelected(position); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mCallbacks = (NavigationDrawerCallbacks) activity; + } catch (ClassCastException e) { + throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mCallbacks = null; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Forward the new configuration the drawer toggle component. + mDrawerToggle.onConfigurationChanged(newConfig); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + // If the drawer is open, show the global app actions in the action bar. See also + // showGlobalContextActionBar, which controls the top-left area of the action bar. + if (mDrawerLayout != null && isDrawerOpen()) { + inflater.inflate(R.menu.global, menu); + showGlobalContextActionBar(); + } + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + + if (item.getItemId() == R.id.action_example) { + Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * Per the navigation drawer design guidelines, updates the action bar to show the global app + * 'context', rather than just what's in the current screen. + */ + private void showGlobalContextActionBar() { + ActionBar actionBar = getActionBar(); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setTitle(R.string.app_name); + } + + private ActionBar getActionBar() { + return ((ActionBarActivity) getActivity()).getSupportActionBar(); + } + + /** + * Callbacks interface that all activities using this fragment must implement. + */ + public static interface NavigationDrawerCallbacks { + /** + * Called when an item in the navigation drawer is selected. + */ + void onNavigationDrawerItemSelected(int position); + } + + +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/registerTutorService_Fragment.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/registerTutorService_Fragment.java new file mode 100644 index 0000000..71340d2 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/registerTutorService_Fragment.java @@ -0,0 +1,686 @@ +package edu.uta.cse.personaltutorservice.Fragments; + +import android.app.TimePickerDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.support.v4.app.Fragment; +import android.os.Bundle; +import android.util.Log; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ProgressBar; +import android.widget.Spinner; +import android.widget.TimePicker; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Locale; + +import edu.uta.cse.personaltutorservice.Model_Objects.Availability; +import edu.uta.cse.personaltutorservice.Model_Objects.Categories; +import edu.uta.cse.personaltutorservice.Model_Objects.Category; +import edu.uta.cse.personaltutorservice.Model_Objects.Days; +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Request_Objects.RegisterServiceRequestObject; +import edu.uta.cse.personaltutorservice.Model_Objects.SubCategories; +import edu.uta.cse.personaltutorservice.Model_Objects.SubCategory; + +/** + * Created by Mousa Almotairi & Funda Karapinar on 3/3/2016. + */ +public class registerTutorService_Fragment extends Fragment { + DateFormat fmtDateAndTime = DateFormat.getDateTimeInstance(); + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String registerTutorServiceMethod = "RegisterTutorService"; + public static String getCategoriesMethod = "GetAllCategories"; + public static String getSubCategoriesMethod = "GetSubCategoriesForCategory"; + final Calendar dateAndTime = Calendar.getInstance(); + View rootView; + SeekBar priceSeekBar; + TextView pricePerHour, textViewStartTime, textViewEndTime, labelAvailability; + Button btnSetStartTime, btnSetEndTime, btnRegisterTutorService; + AutoCompleteTextView tvCategory, tvSubCategory; + String textCategory, textSubCategory, price, startTime, endTime, distance, advertise; + CheckBox cbMon, cbTue, cbWed, cbThu, cbFri, cbSat, cbSun; + TextView labelPrice; + boolean[] days = {false, false, false, false, false, false, false}; + Categories categories; + SubCategories subCategories; + String[] dayNames = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; + Spinner travelInMilesSpinner; + ProgressBar progressBar; + String requestJson = "",registerResult=""; + int userId; + int categoryId; + HashMap categoriesHM = new HashMap(); + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + SharedPreferences sharedPreferences = getActivity().getSharedPreferences("MyPref", Context.MODE_PRIVATE); + String userIdint = sharedPreferences.getString("UserId",null); + if(userIdint==null){ + getActivity().onBackPressed(); + } + userId =Integer.parseInt(userIdint); + rootView = inflater.inflate(R.layout.registertutorservice_layout, container, false); + advertise = "NO"; + pricePerHour = (TextView) rootView.findViewById(R.id.labelPrice); + priceSeekBar = (SeekBar) rootView.findViewById(R.id.priceSeekBar); + priceSeekBar.setProgress(0); + // priceSeekBar.incrementProgressBy(5); + textViewStartTime = (TextView) rootView.findViewById(R.id.textViewStartTime); + textViewEndTime = (TextView) rootView.findViewById(R.id.textViewEndTime); + // btnSetStartTime = (Button) rootView.findViewById(R.id.btnSetStartTime); + // btnSetEndTime = (Button) rootView.findViewById(R.id.btnSetEndTime); + btnRegisterTutorService = (Button) rootView.findViewById(R.id.registerTutorServiceBtn); + tvCategory = (AutoCompleteTextView) rootView.findViewById(R.id.categoryAutoCompleteTextView); + progressBar = (ProgressBar) rootView.findViewById(R.id.registerServiceProgress); + getAllCategoriesAsyncTask task = new getAllCategoriesAsyncTask(); + task.execute(); + + tvSubCategory = (AutoCompleteTextView) rootView.findViewById(R.id.subCategoryAutoCompleteTextView); + labelPrice = (TextView) rootView.findViewById(R.id.labelPrice); + travelInMilesSpinner = (Spinner) rootView.findViewById(R.id.travelInMilesSpinner); + + + cbMon = (CheckBox) rootView.findViewById(R.id.checkBoxMon); + cbMon.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[0] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + + + } + }); + cbTue = (CheckBox) rootView.findViewById(R.id.checkBoxTue); + cbTue.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[1] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + cbWed = (CheckBox) rootView.findViewById(R.id.checkBoxWed); + cbWed.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[2] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + cbThu = (CheckBox) rootView.findViewById(R.id.checkBoxThu); + cbThu.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[3] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + cbFri = (CheckBox) rootView.findViewById(R.id.checkBoxFri); + cbFri.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[4] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + cbSat = (CheckBox) rootView.findViewById(R.id.checkBoxSat); + cbSat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[5] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + cbSun = (CheckBox) rootView.findViewById(R.id.checkBoxSun); + cbSun.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + days[6] = isChecked; + if (isAtleastOneDaySelected()) + labelAvailability.setError(null); + } + }); + + labelAvailability = (TextView) rootView.findViewById(R.id.labelAvailability); + + btnRegisterTutorService.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (tvCategory.getText().toString().equals("") || tvCategory.getText().toString() == null) { + tvCategory.setError("Please Enter Category"); + } else { + tvCategory.setError(null); + textCategory = tvCategory.getText().toString(); + } + + if (tvSubCategory.getText().toString().equals("") || tvSubCategory.getText().toString() == null) { + tvSubCategory.setError("Please Enter Sub Category"); + } else { + tvSubCategory.setError(null); + textSubCategory = tvSubCategory.getText().toString(); + } + + if (labelPrice.getText().toString().equals("0 USD")) { + labelPrice.setError("Price Per Hour should be greater than 0"); + } else { + labelPrice.setError(null); + price = labelPrice.getText().toString(); + } + + if (cbMon.isChecked() == false && cbTue.isChecked() == false && cbWed.isChecked() == false && cbThu.isChecked() == false && cbFri.isChecked() == false && cbSat.isChecked() == false && cbSun.isChecked() == false) { + labelAvailability.setError("At least one day should be selected"); + } else { + labelAvailability.setError(null); + if (cbMon.isChecked()) + days[0] = true; + + if (cbTue.isChecked()) + days[1] = true; + + if (cbWed.isChecked()) + days[2] = true; + + if (cbThu.isChecked()) + days[3] = true; + + if (cbFri.isChecked()) + days[4] = true; + + if (cbSat.isChecked()) + days[5] = true; + + if (cbSun.isChecked()) + days[6] = true; + + } + + if (textViewStartTime.getText().toString().equals("")) { + textViewStartTime.setError("Start Time is Required"); + } else { + textViewStartTime.setError(null); + startTime = textViewStartTime.getText().toString(); + } + + if (textViewEndTime.getText().toString().equals("")) { + textViewEndTime.setError("End Time is Required"); + } else { + textViewEndTime.setError(null); + endTime = textViewEndTime.getText().toString(); + } + View view = travelInMilesSpinner.getSelectedView(); + TextView textView = null; + + if (view != null && view instanceof TextView) { + textView = (TextView) view; + if (travelInMilesSpinner.getSelectedItemPosition() == 0) { + + textView.setError("Please Select Distance Willing to travel"); + } else { + textView.setError(null); + distance = travelInMilesSpinner.getSelectedItem().toString(); + } + } + + + //call the async task to + if (tvCategory.getError() == null && tvSubCategory.getError() == null && labelPrice.getError()== null && labelAvailability.getError() == null && textViewStartTime.getError() == null && textViewEndTime.getError() == null && travelInMilesSpinner.getSelectedItemPosition() > 0) { + registerTutorServiceAsyncTask task = new registerTutorServiceAsyncTask(); + task.execute(); + } + } + + }); + + /* btnSetEndTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new TimePickerDialog(getActivity(), + new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay); + dateAndTime.set(Calendar.MINUTE, minute); + // System.out.print(view.getClass().getName()); + textViewEndTime.setText(formatTime()); + + } + }, + dateAndTime.get(Calendar.HOUR_OF_DAY), + dateAndTime.get(Calendar.MINUTE), + true).show(); + } + });*/ + textViewStartTime.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) + textViewStartTime.callOnClick(); + } + }); + textViewStartTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + v.requestFocus(); + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + setStartTime(); + textViewStartTime.setError(null); + } + + }); + textViewEndTime.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) + textViewEndTime.callOnClick(); + } + }); + textViewEndTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + setEndTime(); + textViewEndTime.setError(null); + } + }); + /* btnSetStartTime.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new TimePickerDialog(getActivity(), + new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay); + dateAndTime.set(Calendar.MINUTE, minute); + // System.out.print(view.getClass().getName()); + textViewStartTime.setText(formatTime()); + } + }, + dateAndTime.get(Calendar.HOUR_OF_DAY), + dateAndTime.get(Calendar.MINUTE), + true).show(); + } + });*/ + priceSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + int currentProgress = 0; + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + + currentProgress = progress; + String priceText = String.valueOf((int) currentProgress) + " USD"; + pricePerHour.setText(priceText.trim()); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + if (currentProgress > 0) { + labelPrice.setError(null); + } + String priceText = String.valueOf((int) currentProgress) + " USD"; + pricePerHour.setText(priceText.trim()); + + } + }); + return rootView; + } + + public String generateRegisterTutorServiceRequestJson() { + String result = ""; + RegisterServiceRequestObject request = new RegisterServiceRequestObject(); + request.setUserId(userId); + Category category = new Category(); + category.setCategoryName(textCategory); + request.setCategory(category); + + SubCategory subCategory = new SubCategory(); + subCategory.setSubCategoryName(textSubCategory); + request.setSubCategory(subCategory); + ArrayList list = new ArrayList(); + for (int i = 0; i < days.length; i++) { + if (days[i] == true) { + Days day = new Days(); + day.setName(dayNames[i]); + day.setStartTime(startTime); + day.setEndTime(endTime); + list.add(day); + } + } + + Days[] days = new Days[list.size()]; + days = list.toArray(days); + + Availability availability = new Availability(); + availability.setDays(days); + + request.setAvailability(availability); + request.setPricePerHour(price); + request.setWillingToTravelInMiles(distance); + request.setAdvertise(advertise); + + result = RegisterServiceRequestObject.toJsonString(request); + return result; + } +public String registerTutorService(){ + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try{ + String url = hostname + registerTutorServiceMethod; + HttpPost postRequest = new HttpPost(url); + postRequest.addHeader("Content-Type", "application/json"); + StringEntity postentity = new StringEntity(requestJson, "UTF-8"); + postentity.setContentType("application/json"); + postRequest.setEntity(postentity); + + HttpResponse httpResponse = httpclient.execute(postRequest); + + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + return result; + + +} + public String formatTime() { + String myFormat = "hh:mm a"; // your own format + SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); + String formated_time = sdf.format(dateAndTime.getTime()); + return formated_time; + } + + public void setStartTime() { + new TimePickerDialog(getActivity(), + new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay); + dateAndTime.set(Calendar.MINUTE, minute); + // System.out.print(view.getClass().getName()); + textViewStartTime.setText(formatTime()); + } + }, + dateAndTime.get(Calendar.HOUR_OF_DAY), + dateAndTime.get(Calendar.MINUTE), + true).show(); + } + + public void setEndTime() { + new TimePickerDialog(getActivity(), + new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay); + dateAndTime.set(Calendar.MINUTE, minute); + // System.out.print(view.getClass().getName()); + textViewEndTime.setText(formatTime()); + } + }, + dateAndTime.get(Calendar.HOUR_OF_DAY), + dateAndTime.get(Calendar.MINUTE), + true).show(); + } + + public boolean isAtleastOneDaySelected() { + boolean result = false; + + for (int i = 0; i < days.length; i++) + if (days[i] == true) { + result = true; + break; + } + return result; + } +public void getAllCategories(){ + boolean isavailable = false; + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + getCategoriesMethod ; + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + JsonParser parser = new JsonParser(); + Gson gson = new Gson();// create a gson object + JsonObject obj = (JsonObject) parser.parse(result); + categories = gson.fromJson(result,Categories.class); + + + if (result.equals("YES")) { + isavailable = false; + } else + isavailable = true; + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + +} + public void getAllCategoriesForCategory(){ + boolean isavailable = false; + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + getSubCategoriesMethod +"/"+categoryId; + Log.w("PTS-Android",url); + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + JsonParser parser = new JsonParser(); + Gson gson = new Gson();// create a gson object + // JsonObject obj = (JsonObject) parser.parse(result); + subCategories = gson.fromJson(result,SubCategories.class); + + if (result.equals("YES")) { + isavailable = false; + } else + isavailable = true; + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + + } + private class getAllSubCategoryForCategoryAsyncTask extends AsyncTask{ + @Override + protected void onPreExecute() { + progressBar.setVisibility(View.VISIBLE); + } + + @Override + protected void onProgressUpdate(Void... values) { + // super.onProgressUpdate(values); + progressBar.animate(); + } + + @Override + protected Void doInBackground(Void... params) { + getAllCategoriesForCategory(); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + // super.onPostExecute(aVoid); + progressBar.setVisibility(View.GONE); + String[] subcategoriesArray = new String[subCategories.getSubCategories().length]; + for(int i=0;i adapter = new ArrayAdapter(rootView.getContext(), android.R.layout.simple_list_item_1, subcategoriesArray); + tvSubCategory.setAdapter(adapter); + tvSubCategory.showDropDown(); + tvSubCategory.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tvSubCategory.showDropDown(); + } + }); + + } + } + + private class getAllCategoriesAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + progressBar.setVisibility(View.VISIBLE); + } + + @Override + protected Void doInBackground(Void... params) { + getAllCategories(); + return null; + } + + @Override + protected void onProgressUpdate(Void... values) { + //super.onProgressUpdate(values); + progressBar.animate(); + } + + @Override + protected void onPostExecute(Void aVoid) { + // super.onPostExecute(aVoid); + progressBar.setVisibility(View.GONE); + for(int i=0;i(categoriesHM.keySet())).toArray(categories); + ArrayAdapter adapter = new ArrayAdapter(rootView.getContext(), android.R.layout.simple_list_item_1, categories); + tvCategory.setAdapter(adapter); + tvCategory.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + tvCategory.showDropDown(); + } + } + }); + tvCategory.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tvCategory.showDropDown(); + } + }); + tvCategory.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // Log.w("PTS-Android", parent.getItemAtPosition(position).toString()); + String key = parent.getItemAtPosition(position).toString(); + categoryId = categoriesHM.get(key); + getAllSubCategoryForCategoryAsyncTask task = new getAllSubCategoryForCategoryAsyncTask(); + task.execute(); + + } + }); + + } + } + private class registerTutorServiceAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + requestJson = generateRegisterTutorServiceRequestJson(); + progressBar.setVisibility(View.VISIBLE); + } + + @Override + protected void onProgressUpdate(Void... values) { + progressBar.animate(); + } + + @Override + protected void onPostExecute(Void aVoid) { + progressBar.setVisibility(View.GONE); + if (registerResult.equals("YES")) { + Toast.makeText(getActivity(), "Tutor Service Registered Successfully", Toast.LENGTH_SHORT).show(); + + + + } else { + Toast.makeText(getActivity(), "Registration Failed, Please Try again Later", Toast.LENGTH_SHORT).show(); + } + } + + @Override + protected Void doInBackground(Void... params) { + + registerResult = registerTutorService(); + return null; + } + } + +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/viewTutorProfile_Fragment.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/viewTutorProfile_Fragment.java new file mode 100644 index 0000000..5d0fb6d --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Fragments/viewTutorProfile_Fragment.java @@ -0,0 +1,413 @@ +package edu.uta.cse.personaltutorservice.Fragments; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.Uri; +import android.os.AsyncTask; +import android.support.v4.app.Fragment; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.CardView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +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 com.google.gson.Gson; +import com.google.gson.JsonParser; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import java.util.ArrayList; + +import edu.uta.cse.personaltutorservice.Model_Objects.Address; +import edu.uta.cse.personaltutorservice.R; +import edu.uta.cse.personaltutorservice.Model_Objects.Service; +import edu.uta.cse.personaltutorservice.Model_Objects.Services; +import edu.uta.cse.personaltutorservice.Adapters.ServicesListAdapter; +import edu.uta.cse.personaltutorservice.Request_Objects.UpdateProfileRequestObject; + +/** + * Created by Mousa Almotairi & Funda Karapinar on 3/3/2016. + */ +public class viewTutorProfile_Fragment extends Fragment implements View.OnClickListener { + + public static String hostname = "http://personaltutor.uta.ngrok.io/PersonalTutorServiceWebService/PTSWebService/"; + public static String updateProfileMethod = "UpdateTutorInfo"; + public static String getAllServicesByUsername = "GetAllServiceByUsername"; + View rootView; + SharedPreferences sharedPreferences; + ImageView iv_firstname; + ImageView iv_lastname; + ImageView iv_email; + ImageView iv_phonenumber; + ImageView iv_address; + + EditText et_firstname; + EditText et_lastname; + EditText et_email; + EditText et_phonenumber; + EditText et_address; + TextView tv_requiredtext; + Button bt_update; + + String mFirstname; + String mLastname; + String mEmail; + String mPhonenumber; + String mAddress; + ServicesListAdapter slAdapeter; + + CardView cv_serviceItem; + RecyclerView rv_servicelist; + + RecyclerView.Adapter servicesAdapter; + RecyclerView.LayoutManager servicesLayoutManager; + + String requestJson = "",updateResult=""; + + Services services; + @Nullable + @Override + + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + rootView = inflater.inflate(R.layout.viewtutorprofile_layout, container, false); + sharedPreferences = getActivity().getSharedPreferences("MyPref", Context.MODE_PRIVATE); + String userId = sharedPreferences.getString("UserId",null); + if(userId == null){ + getActivity().finish(); + } + + et_firstname = ((EditText)rootView.findViewById(R.id.update_et_firstname)); + et_firstname.setText(sharedPreferences.getString("FirstName", null)); + + et_lastname = ((EditText)rootView.findViewById(R.id.update_et_lastname)); + et_lastname.setText(sharedPreferences.getString("LastName", null)); + + et_email = ((EditText)rootView.findViewById(R.id.update_et_email)); + et_email.setText(sharedPreferences.getString("Email", null)); + + + et_phonenumber = ((EditText)rootView.findViewById(R.id.update_et_phonenumber)); + et_phonenumber.setText(sharedPreferences.getString("PhoneNumber", null)); + + et_address = ((EditText)rootView.findViewById(R.id.update_et_address)); + et_address.setText(sharedPreferences.getString("Address", null)); + ((ImageView) rootView.findViewById(R.id.update_iv_sms)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent sendIntent = new Intent(Intent.ACTION_VIEW); + sendIntent.putExtra("address", sharedPreferences.getString("PhoneNumber", null)); + sendIntent.putExtra("sms_body", ""); + sendIntent.setType("vnd.android-dir/mms-sms"); + startActivity(sendIntent); + } + }); + + ((ImageView) rootView.findViewById(R.id.update_iv_phone)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent callIntent = new Intent(Intent.ACTION_CALL); + callIntent.setData(Uri.parse("tel:" + sharedPreferences.getString("PhoneNumber", null))); + startActivity(callIntent); + } + }); + + ((ImageView)rootView.findViewById(R.id.update_iv_email_send)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( + "mailto", sharedPreferences.getString("Email", null), null)); + emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject:"); + emailIntent.putExtra(Intent.EXTRA_TEXT, ""); + startActivity(Intent.createChooser(emailIntent, "Send email...")); + } + }); + + iv_firstname =(ImageView) rootView.findViewById(R.id.update_iv_firstname); + iv_lastname =(ImageView) rootView.findViewById(R.id.update_iv_lastname); + iv_email=(ImageView) rootView.findViewById(R.id.update_iv_email); + iv_phonenumber =(ImageView) rootView.findViewById(R.id.update_iv_phonenumber); + iv_address =(ImageView) rootView.findViewById(R.id.update_iv_address); + + tv_requiredtext = (TextView) rootView.findViewById(R.id.update_tv_requiredField); + + bt_update = (Button) rootView.findViewById(R.id.bt_update); + bt_update.setOnClickListener(mUpdateClickListener); + + //Cardview +// cv_serviceItem = (CardView) rootView.findViewById(R.id.frag_course_cv_all_service); + rv_servicelist = (RecyclerView) rootView.findViewById(R.id.frag_updateprofile_service_list); + rv_servicelist.setHasFixedSize(true); + rv_servicelist.setLayoutManager(new LinearLayoutManager(getActivity())); + getAllServicesAsyncTask task = new getAllServicesAsyncTask(); + task.execute(); + while(true) { + if(services != null){ + slAdapeter = new ServicesListAdapter(getActivity(), services); + rv_servicelist.setAdapter(slAdapeter); + int viewHeight = slAdapeter.getItemCount() * 350; + rv_servicelist.getLayoutParams().height = viewHeight; + Log.w("PTS-Android", "Itemcount: " + slAdapeter.getItemCount()); + break; + } + } + //setAdapter(); + setEditButtonClickListener(); + + return rootView; + } + private void setEditButtonClickListener() { + iv_firstname.setOnClickListener(this); + iv_lastname.setOnClickListener(this); + iv_email.setOnClickListener(this); + iv_phonenumber.setOnClickListener(this); + iv_address.setOnClickListener(this); + + } + @Override + public void onDetach() { + super.onDetach(); + } + @Override + public void onClick(View view) { + + if (view == iv_firstname) { + et_firstname.setEnabled(true); + et_firstname.requestFocus(); + } else if (view == iv_lastname) { + et_lastname.setEnabled(true); + et_lastname.requestFocus(); + } else if (view == iv_email) { + et_email.setEnabled(true); + et_email.requestFocus(); + } else if (view == iv_phonenumber) { + et_phonenumber.setEnabled(true); + et_phonenumber.requestFocus(); + } else if (view == iv_address) { + et_address.setEnabled(true); + et_address.requestFocus(); + } + + } + + public void getAllServicesByUsername(String Email){ + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try { + String url = hostname + getAllServicesByUsername +"/"+Email; + Log.w("PTS-Android",url); + HttpGet getRequest = new HttpGet(url); + HttpResponse httpResponse = httpclient.execute(getRequest); + HttpEntity entity = httpResponse.getEntity(); + Log.w("PTS-Android", httpResponse.getStatusLine().toString()); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + JsonParser parser = new JsonParser(); + Gson gson = new Gson();// create a gson object + // JsonObject obj = (JsonObject) parser.parse(result); + services = gson.fromJson(result,Services.class); + Log.w("PTS-Android", "test: " + services.getServices().get(0).getAddress().toString()); + + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + } + + private class getAllServicesAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + + } + + @Override + protected Void doInBackground(Void... params) { + getAllServicesByUsername(sharedPreferences.getString("Email", null)); + return null; + } + + protected void onPostExecute(Void aVoid) { + + } + } + + + View.OnClickListener mUpdateClickListener = new View.OnClickListener() { + + @Override + public void onClick(View view) { + mFirstname = et_firstname.getText().toString(); + mLastname = et_lastname.getText().toString(); + mEmail = et_email.getText().toString(); + mPhonenumber = et_phonenumber.getText().toString(); + mAddress = et_address.getText().toString(); + + + if (mFirstname.equals("") || mEmail.equals("") || mPhonenumber.equals("") || mAddress.equals("")) { + tv_requiredtext.setVisibility(View.VISIBLE); + return; + }else{ + updateProfileAsyncTask task = new updateProfileAsyncTask(); + task.execute(); + + tv_requiredtext.setTextColor(Color.parseColor("#4CAF50")); + tv_requiredtext.setText("Update Success!"); + tv_requiredtext.setVisibility(View.INVISIBLE); + + + } + + + } + }; + + public String generateRegisterTutorServiceRequestJson() { + String result = ""; + UpdateProfileRequestObject request = new UpdateProfileRequestObject(); + + request.setFirstname(mFirstname); + request.setLastname(mLastname); + request.setEmail(mEmail); + request.setPhonenumber(mPhonenumber); + // Address address = new Address(); + + + result = UpdateProfileRequestObject.toJsonString(request); + return result; + } + + public String UpdateProfile(){ + String result = ""; + DefaultHttpClient httpclient = new DefaultHttpClient(); + try{ + String url = hostname + updateProfileMethod; + HttpPost postRequest = new HttpPost(url); + postRequest.addHeader("Content-Type", "application/json"); + StringEntity postentity = new StringEntity(requestJson, "UTF-8"); + postentity.setContentType("application/json"); + postRequest.setEntity(postentity); + + HttpResponse httpResponse = httpclient.execute(postRequest); + + HttpEntity entity = httpResponse.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + Log.w("PTS-Android", "Entity : " + result); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + // When HttpClient instance is no longer needed, + // shut down the connection manager to ensure + // immediate deallocation of all system resources + httpclient.getConnectionManager().shutdown(); + } + return result; + + + } + + private class updateProfileAsyncTask extends AsyncTask { + @Override + protected void onPreExecute() { + requestJson = generateRegisterTutorServiceRequestJson(); + //progressBar.setVisibility(View.VISIBLE); + } + + @Override + protected void onProgressUpdate(Void... values) { + // progressBar.animate(); + } + + @Override + protected void onPostExecute(Void aVoid) { + //progressBar.setVisibility(View.GONE); + if (updateResult.equals("YES")) { + Toast.makeText(getActivity(), "Profile Updated Successfully", Toast.LENGTH_SHORT).show(); + + + + } else { + Toast.makeText(getActivity(), "Update Failed, Please Try again Later", Toast.LENGTH_SHORT).show(); + } + } + + @Override + protected Void doInBackground(Void... params) { + + updateResult = UpdateProfile(); + return null; + } + } + + private void setAdapter() { + ArrayList dummyServiceList= new ArrayList(); + Services services = new Services(); + Service dummyService = new Service(); + Address address = new Address(); + address.setAddressLine1("930 Benge Dr"); + address.setCity("Arlington"); + address.setState("TX"); + address.setZipCode("76013"); + dummyService.setAddress(address); + dummyService.setAvgRating(50); + dummyService.setCatagory("Android"); + dummyService.setSubCatagory("Backend"); + dummyService.setDescription("what the fxxk"); + dummyService.setInitials("Z,C"); + dummyService.setTutorName("Zhenyu Chen"); + dummyService.setMiles(20.0); + dummyService.setNumOfFeedbacks(123); + + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + dummyServiceList.add(dummyService); + services.setServices(dummyServiceList); + + + + + + + + + + slAdapeter = new ServicesListAdapter(getActivity(),services); + rv_servicelist.setAdapter(slAdapeter); + int viewHeight = slAdapeter.getItemCount() * 350; + rv_servicelist.getLayoutParams().height = viewHeight; + + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Address.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Address.java new file mode 100644 index 0000000..dff6ef7 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Address.java @@ -0,0 +1,95 @@ +package edu.uta.cse.personaltutorservice.Model_Objects; + +/** + * Created by Arun on 2/15/2016. + */ +/* This is a Generated Class, generated from JSON using pojo.sodhanalibrary.com/*/ +public class Address +{ + private String State; + + private String Longitude; + + private String Lattitude; + + private String ZipCode; + + private String AddressLine1; + + private String City; + + private String AddressLine2; + + public String getState () + { + return State; + } + + public void setState (String State) + { + this.State = State; + } + + public String getLongitude () + { + return Longitude; + } + + public void setLongitude (String Longitude) + { + this.Longitude = Longitude; + } + + public String getLattitude () + { + return Lattitude; + } + + public void setLattitude (String Lattitude) + { + this.Lattitude = Lattitude; + } + + public String getZipCode () + { + return ZipCode; + } + + public void setZipCode (String ZipCode) + { + this.ZipCode = ZipCode; + } + + public String getAddressLine1 () + { + return AddressLine1; + } + + public void setAddressLine1 (String AddressLine1) + { + this.AddressLine1 = AddressLine1; + } + + public String getCity () + { + return City; + } + + public void setCity (String City) + { + this.City = City; + } + + public String getAddressLine2 () + { + return AddressLine2; + } + + public void setAddressLine2 (String AddressLine2) + { + this.AddressLine2 = AddressLine2; + } + + +} + diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Availability.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Availability.java new file mode 100644 index 0000000..ad31c34 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Availability.java @@ -0,0 +1,31 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +public class Availability +{ + private Days[] days; + + public Days[] getDays () + { + return days; + } + + public void setDays (Days[] days) + { + this.days = days; + } + + @Override + public String toString() + { + String result="Days["; + for(Days day : days){ + result+=day.getName()+","; + } + result+="]"; + return result; + } +} + diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Categories.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Categories.java new file mode 100644 index 0000000..1c54ab7 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Categories.java @@ -0,0 +1,20 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +/** + * @author Arun + * + */ +public class Categories { +private Category[] Categories; + +public Category[] getCategories() { + return Categories; +} + +public void setCategories(Category[] categories) { + Categories = categories; +} +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Category.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Category.java new file mode 100644 index 0000000..c69dfac --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Category.java @@ -0,0 +1,51 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +public class Category +{ +private String CategoryName; + +private String CategoryId; + +private String isCategoryActive; + +public String getCategoryName () +{ +return CategoryName; +} + +public void setCategoryName (String CategoryName) +{ +this.CategoryName = CategoryName; +} + +public String getCategoryId () +{ +return CategoryId; +} + +public void setCategoryId (String CategoryId) +{ +this.CategoryId = CategoryId; +} + +public String getIsCategoryActive () +{ +return isCategoryActive; +} + +public void setIsCategoryActive (String isCategoryActive) +{ +this.isCategoryActive = isCategoryActive; +} + +@Override +public String toString() +{ +return "ClassPojo [CategoryName = "+CategoryName+", CategoryId = "+CategoryId+", isCategoryActive = "+isCategoryActive+"]"; +} +} + + diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Days.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Days.java new file mode 100644 index 0000000..99667bf --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Days.java @@ -0,0 +1,42 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +public class Days { + private String Name; + + private String EndTime; + + private String StartTime; + + public String getName() { + return Name; + } + + public void setName(String Name) { + this.Name = Name; + } + + public String getEndTime() { + return EndTime; + } + + public void setEndTime(String EndTime) { + this.EndTime = EndTime; + } + + public String getStartTime() { + return StartTime; + } + + public void setStartTime(String StartTime) { + this.StartTime = StartTime; + } + + @Override + public String toString() { + return "ClassPojo [Name = " + Name + ", EndTime = " + EndTime + + ", StartTime = " + StartTime + "]"; + } +} \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Service.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Service.java new file mode 100644 index 0000000..52291d4 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Service.java @@ -0,0 +1,198 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +/** + * @author Arun + * + */ +public class Service +{ + private String ServiceLattitude; + + private String ServiceName; + + private String ServiceId; + + private String ServiceLongitude; + + private Category Category; + + private SubCategory SubCategory; + + + private User User; + private String PricePerHour; + + + private String catagory; + private String subCatagory; + private String tutorName; + private int avgRating; + private int numOfFeedbacks; + private Address address; + private String description; + private double miles; + private String isAdvertisment; + private String initials; + + public String getInitials() { + return initials; + } + + public void setInitials(String initials) { + this.initials = initials; + } + + public String getIsAdvertisment() { + return isAdvertisment; + } + + public String getCatagory() { + return catagory; + } + + public void setCatagory(String catagory) { + this.catagory = catagory; + } + + public String getSubCatagory() { + return subCatagory; + } + + public void setSubCatagory(String subCatagory) { + this.subCatagory = subCatagory; + } + + public String getTutorName() { + return tutorName; + } + + public void setTutorName(String tutorName) { + this.tutorName = tutorName; + } + + + public String getPricePerHour () + { + return PricePerHour; + } + + public void setPricePerHour (String PricePerHour) + { + this.PricePerHour = PricePerHour; + } + public String getServiceLattitude () + { + return ServiceLattitude; + } + + public void setServiceLattitude (String ServiceLattitude) + { + this.ServiceLattitude = ServiceLattitude; + } + + public String getServiceName () + { + return ServiceName; + } + + public void setServiceName (String ServiceName) + { + this.ServiceName = ServiceName; + } + + public String getServiceId () + { + return ServiceId; + } + + public void setServiceId (String ServiceId) + { + this.ServiceId = ServiceId; + } + + public String getServiceLongitude () + { + return ServiceLongitude; + } + + public void setServiceLongitude (String ServiceLongitude) + { + this.ServiceLongitude = ServiceLongitude; + } + + @Override + public String toString() + { + return "ClassPojo [ServiceLattitude = "+ServiceLattitude+", ServiceName = "+ServiceName+", ServiceId = "+ServiceId+", ServiceLongitude = "+ServiceLongitude+"]"; + } + + public Category getCategory() { + return Category; + } + + public void setCategory(Category category) { + Category = category; + } + + public SubCategory getSubCategory() { + return SubCategory; + } + + public void setSubCategory(SubCategory subCategory) { + SubCategory = subCategory; + } + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + public int getAvgRating() { + return avgRating; + } + + public void setAvgRating(int avgRating) { + this.avgRating = avgRating; + } + public int getNumOfFeedbacks() { + return numOfFeedbacks; + } + + public void setNumOfFeedbacks(int numOfFeedbacks) { + this.numOfFeedbacks = numOfFeedbacks; + } + public void setDescription(String description) { + this.description = description; + } + public String getDescription() { + return description; + } + + public double getMiles() { + return miles; + } + + public void setMiles(double miles) { + this.miles = miles; + } + + public String isAdvertisment() { + return isAdvertisment; + } + + public void setIsAdvertisment(String isAdvertisment) { + this.isAdvertisment = isAdvertisment; + } + + public User getUser() { + return User; + } + + public void setUser(User user) { + User = user; + } +} \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Services.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Services.java new file mode 100644 index 0000000..49fe6b1 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/Services.java @@ -0,0 +1,28 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +import java.util.ArrayList; + +/** + * @author Arun + * + */ +public class Services +{ + private ArrayList Services; + + public ArrayList getServices() { + return Services; + } + + public void setServices(ArrayList services) { + Services = services; + } + @Override + public String toString() + { + return "ClassPojo [Service = "+Services+"]"; + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategories.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategories.java new file mode 100644 index 0000000..b2a1382 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategories.java @@ -0,0 +1,22 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + +/** + * @author Arun + * + */ +public class SubCategories { + private SubCategory[] SubCategories; + + public SubCategory[] getSubCategories() { + return SubCategories; + } + + public void setSubCategories(SubCategory[] subcategories) { + SubCategories = subcategories; + } + + +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategory.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategory.java new file mode 100644 index 0000000..c3d8cca --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/SubCategory.java @@ -0,0 +1,62 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Model_Objects; + + +public class SubCategory +{ +private String SubCategoryId; + +private String CategoryId; + +private String isSubCategoryActive; + +private String SubCategoryName; + +public String getSubCategoryId () +{ + return SubCategoryId; +} + +public void setSubCategoryId (String SubCategoryId) +{ + this.SubCategoryId = SubCategoryId; +} + +public String getCategoryId () +{ + return CategoryId; +} + +public void setCategoryId (String CategoryId) +{ + this.CategoryId = CategoryId; +} + +public String getIsSubCategoryActive () +{ + return isSubCategoryActive; +} + +public void setIsSubCategoryActive (String isSubCategoryActive) +{ + this.isSubCategoryActive = isSubCategoryActive; +} + +public String getSubCategoryName () +{ + return SubCategoryName; +} + +public void setSubCategoryName (String SubCategoryName) +{ + this.SubCategoryName = SubCategoryName; +} + +@Override +public String toString() +{ + return "ClassPojo [SubCategoryId = "+SubCategoryId+", CategoryId = "+CategoryId+", isSubCategoryActive = "+isSubCategoryActive+", SubCategoryName = "+SubCategoryName+"]"; +} +} \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/User.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/User.java new file mode 100644 index 0000000..fd595d3 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Model_Objects/User.java @@ -0,0 +1,148 @@ +package edu.uta.cse.personaltutorservice.Model_Objects; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import edu.uta.cse.personaltutorservice.Request_Objects.UserRequest; + +/** + * Created by Arun on 2/15/2016. + */ +public class User +{ + + private int UserId; + private String UserType; + + private String Email; + + private Address Address; + + private String Password; + + private String FirstName; + + private String PhoneNumber; + + private String LastName; + private String initials; + + public String getInitials() { + return initials; + } + + public void setInitials(String initials) { + this.initials = initials; + } + + public String getUserType () + { + return UserType; + } + + public void setUserType (String UserType) + { + this.UserType = UserType; + } + + public String getEmail () + { + return Email; + } + + public void setEmail (String Email) + { + this.Email = Email; + } + + public edu.uta.cse.personaltutorservice.Model_Objects.Address getAddress () + { + return Address; + } + + public void setAddress (Address Address) + { + this.Address = Address; + } + + public String getPassword () + { + return Password; + } + + public void setPassword (String Password) + { + this.Password = Password; + } + + public String getFirstName () + { + return FirstName; + } + + public void setFirstName (String FirstName) + { + this.FirstName = FirstName; + } + + public String getPhoneNumber () + { + return PhoneNumber; + } + + public void setPhoneNumber (String PhoneNumber) + { + this.PhoneNumber = PhoneNumber; + } + + public String getLastName () + { + return LastName; + } + + public void setLastName (String LastName) + { + this.LastName = LastName; + } + public int getUserId() { + return UserId; + } + + public void setUserId(int userId) { + UserId = userId; + } + + public static User parseUserjsonToJavaObject(String userjson) { + // parser to parse the json object + JsonParser parser = new JsonParser(); + JsonObject obj = (JsonObject) parser.parse(userjson); + + User user = new User();// the user object we are trying to populate + Gson gson = new Gson();// create a gson object + try { + // the user json is down one level, so get that and convert to java + // object + user = gson.fromJson(obj.get("User").toString(), User.class); + } catch (Exception ex) { + ex.printStackTrace(); + } + + return user; + } + + public static String toJsonString(User user){ + Gson gson = new Gson(); + String result = ""; + UserRequest request = new UserRequest(); + request.setUser(user); + try{ + result = gson.toJson(request, UserRequest.class); + } + catch(Exception ex){ + ex.printStackTrace(); + } + + return result; + } +} \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/NearbyServicesResponse.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/NearbyServicesResponse.java new file mode 100644 index 0000000..b2d9b6a --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/NearbyServicesResponse.java @@ -0,0 +1,31 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Request_Objects; + +import edu.uta.cse.personaltutorservice.Model_Objects.Services; + +/** + * @author Arun + * + */ +public class NearbyServicesResponse +{ + private edu.uta.cse.personaltutorservice.Model_Objects.Services Services; + + public Services getServices () + { + return Services; + } + + public void setServices (Services Services) + { + this.Services = Services; + } + + @Override + public String toString() + { + return "ClassPojo [Services = "+Services+"]"; + } +} \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequest.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequest.java new file mode 100644 index 0000000..d025d9d --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequest.java @@ -0,0 +1,17 @@ +package edu.uta.cse.personaltutorservice.Request_Objects; + +/** + * Created by Arun on 3/5/2016. + */ +public class RegisterServiceRequest { + + private RegisterServiceRequestObject registerServiceRequestObject; + + public RegisterServiceRequestObject getRegisterServiceRequestObject() { + return registerServiceRequestObject; + } + + public void setRegisterServiceRequestObject(RegisterServiceRequestObject registerServiceRequestObject) { + this.registerServiceRequestObject = registerServiceRequestObject; + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequestObject.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequestObject.java new file mode 100644 index 0000000..6097ce9 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/RegisterServiceRequestObject.java @@ -0,0 +1,123 @@ +/** + * + */ +package edu.uta.cse.personaltutorservice.Request_Objects; + +import android.util.Log; + +import com.google.gson.Gson; + +import edu.uta.cse.personaltutorservice.Model_Objects.Availability; +import edu.uta.cse.personaltutorservice.Model_Objects.Category; +import edu.uta.cse.personaltutorservice.Model_Objects.SubCategory; + +/** + * @author Arun + * + */ +public class RegisterServiceRequestObject +{ + private int UserId; + private String PricePerHour; + + private String WillingToTravelInMiles; + + private String Advertise; + + private edu.uta.cse.personaltutorservice.Model_Objects.Category Category; + + private edu.uta.cse.personaltutorservice.Model_Objects.Availability Availability; + + private edu.uta.cse.personaltutorservice.Model_Objects.SubCategory SubCategory; + + public String getPricePerHour () + { + return PricePerHour; + } + + public void setPricePerHour (String PricePerHour) + { + this.PricePerHour = PricePerHour; + } + + public String getWillingToTravelInMiles () + { + return WillingToTravelInMiles; + } + + public void setWillingToTravelInMiles (String WillingToTravelInMiles) + { + this.WillingToTravelInMiles = WillingToTravelInMiles; + } + + public String getAdvertise () + { + return Advertise; + } + + public void setAdvertise (String Advertise) + { + this.Advertise = Advertise; + } + + public Category getCategory () + { + return Category; + } + + public void setCategory (Category Category) + { + this.Category = Category; + } + + public Availability getAvailability () + { + return Availability; + } + + public void setAvailability (Availability Availability) + { + this.Availability = Availability; + } + + public SubCategory getSubCategory () + { + return SubCategory; + } + + public void setSubCategory (SubCategory SubCategory) + { + this.SubCategory = SubCategory; + } + + @Override + public String toString() + { + return "ClassPojo [PricePerHour = "+PricePerHour+", WillingToTravelInMiles = "+WillingToTravelInMiles+", Advertise = "+Advertise+", Category = "+Category+", Availability = "+Availability+", SubCategory = "+SubCategory+"]"+"userId="+UserId; + } + + public int getUserId() { + return UserId; + } + + public void setUserId(int userId) { + UserId = userId; + } + + public static String toJsonString(RegisterServiceRequestObject registerServiceRequestObject){ + Gson gson = new Gson(); + String result = ""; + RegisterServiceRequest request = new RegisterServiceRequest(); + request.setRegisterServiceRequestObject(registerServiceRequestObject); + try{ + result = gson.toJson(request, RegisterServiceRequest.class); + Log.w("PTS-Android", result); + } + catch(Exception ex){ + ex.printStackTrace(); + } + + return result; + + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequest.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequest.java new file mode 100644 index 0000000..7467e3f --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequest.java @@ -0,0 +1,16 @@ +package edu.uta.cse.personaltutorservice.Request_Objects; + +/** + * Created by HaoKing on 3/17/2016. + */ +public class UpdateProfileRequest { + private UpdateProfileRequestObject updateProfileRequestObject; + + public UpdateProfileRequestObject getUpdateProfileRequestObject() { + return updateProfileRequestObject; + } + + public void setUpdateProfileRequestObject(UpdateProfileRequestObject updateProfileRequestObject) { + this.updateProfileRequestObject = updateProfileRequestObject; + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequestObject.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequestObject.java new file mode 100644 index 0000000..707e31b --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UpdateProfileRequestObject.java @@ -0,0 +1,75 @@ +package edu.uta.cse.personaltutorservice.Request_Objects; + +import android.util.Log; + +import com.google.gson.Gson; + +import edu.uta.cse.personaltutorservice.Model_Objects.Address; + +/** + * Created by HaoKing on 3/17/2016. + */ +public class UpdateProfileRequestObject { + private String firstname; + private String lastname; + private String email; + private String phonenumber; + private Address address; + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public static String toJsonString(UpdateProfileRequestObject updateProfileRequestObject){ + Gson gson = new Gson(); + String result = ""; + UpdateProfileRequest request = new UpdateProfileRequest(); + request.setUpdateProfileRequestObject(updateProfileRequestObject); + try{ + result = gson.toJson(request, UpdateProfileRequest.class); + Log.w("PTS-Android", result); + } + catch(Exception ex){ + ex.printStackTrace(); + } + + return result; + + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UserRequest.java b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UserRequest.java new file mode 100644 index 0000000..42e68e1 --- /dev/null +++ b/Android Project/PersonalTutorService/app/src/main/java/edu/uta/cse/personaltutorservice/Request_Objects/UserRequest.java @@ -0,0 +1,18 @@ +package edu.uta.cse.personaltutorservice.Request_Objects; + +import edu.uta.cse.personaltutorservice.Model_Objects.User; + +/** + * Created by Arun on 2/22/2016. + */ +public class UserRequest { + private edu.uta.cse.personaltutorservice.Model_Objects.User User; + + public User getUser() { + return User; + } + + public void setUser(User user) { + this.User = user; + } +} diff --git a/Android Project/PersonalTutorService/app/src/main/res/drawable-xxhdpi/ad_icon.jpg b/Android Project/PersonalTutorService/app/src/main/res/drawable-xxhdpi/ad_icon.jpg new file mode 100644 index 0000000..5b6dc5f Binary files /dev/null and b/Android Project/PersonalTutorService/app/src/main/res/drawable-xxhdpi/ad_icon.jpg differ diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/activity_login.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/activity_login.xml index feb9c4b..b1e0a02 100644 --- a/Android Project/PersonalTutorService/app/src/main/res/layout/activity_login.xml +++ b/Android Project/PersonalTutorService/app/src/main/res/layout/activity_login.xml @@ -11,7 +11,7 @@ android:id="@+id/RelativeLayout" android:layout_centerInParent="true" android:background="@mipmap/backgrounddesign5" - tools:context="edu.uta.cse.personaltutorservice.LoginActivity"> + tools:context="edu.uta.cse.personaltutorservice.Activities.LoginActivity"> + tools:context="edu.uta.cse.personaltutorservice.Activities.MainActivity"> @@ -17,7 +17,7 @@ the container. --> diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/activity_register.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/activity_register.xml index faa879a..c8ee1b2 100644 --- a/Android Project/PersonalTutorService/app/src/main/res/layout/activity_register.xml +++ b/Android Project/PersonalTutorService/app/src/main/res/layout/activity_register.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="edu.uta.cse.personaltutorservice.RegisterActivity"> + tools:context="edu.uta.cse.personaltutorservice.Activities.RegisterActivity"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/drawer_main.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/drawer_main.xml index 2e32ada..2f11ad9 100644 --- a/Android Project/PersonalTutorService/app/src/main/res/layout/drawer_main.xml +++ b/Android Project/PersonalTutorService/app/src/main/res/layout/drawer_main.xml @@ -6,4 +6,4 @@ android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" - tools:context="edu.uta.cse.personaltutorservice.NavigationDrawerFragment" /> + tools:context="edu.uta.cse.personaltutorservice.Fragments.NavigationDrawerFragment" /> diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_home.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_home.xml index a1c95a8..9ea9bca 100644 --- a/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_home.xml +++ b/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_home.xml @@ -2,7 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="edu.uta.cse.personaltutorservice.HomeFragment" + tools:context="edu.uta.cse.personaltutorservice.Fragments.HomeFragment" android:background="@mipmap/backgrounddesign5"> @@ -40,6 +40,7 @@ android:text="Quick Summary:" android:layout_below="@+id/userName"/> +