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 @@
-
@@ -12,6 +11,7 @@
+
diff --git a/Android Project/PersonalTutorService/.idea/gradle.xml b/Android Project/PersonalTutorService/.idea/gradle.xml
index d390b65..8d2df47 100644
--- a/Android Project/PersonalTutorService/.idea/gradle.xml
+++ b/Android Project/PersonalTutorService/.idea/gradle.xml
@@ -3,10 +3,9 @@
-
+
-
-
-
-
- 1.8
-
-
-
-
-
-
-
-
-
-
-
\ 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"/>
+
+
diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_main.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_main.xml
index 9ff8213..ba26554 100644
--- a/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_main.xml
+++ b/Android Project/PersonalTutorService/app/src/main/res/layout/fragment_main.xml
@@ -6,11 +6,12 @@
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
- tools:context="edu.uta.cse.personaltutorservice.MainActivity$PlaceholderFragment">
+ tools:context="edu.uta.cse.personaltutorservice.Activities.MainActivity$PlaceholderFragment">
+
diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/services_list_item.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/services_list_item.xml
index a2eef0a..bb8d405 100644
--- a/Android Project/PersonalTutorService/app/src/main/res/layout/services_list_item.xml
+++ b/Android Project/PersonalTutorService/app/src/main/res/layout/services_list_item.xml
@@ -1,225 +1,248 @@
-
- android:clickable="true">
+
+ android:clickable="true">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="5dp"
+ android:layout_marginTop="10dp">
+
+
+ android:layout_centerVertical="true"
+ android:layout_gravity="center"
+ android:orientation="vertical"
+ android:textAllCaps="true"
+ android:text="A.G"
+ android:textColor="@color/ColorWhite"
+ android:textStyle="bold" />
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
- android:ellipsize="end"
- android:maxLines="1"
- android:text="@string/tutor"
- android:textColor="@color/ColorBlack"
- />
+
- />
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+ android:orientation="horizontal">
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
diff --git a/Android Project/PersonalTutorService/app/src/main/res/layout/viewtutorprofile_layout.xml b/Android Project/PersonalTutorService/app/src/main/res/layout/viewtutorprofile_layout.xml
index cb3aa0f..9fed12f 100644
--- a/Android Project/PersonalTutorService/app/src/main/res/layout/viewtutorprofile_layout.xml
+++ b/Android Project/PersonalTutorService/app/src/main/res/layout/viewtutorprofile_layout.xml
@@ -1,14 +1,15 @@
-
+
@@ -127,7 +128,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/email"
- android:visibility="visible"
+ android:visibility="gone"
android:layout_alignParentTop="true"
android:layout_toStartOf="@+id/update_iv_email" />
@@ -183,7 +184,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_phone"
- android:visibility="visible"
+ android:visibility="gone"
android:layout_alignParentTop="true"
android:layout_toStartOf="@+id/update_iv_phonenumber" />
@@ -192,7 +193,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sms"
- android:visibility="visible"
+ android:visibility="gone"
android:layout_alignParentTop="true"
android:layout_toStartOf="@+id/update_iv_phone" />
@@ -279,23 +280,17 @@
-
-
-
+
+
-
+
\ No newline at end of file
diff --git a/Android Project/PersonalTutorService/app/src/main/res/menu/main.xml b/Android Project/PersonalTutorService/app/src/main/res/menu/main.xml
index 116eb9b..9eebe31 100644
--- a/Android Project/PersonalTutorService/app/src/main/res/menu/main.xml
+++ b/Android Project/PersonalTutorService/app/src/main/res/menu/main.xml
@@ -1,7 +1,7 @@