├── .gitignore ├── .tx └── config ├── Birthday-Calendar-Workaround ├── .gitignore ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── birthdayadapter │ │ └── jb │ │ └── workaround │ │ ├── AccountEnableService.java │ │ ├── AuthenticationService.java │ │ ├── Authenticator.java │ │ └── OnBootReceiver.java │ └── res │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_workaround.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_workaround.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_workaround.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_workaround.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_workaround.png │ ├── values │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── account_preferences.xml │ └── authenticator.xml ├── Birthday-Calendar ├── .gitignore ├── build.gradle └── src │ ├── free │ ├── AndroidManifest.xml │ └── res │ │ ├── values │ │ └── strings.xml │ │ └── xml │ │ └── pref_preferences.xml │ ├── full │ └── AndroidManifest.xml │ ├── full_google │ └── AndroidManifest.xml │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── birthdayadapter │ │ ├── provider │ │ ├── BirthdayAdapterContract.java │ │ ├── BirthdayAdapterDatabase.java │ │ ├── BirthdayAdapterProvider.java │ │ └── ProviderHelper.java │ │ ├── service │ │ ├── AccountAuthenticatorService.java │ │ ├── CalendarSyncAdapterService.java │ │ └── MainIntentService.java │ │ ├── ui │ │ ├── AboutFragment.java │ │ ├── AccountListFragment.java │ │ ├── AddAccountActivity.java │ │ ├── BaseActivity.java │ │ ├── BasePreferenceFragment.java │ │ ├── ExtendedPreferencesFragment.java │ │ ├── HelpFragment.java │ │ ├── InstallWorkaroundDialogFragment.java │ │ ├── ReminderPreferenceCompat.java │ │ └── ShowContactActivity.java │ │ └── util │ │ ├── AccountHelper.java │ │ ├── AccountListAdapter.java │ │ ├── AccountListEntry.java │ │ ├── AccountListLoader.java │ │ ├── BackgroundStatusHandler.java │ │ ├── Constants.java │ │ ├── Log.java │ │ ├── MySharedPreferenceChangeListener.java │ │ └── PreferencesHelper.java │ └── res │ ├── layout-v21 │ └── pref_reminder.xml │ ├── layout │ ├── about_fragment.xml │ ├── account_list_entry.xml │ ├── account_list_fragment.xml │ ├── base_activity.xml │ ├── help_fragment.xml │ └── pref_reminder.xml │ ├── mipmap-hdpi │ ├── google_calendar.png │ ├── google_contacts.png │ └── ic_launcher.png │ ├── mipmap-mdpi │ ├── google_calendar.png │ ├── google_contacts.png │ └── ic_launcher.png │ ├── mipmap-xhdpi │ ├── google_calendar.png │ ├── google_contacts.png │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ ├── google_calendar.png │ ├── google_contacts.png │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ ├── google_calendar.png │ ├── google_contacts.png │ └── ic_launcher.png │ ├── raw-bg │ └── help.html │ ├── raw-ca │ └── help.html │ ├── raw-cs │ └── help.html │ ├── raw-de │ └── help.html │ ├── raw-el │ └── help.html │ ├── raw-es │ └── help.html │ ├── raw-et │ └── help.html │ ├── raw-eu │ └── help.html │ ├── raw-fi │ └── help.html │ ├── raw-fr │ └── help.html │ ├── raw-gl │ └── help.html │ ├── raw-hu │ └── help.html │ ├── raw-it │ └── help.html │ ├── raw-ja │ └── help.html │ ├── raw-nb │ └── help.html │ ├── raw-nl │ └── help.html │ ├── raw-pt-rBR │ └── help.html │ ├── raw-pt │ └── help.html │ ├── raw-ro │ └── help.html │ ├── raw-ru │ └── help.html │ ├── raw-sk │ └── help.html │ ├── raw-sv │ └── help.html │ ├── raw-tr │ └── help.html │ ├── raw-uk │ └── help.html │ ├── raw-vi │ └── help.html │ ├── raw-zh │ └── help.html │ ├── raw │ ├── about.html │ └── help.html │ ├── values-bg │ └── strings.xml │ ├── values-ca │ └── strings.xml │ ├── values-cs │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-el │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-et │ └── strings.xml │ ├── values-eu │ └── strings.xml │ ├── values-fi │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-gl │ └── strings.xml │ ├── values-hu │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-nb │ └── strings.xml │ ├── values-nl │ └── strings.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-pt │ └── strings.xml │ ├── values-ro │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-sk │ └── strings.xml │ ├── values-sv │ └── strings.xml │ ├── values-tr │ └── strings.xml │ ├── values-uk │ └── strings.xml │ ├── values-v21 │ └── styles.xml │ ├── values-vi │ └── strings.xml │ ├── values-zh │ └── strings.xml │ ├── values │ ├── colors.xml │ ├── pref_strings.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── account_preferences.xml │ ├── authenticator.xml │ ├── base_preferences.xml │ ├── pref_preferences.xml │ └── sync_calendar.xml ├── CHANGELOG ├── DESCRIPTION ├── LICENSE ├── README.md ├── Resources ├── download_fdroid.png ├── download_google_play.png ├── google_calendar.png ├── google_calendar.svg ├── google_calendar.webp ├── google_contacts.png ├── google_contacts.svg ├── google_contacts.webp ├── ic_launcher.svg ├── ic_launcher_workaround.svg ├── icon_sizes.txt ├── pidgin_pixmaps_emotes_default_24_scalable_cake.svg ├── play_banner.png ├── play_banner.svg ├── play_function.png ├── play_function.svg ├── play_icon.png ├── play_icon_workaround.png ├── preferences-system.svg ├── screenshot0.png ├── screenshot1.png ├── screenshot1b.png ├── screenshot2.png ├── screenshot2_small.png ├── screenshot3.png ├── screenshot3_small.png ├── screenshot4.png ├── screenshot4_small.png ├── screenshot5.png ├── screenshot5_small.png ├── update-drawables-workaround.sh ├── update-drawables.sh ├── workaround_screenshot1.png └── workaround_screenshot2.png ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | #Android specific 2 | bin 3 | gen 4 | obj 5 | libs/armeabi 6 | lint.xml 7 | local.properties 8 | release.properties 9 | ant.properties 10 | *.class 11 | *.apk 12 | 13 | #Gradle 14 | .gradle 15 | build 16 | gradle.properties 17 | 18 | #Maven 19 | target 20 | pom.xml.* 21 | 22 | #Eclipse 23 | .project 24 | .classpath 25 | .settings 26 | .metadata 27 | 28 | #IntelliJ IDEA 29 | .idea 30 | *.iml 31 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar-rDZ, ar_EG: ar-rEG, ar_IQ: ar-rIQ, ar_JO: ar-rJO, ar_KW: ar-rKW, ar_LB: ar-rLB, ar_LY: ar-rLY, ar_MA: ar-rMA, ar_OM: ar-rOM, ar_QA: ar-rQA, ar_SA: ar-rSA, ar_SY: ar-rSY, ar_TN: ar-rTN, ar_YE: ar-rYE, arn_CL: arn-rCL, as_IN: as-rIN, az_AZ: az-rAZ, ba_RU: ba-rRU, be_BY: be-rBY, bg_BG: bg-rBG, bn_BD: bn-rBD, bn_IN: bn-rIN, bo_CN: bo-rCN, br_FR: br-rFR, bs_BA: bs-rBA, ca_ES: ca-rES, co_FR: co-rFR, cs_CZ: cs-rCZ, cy_GB: cy-rGB, da_DK: da-rDK, de_AT: de-rAT, de_CH: de-rCH, de_DE: de-rDE, de_LI: de-rLI, de_LU: de-rLU, dsb_DE: dsb-rDE, dv_MV: dv-rMV, el_GR: el-rGR, en_AU: en-rAU, en_BZ: en-rBZ, en_CA: en-rCA, en_GB: en-rGB, en_IE: en-rIE, en_IN: en-rIN, en_JM: en-rJM, en_MY: en-rMY, en_NZ: en-rNZ, en_PH: en-rPH, en_SG: en-rSG, en_TT: en-rTT, en_US: en-rUS, en_ZA: en-rZA, en_ZW: en-rZW, es_AR: es-rAR, es_BO: es-rBO, es_CL: es-rCL, es_CO: es-rCO, es_CR: es-rCR, es_DO: es-rDO, es_EC: es-rEC, es_ES: es-rES, es_GT: es-rGT, es_HN: es-rHN, es_MX: es-rMX, es_NI: es-rNI, es_PA: es-rPA, es_PE: es-rPE, es_PR: es-rPR, es_PY: es-rPY, es_SV: es-rSV, es_US: es-rUS, es_UY: es-rUY, es_VE: es-rVE, et_EE: et-rEE, eu_ES: eu-rES, fa_IR: fa-rIR, fi_FI: fi-rFI, fil_PH: fil-rPH, fo_FO: fo-rFO, fr_BE: fr-rBE, fr_CA: fr-rCA, fr_CH: fr-rCH, fr_FR: fr-rFR, fr_LU: fr-rLU, fr_MC: fr-rMC, fy_NL: fy-rNL, ga_IE: ga-rIE, gd_GB: gd-rGB, gl_ES: gl-rES, gsw_FR: gsw-rFR, gu_IN: gu-rIN, ha_NG: ha-rNG, he_IL: he-rIL, hi_IN: hi-rIN, hr_BA: hr-rBA, hr_HR: hr-rHR, hsb_DE: hsb-rDE, hu_HU: hu-rHU, hy_AM: hy-rAM, id_ID: id-rID, ig_NG: ig-rNG, ii_CN: ii-rCN, is_IS: is-rIS, it_CH: it-rCH, it_IT: it-rIT, iu_CA: iu-rCA, ja_JP: ja-rJP, ka_GE: ka-rGE, kk_KZ: kk-rKZ, kl_GL: kl-rGL, km_KH: km-rKH, kn_IN: kn-rIN, ko_KR: ko-rKR, kok_IN: kok-rIN, ky_KG: ky-rKG, lb_LU: lb-rLU, lo_LA: lo-rLA, lt_LT: lt-rLT, lv_LV: lv-rLV, mi_NZ: mi-rNZ, mk_MK: mk-rMK, ml_IN: ml-rIN, mn_CN: mn-rCN, mn_MN: mn-rMN, moh_CA: moh-rCA, mr_IN: mr-rIN, ms_BN: ms-rBN, ms_MY: ms-rMY, mt_MT: mt-rMT, nb_NO: nb-rNO, ne_NP: ne-rNP, nl_BE: nl-rBE, nl_NL: nl-rNL, nn_NO: nn-rNO, nso_ZA: nso-rZA, oc_FR: oc-rFR, or_IN: or-rIN, pa_IN: pa-rIN, pl_PL: pl-rPL, prs_AF: prs-rAF, ps_AF: ps-rAF, pt_BR: pt-rBR, pt_PT: pt-rPT, qut_GT: qut-rGT, quz_BO: quz-rBO, quz_EC: quz-rEC, quz_PE: quz-rPE, rm_CH: rm-rCH, ro_RO: ro-rRO, ru_RU: ru-rRU, rw_RW: rw-rRW, sa_IN: sa-rIN, sah_RU: sah-rRU, se_FI: se-rFI, se_NO: se-rNO, se_SE: se-rSE, si_LK: si-rLK, sk_SK: sk-rSK, sl_SI: sl-rSI, sma_NO: sma-rNO, sma_SE: sma-rSE, smj_NO: smj-rNO, smj_SE: smj-rSE, smn_FI: smn-rFI, sms_FI: sms-rFI, sq_AL: sq-rAL, sr_BA: sr-rBA, sr_CS: sr-rCS, sr_ME: sr-rME, sr_RS: sr-rRS, sv_FI: sv-rFI, sv_SE: sv-rSE, sw_KE: sw-rKE, syr_SY: syr-rSY, ta_IN: ta-rIN, te_IN: te-rIN, tg_TJ: tg-rTJ, th_TH: th-rTH, tk_TM: tk-rTM, tn_ZA: tn-rZA, tr_TR: tr-rTR, tt_RU: tt-rRU, tzm_DZ: tzm-rDZ, ug_CN: ug-rCN, uk_UA: uk-rUA, ur_PK: ur-rPK, uz_UZ: uz-rUZ, vi_VN: vi-rVN, wo_SN: wo-rSN, xh_ZA: xh-rZA, yo_NG: yo-rNG, zh_CN: zh-rCN, zh_HK: zh-rHK, zh_MO: zh-rMO, zh_SG: zh-rSG, zh_TW: zh-rTW, zu_ZA: zu-rZA 4 | 5 | [birthday-adapter.strings] 6 | file_filter = Birthday-Calendar/src/main/res/values-/strings.xml 7 | source_file = Birthday-Calendar/src/main/res/values/strings.xml 8 | source_lang = en 9 | 10 | [birthday-adapter.help] 11 | file_filter = Birthday-Calendar/src/main/res/raw-/help.html 12 | source_file = Birthday-Calendar/src/main/res/raw/help.html 13 | source_lang = en 14 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/.gitignore: -------------------------------------------------------------------------------- 1 | #Android specific 2 | bin 3 | gen 4 | obj 5 | libs/armeabi 6 | lint.xml 7 | local.properties 8 | release.properties 9 | ant.properties 10 | *.class 11 | *.apk 12 | 13 | #Gradle 14 | .gradle 15 | build 16 | gradle.properties 17 | gradlew 18 | gradlew.bat 19 | gradle 20 | 21 | #Maven 22 | target 23 | pom.xml.* 24 | 25 | #Eclipse 26 | .project 27 | .classpath 28 | .settings 29 | .metadata 30 | 31 | #IntelliJ IDEA 32 | .idea 33 | *.iml 34 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | dependencies { 4 | } 5 | 6 | android { 7 | compileSdkVersion 16 8 | buildToolsVersion "25.0.0" 9 | 10 | defaultConfig { 11 | minSdkVersion 16 12 | targetSdkVersion 16 13 | versionCode 2 14 | versionName "1.1" 15 | applicationId "org.birthdayadapter.jb.workaround" 16 | } 17 | 18 | compileOptions { 19 | sourceCompatibility JavaVersion.VERSION_1_7 20 | targetCompatibility JavaVersion.VERSION_1_7 21 | } 22 | 23 | /* 24 | * To sign release build, create file gradle.properties in ~/.gradle/ with this content: 25 | * 26 | * signingStoreLocation=/home/key.store 27 | * signingStorePassword=xxx 28 | * signingKeyAlias=alias 29 | * signingKeyPassword=xxx 30 | */ 31 | if (project.hasProperty('signingStoreLocation') && 32 | project.hasProperty('signingStorePassword') && 33 | project.hasProperty('signingKeyAlias') && 34 | project.hasProperty('signingKeyPassword')) { 35 | println "Found sign properties in gradle.properties! Signing build…" 36 | 37 | signingConfigs { 38 | release { 39 | storeFile file(signingStoreLocation) 40 | storePassword signingStorePassword 41 | keyAlias signingKeyAlias 42 | keyPassword signingKeyPassword 43 | } 44 | } 45 | 46 | buildTypes.release.signingConfig = signingConfigs.release 47 | } else { 48 | buildTypes.release.signingConfig = null 49 | } 50 | 51 | lintOptions { 52 | checkReleaseBuilds false 53 | // Or, if you prefer, you can continue to check for errors in release builds, 54 | // but continue the build even when errors are found: 55 | abortOnError false 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/java/org/birthdayadapter/jb/workaround/AccountEnableService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * AccountEnableService.java 3 | * 4 | * Copyright (C) 2012 Marten Gajda 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | * 18 | */ 19 | 20 | package org.birthdayadapter.jb.workaround; 21 | 22 | import java.util.Timer; 23 | import java.util.TimerTask; 24 | 25 | import android.accounts.AccountManager; 26 | import android.accounts.AuthenticatorDescription; 27 | import android.app.Service; 28 | import android.content.ComponentName; 29 | import android.content.Intent; 30 | import android.content.pm.PackageManager; 31 | import android.os.IBinder; 32 | import android.util.Log; 33 | 34 | /** 35 | * This service listens for account updates. Once the original authenticator has taken over it 36 | * enables the workaround again. 37 | * 38 | * @author Marten Gajda 39 | */ 40 | public class AccountEnableService extends Service { 41 | private final static String TAG = "Birthday Adapter JB Workaround"; 42 | private final static Timer mTimer = new Timer(); 43 | 44 | @Override 45 | public void onCreate() { 46 | super.onCreate(); 47 | mTimer.scheduleAtFixedRate(new mCheckerTask(), 5000, 5000); 48 | } 49 | 50 | @Override 51 | public IBinder onBind(Intent intent) { 52 | // no binding allowed 53 | return null; 54 | } 55 | 56 | /** 57 | * The checker task. It checks if the original account authenticator has taken over. 58 | * 59 | * @author Marten Gajda 60 | * 61 | */ 62 | private class mCheckerTask extends TimerTask { 63 | public void run() { 64 | Log.v(TAG, "checking accounts"); 65 | 66 | AccountManager am = AccountManager.get(AccountEnableService.this); 67 | AuthenticatorDescription[] authenticators = am.getAuthenticatorTypes(); 68 | String package_name = getString(R.string.package_name); 69 | // check all authenticators for the original package name 70 | for (AuthenticatorDescription authenticator : authenticators) { 71 | Log.v(TAG, authenticator.type + " " + authenticator.packageName); 72 | if (package_name.equals(authenticator.packageName)) { 73 | // enable the workaround now that the original authenticator has taken over 74 | Log.v(TAG, "enable workaround authenticator"); 75 | PackageManager pm = getPackageManager(); 76 | pm.setComponentEnabledSetting(new ComponentName(AccountEnableService.this, 77 | AuthenticationService.class), 78 | PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 79 | PackageManager.DONT_KILL_APP); 80 | 81 | // stop this service, we're done 82 | mTimer.cancel(); 83 | AccountEnableService.this.stopSelf(); 84 | } 85 | } 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/java/org/birthdayadapter/jb/workaround/AuthenticationService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * AuthenticationService.java 3 | * 4 | * Copyright (C) 2012 Marten Gajda 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | * 18 | */ 19 | 20 | package org.birthdayadapter.jb.workaround; 21 | 22 | import android.app.Service; 23 | import android.content.Intent; 24 | import android.os.IBinder; 25 | 26 | /** 27 | * The fake authenticator service. 28 | * 29 | * @author Marten Gajda 30 | */ 31 | public class AuthenticationService extends Service { 32 | private Authenticator mAuthenticator; 33 | 34 | @Override 35 | public void onCreate() { 36 | super.onCreate(); 37 | mAuthenticator = new Authenticator(this); 38 | } 39 | 40 | @Override 41 | public IBinder onBind(Intent intent) { 42 | return mAuthenticator.getIBinder(); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/java/org/birthdayadapter/jb/workaround/Authenticator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Authenticator.java 3 | * 4 | * Copyright (C) 2012 Marten Gajda 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | * 18 | */ 19 | 20 | package org.birthdayadapter.jb.workaround; 21 | 22 | import android.accounts.AbstractAccountAuthenticator; 23 | import android.accounts.Account; 24 | import android.accounts.AccountAuthenticatorResponse; 25 | import android.accounts.AccountManager; 26 | import android.accounts.NetworkErrorException; 27 | import android.content.Context; 28 | import android.content.Intent; 29 | import android.content.pm.PackageManager; 30 | import android.os.Bundle; 31 | 32 | /** 33 | * This is the fake authenticator service. 34 | * 35 | * Adjust to your needs. It should mimic the real authenticator and call its activities, this way we 36 | * don't need to include them here. 37 | * 38 | * @author Marten Gajda 39 | */ 40 | public class Authenticator extends AbstractAccountAuthenticator { 41 | private Context mContext; 42 | 43 | public Authenticator(Context context) { 44 | super(context); 45 | mContext = context; 46 | } 47 | 48 | /** 49 | * Get the account type from the resources. 50 | * 51 | * @param context 52 | * Our {@link Context} 53 | * @return the account type of the original sync app 54 | */ 55 | public static String getAccountType(Context context) { 56 | return context.getString(R.string.account_type); 57 | } 58 | 59 | /** 60 | * Request new account by returning an intent for the AuthenticatorActivity 61 | * 62 | * Add parameters that your authenticator activity needs. 63 | */ 64 | @Override 65 | public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, 66 | String authTokenType, String[] requiredFeatures, Bundle options) 67 | throws NetworkErrorException { 68 | try { 69 | mContext.getPackageManager().getApplicationInfo( 70 | mContext.getString(R.string.package_name), 0); 71 | } catch (PackageManager.NameNotFoundException e) { 72 | // original sync app is not installed, do nothing 73 | return null; 74 | } 75 | 76 | final Intent intent = new Intent(mContext.getString(R.string.authenticator_activity)); 77 | intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); 78 | 79 | final Bundle bundle = new Bundle(); 80 | bundle.putParcelable(AccountManager.KEY_INTENT, intent); 81 | return bundle; 82 | } 83 | 84 | /** 85 | * Called to check that a user knows the credentials of an account. 86 | * 87 | * Add parameters that your password check activity needs. 88 | */ 89 | @Override 90 | public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, 91 | Bundle options) throws NetworkErrorException { 92 | return null; 93 | } 94 | 95 | @Override 96 | public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { 97 | throw new UnsupportedOperationException(); 98 | } 99 | 100 | /** 101 | * Return the authtoken. 102 | * 103 | * You must change this to your needs! 104 | */ 105 | @Override 106 | public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, 107 | String authTokenType, Bundle options) throws NetworkErrorException { 108 | 109 | return null; 110 | } 111 | 112 | @Override 113 | public String getAuthTokenLabel(String authTokenType) { 114 | return mContext.getString(R.string.label); 115 | } 116 | 117 | @Override 118 | public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, 119 | String[] features) throws NetworkErrorException { 120 | return null; 121 | } 122 | 123 | @Override 124 | public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, 125 | String authTokenType, Bundle options) throws NetworkErrorException { 126 | return null; 127 | } 128 | 129 | } 130 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/java/org/birthdayadapter/jb/workaround/OnBootReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * OnBootReceiver.java 3 | * 4 | * Copyright (C) 2012 Marten Gajda 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | * 18 | */ 19 | 20 | package org.birthdayadapter.jb.workaround; 21 | 22 | import android.content.BroadcastReceiver; 23 | import android.content.ComponentName; 24 | import android.content.Context; 25 | import android.content.Intent; 26 | import android.content.pm.PackageManager; 27 | import android.util.Log; 28 | 29 | /** 30 | * This receiver disables the workaround authenticator to let the original authenticator take over. 31 | * Also it starts a service that re-enables the workaround once that has happened. 32 | * 33 | * @author Marten Gajda 34 | */ 35 | public class OnBootReceiver extends BroadcastReceiver { 36 | private final static String TAG = "Birthday Adapter JB Workaround"; 37 | 38 | @Override 39 | public void onReceive(Context context, Intent intent) { 40 | PackageManager pm = context.getPackageManager(); 41 | 42 | // start the service that re-enables the workaround 43 | Intent serviceIntent = new Intent(context, AccountEnableService.class); 44 | context.startService(serviceIntent); 45 | 46 | // disable workaround 47 | Log.v(TAG, "disable authenticator"); 48 | pm.setComponentEnabledSetting(new ComponentName(context, AuthenticationService.class), 49 | PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-hdpi/ic_launcher_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-hdpi/ic_launcher_workaround.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-mdpi/ic_launcher_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-mdpi/ic_launcher_workaround.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xhdpi/ic_launcher_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xhdpi/ic_launcher_workaround.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xxhdpi/ic_launcher_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xxhdpi/ic_launcher_workaround.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/mipmap-xxxhdpi/ic_launcher_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar-Workaround/src/main/res/mipmap-xxxhdpi/ic_launcher_workaround.png -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Birthday Adapter JB Workaround 4 | Birthday Adapter 5 | org.birthdayadapter.ui.CreateAccountActivity 6 | org.birthdayadapter.account 7 | org.birthdayadapter 8 | Birthday Adapter 9 | 10 | 11 | Settings 12 | Configure Birthday Adapter 13 | 14 | -------------------------------------------------------------------------------- /Birthday-Calendar-Workaround/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 生日 5 | %1$s的生日 (%2$d) 6 | %1$s的生日 7 | %1$s的纪念日 (%2$d) 8 | %1$s的纪念日 9 | %1$s的事件 (%2$d) 10 | %1$s的事件 11 | %1$s的%2$s (%3$d) 12 | %1$s的%2$s 13 | 14 | 版本 15 | 16 | 首页 17 | 设置 18 | 账户 19 | 帮助 20 | 关于 21 | 22 | 常规 23 | 日历颜色 24 | 帮助 25 | 关于 26 | 立即同步 27 | 提醒 28 | 启用提醒 1 29 | 启用提醒 2 30 | 启用提醒 3 31 | 启用这组提醒 32 | 提醒 1 33 | 提醒 2 34 | 提醒 3 35 | 设置提醒时间 36 | 37 | 当天 38 | 1 天前 39 | 2 天前 40 | 3 天前 41 | 5 天前 42 | 7 天前 43 | 10 天前 44 | 14 天前 45 | 46 | 自定义标题 47 | 启用自定义标题 48 | 生日 49 | 生日(有年数) 50 | 纪念日 51 | 纪念日(有年数) 52 | 其它事件 53 | 其它事件(有年数) 54 | 自定义事件 55 | 自定义事件(有年数) 56 | 输入 %1$s 替代联系人姓名。 57 | 输入 %1$s 替代联系人姓名,%2$d 替代年数。 58 | 输入 %1$s 替代联系人姓名,%2$s 替代自定义事件的名称。 59 | 输入 %1$s 替代联系人姓名,%2$s 替代自定义事件的名称,%3$d 替代年数。 60 | 优先使用 dd/MM/yyyy 格式 61 | 解析日期时优先使用 dd/MM/yyyy 格式(默认为 MM/dd/yyyy) 62 | 高级 63 | 64 | 设置 65 | 配置 Birthday Adapter 66 | 67 | 没有账户 68 | 69 | 购买完整版! 70 | 打开 Google Play 购买完整版 71 | • 设置事件的提醒时间\n• 自定义事件标题 72 | 73 | 由于系统原因,需要安装修复程序! 74 | 由于 Android 中的一个 bug,Birthday Adapter 会在设备重启后停用。\n\n这个问题在 Android 4.1.1 中出现,并在 Android 4.2 中修复。很遗憾,Galaxy S4 等设备的 Android 4.2 仍存在这个问题。您可以在 Google Play 中下载修复程序,并在以下问题报告中获取更多信息:http://code.google.com/p/android/issues/detail?id=34880 75 | 不再显示 76 | 关闭 77 | 安装修复程序 78 | 79 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #689f38 4 | #689f38 5 | #FFFFFF 6 | #FFFFFF 7 | #000000 8 | #8bc34a 9 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/values/pref_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | firstRun 3 | 4 | true 5 | 6 | showWorkaroundDialog 7 | 8 | true 9 | 10 | enabled 11 | contacts 12 | calendar 13 | color 14 | 15 | 16 | #FFA70000 17 | 18 | forceSync 19 | reminderEnable 20 | reminderEnable0 21 | reminderEnable1 22 | reminderEnable2 23 | 24 | true 25 | false 26 | false 27 | 28 | reminderTime 29 | reminderTime0 30 | reminderTime1 31 | reminderTime2 32 | 33 | -540 34 | 35 | advanced 36 | 37 | false 38 | 39 | preferddSlashMM 40 | 41 | false 42 | 43 | titlesEnable 44 | 45 | false 46 | 47 | birthday 48 | birthdayAge 49 | anniversary 50 | anniversaryAge 51 | other 52 | otherAge 53 | custom 54 | customAge 55 | buyFull 56 | 57 | 58 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 14 | 17 | 18 | 25 | 26 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/xml/account_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/xml/authenticator.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/xml/base_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 16 | 21 | 22 | 27 | 28 | 33 | 34 | 39 | 40 | -------------------------------------------------------------------------------- /Birthday-Calendar/src/main/res/xml/sync_calendar.xml: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /CHANGELOG: -------------------------------------------------------------------------------- 1 | 2.0 2 | * Improvements for Android 6 and 7 3 | 4 | 1.17 5 | * Reduce apk size by switching from HtmlSpanner to HtmlTextView library 6 | 7 | 1.16 8 | - New fixes to prevent duplicated events 9 | 10 | 1.15 11 | * Show dialog if workaround is needed 12 | - Fix crash when contact has no corresponding sync account 13 | - Don't add duplicated events (Please submit bug reports if this still happens) 14 | 15 | 1.14 16 | * Account Filter (Only on Android >= 4) 17 | 18 | 1.13 19 | * Allow reminders also 5, 7, 10, and 14 days before 20 | 21 | 1.12 22 | * Reminders can be set with time of day 23 | * Labels can be customized 24 | - Fix reminders on Android < 4 25 | 26 | 1.11 27 | - Fix sync on Android < 4 28 | 29 | 1.10 30 | * On Android 4.1 and above: Open contact from calendar event with a button 31 | - Fix parsing of birthdays from facebook contacts 32 | 33 | 1.9 34 | - Fix conflict with other events on HTC calendar 35 | 36 | 1.8 37 | - Add more date formats into date parser 38 | - Fix crash on empty dates 39 | 40 | 1.7 41 | - Fix duration of birthdays 42 | - Fix parsing of dates on Motorola devices (they save dates as unix timestamp) 43 | 44 | 1.6 45 | - Fix Nullpointer exception 46 | - Fix age for events without year 47 | 48 | 1.5 49 | - Annoying bugs fixed 50 | 51 | 1.4 52 | * New design for Android > 4 53 | * Show age behind birthday 54 | - Some fixes 55 | 56 | 1.3 57 | * New reminder at day of event 58 | - Fix for Android 2.x 59 | 60 | 1.2 61 | * Experimental support for Android 2.2, 2.3 and 3 thanks to Marten Gajda 62 | (This is experimental! Please report bugs when things go wrong!) 63 | 64 | 1.1 65 | * Translations: German, Estonian, Spanish 66 | - Birthdays without a year are now working 67 | 68 | 1.0 69 | * First release -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Description 2 | Birthday Adapter provides birthdays, anniversaries, and other events from your contacts as a real calendar, which is displayed in your standard Android calendar application. 3 | To my knowledge, this is the first implementation that implements birthdays as a calendar displayed in Android's Calendar app. 4 | All other apps only displays their own lists but have no real integration! 5 | 6 | If you want to test this app, install the free version: 7 | https://play.google.com/store/apps/details?id=org.birthdayadapter.free 8 | 9 | Known bugs 10 | • Reminder do not work correctly on Android 2.3 11 | • Devices with Android 4.1 and all version of Samsung Galaxy S4 have a bug which causes Birthday Adapter to disable after reboots. Please install additionally: 12 | https://play.google.com/store/apps/details?id=org.birthdayadapter.jb.workaround 13 | 14 | Features 15 | • Total integration of birthdays, anniversaries, and other events from Android's contacts as a calendar 16 | • Color picker for the birthday calendar 17 | • Event Reminders 18 | • Filter contact events based on account 19 | 20 | Problems 21 | If you have problems with this app, please report them on the following website: 22 | http://sufficientlysecure.org/birthday-adapter 23 | 24 | Translations 25 | Help translating Birthday Adapter on https://www.transifex.net/projects/p/birthday-adapter 26 | 27 | Source code and information 28 | http://sufficientlysecure.org/birthday-adapter 29 | 30 | License 31 | GPLv3 32 | 33 | Keywords 34 | birthday calendar, calendar integration, birthdays 35 | 36 | Open source alternative to 37 | EboBirthday, Birthdays, TKBirthdayReminder, Birthday Widget 38 | 39 | 40 | 41 | 42 | 43 | 44 | Free Version 45 | This is the free version of Birthday Adapter. 46 | This version contains every feature of the full version, except reminders. It is also ad-free and needs no Internet access. 47 | 48 | Description 49 | Birthday Adapter provides birthdays, anniversaries, and other events from your contacts as a real calendar, which is displayed in your standard Android calendar application. 50 | To my knowledge, this is the first implementation that implements birthdays as a calendar displayed in Android's Calendar app. 51 | All other apps only displays their own lists but have no real integration! 52 | 53 | If you want to test this app, install the free version: https://play.google.com/store/apps/details?id=org.birthdayadapter.free 54 | 55 | Known bugs 56 | • Reminder do not work correctly on Android 2.3 57 | • Devices with Android 4.1 and all version of Samsung Galaxy S4 have a bug which causes Birthday Adapter to disable after reboots. Please install additionally: 58 | https://play.google.com/store/apps/details?id=org.birthdayadapter.jb.workaround 59 | 60 | Features 61 | • Total integration of birthdays, anniversaries, and other events from Android's contacts as a calendar 62 | • Color picker for the birthday calendar 63 | • Event Reminders (Only in full version!) 64 | • Filter contact events based on account 65 | 66 | Problems 67 | If you have problems with this app, please report them on the following website: 68 | http://sufficientlysecure.org/birthday-adapter 69 | 70 | Translations 71 | Help translating Birthday Adapter on https://www.transifex.net/projects/p/birthday-adapter 72 | 73 | Source code and information 74 | http://sufficientlysecure.org/birthday-adapter 75 | 76 | License 77 | GPLv3 78 | 79 | Keywords 80 | birthday calendar, calendar integration, birthdays 81 | 82 | Open source alternative to 83 | EboBirthday, Birthdays, TKBirthdayReminder, Birthday Widget 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Birthday Calendar 2 | 3 | [Get it on F-Droid](https://f-droid.org/app/org.birthdayadapter) 6 | 7 | Birthday Calendar is the first implementation to really display all contact birthdays automatically in your standard Android calendar without hassle. 8 | 9 | Birthday Calendar provides birthdays, anniversaries, and other events from your contacts as a real calendar, which is displayed in your standard Android calendar application. To my knowledge, this is the first implementation that implements birthdays as a real calendar integrated in the Android calendar. All other apps only displays their own lists but have no real integration! 10 | 11 | For more information visit https://www.sufficientlysecure.org/android/ 12 | 13 | # Build with Gradle 14 | 15 | 1. Have Android SDK "tools", "platform-tools", and "build-tools" directories in your PATH (http://developer.android.com/sdk/index.html) 16 | 2. Open the Android SDK Manager (shell command: ``android``). Expand the Extras directory and install "Android Support Repository" 17 | 3. Export ANDROID_HOME pointing to your Android SDK 18 | 4. Execute ``./gradlew build`` 19 | 20 | ## More build information 21 | 22 | Different productFlavors are build with gradle: 23 | - ``full`` 24 | - ``full_google`` with workarounds for Google Play 25 | - ``free`` without settings 26 | 27 | # Contribute 28 | 29 | Fork Birthday Calendar and do a Pull Request. I will merge your changes back into the main project. 30 | 31 | # Translations 32 | 33 | Translations are hosted on Transifex, which is configured by ".tx/config". 34 | 35 | 1. To pull newest translations install transifex client (e.g. ``apt-get install transifex-client``) 36 | 2. Config Transifex client with "~/.transifexrc" 37 | 3. Go into root folder of git repo 38 | 4. execute ``tx pull`` (``tx pull -a`` to get all languages) 39 | 40 | see http://help.transifex.net/features/client/index.html#user-client 41 | 42 | # Coding Style 43 | 44 | ## Code 45 | * Indentation: 4 spaces, no tabs 46 | * Maximum line width for code and comments: 100 47 | * Opening braces don't go on their own line 48 | * Field names: Non-public, non-static fields start with m. 49 | * Acronyms are words: Treat acronyms as words in names, yielding !XmlHttpRequest, getUrl(), etc. 50 | 51 | See http://source.android.com/source/code-style.html 52 | 53 | ## XML 54 | * XML Maximum line width 999 55 | * XML: Split multiple attributes each on a new line (Eclipse: Properties -> XML -> XML Files -> Editor) 56 | * XML: Indent using spaces with Indention size 4 (Eclipse: Properties -> XML -> XML Files -> Editor) 57 | 58 | See http://www.androidpolice.com/2009/11/04/auto-formatting-android-xml-files-with-eclipse/ 59 | 60 | # Licenses 61 | Birthday Calendar is licensed under the GPLv3+. 62 | The file LICENSE includes the full license text. 63 | 64 | ## Details 65 | Birthday Calendar is free software: you can redistribute it and/or modify 66 | it under the terms of the GNU General Public License as published by 67 | the Free Software Foundation, either version 3 of the License, or 68 | (at your option) any later version. 69 | 70 | Birthday Calendar is distributed in the hope that it will be useful, 71 | but WITHOUT ANY WARRANTY; without even the implied warranty of 72 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 73 | GNU General Public License for more details. 74 | 75 | You should have received a copy of the GNU General Public License 76 | along with Birthday Calendar. If not, see . 77 | 78 | ## Libraries 79 | * Android-Support-Preference-V7-Fix 80 | https://github.com/Gericop/Android-Support-Preference-V7-Fix 81 | Apache License v2 82 | 83 | * HtmlTextView 84 | https://github.com/dschuermann/html-textview 85 | Apache License v2 86 | 87 | * VintageChroma 88 | https://github.com/MrBIMC/VintageChroma 89 | Apache License v2 90 | 91 | 92 | ## Images 93 | 94 | * icon.svg 95 | Based on Tango Icon Library and Tango Pidgin Icon Theme 96 | http://tango.freedesktop.org/ 97 | Public Domain (Tango Icon Library) and GPL (Tango Pidgin Icon Theme) 98 | -------------------------------------------------------------------------------- /Resources/download_fdroid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/download_fdroid.png -------------------------------------------------------------------------------- /Resources/download_google_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/download_google_play.png -------------------------------------------------------------------------------- /Resources/google_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/google_calendar.png -------------------------------------------------------------------------------- /Resources/google_calendar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/google_calendar.webp -------------------------------------------------------------------------------- /Resources/google_contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/google_contacts.png -------------------------------------------------------------------------------- /Resources/google_contacts.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/google_contacts.webp -------------------------------------------------------------------------------- /Resources/icon_sizes.txt: -------------------------------------------------------------------------------- 1 | Launcher Icon: 2 | ----------------------- 3 | ldpi: 36x36 4 | mdpi: 48x48 5 | hdpi: 72x72 6 | xhdpi: 96x96 7 | google code: 55x55 8 | android market: 512x512 9 | 10 | Status Bar Icon: 11 | ----------------------- 12 | Android < 3.0 13 | ldpi: 12x19 14 | mdpi: 16x25 15 | hdpi: 24x38 16 | 17 | Android > 3.0 18 | ldpi: 18x18 19 | mdpi: 24x24 20 | hdpi: 36x36 21 | xhdpi: 48x48 22 | -------------------------------------------------------------------------------- /Resources/play_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/play_banner.png -------------------------------------------------------------------------------- /Resources/play_function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/play_function.png -------------------------------------------------------------------------------- /Resources/play_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/play_icon.png -------------------------------------------------------------------------------- /Resources/play_icon_workaround.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/play_icon_workaround.png -------------------------------------------------------------------------------- /Resources/screenshot0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot0.png -------------------------------------------------------------------------------- /Resources/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot1.png -------------------------------------------------------------------------------- /Resources/screenshot1b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot1b.png -------------------------------------------------------------------------------- /Resources/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot2.png -------------------------------------------------------------------------------- /Resources/screenshot2_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot2_small.png -------------------------------------------------------------------------------- /Resources/screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot3.png -------------------------------------------------------------------------------- /Resources/screenshot3_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot3_small.png -------------------------------------------------------------------------------- /Resources/screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot4.png -------------------------------------------------------------------------------- /Resources/screenshot4_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot4_small.png -------------------------------------------------------------------------------- /Resources/screenshot5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot5.png -------------------------------------------------------------------------------- /Resources/screenshot5_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/screenshot5_small.png -------------------------------------------------------------------------------- /Resources/update-drawables-workaround.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | APP_DIR=../Birthday-Calendar-Workaround/src/main 4 | DRAWABLE_DIR=$APP_DIR/res/drawable 5 | MDPI_DIR=$APP_DIR/res/mipmap-mdpi 6 | HDPI_DIR=$APP_DIR/res/mipmap-hdpi 7 | XDPI_DIR=$APP_DIR/res/mipmap-xhdpi 8 | XXDPI_DIR=$APP_DIR/res/mipmap-xxhdpi 9 | XXXDPI_DIR=$APP_DIR/res/mipmap-xxxhdpi 10 | PLAY_DIR=./drawables/ 11 | SRC_DIR=./drawables/ 12 | 13 | NAME="ic_launcher_workaround" 14 | 15 | inkscape -w 48 -h 48 -e "$MDPI_DIR/$NAME.png" $NAME.svg 16 | inkscape -w 72 -h 72 -e "$HDPI_DIR/$NAME.png" $NAME.svg 17 | inkscape -w 96 -h 96 -e "$XDPI_DIR/$NAME.png" $NAME.svg 18 | inkscape -w 144 -h 144 -e "$XXDPI_DIR/$NAME.png" $NAME.svg 19 | inkscape -w 192 -h 192 -e "$XXXDPI_DIR/$NAME.png" $NAME.svg 20 | inkscape -w 512 -h 512 -e "$PLAY_DIR/$NAME.png" $NAME.svg 21 | -------------------------------------------------------------------------------- /Resources/update-drawables.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | APP_DIR=../Birthday-Calendar/src/main 4 | DRAWABLE_DIR=$APP_DIR/res/drawable 5 | MDPI_DIR=$APP_DIR/res/mipmap-mdpi 6 | HDPI_DIR=$APP_DIR/res/mipmap-hdpi 7 | XDPI_DIR=$APP_DIR/res/mipmap-xhdpi 8 | XXDPI_DIR=$APP_DIR/res/mipmap-xxhdpi 9 | XXXDPI_DIR=$APP_DIR/res/mipmap-xxxhdpi 10 | PLAY_DIR=./drawables/ 11 | SRC_DIR=./drawables/ 12 | 13 | for NAME in "ic_launcher" "google_calendar" "google_contacts" 14 | do 15 | echo $NAME 16 | inkscape -w 48 -h 48 -e "$MDPI_DIR/$NAME.png" $NAME.svg 17 | inkscape -w 72 -h 72 -e "$HDPI_DIR/$NAME.png" $NAME.svg 18 | inkscape -w 96 -h 96 -e "$XDPI_DIR/$NAME.png" $NAME.svg 19 | inkscape -w 144 -h 144 -e "$XXDPI_DIR/$NAME.png" $NAME.svg 20 | inkscape -w 192 -h 192 -e "$XXXDPI_DIR/$NAME.png" $NAME.svg 21 | inkscape -w 512 -h 512 -e "$PLAY_DIR/$NAME.png" $NAME.svg 22 | done -------------------------------------------------------------------------------- /Resources/workaround_screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/workaround_screenshot1.png -------------------------------------------------------------------------------- /Resources/workaround_screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Resources/workaround_screenshot2.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | jcenter() 4 | } 5 | dependencies { 6 | classpath 'com.android.tools.build:gradle:2.2.2' 7 | } 8 | } 9 | 10 | allprojects { 11 | repositories { 12 | jcenter() 13 | } 14 | } 15 | 16 | task wrapper(type: Wrapper) { 17 | gradleVersion = '3.1' 18 | } 19 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Oct 28 14:50:17 CEST 2016 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip 7 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':Birthday-Calendar' 2 | include ':Birthday-Calendar-Workaround' --------------------------------------------------------------------------------