Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 18 additions & 12 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,16 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
signingConfigs {
signing {
keyAlias keystoreProperties['KeyAlias']
keyPassword keystoreProperties['KeyPassword']
storeFile file(keystoreProperties['KeyLocation'])
storePassword keystoreProperties['KeyPassword']
}
}
compileSdkVersion 27
buildToolsVersion '27.0.2'

buildToolsVersion '27.0.3'
defaultConfig {
applicationId "com.djonique.birdays"
minSdkVersion 16
Expand All @@ -36,8 +43,11 @@ android {
vectorDrawables.useSupportLibrary = true
resValue "string", "version_name", versionName
manifestPlaceholders = [fabric_api_key: keystoreProperties['FabricApiKey']]
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
lintOptions {
abortOnError false
}

buildTypes {
debug {
minifyEnabled false
Expand All @@ -50,6 +60,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
resValue "string", "banner_ad_id", keystoreProperties['BannerAdIdRelease']
buildConfigField "String", "INTERSTITIAL_AD_ID", keystoreProperties['InterstitialAdIdRelease']
signingConfig signingConfigs.signing
}
}
}
Expand All @@ -59,40 +70,35 @@ repositories {
}

def androidSupportVersion = '27.0.2'
def firebaseVersion = '11.6.2'
def firebaseVersion = '12.0.1'
def butterKnifeVersion = '8.8.1'

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')

// Android support library
compile "com.android.support:appcompat-v7:${androidSupportVersion}"
compile "com.android.support:design:${androidSupportVersion}"
compile "com.android.support:recyclerview-v7:${androidSupportVersion}"
compile "com.android.support:cardview-v7:${androidSupportVersion}"
compile "com.android.support:support-v4:${androidSupportVersion}"
compile "com.android.support:support-vector-drawable:${androidSupportVersion}"

// Firebase
compile "com.google.firebase:firebase-core:${firebaseVersion}"
compile "com.google.firebase:firebase-ads:${firebaseVersion}"
compile "com.google.firebase:firebase-perf:${firebaseVersion}"

// ButterKnife
compile "com.jakewharton:butterknife:${butterKnifeVersion}"
annotationProcessor "com.jakewharton:butterknife-compiler:${butterKnifeVersion}"

// Material date and time picker
compile 'com.wdullaer:materialdatetimepicker:3.4.1'

// Rate this app
compile 'io.github.kobakei:ratethisapp:1.2.0'

//implementation 'net.danlew:android.joda:2.9.9.3'
compile 'joda-time:joda-time:2.9.9'
// Crashlytics
compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
transitive = true
}

// JUnit
testCompile 'junit:junit:4.12'
}
Expand Down
3 changes: 3 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@
-keepattributes SourceFile,LineNumberTable
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-dontwarn com.google.android.gms.**
-dontwarn com.google.ads.**
-dontwarn org.joda.time.**
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_notification" />

<!-- Fabric Crashlytics -->
<meta-data
android:name="io.fabric.ApiKey"
android:value="${fabric_api_key}" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
import com.djonique.birdays.adapters.FamousFragmentAdapter;
import com.djonique.birdays.alarm.AlarmHelper;
import com.djonique.birdays.database.DbHelper;
import com.djonique.birdays.models.AnniversaryType;
import com.djonique.birdays.models.DisplayedAge;
import com.djonique.birdays.models.Person;
import com.djonique.birdays.utils.Constants;
import com.djonique.birdays.utils.Utils;
Expand Down Expand Up @@ -82,10 +84,14 @@ public class DetailActivity extends AppCompatActivity {
RelativeLayout rlDaysSinceBirthday;
@BindView(R.id.textview_detail_since)
TextView tvDaysSinceBirthday;
@BindView(R.id.textview_detail_label)
TextView tvAnniversaryLabel;
@BindView(R.id.imageview_detail_zodiac)
ImageView ivZodiacSign;
@BindView(R.id.textview_detail_zodiac)
TextView tvZodiacSign;
@BindView(R.id.textview_detail_zodiac_label)
TextView tvZodiacSignLabel;
@BindView(R.id.cardview_detail_info)
CardView cardViewInfo;
@BindView(R.id.relativelayout_detail_phone)
Expand All @@ -102,9 +108,8 @@ public class DetailActivity extends AppCompatActivity {
private InterstitialAd mInterstitialAd;
private DbHelper dbHelper;
private Person person;
private long timeStamp, date;
private String phoneNumber, email, displayedAge;
private boolean yearUnknown;
private long timeStamp;
private DisplayedAge displayedAge;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Expand All @@ -114,7 +119,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean adEnabled = preferences.getBoolean(getString(R.string.ad_interstitial_key), true);
displayedAge = preferences.getString(Constants.DISPLAYED_AGE_KEY, "0");
displayedAge = Utils.getDisplayedAge(preferences.getString(Constants.DISPLAYED_AGE_KEY, DisplayedAge.CURRENT.name()));

/*
* Interstitial doesn't work on Android API 26+
Expand All @@ -133,10 +138,6 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
Intent intent = getIntent();
timeStamp = intent.getLongExtra(Constants.TIME_STAMP, 0);
person = dbHelper.query().getPerson(timeStamp);
date = person.getDate();
yearUnknown = person.isYearUnknown();
phoneNumber = person.getPhoneNumber();
email = person.getEmail();

toolbar.setTitle(person.getName());
setSupportActionBar(toolbar);
Expand Down Expand Up @@ -201,22 +202,32 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
private void setupUI() {
setSeasonImage();

tvDaysLeft.setText(Utils.daysLeft(this, date));
tvDaysLeft.setText(Utils.daysLeftPretty(this, person));
tvAnniversaryLabel.setText(person.getAnniversaryLabel());

if (yearUnknown) {
tvDate.setText(Utils.getDateWithoutYear(date));
if (person.isYearUnknown()) {
tvDate.setText(Utils.getDateWithoutYear(person.getDate()));
tvAge.setVisibility(View.GONE);
rlDaysSinceBirthday.setVisibility(View.GONE);
} else {
tvDate.setText(Utils.getDate(date));
tvAge.setText(String.valueOf(displayedAge.equals("0") ? Utils.getCurrentAge(date) : Utils.getFutureAge(date)));
tvDaysSinceBirthday.setText(Utils.daysSinceBirthday(date));
tvDate.setText(Utils.getDate(person.getDate()));
tvAge.setText(String.valueOf(Utils.getAge(person.getDate(), displayedAge)));
tvDaysSinceBirthday.setText(Utils.daysSinceBirthday(person.getDate()));
}

int zodiacId = Utils.getZodiacId(date);
tvZodiacSign.setText(getString(zodiacId));
ivZodiacSign.setImageResource(Utils.getZodiacImage(zodiacId));
if (person.getAnniversaryType() == AnniversaryType.BIRTHDAY) {
int zodiacId = Utils.getZodiacId(person.getDate());
tvZodiacSign.setText(getString(zodiacId));
ivZodiacSign.setImageResource(Utils.getZodiacImage(zodiacId));
}
else {
tvZodiacSign.setVisibility(View.GONE);
tvZodiacSignLabel.setVisibility(View.GONE);
ivZodiacSign.setVisibility(View.GONE);
}

final String phoneNumber = person.getPhoneNumber();
final String email = person.getEmail();
if (isEmpty(phoneNumber) && isEmpty(email))
cardViewInfo.setVisibility(View.GONE);

Expand Down Expand Up @@ -247,7 +258,7 @@ private void loadBornThisDay() {
FamousFragmentAdapter adapter = new FamousFragmentAdapter();
recyclerView.setAdapter(adapter);

List<Person> famousPersons = dbHelper.query().getFamousBornThisDay(date);
List<Person> famousPersons = dbHelper.query().getFamousBornThisDay(person.getDate());
for (int i = 0; i < famousPersons.size(); i++) {
adapter.addPerson(famousPersons.get(i));
}
Expand All @@ -265,16 +276,30 @@ void starEditActivity() {
* Set up image depending on month
*/
private void setSeasonImage() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
int month = calendar.get(Calendar.MONTH);
if (month >= 0 && month < 2 || month == 11) {
ivSeasonPicture.setImageResource(R.drawable.img_winter);
} else if (month >= 2 && month < 5) {
ivSeasonPicture.setImageResource(R.drawable.img_spring);
} else if (month >= 5 && month < 8) {
ivSeasonPicture.setImageResource(R.drawable.img_summer);
} else ivSeasonPicture.setImageResource(R.drawable.img_autumn);
final int month = person.getMonth();
//probably better with if's and ranges, but i find this easier to see what's going on
switch (month) {
case 12:
case 1:
case 2:
ivSeasonPicture.setImageResource(R.drawable.img_winter);
break;
case 3:
case 4:
case 5:
ivSeasonPicture.setImageResource(R.drawable.img_spring);
break;
case 6:
case 7:
case 8:
ivSeasonPicture.setImageResource(R.drawable.img_summer);
break;
case 9:
case 10:
case 11:
ivSeasonPicture.setImageResource(R.drawable.img_autumn);
break;
}
}

private void deletePersonDialog(final Person person) {
Expand All @@ -283,8 +308,6 @@ private void deletePersonDialog(final Person person) {
builder.setPositiveButton(getString(R.string.ok_button), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

new AlarmHelper(getApplicationContext()).removeAlarms(timeStamp);
dbHelper.removeRecord(timeStamp);
Utils.notifyWidget(getApplicationContext());
dialog.dismiss();
Expand Down Expand Up @@ -314,25 +337,25 @@ private void rateThisAppInit(Context context) {
@OnClick(R.id.imagebutton_detail_phone)
void makeCall() {
startActivity(Intent.createChooser(new Intent(Intent.ACTION_DIAL,
Uri.parse(Constants.TEL + phoneNumber)), null));
Uri.parse(Constants.TEL + person.getPhoneNumber())), null));
}

@OnClick(R.id.imagebutton_detail_chat)
void sendMessage() {
Intent intent = new Intent(Intent.ACTION_VIEW)
.setType(Constants.TYPE_SMS)
.putExtra(Constants.ADDRESS, phoneNumber)
.setData(Uri.parse(Constants.SMSTO + phoneNumber));
.putExtra(Constants.ADDRESS, person.getPhoneNumber())
.setData(Uri.parse(Constants.SMSTO + person.getPhoneNumber()));
startActivity(Intent.createChooser(intent, null));
}

@OnClick(R.id.imagebutton_detail_email)
void sendEmail() {
Intent intent = new Intent(Intent.ACTION_SENDTO)
.setType(Constants.TYPE_EMAIL)
.putExtra(Intent.EXTRA_EMAIL, new String[]{email})
.putExtra(Intent.EXTRA_EMAIL, new String[]{person.getEmail()})
.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.happy_birthday))
.setData(Uri.parse(Constants.MAILTO + email));
.setData(Uri.parse(Constants.MAILTO + person.getEmail()));
startActivity(Intent.createChooser(intent, null));
}
}
34 changes: 12 additions & 22 deletions app/src/main/java/com/djonique/birdays/activities/EditActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@
import com.djonique.birdays.utils.Utils;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;

import org.joda.time.LocalDate;

import java.util.Calendar;
import java.util.Locale;

import butterknife.BindView;
import butterknife.ButterKnife;
Expand Down Expand Up @@ -66,8 +69,6 @@ public class EditActivity extends AppCompatActivity implements
private DbHelper dbHelper;
private Person person;
private Calendar calendar;
private long date;
private boolean yearUnknown;
private boolean hideOkButton = false;

@Override
Expand All @@ -81,10 +82,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {

dbHelper = new DbHelper(this);
person = dbHelper.query().getPerson(timeStamp);
yearUnknown = person.isYearUnknown();

calendar = Calendar.getInstance();
calendar.setTimeInMillis(person.getDate());
calendar = person.getDate().toDateTimeAtCurrentTime().toCalendar(Locale.getDefault());

setupUI();
}
Expand All @@ -104,7 +102,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
case R.id.menu_edit_ok:
updatePerson();
setAlarms(person);
Utils.notifyWidget(this);
setResult(RESULT_OK, new Intent());
finish();
Expand All @@ -127,14 +124,13 @@ private void setupUI() {
etName.setText(person.getName());
etName.setSelection(etName.getText().length());

date = person.getDate();
if (yearUnknown) {
etDate.setText(Utils.getDateWithoutYear(date));
if (person.isYearUnknown()) {
etDate.setText(Utils.getDateWithoutYear(person.getDate()));
} else {
etDate.setText(Utils.getDate(date));
etDate.setText(Utils.getDate(person.getDate()));
}

checkBox.setChecked(yearUnknown);
checkBox.setChecked(person.isYearUnknown());
etPhoneNumber.setText(person.getPhoneNumber());
etEmail.setText(person.getEmail());
}
Expand All @@ -144,7 +140,7 @@ private void setupUI() {
*/
private void updatePerson() {
person.setName(updateText(etName));
person.setDate(calendar.getTimeInMillis());
person.setDate(new LocalDate(calendar));
person.setYearUnknown(checkBox.isChecked());
person.setPhoneNumber(updateText(etPhoneNumber));
person.setEmail(updateText(etEmail));
Expand All @@ -162,12 +158,6 @@ private String updateText(EditText editText) {
return result;
}

private void setAlarms(Person person) {
AlarmHelper alarmHelper = new AlarmHelper(this);
alarmHelper.removeAlarms(person.getTimeStamp());
alarmHelper.setAlarms(person);
}

@OnClick(R.id.edittext_edit_date)
void pickDate() {
new DatePickerManager(this, calendar).showDialog(this, this);
Expand All @@ -187,7 +177,7 @@ private void setDate(int year, int month, int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
date = calendar.getTimeInMillis();
LocalDate date = new LocalDate(calendar);
// Checks state of CheckBox whenever date is picked
if (!checkBox.isChecked()) {
etDate.setText(Utils.getDate(date));
Expand Down Expand Up @@ -227,9 +217,9 @@ void validateDate() {
@OnCheckedChanged(R.id.checkbox_edit)
void checkBoxListener() {
if (checkBox.isChecked()) {
etDate.setText(Utils.getDateWithoutYear(date));
etDate.setText(Utils.getDateWithoutYear(person.getDate()));
} else {
etDate.setText(Utils.getDate(date));
etDate.setText(Utils.getDate(person.getDate()));
}
if (fieldsValid()) {
tilEditDate.setErrorEnabled(false);
Expand Down
Loading