Skip to content

Commit

Permalink
Added onLongClick to ProblemList, Favourites, SolveLater
Browse files Browse the repository at this point in the history
  • Loading branch information
matveevk committed May 27, 2017
1 parent ccebd74 commit e662ac1
Show file tree
Hide file tree
Showing 10 changed files with 211 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ protected void onCreate(Bundle savedInstanceState) {

@Override
public void onBackPressed() {
Log.d("ddd", "1");
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
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.TextView;
import android.widget.Toast;

import com.example.root.prepolymp.Problem;
import com.example.root.prepolymp.ProblemActivity;
Expand All @@ -28,6 +33,10 @@ public class Favourites extends Fragment {

public static ArrayAdapter<String> adapterFavourites;

int longClickPos = 0;

ArrayList<String> probText = null;
ArrayList<Integer> probNums = null;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
Expand All @@ -41,10 +50,10 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
ListView listView = (ListView) view.findViewById(R.id.list_favourites);
TextView tv = (TextView) view.findViewById(R.id.favourites_no_problems);

final ArrayList<String> probText = new ArrayList<>();
final ArrayList<Integer> probNums = new ArrayList<>();
probText = new ArrayList<>();
probNums = new ArrayList<>();
for (Problem s : problems) {
if (s.liked == true) {
if (s.liked) {
probNums.add(s.id - 1);
String ss = "№ " + s.id + " - ";
if (s.topic.equals("алгебра")) {
Expand All @@ -71,7 +80,7 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
TextView tv = (TextView)super.getView(position, convertView, parent);
if (problems.get(position).solved) {
if (problems.get(probNums.get(position)).solved) {
tv.setText(Html.fromHtml(probText.get(position)) + " (решено)");
tv.setTextColor(Color.GRAY);
} else {
Expand All @@ -91,6 +100,53 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
getActivity().startActivity(intent);
}
});

registerForContextMenu(listView);

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
longClickPos = probNums.get(position);
return false;
}
});
}
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
Problem problem = problems.get(longClickPos);
boolean liked = problem.liked, latered = problem.marked;
if (liked && latered) {
inflater.inflate(R.menu.menu_problem_list_11, menu);
} else if (liked) {
inflater.inflate(R.menu.menu_problem_list_10, menu);
} else if (latered) {
inflater.inflate(R.menu.menu_problem_list_01, menu);
} else {
inflater.inflate(R.menu.menu_problem_list_00, menu);
}
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
Problem problem = problems.get(longClickPos);
Log.d("id", "" + problem.id);
switch(item.getItemId()) {
case R.id.menu_problem_list_like_00: problem.liked = true; Toast.makeText(getActivity(), "Добавлено в понравившиеся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_01: problem.liked = true; Toast.makeText(getActivity(), "Добавлено в понравившиеся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_10: problem.liked = false; probText.remove(info.position); probNums.remove(info.position); Toast.makeText(getActivity(), "Удалено из понравившихся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_11: problem.liked = false; probText.remove(info.position); probNums.remove(info.position); Toast.makeText(getActivity(), "Удалено из понравившихся", Toast.LENGTH_LONG).show(); break;

case R.id.menu_problem_list_later_00: if (problem.solved) Toast.makeText(getActivity(), "Нельзя отложить решённую задачу", Toast.LENGTH_LONG).show(); else {problem.marked = true; Toast.makeText(getActivity(), "Отложено", Toast.LENGTH_SHORT).show();} break;
case R.id.menu_problem_list_later_01: problem.marked = false; Toast.makeText(getActivity(), "Убрано из отложенных", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_later_10: if (problem.solved) Toast.makeText(getActivity(), "Нельзя отложить решённую задачу", Toast.LENGTH_LONG).show(); else {problem.marked = true; Toast.makeText(getActivity(), "Отложено", Toast.LENGTH_SHORT).show();} break;
case R.id.menu_problem_list_later_11: problem.marked = false; Toast.makeText(getActivity(), "Убрано из отложенных", Toast.LENGTH_LONG).show(); break;
}
adapterFavourites.notifyDataSetChanged();
return super.onContextItemSelected(item);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
Expand All @@ -31,6 +34,8 @@ public class ProblemList extends Fragment {
public static final String EXTRA = "ProblemList";
public static ArrayAdapter<String> adapterAllProblems;

int longClickPos = 0;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
Expand Down Expand Up @@ -90,7 +95,9 @@ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup
return tv;
}
};

listView.setAdapter(adapterAllProblems);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Expand All @@ -99,5 +106,50 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
getActivity().startActivity(intent);
}
});

registerForContextMenu(listView);

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
longClickPos = position;
return false;
}
});
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
Problem problem = problems.get(longClickPos);
boolean liked = problem.liked, latered = problem.marked;
if (liked && latered) {
inflater.inflate(R.menu.menu_problem_list_11, menu);
} else if (liked) {
inflater.inflate(R.menu.menu_problem_list_10, menu);
} else if (latered) {
inflater.inflate(R.menu.menu_problem_list_01, menu);
} else {
inflater.inflate(R.menu.menu_problem_list_00, menu);
}
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
Problem problem = problems.get(info.position);
switch(item.getItemId()) {
case R.id.menu_problem_list_like_00: problem.liked = true; break;
case R.id.menu_problem_list_like_01: problem.liked = true; break;
case R.id.menu_problem_list_like_10: problem.liked = false; break;
case R.id.menu_problem_list_like_11: problem.liked = false; break;

case R.id.menu_problem_list_later_00: problem.marked = true; break;
case R.id.menu_problem_list_later_01: problem.marked = false; break;
case R.id.menu_problem_list_later_10: problem.marked = true; break;
case R.id.menu_problem_list_later_11: problem.marked = false; break;
}
return super.onContextItemSelected(item);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private void getContest(int n) {
Problem problem = problems.get(randNums.get(i < n ? i : 0));
cardContent.get(i).get(0).setText("Задача № " + problem.id);
switch (problem.topic) {
case "алгебра": cardContent.get(i).get(0).setTextColor(getActivity().getResources().getColor(R.color.colorAlg)); break;
case "алгебра": cardContent.get(i).get(0).setTextColor(getActivity().getResources().getColor(R.color.colorAlgRandomContest)); break;
case "комбинаторика": cardContent.get(i).get(0).setTextColor(getActivity().getResources().getColor(R.color.colorComb)); break;
case "геометрия": cardContent.get(i).get(0).setTextColor(getActivity().getResources().getColor(R.color.colorGeom)); break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
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.TextView;
import android.widget.Toast;

import com.example.root.prepolymp.Problem;
import com.example.root.prepolymp.ProblemActivity;
Expand All @@ -28,6 +33,11 @@ public class SolveLater extends Fragment {

public static ArrayAdapter<String> adapterMarked;

int longClickPos = 0;

ArrayList<String> probText = null;
ArrayList<Integer> probNums = null;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
Expand All @@ -41,8 +51,8 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
ListView listView = (ListView) view.findViewById(R.id.list_later);
TextView tv = (TextView) view.findViewById(R.id.later_no_problems);

final ArrayList<String> probText = new ArrayList<>();
final ArrayList<Integer> probNums = new ArrayList<>();
probText = new ArrayList<>();
probNums = new ArrayList<>();
for (Problem s : problems) {
if (s.marked && !s.solved) {
probNums.add(s.id - 1);
Expand Down Expand Up @@ -87,6 +97,53 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
getActivity().startActivity(intent);
}
});

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
longClickPos = probNums.get(position);
return false;
}
});

registerForContextMenu(listView);
}
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
Problem problem = problems.get(longClickPos);
boolean liked = problem.liked, latered = problem.marked;
if (liked && latered) {
inflater.inflate(R.menu.menu_problem_list_11, menu);
} else if (liked) {
inflater.inflate(R.menu.menu_problem_list_10, menu);
} else if (latered) {
inflater.inflate(R.menu.menu_problem_list_01, menu);
} else {
inflater.inflate(R.menu.menu_problem_list_00, menu);
}
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
Problem problem = problems.get(longClickPos);
Log.d("id", "" + problem.id);
switch(item.getItemId()) {
case R.id.menu_problem_list_like_00: problem.liked = true; Toast.makeText(getActivity(), "Добавлено в понравившиеся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_01: problem.liked = true; Toast.makeText(getActivity(), "Добавлено в понравившиеся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_10: problem.liked = false; Toast.makeText(getActivity(), "Удалено из понравившихся", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_like_11: problem.liked = false; Toast.makeText(getActivity(), "Удалено из понравившихся", Toast.LENGTH_LONG).show(); break;

case R.id.menu_problem_list_later_00: if (problem.solved) Toast.makeText(getActivity(), "Нельзя отложить решённую задачу", Toast.LENGTH_LONG).show(); else {problem.marked = true; Toast.makeText(getActivity(), "Отложено", Toast.LENGTH_SHORT).show();} break;
case R.id.menu_problem_list_later_01: problem.marked = false; probText.remove(info.position); probNums.remove(info.position); Toast.makeText(getActivity(), "Убрано из отложенных", Toast.LENGTH_LONG).show(); break;
case R.id.menu_problem_list_later_10: if (problem.solved) Toast.makeText(getActivity(), "Нельзя отложить решённую задачу", Toast.LENGTH_LONG).show(); else {problem.marked = true; Toast.makeText(getActivity(), "Отложено", Toast.LENGTH_SHORT).show();} break;
case R.id.menu_problem_list_later_11: problem.marked = false; probText.remove(info.position); probNums.remove(info.position); Toast.makeText(getActivity(), "Убрано из отложенных", Toast.LENGTH_LONG).show(); break;
}
adapterMarked.notifyDataSetChanged();
return super.onContextItemSelected(item);
}
}
9 changes: 9 additions & 0 deletions app/src/main/res/menu/menu_problem_list_00.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_problem_list_like_00"
android:title="Лайкнуть" />
<item
android:id="@+id/menu_problem_list_later_00"
android:title="Отложить" />
</menu>
9 changes: 9 additions & 0 deletions app/src/main/res/menu/menu_problem_list_01.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_problem_list_like_01"
android:title="Лайкнуть" />
<item
android:id="@+id/menu_problem_list_later_01"
android:title="Убрать из отложенных" />
</menu>
9 changes: 9 additions & 0 deletions app/src/main/res/menu/menu_problem_list_10.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_problem_list_like_10"
android:title="Убрать из понравившихся" />
<item
android:id="@+id/menu_problem_list_later_10"
android:title="Отложить" />
</menu>
9 changes: 9 additions & 0 deletions app/src/main/res/menu/menu_problem_list_11.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_problem_list_like_11"
android:title="Убрать из понравившихся" />
<item
android:id="@+id/menu_problem_list_later_11"
android:title="Убрать из отложенных" />
</menu>
6 changes: 3 additions & 3 deletions app/src/main/res/values/colors.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
<color name="colorAlg">#C162EA</color>
<color name="colorComb">#499351</color>
<color name="colorGeom">#2675BF</color>
<!-- v.1
<color name="colorAlgLight">#FFD6E0</color>
<!-- v.1
<color name="colorAlgLight">#fce5fb</color>
<color name="colorAlgLight">#f9e5f8</color>
-->
<color name="colorAlgLight">#ffeafd</color>
<color name="colorAlgLight">#ffeafd</color> -->
<color name="colorCombLight">#E2FFE3</color>
<color name="colorGeomLight">#D1DEFF</color>
<color name="colorAlgRandomContest">#db5546</color>
</resources>

0 comments on commit e662ac1

Please sign in to comment.