Merge pull request #620 from DanielKaparunakis/FirstDayOfTheWeek

Feature: First day of the week
This commit is contained in:
Phillip Thelen 2016-09-23 19:06:21 +02:00 committed by GitHub
commit 258215fee9
10 changed files with 193 additions and 83 deletions

View file

@ -18,6 +18,10 @@
<string name="PS_contact_title">Contact me</string>
<string name="unknown_error">An error happened…</string>
<string name="pref_account_header">Account</string>
<string name="pref_first_day_of_the_week_title">First Day of the Week</string>
<string name="pref_first_day_of_the_week_summary">First day of the week in all calendars</string>
<string name="pref_first_day_of_the_week_default_value">1</string>
<string name="pref_first_day_of_the_week_key">FirstDayOfTheWeek</string>
<string name="pref_reminder_header">Daily Reminder</string>
<string name="pref_reminder_checkbox">Activate Reminder</string>
<string name="pref_reminder_picker">Set Reminder Time</string>

View file

@ -29,6 +29,16 @@
<item>@string/sunday</item>
</string-array>
<string-array name="weekdayValues">
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>1</item>
</string-array>
<string-array name="avatar_sizes">
<item>@string/avatar_size_slim</item>
<item>@string/avatar_size_broad</item>

View file

@ -62,6 +62,13 @@
android:key="choose_class"
android:order="2"/>
<ListPreference android:title="@string/pref_first_day_of_the_week_title"
android:key="@string/pref_first_day_of_the_week_key"
android:entries="@array/weekdays"
android:entryValues="@array/weekdayValues"
android:summary="@string/pref_first_day_of_the_week_summary"
android:order="4"/>
<Preference android:title="@string/logout"
android:key="logout"
android:summary="@string/logout_description"

View file

@ -0,0 +1,46 @@
package com.habitrpg.android.habitica.helpers;
import java.util.Calendar;
/**
* Created by DanielKaparunakis on 9/10/16.
*/
public class FirstDayOfTheWeekHelper {
private int firstDayOfTheWeek;
private int dailyTaskFormOffset;
private FirstDayOfTheWeekHelper(int dailyTaskFormOffset, int firstDayOfTheWeek) {
this.dailyTaskFormOffset = dailyTaskFormOffset;
this.firstDayOfTheWeek = firstDayOfTheWeek;
}
public static FirstDayOfTheWeekHelper newInstance(int firstDayOfTheWeekSharedPref) {
switch (firstDayOfTheWeekSharedPref){
case Calendar.SUNDAY:
return new FirstDayOfTheWeekHelper(1, Calendar.SUNDAY);
case Calendar.MONDAY:
return new FirstDayOfTheWeekHelper(0, Calendar.MONDAY);
case Calendar.TUESDAY:
return new FirstDayOfTheWeekHelper(6, Calendar.TUESDAY);
case Calendar.WEDNESDAY:
return new FirstDayOfTheWeekHelper(5, Calendar.WEDNESDAY);
case Calendar.THURSDAY:
return new FirstDayOfTheWeekHelper(4, Calendar.THURSDAY);
case Calendar.FRIDAY:
return new FirstDayOfTheWeekHelper(3, Calendar.FRIDAY);
case Calendar.SATURDAY:
return new FirstDayOfTheWeekHelper(2, Calendar.SATURDAY);
default:
return new FirstDayOfTheWeekHelper(1, Calendar.SUNDAY);
}
}
public int getFirstDayOfTheWeek() {
return firstDayOfTheWeek;
}
public int getDailyTaskFormOffset() {
return dailyTaskFormOffset;
}
}

View file

@ -3,7 +3,9 @@ package com.habitrpg.android.habitica.helpers;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.view.View;
import android.content.SharedPreferences;
import android.os.Build;
import android.support.v7.preference.PreferenceManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
@ -15,7 +17,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
@ -69,6 +70,18 @@ public class RemindersManager {
TimePicker dialogTimePicker = (TimePicker) dialog.findViewById(R.id.timePicker);
DatePicker dialogDatePicker = (DatePicker) dialog.findViewById(R.id.datePicker);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String dayOfTheWeek = sharedPreferences.getString("FirstDayOfTheWeek",
Integer.toString(Calendar.getInstance().getFirstDayOfWeek()));
FirstDayOfTheWeekHelper firstDayOfTheWeekHelper =
FirstDayOfTheWeekHelper.newInstance(Integer.parseInt(dayOfTheWeek));
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH) {
dialogDatePicker.getCalendarView().setFirstDayOfWeek(
firstDayOfTheWeekHelper.getFirstDayOfTheWeek());
} else {
dialogDatePicker.setFirstDayOfWeek(firstDayOfTheWeekHelper.getFirstDayOfTheWeek());
}
dialogConfirmButton.setOnClickListener(view -> {
int day = dialogDatePicker.getDayOfMonth();
int month = dialogDatePicker.getMonth();

View file

@ -1,5 +1,40 @@
package com.habitrpg.android.habitica.ui.activities;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.sqlite.SQLiteDoneException;
import android.databinding.DataBindingUtil;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.FileProvider;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.amplitude.api.Amplitude;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HabiticaApplication;
@ -35,8 +70,6 @@ import com.habitrpg.android.habitica.events.commands.SellItemCommand;
import com.habitrpg.android.habitica.events.commands.UnlockPathCommand;
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand;
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
import com.habitrpg.android.habitica.ui.AvatarView;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
import com.habitrpg.android.habitica.ui.TutorialView;
@ -95,42 +128,6 @@ import org.json.JSONObject;
import org.solovyev.android.checkout.ActivityCheckout;
import org.solovyev.android.checkout.Checkout;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.sqlite.SQLiteDoneException;
import android.databinding.DataBindingUtil;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.FileProvider;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;

View file

@ -1,5 +1,15 @@
package com.habitrpg.android.habitica.ui.activities;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import com.amplitude.api.Amplitude;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HostConfig;
@ -20,14 +30,7 @@ import org.greenrobot.eventbus.Subscribe;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Button;
import java.util.Calendar;
import java.util.List;
import javax.inject.Inject;
@ -148,6 +151,11 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("FirstDayOfTheWeek",
Integer.toString(Calendar.getInstance().getFirstDayOfWeek()));
editor.commit();
if (v == this.nextButton) {
if (this.pager.getCurrentItem() == 1) {
List<Task> newTasks = this.taskSetupFragment.createSampleTasks();

View file

@ -1,42 +1,17 @@
package com.habitrpg.android.habitica.ui.activities;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.helpers.RemindersManager;
import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager;
import com.habitrpg.android.habitica.ui.adapter.tasks.CheckListAdapter;
import com.habitrpg.android.habitica.ui.adapter.tasks.RemindersAdapter;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Select;
import net.pherth.android.emoji_library.EmojiEditText;
import net.pherth.android.emoji_library.EmojiPopup;
import org.greenrobot.eventbus.EventBus;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
@ -58,19 +33,45 @@ import android.widget.NumberPicker;
import android.widget.Spinner;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.TimePicker;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.commands.DeleteTaskCommand;
import com.habitrpg.android.habitica.helpers.FirstDayOfTheWeekHelper;
import com.habitrpg.android.habitica.helpers.RemindersManager;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.ui.WrapContentRecyclerViewLayoutManager;
import com.habitrpg.android.habitica.ui.adapter.tasks.CheckListAdapter;
import com.habitrpg.android.habitica.ui.adapter.tasks.RemindersAdapter;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import com.habitrpg.android.habitica.ui.helpers.SimpleItemTouchHelperCallback;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.RemindersItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Select;
import net.pherth.android.emoji_library.EmojiEditText;
import net.pherth.android.emoji_library.EmojiPopup;
import org.greenrobot.eventbus.EventBus;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import butterknife.BindView;
import butterknife.OnClick;
@ -570,6 +571,15 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
this.frequencyContainer.removeAllViews();
if (this.dailyFrequencySpinner.getSelectedItemPosition() == 0) {
String[] weekdays = getResources().getStringArray(R.array.weekdays);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String dayOfTheWeek = sharedPreferences.getString("FirstDayOfTheWeek",
Integer.toString(Calendar.getInstance().getFirstDayOfWeek()));
FirstDayOfTheWeekHelper firstDayOfTheWeekHelper =
FirstDayOfTheWeekHelper.newInstance(Integer.parseInt(dayOfTheWeek));
ArrayList<String> weekdaysTemp = new ArrayList<>(Arrays.asList(weekdays));
Collections.rotate(weekdaysTemp, firstDayOfTheWeekHelper.getDailyTaskFormOffset());
weekdays = weekdaysTemp.toArray(new String[1]);
for (int i = 0; i < 7; i++) {
View weekdayRow = getLayoutInflater().inflate(R.layout.row_checklist, this.frequencyContainer, false);
CheckBox checkbox = (CheckBox) weekdayRow.findViewById(R.id.checkbox);
@ -901,6 +911,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
public DateEditTextListener(EditText dateText) {
calendar = Calendar.getInstance();
this.datePickerText = dateText;
this.datePickerText.setOnClickListener(this);
this.dateFormatter = DateFormat.getDateInstance();
@ -908,6 +919,20 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String dayOfTheWeek = sharedPreferences.getString("FirstDayOfTheWeek",
Integer.toString(Calendar.getInstance().getFirstDayOfWeek()));
FirstDayOfTheWeekHelper firstDayOfTheWeekHelper =
FirstDayOfTheWeekHelper.newInstance(Integer.parseInt(dayOfTheWeek));
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH) {
datePickerDialog.getDatePicker().getCalendarView().setFirstDayOfWeek(
firstDayOfTheWeekHelper.getFirstDayOfTheWeek());
} else {
datePickerDialog.getDatePicker().setFirstDayOfWeek(firstDayOfTheWeekHelper
.getFirstDayOfTheWeek());
}
this.datePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, getResources().getString(R.string.today), (dialog, which) -> {
setCalendar(Calendar.getInstance().getTime());
});

View file

@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'com.android.databinding:dataBinder:1.0-rc4'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.google.gms:google-services:3.0.0'

View file

@ -1,7 +1,7 @@
#Wed Apr 27 08:20:39 CST 2016
#Wed Sep 07 23:45:14 CDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-all.zip
org.gradle.jvmargs=-Xmx3072M
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip