Commit 3df0e370 authored by Sajal Narang's avatar Sajal Narang

Implement mess menu, fix #113

parent 9826041e
......@@ -8,6 +8,7 @@ public class Constants {
public static final String NOTIFICATIONS_RESPONSE_JSON = "notifications_json";
public static final String EVENT_JSON = "event_json";
public static final String USER_ID = "user_id";
public static final String USER_HOSTEL = "user_hostel";
public static final String SENT_TOKEN_TO_SERVER = "sentTokenToServer";
public static final String REGISTRATION_COMPLETE = "registrationComplete";
public static final String PREF_NAME = "LoggedInPref";
......
......@@ -212,8 +212,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
updateFragment(trainingBlogFragment);
break;
case R.id.nav_mess_menu:
MessMenuFragment messmenuFragment = new MessMenuFragment();
updateFragment(messmenuFragment);
MessMenuFragment messMenuFragment = new MessMenuFragment();
updateFragment(messMenuFragment);
break;
case R.id.nav_gc_rankings:
GCRankingsFragment gcrankingsFragment = new GCRankingsFragment();
......@@ -269,6 +269,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
bundle = new Bundle();
}
bundle.putString(Constants.SESSION_ID, session.pref.getString(Constants.SESSION_ID, "Error"));
if (fragment instanceof MessMenuFragment)
bundle.putString(Constants.USER_HOSTEL, currentUser.getHostel());
fragment.setArguments(bundle);
FragmentManager manager = getSupportFragmentManager();
if (fragment instanceof FeedFragment)
......
package in.ac.iitb.gymkhana.iitbapp.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import in.ac.iitb.gymkhana.iitbapp.R;
import in.ac.iitb.gymkhana.iitbapp.data.MessMenu;
public class MessMenuAdapter extends RecyclerView.Adapter<MessMenuAdapter.ViewHolder> {
private List<MessMenu> messMenus;
private Context context;
public MessMenuAdapter(List<MessMenu> messMenus) {
this.messMenus = messMenus;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.mess_menu_card, parent, false);
final ViewHolder postViewHolder = new ViewHolder(postView);
return postViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MessMenuAdapter.ViewHolder holder, int position) {
MessMenu messMenu = messMenus.get(position);
holder.day.setText(generateDayString(messMenu.getDay()));
holder.breakfast.setText(messMenu.getBreakfast());
holder.lunch.setText(messMenu.getLunch());
holder.snacks.setText(messMenu.getSnacks());
holder.dinner.setText(messMenu.getDinner());
}
@Override
public int getItemCount() {
return messMenus.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView day;
private TextView breakfast;
private TextView lunch;
private TextView snacks;
private TextView dinner;
public ViewHolder(View itemView) {
super(itemView);
day = itemView.findViewById(R.id.day_text_view);
breakfast = itemView.findViewById(R.id.breakfast_text_view);
lunch = itemView.findViewById(R.id.lunch_text_view);
snacks = itemView.findViewById(R.id.snacks_text_view);
dinner = itemView.findViewById(R.id.dinner_text_view);
}
}
private String generateDayString(int day) {
switch (day) {
case 1:
return "Monday";
case 2:
return "Tuesday";
case 3:
return "Wednesday";
case 4:
return "Thursday";
case 5:
return "Friday";
case 6:
return "Saturday";
case 7:
return "Sunday";
default:
throw new RuntimeException("DayIndexOutOfBounds: " + day);
}
}
}
......@@ -8,6 +8,7 @@ import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedResponse;
import in.ac.iitb.gymkhana.iitbapp.data.HostelMessMenu;
import in.ac.iitb.gymkhana.iitbapp.data.PlacementBlogPost;
import in.ac.iitb.gymkhana.iitbapp.data.TrainingBlogPost;
import in.ac.iitb.gymkhana.iitbapp.data.User;
......@@ -47,6 +48,8 @@ public interface RetrofitInterface {
@GET("training-blog")
Call<List<TrainingBlogPost>> getTrainingBlogFeed(@Header("Cookie") String sessionID);
@GET("mess")
Call<List<HostelMessMenu>> getInstituteMessMenu(@Header("Cookie") String sessionID);
// @POST("getNotifications/")
// Call<NotificationsResponse> getNotifications(@Body NotificationsRequest notificationsRequest);
}
......@@ -6,7 +6,7 @@ import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ServiceGenerator {
private static final String BASE_URL = "https://insti.app/api/";
private static final String BASE_URL = "https://api.insti.app/api/";
private static OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
private static Retrofit.Builder retrofitBuilder = new Retrofit.Builder()
.baseUrl(BASE_URL)
......
......@@ -6,7 +6,7 @@ import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;
import android.content.Context;
@Database(entities = {Event.class, Body.class, Venue.class, User.class, Role.class, PlacementBlogPost.class, TrainingBlogPost.class}, version = 1)
@Database(entities = {Event.class, Body.class, Venue.class, User.class, Role.class, PlacementBlogPost.class, TrainingBlogPost.class, HostelMessMenu.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
......
......@@ -11,10 +11,6 @@ import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.util.List;
/**
* Created by mrunz on 14/3/18.
*/
public class Converters {
@TypeConverter
public static List<Event> eventsfromString(String value) {
......@@ -73,16 +69,16 @@ public class Converters {
}
@TypeConverter
public static List<Role> rolesfromString(String value){
Type listType = new TypeToken<List<Role>>(){
public static List<Role> rolesfromString(String value) {
Type listType = new TypeToken<List<Role>>() {
}.getType();
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String stringfromRoles(List<Role> list){
Gson gson = new Gson();
String json= gson.toJson(list);
public static String stringfromRoles(List<Role> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
......@@ -105,24 +101,24 @@ public class Converters {
}
@TypeConverter
public static Body bodyfromString(String value){
Type listType = new TypeToken<Body>(){
public static Body bodyfromString(String value) {
Type listType = new TypeToken<Body>() {
}.getType();
return new Gson().fromJson(value,listType);
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String stringfromBody(Body body){
public static String stringfromBody(Body body) {
Gson gson = new Gson();
String json = gson.toJson(body);
return json;
}
@TypeConverter
public static List<String> stringsfromString(String value){
Type listType = new TypeToken<List<String>>(){
public static List<String> stringsfromString(String value) {
Type listType = new TypeToken<List<String>>() {
}.getType();
return new Gson().fromJson(value,listType);
return new Gson().fromJson(value, listType);
}
@TypeConverter
......@@ -132,4 +128,17 @@ public class Converters {
return json;
}
@TypeConverter
public static List<MessMenu> messMenusfromString(String value) {
Type listType = new TypeToken<List<MessMenu>>() {
}.getType();
return new Gson().fromJson(value, listType);
}
@TypeConverter
public static String stringfromMessMenus(List<MessMenu> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
}
\ No newline at end of file
......@@ -30,6 +30,9 @@ public interface DbDao {
@Query("SELECT * FROM trainingBlogPosts")
List<TrainingBlogPost> getAllTrainingBlogPosts();
@Query("SELECT * FROM hostelMessMenus")
List<HostelMessMenu> getAllHostelMessMenus();
@Query("SELECT * FROM bodies WHERE id == :id")
public Body[] getBody(String id);
......@@ -48,6 +51,9 @@ public interface DbDao {
@Query("SELECT COUNT(*) from roles")
int countRoles();
@Query("SELECT COUNT(*) from hostelMessMenus")
int countHostelMessMenus();
@Insert
void insertEvents(List<Event> events);
......@@ -90,6 +96,12 @@ public interface DbDao {
@Insert
void insertTrainingBlogPosts(List<TrainingBlogPost> posts);
@Insert
void insertHostelMessMenu(HostelMessMenu hostelMessMenu);
@Insert
void insertHostelMessMenus(List<HostelMessMenu> hostelMessMenus);
@Delete
void deleteEvent(Event event);
......@@ -125,4 +137,7 @@ public interface DbDao {
@Query("DELETE from trainingBlogPosts")
void deleteTrainingBlogPosts();
@Query("DELETE from hostelMessMenus")
void deleteHostelMessMenus();
}
package in.ac.iitb.gymkhana.iitbapp.data;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import com.google.gson.annotations.SerializedName;
import java.util.List;
@Entity(tableName = "hostelMessMenus")
public class HostelMessMenu {
@PrimaryKey(autoGenerate = true)
int db_id;
@ColumnInfo(name = "id")
@SerializedName("id")
private String menuID;
@ColumnInfo(name = "name")
@SerializedName("name")
private String name;
@ColumnInfo(name = "short_name")
@SerializedName("short_name")
private String shortName;
@ColumnInfo(name = "long_name")
@SerializedName("long_name")
private String longName;
@ColumnInfo(name = "mess")
@SerializedName("mess")
private List<MessMenu> messMenus;
public HostelMessMenu(String menuID, String name, String shortName, String longName, List<MessMenu> messMenus) {
this.menuID = menuID;
this.name = name;
this.shortName = shortName;
this.longName = longName;
this.messMenus = messMenus;
}
public String getMenuID() {
return menuID;
}
public void setMenuID(String menuID) {
this.menuID = menuID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public String getLongName() {
return longName;
}
public void setLongName(String longName) {
this.longName = longName;
}
public List<MessMenu> getMessMenus() {
return messMenus;
}
public void setMessMenus(List<MessMenu> messMenus) {
this.messMenus = messMenus;
}
}
package in.ac.iitb.gymkhana.iitbapp.data;
import com.google.gson.annotations.SerializedName;
public class MessMenu {
@SerializedName("id")
private String mealID;
@SerializedName("day")
private int day;
@SerializedName("breakfast")
private String breakfast;
@SerializedName("lunch")
private String lunch;
@SerializedName("snacks")
private String snacks;
@SerializedName("dinner")
private String dinner;
@SerializedName("hostel")
private String hostelID;
public MessMenu(String mealID, int day, String breakfast, String lunch, String snacks, String dinner, String hostelID) {
this.mealID = mealID;
this.day = day;
this.breakfast = breakfast;
this.lunch = lunch;
this.snacks = snacks;
this.dinner = dinner;
this.hostelID = hostelID;
}
public String getMealID() {
return mealID;
}
public void setMealID(String mealID) {
this.mealID = mealID;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public String getBreakfast() {
return breakfast;
}
public void setBreakfast(String breakfast) {
this.breakfast = breakfast;
}
public String getLunch() {
return lunch;
}
public void setLunch(String lunch) {
this.lunch = lunch;
}
public String getSnacks() {
return snacks;
}
public void setSnacks(String snacks) {
this.snacks = snacks;
}
public String getDinner() {
return dinner;
}
public void setDinner(String dinner) {
this.dinner = dinner;
}
public String getHostelID() {
return hostelID;
}
public void setHostelID(String hostelID) {
this.hostelID = hostelID;
}
}
......@@ -60,8 +60,12 @@ public class User {
@ColumnInfo(name = "ldap_id")
@SerializedName("ldap_id")
String userLDAPId;
@ColumnInfo(name = "hostel")
@SerializedName("hostel")
String hostel;
public User(String userID, String userName, String userProfilePictureUrl, List<Event> userInterestedEvents, List<Event> userGoingEvents, String userEmail, String userRollNumber, String userContactNumber, String userAbout, List<Body> userFollowedBodies, List<String> userFollowedBodiesID, List<Role> userRoles, List<Role> userInstituteRoles, String userWebsiteURL, String userLDAPId) {
public User(int db_id, String userID, String userName, String userProfilePictureUrl, List<Event> userInterestedEvents, List<Event> userGoingEvents, String userEmail, String userRollNumber, String userContactNumber, String userAbout, List<Body> userFollowedBodies, List<String> userFollowedBodiesID, List<Role> userRoles, List<Role> userInstituteRoles, String userWebsiteURL, String userLDAPId, String hostel) {
this.db_id = db_id;
this.userID = userID;
this.userName = userName;
this.userProfilePictureUrl = userProfilePictureUrl;
......@@ -77,6 +81,7 @@ public class User {
this.userInstituteRoles = userInstituteRoles;
this.userWebsiteURL = userWebsiteURL;
this.userLDAPId = userLDAPId;
this.hostel = hostel;
}
public static User fromString(String json) {
......@@ -203,6 +208,14 @@ public class User {
this.userLDAPId = userLDAPId;
}
public String getHostel() {
return hostel;
}
public void setHostel(String hostel) {
this.hostel = hostel;
}
@Override
public String toString() {
return new Gson().toJson(this);
......
package in.ac.iitb.gymkhana.iitbapp.fragment;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.List;
import in.ac.iitb.gymkhana.iitbapp.ActivityBuffer;
import in.ac.iitb.gymkhana.iitbapp.Constants;
import in.ac.iitb.gymkhana.iitbapp.R;
import in.ac.iitb.gymkhana.iitbapp.adapter.MessMenuAdapter;
import in.ac.iitb.gymkhana.iitbapp.api.RetrofitInterface;
import in.ac.iitb.gymkhana.iitbapp.api.ServiceGenerator;
import in.ac.iitb.gymkhana.iitbapp.data.AppDatabase;
import in.ac.iitb.gymkhana.iitbapp.data.HostelMessMenu;
import in.ac.iitb.gymkhana.iitbapp.data.MessMenu;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* A simple {@link Fragment} subclass.
*/
public class MessMenuFragment extends BaseFragment {
private RecyclerView messMenuRecyclerView;
private SwipeRefreshLayout messMenuSwipeRefreshLayout;
private AppDatabase appDatabase;
private Spinner hostelSpinner;
public MessMenuFragment() {
// Required empty public constructor
......@@ -27,4 +54,122 @@ public class MessMenuFragment extends BaseFragment {
return inflater.inflate(R.layout.fragment_mess_menu, container, false);
}
@Override
public void onStart() {
super.onStart();
final String hostel = (String) getArguments().get(Constants.USER_HOSTEL);
displayMenu(hostel);
messMenuSwipeRefreshLayout = getActivity().findViewById(R.id.mess_menu_swipe_refresh_layout);
messMenuSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
updateMessMenu(hostel);
}
});
hostelSpinner = getActivity().findViewById(R.id.hostel_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), R.array.hostels_array, R.layout.hostel_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hostelSpinner.setAdapter(adapter);
hostelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (i == 16)
displayMenu("Tansa");
else
displayMenu(Integer.toString(i + 1));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
if (hostel.equals("Tansa"))
hostelSpinner.setSelection(16);
else
hostelSpinner.setSelection(Integer.parseInt(hostel) - 1);
}
private void displayMenu(final String hostel) {
appDatabase = AppDatabase.getAppDatabase(getContext());
new showMessMenuFromDB().execute(hostel);
updateMessMenu(hostel);
}
private void updateMessMenu(final String hostel) {
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.getInstituteMessMenu("sessionid=" + getArguments().getString(Constants.SESSION_ID)).enqueue(new Callback<List<HostelMessMenu>>() {
@Override
public void onResponse(Call<List<HostelMessMenu>> call, Response<List<HostelMessMenu>> response) {
if (response.isSuccessful()) {
List<HostelMessMenu> instituteMessMenu = response.body();
HostelMessMenu hostelMessMenu = findMessMenu(instituteMessMenu, hostel);
displayMessMenu(hostelMessMenu);
new updateDatabase().execute(instituteMessMenu);
}
//Server Error
messMenuSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onFailure(Call<List<HostelMessMenu>> call, Throwable t) {
//Network Error
messMenuSwipeRefreshLayout.setRefreshing(false);
}
});
}
private HostelMessMenu findMessMenu(List<HostelMessMenu> hostelMessMenus, String hostel) {
for (HostelMessMenu hostelMessMenu : hostelMessMenus) {
if (hostelMessMenu.getShortName().equals(hostel)) {
return hostelMessMenu;
}
}
Toast.makeText(getContext(), "Could not retrieve your hostel menu. Please contact your mess secretary/councillor.", Toast.LENGTH_LONG).show();
return null;
}
private void displayMessMenu(HostelMessMenu hostelMessMenu) {
final MessMenuAdapter messMenuAdapter = new MessMenuAdapter(hostelMessMenu.getMessMenus());
getActivityBuffer().safely(new ActivityBuffer.IRunnable() {
@Override
public void run(Activity pActivity) {
try {
messMenuRecyclerView = getActivity().findViewById(R.id.mess_menu_recycler_view);
messMenuRecyclerView.setAdapter(messMenuAdapter);
messMenuRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
} catch (NullPointerException e) {
e.printStackTrace();
}
}
});
}
private class updateDatabase extends AsyncTask<List<HostelMessMenu>, Void, Integer> {
@Override
protected Integer doInBackground(List<HostelMessMenu>... menus) {
appDatabase.dbDao().deleteHostelMessMenus();
appDatabase.dbDao().insertHostelMessMenus(menus[0]);
return 1;
}
}
public class showMessMenuFromDB extends AsyncTask<String, Void, HostelMessMenu> {
@Override
protected HostelMessMenu doInBackground(String... strings) {
return findMessMenu(appDatabase.dbDao().getAllHostelMessMenus(), strings[0]);
}
@Override
protected void onPostExecute(HostelMessMenu hostelMessMenu) {
displayMessMenu(hostelMessMenu);
}
}
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="in.ac.iitb.gymkhana.iitbapp.fragment.MessMenuFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
<Spinner
android:id="@+id/hostel_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/mess_menu_swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
tools:context="in.ac.iitb.gymkhana.iitbapp.fragment.MessMenuFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/mess_menu_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="8dp" />
</FrameLayout>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:padding="4dp"
android:textColor="#000000"
android:textSize="20sp" />
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/day_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Breakfast"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:id="@+id/breakfast_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Lunch"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:id="@+id/lunch_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Tiffin"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:id="@+id/snacks_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Dinner"
android:textColor="@color/colorAccent"
android:textSize="16sp" />
<TextView
android:id="@+id/dinner_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000" />
</LinearLayout>
</android.support.v7.widget.CardView>
\ No newline at end of file
......@@ -12,4 +12,24 @@
<string name="Cancel">Cancel</string>
<string name="gps_network_not_enabled">Location is not enabled. Please turn on your location from the settings.</string>
<string name="open_location_settings">Open Location Settings</string>
<string-array name="hostels_array">
<item>Hostel 1</item>
<item>Hostel 2</item>
<item>Hostel 3</item>
<item>Hostel 4</item>
<item>Hostel 5</item>
<item>Hostel 6</item>
<item>Hostel 7</item>
<item>Hostel 8</item>
<item>Hostel 9</item>
<item>Hostel 10</item>
<item>Hostel 11</item>
<item>Hostel 12</item>
<item>Hostel 13</item>
<item>Hostel 14</item>
<item>Hostel 15</item>
<item>Hostel 16</item>
<item>Tansa House</item>
</string-array>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment