Commit 2c3e0998 authored by Nihal Singh's avatar Nihal Singh Committed by Varun Patil

Adds 'Add to Calendar' integration (#286)

* Calender provider implementation

* Undo Calendar provider. Intent approach with dialog

* Lambdas, undo manifest change

* Settings ListPreference added. Fixes minor bug from #284

* Improving EventFragment diff, cleanup

* Preserve going status of event on going back to fragment
parent 99e7df5a
......@@ -6,6 +6,10 @@ public class Constants {
public static final int RESULT_LOAD_IMAGE = 11;
public static final int REQUEST_CAMERA_INT_ID = 101;
public static final String DARK_THEME = "dark_theme";
public static final String CALENDAR_DIALOG = "calendar_dialog";
public static final String CALENDAR_DIALOG_YES = "Yes";
public static final String CALENDAR_DIALOG_NO = "No";
public static final String CALENDAR_DIALOG_ALWAYS_ASK = "Always ask";
public static final String NOTIFICATIONS_RESPONSE_JSON = "notifications_json";
public static final String EVENT_ID = "event_id";
public static final String EVENT_LATITUDE = "event_latitude";
......
......@@ -274,14 +274,20 @@ public class Event implements CardInterface {
subtitle += simpleDateFormatDate.format(Date) + " | " + simpleDateFormatTime.format(Date);
}
String eventVenueName = getEventVenueString();
if (!eventVenueName.equals(""))
subtitle += " | " + eventVenueName;
return subtitle;
}
public String getEventVenueString() {
StringBuilder eventVenueName = new StringBuilder();
for (Venue venue : getEventVenues()) {
eventVenueName.append(", ").append(venue.getVenueShortName());
}
if (!eventVenueName.toString().equals(""))
subtitle += " | " + eventVenueName.toString().substring(2);
return subtitle;
return eventVenueName.toString().equals("") ? "" : eventVenueName.toString().substring(2);
}
public String getAvatarUrl() {
......
......@@ -5,6 +5,8 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SwitchPreferenceCompat;
......@@ -37,64 +39,54 @@ public class SettingsFragment extends PreferenceFragmentCompat {
// Show contact number
showContactPref = (SwitchPreferenceCompat) findPreference("show_contact");
showContactPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
toggleShowContact((SwitchPreferenceCompat) preference, o);
return false;
}
showContactPref.setOnPreferenceChangeListener((preference, option) -> {
toggleShowContact((SwitchPreferenceCompat) preference, option);
return false;
});
showContactPref.setEnabled(false);
// Dark Theme
SwitchPreferenceCompat darkThemePref = (SwitchPreferenceCompat) findPreference("dark_theme");
darkThemePref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
toggleDarkTheme((SwitchPreferenceCompat) preference, o);
return true;
}
darkThemePref.setOnPreferenceChangeListener((preference, option) -> {
toggleDarkTheme((boolean) option);
return true;
});
darkThemePref.setChecked(sharedPref.getBoolean(Constants.DARK_THEME, false));
// Add to Calendar
ListPreference calendarPref = (ListPreference) findPreference("add_to_calendar");
calendarPref.setOnPreferenceChangeListener((preference, option) -> {
toggleCalendarDialog((String) option);
return true;
});
calendarPref.setValue(sharedPref.getString(Constants.CALENDAR_DIALOG, Constants.CALENDAR_DIALOG_ALWAYS_ASK));
// Update Profile
Preference profilePref = findPreference("profile");
profilePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
openWebURL("https://gymkhana.iitb.ac.in/sso/user");
return false;
}
profilePref.setOnPreferenceClickListener(preference -> {
openWebURL("https://gymkhana.iitb.ac.in/sso/user");
return false;
});
// Feedback
Preference feedbackPref = findPreference("feedback");
feedbackPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
openWebURL("https://insti.app/feedback");
return false;
}
feedbackPref.setOnPreferenceClickListener(preference -> {
openWebURL("https://insti.app/feedback");
return false;
});
// About
Preference aboutPref = findPreference("about");
aboutPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
openAbout();
return false;
}
aboutPref.setOnPreferenceClickListener(preference -> {
openAbout();
return false;
});
// Logout
Preference logoutPref = findPreference("logout");
logoutPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
logout();
return false;
}
logoutPref.setOnPreferenceClickListener(preference -> {
logout();
return false;
});
// Disable buttons if not logged in
......@@ -139,8 +131,8 @@ public class SettingsFragment extends PreferenceFragmentCompat {
}
}
public void toggleShowContact(final SwitchPreferenceCompat showContactPref, Object o) {
final boolean isChecked = (boolean) o;
private void toggleShowContact(final SwitchPreferenceCompat showContactPref, Object option) {
final boolean isChecked = (boolean) option;
showContactPref.setEnabled(false);
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
retrofitInterface.patchUserMe(Utils.getSessionIDHeader(), new UserShowContactPatchRequest(isChecked)).enqueue(new Callback<User>() {
......@@ -166,17 +158,29 @@ public class SettingsFragment extends PreferenceFragmentCompat {
});
}
public void toggleDarkTheme(final SwitchPreferenceCompat showContactPref, Object o) {
editor.putBoolean(Constants.DARK_THEME, (boolean) o);
private void toggleDarkTheme(boolean option) {
editor.putBoolean(Constants.DARK_THEME, option);
editor.commit();
Utils.changeTheme(this, option);
}
private void toggleCalendarDialog(String option) {
// Using strings.xml values for populating ListPreference. `option` comes from strings.xml
// Using Constants for updating SharedPrefs. `choice` comes from Constants.
String choice = Constants.CALENDAR_DIALOG_ALWAYS_ASK;
if (option.equals(getString(R.string.calendar_yes))) choice = Constants.CALENDAR_DIALOG_YES;
else if (option.equals(getString(R.string.calendar_no))) choice = Constants.CALENDAR_DIALOG_NO;
editor.putString(Constants.CALENDAR_DIALOG, choice);
editor.commit();
Utils.changeTheme(this, (boolean) o);
}
public void openAbout() {
private void openAbout() {
Utils.updateFragment(new AboutFragment(), getActivity());
}
public void logout() {
private void logout() {
final SessionManager sessionManager = new SessionManager(getContext());
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
retrofitInterface.logout(Utils.getSessionIDHeader()).enqueue(new EmptyCallback<Void>() {
......
<vector android:height="36dp" android:tint="#767676"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M17,12h-5v5h5v-5zM16,1v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2h-1L18,1h-2zM19,19L5,19L5,8h14v11z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:padding="20dp" >
<CheckBox
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remember my choice and don't ask me again" >
</CheckBox>
</LinearLayout>
\ No newline at end of file
......@@ -27,6 +27,17 @@
<item>QIP</item>
</string-array>
<string-array name="add_to_calendar_options">
<item>@string/calendar_yes</item>
<item>@string/calendar_no</item>
<item>@string/calendar_always_ask</item>
</string-array>
<!-- Add to Calendar Preference options -->
<string name="calendar_yes">Yes</string>
<string name="calendar_no">No</string>
<string name="calendar_always_ask">Always ask</string>
<string name="default_notification_channel_id">INSTIAPP_NOTIFS</string>
<!--NSS side-->
......
......@@ -15,6 +15,14 @@
app:summary="Note: this feature is in beta"
android:icon="@drawable/ic_color_lens_gray_36dp"/>
<ListPreference
app:key="add_to_calendar"
app:title="Add to Calendar"
app:summary="Add to calendar on Going/Interested press"
app:entries="@array/add_to_calendar_options"
app:entryValues="@array/add_to_calendar_options"
android:icon="@drawable/ic_event_gray_36dp"/>
<Preference
app:key="profile"
app:title="Update Profile"
......
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