diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5ccbfb9..adb9588 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,10 +27,10 @@
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
+ android:theme="@style/AppTheme.NoActionBar">
@@ -39,20 +39,20 @@
+ android:screenOrientation="portrait" />
+ android:screenOrientation="portrait" />
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:screenOrientation="portrait" />
+ android:theme="@style/AppTheme" />
+
\ No newline at end of file
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
index f616148..b9b0bc3 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
@@ -99,8 +99,8 @@ public abstract class BaseActivity
/* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
startActivity(launchIntent);*/
} else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
- /* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
- startActivity(launchIntent);*/
+ launchIntent = new Intent(getApplicationContext(),BlackList.class);
+ startActivity(launchIntent);
} else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) {
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java
new file mode 100644
index 0000000..b1257ec
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BlackList.java
@@ -0,0 +1,164 @@
+package com.uam.wmi.findmytutor.activity;
+
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
+import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.adapters.BlackListAdapter;
+import com.uam.wmi.findmytutor.model.User;
+import com.uam.wmi.findmytutor.network.ApiClient;
+import com.uam.wmi.findmytutor.service.UserService;
+import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
+import com.uam.wmi.findmytutor.utils.PrefUtils;
+import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
+import com.uam.wmi.findmytutor.utils.RestApiHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableSingleObserver;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.ResponseBody;
+
+import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
+
+public class BlackList extends AppCompatActivity {
+
+ private CompositeDisposable disposable = new CompositeDisposable();
+ private UserService userService;
+
+ @BindView(R.id.black_list_empty_text_view)
+ TextView noNotesView;
+ @BindView(R.id.black_list_recycler_view)
+ RecyclerView mRecyclerView;
+ private BlackListAdapter mAdapter;
+
+ private List blackList = new ArrayList<>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_black_list);
+
+ // Custom Toolbar
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+
+ FloatingActionButton fab = findViewById(R.id.fab);
+ fab.setOnClickListener(view -> Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
+ .setAction("Action", null).show());
+
+ userService = ApiClient.getClient(getApplicationContext())
+ .create(UserService.class);
+
+ // Adapter
+ mAdapter = new BlackListAdapter(this, blackList);
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
+ mRecyclerView.setLayoutManager(mLayoutManager);
+ mRecyclerView.setItemAnimator(new DefaultItemAnimator());
+ mRecyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL, 16));
+ mRecyclerView.setAdapter(mAdapter);
+
+ //TODO API CALL HERE
+
+ fetchBlackListedUsers(PrefUtils.getUserId(this));
+
+// mAdapter = new BlackListAdapter();
+
+ mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, mRecyclerView, new RecyclerTouchListener.ClickListener() {
+ @Override
+ public void onClick(View view, int position) {
+ Toast.makeText(getApplicationContext(), "OnClick", Toast.LENGTH_LONG);
+ }
+
+ @Override
+ public void onLongClick(View view, int position) {
+ Toast.makeText(getApplicationContext(), "OnLongClick", Toast.LENGTH_LONG);
+ }
+ }));
+
+ }
+
+
+ private void fetchBlackListedUsers(String userId) {
+ disposable.add(
+ userService.getTutorBlacklistedByID(userId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeWith(new DisposableSingleObserver>() {
+ @Override
+ public void onSuccess(List users) {
+
+// mAdapter.notifyDataSetChanged();
+ toggleEmptyNotes();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ showError(e);
+ }
+ })
+ );
+ }
+
+ private void showError(Throwable e) {
+ String message;
+
+ if (e instanceof HttpException) {
+ ResponseBody responseBody = ((HttpException) e).response().errorBody();
+ message = RestApiHelper.getErrorMessage(responseBody);
+ } else {
+ message = "Network Error !";
+ }
+ Snackbar.make(getWindow().getDecorView().getRootView(), message, Snackbar.LENGTH_LONG)
+ .setAction("Action", null).show();
+ }
+
+ private void toggleEmptyNotes() {
+ if (blackList.size() > 0) {
+ noNotesView.setVisibility(View.GONE);
+ } else {
+ noNotesView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ disposable.dispose();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ fetchBlackListedUsers(PrefUtils.getUserId(this));
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ }
+}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SpecialList.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SpecialList.java
new file mode 100644
index 0000000..ec12a92
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SpecialList.java
@@ -0,0 +1,19 @@
+package com.uam.wmi.findmytutor.activity;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+import com.uam.wmi.findmytutor.R;
+
+public abstract class SpecialList extends AppCompatActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState){
+ super.onCreate(savedInstanceState);
+ setContentView(getContentViewId());
+
+ }
+
+ abstract int getContentViewId();
+
+
+}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/BlackListAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/BlackListAdapter.java
new file mode 100644
index 0000000..19aaa07
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/BlackListAdapter.java
@@ -0,0 +1,56 @@
+package com.uam.wmi.findmytutor.adapters;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.model.User;
+
+import java.util.List;
+
+import butterknife.ButterKnife;
+
+public class BlackListAdapter extends RecyclerView.Adapter {
+
+ private Context context;
+ private List blackListed;
+
+ public BlackListAdapter(Context context,List list) {
+ this.context = context;
+ this.blackListed = list;
+ }
+
+ @Override
+ public BlackListAdapter.BlackListHolder onCreateViewHolder(ViewGroup parent,
+ int viewType) {
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.black_list_row, parent, false);
+
+ BlackListHolder vh = new BlackListHolder(v);
+ return vh;
+ }
+
+ @Override
+ public void onBindViewHolder(BlackListHolder holder, int position) {
+
+ }
+
+ @Override
+ public int getItemCount(){
+ return blackListed.size();
+ }
+
+
+ public static class BlackListHolder extends RecyclerView.ViewHolder {
+
+ public BlackListHolder(View view){
+ super(view);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java
index 87210e5..ed2f50a 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java
@@ -37,7 +37,7 @@ public class TutorsListAdapter extends RecyclerView.Adapter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/black_list_row.xml b/app/src/main/res/layout/black_list_row.xml
new file mode 100644
index 0000000..f35e962
--- /dev/null
+++ b/app/src/main/res/layout/black_list_row.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_black_list.xml b/app/src/main/res/layout/content_black_list.xml
new file mode 100644
index 0000000..4c49708
--- /dev/null
+++ b/app/src/main/res/layout/content_black_list.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
index c6e0307..c149fc1 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -4,11 +4,11 @@
-->
+ android:title="@string/navigation_item_blacklist" />
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index bcc07bd..5bc97f5 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -19,4 +19,6 @@
13sp12dp10dp
+ 180dp
+ 16dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4788c32..ad700bb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -293,5 +293,95 @@
- user is currently offline- user is inactive (didn’t share any localization data since 7 days)
+ BlackList
+
+ "Material is the metaphor.\n\n"
+
+ "A material metaphor is the unifying theory of a rationalized space and a system of motion."
+ "The material is grounded in tactile reality, inspired by the study of paper and ink, yet "
+ "technologically advanced and open to imagination and magic.\n"
+ "Surfaces and edges of the material provide visual cues that are grounded in reality. The "
+ "use of familiar tactile attributes helps users quickly understand affordances. Yet the "
+ "flexibility of the material creates new affordances that supercede those in the physical "
+ "world, without breaking the rules of physics.\n"
+ "The fundamentals of light, surface, and movement are key to conveying how objects move, "
+ "interact, and exist in space and in relation to each other. Realistic lighting shows "
+ "seams, divides space, and indicates moving parts.\n\n"
+
+ "Bold, graphic, intentional.\n\n"
+
+ "The foundational elements of print based design typography, grids, space, scale, color, "
+ "and use of imagery guide visual treatments. These elements do far more than please the "
+ "eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge "
+ "imagery, large scale typography, and intentional white space create a bold and graphic "
+ "interface that immerse the user in the experience.\n"
+ "An emphasis on user actions makes core functionality immediately apparent and provides "
+ "waypoints for the user.\n\n"
+
+ "Motion provides meaning.\n\n"
+
+ "Motion respects and reinforces the user as the prime mover. Primary user actions are "
+ "inflection points that initiate motion, transforming the whole design.\n"
+ "All action takes place in a single environment. Objects are presented to the user without "
+ "breaking the continuity of experience even as they transform and reorganize.\n"
+ "Motion is meaningful and appropriate, serving to focus attention and maintain continuity. "
+ "Feedback is subtle yet clear. Transitions are efficient yet coherent.\n\n"
+
+ "3D world.\n\n"
+
+ "The material environment is a 3D space, which means all objects have x, y, and z "
+ "dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the "
+ "positive z-axis extending towards the viewer. Every sheet of material occupies a single "
+ "position along the z-axis and has a standard 1dp thickness.\n"
+ "On the web, the z-axis is used for layering and not for perspective. The 3D world is "
+ "emulated by manipulating the y-axis.\n\n"
+
+ "Light and shadow.\n\n"
+
+ "Within the material environment, virtual lights illuminate the scene. Key lights create "
+ "directional shadows, while ambient light creates soft shadows from all angles.\n"
+ "Shadows in the material environment are cast by these two light sources. In Android "
+ "development, shadows occur when light sources are blocked by sheets of material at "
+ "various positions along the z-axis. On the web, shadows are depicted by manipulating the "
+ "y-axis only. The following example shows the card with a height of 6dp.\n\n"
+
+ "Resting elevation.\n\n"
+
+ "All material objects, regardless of size, have a resting elevation, or default elevation "
+ "that does not change. If an object changes elevation, it should return to its resting "
+ "elevation as soon as possible.\n\n"
+
+ "Component elevations.\n\n"
+
+ "The resting elevation for a component type is consistent across apps (e.g., FAB elevation "
+ "does not vary from 6dp in one app to 16dp in another app).\n"
+ "Components may have different resting elevations across platforms, depending on the depth "
+ "of the environment (e.g., TV has a greater depth than mobile or desktop).\n\n"
+
+ "Responsive elevation and dynamic elevation offsets.\n\n"
+
+ "Some component types have responsive elevation, meaning they change elevation in response "
+ "to user input (e.g., normal, focused, and pressed) or system events. These elevation "
+ "changes are consistently implemented using dynamic elevation offsets.\n"
+ "Dynamic elevation offsets are the goal elevation that a component moves towards, relative "
+ "to the component’s resting state. They ensure that elevation changes are consistent "
+ "across actions and component types. For example, all components that lift on press have "
+ "the same elevation change relative to their resting elevation.\n"
+ "Once the input event is completed or cancelled, the component will return to its resting "
+ "elevation.\n\n"
+
+ "Avoiding elevation interference.\n\n"
+
+ "Components with responsive elevations may encounter other components as they move between "
+ "their resting elevations and dynamic elevation offsets. Because material cannot pass "
+ "through other material, components avoid interfering with one another any number of ways, "
+ "whether on a per component basis or using the entire app layout.\n"
+ "On a component level, components can move or be removed before they cause interference. "
+ "For example, a floating action button (FAB) can disappear or move off screen before a "
+ "user picks up a card, or it can move if a snackbar appears.\n"
+ "On the layout level, design your app layout to minimize opportunities for interference. "
+ "For example, position the FAB to one side of stream of a cards so the FAB won’t interfere "
+ "when a user tries to pick up one of cards.\n\n"
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index ad4f49e..703fa27 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -22,4 +22,5 @@
@drawable/fab_label_background@color/mapboxWhite
+