From ab309deb7e53b411fedacd5140a985ceff73fce8 Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Sun, 30 Oct 2016 08:35:05 +0100 Subject: [PATCH] android app work in progress - added notification --- android/FarmAlarm/app/build.gradle | 3 + .../app/src/main/AndroidManifest.xml | 18 +- .../zoblak/farmalarm/AlarmNotification.java | 136 ++++++++++++ .../AppCompatPreferenceActivity.java | 109 +++++++++ .../farmalarm/PeriodicalPingReceiver.java | 13 +- .../zoblak/farmalarm/SettingsActivity.java | 208 ++++++++++++++++++ .../res/drawable-hdpi-v11/ic_stat_alarm.png | Bin 0 -> 274 bytes .../res/drawable-hdpi-v9/ic_stat_alarm.png | Bin 0 -> 354 bytes .../drawable-hdpi/ic_action_stat_reply.png | Bin 0 -> 1480 bytes .../drawable-hdpi/ic_action_stat_share.png | Bin 0 -> 1606 bytes .../main/res/drawable-hdpi/ic_stat_alarm.png | Bin 0 -> 760 bytes .../res/drawable-mdpi-v11/ic_stat_alarm.png | Bin 0 -> 187 bytes .../res/drawable-mdpi-v9/ic_stat_alarm.png | Bin 0 -> 274 bytes .../drawable-mdpi/ic_action_stat_reply.png | Bin 0 -> 1314 bytes .../drawable-mdpi/ic_action_stat_share.png | Bin 0 -> 1341 bytes .../main/res/drawable-mdpi/ic_stat_alarm.png | Bin 0 -> 570 bytes .../res/drawable-nodpi/example_picture.png | Bin 0 -> 1885 bytes .../res/drawable-xhdpi-v11/ic_stat_alarm.png | Bin 0 -> 329 bytes .../res/drawable-xhdpi-v9/ic_stat_alarm.png | Bin 0 -> 437 bytes .../drawable-xhdpi/ic_action_stat_reply.png | Bin 0 -> 1692 bytes .../drawable-xhdpi/ic_action_stat_share.png | Bin 0 -> 1780 bytes .../main/res/drawable-xhdpi/ic_stat_alarm.png | Bin 0 -> 1101 bytes .../res/drawable-xxhdpi-v11/ic_stat_alarm.png | Bin 0 -> 501 bytes .../res/drawable-xxhdpi-v9/ic_stat_alarm.png | Bin 0 -> 616 bytes .../res/drawable-xxhdpi/ic_stat_alarm.png | Bin 0 -> 391 bytes .../main/res/drawable/ic_info_black_24dp.xml | 9 + .../drawable/ic_notifications_black_24dp.xml | 9 + .../main/res/drawable/ic_sync_black_24dp.xml | 9 + .../main/res/layout/fragment_main_screen.xml | 4 +- .../app/src/main/res/values/strings.xml | 35 +++ .../app/src/main/res/xml/pref_general.xml | 27 +++ .../app/src/main/res/xml/pref_headers.xml | 10 + 32 files changed, 584 insertions(+), 6 deletions(-) create mode 100644 android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AlarmNotification.java create mode 100644 android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AppCompatPreferenceActivity.java create mode 100644 android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/SettingsActivity.java create mode 100644 android/FarmAlarm/app/src/main/res/drawable-hdpi-v11/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-hdpi-v9/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-hdpi/ic_action_stat_reply.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-hdpi/ic_action_stat_share.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-hdpi/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-mdpi-v11/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-mdpi-v9/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_reply.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_share.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-nodpi/example_picture.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xhdpi-v11/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xhdpi-v9/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_reply.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_share.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xxhdpi-v11/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xxhdpi-v9/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable-xxhdpi/ic_stat_alarm.png create mode 100644 android/FarmAlarm/app/src/main/res/drawable/ic_info_black_24dp.xml create mode 100644 android/FarmAlarm/app/src/main/res/drawable/ic_notifications_black_24dp.xml create mode 100644 android/FarmAlarm/app/src/main/res/drawable/ic_sync_black_24dp.xml create mode 100644 android/FarmAlarm/app/src/main/res/xml/pref_general.xml create mode 100644 android/FarmAlarm/app/src/main/res/xml/pref_headers.xml diff --git a/android/FarmAlarm/app/build.gradle b/android/FarmAlarm/app/build.gradle index bb18181..f4a9233 100644 --- a/android/FarmAlarm/app/build.gradle +++ b/android/FarmAlarm/app/build.gradle @@ -10,6 +10,7 @@ android { versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + vectorDrawables.useSupportLibrary = true } buildTypes { release { @@ -26,5 +27,7 @@ dependencies { }) compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:design:24.2.1' + compile 'com.android.support:support-v4:24.2.1' + compile 'com.android.support:support-vector-drawable:24.2.1' testCompile 'junit:junit:4.12' } diff --git a/android/FarmAlarm/app/src/main/AndroidManifest.xml b/android/FarmAlarm/app/src/main/AndroidManifest.xml index 4acbece..da2a3f7 100644 --- a/android/FarmAlarm/app/src/main/AndroidManifest.xml +++ b/android/FarmAlarm/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ package="com.zoblak.farmalarm"> + + + + + + + @@ -28,7 +35,16 @@ + android:exported="true" /> + + + + \ No newline at end of file diff --git a/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AlarmNotification.java b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AlarmNotification.java new file mode 100644 index 0000000..28c8de1 --- /dev/null +++ b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AlarmNotification.java @@ -0,0 +1,136 @@ +package com.zoblak.farmalarm; + +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Build; +import android.support.v4.app.NotificationCompat; + +/** + * Helper class for showing and canceling alarm + * notifications. + *

+ * This class makes heavy use of the {@link NotificationCompat.Builder} helper + * class to create notifications in a backward-compatible way. + */ +public class AlarmNotification { + /** + * The unique identifier for this type of notification. + */ + private static final String NOTIFICATION_TAG = "Alarm"; + + /** + * Shows the notification, or updates a previously shown notification of + * this type, with the given parameters. + *

+ * TODO: Customize this method's arguments to present relevant content in + * the notification. + *

+ * TODO: Customize the contents of this method to tweak the behavior and + * presentation of alarm notifications. Make + * sure to follow the + * + * Notification design guidelines when doing so. + * + * @see #cancel(Context) + */ + public static void notify(final Context context, + final String exampleString, final int number) { + final Resources res = context.getResources(); + + // This image is used as the notification's large icon (thumbnail). + // TODO: Remove this if your notification has no relevant thumbnail. + final Bitmap picture = BitmapFactory.decodeResource(res, R.drawable.example_picture); + + + final String ticker = exampleString; + final String title = res.getString( + R.string.alarm_notification_title_template, exampleString); + final String text = res.getString( + R.string.alarm_notification_placeholder_text_template, exampleString); + + final NotificationCompat.Builder builder = new NotificationCompat.Builder(context) + + // Set appropriate defaults for the notification light, sound, + // and vibration. + .setDefaults(Notification.DEFAULT_ALL) + + // Set required fields, including the small icon, the + // notification title, and text. + .setSmallIcon(R.drawable.ic_stat_alarm) + .setContentTitle(title) + .setContentText(text) + + // All fields below this line are optional. + + // Use a default priority (recognized on devices running Android + // 4.1 or later) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + + // Provide a large icon, shown with the notification in the + // notification drawer on devices running Android 3.0 or later. + .setLargeIcon(picture) + + // Set ticker text (preview) information for this notification. + .setTicker(ticker) + + // Show a number. This is useful when stacking notifications of + // a single type. + .setNumber(number) + + // If this notification relates to a past or upcoming event, you + // should set the relevant time information using the setWhen + // method below. If this call is omitted, the notification's + // timestamp will by set to the time at which it was shown. + // TODO: Call setWhen if this notification relates to a past or + // upcoming event. The sole argument to this method should be + // the notification timestamp in milliseconds. + //.setWhen(...) + + // Set the pending intent to be initiated when the user touches + // the notification. + .setContentIntent( + PendingIntent.getActivity( + context, + 0, + new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")), + PendingIntent.FLAG_UPDATE_CURRENT)) + // Automatically dismiss the notification when it is touched. + .setAutoCancel(true); + + notify(context, builder.build()); + } + + @TargetApi(Build.VERSION_CODES.ECLAIR) + private static void notify(final Context context, final Notification notification) { + final NotificationManager nm = (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + nm.notify(NOTIFICATION_TAG, 0, notification); + } else { + nm.notify(NOTIFICATION_TAG.hashCode(), notification); + } + } + + /** + * Cancels any notifications of this type previously shown using + * {@link #notify(Context, String, int)}. + */ + @TargetApi(Build.VERSION_CODES.ECLAIR) + public static void cancel(final Context context) { + final NotificationManager nm = (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + nm.cancel(NOTIFICATION_TAG, 0); + } else { + nm.cancel(NOTIFICATION_TAG.hashCode()); + } + } +} diff --git a/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AppCompatPreferenceActivity.java b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AppCompatPreferenceActivity.java new file mode 100644 index 0000000..4d150bd --- /dev/null +++ b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/AppCompatPreferenceActivity.java @@ -0,0 +1,109 @@ +package com.zoblak.farmalarm; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.Toolbar; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls + * to be used with AppCompat. + */ +public abstract class AppCompatPreferenceActivity extends PreferenceActivity { + + private AppCompatDelegate mDelegate; + + @Override + protected void onCreate(Bundle savedInstanceState) { + getDelegate().installViewFactory(); + getDelegate().onCreate(savedInstanceState); + super.onCreate(savedInstanceState); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + getDelegate().onPostCreate(savedInstanceState); + } + + public ActionBar getSupportActionBar() { + return getDelegate().getSupportActionBar(); + } + + public void setSupportActionBar(@Nullable Toolbar toolbar) { + getDelegate().setSupportActionBar(toolbar); + } + + @Override + public MenuInflater getMenuInflater() { + return getDelegate().getMenuInflater(); + } + + @Override + public void setContentView(@LayoutRes int layoutResID) { + getDelegate().setContentView(layoutResID); + } + + @Override + public void setContentView(View view) { + getDelegate().setContentView(view); + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().setContentView(view, params); + } + + @Override + public void addContentView(View view, ViewGroup.LayoutParams params) { + getDelegate().addContentView(view, params); + } + + @Override + protected void onPostResume() { + super.onPostResume(); + getDelegate().onPostResume(); + } + + @Override + protected void onTitleChanged(CharSequence title, int color) { + super.onTitleChanged(title, color); + getDelegate().setTitle(title); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + getDelegate().onConfigurationChanged(newConfig); + } + + @Override + protected void onStop() { + super.onStop(); + getDelegate().onStop(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + getDelegate().onDestroy(); + } + + public void invalidateOptionsMenu() { + getDelegate().invalidateOptionsMenu(); + } + + private AppCompatDelegate getDelegate() { + if (mDelegate == null) { + mDelegate = AppCompatDelegate.create(this, null); + } + return mDelegate; + } +} diff --git a/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/PeriodicalPingReceiver.java b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/PeriodicalPingReceiver.java index 8cd1afe..64e82d9 100644 --- a/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/PeriodicalPingReceiver.java +++ b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/PeriodicalPingReceiver.java @@ -3,6 +3,8 @@ package com.zoblak.farmalarm; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; public class PeriodicalPingReceiver extends BroadcastReceiver { public PeriodicalPingReceiver() { @@ -10,10 +12,13 @@ public class PeriodicalPingReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - // TODO: This method is called when the BroadcastReceiver is receiving - // an Intent broadcast. - throw new UnsupportedOperationException("Not yet implemented"); - AlarmPollingService.startActionPing(context, ); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String controllers = prefs.getString("controllers", null); + Boolean isAlarmOn = prefs.getBoolean("alarm_set", false); + + if(isAlarmOn && controllers != null) { + AlarmPollingService.startActionPing(context, controllers); + } } } diff --git a/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/SettingsActivity.java b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/SettingsActivity.java new file mode 100644 index 0000000..a65d68e --- /dev/null +++ b/android/FarmAlarm/app/src/main/java/com/zoblak/farmalarm/SettingsActivity.java @@ -0,0 +1,208 @@ +package com.zoblak.farmalarm; + + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.media.Ringtone; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.support.v7.app.ActionBar; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.preference.RingtonePreference; +import android.text.TextUtils; +import android.view.MenuItem; +import android.support.v4.app.NavUtils; + +import java.util.List; + +/** + * A {@link PreferenceActivity} that presents a set of application settings. On + * handset devices, settings are presented as a single list. On tablets, + * settings are split by category, with category headers shown to the left of + * the list of settings. + *

+ * See + * Android Design: Settings for design guidelines and the Settings + * API Guide for more information on developing a Settings UI. + */ +public class SettingsActivity extends AppCompatPreferenceActivity { + /** + * A preference value change listener that updates the preference's summary + * to reflect its new value. + */ + private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object value) { + String stringValue = value.toString(); + + if (preference instanceof ListPreference) { + // For list preferences, look up the correct display value in + // the preference's 'entries' list. + ListPreference listPreference = (ListPreference) preference; + int index = listPreference.findIndexOfValue(stringValue); + + // Set the summary to reflect the new value. + preference.setSummary( + index >= 0 + ? listPreference.getEntries()[index] + : null); + + } else if (preference instanceof RingtonePreference) { + // For ringtone preferences, look up the correct display value + // using RingtoneManager. + if (TextUtils.isEmpty(stringValue)) { + // Empty values correspond to 'silent' (no ringtone). + //preference.setSummary(R.string.pref_ringtone_silent); + + } else { + Ringtone ringtone = RingtoneManager.getRingtone( + preference.getContext(), Uri.parse(stringValue)); + + if (ringtone == null) { + // Clear the summary if there was a lookup error. + preference.setSummary(null); + } else { + // Set the summary to reflect the new ringtone display + // name. + String name = ringtone.getTitle(preference.getContext()); + preference.setSummary(name); + } + } + + } else { + // For all other preferences, set the summary to the value's + // simple string representation. + preference.setSummary(stringValue); + } + return true; + } + }; + + /** + * Helper method to determine if the device has an extra-large screen. For + * example, 10" tablets are extra-large. + */ + private static boolean isXLargeTablet(Context context) { + return (context.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; + } + + /** + * Binds a preference's summary to its value. More specifically, when the + * preference's value is changed, its summary (line of text below the + * preference title) is updated to reflect the value. The summary is also + * immediately updated upon calling this method. The exact display format is + * dependent on the type of preference. + * + * @see #sBindPreferenceSummaryToValueListener + */ + private static void bindPreferenceSummaryToValue(Preference preference) { + // Set the listener to watch for value changes. + preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); + + // Trigger the listener immediately with the preference's + // current value. + sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, + PreferenceManager + .getDefaultSharedPreferences(preference.getContext()) + .getString(preference.getKey(), "")); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setupActionBar(); + } + + /** + * Set up the {@link android.app.ActionBar}, if the API is available. + */ + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + // Show the Up button in the action bar. + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + if (!super.onMenuItemSelected(featureId, item)) { + NavUtils.navigateUpFromSameTask(this); + } + return true; + } + return super.onMenuItemSelected(featureId, item); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onIsMultiPane() { + return isXLargeTablet(this); + } + + /** + * {@inheritDoc} + */ + @Override + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void onBuildHeaders(List

target) { + loadHeadersFromResource(R.xml.pref_headers, target); + } + + /** + * This method stops fragment injection in malicious applications. + * Make sure to deny any unknown fragments here. + */ + protected boolean isValidFragment(String fragmentName) { + return PreferenceFragment.class.getName().equals(fragmentName) + || GeneralPreferenceFragment.class.getName().equals(fragmentName); + } + + /** + * This fragment shows general preferences only. It is used when the + * activity is showing a two-pane settings UI. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class GeneralPreferenceFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_general); + setHasOptionsMenu(true); + + // Bind the summaries of EditText/List/Dialog/Ringtone preferences + // to their values. When their values change, their summaries are + // updated to reflect the new value, per the Android Design + // guidelines. + bindPreferenceSummaryToValue(findPreference("alarm_set")); + bindPreferenceSummaryToValue(findPreference("controllers")); + bindPreferenceSummaryToValue(findPreference("period_minutes")); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == android.R.id.home) { + startActivity(new Intent(getActivity(), SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + } + + +} diff --git a/android/FarmAlarm/app/src/main/res/drawable-hdpi-v11/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-hdpi-v11/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..40a2167c9e3a9f1fd2bbf03f81a470cbac783ed6 GIT binary patch literal 274 zcmV+t0qy>YP)Ot`ANY+S#j4B1igWJ@h(P(A*KyBks>iIJ!v#k zU1g8Pp4Cd1E?u`(Wm#^(pBr12b=UWO)pgxFbHo^Pv&^{pzOHLy7zXnUoBBmjP#ni^ zNs_!`jJZny5!TGvMhT57-R0M4!!VD2H+{uG^HqtzNKlJXEu3K zt)mwnQh=#y26>);AZg$+JK!gX0lcqf7>1;R4R%1%z+-lR<2YNeC?E&|Qo;Mb1(N0; z1o*yBDyph_1d?V^0KQ(ZD8TbPQo#ll3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy(bdJs)y>q@$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OzjUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfY zG!Lpb1-DyFaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z_OYC>m4SiD%G1R$ zq~g|_ndh}x5+#n8-}ss>D*p6=%2Rs>%MOvECubb_PIW3->U&O^bVoME%ClMI(s-6 z{SS+4UEmAb!xP`(ARqDB%0}8zeEmyyK>?=t%6ZGDFJj=A-y*n=>B_9W>@VimlrJf< zn6OtTCI84@{ay87$h5~gKZJL%hdIe2l{QU0`Xar> z=}C6Vn?HBiPcQS|D!8SI@q*{o6IUBa%n92g9r?R4MksIl zH2o4+DOE=QcU~evo#h5E)%Lu|R@^RBrMTPtqIhwPQesr3*S}+7W}VNII5LFxr=@Pc uE}xqJ&h)G8Mxg*EF9*&)*^TjxYz%sv=9vgBpYsS*wtBkyxvXg2a literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-hdpi/ic_action_stat_share.png b/android/FarmAlarm/app/src/main/res/drawable-hdpi/ic_action_stat_share.png new file mode 100644 index 0000000000000000000000000000000000000000..c329f58daae65d1f35d2959a5c2cac0a0cc7d218 GIT binary patch literal 1606 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy$<^4@$kou)$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OnfUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dPPe$Y z;WQ7bHwCv_3~=hz2RcR{6tzfE4HE*U9}p9saDg0n(of9;ruQOX!cO_L`zQkg(+*D; z$B>F!Z)TqL77dg*mi}kQ&sH|pEN=10#ExwmS&1DJbC-lVx$5Q!HqBnt%JG*ysC&iK z5SFc5!gOz`?A+0~wd;-BBDWBMRFo2ZJ?h$_;_~>Yj3X>4y?O2DIOwwA8(isoFihqz>bHwpL-Ua?$j-u~%8`2-x)myjA zC(328lpj#sz|r&cn$k1T9ZYqZvCPg3WY094ZtyGGQ_d5^Y%0aNrRnj5{>PF(-;2Ds zqTwKxyY;Erf2qn{LA%`;MQh40FzIX*+pfhZ^fyekV+Rw@{Fzrp+>UNmxy=}O)|DEvX7#2~~h>fMxd zGdZ@GD}*9tEx6A$s%am#W9>iS{`#ivg6_>K$9x(KKNz3s-lnubM26*e<=;-bS)1qG zWIWfv{eWSAme?MK?+$9KlKgt)SlVCCZ>zKB%nR_~-*IF|?5U(2raP?bomwZ;Vu5W89YpmiD`d{l1AAj`% z{~Q+gNL?|h*CziAcbxpNe3^1~;^Bv%j1NcHMdv);?&|-iG2YbY?4>g|gH#iG6gOBY z*mFETsIfV3RRmL#yxZZlM-l2qSC_UNOUj$o^n8)X1FhxtEK@GGWoONBbUC_j!s>;Z z`WG&&+0f&eee1@i=u;x6CpZPJ>dJnzYqhp^ncBGvscuehymXptON>jG9+65{@aes} zCh)+ft=bP+bMjJ6xn`tvzGJ_kcDp;@gzJRCt{rB1*%4h!wobb&^!&cj%c+sBiI(qA ze*2|+elMfU%by4CPb+1Zlc4#o+R*C3hR3zizq8KYek3?~{+ui7z@*dJ;BmZ-ftkT( Wu)zy9gZpFiw-q^Z}7tii``|jPTg9jVM zST;BM?2HL}FpJkH!fw~f2(#It&#dOnn|H+IhH8RT%7&Vf;Eg3#YtNKMbnZ=`aPSk* zLz7M}F}nUSGD%1NZitRpx2M+BOP_xH@ZkRaci)@0Z#4_fvPpuaggQNxCSFKV-L`r2 z;tfK{KY^}$SP-%3;tDZsLm5`6$iajFGjsE;Ha0dAM+-y_sI>7+>(A5LwriKx>({TN z)*RWkZJS6K#3})f6Sr>7ns)w{AxMeY5C0(D3m4y(+1E6?vYmD}7mbdK3*#;Ux^vGS zjWtI=zL|0Twdnlw%a5wGJ&uly44ly?1a=t@Kf7GN`{}=b_kNUcUO3@U$($1jAlG?& zdw-Zn>)&AX3wO<<$ui`xa!wLg6z5c za>~w~J2y7uX{Bwyee_{L4=XU(X3mt{ngEJIUtiyoZ{Do&@%INs?d>heR literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-mdpi-v11/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-mdpi-v11/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c0255d6ddf5e5e8907f98655e791aa44395c33 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjO`a}}Ar-fh6C?s3{Qv*|m4Xj< zb7W)1-Fg;=jgco!djvZsH|*f%T;C$Khq22sL3Gxv6ooXUV@*r`?`UKedCYY3NW_KK z;|=-&J=`UMS&WJf8(E_l&PWr>aQwJ}l{wu}PK5t%N)*#kXLG(fCqq{;l|TV@&nIHn kk0eZxb88DUc)`H1ob~Od$UXaZ0bRr3>FVdQ&MBb@0JEb(!2kdN literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-mdpi-v9/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-mdpi-v9/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..94c28878f4a9f05d63cfc5da0ec492a3583be1d7 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRu!3HEP{;XRGq;7h;IEGZ*dOO9NtJy%rRd!eF zyYnlpPaNp{FJRATxJ9AlifakuQQH#T_3ycyIxeLJ6(l@x*kQSIg1Q9DbE^+V$6{u@ zw&*i|Qy({DnP!S*8jD0*V&3g96ZlJE6W!Gh2KMLsNX4HQW^%v{54-u^oD z!24Q;_f0nEPqyhxKX|sA)#k0mX`@Y%_OoXnzAK{QDYPuJOXwr7MZx*~M<-rmue3-# U@TE=r573hgp00i_>zopr08$@u#sB~S literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_reply.png b/android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..9e344659eedcf226ea91afe4846a69827357435d GIT binary patch literal 1314 zcmaJ>Z%i9y7=H_)9aXTn2#BEPp-WuW`_r{RPb$~ac5UF786kkc*iL7gLui^`@T<} z-|zW7@AJ!zcX#cpvNl)&09E0TKccUQ@$N9|UuAUkcYV264aC$Qu~!{tWeB`UF%FS1 z&-TFxWRoL97hyX9OfApb{dFu|^K2@sf@PpuIzr*u(%-kvQz*1P^-S%sh&4 zNe{Z;#So0t2~%8XRE9mHUD3qoK*F6wJ03&YHA*Mop~@l}KPV`a=0P`jDSdB*aTM7| zQ3pKeEm1M18|f5fh`2Dqo*-ICq{WGmPQvYU??D^{N#LXdCtB?!LAhEffjS~*s;jrr&c4b6RSSqI{8qN2M&NC||4FPw zM~Ucv!mtTWFd`cWhM~fO zqOw8)hW#E?=fF5FNd>(DzatQIyL?2DBm<<|NxB10U#Bu_8>9W#s7oQ;KgM>; zxcXts`cTmQF6+iFn~*;Mz?2L7y-{r`zPi5Nah@*Q^|Hx)qPqS{wapYiHztE-+gIhY z%d~sCHhVR*@(0~E-O&GM9kTYMXzBh|jx^Ef1#jkX$d#rWgZ#qy5D1;C$R5h9?5$mx zf9g62wolYtx=GLceC>zjyKGaScq0^lU~Hws7(w|Zz-tR)rte6iWO=6n3h`BXoBRI}u3 z=+%SA{q-+Byt}aT!7OggU#ItEas&&a9P`S1<5PJGJlB#m7e6YfH}4OBf!gZ8>>Y14 z)9)-d_J7Alu7C?~y6Cg@*^$#HHO#s8B7&KVuhW;teyXgVx%}D1M=ICp#q%8}-<>@6 z*I|0lls{Y0EEVg!KPjL~CZb?Hb@gL>c*AKbpU=)7f5t-4i~0Sj5%0%eXD5Td;?^SrN1BKwygm({26V;*@K+Dy UPW>`jH2zxQK$rhR-}49m0a>WR{{R30 literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_share.png b/android/FarmAlarm/app/src/main/res/drawable-mdpi/ic_action_stat_share.png new file mode 100644 index 0000000000000000000000000000000000000000..056deb57b92875e9361c4ee2a769023e55aec274 GIT binary patch literal 1341 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 J+8nOk|38FXU#|cF literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-xhdpi-v11/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-xhdpi-v11/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..024b074598be5f2d691dc26d1ea769bd1e64feb2 GIT binary patch literal 329 zcmV-P0k-~$P)o} zM0w8p;VAMP2LJ$y2q9`@pPaA*dCr#RyX20%iaYXnPxgMj`8IhHkCE3pRW|67-V^7A zhBG$L;>A6hpJ=>6hGZ(;(x{J2Zkvln18cI*E;Z^? zBio7hr7lPEP@>+eIzU+v00C?c5RgMQurYw2yN8be2!H?xfB*ooAr8qi_fz`Cts~rcbK$UE|*eOm7snH_k&E1 z39rCsQ553BYY287YkS97(T=MG)&;BnXeWKkvg~p;n_aNxHU8G^Z#{PO3=Y5n^Z8u5 zt8~G{Pa<+c@cpr`mtOP?4p5e5ljphgfdGOn-w@WmetHH6Kx*qVBwQH@>7{4%0Eh6u z0$_l}2^S9!=o=H(zJ7W}4S*FHXUELo0dT5~bJxTTfB`m5Q|SYS#tCeE{q)oT!2vM9 zCP^ZFbOZSM=@~n~3mz~fVLf;NZYxgz9@c{g0PJ~gu~7ria5|lehwn4M+SgCdr~z=Q zjdR!hN`P0q0c{BDr~xpbnM@|qM;l@f>wy077ZMEE`V5a?d&mx)w;{L__J`18OHchb frBbO>sz0eO(1YL)_gIk)00000NkvXXu0mjfxy`}; literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_reply.png b/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc854ab8001c0bd06aeaafd49467d157a1a9995 GIT binary patch literal 1692 zcmaJ?X;2eq7+%5+f~Fu?ptvlE)+X6qNTA6OB;=@36EUQU7Z8#a0&F&J76>2~0v>p@ zP-f6Uibp*;?h-A>En%u6ds4ec$hWcD6i0 z`H7cDfCm5oUh?G<6+OqdOlaZNg=!Zf=4 zt=(7*062!})k##6VwFHk;2ez|!!hGVnhgLk%gjcNHVdP`G%Q_j5JIDuIv`N56GH2F z3PfQPV;TD81tgYOpj2xMvb201v@8~kF$-t`9HTU#8P7JD1ZE*LsVkt@_G1_VCm~dp z5PF?dk|F^V6C?)mI0##dM4@05mxFQAjhSsQg-$C-Fq4+l z8!0_u0PTvJG$Mx*LUg9DOTdjYvIf)CHPIIan>9ulk@63f46)6@Yv+7N8b+hL(I~S&t zf$gn*tJTv-w14c&8ROEM8S7&P+V3Q7>}N}Ydg<@QTP_i)&G$xXy0d&mzTaP3?31=n z)EVYs;1?!-?Hc07EEjclSgV5D>VFr#cv!vH6FLS$PNR_J!e%w%vdP;r=*!%Z%{fwD z)%CpaQQ!iX#gPM>n^cNBr3>eTB;I=2-jW&4^4lw_X8Y?Nv;oNgTQo|CJckX|^?k14B6KBV_weeHWMt_26Wl%F*}uy;_~1_9 zMgcu23zIhj!@{Ny4U96hBfzIO1qk#ptL|aqmf?pN ze@mUS%~@>Id;Q$t)_0?a_?$UWS+}3@SYC20#<8{27VnmNd0g(~&d*wYsNJ&>k+Qb&5*TDrq&*QkMBIDw`E=DgO}%5Ms;)ht0qJl)vHQ7n7w{IHgbbnbzauFl8XZ*7t zt%hd*hP1Ax;o6YGdk%GHKdnFC`FBlU!1MMNk3Z%bJ%fOzP~Snu7f(*(Jr3`=@3Lx@ z=|_hihTj@wj@3PF46cGxqWgo&WOpsWHxo}v7q}cq@+8McPVDF!_rBkf>Gch_yH&ew zAn;&^f6$|o7eD$_aqZfY=CJ`MB74(rb)aJPSWZgn#GdS$U3F(L=IyI5PslcDhtB4P zo|{*RNY)(Ui`yI>ZNcfgtj-SH(4oj^&cLw1Y&9_NpL6Ql<0LOV%_6no!K%dK%*qO? zJurM>!p7oP(#vXF#bb7nGCypDl$W)2^)8iK=CFhwS5&OCMT^2KjX@7uS>IjX`f+*7 ux5r-nR1e%Z`07maTQ;O!8MpT7VZae+!0!q!^tngd{}*zpQqmZoYWWXGEO(Xw literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_share.png b/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_action_stat_share.png new file mode 100644 index 0000000000000000000000000000000000000000..15549b04eff0aaf80ecd4f5989785bd8bcb1d5fa GIT binary patch literal 1780 zcmaJ?c~BE)9NmO+j!-OM6)g=xDM*ve2__~8Bmq(h#c+s%l8|g*3&}3YB0-=6K}56+ z9z{hIv#Rb$5CMW6Di5eYO&nHjma`Cxw8zhsaAXoyQ z{648jNeD@RXdx1tN~0)fo^+BYi%MtFI4sVWBnFL61L+Kq=0%~?xNI*jjZT_=$aplZ zQpJ@D{ikE$D?T|M!%!{=rlh1$QH8AY=&Y1zcw`}@g*QP;e=VXWO%=_B=g!4%PQ7Waa_(FNb88x?_#jN!q4eoa>ZtMo1*Z};#sKi3wFn#Z{;;1~ynuXUUII4mh zc}K(wSFJ~V&S+*{qs5+G=Enm4oLWs%C(6osqtC_%zTL9t1*5%A$a91D2OcOP?+apf zKpo@no-`fo8(DI$yYSp^y-!cXgm(R|8=r{jU*8W!{4$XNwijuMD+nb(Fz`jDU9+X^ z=G$yo#;7t~Hab5Y$PnAg=siHOdv4FCcWg$8{Skz#Stc_6LUBMwexaG^sQnVcbG4n! zeuY(cwo`6KeT{Qzn)x^y73tFK{a2`S>$S|Zfx;&TY*Pr1SHij7r}cq0m9pXGF@*)M zpMWMW9e%!C(*8|%=CSG+9HL_MJ-V45&%Vf^F z#*PJrl(D-HSu4yFO%sNKyzP4p>&((kR{HLPi8q0RSNuo*j;^{pcED`4K{#fCE-7KV z6R#SE%N&A$re<0NlVcLhtbJ~tY+uo|^TFWtMX2yeDGrV8=BL-qsqsmFOstp(p|@Ih2)-~-1pv5@G2TQ{_?cpp2PSV-pYNcmk)Q2nl;8A zpX|SPKQ|H~Vrol6+mHH%d=mk>^fm&g9#eo0mN6dt_f-Q|;m^Aw*=` z9dT|g9e*8{n_=?V?U0h%0bX58e_DkFtq4|m4uzk*p8n^EEYjKI+m^+Hlc#!#=e3Nk z$~DCmsXwm%ddrSD;mMQ!56<1Vl(nv8cirUMPev*Sd(k15;5**0Snu6=UFC5GAfmVc zSa*wJXV2}sXmQ84QtB90cAXdx?q3){h<3!b7J6*mzI}cDI>{ZjKjP3)+4t>e;eWNa-2df%z48>gJU&FD*_dZp_K|2;bwV zI7}HvnI8)d(I`oqj|9tMM-E5~`vQN>N zf!pR*IByi-G3#ye)(?VT<(saBq8hUrfbI3m7kk#ftEI9GwyRsA$Ia#9Vk_5F%S%+G n&8O9J;3M?C*E9F`AOthOrR959nu@X4_#YCBf`zC2WZC}!HVLh* literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-xhdpi/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6cc9fcbcfae9a3def1558a5bfeac9a5563063f GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fu!wlNIEGZ*dOIspJ2z3{crC+B z)wf5?wivfg=twzXqn7-p=O@Q00o8T2oR&K#SDvt$7PB)rZ%WXjz9}o7ulaxb=Icju zE`Q#$>H0>!Z^8Tbyxn{6`Om+)ySIMZ_V-WCQ|6wExLqoqsB%Wum8 z)kj4~U+q36{b0Mfot>YsuyEGfwfh+6UCM5;vbNrT=FAx$TU*^>(`&Pjqq-rr>v~}sD{D+ zWzz~j>EqX~iM_mX`ZPB$FR$i?YnorCJ!1wsc-89FS2G`5SXn8p=GwdTC&Rp)38zkZ zmEN-8t_(Xn`!rU^{7kzBb?GHbmbff^dgK26>yxT#YnR@> z9nE^psuisKrP;hwr%y+I`}S?i54m+n zmUeb#Ktrm#mB5B9S-w0tEKKb5vuDeuT{(M}*Vo@)8(~gRaImJba&u~O^5IR|)=)2; zJb7};v}wmS?c0|ZDF6*bAz@)nRn^wi++1JpSD!vz+7o>g?ytg~F;k{YIkIWju2r@7 zpWIwrUEc-`)S8+-RvpQysjl9yUcEY1lijt|Z{cAAJuM~DO10y;kV};d;cOYd# zLW>~ESXfyDBO)YN+1YQ4{Wu7ek&yV&)7|^=^0q(Us?(Y!!q2+y={>TNn}cJ6?1v_K zo2C6ebC3DnOAZa4`b*u`?APz#_0}I6`1d?u_y6e4oVWe9p{3=|+Nh?KPE>8w?OIS zrru-L8B3?l(zx|9vxi+lP^ykEVa=i@Z(Q-Xdkq|qE6T_`&y{t%)6 z%|GRT&$(LHZLBHp^W5gt%DPTt4S%2Sb8cN%dwZ7eglpuat9*B-u4iP_d%7!TvN&V^ z{;l!1U)rS3+<09ge9jh|Ur)KWMX!7MWBbPAPo_2(zTGN&`l5xM8v8NXrwx{;_>SB6 ze0jX`L_p8RwIUyfc)&AyP^LjWAV80dpGP)GbJy zZ^=|?@?`CKw#FZ>6CGH(Gy;P6{m2nIaX7DS#)n81f!AQ2e>R`8(&%##W%?_-V!{E3 ziFuD=4Dz-!w)gJ6<};=7jbKYu6VpxK_ZQ_n4d%NGX4%%MZ@pD`X{Ck1y~Jrwzq@ze na=yiE_E9#C5fsJ@3>@A3*R?;VJ&BUO2;zFW`njxgN@xNAeCpR0 literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable-xxhdpi-v9/ic_stat_alarm.png b/android/FarmAlarm/app/src/main/res/drawable-xxhdpi-v9/ic_stat_alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..a49f0d8e83e1f72346cc1dfe35ea46337886807d GIT binary patch literal 616 zcmV-u0+;=XP)VEXYRQ(JF7e1+YPFF36a_!N_0U^I#41`~8zf zqhW#|xRJbudw$(}Vw1^azt`)10sT!xb&s3P=Kom2m*7dQR{Ob(7r*14E6mdOZCV@) zMh|w9Jj4zmcEKgkYPGgRx-8ZeQKU%O3*V{uFr=3K{{mc=F_k@qVd zRQ=supXZnu`+_@J5(62VI|&+1F18Bt@AC~!51Xs)ES7P zXmLbHGInAh48t5=K;x2lf9wqeL2%^S0GgUil4F&9h|C=tm}3T#9kZhX9~_yO<3o11 zlm7@H#+l%9$`uL){~nl0TzNqd1VIo4K@bE%*p6$>3r!bG0}As10000Uc$3vnt*Iz!GZI|qED<`grEBv#@EPO z_%fNF^giS;Ba9npE)X1;KlA3QvPE~Zl;8SU^Y#ZnuU=vM_Ffuy|NG#V##gp|%h}I; z{=LBIH@C!!H?Ltd+v;AHsP_^gb>8Nx}0rhmGonyXCfu9mIh?VMWKv2|WSeOT-=y?5ukn!bwd`MmyI>-E!j gT9_cdW?+!N$C!O}gUPze)L9@QPgg&ebxsLQ0RN|{X8-^I literal 0 HcmV?d00001 diff --git a/android/FarmAlarm/app/src/main/res/drawable/ic_info_black_24dp.xml b/android/FarmAlarm/app/src/main/res/drawable/ic_info_black_24dp.xml new file mode 100644 index 0000000..34b8202 --- /dev/null +++ b/android/FarmAlarm/app/src/main/res/drawable/ic_info_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/FarmAlarm/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/android/FarmAlarm/app/src/main/res/drawable/ic_notifications_black_24dp.xml new file mode 100644 index 0000000..e3400cf --- /dev/null +++ b/android/FarmAlarm/app/src/main/res/drawable/ic_notifications_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/FarmAlarm/app/src/main/res/drawable/ic_sync_black_24dp.xml b/android/FarmAlarm/app/src/main/res/drawable/ic_sync_black_24dp.xml new file mode 100644 index 0000000..5a283aa --- /dev/null +++ b/android/FarmAlarm/app/src/main/res/drawable/ic_sync_black_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/android/FarmAlarm/app/src/main/res/layout/fragment_main_screen.xml b/android/FarmAlarm/app/src/main/res/layout/fragment_main_screen.xml index 6f8e232..323667d 100644 --- a/android/FarmAlarm/app/src/main/res/layout/fragment_main_screen.xml +++ b/android/FarmAlarm/app/src/main/res/layout/fragment_main_screen.xml @@ -14,6 +14,8 @@ + android:id="@+id/main_web_view" + android:partition="persist:browser" + > diff --git a/android/FarmAlarm/app/src/main/res/values/strings.xml b/android/FarmAlarm/app/src/main/res/values/strings.xml index 7a07305..b1dce71 100644 --- a/android/FarmAlarm/app/src/main/res/values/strings.xml +++ b/android/FarmAlarm/app/src/main/res/values/strings.xml @@ -1,4 +1,39 @@ Farm Alarm Settings + Podešavanje + + + + + Generalno + + + Add friends to messages + + Always + When possible + Never + + + 1 + 0 + -1 + + + Alarm: %1$s + + + You said %1$s and lorem ipsum dolor + sit amet, consectetur adipiscing elit. Etiam non enim magna. Morbi dictum, velit vel semper + venenatis, magna odio volutpat velit, at ullamcorper nulla lacus sed turpis. Pellentesque + vitae metus elit, nec tincidunt tellus. Integer sed nisl sem, ullamcorper ornare lacus. Duis + ac mauris sed massa congue volutpat. Donec sed erat sit amet turpis viverra rhoncus sit amet + nec magna. Donec lacinia ligula at libero volutpat volutpat nec nec tortor. + + + Share + Reply + + diff --git a/android/FarmAlarm/app/src/main/res/xml/pref_general.xml b/android/FarmAlarm/app/src/main/res/xml/pref_general.xml new file mode 100644 index 0000000..07c3663 --- /dev/null +++ b/android/FarmAlarm/app/src/main/res/xml/pref_general.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/android/FarmAlarm/app/src/main/res/xml/pref_headers.xml b/android/FarmAlarm/app/src/main/res/xml/pref_headers.xml new file mode 100644 index 0000000..89ff289 --- /dev/null +++ b/android/FarmAlarm/app/src/main/res/xml/pref_headers.xml @@ -0,0 +1,10 @@ + + + + +
+ +