diff --git a/app/build.gradle b/app/build.gradle index a333d4f..6f6f95d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,12 @@ android { } } +repositories{ + maven { + url 'http://dl.bintray.com/amulyakhare/maven' + } +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' @@ -45,4 +51,6 @@ dependencies { implementation "com.squareup.okhttp3:okhttp:3.11.0" implementation "com.squareup.okhttp3:okhttp-urlconnection:3.10.0" implementation "com.squareup.okhttp3:logging-interceptor:3.11.0" + implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55a5adf..5f227e5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,8 @@ + android:launchMode="singleInstance" + android:theme="@style/AppTheme.NoActionBar"> diff --git a/app/src/main/java/com/uam/wmi/findmytutor/ListViewAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/ListViewAdapter.java new file mode 100644 index 0000000..8fd91a7 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/ListViewAdapter.java @@ -0,0 +1,109 @@ +package com.uam.wmi.findmytutor; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.amulyakhare.textdrawable.TextDrawable; +import com.amulyakhare.textdrawable.util.ColorGenerator; + +import com.uam.wmi.findmytutor.activity.MainActivity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class ListViewAdapter extends ArrayAdapter { + + + private MainActivity activity; + private List friendList; + private List searchList; + + public ListViewAdapter(MainActivity context, int resource, List objects) { + super(context, resource, objects); + this.activity = context; + this.friendList = objects; + this.searchList = new ArrayList<>(); + this.searchList.addAll(friendList); + } + + @Override + public int getCount() { + return friendList.size(); + } + + @Override + public String getItem(int position) { + return friendList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + // If holder not exist then locate all view from UI file. + if (convertView == null) { + // inflate UI from XML file + convertView = inflater.inflate(R.layout.item_listview, parent, false); + // get all UI view + holder = new ViewHolder(convertView); + // set tag for holder + convertView.setTag(holder); + } else { + // if holder created, get tag from view + holder = (ViewHolder) convertView.getTag(); + } + + holder.friendName.setText(getItem(position)); + + //get first letter of each String item + String firstLetter = String.valueOf(getItem(position).charAt(0)); + + ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT + // generate random color + int color = generator.getColor(getItem(position)); + + TextDrawable drawable = TextDrawable.builder() + .buildRound(firstLetter, color); // radius in px + + holder.imageView.setImageDrawable(drawable); + + return convertView; + } + + // Filter method + public void filter(String charText) { + charText = charText.toLowerCase(Locale.getDefault()); + friendList.clear(); + if (charText.length() == 0) { + friendList.addAll(searchList); + } else { + for (String s : searchList) { + if (s.toLowerCase(Locale.getDefault()).contains(charText)) { + friendList.add(s); + } + } + } + notifyDataSetChanged(); + } + + private class ViewHolder { + private ImageView imageView; + private TextView friendName; + + public ViewHolder(View v) { + imageView = (ImageView) v.findViewById(R.id.image_view); + friendName = (TextView) v.findViewById(R.id.text); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java index 1584114..43ff86e 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java @@ -5,22 +5,37 @@ import android.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.NavigationView; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBar; +import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.SearchView; +import android.text.TextUtils; +import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView; import android.widget.FrameLayout; +import android.support.v7.widget.Toolbar; +import android.widget.ListView; +import android.widget.Toast; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.maps.MapView; +import com.uam.wmi.findmytutor.ListViewAdapter; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.model.Coordinate; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.CoordinateService; + +import java.util.ArrayList; import java.util.List; @@ -33,28 +48,81 @@ public class MainActivity extends AppCompatActivity { private NotificationFragment notificationFragment; private ProfileFragment profileFragment; + private DrawerLayout drawerLayout; + private ActionBarDrawerToggle actionBarDrawerToggle; - - private MapView mapView; - + public List coordinates; public List getCoordinates() { return this.coordinates; } - public void setCoordinates(List coordinates) { this.coordinates = coordinates; } - public List coordinates; + // 4 search + private ListView listView; + private ArrayList stringArrayList; + private ListViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Mapbox.getInstance(this, getString(R.string.access_token)); setContentView(R.layout.activity_main); - Bundle extras = getIntent().getExtras(); + Mapbox.getInstance(this, getString(R.string.access_token)); + + configureconfigureNavigationDrawer(); + configureBottomNavigationView(); + configureLogoutButton(); + } + + private void configureconfigureNavigationDrawer() { + listView = (ListView) findViewById(R.id.list_item); + Toolbar toolbar = findViewById(R.id.toolbar_main); + setSupportActionBar(toolbar); + + //***/ + + setData(); + adapter = new ListViewAdapter(this, R.layout.item_listview, stringArrayList); + listView.setAdapter(adapter); + + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Toast.makeText(MainActivity.this, (String)parent.getItemAtPosition(position), Toast.LENGTH_SHORT).show(); + } + }); + + + //***/ + + drawerLayout = findViewById(R.id.drawer_layout); + + actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawerLayout.addDrawerListener(actionBarDrawerToggle); + + ActionBar actionBar = getSupportActionBar(); + actionBar.setDisplayShowTitleEnabled(false); + + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + } + + } + + private void setFragment(Fragment fragment) { + FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.main_frame, fragment); + fragmentTransaction.commit(); + } + + private void configureBottomNavigationView(){ + mMainFrame = (FrameLayout) findViewById(R.id.main_frame); mMainNav = (BottomNavigationView) findViewById(R.id.main_nav); + + Bundle extras = getIntent().getExtras(); isTutor = (boolean) extras.get("is_tutor"); if (!isTutor){ mMainNav.findViewById(R.id.nav_profile).setVisibility(View.GONE); @@ -68,7 +136,7 @@ public class MainActivity extends AppCompatActivity { setFragment(mapFragment); mMainNav.setSelectedItemId(R.id.nav_map); - /* code below is resposible for changing colours of tabs in main tab menu */ + /* code below is resposible for changing colours of tabs in main tab menu */ mMainNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { @@ -88,8 +156,9 @@ public class MainActivity extends AppCompatActivity { } } }); + } - + private void configureLogoutButton(){ // Logout button final FloatingActionButton button = findViewById(R.id.logoutButton); button.setOnClickListener(new View.OnClickListener(){ @@ -106,17 +175,73 @@ public class MainActivity extends AppCompatActivity { finish(); } }); - -// CoordinateService service = ApiClient.getClient(getApplicationContext()) -// .create(CoordinateService.class); - - } - private void setFragment(Fragment fragment) { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.main_frame, fragment); - fragmentTransaction.commit(); - } + // mock 4 search bar + private void setData() { + stringArrayList = new ArrayList<>(); + stringArrayList.add("Quynh Trang"); + stringArrayList.add("Hoang Bien"); + stringArrayList.add("Duc Tuan"); + stringArrayList.add("Dang Thanh"); + stringArrayList.add("Xuan Luu"); + stringArrayList.add("Phan Thanh"); + stringArrayList.add("Kim Kien"); + stringArrayList.add("Ngo Trang"); + stringArrayList.add("Thanh Ngan"); + stringArrayList.add("Nguyen Duong"); + stringArrayList.add("Quoc Cuong"); + stringArrayList.add("Tran Ha"); + stringArrayList.add("Vu Danh"); + stringArrayList.add("Minh Meo"); } + @Override + public boolean onCreateOptionsMenu( Menu menu) { + getMenuInflater().inflate( R.menu.menu_main, menu); + + MenuItem myActionMenuItem = menu.findItem( R.id.action_search); + final SearchView searchView = (SearchView) myActionMenuItem.getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + if (TextUtils.isEmpty(newText)) { + adapter.filter(""); + listView.clearTextFilter(); + } else { + adapter.filter(newText); + } + return true; + } + }); + + return true; + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + actionBarDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + actionBarDrawerToggle.onConfigurationChanged(newConfig); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (actionBarDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + return super.onOptionsItemSelected(item); + } +} + diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/bg_actionbar.xml b/app/src/main/res/drawable/bg_actionbar.xml new file mode 100644 index 0000000..d50e9c9 --- /dev/null +++ b/app/src/main/res/drawable/bg_actionbar.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_search.xml b/app/src/main/res/drawable/ic_menu_search.xml new file mode 100644 index 0000000..293a5f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_search.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_settings_gear.xml b/app/src/main/res/drawable/ic_menu_settings_gear.xml new file mode 100644 index 0000000..fe97642 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_settings_gear.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_settings_key.xml b/app/src/main/res/drawable/ic_menu_settings_key.xml new file mode 100644 index 0000000..c6dbab8 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_settings_key.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_sign_out.xml b/app/src/main/res/drawable/ic_menu_sign_out.xml new file mode 100644 index 0000000..1ea4cad --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_sign_out.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_sign_out2.xml b/app/src/main/res/drawable/ic_menu_sign_out2.xml new file mode 100644 index 0000000..f4e94ce --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_sign_out2.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_people_black.xml b/app/src/main/res/drawable/ic_people_black.xml new file mode 100644 index 0000000..53dd7f7 --- /dev/null +++ b/app/src/main/res/drawable/ic_people_black.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_people_white.xml b/app/src/main/res/drawable/ic_people_white.xml new file mode 100644 index 0000000..a64cc85 --- /dev/null +++ b/app/src/main/res/drawable/ic_people_white.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..6d81870 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index c2c77b7..c843678 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -12,6 +12,7 @@ tools:context=".activity.LoginActivity"> + - + android:clickable="true" + android:focusableInTouchMode="true" + android:visibility="visible" + tools:openDrawer="start"> - + + + + + android:layout_height="match_parent" + tools:context=".activity.MainActivity"> - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + - + android:layout_height="wrap_content" /> - - \ No newline at end of file + + diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..9e7994d --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 0be3b43..9f9df82 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -1,11 +1,20 @@ - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_listview.xml b/app/src/main/res/layout/item_listview.xml new file mode 100644 index 0000000..6a9a4d1 --- /dev/null +++ b/app/src/main/res/layout/item_listview.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml new file mode 100644 index 0000000..2ef0844 --- /dev/null +++ b/app/src/main/res/layout/nav_header_main.xml @@ -0,0 +1,28 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 0000000..7d0e267 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml new file mode 100644 index 0000000..3d964f2 --- /dev/null +++ b/app/src/main/res/menu/menu_main.xml @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 0000000..c78981e --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2361e98..387faef 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,7 +2,7 @@ #3F51B5 #303F9F - #FF4081 + #9ef13f #999 #89c3c3c3 #858585 @@ -10,6 +10,7 @@ #ffffff + #ffffff #80ffffff diff --git a/app/src/main/res/values/drawables.xml b/app/src/main/res/values/drawables.xml new file mode 100644 index 0000000..52c6a6c --- /dev/null +++ b/app/src/main/res/values/drawables.xml @@ -0,0 +1,8 @@ + + @android:drawable/ic_menu_camera + @android:drawable/ic_menu_gallery + @android:drawable/ic_menu_slideshow + @android:drawable/ic_menu_manage + @android:drawable/ic_menu_share + @android:drawable/ic_menu_send + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6464e50..bc72b2f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,10 @@ Notification Profile + + Drawer Open + Drawer Closed + Settings Notes @@ -20,6 +24,7 @@ Email Password (optional) Sign in or register + Sign out Sign in This email address is invalid This password is too short @@ -30,4 +35,6 @@ MainActivity pk.eyJ1IjoiZG9tYWdhbHNreSIsImEiOiJjamd4am4zazYwNXo1MzBxeDZtYjA4d2s4In0.KzNdhc9V_-SYe14AZ-q3Ew + Black List + White List diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 545b9c6..31ff20c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,20 +1,21 @@ - + - + - + -