├── .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 |
4 |
5 |
--------------------------------------------------------------------------------
/Birthday-Calendar-Workaround/src/main/res/xml/account_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Birthday-Calendar-Workaround/src/main/res/xml/authenticator.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/Birthday-Calendar/.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/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | dependencies {
4 | compile 'com.android.support:appcompat-v7:25.0.0'
5 | compile 'com.android.support:design:25.0.0'
6 | // compile 'com.android.support:preference-v7:25.0.0'
7 | // compile 'com.android.support:preference-v14:25.0.0'
8 | compile 'com.takisoft.fix:preference-v7:25.0.0.0'
9 | compile 'org.sufficientlysecure:html-textview:2.0'
10 | compile 'com.pavelsikun:vintage-chroma:1.5'
11 | }
12 |
13 | android {
14 | compileSdkVersion 25
15 | buildToolsVersion "25.0.0"
16 |
17 | defaultConfig {
18 | minSdkVersion 14
19 | targetSdkVersion 25
20 | versionCode 19
21 | versionName "2.0"
22 | }
23 |
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_7
26 | targetCompatibility JavaVersion.VERSION_1_7
27 | }
28 |
29 | lintOptions {
30 | // not everything is translated by Transifex contributors
31 | disable 'MissingTranslation', 'ExtraTranslation'
32 | }
33 |
34 | /*
35 | * To sign release build, create file gradle.properties in ~/.gradle/ with this content:
36 | *
37 | * signingStoreLocation=/home/key.store
38 | * signingStorePassword=xxx
39 | * signingKeyAlias=alias
40 | * signingKeyPassword=xxx
41 | */
42 | if (project.hasProperty('signingStoreLocation') &&
43 | project.hasProperty('signingStorePassword') &&
44 | project.hasProperty('signingKeyAlias') &&
45 | project.hasProperty('signingKeyPassword')) {
46 | println "Found sign properties in gradle.properties! Signing build…"
47 |
48 | signingConfigs {
49 | release {
50 | storeFile file(signingStoreLocation)
51 | storePassword signingStorePassword
52 | keyAlias signingKeyAlias
53 | keyPassword signingKeyPassword
54 | }
55 | }
56 |
57 | buildTypes.release.signingConfig = signingConfigs.release
58 | } else {
59 | buildTypes.release.signingConfig = null
60 | }
61 |
62 | productFlavors {
63 | full {
64 | applicationId = "org.birthdayadapter"
65 | buildConfigField "boolean", "FULL_VERSION", "true"
66 | buildConfigField "boolean", "GOOGLE_PLAY_VERSION", "false"
67 | }
68 | full_google {
69 | applicationId = "org.birthdayadapter"
70 | buildConfigField "boolean", "FULL_VERSION", "true"
71 | buildConfigField "boolean", "GOOGLE_PLAY_VERSION", "true"
72 | }
73 | free {
74 | applicationId = "org.birthdayadapter.free"
75 | buildConfigField "boolean", "FULL_VERSION", "false"
76 | buildConfigField "boolean", "GOOGLE_PLAY_VERSION", "true"
77 | }
78 | }
79 | }
--------------------------------------------------------------------------------
/Birthday-Calendar/src/free/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/free/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Birthday Calendar (Free)
4 |
5 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/free/res/xml/pref_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
13 |
14 |
15 |
20 |
21 |
22 |
28 |
35 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/full/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/full_google/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/provider/BirthdayAdapterContract.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.provider;
22 |
23 | import android.net.Uri;
24 | import android.provider.BaseColumns;
25 |
26 | import org.birthdayadapter.BuildConfig;
27 |
28 | public class BirthdayAdapterContract {
29 |
30 | interface AccountBlacklistColumns {
31 | String ACCOUNT_NAME = "account_name";
32 | String ACCOUNT_TYPE = "account_type";
33 | }
34 |
35 | public static final String CONTENT_AUTHORITY;
36 |
37 | static {
38 | if (BuildConfig.FULL_VERSION) {
39 | CONTENT_AUTHORITY = "org.birthdayadapter";
40 | } else {
41 | CONTENT_AUTHORITY = "org.birthdayadapter.free";
42 | }
43 | }
44 |
45 | private static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);
46 |
47 | public static final String PATH_ACCOUNT_BLACKLIST = "account_blacklist";
48 |
49 | public static class AccountBlacklist implements AccountBlacklistColumns, BaseColumns {
50 | public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon()
51 | .appendPath(PATH_ACCOUNT_BLACKLIST).build();
52 |
53 | /**
54 | * Use if multiple items get returned
55 | */
56 | public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.birthdayadapter.account_blacklist";
57 |
58 | /**
59 | * Use if a single item is returned
60 | */
61 | public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.birthdayadapter.account";
62 |
63 | /**
64 | * Default "ORDER BY" clause.
65 | */
66 | public static final String DEFAULT_SORT = AccountBlacklistColumns.ACCOUNT_TYPE + " ASC";
67 |
68 | public static Uri buildUri(String id) {
69 | return CONTENT_URI.buildUpon().appendPath(id).build();
70 | }
71 |
72 | public static String getId(Uri uri) {
73 | return uri.getLastPathSegment();
74 | }
75 | }
76 |
77 | private BirthdayAdapterContract() {
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/provider/BirthdayAdapterDatabase.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.provider;
22 |
23 | import android.content.Context;
24 | import android.database.sqlite.SQLiteDatabase;
25 | import android.database.sqlite.SQLiteOpenHelper;
26 | import android.provider.BaseColumns;
27 |
28 | import org.birthdayadapter.util.Constants;
29 | import org.birthdayadapter.util.Log;
30 |
31 | public class BirthdayAdapterDatabase extends SQLiteOpenHelper {
32 | private static final String DATABASE_NAME = "birthdayadapter.db";
33 | private static final int DATABASE_VERSION = 1;
34 |
35 | public interface Tables {
36 | String ACCOUNT_BLACKLIST = "account_blacklist";
37 | }
38 |
39 | private static final String CREATE_ACCOUNT_BLACKLIST = "CREATE TABLE IF NOT EXISTS "
40 | + Tables.ACCOUNT_BLACKLIST + "(" + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
41 | + BirthdayAdapterContract.AccountBlacklistColumns.ACCOUNT_NAME + " TEXT, "
42 | + BirthdayAdapterContract.AccountBlacklistColumns.ACCOUNT_TYPE + " TEXT)";
43 |
44 | BirthdayAdapterDatabase(Context context) {
45 | super(context, DATABASE_NAME, null, DATABASE_VERSION);
46 | }
47 |
48 | @Override
49 | public void onCreate(SQLiteDatabase db) {
50 | Log.w(Constants.TAG, "Creating database...");
51 |
52 | db.execSQL(CREATE_ACCOUNT_BLACKLIST);
53 | }
54 |
55 | @Override
56 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
57 | Log.w(Constants.TAG, "Upgrading database from version " + oldVersion + " to " + newVersion);
58 |
59 | // if (oldVersion <= 1) {
60 | //
61 | // } else {
62 | db.execSQL("DROP TABLE IF EXISTS " + Tables.ACCOUNT_BLACKLIST);
63 | onCreate(db);
64 | // }
65 | }
66 | }
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/provider/ProviderHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.provider;
22 |
23 | import java.util.HashSet;
24 | import java.util.Iterator;
25 |
26 | import android.accounts.Account;
27 | import android.content.ContentValues;
28 | import android.content.Context;
29 | import android.database.Cursor;
30 |
31 | public class ProviderHelper {
32 |
33 | public static void setAccountBlacklist(Context context, HashSet blacklist) {
34 | // clear table
35 | context.getContentResolver().delete(BirthdayAdapterContract.AccountBlacklist.CONTENT_URI, null, null);
36 |
37 | ContentValues[] values = new ContentValues[blacklist.size()];
38 |
39 | // build values array based on HashSet
40 | Iterator itr = blacklist.iterator();
41 | int i = 0;
42 | while (itr.hasNext()) {
43 | Account acc = itr.next();
44 | values[i] = new ContentValues();
45 | values[i].put(BirthdayAdapterContract.AccountBlacklist.ACCOUNT_NAME, acc.name);
46 | values[i].put(BirthdayAdapterContract.AccountBlacklist.ACCOUNT_TYPE, acc.type);
47 |
48 | i++;
49 | }
50 |
51 | // insert as bulk operation
52 | context.getContentResolver().bulkInsert(BirthdayAdapterContract.AccountBlacklist.CONTENT_URI, values);
53 | }
54 |
55 | public static HashSet getAccountBlacklist(Context context) {
56 | HashSet hashSet = new HashSet();
57 | Cursor cursor = getAccountBlacklistCursor(context, null, null);
58 |
59 | try {
60 | while (cursor != null && cursor.moveToNext()) {
61 | Account acc = new Account(
62 | cursor.getString(cursor.getColumnIndexOrThrow(BirthdayAdapterContract.AccountBlacklist.ACCOUNT_NAME)),
63 | cursor.getString(cursor.getColumnIndexOrThrow(BirthdayAdapterContract.AccountBlacklist.ACCOUNT_TYPE)));
64 |
65 | hashSet.add(acc);
66 | }
67 | } finally {
68 | if (cursor != null && !cursor.isClosed())
69 | cursor.close();
70 | }
71 |
72 | return hashSet;
73 | }
74 |
75 | private static Cursor getAccountBlacklistCursor(Context context, String selection, String[] selectionArgs) {
76 | return context.getContentResolver().query(
77 | BirthdayAdapterContract.AccountBlacklist.CONTENT_URI,
78 | new String[]{BirthdayAdapterContract.AccountBlacklist._ID,
79 | BirthdayAdapterContract.AccountBlacklist.ACCOUNT_NAME,
80 | BirthdayAdapterContract.AccountBlacklist.ACCOUNT_TYPE},
81 | selection,
82 | selectionArgs,
83 | BirthdayAdapterContract.AccountBlacklist.DEFAULT_SORT);
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/service/AccountAuthenticatorService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.service;
22 |
23 | import android.accounts.AbstractAccountAuthenticator;
24 | import android.accounts.Account;
25 | import android.accounts.AccountAuthenticatorResponse;
26 | import android.accounts.AccountManager;
27 | import android.accounts.NetworkErrorException;
28 | import android.app.Service;
29 | import android.content.Context;
30 | import android.content.Intent;
31 | import android.os.Bundle;
32 | import android.os.IBinder;
33 |
34 | import org.birthdayadapter.ui.AddAccountActivity;
35 |
36 | /**
37 | * Based on https://developer.android.com/training/sync-adapters/creating-authenticator.html
38 | */
39 | public class AccountAuthenticatorService extends Service {
40 | private Authenticator mAuthenticator;
41 |
42 | @Override
43 | public void onCreate() {
44 | super.onCreate();
45 | mAuthenticator = new Authenticator(this);
46 | }
47 |
48 | @Override
49 | public IBinder onBind(Intent intent) {
50 | return mAuthenticator.getIBinder();
51 | }
52 |
53 | private static class Authenticator extends AbstractAccountAuthenticator {
54 | private Context mContext;
55 |
56 | Authenticator(Context context) {
57 | super(context);
58 | mContext = context;
59 | }
60 |
61 | @Override
62 | public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
63 | String authTokenType, String[] requiredFeatures, Bundle options)
64 | throws NetworkErrorException {
65 |
66 | Intent intent = new Intent(mContext, AddAccountActivity.class);
67 | intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
68 |
69 | Bundle result = new Bundle();
70 | result.putParcelable(AccountManager.KEY_INTENT, intent);
71 | return result;
72 | }
73 |
74 | @Override
75 | public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account,
76 | Bundle options) {
77 | throw new UnsupportedOperationException();
78 | }
79 |
80 | @Override
81 | public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
82 | throw new UnsupportedOperationException();
83 | }
84 |
85 | @Override
86 | public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
87 | String authTokenType, Bundle options) throws NetworkErrorException {
88 | throw new UnsupportedOperationException();
89 | }
90 |
91 | @Override
92 | public String getAuthTokenLabel(String authTokenType) {
93 | throw new UnsupportedOperationException();
94 | }
95 |
96 | @Override
97 | public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account,
98 | String[] features) throws NetworkErrorException {
99 | throw new UnsupportedOperationException();
100 | }
101 |
102 | @Override
103 | public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
104 | String authTokenType, Bundle options) {
105 | throw new UnsupportedOperationException();
106 | }
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/service/MainIntentService.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.service;
22 |
23 | import android.app.IntentService;
24 | import android.content.Intent;
25 | import android.os.Bundle;
26 | import android.os.Message;
27 | import android.os.Messenger;
28 | import android.os.RemoteException;
29 |
30 | import org.birthdayadapter.util.AccountHelper;
31 | import org.birthdayadapter.util.Constants;
32 | import org.birthdayadapter.util.Log;
33 | import org.birthdayadapter.util.BackgroundStatusHandler;
34 |
35 | /**
36 | * An IntentServices queues incoming Intents and works them one by one.
37 | */
38 | public class MainIntentService extends IntentService {
39 |
40 | /* extras that can be given by intent */
41 | public static final String EXTRA_MESSENGER = "messenger";
42 |
43 | /* possible actions */
44 | public static final String ACTION_MANUAL_COMPLETE_SYNC = "MANUAL_SYNC";
45 | public static final String ACTION_CHANGE_COLOR = "CHANGE_COLOR";
46 |
47 | Messenger mMessenger;
48 |
49 | public MainIntentService() {
50 | super("BirthdayAdapterMainIntentService");
51 | }
52 |
53 | /**
54 | * The IntentService calls this method from the default worker thread with the intent that
55 | * started the service. When this method returns, IntentService stops the service, as
56 | * appropriate.
57 | */
58 | @Override
59 | protected void onHandleIntent(Intent intent) {
60 | Bundle extras = intent.getExtras();
61 | if (extras == null) {
62 | Log.e(Constants.TAG, "Extras bundle is null!");
63 | return;
64 | }
65 |
66 | if (intent.getAction() == null) {
67 | Log.e(Constants.TAG, "Intent must contain an action!");
68 | return;
69 | }
70 |
71 | if (extras.containsKey(EXTRA_MESSENGER)) {
72 | mMessenger = (Messenger) extras.get(EXTRA_MESSENGER);
73 | }
74 |
75 | String action = intent.getAction();
76 |
77 | setProgressCircleWithHandler(true);
78 |
79 | // execute action
80 | if (ACTION_CHANGE_COLOR.equals(action)) {
81 | // update calendar color if enabled
82 | if (new AccountHelper(this).isAccountActivated()) {
83 | CalendarSyncAdapterService.updateCalendarColor(this);
84 | }
85 | } else if (ACTION_MANUAL_COMPLETE_SYNC.equals(action)) {
86 | // perform blocking sync
87 | CalendarSyncAdapterService.performSync(this);
88 | }
89 |
90 | setProgressCircleWithHandler(false);
91 | }
92 |
93 | private void setProgressCircleWithHandler(boolean value) {
94 | Message msg = Message.obtain();
95 |
96 | if (value) {
97 | msg.what = BackgroundStatusHandler.BACKGROUND_STATUS_HANDLER_ENABLE;
98 | } else {
99 | msg.what = BackgroundStatusHandler.BACKGROUND_STATUS_HANDLER_DISABLE;
100 | }
101 |
102 | if (mMessenger != null) {
103 | try {
104 | mMessenger.send(msg);
105 | } catch (RemoteException e) {
106 | Log.w(Constants.TAG, "Exception sending message, Is handler present?", e);
107 | }
108 | }
109 | }
110 |
111 | }
112 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/AboutFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.ui;
22 |
23 | import android.content.pm.PackageInfo;
24 | import android.content.pm.PackageManager;
25 | import android.content.pm.PackageManager.NameNotFoundException;
26 | import android.os.Bundle;
27 | import android.support.v4.app.Fragment;
28 | import android.view.LayoutInflater;
29 | import android.view.View;
30 | import android.view.ViewGroup;
31 | import android.widget.TextView;
32 |
33 | import org.birthdayadapter.R;
34 | import org.birthdayadapter.util.Constants;
35 | import org.birthdayadapter.util.Log;
36 | import org.sufficientlysecure.htmltextview.HtmlTextView;
37 |
38 | public class AboutFragment extends Fragment {
39 |
40 | @Override
41 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
42 | View view = inflater.inflate(R.layout.about_fragment, container, false);
43 |
44 | TextView versionText = (TextView) view.findViewById(R.id.about_version);
45 | versionText.setText(getString(R.string.about_version) + " " + getVersion());
46 |
47 | HtmlTextView aboutTextView = (HtmlTextView) view.findViewById(R.id.about_text);
48 |
49 | // load html into textview
50 | aboutTextView.setHtml(R.raw.about);
51 |
52 | // no flickering when clicking textview for Android < 4
53 | aboutTextView.setTextColor(getResources().getColor(android.R.color.black));
54 |
55 | return view;
56 | }
57 |
58 | /**
59 | * Get the current package version.
60 | *
61 | * @return The current version.
62 | */
63 | private String getVersion() {
64 | String result = "";
65 | try {
66 | PackageManager manager = getActivity().getPackageManager();
67 | PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0);
68 |
69 | result = String.format("%s (%s)", info.versionName, info.versionCode);
70 | } catch (NameNotFoundException e) {
71 | Log.w(Constants.TAG, "Unable to get application version", e);
72 | result = "Unable to get application version.";
73 | }
74 |
75 | return result;
76 | }
77 |
78 | }
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/AddAccountActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | * Copyright (C) 2010 Sam Steele
4 | *
5 | * This file is part of Birthday Adapter.
6 | *
7 | * Birthday Adapter is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * Birthday Adapter is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with Birthday Adapter. If not, see .
19 | *
20 | */
21 |
22 | package org.birthdayadapter.ui;
23 |
24 | import android.accounts.AccountAuthenticatorActivity;
25 | import android.os.Bundle;
26 |
27 | import org.birthdayadapter.util.AccountHelper;
28 |
29 | /**
30 | * This activity is transparent, i.e., it has no layout
31 | */
32 | public class AddAccountActivity extends AccountAuthenticatorActivity {
33 |
34 | @Override
35 | public void onCreate(Bundle savedInstanceState) {
36 | super.onCreate(savedInstanceState);
37 |
38 | AccountHelper accHelper = new AccountHelper(this);
39 | Bundle result = accHelper.addAccountAndSync();
40 | if (result != null) {
41 | setAccountAuthenticatorResult(result);
42 | }
43 |
44 | finish();
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/ExtendedPreferencesFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.ui;
22 |
23 | import android.content.Intent;
24 | import android.net.Uri;
25 | import android.os.Bundle;
26 | import android.support.v7.preference.Preference;
27 | import android.support.v7.preference.PreferenceFragmentCompat;
28 |
29 | import org.birthdayadapter.BuildConfig;
30 | import org.birthdayadapter.R;
31 | import org.birthdayadapter.util.AccountHelper;
32 | import org.birthdayadapter.util.Constants;
33 |
34 | public class ExtendedPreferencesFragment extends PreferenceFragmentCompat {
35 | BaseActivity mActivity;
36 | private AccountHelper mAccountHelper;
37 |
38 | @Override
39 | public void onCreatePreferences(Bundle bundle, String s) {
40 | // save prefs here
41 | getPreferenceManager().setSharedPreferencesName(Constants.PREFS_NAME);
42 | addPreferencesFromResource(R.xml.pref_preferences);
43 |
44 | mActivity = (BaseActivity) getActivity();
45 |
46 | if (!BuildConfig.FULL_VERSION) {
47 | Preference buyFull = findPreference(getString(R.string.pref_buy_full_key));
48 | buyFull.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
49 | @Override
50 | public boolean onPreferenceClick(Preference preference) {
51 | try {
52 | startActivity(new Intent(Intent.ACTION_VIEW,
53 | Uri.parse("market://details?id=" + Constants.FULL_PACKAGE_NAME)));
54 | } catch (android.content.ActivityNotFoundException e) {
55 | startActivity(new Intent(Intent.ACTION_VIEW,
56 | Uri.parse("http://play.google.com/store/apps/details?id="
57 | + Constants.FULL_PACKAGE_NAME)));
58 | }
59 |
60 | return false;
61 | }
62 | });
63 | }
64 |
65 | mAccountHelper = new AccountHelper(mActivity, mActivity.mBackgroundStatusHandler);
66 |
67 | Preference forceSync = findPreference(getString(R.string.pref_force_sync_key));
68 | forceSync.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
69 | @Override
70 | public boolean onPreferenceClick(Preference preference) {
71 | mAccountHelper.manualSync();
72 |
73 | return false;
74 | }
75 | });
76 | }
77 |
78 | @Override
79 | public void onResume() {
80 | super.onResume();
81 | // Set up a listener whenever a key changes
82 | getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(
83 | mActivity.mySharedPreferenceChangeListener);
84 | }
85 |
86 | @Override
87 | public void onPause() {
88 | super.onPause();
89 | // Unregister the listener whenever a key changes
90 | getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
91 | mActivity.mySharedPreferenceChangeListener);
92 | }
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/HelpFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.ui;
22 |
23 | import android.os.Bundle;
24 | import android.support.v4.app.Fragment;
25 | import android.view.LayoutInflater;
26 | import android.view.View;
27 | import android.view.ViewGroup;
28 |
29 | import org.birthdayadapter.R;
30 | import org.sufficientlysecure.htmltextview.HtmlTextView;
31 |
32 | public class HelpFragment extends Fragment {
33 |
34 | @Override
35 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
36 | View view = inflater.inflate(R.layout.help_fragment, container, false);
37 |
38 | HtmlTextView text = (HtmlTextView) view.findViewById(R.id.help_text);
39 |
40 | // load html into textview
41 | text.setHtml(R.raw.help);
42 |
43 | // no flickering when clicking textview for Android < 4
44 | text.setTextColor(getResources().getColor(android.R.color.black));
45 |
46 | return view;
47 | }
48 | }
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/InstallWorkaroundDialogFragment.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.ui;
22 |
23 | import android.app.AlertDialog;
24 | import android.app.Dialog;
25 | import android.content.ActivityNotFoundException;
26 | import android.content.DialogInterface;
27 | import android.content.DialogInterface.OnClickListener;
28 | import android.content.Intent;
29 | import android.net.Uri;
30 | import android.os.Bundle;
31 | import android.support.annotation.NonNull;
32 | import android.support.v4.app.DialogFragment;
33 | import android.text.SpannableString;
34 | import android.text.method.LinkMovementMethod;
35 | import android.text.util.Linkify;
36 | import android.widget.TextView;
37 |
38 | import org.birthdayadapter.R;
39 | import org.birthdayadapter.util.PreferencesHelper;
40 |
41 | public class InstallWorkaroundDialogFragment extends DialogFragment {
42 |
43 | /**
44 | * Creates new instance of this dialog fragment
45 | */
46 | public static InstallWorkaroundDialogFragment newInstance() {
47 | return new InstallWorkaroundDialogFragment();
48 | }
49 |
50 | @Override
51 | public void onStart() {
52 | super.onStart();
53 |
54 | // Make the textview clickable. Must be called after show()
55 | TextView messageTextView = ((TextView) getDialog().findViewById(android.R.id.message));
56 | if (messageTextView != null) {
57 | messageTextView.setMovementMethod(LinkMovementMethod.getInstance());
58 | }
59 | }
60 |
61 | /**
62 | * Creates dialog
63 | */
64 | @NonNull
65 | @Override
66 | public Dialog onCreateDialog(Bundle savedInstanceState) {
67 | // Linkify the message
68 | final SpannableString message = new SpannableString(getString(R.string.workaround_dialog_message));
69 | Linkify.addLinks(message, Linkify.ALL);
70 |
71 | AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
72 | alert.setTitle(R.string.workaround_dialog_title);
73 | alert.setMessage(message);
74 | alert.setCancelable(true);
75 | alert.setIcon(android.R.drawable.ic_dialog_info);
76 |
77 | alert.setNegativeButton(R.string.workaround_dialog_close_button, new OnClickListener() {
78 | @Override
79 | public void onClick(DialogInterface dialogInterface, int i) {
80 | dismiss();
81 | }
82 | });
83 | alert.setNeutralButton(R.string.workaround_dialog_dont_show_again_button, new OnClickListener() {
84 | @Override
85 | public void onClick(DialogInterface dialogInterface, int i) {
86 | PreferencesHelper.setShowWorkaroundDialog(getActivity(), false);
87 | dismiss();
88 | }
89 | });
90 | alert.setPositiveButton(R.string.workaround_dialog_install_button, new OnClickListener() {
91 | public void onClick(DialogInterface dialog, int which) {
92 | String workaroundName = "org.birthdayadapter.jb.workaround";
93 | try {
94 | startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + workaroundName)));
95 | } catch (ActivityNotFoundException anfe) {
96 | // No Google Play installed? Weird! Try with browser!
97 | startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + workaroundName)));
98 | }
99 | }
100 | });
101 | return alert.create();
102 | }
103 |
104 | }
105 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/ui/ShowContactActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2016 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.ui;
22 |
23 | import org.birthdayadapter.util.Constants;
24 | import org.birthdayadapter.util.Log;
25 |
26 | import android.annotation.TargetApi;
27 | import android.app.Activity;
28 | import android.net.Uri;
29 | import android.os.Build;
30 | import android.os.Bundle;
31 | import android.provider.CalendarContract;
32 | import android.provider.ContactsContract.QuickContact;
33 |
34 | /*
35 | * Uri is built in CalendarSyncAdapterService.insertEvent() and looks like Uri
36 | * contactLookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI,
37 | * lookupKey);
38 | *
39 | * Code related to the button is here:
40 | * https://github.com/CyanogenMod/android_packages_apps_Calendar
41 | * /blob/jellybean-stable/src/com/android/calendar/EventInfoFragment.java in
42 | * updateCustomAppButton()
43 | *
44 | * Label of button can not be set!
45 | */
46 | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
47 | public class ShowContactActivity extends Activity {
48 |
49 | @Override
50 | protected void onCreate(Bundle savedInstanceState) {
51 | super.onCreate(savedInstanceState);
52 |
53 | Bundle extras = getIntent().getExtras();
54 | if (extras != null && extras.containsKey(CalendarContract.EXTRA_CUSTOM_APP_URI)) {
55 | Uri uri = Uri.parse(extras.getString(CalendarContract.EXTRA_CUSTOM_APP_URI));
56 | Log.d(Constants.TAG, "Uri: " + uri);
57 |
58 | QuickContact.showQuickContact(this, getIntent().getSourceBounds(), uri,
59 | QuickContact.MODE_LARGE, null);
60 | } else {
61 | Log.e(Constants.TAG, "getIntent().getData() is null!");
62 | }
63 |
64 | finish();
65 | }
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/AccountListAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import android.accounts.Account;
24 | import android.content.Context;
25 | import android.os.Build;
26 | import android.support.annotation.NonNull;
27 | import android.view.LayoutInflater;
28 | import android.view.View;
29 | import android.view.ViewGroup;
30 | import android.widget.ArrayAdapter;
31 | import android.widget.CheckBox;
32 | import android.widget.ImageView;
33 | import android.widget.TextView;
34 |
35 | import org.birthdayadapter.R;
36 |
37 | import java.util.HashSet;
38 | import java.util.List;
39 |
40 | public class AccountListAdapter extends ArrayAdapter {
41 | private final LayoutInflater mInflater;
42 |
43 | // hold a private reference to the underlying data List
44 | private List data;
45 |
46 | public AccountListAdapter(Context context) {
47 | super(context, -1);
48 | mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
49 | }
50 |
51 | public void setData(List data) {
52 | clear();
53 | if (data != null) {
54 | if (Build.VERSION.SDK_INT >= 11) {
55 | addAll(data);
56 | } else {
57 | for (AccountListEntry entry : data) {
58 | add(entry);
59 | }
60 | }
61 | this.data = data;
62 | }
63 | }
64 |
65 | public List getData() {
66 | return data;
67 | }
68 |
69 | public HashSet getAccountBlacklist() {
70 | if (getData() == null) {
71 | return null;
72 | }
73 |
74 | HashSet blacklist = new HashSet<>();
75 | for (AccountListEntry entry : getData()) {
76 | Log.d(Constants.TAG, "entry: " + entry.getLabel() + " " + entry.isSelected());
77 | if (!entry.isSelected()) {
78 | blacklist.add(entry.getAccount());
79 | }
80 | }
81 | return blacklist;
82 | }
83 |
84 | /**
85 | * Populate new items in the list.
86 | */
87 | @NonNull
88 | @Override
89 | public View getView(int position, View convertView, @NonNull ViewGroup parent) {
90 | View view;
91 |
92 | if (convertView == null) {
93 | view = mInflater.inflate(R.layout.account_list_entry, parent, false);
94 | } else {
95 | view = convertView;
96 | }
97 |
98 | AccountListEntry entry = getItem(position);
99 | ((TextView) view.findViewById(R.id.account_list_text)).setText(entry.getLabel());
100 | ((TextView) view.findViewById(R.id.account_list_subtext)).setText(entry.getAccount().name);
101 | ((ImageView) view.findViewById(R.id.account_list_icon)).setImageDrawable(entry.getIcon());
102 | CheckBox cBox = (CheckBox) view.findViewById(R.id.account_list_cbox);
103 | cBox.setChecked(entry.isSelected());
104 |
105 | return view;
106 | }
107 |
108 | }
109 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/AccountListEntry.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import android.accounts.Account;
24 | import android.accounts.AuthenticatorDescription;
25 | import android.content.Context;
26 | import android.content.pm.PackageManager;
27 | import android.content.pm.PackageManager.NameNotFoundException;
28 | import android.content.res.Resources.NotFoundException;
29 | import android.graphics.drawable.Drawable;
30 |
31 | public class AccountListEntry {
32 | private String label;
33 | private Drawable icon;
34 | private boolean selected;
35 | private Account account;
36 |
37 | public AccountListEntry(Context context, Account account, AuthenticatorDescription description,
38 | boolean selected) {
39 | this.account = account;
40 | this.selected = selected;
41 | init(context, account, description);
42 | }
43 |
44 | /**
45 | * Load label and icon for this entry
46 | */
47 | public void init(Context context, Account account, AuthenticatorDescription description) {
48 | PackageManager pm = context.getPackageManager();
49 | label = description.packageName;
50 | try {
51 | label = pm.getResourcesForApplication(description.packageName).getString(
52 | description.labelId);
53 | } catch (NotFoundException | NameNotFoundException e) {
54 | Log.e(Constants.TAG, "Error retrieving label!", e);
55 | }
56 |
57 | icon = pm.getDrawable(description.packageName, description.iconId, null);
58 | }
59 |
60 | public String getLabel() {
61 | return label;
62 | }
63 |
64 | public Account getAccount() {
65 | return account;
66 | }
67 |
68 | public Drawable getIcon() {
69 | return icon;
70 | }
71 |
72 | public boolean isSelected() {
73 | return selected;
74 | }
75 |
76 | public void setSelected(boolean selected) {
77 | this.selected = selected;
78 | }
79 |
80 | @Override
81 | public String toString() {
82 | return "name: " + account.name + ", type: " + account.type;
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/BackgroundStatusHandler.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import java.lang.ref.WeakReference;
24 |
25 | import android.os.Handler;
26 | import android.os.Message;
27 |
28 | public class BackgroundStatusHandler extends Handler {
29 |
30 | public interface StatusChangeListener {
31 | public void onStatusChange(boolean progress);
32 | }
33 |
34 | public static final int BACKGROUND_STATUS_HANDLER_DISABLE = 0;
35 | public static final int BACKGROUND_STATUS_HANDLER_ENABLE = 1;
36 |
37 | private WeakReference mListener;
38 |
39 | public BackgroundStatusHandler(StatusChangeListener activity) {
40 | mListener = new WeakReference<>(activity);
41 | noOfRunningBackgroundThreads = 0;
42 | }
43 |
44 | private int noOfRunningBackgroundThreads;
45 |
46 | @Override
47 | public void handleMessage(Message msg) {
48 | StatusChangeListener listener = mListener.get();
49 | final int what = msg.what;
50 |
51 | switch (what) {
52 | case BACKGROUND_STATUS_HANDLER_ENABLE:
53 | noOfRunningBackgroundThreads++;
54 |
55 | if (listener != null) {
56 | listener.onStatusChange(true);
57 | }
58 | break;
59 |
60 | case BACKGROUND_STATUS_HANDLER_DISABLE:
61 | noOfRunningBackgroundThreads--;
62 |
63 | if (noOfRunningBackgroundThreads <= 0) {
64 | if (listener != null) {
65 | listener.onStatusChange(false);
66 | }
67 | }
68 |
69 | break;
70 |
71 | default:
72 | break;
73 | }
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/Constants.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import android.accounts.Account;
24 |
25 | public class Constants {
26 | public static final String TAG = "Birthday Calendar";
27 |
28 | public static final String FULL_PACKAGE_NAME = "org.birthdayadapter";
29 |
30 | public static final String ACCOUNT_NAME = "Birthday Adapter";
31 | public static final String ACCOUNT_TYPE = "org.birthdayadapter.account";
32 | public static final String CONTENT_AUTHORITY = "com.android.calendar";
33 |
34 | public static final Account ACCOUNT = new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
35 |
36 | public static final String PREFS_NAME = "preferences";
37 |
38 | public static final int DISABLED_REMINDER = -99999;
39 | }
40 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/Log.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import org.birthdayadapter.BuildConfig;
24 |
25 | /**
26 | * Wraps Android Logging to enable or disable debug output using Constants
27 | */
28 | public final class Log {
29 |
30 | public static void v(String tag, String msg) {
31 | if (BuildConfig.DEBUG) {
32 | android.util.Log.v(tag, msg);
33 | }
34 | }
35 |
36 | public static void v(String tag, String msg, Throwable tr) {
37 | if (BuildConfig.DEBUG) {
38 | android.util.Log.v(tag, msg, tr);
39 | }
40 | }
41 |
42 | public static void d(String tag, String msg) {
43 | if (BuildConfig.DEBUG) {
44 | android.util.Log.d(tag, msg);
45 | }
46 | }
47 |
48 | public static void d(String tag, String msg, Throwable tr) {
49 | if (BuildConfig.DEBUG) {
50 | android.util.Log.d(tag, msg, tr);
51 | }
52 | }
53 |
54 | public static void i(String tag, String msg) {
55 | if (BuildConfig.DEBUG) {
56 | android.util.Log.i(tag, msg);
57 | }
58 | }
59 |
60 | public static void i(String tag, String msg, Throwable tr) {
61 | if (BuildConfig.DEBUG) {
62 | android.util.Log.i(tag, msg, tr);
63 | }
64 | }
65 |
66 | public static void w(String tag, String msg) {
67 | android.util.Log.w(tag, msg);
68 | }
69 |
70 | public static void w(String tag, String msg, Throwable tr) {
71 | android.util.Log.w(tag, msg, tr);
72 | }
73 |
74 | public static void w(String tag, Throwable tr) {
75 | android.util.Log.w(tag, tr);
76 | }
77 |
78 | public static void e(String tag, String msg) {
79 | android.util.Log.e(tag, msg);
80 | }
81 |
82 | public static void e(String tag, String msg, Throwable tr) {
83 | android.util.Log.e(tag, msg, tr);
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/java/org/birthdayadapter/util/MySharedPreferenceChangeListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012-2013 Dominik Schürmann
3 | *
4 | * This file is part of Birthday Adapter.
5 | *
6 | * Birthday Adapter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * Birthday Adapter is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU General Public License
17 | * along with Birthday Adapter. If not, see .
18 | *
19 | */
20 |
21 | package org.birthdayadapter.util;
22 |
23 | import org.birthdayadapter.R;
24 | import org.birthdayadapter.service.MainIntentService;
25 |
26 | import android.content.Context;
27 | import android.content.Intent;
28 | import android.content.SharedPreferences;
29 | import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
30 | import android.os.Handler;
31 | import android.os.Messenger;
32 |
33 | public class MySharedPreferenceChangeListener implements OnSharedPreferenceChangeListener {
34 | private Context context;
35 | private Handler handler;
36 |
37 | public MySharedPreferenceChangeListener(Context context, Handler handler) {
38 | super();
39 | this.context = context;
40 | this.handler = handler;
41 | }
42 |
43 | @Override
44 | public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
45 | if (context.getString(R.string.pref_color_key).equals(key)) {
46 | // set new color
47 | startServiceAction(MainIntentService.ACTION_CHANGE_COLOR);
48 | } else {
49 | // resync all events
50 | startServiceAction(MainIntentService.ACTION_MANUAL_COMPLETE_SYNC);
51 | }
52 | }
53 |
54 | /**
55 | * Start service with action, while executing, show progress
56 | */
57 | public void startServiceAction(String action) {
58 | // Send all information needed to service to do in other thread
59 | Intent intent = new Intent(context, MainIntentService.class);
60 |
61 | // Create a new Messenger for the communication back
62 | Messenger messenger = new Messenger(handler);
63 | intent.putExtra(MainIntentService.EXTRA_MESSENGER, messenger);
64 |
65 | intent.setAction(action);
66 |
67 | // start service with intent
68 | context.startService(intent);
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout-v21/pref_reminder.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
17 |
18 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/about_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
16 |
17 |
21 |
22 |
26 |
27 |
33 |
34 |
35 |
39 |
40 |
46 |
47 |
52 |
53 |
54 |
55 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/account_list_entry.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
18 |
19 |
20 |
27 |
28 |
35 |
36 |
42 |
43 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/account_list_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
20 |
21 |
28 |
29 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/base_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
19 |
20 |
27 |
28 |
29 |
35 |
36 |
37 |
42 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/help_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
16 |
17 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/layout/pref_reminder.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
19 |
20 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-hdpi/google_calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-hdpi/google_calendar.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-hdpi/google_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-hdpi/google_contacts.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-mdpi/google_calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-mdpi/google_calendar.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-mdpi/google_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-mdpi/google_contacts.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xhdpi/google_calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xhdpi/google_calendar.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xhdpi/google_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xhdpi/google_contacts.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxhdpi/google_calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxhdpi/google_calendar.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxhdpi/google_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxhdpi/google_contacts.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/google_calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/google_calendar.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/google_contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/google_contacts.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SufficientlySecure/birthday-calendar/73d8d720f717cc5bc05028a8fbbcdee76b8b3c15/Birthday-Calendar/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-bg/help.html:
--------------------------------------------------------------------------------
1 |
2 | Как работи Адаптер Рожден ден?
Адаптер Рожден ден създава нов Адаптер Синхронизиране на вашето Андроид устройство, като синхронизира всички събития, като рождени дни, годишнини и други юбилеи, от контактите в календара. Тези събития се показват във вашия стандартен календар от Андроид.
Искам синхронизирани събития в съществуващия календар!
Това не е идея на това приложение. Сега имате всички рождени дни в списъка с контактите и синхронизирани чрез облак. Можете да ползвате вашия компютър, за да прегледате рождените дни от контактите във вашия календар, през Адаптер Рожден ден. В Thunderbird това може да се осъществи посредством Thunderbirthday Add-on.
Събитията не се показват в уиджета на Андроид календара!
Всички събития не се показват в текущи събития за деня в Android 4.0. Това е отстраненно 4.04.
3 | Погледни Android Bug 22365 за повече информация.
Как предпочитате синхронизирането на контактите в календара?
Това се прави веднъж на ден и се ползва от самия Android заедно с други синхронизации.
Синхронизацията не работи!
Моля проверете следното:
4 |
- Синхронизацията включена ли е на вашето устройство? (Можете да включите / изключите синхронизирането, например чрез уиджет на Андроид)
5 |
Помощ превод/грешка
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-ca/help.html:
--------------------------------------------------------------------------------
1 |
2 | Com funciona Birthday Adapter?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Els esdeveniments no es mostren en el giny del calendari d'Android!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
La sincronització no funciona!
Per favor, comproveu el següent:⏎
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
4 | Ajudeu a traduir / envieu informe d'errors
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-cs/help.html:
--------------------------------------------------------------------------------
1 |
2 | How does Birthday Adapter work?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-de/help.html:
--------------------------------------------------------------------------------
1 |
2 | Wie funktioniert Birthday Adapter?
Der Birthday Adapter erstellt einen neuen SyncAdapter auf deinem Android Gerät, um all die Ereignisse, wie Geburtstage, Jubiläen oder Jahrestage, aus deinen Kontakten mit dem Kalender zu synchronisieren. Dieser Kalender wird dann in Androids Kalender-Anwendung in der gewünschten Farbe angezeigt.
Ich möchte die Ereignisse mit existierenden Kalender synchronisieren!
Dafür ist diese App nicht gedacht. Denn falls deine Kontakte bereits mit einer Cloud-basierten Lösung synchronisiert sind, dann würden die Ereignisse sowohl lokal auf deinem Gerät, sowie in der Cloud erstellt. Du kannst statt dessen eine Desktop Anwendung benutzen, falls die Geburtstage im gleichen Kalender vorhanden sein sollen. Mit Mozilla Thunderbird ist das mit dem Thunderbirthday Add-on möglich.
Ereignisse werden nicht in Androids Kalender-Widget angezeigt!
Unter Android 4.0 werden ganztätige Ereignisse am Tag des Ereignisses nicht dargestellt. Dieser Fehler wurde in Android 4.04 behoben
Siehe Android Bug 22365 für weitere Informationen.
Wie oft werden die Ereignisse aus den Kontakten in den Kalender synchronisiert?
Einmal am Tag führt Android von sich aus eine Synchronisation durch. Gleichzeitig werden auch andere Synchronisationen ausgeführt.
Die Synchronisation funktioniert nicht!
Bitte überprüfe folgende Punkte:
3 |
- Ist Androids Synchronisationen aktiviert? (Du kannst Synchronisationen zum Beispiel durch das Energiesteuerungs-Widget aktiveren)
4 | Hilf bei der Übersetzung/Melde Fehler
Bitte gehe auf https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-el/help.html:
--------------------------------------------------------------------------------
1 |
2 | Πώς λειτουργεί το Birthday Adapter;
Το Birthday Adapter δημιουργεί ένα νέο SyncAdapter στην Android συσκευή σας, το οποίο συγχρονίζει όλες τις εκδηλώσεις, όπως γενέθλια, επετείους και ούτω καθεξής, από τις επαφές σας σε ένα ημερολόγιο. Αυτό το ημερολόγιο εμφανίζεται σαν στάνταρ Android εφαρμογή ημερολογίου.
Θέλω να συγχρονίζονται τα γεγονότα σε ένα υπάρχον ημερολόγιο!
Αυτή δεν είναι η ιδέα της εφαρμογής αυτής. Όπως έχετε ήδη όλα τα γενέθλια των επαφών και το συγχρονισμό αυτών στο σύννεφο σας, θα ήταν περιττό να συγχρονίζετε επίσης ένα ημερολόγιο με ίδιες πληροφορίες. Αντί να χρησιμοποιήσετε εργαλεία στην επιφάνεια εργασίας του υπολογιστή σας για να εμφανίσετε τα γενέθλια από τις επαφές σας στο ημερολόγιό σας, όπως γενέθλια προσαρμογέων κάνει. Στο Thunderbird αυτό μπορεί να γίνει με το Thunderbirthday Add-on .
Τα γεγονότα δεν εμφανίζονται στο Androids γραφικό στοιχείο ημερολογίου!
Όλες οι μονοήμερες εκδηλώσεις δεν εμφανίζονται κατά την ημέρα το συμβάν λαμβάνουν χώρα στο Android 4.0. Αυτό καθορίζεται από το Android 4.04.
3 | Δείτε Android Bug 22365 για περισσότερες πληροφορίες.
Πόσο συχνά τα γεγονότα επαφων να συγχρονιστούν στο ημερολόγιο;
Αυτό γίνεται μία φορά την ημέρα και το επικαλείται το ίδιο το Android μαζί με άλλους συγχρονισμούς.
Ο συγχρονισμός δεν λειτουργεί!
Παρακαλούμε ελέγξτε τα ακόλουθα:
4 |
5 |
6 |
- Ο συγχρονισμός είναι ενεργοποιημένος στην συσκευή σας; (Μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε τον συγχρονισμό εφαρμογής σε επίπεδο, για παράδειγμα, με ανδροειδή γραφικό στοιχείο ισχύος)
7 | Βοήθεια στηνμετάφραση/έκθεση σφαλμάτων
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-es/help.html:
--------------------------------------------------------------------------------
1 |
2 | ¿Cómo funciona Birthday Adapter?
Birthday Adapter crea un SyncAdapter nuevo en su dispositivo Android, que sincroniza todos los eventos como cumpleaños, aniversarios, etc. de sus contactos con un calendario. Este calendario se muestra en su aplicación estándar Android Calendar.
¡Quiero sincronizar los eventos con un calendario existente!
Esa no es la idea de esta app. Como ya tiene todos los cumpleaños en sus contactos y éstos sincronizados con la nube, sería redundante sincronizar también un calendario con la misma información. En su lugar, utilice herramientas en su pc de escritorio para sincronizar los cumpleaños de sus contactos con su calendario, como hace Birthday Adapter. En Thunderbird puede hacer esto con el Add-on de Thunderbirthday.
¡Los eventos no se muestran en el widget del calendario de Android!
Los eventos de todo el día, no se muestran en el día en Android 4.0. Este se arregla en Android 4.04.
3 | Ver Error de Android 22365 para más información.
¿Con qué frecuencia se sincronizan los eventos de contacto en el calendario?
Esto se realiza una vez al día y lo realiza el propio Android junto con otras sincronizaciones.
¡La sincronización no está funcionando!
Por favor, revisa lo siguiente:
4 |
- ¿Está habilitada la sincronización en su dispositivo? (Puede activar / desactivar la sincronización de todas las aplicaciones, por ejemplo, con el widget de energía de Android)
5 | Ayuda en la traducción/informar de errores
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-et/help.html:
--------------------------------------------------------------------------------
1 |
2 | Kuidas sünnipäevade adapter töötab?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-eu/help.html:
--------------------------------------------------------------------------------
1 |
2 | Nola egiten du lan Urtebetetze Egokitzaileak?
Urtebetetze Egokitzaileak AldibEgokitzaile berri bat sortzen du zure Android gailuan, honek gertaera guztiak aldiberetzen ditu, urtebetetzeak, urteurrenak, etab. bezalakoak zure harremanetatik egutegi batera. Egutegi hau zure Android Egutegia aplikazio estandarrean erakusten da.
Gertaerak badagoen egutegi batean aldiberetzea nahi ditut!
Hau ez da aplikazio honen ideia. Jadanik urtebetetze guztiak zure harremanetan dituzunez eta hodeian aldiberetuta, gehiegizkoa litzake egutegi bat ere argibide berdinekin aldiberetzea. Ordez erabili zure pc mahaigaineko tresnak urtebetetzeak erakusteko zure harremanetatik zure egutegian, Urtebetetze Egokitzaileak egiten duen bezala. Thunderbird-en hau Thunderbirthday Gehigarria-rekin egin daiteke.
Gertaerak ez dira Android-ren egutegi widget-ean erakusten!
Egun-osoko gertaerak ez dira gertaera egunean erakusten Android 4.0-ean. Hau zuzenduta dago 4.04-an.
3 | Ikusi Android Akatsa 22365 argibide gehiagorako.
Zein maiztasunekin aldiberetzen dira harreman gertaerak egutegian?
Hau egunean behin egiten da eta Android-ek berak eskatuta beste aldiberetzeekin batera.
Aldiberetzeak ez du lan egiten!
Mesedez egiaztatu hurrengoa:
4 |
- Aldiberetzea gaituta dago zure gailuan? (aplikazio-mailako aldiberetzea gaitu/ezgaitu dezakezu Android-ren indar widget-ean)
5 | Lagundu itzultzen/akatsak jakinarazten
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-fi/help.html:
--------------------------------------------------------------------------------
1 |
2 | Miten Birthday Adapter toimii?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
Haluan synkronoida tapahtumat olemassa olevaan kalenteriin!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Tapahtumat eivät näy Androidin kalenteri-widgetissä!
Koko päivän tapahtumat eivät näy päivän yhteydessä Android 4.0:ssa. Vika on korjattu Android 4.04:ssa
3 | Katso osoitteesta Android Bug 22365 lisätietoja.
Miten usein kontaktien tapahtumat synkronoidaan kalenteriin?
Tämä tehdään kerran päivässä. Android hoitaa sen muiden synkronointien ohella.
Synkronointi ei toimi!
Please check the following:
4 |
- Onko synkronointi aktivoitu laitteessasi? (Voit ottaa käyttöön synkronoinnin tai poistaa sen käytöstä sovelluksen laajuisesti TODO: what does the rest of the sentence mean?)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-fr/help.html:
--------------------------------------------------------------------------------
1 |
2 | Comment fonctionne l'Adaptateur d'anniversaires ?
L'Adaptateur d'anniversaires crée un nouvel adaptateur de synchronisation sur votre appareil Android, qui synchronise tous les évènements, comme les anniversaires, fêtes, etc. depuis vos contacts dans un calendrier. Ce calendrier est affiché dans votre application de calendrier Android.
Je veux synchroniser les évènements dans un calendrier existant !
Ce n'est pas le but de cette application. Vu que vous avez déjà tous les anniversaires dans vos contacts et qu'ils sont synchronisées dans le nuage, il serait redondant de synchroniser un calendrier avec les mêmes informations. Vous pouvez plutôt utiliser des logiciels sur votre ordinateur pour afficher les anniversaire de vos contacts, tel que le fait l'Adaptateur d'anniversaires. Dans Thunderbird vous pouvez le faire avec l'extension Thunderbirthday.
Les évènements ne s'affichent pas dans le widget du calendrier Android !
Les évènements durant toute une journée ne sont pas affichées le jour de l’évènement dans Android 4.0. Ce bogue est corrigé avec Android 4.04.
3 | Voir Bogue Android 22365 pour plus d'informations.
À quelle fréquence les évènements des contacts sont-ils synchronisés dans le calendrier ?
Ceci est fait une fois par jour et est lancé par Android lui-même avec d'autres synchronisations.
La synchronisation ne fonctionne pas !
Veuillez vérifier :
4 |
- Est-ce que la synchronisation est activée sur votre appareil ? (Vous pouvez l'activer/la désactiver pour toutes les applications, par exemple avec le widget de contrôle de l'énergie d'Android)
5 | Aidez à traduire/rapporter des bogues
Veuillez visiter https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-gl/help.html:
--------------------------------------------------------------------------------
1 |
2 | Como funciona Birthday Adapter?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Axudar a traducir/informe de erros
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-hu/help.html:
--------------------------------------------------------------------------------
1 |
2 | Hogyan működik a Birthday Adapter?
A Birthday Adapter létrehoz egy új SyncAdaptert az Android készüléken, amely szinkronizálja az összes eseményt, mint például a születésnapokat, az évfordulókat, stb., a Névjegyekkel egy naptárban. Ez a naptár megjelenik a megszokott Android Naptár alkalmazásban.
Szeretném szinkronizálni az eseményeket egy meglévő naptárba!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Az események nem jelennek meg az Android naptár widget-jében!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
A szinkronizáció nem működik!
Kérem ellenőrizze a következőt:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-it/help.html:
--------------------------------------------------------------------------------
1 |
2 | Come funziona Birthday Adapter?
Birthday Adapter crea un nuovo SyncAdapter sul tuo dispositivo Android, che sincronizza tutti gli eventi, come compleanni, anniversari e così via, dei tuoi contatti in un calendario. Questo calendario è visualizzato nella tua applicazione Calendario standard di Android.
Voglio sincronizzare questi eventi in un calendario esistente!
Questa non è l'idea di questa applicazione. Visto che tutti i compleanni sono già salvati nei contatti e sincronizzati nel cloud, sarebbe ridondante sincronizzare anche un calendario con le stesse informazioni. Invece puoi utilizzare strumenti sul tuo PC desktop per visualizzare i compleanni dei tuoi contatti nel tuo calendario, come fa Birthday Adapter. In Thunderbird questo può essere fatto con l'Add-on Thunderbirthday</ a>.
Gli eventi non sono mostrati nel widget del calendario di Android!
Gli eventi per tutto il giorno non vengono visualizzati il giorno dell'evento su Android 4.0. Questo è stato corretto in Android 4.04.
3 | Vedi Android Bug 22365</ a> per ulteriori informazioni.
Con che frequenza gli eventi dei contatti sono sincronizzati nel calendario?
Questo viene fatto una volta al giorno e richiamato da Android stesso insieme ad altre sincronizzazioni.
La sincronizzazione non funziona!
Controlla quanto segue:
- La sincronizzazione è abilitata sul tuo dispositivo? (Puoi abilitare/disabilitare la sincronizzazione a livello id applicazione, ad esempio con i widget degli strumenti di Android)
4 | Aiuta nella traduzione/segnalazione bug
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-ja/help.html:
--------------------------------------------------------------------------------
1 |
2 | Birthday Adapter はどのように動作しますか?
誕生日アダプターは、あなたの連絡先からカレンダーに、誕生日、記念日などのようなすべてのイベントを同期させる、新しい同期アダプターをあなたの Android デバイス上に作成します。このカレンダーは、標準のAndroid カレンダー アプリケーションの中に表示されます。
既存のカレンダーにイベントを同期させたい!
これはこのアプリのアイデアではありません。すべての誕生日をすでに連絡先に持っていて、クラウドにこれらを同期しているとして、同じ情報をカレンダーに同期させるのは冗長になるでしょう。代わりに、Birthday Adapter が行うように、あなたのカレンダーにあなたの連絡先から誕生日を表示する、デスクトップPC上のツールを使用してください。 Thunderbirthday アドオン を使用して、サンダーバードで行うことができます。
イベントが、Android のカレンダー ウィジェットに表示されません!
Android4.0では、終日イベントがイベントの発生する日に表示されません。これはAndroid4.04で修正されています。
3 | 詳細については、 Android Bug 22365 を参照してください。
どのくらいの頻度で連絡先のイベントがカレンダーに同期されますか?
一日一回行われます。他の同期と一緒に、Android によって呼び出されます。
同期が動作ししません!
下記をご確認ください:
4 |
- お使いのデバイスで同期が有効になっていますか? (アプリケーション全体で同期を有効/無効にすることができます。例えばアンドロイド パワー ウィジェットで)
5 | 翻訳の支援/バグ報告
https://www.sufficientlysecure.org/android/ を参照してください。
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-nb/help.html:
--------------------------------------------------------------------------------
1 |
2 | How does Birthday Adapter work?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-nl/help.html:
--------------------------------------------------------------------------------
1 |
2 | Hoe werkt Birthday Adapter?
Birthday Adapter maakt een nieuwe synchronisatie-adapter aan met alle verjaardagen, jubilea e.d. van uw contacten in een aparte agenda. Deze agenda wordt weergegeven in de app Agenda.
Ik wil graag de gebeurtenissen in een reeds bestaande kalender plaatsen!
Dat is niet de bedoeling van deze app. Aangezien al uw verjaardagen al in de cloud staan, zou het overbodig zijn om deze informatie opnieuw te synchroniseren. U kunt in plaats daarvan andere programma's op uw pc gebruiken. Thunderbird heeft een speciale add-on hiervoor.
Mijn evenementen worden niet weergegeven.
In Android 4.0 worden afspraken die de hele dag duren niet weergegeven. Dit is opgelost in Android 4.0.4.
3 | Bekijk Android-foutrapport 22365 voor meer informatie.
Hoe vaak worden de gebeurtenissen gesynchroniseerd?
Dit gebeurt automatisch eenmaal per dag door het Android-systeem.
Het synchroniseren werkt niet!
Controleer a.u.b. het volgende:
4 |
- Is synchroniseren ingeschakeld? (U kunt dit per app instellen met behulp van het energiewidget.)
5 | Help mee met vertalen/dien foutrapporten in
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-pt-rBR/help.html:
--------------------------------------------------------------------------------
1 |
2 | Como o Birthday Adapater funciona?
O Birthday Adapter cria um novo adaptador (SyncAdapter) no seu aparelho Android, que sincroniza com um calendário, todos os eventos, como aniversários, datas especiais e outros, a partir dos seus contatos. Esse calendário é exibido no seu aplicativo padrão de calendário do Android.
Quero sincronizar os eventos com um calendário existente!
Essa não é a ideia deste aplicativo. Como você já possui todos os aniversários em seus contatos e sincronização em nuvem, seria redundante também sincronizar um calendário com as mesmas informações. Em vez disso, use alguma ferramenta no seu computador para exibir os aniversários dos contatos no seu calendário como o Birthday Adapter faz. No Thunderbird, isso pode ser feito com o complemento Thunderbirthday.
Os eventos não são exibidos no widget de calendário do Android!
No Android 4.0, os eventos de dia inteiro não são exibidos no dia em que o evento ocorre. Isso foi corrigido no Android 4.04.
3 | Consulte Android Bug 22365 para obter mais informações.
Com que frequência os eventos dos contatos são sincronizados com o calendário?
Isso é feito uma vez por dia e acionado pelo próprio Android em conjunto com outras sincronizações.
A sincronização não está funcionando!
Verifique o seguinte:
4 |
- A sincronização está ativa no seu aparelho? (Você pode ativar/desativar a sincronização a partir do aplicativo, como por exemplo, com o widget de energia do Android)
5 | Ajuda com tradução e comunicação de erros
Por favor, visite a página https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-pt/help.html:
--------------------------------------------------------------------------------
1 |
2 | How does Birthday Adapter work?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-ro/help.html:
--------------------------------------------------------------------------------
1 |
2 | How does Birthday Adapter work?
Birthday Adapter creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
I want to synchronize the events into an existing calendar!
This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Adapter does. In Thunderbird this can be done with the Thunderbirthday Add-on.
Events are not shown in Androids calendar widget!
All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
3 | See Android Bug 22365 for more information.
How often are contact events synchronized into the calendar?
This is done once a day and invoked by Android itself together with other synchronizations.
The synchronization isn't working!
Please check the following:
4 |
- Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
5 | Help translating/report bugs
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-ru/help.html:
--------------------------------------------------------------------------------
1 |
2 | Как работает Birthday Adapter?
Birthday Adapter создаёт на вашем Android-устройстве новый SyncAdapter, который синхронизирует все события ваших контактов (дни рождения, юбилеи и др.) с календарем. Этот календарь отображается в стандартном приложении Календарь платформы Android.
Я хочу синхронизировать события с существующим календарем!
Суть приложения не в этом. Все дни рождения уже сохранены в контактах и синхронизируются с облаком, синхронизировать ещё и календарь с ними - было бы чересчур. Вместо этого используйте аналоги Birthday Adapter для ПК, позволяющие отображать дни рождения контактов в календаре. В Thunderbird это позволяет делать дополнение Thunderbirthday.
События не отображаются в виджете календаря Android.
События, занимающие весь день, не отображаются в этот день на Android 4.0. Проблема исправлена в Android 4.0.4.
3 | Для получения подробной информации смотрите багрепорт Android 22365.
Как часто события контактов синхронизируются с календарем?
Один раз в день. Android сам выполняет эту синхронизацию вместе с остальными.
Синхронизация не работает!
Пожалуйста, проверьте следующее:
4 |
- Вы уверены, что синхронизация включена на вашем устройстве? (Вы можете включать/выключать синхронизацию для всех приложений, например, в виджете управления питанием Android)
5 | Помощь в переводе / отчёты об ошибках
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-sk/help.html:
--------------------------------------------------------------------------------
1 |
2 | Ako Birthday Adapter funguje?
Birthday Adapter vytvorí nový SyncAdapter na vašom android zariadení, ktoré synchronizuje všetky udalosti, ako narodeniny, výročia atď. z vašich kontaktov do kalendára. Tento kalendár je potom zobrazený v štandardnej android aplikácii kalendára.
Chcem synchronizovať udalosti do existujúceho kalendára!
To nie je myšlienka tejto aplikácie. Ak už máte všetky narodeniny vo vašich kontaktoch a synchronizácia je v cloude, bolo by zbytočné tiež synchronizovať kalendár s rovnakými informáciami. Namiesto toho použite nástroje na vašom stolnom počítači sa zobrazenie narodenín z vašich kontaktov v kalendári, ako to robí Birthday Adapter. V Thunderbird to môže byť vykonané s ThunderBirthDay Add-on </ a>.
Udalosti nie sú zobrazené v Android kalendár widgete!
Celodenné udalosti sa nezobrazia v deň udalosti na Androide 4.0. To je opravené na Androide 4.04.
3 | Pozri Android Bug 22365 </ a> pre viac informácií.
Ako často sú kontaktné udalosti synchronizované do kalendára?
To sa vykonáva raz denne a vyvoláva ju Android sám spolu s ďalšími synchronizáciami.
Synchronizácia nefunguje!
Prosím, skontrolujte nasledovné:
4 |
- Je synchronizácia povolená na vašom zariadení? (Môžete povoliť / zakázať synchronizáciu celej aplikácie, napríklad s Androids power widget)
5 | Nápoveda preklady / Hlásenie chýb
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-sv/help.html:
--------------------------------------------------------------------------------
1 |
2 | Hur fungerar Födelsedags Adapter ?
Födelsedags Adapter skapar en ny SyncAdapter på din Android enhet, som synkroniserar alla händelser, som födelsedagar, bröllopsdagar och så vidare, från dina kontakter till en kalender. Denna kalender visas i din standard Android Kalender.
Jag vill synkronisera händelser till en existerande kalender !
Det är inte tanken med detta program. Eftersom du redan har alla födelsedagar i dina kontakter och synkroniserar dessa i molnet, blir det överflödigt att också synkronisera en kalender med samma information. Använd istället verktyg på din stationära pc för att visa födelsedagar från dina kontakter i din kalender, likt Födelsedag Adapter gör. I Thunderbird kan detta göras med Thunderbirthday Add-on.
Händelser visas inte i Androids kalender widget !
Heldagshändelser visas inte på dagen då händelsen inträffar i Android 4.0. Detta är fixat på Android 4.04.
3 | Kolla Android Bug 22365 för mer information.
Hur ofta är kontakt händelser synkroniserade till kalendern ?
Detta görs en gång per dag och anropas av Android själv tillsammans med andra synkroniseringar.
Synkroniseringen fungerar inte !
Kontrollera följande:
4 |
- Är synkronisering avktiverad på din enhet ? (Du kan aktivera/inaktivera synkronisering i dom flesta program, exempelvis med Androids power widget)
5 | Hjälp med översättning/rapportera buggar
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-tr/help.html:
--------------------------------------------------------------------------------
1 |
2 | Birthday Adapter nasıl çalışır?
Birthday Adapter, Android cihazınızda yeni bir SyncAdapter oluşturur -kişilerden takviminize doğumgünleri, yıldönümleri ve tüm etkinlikleri eşitler- . Bu takvim standart Android Takvim uygulaması içinde gösterilir.
Mevcut olan bir takvimin içine etkinlikleri eşitlemek istiyorum!
Bu uygulamanın böyle bir amacı yok. Thunderbird ile bunu yapabilirsiniz Thunderbirthday Add-on.
Etkinlikler Android widget içinde gösterilmiyor!
Android 4.0 tüm gün etkinliklerini göstermiyor. Android 4.04 sürümünde düzeltildi.
3 | Daha fazla bilgi için buraya bakın Android Bug 22365.
Kişi etkinlikleri ne sıklıkla takvime eşitlenecek?
Android, diğer eşitlemeler ile birlikte günde bir kez yapar
Eşitleme çalışmıyor!
Lütfen aşağıdakileri denetleyin:
4 |
- Cihazınızda eşitleme etkin mi? ( Uygulama genişliğinde eşitlemeyi etkinleştirebilir/devredışı bırakabilirsiniz)
5 | Çeviri/Hata Bildirimine yardım edin
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-uk/help.html:
--------------------------------------------------------------------------------
1 |
2 | Як працює Birthday Adapter?
Birthday Adapter створює на вашому Android-пристрої новий SyncAdapter, який синхронізує всі події ваших контактів (дні народження, ювілеї та ін) з календарем. Цей календар відображається у стандартному додатку Календар платформи Android.
Я хочу синхронізувати події з існуючим календарем!
Суть програми не в цьому. Всі дні народження вже збережені в контактах і синхронізуються з хмарою, синхронізувати ще й календар з ними - було б надмірно. Замість цього використовуйте аналоги Birthday Adapter для ПК, що дозволяють відображати дні народження контактів в календарі. У Thunderbird це дозволяє робити доповнення Thunderbirthday .
Події не відображаються у віджеті календаря Андроїда!
Події, що займають весь день, не відображаються в цей день на Android 4.0. Проблема виправлена в Android 4.0.4. Для отримання детальної інформації дивіться багрепорт Android 22365 </ a>.
Як часто події контактів синхронізуються з календарем?
Раз на день. Андроїд сам виконує цю синхронізацію разом з іншими.
Синхронізація не працює!
Будь ласка, перевірте наступне:
3 |
- Ви впевнені, що синхронізація включена на вашому пристрої? (Ви можете вмикати / вимикати синхронізацію для всіх додатків, наприклад, в віджеті управління живленням Android)
4 | Допомогти перекласти/звітувати про вади
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-vi/help.html:
--------------------------------------------------------------------------------
1 |
2 | Cách thức hoạt động của Birthday Adapter?
Birthday Adapter sẽ tạo ra một SyncAdapter mới trên thiết bị Android và đồng bộ tất cả các sự kiện chẳng hạn như sinh nhật, lễ kỷ niệm hay các sự kiện khác từ danh bạ vào lịch. Bộ lịch này sẽ được hiển thị trên ứng dụng lịch chuẩn của Android.
Tôi muốn đồng bộ tất cả các sự kiện vào bộ lịch hiện hữu!
Đây không phải là mục đích của ứng dụng. Vì bạn đã có toàn bộ ngày sinh trong danh bạ và đang đồng bộ chúng bằng công nghệ đám mây, sẽ là dư thừa nếu bạn lại đồng bộ lịch với cùng thông tin. Thay vào đó, hãy sử dụng các công cụ trên máy vi tính để hiển thị ngày sinh từ danh bạ, chẳng hạn như Birthday Adapter. Với Thunderbird, bạn có thể dùng Tiện ích Thunderbirthday.
Các sự kiện sẽ không hiển thị trong widget lịch của Android!
Các sự kiện nguyên ngày sẽ không được hiển thị trong ngày xảy ra sự kiện trên Android 4.0. Lỗi này đã được sửa trên Android 4.04.
3 | Xem Lỗi Android 22365 để biết thêm chi tiết.
Cách bao lâu thì các sự kiện sẽ được đồng bộ vào lịch?
Thao tác này được thực hiện mỗi ngày một lần và tự Android sẽ tiến hành cùng lúc với các lịch trình đồng bộ khác.
Tiến trình đồng bộ không hoạt động!
Xin kiểm tra các phần sau:
4 |
- Tiến trình đồng bộ trên thiết bị đã được bật hay chưa? (Bạn có thể bật/tắt đồng bộ tất cả ứng dụng ví dụ như với widget năng lượng của Android)
5 | Hỗ trợ dịch thuật/gửi báo cáo lỗi
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw-zh/help.html:
--------------------------------------------------------------------------------
1 |
2 | Birthday Adapter 是怎么工作的?
Birthday Adapter 在您的 Android 系统中增加一个新的同步器 (SyncAdapter),并将通讯录中联系人的生日、纪念日等事件整合成一个日历。这个日历会在标准的 Android 日历中出现。
我想把事件增加到一个现有的日历中!
这不是这个应用的目的。既然您已经在通讯录中保存了所有联系人的生日,并将其与云端同步,再把相同的信息同步到日历账号中的做法是多余的。您可以在电脑中使用一些类似 Birthday Adapter 的软件,将通讯录中的生日显示在日历上。在 Thunderbird 中,你可以使用 Thunderbirthday 扩展。
事件不在桌面的 Android 日历小挂件中显示!
在 Android 4.0 中,全天事件不会在事件发生当天显示。这个问题已经在 Android 4.0.4 中修复。
3 | 详情请查看 Android Bug 22365。
联系人事件被同步到日历中需要多久?
同步每天一次,是由 Android 在触发其它同步时一并进行的。
自动同步不管用!
请进行以下检查:
4 |
- 系统的自动同步是否打开了?(你可以在应用中开关自动同步,例如 Android 电源管理桌面挂件)
5 | 帮助翻译 / 报告问题
Please go to https://www.sufficientlysecure.org/android/.
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw/about.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | https://www.schuermann.eu/android/
9 | Birthday Calendar is the first implementation that displays all birthdays from your contact list automatically in your standard Android calendar without hassle.
10 | License: GPLv3+
11 | Developer: Dominik Schürmann
12 | Translation: See Birthday Calendar on Transifex
13 |
14 | Libraries
15 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/raw/help.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | How does Birthday Calendar work?
9 | Birthday Calendar creates a new SyncAdapter on your Android device, which synchronizes all events, like birthdays, anniversaries and so on, from your contacts into a calendar. This calendar is displayed in your standard Android Calendar application.
10 |
11 | I want to synchronize the events into an existing calendar!
12 | This is not the idea of this app. As you already have all birthdays in your contacts and synchronizing these into the cloud, it would be redundant to also synchronize a calendar with the same information. Instead use tools on your desktop pc to display the birthdays from your contacts in your calendar, like Birthday Calendar does. In Thunderbird this can be done with the Thunderbirthday Add-on.
13 |
14 | Events are not shown in Androids calendar widget!
15 | All-day events are not displayed at the day the event occurs on Android 4.0. This is fixed on Android 4.04.
16 | See Android Bug 22365 for more information.
17 |
18 | How often are contact events synchronized into the calendar?
19 | This is done once a day and invoked by Android itself together with other synchronizations.
20 |
21 | The synchronization isn't working!
22 | Please check the following:
23 |
24 | - Is synchronization enabled on your device? (You can enable/disable synchronization application-wide, for example with Androids power widget)
25 |
26 |
27 |
28 | Help translating/report bugs
29 | Please go to https://www.schuermann.eu/android/.
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-ca/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Natalicis
5 | %1$s: natalici (%2$d)
6 | %1$s: natalici
7 | %1$s: aniversari (%2$d)
8 | %1$s: aniversari
9 | %1$s: un altre esdeveniment (%2$d)
10 | %1$s: un altre esdeveniment
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Versió:
15 |
16 | Principal
17 | Preferències
18 | Filtre de comptes
19 | Ajuda
20 | Quant a
21 |
22 | General
23 | Color
24 | Ajuda
25 | Quant a
26 | Sincronitza ara!
27 | Recordatoris
28 | Activa el recordatori 1
29 | Activa el recordatori 2
30 | Activa el recordatori 3
31 | Activa aquest recordatori
32 | Recordatori 1
33 | Recordatori 2
34 | Recordatori 3
35 | Estableix l\'hora d\'aquest recordatori
36 |
37 | - El dia de l\'esdeveniment
38 | - 1 dia abans
39 | - 2 dies abans
40 | - 3 dies abans
41 | - 5 dies abans
42 | - 7 dies abans
43 | - 10 dies abans
44 | - 14 dies abans
45 |
46 | Etiquetes personalitzades
47 | Activa les etiquetes personalitzades
48 | Natalici
49 | Natalici amb edat
50 | Aniversari
51 | Aniversari amb indicació del temps
52 | Un altre esdeveniment
53 | Un altre esdeveniment amb indicació del temps
54 | Personalitzat
55 | Personalitzat amb indicació del temps
56 | Inseriu %1$s per al nom del contacte.
57 | Inseriu %1$s per al nom del contacte i %2$d per a l\'edat.
58 | Inseriu %1$s per al nom del contacte i %2$s per a l\'etiqueta ⏎
59 | personalitzada d\'aquest esdeveniment. ⏎
60 | Inseriu %1$s per al nom del contacte, %2$s per a l\'etiqueta personalitzada ⏎
61 | de l\'esdeveniment i %3$d per a l\'edat. ⏎
62 | Prefereix el format dd/MM/aaaa
63 | Prefereix dd/MM/aaaa a MM/dd/aaaa quan s\'analitzen les dates
64 | Configuració avançada
65 |
66 | Configuració
67 | Configura Birthday Adapter
68 |
69 | No hi ha cap compte
70 |
71 | Compreu la versió completa!
72 | Obri Google Play per a comprar la versió completa...
73 |
74 | Solució temporal necessària per a aquesta versió d\'Android!
75 | Oculta d\'ara endavant
76 | Tanca
77 | Instal·la la solució temporal
78 |
79 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-cs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-et/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Sünnipäevad
5 | %1$s: Sünnipäev (%2$d)
6 | %1$s: Sünnipäev
7 | %1$s: Aastapäev
8 | %1$s: Muu üritus (%2$d)
9 |
10 | Versioon:
11 |
12 | Eelistused
13 | Abiinfo
14 | Rakendusest
15 |
16 | Üldine
17 | Värv
18 | Abiinfo
19 | Rakendusest
20 | Sünkroniseeri kohe!
21 | Meeldetuletused
22 | Luba meeldetuletus 1
23 | Luba meeldetuletus 2
24 | Luba meeldetuletus 3
25 | Luba see meeldetuletus
26 | Meeldetuletus 1
27 | Meeldetuletus 2
28 | Meeldetuletus 3
29 | Sünnipäev
30 | Sünnipäev koos vanusega
31 | Aastapäev
32 | Aastapäev koos vanusega
33 | Muu üritus
34 | Muu üritus koos vanusega
35 | Eelista pp/aaaa formaati
36 | Eelista pp/aaaa kk/aaaa asemel
37 | Täpsemad seaded
38 |
39 | Seaded
40 | Seadista sünnipäevade adapterit
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-fi/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Syntymäpäivät
5 | %1$s: Syntymäpäivä (%2$d)
6 | %1$s: Syntymäpäivä
7 | %1$s: Vuosipäivä (%2$d)
8 | %1$s: Vuosipäivä
9 | %1$s: Muu tapahtuma (%2$d)
10 | %1$s: Muu tapahtuma
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Versio:
15 |
16 | Päätaso
17 | Asetukset
18 | Apua
19 | Tietoja
20 |
21 | Yleiset
22 | Väri
23 | Apua
24 | Tietoja
25 | Synkronoi nyt!
26 | Muistutukset
27 | Aktivoi muistutus 1
28 | Aktivoi muistutus 2
29 | Aktivoi muistutus 3
30 | Aktivoi tämä muistutus
31 | Muistutus 1
32 | Muistutus 2
33 | Muistutus 3
34 | Aseta tämän muistutuksen ajankohta
35 | Syntymäpäivä
36 | Syntymäpäivä ja ikä
37 | Vuosipäivä
38 | Vuosipäivä ja ikä
39 | Muu tapahtuma
40 | Muu tapahtuma ja ikä
41 | Lisää %1$s yhteystiedon nimeen.
42 | Lisää %1$s yhteystiedon nimeen ja %2$d ikään.
43 | Käytä muotoa pp/KK/vvv
44 | Käytä muotoa pp/KK/vvvv muodon KK/pp/vvvv sijaan päiväyksiä käsiteltäessä.
45 | Lisäasetukset
46 |
47 | Asetukset
48 | Määritä Birthday Adapterin ominaisuudet
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-gl/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Aniversarios
5 | %1$s: Outro evento (%2$d)
6 | %1$s: Outro evento
7 | %1$s: %2$s (%3$d)
8 | %1$s: %2$s
9 |
10 | Versión:
11 |
12 | Principal
13 | Preferencias
14 | Filtro de contas
15 | Axuda
16 | Acerca de
17 |
18 | Xeral
19 | Cor
20 | Axuda
21 | Acerca de
22 | Sincronizar agora!
23 | Recordatorios
24 | Recordatorio 1
25 | Recordatorio 2
26 | Recordatorio 3
27 | Establecer a hora deste recordatorio
28 | Etiquetas personalizadas:
29 | Outro evento
30 | Personalizar
31 | Configuración avanzada
32 |
33 | Axustes
34 |
35 | Non hai ningunha conta
36 |
37 | Mercar a versión completa!
38 | Abrir Google Play para mercar a versión completa...
39 |
40 | Non volver preguntar máis
41 | Pechar
42 |
43 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-ja/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 このイベントのカスタムラベルを、
60 | %3$d に年齢を挿入する。
61 | dd/MM/yyyy 形式を用いる
62 | 日付形式の解析時に dd/MM/yyyy から MM/dd/yyyy を用いる
63 | 追加の設定
64 |
65 | 設定
66 | 誕生日アダプターを構成
67 |
68 | アカウントがありません
69 |
70 | 完全バージョンを購入!
71 | 完全バージョンを購入するためGoogle Playを開く…
72 | • あなた自身のイベントのリマインダーをセットしてください\n• イベントのタイトルをカスタマイズしてください
73 |
74 | このAndroidのバージョンで必要な回避策!
75 | Androidのバグのため、このデバイスを再起動した後で誕生日アダプターは無効にされます。\n\nこのバグはAndroid4.1.1で導入され、Android4.2で修正されているようです。残念ながら、たとえばGalaxy S4などいくつかのデバイスは、まだAndroidの4.2でこのバグがあります。Googleプレイから回避策をインストールすること、バグレポートでさらに多くの情報を見つけることができます: http://code.google.com/p/android/issues/detail?id=34880
76 | 今後表示しない
77 | 閉じる
78 | 回避策をインストール
79 |
80 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-nb/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-pt/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Datas de nascimento
5 | %1$s: Data de nascimento (%2$d)
6 | %1$s: Data de nascimento
7 | %1$s: Aniversário (%2$d)
8 | %1$s: Aniversário
9 | %1$s: Outro evento (%2$d)
10 | %1$s: Outro evento
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Versão:
15 |
16 | Principal
17 | Preferências
18 | Filtrar conta
19 | Ajuda
20 | Sobre
21 |
22 | Geral
23 | Cor
24 | Ajuda
25 | Sobre
26 | Sincronizar agora!
27 | Lembretes
28 | Ativar lembrete 1
29 | Ativar lembrete 2
30 | Ativar lembrete 3
31 | Ativar este lembrete
32 | Lembrete 1
33 | Lembrete 2
34 | Lembrete 3
35 | Definir horário deste lembrete
36 |
37 | - No dia do evento
38 | - 1 dia antes
39 | - 2 dias antes
40 | - 3 dias antes
41 | - 5 dias antes
42 | - 7 dias antes
43 | - 10 dias antes
44 | - 14 dias antes
45 |
46 | Etiquetas personalizadas
47 | Ativar etiquetas personalizadas
48 | Data de nascimento
49 | Data de nascimento com idade
50 | Aniversário
51 | Aniversário com idade
52 | Outro evento
53 | Outro evento com idade
54 | Personalizado
55 | Personalizado com idade
56 | Inserir %1$s para o nome do contacto.
57 | Inserir %1$s para o nome do contacto e %2$d para a idade.
58 | Inserir %1$s para o nome do contacto e %2$s para a etiqueta personalizada deste evento.
59 | Inserir %1$s para o nome do contacto e %2$s para a etiqueta personalizada e %3$d para a idade.
60 | Utilizar dd/MM/aaaa
61 | Utilizar dd/MM/aaaa em vez de MM/dd/aaaa para datas
62 | Definições avançadas
63 |
64 | Definições
65 | Configurar aplicação
66 |
67 | Sem contas
68 |
69 | Comprar versão completa!
70 | Abrir Google Play para comprar a versão completa...
71 |
72 | Requer uma solução alternativa para esta versão Android!
73 | Não mostrar novamente
74 | Fechar
75 | Instalar solução alternativa
76 |
77 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-ro/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Zile de naştere
5 | %1$s: Zi de naştere (%2$d)
6 | %1$s: Ziua de naştere
7 | %1$s: Aniversare (%2$d)
8 | %1$s: Aniversare
9 | %1$s: Alt Eveniment (%2$d)
10 | %1$s: Alt Eveniment
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Versiune:
15 |
16 | Principal
17 | Preferinţe
18 | Filtru Cont
19 | Ajutor
20 | Despre
21 |
22 | General
23 | Culoare
24 | Ajutor
25 | Despre
26 | Sincronizează acum!
27 | Memento
28 | Activare Memento 1
29 | Activare Memento 2
30 | Activare Memento 3
31 | Activează acest Memento
32 | Memento 1
33 | Memento 2
34 | Memento 3
35 | Stabileşte ora acestui Memento
36 |
37 | - În ziua evenimentului
38 | - cu 1 zi înainte
39 | - cu 2 zile înainte
40 | - cu 3 zile înainte
41 | - cu 5 zile înainte
42 | - cu 7 zile înainte
43 | - cu 10zile înainte
44 | - cu 14 zile înainte
45 |
46 | Etichete Personalizate
47 | Activarea Etichetelor personalizate
48 | Zi de naştere
49 | Zi de naştere cu vârsta
50 | Aniversare
51 | Aniversare cu vârsta
52 | Alt eveniment
53 | Alt eveniment, cu vârsta
54 | Personalizat
55 | Personalizat, cu vârsta
56 | Introducere %1$s, pentru nume contact.
57 | Introducere %1$s, pentru nume contact, şi %2$d, pentru vârstă.
58 | Introducere %1$s, pentru nume contact, şi %2$s pentru
59 | eticheta personalizată a acestui eveniment.
60 |
61 | Introducere %1$s, pentru nume contact, %2$s pentru eticheta
62 | personalizată a acestui eveniment, şi %3$d pentru vârstă.
63 | Prefer formatul dd/MM/yyyy
64 | Prefer dd/MM/yyyy în MM/dd/yyyy la analizarea formatelor de dată
65 | Configurări Avansate
66 |
67 | Configurări
68 | Configurări Birthday Adapter
69 |
70 | Nici-un cont
71 |
72 | Cumpără versiunea completă!
73 | Pentru a cumpăra versiunea completă, deschide Google Play...
74 |
75 | E necesară o Soluţie Alternativă pentru această versiune Android!
76 | Nu se mai afişează
77 | Închide
78 | Instalare Soluţie alternativă
79 |
80 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-sk/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Narodeniny
5 | %1$s: Narodeniny (%2$d)
6 | %1$s: Narodeniny
7 | %1$s: Výročie (%2$d)
8 | %1$s: Výročie
9 | %1$s: Iná udalosť (%2$d)
10 | %1$s: Iná udalosť
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Verzia:
15 |
16 | Hlavné
17 | Nastavenia
18 | Filter účtu
19 | Pomoc
20 | O aplikácii
21 |
22 | Obecné
23 | Farba
24 | Pomoc
25 | O aplikácii
26 | Synchronizovať teraz!
27 | Pripomienky
28 | Zapnúť pripomienku 1
29 | Zapnúť pripomienku 2
30 | Zapnúť pripomienku 3
31 | Zapnúť túto pripomienku
32 | Pripomienka 1
33 | Pripomienka 2
34 | Pripomienka 3
35 | Nastaviť čas tejto pripomienky
36 |
37 | - V deň udalosti
38 | - 1 deň pred
39 | - 2 dni pred
40 | - 3 dni pred
41 | - 5 dní pred
42 | - 7 dní pred
43 | - 10 dní pred
44 | - 14 dní pred
45 |
46 | Vlastné popisky
47 | Zapnúť vlastné popisky
48 | Narodeniny
49 | Narodeniny s vekom
50 | Výročie
51 | Výročie s vekom
52 | Iná udalosť
53 | Iná udalosť s vekom
54 | Vlastné
55 | Vlastné s vekom
56 | Vložiť %1$s pre meno kontaktu.
57 | Vložiť %1$s pre meno kontaktu a %2$d pre vek.
58 | Vložiť %1$s pre meno kontaktu a %2$s pre vlastný
59 | popisok tejto udalosti.
60 | Vložiť %1$s pre meno kontaktu, %2$s pre vlastný popisok tejto udalosti
61 | a %3$d pre vek.
62 | Navrhnúť dd/MM/rrrr formát
63 | Navrhnúť dd/MM/rrrr na MM/dd/rrrr pri parsovaní formátov dátumu
64 | Rozšírené nastavenia
65 |
66 | Nastavenia
67 | Konfigurovať Birthday Adapter
68 |
69 | Žiadne účty
70 |
71 | Kúpiť plnú verziu!
72 | Otvoriť Google Play pre zakúpenie plnej verzie...
73 |
74 | Je potrebný Workaround pre túto verziu androidu!
75 | Znovu nezobrazovať
76 | Zavrieť
77 | Inštalovať Workaround
78 |
79 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-sv/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Födelsedagar
5 | %1$s\'s Födelsedag (%2$d)
6 | %1$s\'s Födelsedag
7 | %1$s\'s Bröllopsdag (%2$d)
8 | %1$s\'s Bröllopsdag
9 | Andra Händelser med %1$s (%2$d)
10 | Andra Händelser med %1$s
11 | %1$s: %2$s (%3$d)
12 | %1$s: %2$s
13 |
14 | Version:
15 |
16 | Huvudsaklig
17 | Preferens
18 | Kontofilter
19 | Hjälp
20 | Om
21 |
22 | Allmänt
23 | Färg
24 | Hjälp
25 | Om
26 | Synkronisera nu !
27 | Påminnelser
28 | Aktivera påminnelse 1
29 | Aktivera påminnelse 2
30 | Aktivera påminnelse 3
31 | Aktivera denna påminnelse
32 | Påminnelse 1
33 | Påminnelse 2
34 | Påminnelse 3
35 | Ange tid för denna påminnelse
36 |
37 | - Vid dagens händelse
38 | - 1 dag innan
39 | - 2 dagar innan
40 | - 3 dagar innan
41 | - 5 dagar innan
42 | - 7 dagar innan
43 | - 10 dagar innan
44 | - 14 dagar innan
45 |
46 | Anpassade etiketter
47 | Aktivera anpassade etiketter
48 | Födelsedag
49 | Födelsedag med ålder
50 | Årsdag
51 | Årsdag med ålder
52 | Andra händelser
53 | Andra händelser med ålder
54 | Anpassad
55 | Anpassad med ålder
56 | Ange %1$s för kontaktens namn.
57 | Ange %1$s för kontaktens namn och %2$d för åldern.
58 | Ange %1$s för kontaktens namn och %2$s för anpassad etikett för denna händelse.
59 | Ange %1$s för kontaktens namn, %2$s för anpassad etikett för denna händelse, och %3$d för åldern.
60 | Föredra dd/MM/yyyy format
61 | Föredra dd/MM/yyyy än MM/dd/yyyy vid tolkning av datumformat
62 | Avancerad Inställningar
63 |
64 | Inställningar
65 | Konfigurera Födelsedags Adapter
66 |
67 | Inga konton
68 |
69 | Köp fullversion!
70 | Öppna Google Play för att köpa fullversion...
71 |
72 | Visa inte igen
73 | Stäng
74 | Installera lösning
75 |
76 |
--------------------------------------------------------------------------------
/Birthday-Calendar/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 | [
](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'
--------------------------------------------------------------------------------