diff --git a/OpenLP2.iml b/OpenLP2.iml new file mode 100644 index 0000000..ebb3cb4 --- /dev/null +++ b/OpenLP2.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 0000000..2d7a8c7 --- /dev/null +++ b/app/app.iml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..9618dc9 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,42 @@ +apply plugin: 'com.android.application' +project.archivesBaseName = 'OpenLP' +android { + compileSdkVersion 25 + buildToolsVersion "25" + + defaultConfig { + applicationId "org.openlp.android2" + minSdkVersion 16 + targetSdkVersion 25 + versionCode 6 + versionName "2.0" + vectorDrawables.useSupportLibrary = true + } + android { + lintOptions { + ignore 'MissingTranslation' + } + } + buildTypes { + debug { + debuggable true + } + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + testOptions { + unitTests.returnDefaultValues = true + } + + dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.android.support:appcompat-v7:25.0.0' + compile 'com.android.support:support-v4:25.0.0' + compile 'com.android.support:design:25.0.0' + } +} +dependencies { + compile files('libs/classes.jar') +} \ No newline at end of file diff --git a/app/libs/classes.jar b/app/libs/classes.jar new file mode 100644 index 0000000..791fe0b Binary files /dev/null and b/app/libs/classes.jar differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..015b793 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/tim/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e927bbc --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/org/openlp/android2/OpenLP.java b/app/src/main/java/org/openlp/android2/OpenLP.java new file mode 100644 index 0000000..e09a0cb --- /dev/null +++ b/app/src/main/java/org/openlp/android2/OpenLP.java @@ -0,0 +1,302 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.preference.PreferenceManager; +import android.support.v7.app.ActionBarActivity; +import android.app.ActionBar; +import android.app.FragmentManager; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.support.v4.widget.DrawerLayout; +import android.view.WindowManager; + +import org.openlp.android2.activities.SettingsActivity; +import org.openlp.android2.common.NavigationOptions; +import org.openlp.android2.common.OpenLPURLBuilder; +import org.openlp.android2.common.StateHolder; +import org.openlp.android2.dialogs.AlertDisplayDialog; +import org.openlp.android2.dialogs.BlankDisplayDialog; +import org.openlp.android2.fragments.AboutFragment; +import org.openlp.android2.fragments.HomeFragment; +import org.openlp.android2.fragments.LiveListFragment; +import org.openlp.android2.fragments.LiveWebFragment; +import org.openlp.android2.fragments.NavigationDrawerFragment; +import org.openlp.android2.fragments.SearchFragment; +import org.openlp.android2.fragments.ServiceListFragment; +import org.openlp.android2.fragments.StageWebFragment; + + +public class OpenLP extends ActionBarActivity + implements NavigationDrawerFragment.NavigationDrawerCallbacks { + + /** + * Fragment managing the behaviors, interactions and presentation of the navigation drawer. + */ + private NavigationDrawerFragment mNavigationDrawerFragment; + + /** + * Used to store the last screen title. For use in {@link #restoreActionBar()}. + */ + private final String LOG_TAG = OpenLP.class.getName(); + private CharSequence mTitle; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + OpenLPURLBuilder.getInstance().setContext(this); + StateHolder.getInstance().setContext(this); + + doPreferenceCheck(); + + mNavigationDrawerFragment = (NavigationDrawerFragment) + getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); + mTitle = getTitle(); + + // Set up the drawer. + mNavigationDrawerFragment.setUp( + R.id.navigation_drawer, + (DrawerLayout) findViewById(R.id.drawer_layout)); + + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + /** + * Check the preferences have been set at startup and if not redirect them to be set. + * + */ + protected void doPreferenceCheck() { + SharedPreferences sharedPrefs = PreferenceManager + .getDefaultSharedPreferences(this); + if (sharedPrefs.getString(getString(R.string.key_host), "NONE").equals("NONE") + || sharedPrefs.getString(getString(R.string.key_host), null).equals(null)) { + Log.d(LOG_TAG, + "URL preference not set. Starting preference activity..."); + Intent preferenceIntent = new Intent(this, SettingsActivity.class); + startActivity(preferenceIntent); + } + } + + /** + * Handle configuration change. + * + * @param newConfig The new Config. + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + /** + * Handle the selection of the Navigation Menu + * + * @param position Which item has been selected. + */ + @Override + public void onNavigationDrawerItemSelected(int position) { + // update the main content by replacing fragments + FragmentManager fragmentManager = getFragmentManager(); + switch (position) { + case NavigationOptions.Home: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, HomeFragment.newInstance()) + .commit(); + mTitle = getString(R.string.home); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; + case NavigationOptions.ServiceList: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, ServiceListFragment.newInstance(), "servicelist") + .commit(); + mTitle = getString(R.string.service_list); + toggerContainer(R.id.next_button, View.VISIBLE); + toggerContainer(R.id.prev_button, View.VISIBLE); + break; + case NavigationOptions.LiveList: + duelTab(); + fragmentManager.beginTransaction() + .replace(R.id.container_left, ServiceListFragment.newInstance(), "servicelist") + .commit(); + fragmentManager.beginTransaction() + .replace(R.id.container_right, LiveListFragment.newInstance(), "livelist") + .commit(); + mTitle = getString(R.string.live_list); + toggerContainer(R.id.next_button, View.VISIBLE); + toggerContainer(R.id.prev_button, View.VISIBLE); + break; + case NavigationOptions.StageView: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, StageWebFragment.newInstance()) + .commit(); + mTitle = getString(R.string.stage_view); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; + case NavigationOptions.LiveView: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, LiveWebFragment.newInstance()) + .commit(); + mTitle = getString(R.string.live_view); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; + case NavigationOptions.Search: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, SearchFragment.newInstance()) + .commit(); + mTitle = getString(R.string.action_search); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; + default: + singleTab(); + fragmentManager.beginTransaction() + .replace(R.id.container, HomeFragment.newInstance()) + .commit(); + mTitle = getString(R.string.home); + toggerContainer(R.id.next_button, View.GONE); + toggerContainer(R.id.prev_button, View.GONE); + break; + } + } + + /** + * Set Display to allow for Duel Columns + */ + protected void duelTab(){ + toggerContainer(R.id.container, View.GONE); + toggerContainer(R.id.container_right, View.VISIBLE); + toggerContainer(R.id.container_left, View.VISIBLE); + } + + /** + * Set Display to allow for Single Columns + */ + protected void singleTab(){ + toggerContainer(R.id.container_right, View.GONE); + toggerContainer(R.id.container_left, View.GONE); + toggerContainer(R.id.container, View.VISIBLE); + } + + /** + * + * @param container The container id to be accesses + * @param direction What visibility to use on the container + */ + protected void toggerContainer(int container, int direction){ + View cTainer = this.findViewById(container); + if (cTainer != null) { + cTainer.setVisibility(direction); + } + } + + public void restoreActionBar() { + try { + ActionBar actionBar = getActionBar(); + //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setTitle(mTitle); + } catch (Exception e) { + //noop + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (!mNavigationDrawerFragment.isDrawerOpen()) { + // Only show items in the action bar relevant to this screen + // if the drawer is not showing. Otherwise, let the drawer + // decide what to show in the action bar. + getMenuInflater().inflate(R.menu.open_l, menu); + restoreActionBar(); + return true; + } + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + Intent intent; + switch (item.getItemId()) { + case R.id.action_preferences: + intent = new Intent(this, SettingsActivity.class); + startActivity(intent); + return true; + case R.id.action_refresh: + if (this.mTitle.equals(getString(R.string.service_list))) { + refreshServiceFragment(R.id.container); + } else if (this.mTitle.equals(getString(R.string.live_list)) ) { + refreshServiceFragment(R.id.container_left); + refreshLiveFragment(R.id.container_right); + } + return true; + case R.id.action_blank: + new BlankDisplayDialog().show(getFragmentManager(), "BlankDialog"); + return true; + case R.id.action_alert: + new AlertDisplayDialog().show(getFragmentManager(), "AlertDialog"); + return true; + case R.id.action_about: + getFragmentManager().beginTransaction().replace(R.id.container, + new AboutFragment()).commit(); + default: + return super.onOptionsItemSelected(item); + } + } + public void refreshLiveFragment(int container){ + LiveListFragment fragment = (LiveListFragment) + getFragmentManager().findFragmentById(container); + if (fragment != null) { + fragment.refreshDisplay(); + } + } + public void refreshServiceFragment(int container){ + ServiceListFragment fragment = (ServiceListFragment) + getFragmentManager().findFragmentById(container); + if (fragment != null) { + fragment.refreshDisplay(); + } + } + + public void next(View view) { + ServiceListFragment serviceListFragment = (ServiceListFragment) getFragmentManager().findFragmentByTag("servicelist"); + serviceListFragment.next(); + } + + public void previous(View view) { + ServiceListFragment serviceListFragment = (ServiceListFragment) getFragmentManager().findFragmentByTag("servicelist"); + serviceListFragment.previous(); + } +} diff --git a/app/src/main/java/org/openlp/android2/activities/SettingsActivity.java b/app/src/main/java/org/openlp/android2/activities/SettingsActivity.java new file mode 100644 index 0000000..427c03d --- /dev/null +++ b/app/src/main/java/org/openlp/android2/activities/SettingsActivity.java @@ -0,0 +1,219 @@ +package org.openlp.android2.activities; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Build; +import android.os.Bundle; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; + +import org.openlp.android2.R; + +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 PreferenceActivity { + /** + * Determines whether to always show the simplified settings UI, where + * settings are presented in a single list. When false, settings are shown + * as a master/detail two-pane view on tablets. When true, a single pane is + * shown on tablets. + */ + private static final boolean ALWAYS_SIMPLE_PREFS = false; + + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + setupSimplePreferencesScreen(); + } + + /** + * Shows the simplified settings UI if the device configuration if the + * device configuration dictates that a simplified, single-pane UI should be + * shown. + */ + private void setupSimplePreferencesScreen() { + if (!isSimplePreferences(this)) { + return; + } + + // In the simplified UI, fragments are not used at all and we instead + // use the older PreferenceActivity APIs. + + // Add 'general' preferences. + addPreferencesFromResource(R.xml.pref_general); + + // Add 'notifications' preferences, and a corresponding header. + PreferenceCategory fakeHeader = new PreferenceCategory(this); + fakeHeader.setTitle(R.string.connection_configuration); + getPreferenceScreen().addPreference(fakeHeader); + addPreferencesFromResource(R.xml.pref_notification); + + // 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("key_text_size")); + bindPreferenceSummaryToValue(findPreference("key_connection_timeout")); + bindPreferenceSummaryToValue(findPreference("key_host")); + bindPreferenceSummaryToValue(findPreference("key_port")); + bindPreferenceSummaryToValue(findPreference("key_userid")); + bindPreferenceSummaryToValue(findPreference("key_password")); + + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onIsMultiPane() { + return isXLargeTablet(this) && !isSimplePreferences(this); + } + + /** + * 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; + } + + /** + * Determines whether the simplified settings UI should be shown. This is + * true if this is forced via {@link #ALWAYS_SIMPLE_PREFS}, or the device + * doesn't have newer APIs like {@link PreferenceFragment}, or the device + * doesn't have an extra-large screen. In these cases, a single-pane + * "simplified" settings UI should be shown. + */ + private static boolean isSimplePreferences(Context context) { + return ALWAYS_SIMPLE_PREFS + || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB + || !isXLargeTablet(context); + } + + /** + * {@inheritDoc} + */ + @Override + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void onBuildHeaders(List

target) { + if (!isSimplePreferences(this)) { + loadHeadersFromResource(R.xml.pref_headers, target); + } + } + + @Override + protected boolean isValidFragment (String fragmentName) { + return true; + } + + /** + * 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 { + // For all other preferences, set the summary to the value's + // simple string representation. + preference.setSummary(stringValue); + } + return true; + } + }; + + /** + * 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(), "")); + } + + /** + * 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); + + // 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("key_text_size")); + } + + } + + /** + * This fragment shows notification preferences only. It is used when the + * activity is showing a two-pane settings UI. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static class NotificationPreferenceFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_notification); + + // 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("key_connection_timeout")); + bindPreferenceSummaryToValue(findPreference("key_host")); + bindPreferenceSummaryToValue(findPreference("key_port")); + bindPreferenceSummaryToValue(findPreference("key_userid")); + bindPreferenceSummaryToValue(findPreference("key_password")); + } + } +} diff --git a/app/src/main/java/org/openlp/android2/api/Api.java b/app/src/main/java/org/openlp/android2/api/Api.java new file mode 100644 index 0000000..1dc9fd1 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/api/Api.java @@ -0,0 +1,125 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.api; + +/** + *

Routes:

+ *

+ *

+ *

+ * ``/``
+ * Go to the web interface.
+ *
+ * ``/files/{filename}``
+ *
+ * ``/api/poll``
+ * {"results": {"type": "controller"}}
+ * Or, if there were no results, False::
+ * {"results": False}
+ *
+ * ``/api/display/{hide|show}``
+ * Blank or unblank the screen.
+ *
+ * ``/api/alert``
+ * {"request": {"text": ""}}
+ * ``/api/controller/{live|preview}/{action}``
+ * ``next``
+ * Load the next slide.
+ *
+ * ``previous``
+ * Load the previous slide.
+ *
+ * ``set``
+ * Set a specific slide. Requires an id return in a JSON-encoded dict like
+ * this::
+ *
+ * {"request": {"id": 1}}
+ *
+ * ``first``
+ * Load the first slide.
+ *
+ * ``last``
+ * Load the last slide.
+ *
+ * ``text``
+ * Fetches the text of the current song. The output is a JSON-encoded
+ * dict which looks like this::
+ *
+ * {"result": {"slides": ["...", "..."]}}
+ *
+ * ``/api/service/{action}``
+ * Perform ``{action}`` on the service manager (e.g. go live). Data is
+ * passed as a json-encoded ``data`` parameter. Valid actions are:
+ *
+ * ``next``
+ * Load the next item in the service.
+ *
+ * ``previous``
+ *
+ * ``set``
+ * Set a specific item in the service. Requires an id returned in a
+ * JSON-encoded dict like this::
+ *
+ * {"request": {"id": 1}}
+ *
+ * ``list``
+ * Request a list of items in the service. Returns a list of items in the
+ * current service in a JSON-encoded dict like this::
+ *
+ * {"results": {"items": [{...}, {...}]}}
+ * """
+ * 
+ */ + +public interface Api { + + public final String LIVE_BASE = "/api/controller/live/"; + public final String LIVE_NEXT = "/api/controller/live/next"; + public final String LIVE_PREVIOUS = "/api/controller/live/previous"; + public final String LIVE_TEXT = "/api/controller/live/text"; + public final String LIVE_SET = "/api/controller/live/set?data="; + public final String STAGE_VIEW = "/stage"; + public final String LIVE_VIEW = "/main"; + + public final String SERVICE_LIST = "/api/service/list"; + public final String SERVICE_SET = "/api/service/set?data="; + + public final String DISPLAY_SHOW = "/api/display/show"; + public final String DISPLAY_BLANK = "/api/display/blank"; + public final String DISPLAY_THEME = "/api/display/theme"; + public final String DISPLAY_DESKTOP = "/api/display/desktop"; + public final String POLL_STATUS = "/api/poll"; + + public final String ALERT = "/api/alert?data="; + + public final String SEARCHABLE_PLUGINS = "/api/plugin/search"; + /** + * This is a special string that uses the String.format() method. See + * {@link String#format(String, Object...)} + */ + public final String SEARCH_PLUGIN_FORMATTED = "/api/%s/search?data="; + /** + * Match intent extra key with regex since multiple plugins can be inserted + */ + public final String SEARCH_PLUGIN_ADD = "/api/%s/add?data="; + /** + * Match intent extra key with regex since multiple plugins can be inserted + */ + public final String SEARCH_PLUGIN_LIVE = "/api/%s/live?data="; +} diff --git a/app/src/main/java/org/openlp/android2/common/JsonHelpers.java b/app/src/main/java/org/openlp/android2/common/JsonHelpers.java new file mode 100644 index 0000000..bcc6a2f --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/JsonHelpers.java @@ -0,0 +1,58 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; +import org.json.JSONStringer; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +public class JsonHelpers { + + private static String LOG_TAG = JsonHelpers.class.getName(); + + public static String createRequestJSON(String key, String value) throws JSONHandlerException { + try { + String responseJSON; + JSONObject jo = new JSONObject(); + jo.put(key, value); + responseJSON = new JSONStringer().object().key("request").value(jo) + .endObject().toString(); + responseJSON = URLEncoder.encode(responseJSON, "UTF-8"); + Log.d(LOG_TAG, String.format("createRequestJSON: %s : %s : %s", key, value, responseJSON)); + return responseJSON; + } catch (JSONException e) { + throw new JSONHandlerException(e); + } catch (UnsupportedEncodingException e) { + throw new JSONHandlerException(e); + } + } + + public static class JSONHandlerException extends Exception { + private static final long serialVersionUID = -6772307308404816615L; + + public JSONHandlerException(Throwable throwable) { + super(throwable); + } + } +} diff --git a/app/src/main/java/org/openlp/android2/common/NavigationOptions.java b/app/src/main/java/org/openlp/android2/common/NavigationOptions.java new file mode 100644 index 0000000..cd8b159 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/NavigationOptions.java @@ -0,0 +1,28 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + +public class NavigationOptions{ + public final static int Home = 0; + public final static int ServiceList = 1; + public final static int LiveList = 2; + public final static int StageView = 3; + public final static int LiveView = 4; + public final static int Search = 5; +} diff --git a/app/src/main/java/org/openlp/android2/common/OpenLPDialog.java b/app/src/main/java/org/openlp/android2/common/OpenLPDialog.java new file mode 100644 index 0000000..a19b8cd --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/OpenLPDialog.java @@ -0,0 +1,124 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + +import android.app.DialogFragment; +import android.content.Context; +import android.util.Log; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.ClientError; +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.NetworkError; +import com.android.volley.NoConnectionError; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.ServerError; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; + +import org.openlp.android2.R; +import org.openlp.android2.api.Api; + +import java.util.HashMap; +import java.util.Map; + + +abstract public class OpenLPDialog extends DialogFragment { + + private final String LOG_TAG = OpenLPDialog.class.getName(); + + protected Context context; + private String urlcalled; + + protected void populateDisplay(String responseString) { + } + + protected void processUpdate(String responseString) { + } + + protected void errorDisplay(String responseString) { + } + + protected void triggerTextRequest(final String urlbase) { + String url = RequestQueueService.getInstance(this.context).getUrl(urlbase); + urlcalled = urlbase; + + StringRequest request = new StringRequest( + Request.Method.GET, + url, + listener, + errorListener) { + + @Override + public Map getHeaders() throws AuthFailureError { + return createBasicAuthHeader("user", "passwd"); + } + }; + //Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. + // Volley does retry for you if you have specified the policy. + request.setRetryPolicy(new DefaultRetryPolicy( + RequestQueueService.getInstance(this.context).getConnectionTimeout(), + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); + request.setTag("OpenLP"); + RequestQueueService.getInstance(this.context).addToRequestQueue(request); + } + + Map createBasicAuthHeader(String username, String password) { + Map headers = new HashMap(); + headers.put("Authorization", RequestQueueService.getInstance(context).getBasicAuth()); + + return headers; + } + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(String response) { + if (urlcalled.equals(Api.POLL_STATUS)) { + populateDisplay(response); + } else { + processUpdate(response); + } + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.d(LOG_TAG, String.format("Call response error = %s", error.toString())); + if (error instanceof NetworkError) { + } else if (error instanceof ClientError) { + } else if (error instanceof ServerError) { + } else if (error instanceof AuthFailureError) { + Toast.makeText(context, R.string.httpreturn_unauthorised, + Toast.LENGTH_LONG).show(); + } else if (error instanceof ParseError) { + } else if (error instanceof NoConnectionError) { + } else if (error instanceof TimeoutError) { + } + Toast.makeText(context, R.string.unable, + Toast.LENGTH_LONG).show(); + errorDisplay(error.toString()); + + } + }; +} diff --git a/app/src/main/java/org/openlp/android2/common/OpenLPFragment.java b/app/src/main/java/org/openlp/android2/common/OpenLPFragment.java new file mode 100644 index 0000000..9fd3578 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/OpenLPFragment.java @@ -0,0 +1,138 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + + +import android.app.ListFragment; +import android.content.Context; +import android.util.Log; +import android.view.View; + +import android.widget.ListView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.ClientError; +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.NetworkError; +import com.android.volley.NoConnectionError; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.ServerError; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; + +import java.util.HashMap; +import java.util.Map; + +abstract public class OpenLPFragment extends ListFragment{ + + private String LOG_TAG = OpenLPFragment.class.getName(); + public Context context; + protected String urlcalled; + protected String updateUrl; + + abstract public void itemClicked(int position); + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + super.onListItemClick(l, v, position, id); + itemClicked(position); + } + + protected void refreshDisplay(){} + protected void populateDisplay(String responseString, boolean inError) {} + protected void processUpdate(String responseString, boolean inError) {} + + protected void triggerTextRequest(final String urlbase) { + String url = RequestQueueService.getInstance(this.context).getUrl(urlbase); + updateUrl = urlbase; + + StringRequest request = new StringRequest( + Request.Method.GET, + url, + listener, + errorListener) { + + @Override + public Map getHeaders() throws AuthFailureError { + return createBasicAuthHeader("user", "passwd"); + } + }; + //Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. + // Volley does retry for you if you have specified the policy. + request.setRetryPolicy(new DefaultRetryPolicy( + RequestQueueService.getInstance(this.context).getConnectionTimeout(), + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); + request.setTag("OpenLP"); + RequestQueueService.getInstance(this.context).addToRequestQueue(request); + } + + Map createBasicAuthHeader(String username, String password) { + Map headers = new HashMap(); + headers.put("Authorization", RequestQueueService.getInstance(context).getBasicAuth()); + + return headers; + } + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(String response) { + if (urlcalled.equals(updateUrl)) { + populateDisplay(response, true); + } else { + processUpdate(response, true); + } + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.d(LOG_TAG, String.format("Call response error = %s", error.toString())); + if (error instanceof NetworkError) { + } else if (error instanceof ClientError) { + } else if (error instanceof ServerError) { + } else if (error instanceof AuthFailureError) { + Toast.makeText(context, R.string.httpreturn_unauthorised, + Toast.LENGTH_LONG).show(); + } else if (error instanceof ParseError) { + } else if (error instanceof NoConnectionError) { + } else if (error instanceof TimeoutError) { + } + Toast.makeText(context, R.string.unable, + Toast.LENGTH_LONG).show(); + + } + }; + + public void next() { + Log.d(LOG_TAG, "Going to next slide"); + triggerTextRequest(Api.LIVE_NEXT); + } + + public void previous() { + Log.d(LOG_TAG, "Going to previous slide"); + triggerTextRequest(Api.LIVE_PREVIOUS); + } +} diff --git a/app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java b/app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java new file mode 100644 index 0000000..8e9867e --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/OpenLPURLBuilder.java @@ -0,0 +1,86 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.util.Base64; +import android.util.Log; + +import org.openlp.android2.R; + +public class OpenLPURLBuilder { + private final String LOG_TAG = OpenLPURLBuilder.class.getName(); + private Context context; + + private static OpenLPURLBuilder ourInstance = new OpenLPURLBuilder(); + + public static OpenLPURLBuilder getInstance() { + return ourInstance; + } + + private OpenLPURLBuilder() { + } + + public void setContext(Context context) { + this.context = context; + } + + public int getConnectionTimeout() { + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + + int connectionTimeout = context.getResources().getInteger( + R.integer.connectionTimeoutDefaultValue); + + if (sharedPrefs.getBoolean(context.getString(R.string.key_enable_custom_timeout), false)) { + Log.d(LOG_TAG, "Overriding Connection and Socket timeouts"); + + connectionTimeout = Integer.parseInt(sharedPrefs.getString(context.getString(R.string.key_connection_timeout), + String.valueOf(context.getResources().getInteger(R.integer.connectionTimeoutDefaultValue)) + )); + } + return connectionTimeout; + } + + public String getBasicAuth(){ + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + String userid = sharedPrefs.getString(context.getString(R.string.key_userid), "openlp"); + String password = sharedPrefs.getString(context.getString(R.string.key_password), "password"); + + Log.d(LOG_TAG, "Credentials set to " + userid + " : " + password); + + String credentials = userid + ":" + password; + return "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.DEFAULT); + } + + public String getBaseUrl(){ + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + + String host = sharedPrefs.getString(context.getString(R.string.key_host), + context.getString(R.string.host_default_value)); + String port = sharedPrefs.getString(context.getString(R.string.key_port), "4316"); + + return String.format("http://%s:%s", host, port); + + } +} diff --git a/app/src/main/java/org/openlp/android2/common/RequestQueueService.java b/app/src/main/java/org/openlp/android2/common/RequestQueueService.java new file mode 100644 index 0000000..8285389 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/RequestQueueService.java @@ -0,0 +1,99 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.common; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Base64; +import android.util.LruCache; + +import com.android.volley.AuthFailureError; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.toolbox.HurlStack; +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.Volley; + +import java.util.HashMap; +import java.util.Map; + +public class RequestQueueService { + + private static RequestQueueService mInstance; + private RequestQueue mRequestQueue; + private ImageLoader mImageLoader; + private static Context mCtx; + + private RequestQueueService(Context context) { + mCtx = context; + mRequestQueue = getRequestQueue(); + + mImageLoader = new ImageLoader(mRequestQueue, + new ImageLoader.ImageCache() { + private final LruCache cache = new LruCache(20); + + @Override + public Bitmap getBitmap(String url) { + return cache.get(url); + } + + @Override + public void putBitmap(String url, Bitmap bitmap) { + cache.put(url, bitmap); + } + }); + } + + public static synchronized RequestQueueService getInstance(Context context) { + if (mInstance == null) { + mInstance = new RequestQueueService(context); + } + return mInstance; + } + + public RequestQueue getRequestQueue() { + if (mRequestQueue == null) { + // getApplicationContext() is key, it keeps you from leaking the + // Activity or BroadcastReceiver if someone passes one in. + mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); + } + return mRequestQueue; + } + + public String getUrl(String url){ + return String.format("%s%s", OpenLPURLBuilder.getInstance().getBaseUrl(), url ); + } + + public String getBasicAuth(){ + return OpenLPURLBuilder.getInstance().getBasicAuth(); + } + + public int getConnectionTimeout(){ + return OpenLPURLBuilder.getInstance().getConnectionTimeout(); + } + + public void addToRequestQueue(Request req) { + getRequestQueue().add(req); + } + + public ImageLoader getImageLoader() { + return mImageLoader; + } +} + diff --git a/app/src/main/java/org/openlp/android2/common/StateHolder.java b/app/src/main/java/org/openlp/android2/common/StateHolder.java new file mode 100644 index 0000000..ab26175 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/common/StateHolder.java @@ -0,0 +1,22 @@ +package org.openlp.android2.common; + +import android.content.Context; + +/** + * Created by tim on 14/08/16. + */ +public class StateHolder { + private static StateHolder ourInstance = new StateHolder(); + private static Context context; + + public static StateHolder getInstance() { + return ourInstance; + } + + private StateHolder() { + } + + public void setContext(Context context) { + this.context = context; + } +} diff --git a/app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java b/app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java new file mode 100644 index 0000000..52f824e --- /dev/null +++ b/app/src/main/java/org/openlp/android2/dialogs/AlertDisplayDialog.java @@ -0,0 +1,105 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; +import org.openlp.android2.common.OpenLPDialog; + +public class AlertDisplayDialog extends OpenLPDialog { + private final String LOG_TAG = AlertDisplayDialog.class.getName(); + public AlertDialog dialog; + + /** + * The system calls this only when creating the layout in a dialog. + */ + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // The only reason you might override this method when using onCreateView() is + // to modify any dialog characteristics. For example, the dialog includes a + // title by default, but your custom layout might not need it. So here you can + // remove the dialog title, but you must call the superclass to get the Dialog. + + context = getActivity(); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + // Get the layout inflater + LayoutInflater inflater = getActivity().getLayoutInflater(); + + // Inflate and set the layout for the dialog + // Pass null as the parent view because its going in the dialog layout + View view = inflater.inflate(R.layout.alert_display_dialog, null); + builder.setView(view); + + builder.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + AlertDisplayDialog.this.getDialog().cancel(); + } + }); + builder.setNegativeButton(R.string.process, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog1, int id) { + EditText text = (EditText) dialog.findViewById(R.id.alertText); + requestAlert(text.getText().toString()); + } + }); + dialog = builder.create(); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialogI) { + Button btnNegative = dialog.getButton(Dialog.BUTTON_NEGATIVE); + btnNegative.setTextSize(20); + Button btnPositive = dialog.getButton(Dialog.BUTTON_POSITIVE); + btnPositive.setTextSize(20); + } + }); + return dialog; + } + + @Override + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + } + + public void processUpdate(String response) { + Toast.makeText(context, "Alert Requested", Toast.LENGTH_SHORT).show(); + } + + public void requestAlert(String text) { + try { + String request = JsonHelpers.createRequestJSON("text", text); + triggerTextRequest(String.format("%s%s", Api.ALERT, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.ALERT, text)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java b/app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java new file mode 100644 index 0000000..93fca1b --- /dev/null +++ b/app/src/main/java/org/openlp/android2/dialogs/BlankDisplayDialog.java @@ -0,0 +1,159 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.RadioButton; + +import org.json.JSONException; +import org.json.JSONObject; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; + +import org.openlp.android2.common.OpenLPDialog; + +public class BlankDisplayDialog extends OpenLPDialog { + private final String LOG_TAG = BlankDisplayDialog.class.getName(); + + public AlertDialog dialog; + RadioButton desktop; + RadioButton screen; + RadioButton theme; + RadioButton reset; + + /** + * The system calls this only when creating the layout in a dialog. + */ + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // The only reason you might override this method when using onCreateView() is + // to modify any dialog characteristics. For example, the dialog includes a + // title by default, but your custom layout might not need it. So here you can + // remove the dialog title, but you must call the superclass to get the Dialog. + + context = getActivity(); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + // Get the layout inflater + LayoutInflater inflater = getActivity().getLayoutInflater(); + + // Inflate and set the layout for the dialog + // Pass null as the parent view because its going in the dialog layout + View view = inflater.inflate(R.layout.blank_display_dialog, null); + builder.setView(view); + + reset = (RadioButton) view.findViewById(R.id.buttonReset); + reset.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + triggerTextRequest(Api.DISPLAY_SHOW); + } + }); + screen = (RadioButton) view.findViewById(R.id.buttonScreen); + screen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + triggerTextRequest(Api.DISPLAY_BLANK); + } + }); + theme = (RadioButton) view.findViewById(R.id.buttonTheme); + theme.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + triggerTextRequest(Api.DISPLAY_THEME); + } + }); + desktop = (RadioButton) view.findViewById(R.id.buttonDesktop); + desktop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + triggerTextRequest(Api.DISPLAY_DESKTOP); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + BlankDisplayDialog.this.getDialog().cancel(); + } + }); + dialog = builder.create(); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialogI) { + Button btnNegative = dialog.getButton(Dialog.BUTTON_NEGATIVE); + btnNegative.setTextSize(20); + } + }); + return dialog; + } + + @Override + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.POLL_STATUS); + Log.d(LOG_TAG, "Resumed..."); + } + + public void processUpdate(String response) { + triggerTextRequest(Api.POLL_STATUS); + } + + public void populateDisplay(String json) { + Log.d(LOG_TAG, "populateDisplay : " + json ); + reset_display(); + try { + JSONObject item = new JSONObject(json).getJSONObject("results"); + if (item.getString("theme").equals("true")){ + theme.setChecked(true); + } else { + if (item.getString("blank").equals("true")){ + screen.setChecked(true); + } else{ + if (item.getString("display").equals("true")){ + desktop.setChecked(true); + } else{ + reset.setChecked(true); + } + } + } + } catch (JSONException e) { + Log.e(LOG_TAG, "Exception with Json = " + json); + e.printStackTrace(); + } + } + + public void errorDisplay(String responseString) { + Log.d(LOG_TAG, String.format("URL Error text %s", responseString)); + reset_display(); + } + + private void reset_display(){ + screen.setChecked(false); + theme.setChecked(false); + desktop.setChecked(false); + reset.setChecked(false); + } +} diff --git a/app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java b/app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java new file mode 100644 index 0000000..35d71fe --- /dev/null +++ b/app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java @@ -0,0 +1,135 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2015 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.RadioButton; +import android.widget.Toast; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; +import org.openlp.android2.common.OpenLPDialog; + +public class SearchSelectionDialog extends OpenLPDialog { + private final String LOG_TAG = SearchSelectionDialog.class.getName(); + public AlertDialog dialog; + private String key; + private String plugin; + private String text; + private RadioButton sendLive; + private RadioButton addToService; + + /** + * The system calls this only when creating the layout in a dialog. + */ + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // The only reason you might override this method when using onCreateView() is + // to modify any dialog characteristics. For example, the dialog includes a + // title by default, but your custom layout might not need it. So here you can + // remove the dialog title, but you must call the superclass to get the Dialog. + + key = getArguments().getString("key"); + plugin = getArguments().getString("plugin"); + text = getArguments().getString("text"); + + Log.d(LOG_TAG, String.format("onCreateDialog %s : %s : %s", key, plugin, text)); + + context = getActivity(); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + // Get the layout inflater + LayoutInflater inflater = getActivity().getLayoutInflater(); + + // Inflate and set the layout for the dialog + // Pass null as the parent view because its going in the dialog layout + View view = inflater.inflate(R.layout.search_action_dialog, null); + builder.setView(view); + + sendLive = (RadioButton) view.findViewById(R.id.buttonLive); + sendLive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createLive(); + SearchSelectionDialog.this.getDialog().cancel(); + } + }); + + addToService = (RadioButton) view.findViewById(R.id.buttonService); + addToService.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createService(); + SearchSelectionDialog.this.getDialog().cancel(); + } + }); + + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + SearchSelectionDialog.this.getDialog().cancel(); + } + }); + dialog = builder.create(); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialogI) { + Button btnNegative = dialog.getButton(Dialog.BUTTON_NEGATIVE); + btnNegative.setTextSize(20); + } + }); + return dialog; + } + + @Override + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + } + + public void createLive() { + try { + String request = JsonHelpers.createRequestJSON("id", text); + String url = String.format(Api.SEARCH_PLUGIN_LIVE, plugin.toLowerCase()); + triggerTextRequest(String.format("%s%s", url, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_LIVE, request)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); + } + } + + public void createService() { + try { + String request = JsonHelpers.createRequestJSON("id", text); + String url = String.format(Api.SEARCH_PLUGIN_ADD, plugin.toLowerCase()); + triggerTextRequest(String.format("%s%s", url, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_ADD, text)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/app/src/main/java/org/openlp/android2/fragments/AboutFragment.java b/app/src/main/java/org/openlp/android2/fragments/AboutFragment.java new file mode 100644 index 0000000..06c674a --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/AboutFragment.java @@ -0,0 +1,70 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import org.openlp.android2.R; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class AboutFragment extends Fragment { + + public AboutFragment() { + // Empty constructor required for fragment subclasses + } + + public static AboutFragment newInstance() { + return new AboutFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_about, container, false); + + String date = new SimpleDateFormat("yyyy").format(new Date()); + + StringBuilder html = new StringBuilder(); + html.append(getString(R.string.about_display_1)); + html.append("\n"); + html.append(getString(R.string.about_display_2)); + html.append(" http://www.openlp.org"); + html.append("\n\n\n"); + html.append(getString(R.string.about_display_4)); + html.append(" © 2004-").append(date).append(" Raoul Snyman\n"); + html.append(getString(R.string.about_display_5)); + html.append(" © 2004-").append(date); + html.append("\nTim Bentley, Tomas Groth, Johan Mynhardt"); + html.append("\n\n\n"); + html.append(getString(R.string.about_display_6)); + html.append("\n"); + html.append(getString(R.string.about_display_7)); + html.append("\n"); + html.append(getString(R.string.about_display_8)); + + ((TextView) view.findViewById(R.id.about_text)).setText(html); + + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/openlp/android2/fragments/HomeFragment.java b/app/src/main/java/org/openlp/android2/fragments/HomeFragment.java new file mode 100644 index 0000000..cc51a62 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/HomeFragment.java @@ -0,0 +1,58 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import org.openlp.android2.R; + + +public class HomeFragment extends Fragment { + private View displayView; + + public HomeFragment() { + // Empty constructor required for fragment subclasses + } + + public static HomeFragment newInstance() { + return new HomeFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + displayView = inflater.inflate(R.layout.fragment_home, container, false); + displayIcon(); + return displayView; + } + + @Override + public void onResume() { + super.onResume(); + displayIcon(); + } + + private void displayIcon(){ + int imageId = getResources().getIdentifier("openlp_splash_screen","drawable", getActivity().getPackageName()); + ((ImageView) displayView.findViewById(R.id.home_image)).setImageResource(imageId); + } +} diff --git a/app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java b/app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java new file mode 100644 index 0000000..48403c8 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/LiveListFragment.java @@ -0,0 +1,189 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.text.Html; +import android.util.Log; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; +import android.widget.SimpleAdapter; +import android.widget.TextView; +import android.widget.Toast; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; +import org.openlp.android2.common.OpenLPFragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class LiveListFragment extends OpenLPFragment { + + private int selected = 0; + + private String LOG_TAG = LiveListFragment.class.getName(); + + public static LiveListFragment newInstance() { + return new LiveListFragment(); + } + + /** + * Mandatory empty constructor for the fragment manager to instantiate the + * fragment (e.g. upon screen orientation changes). + */ + public LiveListFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + context = getActivity(); + urlcalled = Api.LIVE_TEXT; + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override + public void populateDisplay(String json, boolean notInError) { + Log.i(LOG_TAG, "populate_display - entry"); + List> aList = new ArrayList>(); + selected = 0; + + if (notInError) { + + try { + JSONArray items = new JSONObject(json).getJSONObject("results").getJSONArray("slides"); + for (int i = 0; i < items.length(); ++i) { + JSONObject item = items.getJSONObject(i); + + HashMap hm = new HashMap(); + hm.put("tag", item.getString("tag")); + if (item.getString("selected").equals("true")) { + selected = i; + } + hm.put("liveListNormal", Html.fromHtml(item.getString("html")).toString()); + aList.add(hm); + } + } catch (JSONException e) { + Log.e(LOG_TAG,json); + e.printStackTrace(); + } + } + + // Keys used in Hashmap + String[] from = {"line", "tag", "liveListNormal", "liveListSelected"}; + + // Ids of views in live_list_fragment + int[] to = {R.id.line, R.id.tag, R.id.liveListNormal, R.id.liveListSelected}; + + SharedPreferences prefs = context.getSharedPreferences( + context.getString(R.string.key_shared_preferences), + Context.MODE_PRIVATE); + + final int size = Integer.parseInt(prefs.getString( + context.getString(R.string.key_text_size), + String.valueOf(context.getResources().getInteger( + R.integer.textSizeDefaultValue)))); + + // Instantiating an adapter to store each items + ListAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), aList, + R.layout.fragment_livelist, from, to) { + public View getView(int position, View convertView, ViewGroup parent) { + View view = super.getView(position, convertView, parent); + // TextView line = (TextView) view.findViewById(R.id.line); + TextView text1 = (TextView) view.findViewById(R.id.tag); + if (text1 != null) { + text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, size); + } + TextView text2 = (TextView) view.findViewById(R.id.liveListNormal); + if (text2 != null) { + text2.setTextSize(TypedValue.COMPLEX_UNIT_SP, size); + if (selected == position) { + text2.setTypeface(null, Typeface.BOLD_ITALIC); + // line.setBackgroundColor(0xffffff); + } else { + text2.setTypeface(null, Typeface.NORMAL); + // line.setBackgroundColor(0xffffff); + } + } + return view; + + } + }; + setListAdapter(adapter); + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + Boolean autoscroll = + sharedPrefs.getBoolean(context.getString(R.string.key_auto_scroll), false); + + if (autoscroll){ + getListView().setSelection(selected - 1); + } + Log.i(LOG_TAG, "populate_display - exit"); + } + + @Override + public void refreshDisplay() { + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.LIVE_TEXT); + } + + @Override + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.LIVE_TEXT); + Log.d(LOG_TAG, "Resumed..."); + } + + public void processUpdate(String response, boolean inError) { + triggerTextRequest(Api.LIVE_TEXT); + + } + + public void itemClicked(int position) { + try { + String request = JsonHelpers.createRequestJSON("id", Integer.toString(position)); + triggerTextRequest(String.format("%s%s", Api.LIVE_SET, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), position(%s)", + Api.LIVE_SET, position)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(getActivity().getBaseContext(), "Request Failed", Toast.LENGTH_SHORT).show(); + } + } + +} diff --git a/app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java b/app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java new file mode 100644 index 0000000..53ced25 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/LiveWebFragment.java @@ -0,0 +1,33 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import org.openlp.android2.api.Api; + +public class LiveWebFragment extends WebFragment { + public LiveWebFragment() { + super(); + curURL = Api.LIVE_VIEW; + } + + public static LiveWebFragment newInstance() { + return new LiveWebFragment(); + } +} + diff --git a/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java new file mode 100644 index 0000000..f6039bc --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java @@ -0,0 +1,344 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +import android.support.v7.app.ActionBarActivity; +import android.app.Activity; +import android.support.v7.app.ActionBar; +import android.support.v4.app.Fragment; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +import org.openlp.android2.R; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Fragment used for managing interactions for and presentation of a navigation drawer. + * See the + * design guidelines for a complete explanation of the behaviors implemented here. + */ +public class NavigationDrawerFragment extends Fragment { + + /** + * Remember the position of the selected item. + */ + private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; + + /** + * Per the design guidelines, you should show the drawer on launch until the user manually + * expands it. This shared preference tracks this. + */ + private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; + + /** + * A pointer to the current callbacks instance (the Activity). + */ + private NavigationDrawerCallbacks mCallbacks; + + /** + * Helper component that ties the action bar to the navigation drawer. + */ + private ActionBarDrawerToggle mDrawerToggle; + + private DrawerLayout mDrawerLayout; + private ListView mDrawerListView; + private View mFragmentContainerView; + + private int mCurrentSelectedPosition = 0; + private boolean mFromSavedInstanceState; + private boolean mUserLearnedDrawer; + + public NavigationDrawerFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Read in the flag indicating whether or not the user has demonstrated awareness of the + // drawer. See PREF_USER_LEARNED_DRAWER for details. + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); + mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); + + if (savedInstanceState != null) { + mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); + mFromSavedInstanceState = true; + } + + // Select either the default item (0) or the last selected item. + selectItem(mCurrentSelectedPosition); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + // Indicate that this fragment would like to influence the set of actions in the action bar. + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mDrawerListView = (ListView) inflater.inflate( + R.layout.fragment_navigation_drawer, container, false); + mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + selectItem(position); + } + }); + + List> aList = new ArrayList>(); + HashMap hm = new HashMap(); + hm.put("title", getString(R.string.home)); + hm.put("icon", Integer.toString(R.drawable.ic_home_black)); + aList.add(hm); + + HashMap hm1 = new HashMap(); + hm1.put("title", getString(R.string.service_list)); + hm1.put("icon", Integer.toString(R.drawable.ic_view_list_black)); + aList.add(hm1); + + HashMap hm2 = new HashMap(); + hm2.put("title", getString(R.string.live_list)); + hm2.put("icon", Integer.toString(R.drawable.ic_list_black)); + aList.add(hm2); + + HashMap hm3 = new HashMap(); + hm3.put("title", getString(R.string.stage_view)); + hm3.put("icon", Integer.toString(R.drawable.ic_live_tv_black)); + aList.add(hm3); + + HashMap hm4 = new HashMap(); + hm4.put("title", getString(R.string.live_view)); + hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); + aList.add(hm4); + + HashMap hm5 = new HashMap(); + hm5.put("title", getString(R.string.action_search)); + hm5.put("icon", Integer.toString(R.drawable.ic_search_black)); + aList.add(hm5); + + // Keys used in Hashmap + String[] from = {"icon", "title"}; + + // Ids of views in service_list_fragment + int[] to = {R.id.drawer_icon, R.id.drawer_text}; + + ListAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), aList, + R.layout.fragment_navigation_drawer_list, from, to); + + mDrawerListView.setAdapter(adapter); + mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); + return mDrawerListView; + } + + public boolean isDrawerOpen() { + return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); + } + + /** + * Users of this fragment must call this method to set up the navigation drawer interactions. + * + * @param fragmentId The android:id of this fragment in its activity's layout. + * @param drawerLayout The DrawerLayout containing this fragment's UI. + */ + public void setUp(int fragmentId, DrawerLayout drawerLayout) { + mFragmentContainerView = getActivity().findViewById(fragmentId); + mDrawerLayout = drawerLayout; + + // set a custom shadow that overlays the main content when the drawer opens + mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); + // set up the drawer's list view with items and click listener + + ActionBar actionBar = getActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + // OpenLP Blue + actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#4d7bd8"))); + getActionBar().setDisplayHomeAsUpEnabled(true); // also required + if (Build.VERSION.SDK_INT >= 18) { + getActionBar().setHomeAsUpIndicator( + getResources().getDrawable(R.drawable.ic_menu_white)); + } + + // ActionBarDrawerToggle ties together the the proper interactions + // between the navigation drawer and the action bar app icon. + mDrawerToggle = new ActionBarDrawerToggle( + getActivity(), /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_menu_white, /* nav drawer image to replace 'Up' caret */ + R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ + R.string.navigation_drawer_close /* "close drawer" description for accessibility */ + ) { + @Override + public void onDrawerClosed(View drawerView) { + super.onDrawerClosed(drawerView); + if (!isAdded()) { + return; + } + + getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + if (!isAdded()) { + return; + } + + if (!mUserLearnedDrawer) { + // The user manually opened the drawer; store this flag to prevent auto-showing + // the navigation drawer automatically in the future. + mUserLearnedDrawer = true; + SharedPreferences sp = PreferenceManager + .getDefaultSharedPreferences(getActivity()); + sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); + } + + getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + }; + + // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, + // per the navigation drawer design guidelines. + if (!mUserLearnedDrawer && !mFromSavedInstanceState) { + mDrawerLayout.openDrawer(mFragmentContainerView); + } + + // Defer code dependent on restoration of previous instance state. + mDrawerLayout.post(new Runnable() { + @Override + public void run() { + mDrawerToggle.syncState(); + } + }); + + mDrawerLayout.setDrawerListener(mDrawerToggle); + } + + private void selectItem(int position) { + mCurrentSelectedPosition = position; + if (mDrawerListView != null) { + mDrawerListView.setItemChecked(position, true); + } + if (mDrawerLayout != null) { + mDrawerLayout.closeDrawer(mFragmentContainerView); + } + if (mCallbacks != null) { + mCallbacks.onNavigationDrawerItemSelected(position); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mCallbacks = (NavigationDrawerCallbacks) activity; + } catch (ClassCastException e) { + throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mCallbacks = null; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Forward the new configuration the drawer toggle component. + mDrawerToggle.onConfigurationChanged(newConfig); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + // If the drawer is open, show the global app actions in the action bar. See also + // showGlobalContextActionBar, which controls the top-left area of the action bar. + if (mDrawerLayout != null && isDrawerOpen()) { + inflater.inflate(R.menu.global, menu); + showGlobalContextActionBar(); + } + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * Per the navigation drawer design guidelines, updates the action bar to show the global app + * 'context', rather than just what's in the current screen. + */ + private void showGlobalContextActionBar() { + ActionBar actionBar = getActionBar(); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setTitle(R.string.app_name); + } + + private ActionBar getActionBar() { + return ((ActionBarActivity) getActivity()).getSupportActionBar(); + } + + /** + * Callbacks interface that all activities using this fragment must implement. + */ + public static interface NavigationDrawerCallbacks { + /** + * Called when an item in the navigation drawer is selected. + */ + void onNavigationDrawerItemSelected(int position); + } +} diff --git a/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java new file mode 100644 index 0000000..f652d57 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/SearchFragment.java @@ -0,0 +1,357 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.app.DialogFragment; +import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.ClientError; +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.NetworkError; +import com.android.volley.NoConnectionError; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.ServerError; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.openlp.android2.R; +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; + +import org.openlp.android2.common.RequestQueueService; +import org.openlp.android2.dialogs.SearchSelectionDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + + */ +public class SearchFragment extends Fragment { + + private final String LOG_TAG = SearchFragment.class.getName(); + private Spinner spinner; + public Context context; + protected String calledURL; + protected String updateUrl; + protected String searchedPlugin; + protected Map pluginMap = new HashMap(); + + public SearchFragment() { + Log.d(LOG_TAG, "Constructor"); + } + + public static SearchFragment newInstance() { + SearchFragment fragment = new SearchFragment(); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + context = getActivity(); + updateUrl = Api.SEARCHABLE_PLUGINS; + View view = inflater.inflate(R.layout.fragment_search, container, false); + spinner = (Spinner) view.findViewById(R.id.search_spinner); + triggerTextRequest(Api.SEARCHABLE_PLUGINS); + + // Add search listener to text field + final EditText editText = (EditText) view.findViewById(R.id.search_text); + editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView tv, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + // Now close the keyboard as finished with + View view = getActivity().getCurrentFocus(); + if (view != null) { + InputMethodManager imm = + (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + searchedPlugin = pluginMap.get(spinner.getSelectedItem().toString()); + requestSearch(tv.getText().toString()); + return true; + } + return false; + } + }); + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + /** + * Called when a new item is selected (in the Spinner) + */ + public void onItemSelected(AdapterView parent, View view, + int pos, long id) { + editText.setText(""); + } + public void onNothingSelected(AdapterView parent) { + // Do nothing, just another required interface callback + } + + }); + return view; + } + + @Override + public void onDetach() { + super.onDetach(); + } + + private void populatePluginList(String response, Boolean notInError) { + Log.i(LOG_TAG, "populatePluginList - entry"); + List categories = new ArrayList(); + pluginMap.clear(); + + if (notInError) { + try { + JSONArray items = new JSONObject(response).getJSONObject("results").getJSONArray("items"); + for (int i = 0; i < items.length(); ++i) { + JSONArray item = items.getJSONArray(i); + categories.add(item.get(1).toString()); + pluginMap.put(item.get(1).toString(), item.get(0).toString()); + } + } catch (JSONException e) { + Log.e(LOG_TAG, response); + e.printStackTrace(); + } + ArrayAdapter LTRadapter = new ArrayAdapter(getActivity(), + R.layout.spinner_list_item, categories); + LTRadapter.setDropDownViewResource(R.layout.spinner_dropdown_item); + spinner.setAdapter(LTRadapter); + Log.i(LOG_TAG, "populatePluginList - exit"); + } + } + + protected void triggerTextRequest(String urlbase) { + Log.d(LOG_TAG, "Trigger Request for url " + urlbase); + String url = RequestQueueService.getInstance(this.context).getUrl(urlbase); + calledURL = urlbase; + + StringRequest request = new StringRequest( + Request.Method.GET, + url, + listener, + errorListener) { + + @Override + public Map getHeaders() throws AuthFailureError { + return createBasicAuthHeader("user", "passwd"); + } + }; + //Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. + // Volley does retry for you if you have specified the policy. + request.setRetryPolicy(new DefaultRetryPolicy( + RequestQueueService.getInstance(this.context).getConnectionTimeout(), + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); + request.setTag("OpenLP"); + RequestQueueService.getInstance(this.context).addToRequestQueue(request); + } + + Map createBasicAuthHeader(String username, String password) { + Map headers = new HashMap(); + headers.put("Authorization", RequestQueueService.getInstance(context).getBasicAuth()); + + return headers; + } + + Response.Listener listener = new Response.Listener() { + @Override + public void onResponse(String response) { + if (calledURL.equals(updateUrl)) { + populatePluginList(response, true); + } else { + populateListDisplay(response, true); + } + } + }; + + Response.ErrorListener errorListener = new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Log.d(LOG_TAG, String.format("Call response error = %s", error.toString())); + if (error instanceof NetworkError) { + } else if (error instanceof ClientError) { + } else if (error instanceof ServerError) { + } else if (error instanceof AuthFailureError) { + Toast.makeText(context, R.string.httpreturn_unauthorised, + Toast.LENGTH_LONG).show(); + } else if (error instanceof ParseError) { + } else if (error instanceof NoConnectionError) { + } else if (error instanceof TimeoutError) { + } + Toast.makeText(context, R.string.unable, + Toast.LENGTH_LONG).show(); + + } + }; + + public void requestSearch(String text) { + updateUrl = Api.SEARCH_PLUGIN_FORMATTED; + try { + String request = JsonHelpers.createRequestJSON("text", text); + String url = String.format(Api.SEARCH_PLUGIN_FORMATTED, searchedPlugin); + triggerTextRequest(String.format("%s%s", url, request)); + Log.d(LOG_TAG, String.format("Search request. apiBase(%s), text(%s)", searchedPlugin, text)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Search Request Failed", Toast.LENGTH_SHORT).show(); + } + } + + public void populateListDisplay(String json, boolean notInError) { + Log.i(LOG_TAG, "populateListDisplay - entry"); + ListView list = (ListView) getActivity().findViewById(R.id.searchListView); + final ArrayList listitems = new ArrayList(); + if (notInError) { + try { + JSONArray items = new JSONObject(json).getJSONObject("results").getJSONArray("items"); + Log.d(LOG_TAG,items.toString()); + for (int i = 0; i < items.length(); ++i) { + JSONArray item = items.getJSONArray(i); + listitems.add(item); + } + } catch (JSONException e) { + Log.e(LOG_TAG, json); + e.printStackTrace(); + } + } + + final StableArrayAdapter adapter = new StableArrayAdapter(context, + android.R.layout.simple_list_item_1, + listitems); + + + list.setAdapter(adapter); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, final View view, + int position, long id) { + final JSONArray item = (JSONArray) parent.getItemAtPosition(position); + //Toast.makeText(context, "Item Pressed " + String.valueOf(position) + item, + // Toast.LENGTH_SHORT).show(); + String it = ""; + try { + Log.i(LOG_TAG, "list.setOnItemClickListener" + item); + it = item.get(0).toString(); + } catch (JSONException e) { + e.printStackTrace(); + } + Bundle args = new Bundle(); + args.putString("plugin", searchedPlugin); + args.putString("text", it); + args.putString("key", Long.toString(id)); + DialogFragment SSDFragment = new SearchSelectionDialog(); + SSDFragment.setArguments(args); + SSDFragment.show(getFragmentManager(), "TAG"); + + } + }); + Log.i(LOG_TAG, "populateListDisplay - exit"); + } + + public class StableArrayAdapter extends ArrayAdapter { + + HashMap mIdMap = new HashMap(); + + public StableArrayAdapter(Context context, + int textViewResourceId, + List objects) { + super(context, textViewResourceId, objects); + + for (int i = 0; i < objects.size(); ++i) { + JSONArray item = objects.get(i); + try { + mIdMap.put(item.get(1).toString(), i); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // Get the data item for this position + //User user = getItem(position); + String item = null; + try { + item = getItem(position).get(1).toString(); + } catch (JSONException e) { + e.printStackTrace(); + } + // Check if an existing view is being reused, otherwise inflate the view + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.search_result_row, + parent, false); + } + // Lookup view for data population + TextView tvItem = (TextView) convertView.findViewById(R.id.searchListRow); + // Populate the data into the template view using the data object + tvItem.setText(item); + // Return the completed view to render on screen + return convertView; + } + + @Override + public long getItemId(int position) { + String item = null; + try { + item = getItem(position).get(1).toString(); + } catch (JSONException e) { + e.printStackTrace(); + } + return mIdMap.get(item); + } + + @Override + public boolean hasStableIds() { + return true; + } + + } + +} diff --git a/app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java b/app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java new file mode 100644 index 0000000..1be47b0 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/ServiceListFragment.java @@ -0,0 +1,201 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.graphics.Typeface; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.util.Log; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.*; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.openlp.android2.OpenLP; +import org.openlp.android2.R; + +import org.openlp.android2.api.Api; +import org.openlp.android2.common.JsonHelpers; +import org.openlp.android2.common.OpenLPFragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + + +public class ServiceListFragment extends OpenLPFragment { + + private final String LOG_TAG = ServiceListFragment.class.getName(); + private int selected = 0; + + public ServiceListFragment() { + } + + public static ServiceListFragment newInstance() { + ServiceListFragment fragment = new ServiceListFragment(); + return fragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + context = getActivity(); + urlcalled = Api.SERVICE_LIST; + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + } + + @Override + public void onDetach() { + super.onDetach(); + } + + @Override + public void refreshDisplay() { + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.SERVICE_LIST); + } + + @Override + public void onResume() { + super.onResume(); + Log.d(LOG_TAG, "Resuming..."); + triggerTextRequest(Api.SERVICE_LIST); + Log.d(LOG_TAG, "Resumed..."); + } + + public void processUpdate(String response, boolean inError) { + triggerTextRequest(Api.SERVICE_LIST); + ((OpenLP) getActivity()).refreshLiveFragment(R.id.container_right); + } + + @Override + public void populateDisplay(String json, boolean notInError) { + Log.i(LOG_TAG, "populate_display - entry"); + List> aList = new ArrayList>(); + + if (notInError) { + try { + JSONArray items = new JSONObject(json).getJSONObject("results").getJSONArray("items"); + + for (int i = 0; i < items.length(); ++i) { + JSONObject item = items.getJSONObject(i); + + HashMap hm = new HashMap(); + if (item.getString("plugin").equals("songs")) { + hm.put("icon", Integer.toString(R.drawable.ic_my_library_music)); + } else if (item.getString("plugin").equals("bibles")) { + hm.put("icon", Integer.toString(R.drawable.ic_my_library_books)); + } else if (item.getString("plugin").equals("media")) { + hm.put("icon", Integer.toString(R.drawable.ic_local_movies)); + } else if (item.getString("plugin").equals("presentations")) { + hm.put("icon", Integer.toString(R.drawable.ic_video_collection)); + } else if (item.getString("plugin").equals("images")) { + hm.put("icon", Integer.toString(R.drawable.ic_image)); + } else { + hm.put("icon", Integer.toString(R.drawable.ic_edit)); + } + if (item.getString("selected").equals("true")) { + selected = i; + } + hm.put("title", item.getString("title")); + aList.add(hm); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + // Keys used in Hashmap + String[] from = {"line","icon", "title"}; + + // Ids of views in service_list_fragment + int[] to = {R.id.servicelistLine, R.id.icon, R.id.serviceListText}; + + SharedPreferences prefs = context.getSharedPreferences( + context.getString(R.string.key_shared_preferences), + Context.MODE_PRIVATE); + + final int size = Integer.parseInt(prefs.getString( + context.getString(R.string.key_text_size), + String.valueOf(context.getResources().getInteger( + R.integer.textSizeDefaultValue)))); + + // Instantiating an adapter to store each items + ListAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), aList, + R.layout.fragment_service_list, from, to) { + + public View getView(int position, View convertView, ViewGroup parent) { + + View view = super.getView(position, convertView, parent); + + TextView line = (TextView) view.findViewById(R.id.servicelistLine); + TextView text1 = (TextView) view.findViewById(R.id.serviceListText); + text1.setTextSize(TypedValue.COMPLEX_UNIT_SP, size); + if (selected == position) { + text1.setTextColor(Color.parseColor("#000000")); + text1.setTypeface(null, Typeface.BOLD_ITALIC); + line.setBackgroundColor(0xffffff); + } else{ + text1.setTypeface(null, Typeface.NORMAL); + line.setBackgroundColor(0xffffff); + } + return view; + } + }; + + setListAdapter(adapter); + + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); + Boolean autoscroll = + sharedPrefs.getBoolean(context.getString(R.string.key_auto_scroll), false); + + if (autoscroll){ + getListView().setSelection(selected - 1); + } + Log.i(LOG_TAG, "populate_display - exit"); + } + + public void itemClicked(int position) { + try { + String request = JsonHelpers.createRequestJSON("id", Integer.toString(position)); + triggerTextRequest(String.format("%s%s", Api.SERVICE_SET, request)); + Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), position(%s)", + Api.SERVICE_SET, position)); + } catch (JsonHelpers.JSONHandlerException e) { + e.printStackTrace(); + Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java b/app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java new file mode 100644 index 0000000..64a0ef9 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/StageWebFragment.java @@ -0,0 +1,34 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import org.openlp.android2.api.Api; + +public class StageWebFragment extends WebFragment { + + public StageWebFragment(){ + super(); + curURL = Api.STAGE_VIEW; + } + + + public static StageWebFragment newInstance() { + return new StageWebFragment(); + } +} diff --git a/app/src/main/java/org/openlp/android2/fragments/WebFragment.java b/app/src/main/java/org/openlp/android2/fragments/WebFragment.java new file mode 100644 index 0000000..20400d9 --- /dev/null +++ b/app/src/main/java/org/openlp/android2/fragments/WebFragment.java @@ -0,0 +1,78 @@ +/****************************************************************************** + * OpenLP - Open Source Lyrics Projection * + * --------------------------------------------------------------------------- * + * Copyright (c) 2011-2016 OpenLP Android Developers * + * --------------------------------------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the Free * + * Software Foundation; version 2 of the License. * + * * + * This program is distributed in the hope that it will be useful, but WITHOUT * + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * + * more details. * + * * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., 59 * + * Temple Place, Suite 330, Boston, MA 02111-1307 USA * + *******************************************************************************/ +package org.openlp.android2.fragments; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import org.openlp.android2.R; +import org.openlp.android2.common.OpenLPURLBuilder; + +public class WebFragment extends Fragment { + + protected String curURL; + private WebView webview; + + public WebFragment(){ + super(); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_web, container, false); + + if (curURL != null) { + webview = (WebView) view.findViewById(R.id.webPage); + webview.getSettings().setJavaScriptEnabled(true); + webview.getSettings().setBuiltInZoomControls(true); + webview.getSettings().setLoadWithOverviewMode(true); + webview.getSettings().setUseWideViewPort(true); + webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); + webview.setScrollbarFadingEnabled(true); + webview.setWebViewClient(new webClient()); + webview.loadUrl(String.format("%s%s", OpenLPURLBuilder.getInstance().getBaseUrl(), curURL)); + } + return view; + } + + @Override + public void onDestroyView() { + if (webview != null) { + webview.destroy(); + } + super.onDestroyView(); + } + + public class webClient extends WebViewClient { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + return false; + } + } +} diff --git a/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png new file mode 100644 index 0000000..236bff5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_add_alert_white.png b/app/src/main/res/drawable-hdpi/ic_add_alert_white.png new file mode 100644 index 0000000..f169577 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_add_alert_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_apps_white.png b/app/src/main/res/drawable-hdpi/ic_apps_white.png new file mode 100644 index 0000000..1ab7303 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_apps_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_back_white.png b/app/src/main/res/drawable-hdpi/ic_arrow_back_white.png new file mode 100644 index 0000000..de7a9d2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_back_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_forward_white.png b/app/src/main/res/drawable-hdpi/ic_arrow_forward_white.png new file mode 100644 index 0000000..3d58929 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_forward_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png new file mode 100644 index 0000000..c59f601 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_edit.png b/app/src/main/res/drawable-hdpi/ic_edit.png new file mode 100644 index 0000000..6ed4351 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_home_black.png b/app/src/main/res/drawable-hdpi/ic_home_black.png new file mode 100644 index 0000000..2e86cc2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_home_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_image.png b/app/src/main/res/drawable-hdpi/ic_image.png new file mode 100644 index 0000000..b69c520 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_image.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100755 index 0000000..23d8940 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_list_black.png b/app/src/main/res/drawable-hdpi/ic_list_black.png new file mode 100644 index 0000000..d94b45a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_list_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_live_tv_black.png b/app/src/main/res/drawable-hdpi/ic_live_tv_black.png new file mode 100644 index 0000000..efb4fcb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_live_tv_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_local_movies.png b/app/src/main/res/drawable-hdpi/ic_local_movies.png new file mode 100644 index 0000000..d368c95 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_local_movies.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_menu_white.png b/app/src/main/res/drawable-hdpi/ic_menu_white.png new file mode 100644 index 0000000..775fa19 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_menu_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_my_library_books.png b/app/src/main/res/drawable-hdpi/ic_my_library_books.png new file mode 100644 index 0000000..0d4aa30 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_my_library_books.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_my_library_music.png b/app/src/main/res/drawable-hdpi/ic_my_library_music.png new file mode 100644 index 0000000..e583029 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_my_library_music.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_ondemand_video_black.png b/app/src/main/res/drawable-hdpi/ic_ondemand_video_black.png new file mode 100644 index 0000000..604868f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_ondemand_video_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_refresh_white.png b/app/src/main/res/drawable-hdpi/ic_refresh_white.png new file mode 100644 index 0000000..1692d8a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_refresh_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_search_black.png b/app/src/main/res/drawable-hdpi/ic_search_black.png new file mode 100644 index 0000000..3ae490e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_search_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_search_white.png b/app/src/main/res/drawable-hdpi/ic_search_white.png new file mode 100644 index 0000000..abbb989 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_search_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_settings_display_white.png b/app/src/main/res/drawable-hdpi/ic_settings_display_white.png new file mode 100644 index 0000000..6e2f3e7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_display_white.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_video_collection.png b/app/src/main/res/drawable-hdpi/ic_video_collection.png new file mode 100644 index 0000000..e63c808 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_video_collection.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_view_list_black.png b/app/src/main/res/drawable-hdpi/ic_view_list_black.png new file mode 100644 index 0000000..ae702bb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_view_list_black.png differ diff --git a/app/src/main/res/drawable-hdpi/openlp_splash_screen.png b/app/src/main/res/drawable-hdpi/openlp_splash_screen.png new file mode 100644 index 0000000..d413fdd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/openlp_splash_screen.png differ diff --git a/app/src/main/res/drawable-mdpi/drawer_shadow.9.png b/app/src/main/res/drawable-mdpi/drawer_shadow.9.png new file mode 100644 index 0000000..ffe3a28 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_add_alert_white.png b/app/src/main/res/drawable-mdpi/ic_add_alert_white.png new file mode 100644 index 0000000..b142c69 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_add_alert_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_apps_white.png b/app/src/main/res/drawable-mdpi/ic_apps_white.png new file mode 100644 index 0000000..95e1f49 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_apps_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_back_white.png b/app/src/main/res/drawable-mdpi/ic_arrow_back_white.png new file mode 100644 index 0000000..43026ba Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_back_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_forward_white.png b/app/src/main/res/drawable-mdpi/ic_arrow_forward_white.png new file mode 100644 index 0000000..8e09de1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_forward_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_drawer.png b/app/src/main/res/drawable-mdpi/ic_drawer.png new file mode 100644 index 0000000..1ed2c56 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_edit.png b/app/src/main/res/drawable-mdpi/ic_edit.png new file mode 100644 index 0000000..4c95bd5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_home_black.png b/app/src/main/res/drawable-mdpi/ic_home_black.png new file mode 100644 index 0000000..dcdcfc0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_home_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_image.png b/app/src/main/res/drawable-mdpi/ic_image.png new file mode 100644 index 0000000..56cba79 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_image.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100755 index 0000000..71a9c7e Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_list_black.png b/app/src/main/res/drawable-mdpi/ic_list_black.png new file mode 100644 index 0000000..ceb9fc2 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_list_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_live_tv_black.png b/app/src/main/res/drawable-mdpi/ic_live_tv_black.png new file mode 100644 index 0000000..0827fb9 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_live_tv_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_local_movies.png b/app/src/main/res/drawable-mdpi/ic_local_movies.png new file mode 100644 index 0000000..8002dfb Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_local_movies.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_menu_white.png b/app/src/main/res/drawable-mdpi/ic_menu_white.png new file mode 100644 index 0000000..bdeecd4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_menu_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_my_library_books.png b/app/src/main/res/drawable-mdpi/ic_my_library_books.png new file mode 100644 index 0000000..771ad19 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_my_library_books.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_my_library_music.png b/app/src/main/res/drawable-mdpi/ic_my_library_music.png new file mode 100644 index 0000000..5af747a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_my_library_music.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_ondemand_video_black.png b/app/src/main/res/drawable-mdpi/ic_ondemand_video_black.png new file mode 100644 index 0000000..5a9aa2a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_ondemand_video_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_refresh_white.png b/app/src/main/res/drawable-mdpi/ic_refresh_white.png new file mode 100644 index 0000000..1989184 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_refresh_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_search_black.png b/app/src/main/res/drawable-mdpi/ic_search_black.png new file mode 100644 index 0000000..6381902 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_search_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_search_white.png b/app/src/main/res/drawable-mdpi/ic_search_white.png new file mode 100644 index 0000000..bfc3e39 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_search_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_settings_display_white.png b/app/src/main/res/drawable-mdpi/ic_settings_display_white.png new file mode 100644 index 0000000..4b06e65 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_display_white.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_video_collection.png b/app/src/main/res/drawable-mdpi/ic_video_collection.png new file mode 100644 index 0000000..b878309 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_video_collection.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_view_list_black.png b/app/src/main/res/drawable-mdpi/ic_view_list_black.png new file mode 100644 index 0000000..c15537a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_view_list_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png new file mode 100644 index 0000000..fabe9d9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_add_alert_white.png b/app/src/main/res/drawable-xhdpi/ic_add_alert_white.png new file mode 100644 index 0000000..34d898b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_add_alert_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_apps_white.png b/app/src/main/res/drawable-xhdpi/ic_apps_white.png new file mode 100644 index 0000000..5fee17f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_apps_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_back_white.png b/app/src/main/res/drawable-xhdpi/ic_arrow_back_white.png new file mode 100644 index 0000000..d3bf066 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_back_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_forward_white.png b/app/src/main/res/drawable-xhdpi/ic_arrow_forward_white.png new file mode 100644 index 0000000..0152b5a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_forward_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png new file mode 100644 index 0000000..a5fa74d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_edit.png b/app/src/main/res/drawable-xhdpi/ic_edit.png new file mode 100644 index 0000000..0c0fd76 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_home_black.png b/app/src/main/res/drawable-xhdpi/ic_home_black.png new file mode 100644 index 0000000..04e2b26 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_home_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_image.png b/app/src/main/res/drawable-xhdpi/ic_image.png new file mode 100644 index 0000000..c5cb5e9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_image.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100755 index 0000000..15f7d0b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_list_black.png b/app/src/main/res/drawable-xhdpi/ic_list_black.png new file mode 100644 index 0000000..e1f03b4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_list_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_live_tv_black.png b/app/src/main/res/drawable-xhdpi/ic_live_tv_black.png new file mode 100644 index 0000000..67fc4e6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_live_tv_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_local_movies.png b/app/src/main/res/drawable-xhdpi/ic_local_movies.png new file mode 100644 index 0000000..25f3f5d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_local_movies.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_white.png b/app/src/main/res/drawable-xhdpi/ic_menu_white.png new file mode 100644 index 0000000..238cfd6 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_menu_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_my_library_books.png b/app/src/main/res/drawable-xhdpi/ic_my_library_books.png new file mode 100644 index 0000000..3ba5a0e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_my_library_books.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_my_library_music.png b/app/src/main/res/drawable-xhdpi/ic_my_library_music.png new file mode 100644 index 0000000..e812dd7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_my_library_music.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_ondemand_video_black.png b/app/src/main/res/drawable-xhdpi/ic_ondemand_video_black.png new file mode 100644 index 0000000..8bb06ea Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_ondemand_video_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_refresh_white.png b/app/src/main/res/drawable-xhdpi/ic_refresh_white.png new file mode 100644 index 0000000..f5beca2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_refresh_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_search_black.png b/app/src/main/res/drawable-xhdpi/ic_search_black.png new file mode 100644 index 0000000..21be572 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_search_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_search_white.png b/app/src/main/res/drawable-xhdpi/ic_search_white.png new file mode 100644 index 0000000..dd5adfc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_search_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_display_white.png b/app/src/main/res/drawable-xhdpi/ic_settings_display_white.png new file mode 100644 index 0000000..6fe1bad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_display_white.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_video_collection.png b/app/src/main/res/drawable-xhdpi/ic_video_collection.png new file mode 100644 index 0000000..755ddb4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_video_collection.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_view_list_black.png b/app/src/main/res/drawable-xhdpi/ic_view_list_black.png new file mode 100644 index 0000000..7c1506b Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_view_list_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png new file mode 100644 index 0000000..b91e9d7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_alert_white.png b/app/src/main/res/drawable-xxhdpi/ic_add_alert_white.png new file mode 100644 index 0000000..5ae57c4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_add_alert_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_apps_white.png b/app/src/main/res/drawable-xxhdpi/ic_apps_white.png new file mode 100644 index 0000000..5bf8616 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_apps_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white.png new file mode 100644 index 0000000..65c39a0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_white.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_white.png new file mode 100644 index 0000000..0a0ddcb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png new file mode 100644 index 0000000..9c4685d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_drawer.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_edit.png b/app/src/main/res/drawable-xxhdpi/ic_edit.png new file mode 100644 index 0000000..1361eed Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_edit.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_home_black.png b/app/src/main/res/drawable-xxhdpi/ic_home_black.png new file mode 100644 index 0000000..d66401c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_home_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_image.png b/app/src/main/res/drawable-xxhdpi/ic_image.png new file mode 100644 index 0000000..cb187a9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_image.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 0000000..ccf9910 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_list_black.png b/app/src/main/res/drawable-xxhdpi/ic_list_black.png new file mode 100644 index 0000000..7ddaf52 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_list_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_live_tv_black.png b/app/src/main/res/drawable-xxhdpi/ic_live_tv_black.png new file mode 100644 index 0000000..dc8aa6d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_live_tv_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_movies.png b/app/src/main/res/drawable-xxhdpi/ic_local_movies.png new file mode 100644 index 0000000..002c7b4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_local_movies.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_play.png b/app/src/main/res/drawable-xxhdpi/ic_local_play.png new file mode 100644 index 0000000..a866277 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_local_play.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_white.png b/app/src/main/res/drawable-xxhdpi/ic_menu_white.png new file mode 100644 index 0000000..59aca7c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_menu_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_my_library_books.png b/app/src/main/res/drawable-xxhdpi/ic_my_library_books.png new file mode 100644 index 0000000..cec53f5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_my_library_books.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_my_library_music.png b/app/src/main/res/drawable-xxhdpi/ic_my_library_music.png new file mode 100644 index 0000000..35cf46f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_my_library_music.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_ondemand_video_black.png b/app/src/main/res/drawable-xxhdpi/ic_ondemand_video_black.png new file mode 100644 index 0000000..8962da3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_ondemand_video_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_refresh_white.png b/app/src/main/res/drawable-xxhdpi/ic_refresh_white.png new file mode 100644 index 0000000..c0e74dd Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_refresh_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_search_black.png b/app/src/main/res/drawable-xxhdpi/ic_search_black.png new file mode 100644 index 0000000..a5e7a9c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_search_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_search_white.png b/app/src/main/res/drawable-xxhdpi/ic_search_white.png new file mode 100644 index 0000000..4cce1d9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_search_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_display_white.png b/app/src/main/res/drawable-xxhdpi/ic_settings_display_white.png new file mode 100644 index 0000000..05d138d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_display_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_video_collection.png b/app/src/main/res/drawable-xxhdpi/ic_video_collection.png new file mode 100644 index 0000000..275c64f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_video_collection.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_view_list_black.png b/app/src/main/res/drawable-xxhdpi/ic_view_list_black.png new file mode 100644 index 0000000..90591cc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_view_list_black.png differ diff --git a/app/src/main/res/drawable/custom_border.xml b/app/src/main/res/drawable/custom_border.xml new file mode 100644 index 0000000..f613773 --- /dev/null +++ b/app/src/main/res/drawable/custom_border.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/search_list.xml b/app/src/main/res/drawable/search_list.xml new file mode 100644 index 0000000..c75b725 --- /dev/null +++ b/app/src/main/res/drawable/search_list.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/fragment_livelist_list.xml b/app/src/main/res/layout-xlarge/fragment_livelist_list.xml new file mode 100644 index 0000000..7ffcd85 --- /dev/null +++ b/app/src/main/res/layout-xlarge/fragment_livelist_list.xml @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..f0eff4c --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_open_lp.xml b/app/src/main/res/layout/activity_open_lp.xml new file mode 100644 index 0000000..075dbc4 --- /dev/null +++ b/app/src/main/res/layout/activity_open_lp.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/alert_display_dialog.xml b/app/src/main/res/layout/alert_display_dialog.xml new file mode 100644 index 0000000..1221fbc --- /dev/null +++ b/app/src/main/res/layout/alert_display_dialog.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/blank_display_dialog.xml b/app/src/main/res/layout/blank_display_dialog.xml new file mode 100644 index 0000000..a7f7397 --- /dev/null +++ b/app/src/main/res/layout/blank_display_dialog.xml @@ -0,0 +1,60 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml new file mode 100644 index 0000000..ce62439 --- /dev/null +++ b/app/src/main/res/layout/fragment_about.xml @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_empty.xml b/app/src/main/res/layout/fragment_empty.xml new file mode 100644 index 0000000..5b483d2 --- /dev/null +++ b/app/src/main/res/layout/fragment_empty.xml @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..974c838 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml new file mode 100644 index 0000000..dc2e589 --- /dev/null +++ b/app/src/main/res/layout/fragment_item_list.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app/src/main/res/layout/fragment_livelist_list.xml b/app/src/main/res/layout/fragment_livelist_list.xml new file mode 100644 index 0000000..9f13d27 --- /dev/null +++ b/app/src/main/res/layout/fragment_livelist_list.xml @@ -0,0 +1,43 @@ + + + + + + + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..cb95de8 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml new file mode 100644 index 0000000..c05742d --- /dev/null +++ b/app/src/main/res/layout/fragment_navigation_drawer.xml @@ -0,0 +1,5 @@ + diff --git a/app/src/main/res/layout/fragment_navigation_drawer_list.xml b/app/src/main/res/layout/fragment_navigation_drawer_list.xml new file mode 100644 index 0000000..50ff6f5 --- /dev/null +++ b/app/src/main/res/layout/fragment_navigation_drawer_list.xml @@ -0,0 +1,50 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml new file mode 100644 index 0000000..fe7c04e --- /dev/null +++ b/app/src/main/res/layout/fragment_search.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_service_list.xml b/app/src/main/res/layout/fragment_service_list.xml new file mode 100644 index 0000000..56d6025 --- /dev/null +++ b/app/src/main/res/layout/fragment_service_list.xml @@ -0,0 +1,48 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_servicelist_list.xml b/app/src/main/res/layout/fragment_servicelist_list.xml new file mode 100644 index 0000000..6cbee56 --- /dev/null +++ b/app/src/main/res/layout/fragment_servicelist_list.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/layout/fragment_web.xml b/app/src/main/res/layout/fragment_web.xml new file mode 100644 index 0000000..44b7c6f --- /dev/null +++ b/app/src/main/res/layout/fragment_web.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/search_action_dialog.xml b/app/src/main/res/layout/search_action_dialog.xml new file mode 100644 index 0000000..b210efb --- /dev/null +++ b/app/src/main/res/layout/search_action_dialog.xml @@ -0,0 +1,40 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/search_result.xml b/app/src/main/res/layout/search_result.xml new file mode 100644 index 0000000..684cb15 --- /dev/null +++ b/app/src/main/res/layout/search_result.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/search_result_row.xml b/app/src/main/res/layout/search_result_row.xml new file mode 100644 index 0000000..e378e2a --- /dev/null +++ b/app/src/main/res/layout/search_result_row.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/spinner_dropdown_item.xml b/app/src/main/res/layout/spinner_dropdown_item.xml new file mode 100644 index 0000000..42fcee9 --- /dev/null +++ b/app/src/main/res/layout/spinner_dropdown_item.xml @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/spinner_list_item.xml b/app/src/main/res/layout/spinner_list_item.xml new file mode 100644 index 0000000..d76b839 --- /dev/null +++ b/app/src/main/res/layout/spinner_list_item.xml @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/app/src/main/res/menu/global.xml b/app/src/main/res/menu/global.xml new file mode 100644 index 0000000..326a6a7 --- /dev/null +++ b/app/src/main/res/menu/global.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/menu/menu_.xml b/app/src/main/res/menu/menu_.xml new file mode 100644 index 0000000..0ec6df8 --- /dev/null +++ b/app/src/main/res/menu/menu_.xml @@ -0,0 +1,6 @@ + + + diff --git a/app/src/main/res/menu/open_l.xml b/app/src/main/res/menu/open_l.xml new file mode 100644 index 0000000..5314e4a --- /dev/null +++ b/app/src/main/res/menu/open_l.xml @@ -0,0 +1,27 @@ + + + + + + + diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml new file mode 100644 index 0000000..ee41299 --- /dev/null +++ b/app/src/main/res/values-af/strings.xml @@ -0,0 +1,54 @@ + + + OpenLP is \'n gratis kerk skyfievertoning sagteware + Besoek die OpenLP webwerf vir meer inligting + Kopiereg + Gedeeltelike kopiereg + Lisensie + Hierdie program is gratis; jy kan dit herversprei of verander volgens die GNU Algemene Publieke Lisensie se voorwaardes, wat gepubliseer is deur die Free Software Foundation; weergawe 2 van die lisensie. + Hierdie program word versprei met die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORG; selfs sonder \'n geimpliseerde waarborg dat dit TOEPASLIK IS VIR \'N SPESIFIEKE DOEL + Instellings + Aangaande + Waarskuwing + Terug + Voorkeure + Verfris + Soek + OpenLP + Kanselleer + Konfigureer Netwerk + Wagwoord + Bediener Inligting + Konneksie Tyd-uitloop + Kies \'n waarde (millisekondes) + Gebruikernaame + Stel pasgemaakte tyd afsnypunt + Kies die verlangde skerm + Vertoon Werkvlak agtergrond + Laat die gekose item toe om na die middel van die lys te beweeg + Vertoon lewendige skerm + Vertoon Verstelling + Vertoon slegs Swart skerm + Vertoon slegs Tema + Bekragtig Aangepasde Tyd-uitlope + Voer Afkondiging teks in + Laat skerms toe op outomatiese te sentreer + Tuis + Ongemagtigde Toegang, voer asb \'n geldige gebruikernaam en wagwoord in. + Lewendige Vertoonlys + Lewendige Kykskerm + Maak navigeer vouer oop + Sluit navigeer vouer + Volgende + Geen + Poort + Vorige + Voer uit + Orde van diens + Verhoog skerm + Kies die grootte van die vertoning-teks + Verander die Diens teks grootte + Instellings + Gasheer naam of IP + Kan nie die versoek uitvoer nie - gaan jou netwerk verstellings na + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml new file mode 100644 index 0000000..b7eb7e6 --- /dev/null +++ b/app/src/main/res/values-bg/strings.xml @@ -0,0 +1,25 @@ + + + Копирайт + Копирайт за отделни части + Лиценз + Настройки + Относно + Сигнал + Предпочитания + Обнови + Търсене + OpenLP + Откажи + Времето за изчакване на свързването + Избери стойност (в милисекунди) + Активирай клиентски срокове + Начало + След. + Нищо + Порт + назад + Промени размера на текста за Службата + Настройки + Hostname или IP + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml new file mode 100644 index 0000000..5a23b84 --- /dev/null +++ b/app/src/main/res/values-cs/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP je volně dostupná křesťanská prezentační aplikace + Pro více informací navštivte OpenLP stránky + Autorská práva + Částečná autorská práva + Licence + Tento program je svobodný software; můžete jej šířit a modifikovat podle ustanovení GNU General Public License, vydávané Free Software Foundation; a to podle verze 2 této licence + Tento program je šířen v naději, že bude užitečný, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL + Nastavení + O aplikaci + Upozornění + Zpět + Změnit zobrazení + Nastavení + Obnovit + Hledat + OpenLP + Zrušit + Nastavení sítě + Heslo + Podrobnosti serveru + Časový limit spojení + Vybrat hodnotu (milisekundy) + Uživatelské jméno + Nastavit uživatelský časový limit + Vybrat požadované zobrazení + Zobrazit pozadí plochy + Povolit vybrané položce rolovat na střed seznamu + Zobrazit naživo + Nastavení zobrazení + Zobrazit jen černou + Zobrazit jen motiv + Zapnout uživatelský časový limit + Vložit text upozornění + Povolit automatické centrování obrazovky + Domů + Neoprávněný přístup, zadejte prosím správné uživatelské jméno a heslo + Seznam naživo + Zobrazení naživo + Otevřít navigační panel + Zavřít navigační panel + Další + Žádný + Port + Předchozí + Zpracovat + Seznam služby + Zobrazení na pódiu + Vybrat velikost zobrazeného textu + Změnit velikost textu služby + Nastavení + Jméno počítače nebo IP + Není možné vykonat požadavek - prověřte nastavení sítě + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml new file mode 100644 index 0000000..ab1e067 --- /dev/null +++ b/app/src/main/res/values-da/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP er et frit og gratis præsentationsprogram til kirker. + Besøg OpenLP\'s hjemmside for at lære mere + Ophavsret + Delvis ophavsret + Licens + Dette program er fri software; du kan redistribuere det og/eller ændre det under vilkårene angivet i GNU General Public License, som er udgivet af Free Software Foundation; udgave 2 af licensen. + Dette program er udgivet i håbet om at det må være brugbart, men UDEN NOGEN GARANTI; endda uden den underforståede garanti om SALGBARHED eller BRUGBARHED TIL ET BESTEMT FORMÅL. + Indstillinger + Om + Meddelelse + Tilbage + Skift skærm + Indstillinger + Opdatér + Søg + OpenLP + Annullér + Konfigurér netværk + Adgangskode + Serverdetaljer + Timeout for forbindelse + Vælg en værdi (millisekunder) + Brugernavn + Sæt brugerdefineret timeout + Vælg den ønskede skærm + Vis skrivebordsbaggrund + Tillad centrering af det valgte element + Vis fremvisningsskærm + Visningsindstillinger + Vis kun sort + Vis kun temabaggrund + Aktiver brugerdefinerede timeouts + Indtast meddelelsestekst + Tiilad autocentrering + Hjem + Adgang ikke godkendt. Indtast gyldigt brugernavn og adgangskode + Fremvisningsliste + Præsentationsvisning + Åbn navigationsskuffe + Luk navigationsskuffe + Næste + Ingen + Port + Forrige + Proces + Programoversigt + Scenevisning + Vælg tekststørrelse til visning + Ændr programmets tekststørrelse + Indstillinger + Værtsnavn eller IP + Kunne ikke udføre forespørsel - tjek netværksindstillingerne + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 0000000..81177c1 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP ist eine freie Präsentationssoftware für Kirchen und Gemeinden. + Weitere Informationen sind auf der OpenLP Webseite zu finden. + Urheberrecht + Anteiliges Urheberrecht + Lizenz + Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License Version 2, herausgegeben von der Free Software Foundation, weitergeben und/oder modifizieren. + Dieses Programms wird in der Hoffnung zur Verfügung gestellt, dass es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG; auch ohne einer implizite Gewährleistung von MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK + Einstellungen + Über + Hinweis + Zurück + Anzeige umschalten + Einstellungen + Aktualisieren + Suche + OpenLP + Abbruch + Netzwerk einrichten + Passwort + Server-Einstellungen + Verbindungzeit überschritten + Wähle einen Wert (in Millisekunden) + Benutzername + Setze benutzerdefiniertes Zeitlimit + Wähle die erforderlichen Ansicht + Bildschirmhintergrund anzeigen + Ausgewähltes Item mittig in Liste + Live-Ansicht anzeigen + Anzeigeeinstellung + Abdunkeln + Nur Design anzeigen + Aktiviere eigene Time-outs + Hinweis eingeben + Anzeigen automatisch zentrieren + Start + Zugriff nicht erlaubt, bitte einen gültigen Benutzernamen und das korrekte Passwort eingeben + Live Liste + Echtzeit-Anzeige + Navigationsleiste anzeigen + Navigationsleiste verbergen + Vorwärts + Nichts + Port + Zurück + Verarbeite + Ablaufliste + Bühnenansicht + Textgröße in der Ansicht auswählen + Textgröße des Ablaufs ändern + Einstellungen + Hostname oder IP + Anfrage konnte nicht verarbeitet werden - bitte die Netzwerkeinstellungen überprüfen + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml new file mode 100644 index 0000000..58156f3 --- /dev/null +++ b/app/src/main/res/values-el/strings.xml @@ -0,0 +1,25 @@ + + + Πνευματικά δικαιώματα + Τμηματικά πνευματικά δικαιώματα + Άδεια + Ρυθμίσεις + Σχετικά + Ειδοποίηση + Πίσω + Προτιμήσεις + Ανανέωση + Αναζήτηση + OpenLP + Ακύρωση + Λήξη Σύνδεσης + Επιλέξτε μια τιμή (milliseconds) + Επιλέξτε τον απαιτούμενο τύπο κενής σελίδας + Ενεργοποίηση + Αρχική Σελίδα + Κανένα + Θύρα + Αλλάξτε το μέγεθος κειμένου της Λειτουργίας + Ρυθμίσεις + Hostname ή διεύθυνση IP + diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 0000000..4781d34 --- /dev/null +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP is free church presentation software + To find out more visit the OpenLP website + Copyright + Portions copyright + License + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + Settings + About + Alert + Back + Toggle Display + Preferences + Refresh + Search + OpenLP + Cancel + Configure Network + Password + Server Details + Connection Timeout + Select a value (milliseconds) + Username + Set Custom Timeout + Select the required display + Display Desktop background + Allow the selected item to scroll to the centre of the list + Show Live display + Display Setting + Display Black only + Display Theme only + Enable Custom Timeouts + Enter Alert Text + Allow displays to auto center + Home + Unauthorised Access, please enter valid username and password + Live List + Live View + Open navigation drawer + Close navigation drawer + Next + None + Port + Previous + Process + Service List + Stage View + Select display text size + Change the Service text size + Settings + Hostname or IP + Unable to process request - check network settings + diff --git a/app/src/main/res/values-en-rZA/strings.xml b/app/src/main/res/values-en-rZA/strings.xml new file mode 100644 index 0000000..aec71ad --- /dev/null +++ b/app/src/main/res/values-en-rZA/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP is free church presentation software + To find out more visit the OpenLP website + Copyright + Portions copyright + License + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + Settings + About + Alert + Back + Toggle Display + Preferences + Refresh + Search + OpenLP + Cancel + Configure Network + Password + Server Details + Connection Timeout + Select a value (milliseconds) + Username + Set Custom Timeout + Select the required display + Display Desktop background + Allow the selected item to scroll to the centre of the list + Show Live display + Display Setting + Display Black only + Display Theme only + Enable Custom Timeouts + Enter Alert Text + Allow displays to auto centre + Home + Unauthorised Access, please enter valid username and password + Live List + Live View + Open navigation drawer + Close navigation drawer + Next + None + Port + Previous + Process + Service List + Stage View + Select display text size + Change the Service text size + Settings + Hostname or IP + Unable to process request - check network settings + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 0000000..375bb89 --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP es un software de proyección gratuito para iglesias. + Para más información sobre OpenLP visite el sitio web. + Copyright + Partes copyright + Licencia + Este es un programa gratuito; usted puede distribuirlo y/o modificarlo bajo los términos de GNU General Public License según la publicación de Free Software Foundation; versión 2 de la Licencia. + Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. + Preferencias + Acerca de + Alerta + Atrás + Alternar Pantalla + Preferencias + Actualizar + Buscar + OpenLP + Cancelar + Configurar Red + Clave + Detalles de Servidor + Tiempo de espera de conexión + Seleccione un valor (en milisegundos) + Usuario + Tiempo de espera personalizado + Seleccionar la pantalla requerida + Mostrar Fondo del Escritorio + Permitir que el elemento actual se desplace hacia el centro de la lista + Mostrar pantalla En Vivo + Preferencias de pantalla + Mostrar Negro solamente + Mostrar Tema solamente + Permitir tiempos de espera personalizados + Ingrese Texto de Alerta + Permitir auto centrado de pantalla + Inicio + Acceso No Autorizado, ingrese usuario y clave válidos + Lista En Vivo + Vista En Vivo + Abrir cajón de navegación + Cerrar cajón de navegación + Siguiente + Ninguno + Puerto + Anterior + Procesar + Lista de Servicio + Vista de Escenario + Seleccione tamaño del texto + Cambia el tamaño de texto del Servicio + Preferencias + Nombre de host o IP + No se pudo procesar la solicitud - revise la configuración de red + diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml new file mode 100644 index 0000000..f884ac0 --- /dev/null +++ b/app/src/main/res/values-et/strings.xml @@ -0,0 +1,52 @@ + + + OpenLP on vaba kiriku esitlustarkvara + Rohkem saab teada OpenLP veebilehelt + Autoriõigused + Osalised autoriõigused + Litsents + Sätted + Rakendusest + Teade + Tagasi + Kuva vahetus + Eelistused + Värskenda + Otsi + OpenLP + Loobu + Seadista võrk + Parool + Serveri andmed + Ühenduse aegumine + Vali kestus (millisekundid) + Kasutajanimi + Päringu aegumine + Vali nõutud kuva + Töölaua tausta näitamine + Laivi kuva + Kuvasätted + Kuva musta + Kuva ainult teemat + Kohandatud aegumisegade kasutamine + Hoiatuse tekst + Kuvad võivad automaatselt paigutuda keskele + Kodu + Lubamatu ligipääs, palun sisesta õiged kasutajanimi ja parool. + Ekraanil + Ekraan + Ava navisahtel + Sulge navisahtel + Järgmine + Puudub + Port + Eelmine + Töötlemine + Teenistuste loend + Lavavaade + Teksti suurus + Vaikimisi teenistuse teksti suuruse muutmine + Sätted + Hostinimi või IP + Päringu töötlemine on võimatu - kontrolli võrgusätteid + diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml new file mode 100644 index 0000000..8f049ce --- /dev/null +++ b/app/src/main/res/values-fi/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP on vapaalevitteinen seurakuntien esitysohjelmisto. + Lisätietoja löytyy OpenLP verkkosivulta + Tekijäinoikeudet + Osien tekijäinoikeudet + Lisenssi + Tämä ohjelma on vapaa, voit jakaa ja / tai muuttaa sitä ehtojen mukaisesti GNU General Public Licensen julkaissut Free Software Foundation, version 2 lisenssillä. + Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen. + Asetukset + Tietoja + Huomioviesti + Takaisin + Näytä tai piilota näyttö + Asetukset + Päivitä + Etsi + OpenLP + Peruuta + Verkon asetukset + Salasana + Palvelimen asetukset + Yhteyden aikakatkaisu + Valitse arvo (millisekuntia) + Käyttäjätunnus + Säädä mukautettu aikakatkaisu + Valitse vaadittu näyttölaite + Näytä työpöydän tausta + Salli valittavan nimikkeen vierittäminen luettelon keskimmäiseksi + Näytä Esitys näyttö + Näytön asetukset + Näytä vain pimennys + Näytä vain teema + Salli mukautetut viiveet + Kirjoita huomioviesti tähän + Salli näyttöjen automaattinen keskitys + Koti + Ei pääsyä, ole hyvä ja anna kelvollinen käyttäjätunnus ja salasana + Lista + Esitysnäkymä + Avaa navigointi + Sulje navigointi + Seuraava + Ei mitään + Portti + Edellinen + Prosessoi + Palveluluettelo + Lavanäyttö + Valitse näyttötekstin koko + Vaihda palvelun tekstikokoa + Asetukset + Koneen nimi tai IP + Pyyntöä ei voi käsitellä - tarkista verkkoasetukset + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000..9fcc28b --- /dev/null +++ b/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP est un logiciel de projection libre + Pour en savoir plus visitez le site web d\'OpenLP + Copyright + Copyright partiel + Licence + Ce programme est un logiciel libre; vous pouvez le redistribuer et/ou le modifier au titre des clauses de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation; version 2 de la Licence. + Ce programme est distribué dans l\'espoir qu\'il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. + Paramètres + A propos de + Alerte + Arrière + Afficher/Masquer + Préférences + Rafraîchir + Recherche + OpenLP + Annuler + Configuration du réseau + Mot de passe + Détails du serveur + Délai de connexion + Sélectionnez une valeur (millisecondes) + Nom d\'utilisateur + Définir un délai personnalisé + Sélectionner l\'affichage souhaité + Afficher le fond du bureau + Permettre à l\'élément sélectionné de défiler au centre de la liste + Afficher le direct + Paramètres d\'affichage + Afficher un écran noir + Afficher uniquement le thème + Activer le délai personnalisé + Entrer le message d\'alerte + Permettre les affichages au centre + Accueil + Accès refusé, veuillez entrer un nom d\'utilisateur et un mot de passe valide + Liste du direct + Vue du direct + Ouvrir le tiroir de navigation + Fermer le tiroir de navigation + Suivant + Rien + Port + Précédent + Processus + Liste du service + Prompteur + Sélectionner la taille du texte + Modifier la taille du texte du service + Paramètres + Nom d\'hôte ou IP + Impossible d\'effectuer la demande - vérifiez les paramètres réseau + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml new file mode 100644 index 0000000..eeeb58c --- /dev/null +++ b/app/src/main/res/values-hu/strings.xml @@ -0,0 +1,55 @@ + + + Az OpenLP egy templomi/gyülekezeti vetítő szoftver. + További információk az OpenLP-ről a weboldalon + Szerzői jog + Részleges szerzői jog + Licenc + Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki + Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve + Beállítások + Névjegy + Riasztás + Vissza + Megjelenítés átváltása + Beállítások + Frissítés + Keresés + OpenLP + Mégsem + Hálózat beállítása + Jelszó + Szerver részletek + Kapcsolódási időtúllépés + Érték választása (milliszekundum) + Felhasználói név + Egyéni időtúllépés beállítása + Kívánt megjelenés kiválasztása + Asztal hátterének megjelenítése + Görgetés a lista közepére a kijelölt elemhez + Élő adás megjelenítése + Megjelenítési beállítás + Elsötétített képernyő megjelenítése + Téma megjelenítése + Egyéni időtúllépés engedélyezése + Riasztási üzenet megadása + Megjelenés automatikus középre igazítása + Kezdőlap + Engedély nélküli hozzáférés, érvényes a felhasználói név és a jelszó? + Élő lista + Élő nézet + Menü megnyitása + Menü bezárása + Következő + Nincs + Portszám + Előző + Folyamatban + Sorrend + Színpadi nézet + Betűméret választása + Sorrend betűméretének módosítása + Beállítások + Gépnév vagy IP-cím + A kérés feldolgozhatatlan ‒ a hálózati beállítások ellenőrzése javasolt + diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml new file mode 100644 index 0000000..bc17607 --- /dev/null +++ b/app/src/main/res/values-id/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP adalah perangkat lunak presentasi gratis untuk gereja + Untuk mengetahui lebih lanjut, kunjungi situs OpenLP + Hak Cipta + Bagian hak cipta + Lisensi + Program ini adalah perangkat lunak gratis; Anda dapat menyebarluaskannya dan / atau memodifikasinya di bawah ketentuan GNU General Public License sebagaimana diterbitkan oleh Free Software Foundation; versi 2 dari Lisensi tersebut. + Program ini disebarluaskan dengan harapan bahwa akan berguna, tetapi TANPA JAMINAN APAPUN; bahkan tanpa jaminan yang termasuk pada PERDAGANGAN atau KECOCOKAN UNTUK SUATU TUJUAN TERTENTU. + Setelan + Tentang + Peringatan + Kembali + Ganti Tampilan + Pilihan + Segarkan-ulang + Penelusuran + OpenLP + Batal + Mengkonfigurasi Jaringan + Kata sandi + Rincian Server + Batas-Waktu Sambungan + Pilih sebuah nilai (milidetik) + Nama Pengguna + Setel Batas-waktu Kustom + Pilih tampilan yang dibutuhkan + Tampilkan latar Desktop + Izinkan butir terpilih untuk digulir ke tengah daftar + Tampilkan tampilan Tayang + Setelan Tampilan + Tampilkan Layar Hitam saja + Tampilkan Tema saja + Aktifkan Batas-Waktu Kustom + Masukkan Teks Peringatan + Izinkan semua tampilan diposisikan ke tengah secara otomatis + Beranda + Akses Tidak sah, silakan masukkan nama pengguna dan kata sandi yang valid + Daftar Tayang + Tinjauan Tayang + Buka penarik navigasi + Tutup penarik navigasi + Selanjutnya + Tidak sama sekali + Port + Sebelumnya + Proses + Daftar Layanan + Tinjuan Bertahap + Pilih tampilan ukuran teks + Ubah ukuran teks Layanan + Setelan + Nama Host atau IP + Tidak dapat memproses permintaan - periksa setelan jaringan + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml new file mode 100644 index 0000000..6322f06 --- /dev/null +++ b/app/src/main/res/values-it/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP è un software libero di presentazione per le Chiese + Per saperne di più visita il sito Web OpenLP + Copyright + Porzioni di copyright + Licenza + Questo è un software libero; può essere redistribuito e/o modificato nei termini della GNU General Public License come pubblicato dalla Free Software Foundation; vesione 2 della licenza + Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA, senza neppure l\'implicita garanzia della COMMERCIABILITA\' o IDONEITA\' PER UN PARTICOLARE SCOPO + Impostazioni + Informazioni + Avviso + Indietro + Attiva/disattiva visualizzazione + Preferenze + Aggiorna + Ricerca + OpenLP + Annulla + Configura Rete + Password + Dettagli Server + Timeout Connessione + Seleziona un valore (millisecondi) + Nome Utente + Imposta Timeout personalizzato + Selezionare il monitor desiderato + Visualizza sfondo Desktop + Consentire l\'elemento selezionato di scorrere al centro dell\'elenco + Visualizzazione Live Show + Impostazione Visualizzazione + Solo Schermo Nero + Visualizza solo il Tema + Abilitare i timeout personalizzati + Inserisci il testo Avviso + Consenti la visualizzazione al centro automaticamente + Inizio + Accesso non consentito, prego inserire un nome utente e password valida + Elenco LIVE + Visualizza LIVE + Apri sezione navigazione + Chiudi sezione navigazione + Successivo + Nessuno + Porta + Precedente + Elabora + Elenco Servizio + Visualizza Palco + Selezionare la dimensione testo di visualizzazione + Modificare le dimensioni del testo di servizio + Impostazioni + Hostname o IP + Impossibile elaborare la richiesta - controllare le impostazioni di rete + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 0000000..0492d4e --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,39 @@ + + + OpenLPは無償の教会プレゼンテーション用ソフトです。 + 詳しくはOpenLPウェブサイトをご覧ください。 + 著作権 + 追加の著作権 + ライセンス + このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された GNU 一般公衆利用許諾契約書バージョン2の定める条件の下で再頒布または改変することができます。 + このプログラムは有用であることを願って頒布されますが、*全くの無保証* です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも含め全く存在しません。 + 設定 + 情報 + 警告 + 戻る + 設定 + 再読込 + 検索 + OpenLP + キャンセル + ネットワーク設定 + パスワード + サーバの詳細 + 接続タイムアウト + 値を選択 (ミリ秒) + ユーザ名 + 任意のタイムアウト時間を設定する + 任意のタイムアウトを有効にする + 警告文を入力 + ホーム + 認証が必要です。ユーザ名とパスワードを入力してください。 + ライブ一覧 + + 無し + ポート + + 文字の大きさを選択 + 礼拝テキストの大きさを変更します + 設定 + ホスト名またはIPアドレス + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 0000000..75b4d4f --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,15 @@ + + + 라이선스 + 설정 + 정보 + 알림 + 뒤로 + 새로 고침 + 검색 + 취소 + 처음 + 다음 + 포트 + 설정 + diff --git a/app/src/main/res/values-large/refs.xml b/app/src/main/res/values-large/refs.xml new file mode 100644 index 0000000..04ab57e --- /dev/null +++ b/app/src/main/res/values-large/refs.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml new file mode 100644 index 0000000..6ec47d6 --- /dev/null +++ b/app/src/main/res/values-lt/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP yra, bažnyčioms skirta, nemokama pristatymų programinė įranga + Norėdami sužinoti daugiau, aplankykite OpenLP svetainę + Autorių Teisės + Autorių Teisių dalys + Licencija + Ši programa yra nemokama programinė įranga; jūs galite ją platinti ir/arba modifikuoti remdamiesi Free Software Foundation paskelbtomis GNU Bendrosios Viešosios Licencijos sąlygomis; licencijos 2 versija. + Ši programa platinama, tikintis, kad ji bus naudinga, tačiau BE JOKIŲ GARANTIJŲ; netgi be numanomos PARDAVIMO ar TINKAMUMO TAM TIKRAM TIKSLUI GARANTIJOS + Nustatymus + Apie + Įspėjimas + Grįžti + Perjungti Ekraną + Nuostatos + Įkelti iš naujo + Paieška + OpenLP + Atšaukti + Konfigūruoti Tinklą + Slaptažodis + Išsamiau apie Serverį + Sujungimo Laiko Limitas + Pasirinkite reikšmę (milisekundėmis) + Vartotojo vardas + Nustatyti Pasirinktiną Laukimo Laiką + Pasirinkite reikiamą ekraną + Rodyti Darbalaukio foną + Leisti slinkti pasirinktą elementą į sąrašo centrą + Rodyti Gyvai ekraną + Ekrano Nustatymas + Rodyti tik Juodą + Rodyti tik Temą + Įjungti Pasirinktinius Laiko Limitus + Įveskite Įspėjimo Tekstą + Leisti automatiškai centruoti ekranus + Pradžia + Neleistina Prieiga, prašome įvesti teisingą vartotojo vardą bei slaptažodį + Sąrašas Gyvai + Gyvas Rodinys + Atidaryti naršymo stalčių + Uždaryti naršymo stalčių + Kitas + Joks + Prievadas + Ankstesnis + Vykdyti + Pamaldų Programos Sąrašas + Scenos Rodinys + Pasirinkite rodomo teksto dydį + Keisti Pamaldų programos teksto dydį + Nustatymus + Kompiuterio vardas arba IP + Negalima apdoroti užklausos - patikrinkite tinklo nustatymus + diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml new file mode 100644 index 0000000..5c2f28e --- /dev/null +++ b/app/src/main/res/values-lv/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP ir bezmaksas prezentāciju programma baznīcām + Lai uzzinātu vairāk, apmeklējiet mājaslapu + Autortiesības + Daļu autortiesības + Licence + Šī ir bezmaksas programma. Jūs varat to izplatīt vai mainīt pēc GNU publiskās licences noteikumiem, kas publicēti Free Software Foundation, 2. versijas licencē. + Šī programma ir izplatīta ar cerību, ka tā būs noderīga, bet be jebkādām garantijām par tās noderīgumu mērķim vai ienesīgumu. + Iestatījumi + Par + Ziņojums + Atgriezties + Pārslēgt displeju + Iestatījumi + Atsvaidzināt + Meklēt + OpenLP + Atcelt + Tīkla konfigurācija + Parole + Servera iestatījumi + Savienojuma noildze + Izvēlieties vērtību (milisekundes) + Lietotājvārds + Izvēlieties vēlamo noildzi + Izvēlieties nepieciešamo displeju + Parādīt fona attēlu + Atļaut šim elementa pārvietoties uz saraksta centru + Parādīt displeju + Ekrāna iestatījumi + Attēlot melnu ekrānu + Attēlot tēmas attēlu + Iespējot pielāgotās noildzes + Ievadiet ziņojuma tekstu + Atļaut ekrānam iecentrēties automatiski. + Sākums + Pieeja liegta! Lūdzu ievadiet pareizu lietotājvārdu un paroli. + Saraksts demonstrēšanai + Attēls ekrānā + Atvērt navigācijas slaidni + Aizvērt navigācijas slaidni + Nākamais + Nekas + Ports + Iepriekšējais + Process + Saraksts + Skatuves ekrāns + Izvēlieties teksta lielumu + Izvēlieties dievkalpojuma teksta lielumu + Iestatījumi + Vārds vai IP adrese + Nav iespējams apstrādāt pieprasījumu - pārbaudiet tīkla iestatījumus. + diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml new file mode 100644 index 0000000..dd45d13 --- /dev/null +++ b/app/src/main/res/values-mk/strings.xml @@ -0,0 +1,5 @@ + + + Лиценца + Предупредување + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml new file mode 100644 index 0000000..5ada11b --- /dev/null +++ b/app/src/main/res/values-ml/strings.xml @@ -0,0 +1,4 @@ + + + ജാഗ്രത + diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml new file mode 100644 index 0000000..bc8c43c --- /dev/null +++ b/app/src/main/res/values-nb/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP er en gratis presentasjonsprogramvare for menigheter + For videre opplysninger besøk OpenLP sin hjemmeside + Copyright + Andel av opphavsrett + Lisens + Dette programmet er gratis programvare; du kan redistribuere det og/eller endre det under betingelsene i GNU General Public License versjon 2, publisert av Free Software Foundation + Dette programmet er distribuert i det håp at det vil være nyttig, men UTEN NOEN FORM FOR GARANTI; heller ingen underforståtte garanti om SALGBARHET eller ANVENDELIGHET FOR ET SPESIELT FORMÅL. + Innstillinger + Om + Melding + Tilbake + Skifte skjermvisning + Innstillinger + Oppdater + Søk + OpenLP + Avbryt + Konfigurer nettverk + Passord + Serverditaljer + Tidsavbrudd for tilkobling + Velg en verdi (millisekund) + Brukernavn + Angi egendefinert tidsavbrudd + Velg ønsket visning + Vis skrivebordsbakgrunn + Tillat valgt punkt å rulle til midt på listen + Vis aktivt bilde + Skjerminnstilling + Vis sort skjerm + Vis tema + Aktiver egendefinerte tidsavbrudd + Skriv meldingstekst + Tillat automatisk sentrering av skjermene + Hjem + Ikke godkjent tilgang, vennligst skriv gyldig brukernavn og passord + Framvisningsliste + Skjermvisning + Åpne navigasjonsmenyen + Lukke navigasjonsmenyen + Neste + Ingen + Port + Forrige + Behandle + Møteprogramliste + Scenevisning + Velg tekststørrelse i skjerm + Endre tekststørrelsen i møteprogrammet + Innstillinger + Vertsnavn eller IP + Kan ikke behandle forespørselen - sjekk nettverksinnstillingene + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000..af5c18d --- /dev/null +++ b/app/src/main/res/values-nl/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP is gratis presentatiesoftware voor kerken + Lees meer over OpenLP op de website + Copyright + Onderdelen copyright + Licentie + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + Instellingen + Over + Waarschuwing + Terug + Scherm leegmaken + Voorkeuren + Vernieuwen + Zoek + OpenLP + Annuleer + Netwerk instellen + Wachtwoord + Serverdetails + Verbindingstimeout + Selecteer een waarde (milliseconden) + Gebruikersnaam + Aangepaste timeout instellen + Selecteer het verplichte scherm + Toon Desktop achtergrond + Toegang geven aan geselecteerde items om naar het midden van de lijst te scrollen + Toon live scherm + Beeldscherminstellingen + Toon alleen zwart + Toon alleen thema + Aangepaste timeouts toestaan + Voer waarschuwingstekst in + Schermen toegang geven tot auto center + Startpagina + Geen toegang, voer juiste gebruikersnaam en wachtwoord in + Live lijst + Live kijken + Open navigatiemenu + Sluit navigatiemenu + Volgende + Niet + Poort + Vorige + Verwerken + Liturgie lijst + Podiumweergave + Selecteer schermtekstgrootte + Verander lettergrootte liturgie + Instellingen + Hostname of IP adres + Kon aanvraag niet behandelen - controleer netwerkinstellingen + diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml new file mode 100644 index 0000000..cadb6f2 --- /dev/null +++ b/app/src/main/res/values-nn/strings.xml @@ -0,0 +1,12 @@ + + + Innstillingar. + Varsling + OpenLP + Tidsavbrot for tilkopling + Oppgje ein verdi i millisekund + Neste + Port + Førre + Innstillingar. + diff --git a/app/src/main/res/values-pap/strings.xml b/app/src/main/res/values-pap/strings.xml new file mode 100644 index 0000000..48880b4 --- /dev/null +++ b/app/src/main/res/values-pap/strings.xml @@ -0,0 +1,18 @@ + + + Derecho di outor + Lisensia + Konfigurashon + Informashon + Aviso + Preferensia + Buska + OpenLP + Permití Timeout adaptá + Sigiente + Niun + Port + Bai bèk + Konfigurashon + Hostname òf IP + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml new file mode 100644 index 0000000..c240f96 --- /dev/null +++ b/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP jest wolnym programem do obsługi kościelnego projektora + Dowiedz się więcej na stronie OpenLP + Prawa autorskie + Cząstkowe prawa autorskie + Licencja + Ten program jest wolnym oprogramowaniem; możesz go rozprzestrzeniać lub modyfikować zgodnie z zasadami Powszechnej Licencji Publicznej GNU, wydanej przez Fundację Wolnego Oprogramowania; zgodnie z 2 wersją tej Licencji + Ten program jest rozpowszechniany w nadziei, że będzie pożyteczny, ale BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ + Ustawienia + O programie + Komunikat + Wróć + Przełącz Ekran + Preferencje + Odśwież + Szukaj + OpenLP + Anuluj + Konfiguruj sieć + Hasło + Szczegóły serwera + Limit czasowy połączenia + Wybierz wartość (milisekundy) + Nazwa użytkownika + Ustaw inny limit czasowy + Wybierz wyświetlacz + Wyświetl tło ekranu + Pozwól wybranemu elementowi przewinąć do środka listy + Pokaż Ekran + Ustawienia wyświetlania + Wyświetl czarny ekran + Wyświetl tylko motyw + Niestandardowy limit czasu + Wpisz tekst komunikatu + Pozwól na autowyśrodkowanie + Home + Nieuprawniony dostęp, proszę wprowadź nazwę użytkownika oraz hasło. + Plan nabożeństwa + Ekran + Otwórz zakładkę nawigacji + Zamknij zakładkę nawigacji + Następny + Nic + Port + Poprzedni + Wyświetl + Plan Nabożeństwa + Scena + Wybierz rozmiar wyświetlanego tekstu + Zmień rozmiar czcionki w Planie Nabożeństwa + Ustawienia + Nazwa hosta lub IP + Nie można wykonać żądania - sprawdź ustawienia sieciowe + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000..ce397dc --- /dev/null +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,55 @@ + + + O OpenLP é um software livre para exibições em igrejas + Para saber mais visite o site do OpenLP + Direitos Autorais + Partes copyright + Licença + Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre; na versão 2 da Licença. + Este programa é distribuido na esperança que será útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO PARA UM DETERMINADO FIM. Veja abaixo para maiores detalhes. + Configurações + Sobre + Alertar + Voltar + Alternar Monitor + Preferências + Atualizar + Busca + OpenLP + Cancelar + Configurar Rede + Senha + Detalhes do Servidor + Tempo limite de conexão + Selecione um valor (em milissegundos) + Usuário + Ativar Timeout Personalizado + Selecione o monitor requerido + Exibir Plano de Fundo da Área de Trabalho + Permitir ao item selecionado se deslocar ao centro da lista + Mostrar Visualização Ao Vivo + Configurações de Exibição + Exibir Tela Preta + Exibir Tema + Habilitar Timeouts personalizados + Digitar Texto de Alerta + Auto-centralizar slides na tela + Home + Acesso não autorizado, por favor, digite usuário e senha válidos + Lista Ao Vivo + Ao vivo + Abrir painel de navegação + Fechar painel de navegação + Próximo + Nenhum + Porta + Anterior + Processo + Lista de Serviço + Visualização de Palco + Selecionar tamanho do monitor de exibição + Alterar o tamanho do texto de culto + Configurações + Hostname ou IP + Não é possível processar o pedido - verifique as configurações de rede + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml new file mode 100644 index 0000000..fdb4389 --- /dev/null +++ b/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP este un program gratuit de prezentare pentru biserică + Pentru a afla mai multe vizitați pagina web OpenLP + Drepturi de autor + Drepturi de autor pentru bucăți + Licența + Acest program este gratuit; puteți să îl redistribuiți și/sau să îl modificați în termenii GNU General Public License cum au fost publicați de Free Software Foundation; versiunea 2 a Liceței + Acest program este distribuit în speranța că va fi folositor, dar FĂRĂ NICI O GARANȚIE; nici măcar a garanției implicite de COMERCIALIZARE sau POTRIVIRE PENTRU UN ANUMIT SCOP + Setări + Despre + Anunț + Înapoi + Schimbă Ecranul + Preferințe + Reîncărcare + Căutare + OpenLP + Anulare + Configurează Rețeaua + Parola + Detalii Server + Conexiunea a expirat + Selectați o valoare (milisecunde) + Nume utilizator + Stabiliți timp personalizat de expirare + Selectați ecranul necesar + Afișați fundalul spațiului de lucru + Permite elementului selectat să se deplaseze în mijlocul listei + Afișați ecranul \"În direct\" + Setare de Afișare + Afișați numai negru + Afișați numai tema + Activează timp de expirare personalizat + Introduceți textul Anunțului + Permite ecranelor să se auto-centreze + Acasă + Acces neautorizat, vă rog introduceți numele de utilizator și parola corecte. + Lista În direct + Vizualizare În direct + Deschide bara de navigare + Închide bara de navigare + Următor + nimic + Port + Anterior + Proces + Lista de Serviciu + Vizualizare pentru Scenă + Selectați mărimea textului afișat + Schimbați mărimea textului Serviciului + Setări + Hostname sau IP + Nu se poate procesa cererea - verificați setările de rețea + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..44c5123 --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,42 @@ + + + OpenLP является бесплатным церковным программным обеспечением для презентаций + Чтобы узнать больше, посетите веб-сайт OpenLP + Авторские права + Portions copyright + Лицензия + Эта программа является свободным программным обеспечением; Вы можете распространять и / или изменять его в соответствии с условиями GNU General Public License, опубликованной Фондом свободного программного обеспечения, версия 2 Лицензии + Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ + Параметры + О програме + Оповещение + Черный + Переключите экран + Настройки + Обновить + Поиск + OpenLP + Отмена + Настроить сеть + Пароль + Параметры сервера + Время ожидания соединения + Выберите значение (в миллисекундах) + Установить пользовательский тайм-аут + Включить пользовательские тайм-ауты + Введите текст оповещения + Домой + Вид прямого эфира + Следующий + Ничего + Порт + Предыдущий + Выполнение + Список служения + Вид сцены + Выберите размер текста + Изменить размер текста Служения + Параметры + Имя хоста или IP + Невозможно выполнить запрос - проверьте настройки сети + diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml new file mode 100644 index 0000000..ebf8106 --- /dev/null +++ b/app/src/main/res/values-sk/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP je voľne dostupná kresťanská prezentačná aplikácia. + Pre viac informácií navštívte OpenLP web + Autorské práva + Čiastočné autorské práva + Licencia + Tento program je slobodný software; môžete ho šířiť a modifikovať podľa ustanovení GNU General Public License, vydávanej Free Software Foundation; a to podľa verze 2 tejto licencie + Tento program je šírený v nádeji, že bude užitočný, avšak BEZ AKÉJKOĽVEK ZÁRUKY; neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI PRE URČITÝ ÚČEL + Nastavenia + O aplikácii + Upozornenie + Naspäť + Zmeniť zobrazenie + Nastavenia + Obnoviť + Hľadať + OpenLP + Zrušiť + Nastavenie sieťe + Heslo + Podrobnosti servera + Časový limit spojenia + Vybrať hodnotu (milisekundy) + Používateľské meno + Nastaviť užívateľský časový limiť + Vybrať požadované zobrazenie + Zobraziť pozadie plochy + Povoliť vybratej položke rolovať na stred zoznamu + Zobraziť naživo + Nastavenie zobrazenia + Zobraziť len čiernu + Zobraziť len motív + Zapnúť užívateľský časový limit + Zadať text upozornenia + Povoliť automatické centrovanie obrazovky + Domov + Nepovolený prístup, prosím zadajte správne používateľské meno a heslo + Zoznam naživo + Zobrazenie naživo + Otvoriť navigačný panel + Zatvoriť navigačný panel + Nasledujúci + Žiadny + Port + Predchádzajúci + Spracovať + Správca Služby + Pódiové zobrazenie + Vybrať veľkosť zobrazeného textu + Zmeniť veľkosť textu služby + Nastavenia + Názov počítača alebo IP + Nie je možné vykonať požiadavku - skontrolujte nastavenie siete + diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml new file mode 100644 index 0000000..305c725 --- /dev/null +++ b/app/src/main/res/values-sl/strings.xml @@ -0,0 +1,13 @@ + + + Licenca + Nastavitve + Opozorilo + Osveži + Išči + OpenLP + Prekliči + Port + Nastavitve + Hostname ali IP + diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml new file mode 100644 index 0000000..c757504 --- /dev/null +++ b/app/src/main/res/values-sq/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml new file mode 100644 index 0000000..fb4afca --- /dev/null +++ b/app/src/main/res/values-sv/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP är fri mjukvara för kyrkpresentation + För mer information, besök OpenLP:s webbplats + Copyright + Del-copyright + Licens + Det här programmet är fri mjukvara; du får sprida den vidare och/eller ändra i den under villkoren i GNU General Public License så som publicerade av Free Software Foundation; version 2 av licensen. + Det här programmet ges ut i hopp om att det kan vara användbart, men UTAN NÅGON GARANTI; inte ens någon underförstådd garanti vid köp eller lämplighet för ett särskilt ändamål. + Inställningar + Om + Meddelande + Tillbaka + Växla visning + Alternativ + Uppdatera + Sök + OpenLP + Avbryt + Konfigurera nätverk + Lösenord + Serverinställningar + Anslutningstimeout + Välj ett värde (millisekunder) + Användarnamn + Ställ in egen timeout + Välj bildläge + Visa skrivbordsbakgrund + Tillåt den valda posten att automatiskt scrolla till mitten på listan + Visa live-bild + Bildinställningar + Visa endast svart skärm + Visa endast tema + Aktivera egna timeouter + Ange meddelandetext + Tillåt skärmar att centrera automatiskt + Hem + Anslutning nekad, kontrollera användarnamn och lösenord + Live-lista + Live-bild + Öppna navigeringsmeny + Stäng navigeringsmeny + Nästa + Inga + Port + Föregående + Visa + Körschema + Scenbild + Välj bildens textstorlek + Ändra körschemats textstorlek + Inställningar + Värdnamn eller IP-adress + Kunde inte hantera förfrågan - kontrollera nätverksinställningarna + diff --git a/app/src/main/res/values-sw600dp/refs.xml b/app/src/main/res/values-sw600dp/refs.xml new file mode 100644 index 0000000..2ec568f --- /dev/null +++ b/app/src/main/res/values-sw600dp/refs.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-tlh/strings.xml b/app/src/main/res/values-tlh/strings.xml new file mode 100644 index 0000000..c757504 --- /dev/null +++ b/app/src/main/res/values-tlh/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml new file mode 100644 index 0000000..061b1d8 --- /dev/null +++ b/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,5 @@ + + + Uyarı + OpenLP + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml new file mode 100644 index 0000000..d67b03a --- /dev/null +++ b/app/src/main/res/values-uk/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP це безкоштовна програма для презентацій в церкві + Щоб дізнатися більше, відвідайте веб-сайт OpenLP + Авторське право: + Часткове авторське право + Ліцензія + Ця програма є вільним програмним забезпеченням; ви можете розповсюджувати та/або змінювати його відповідно до умов GNU General Public License, виданої Фондом вільного програмного забезпечення, версія 2 Ліцензії + Ця програма поширюється в надії, що вона буде корисною, але БЕЗ БУДЬ-ЯКИХ ГАРАНТІЙ; навіть без гарантій КОМЕРЦІЙНОЇ ЦІННОСТІ чи ПРИДАТНОСТІ ДЛЯ КОНКРЕТНИХ ЦІЛЕЙ + Налаштування + Про + Сповіщення + Назад + Переключити Дисплей + Уподобання + Оновити + Пошук + OpenLP + Скасувати + Налаштування Мережі + Пароль + Деталі Сервера + Час очікування з\'єднання + Виберіть значення (в мілісекундах) + Ім\'я користувача: + Втановити інший Час Очікування + Виберіть потрібний дисплей + Обрати фон для робочого столу дисплея + Дозволити вибраний елемент, щоб перейти до центру списку + Показати основний дисплей + Налаштування Дисплею + Тільки Чорний дисплей + Тільки Тема дисплею + Обрати інший Час Очікування + Введіть Текст Сповіщення + Дозволити дисплей в центрі + Дім + Несанкціонований доступ будь ласка, введіть правильне ім\'я користувача та пароль + Список Перегляду + Режим Живого Перегляду + Відкрити вікно навігації + Закрити вікно навігації + Наступний + Ні + Порт + Попередній + Процес + Список Служб + Поставити Прегляд + Виберіть розмір тексту для дисплею + Змінити розмір шрифту для служби + Налаштування + Ім\'я хосту або IP + Не вдається обробити запит - перевірте налаштування мережі + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml new file mode 100644 index 0000000..c757504 --- /dev/null +++ b/app/src/main/res/values-vi/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 0000000..63fc816 --- /dev/null +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000..fe6df6a --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,55 @@ + + + OpenLP是免費的教會簡報軟體 + 要了解詳情,請參閱 OpenLP 網站 + 版權 + 程序版權 + 許可協議 + 這個程序是自由軟體,你可以遵照自由軟體基金會出版的 GNU通用公共許可證條款第2版來修改和重新發佈這個軟體 + 這個程式是在期望它是可行的情況下發布, 但是沒有任何擔保,甚至沒有暗示的適用性或針對於特定用途的保障。 + 設定 + 關於 + 警告 + 退後 + 切換顯示 + 偏好設定 + 重新整理 + 搜尋 + OpenLP + 取消 + 設定網路 + 密碼 + 聚會細節 + 連接逾時 + 選擇數值(毫秒) + 帳號 + 自訂逾時 + 選擇需要的顯示畫面 + 顯示桌面背景 + 允許所選擇的項目捲動到清單的中間 + 顯示現場Live + 顯示設定 + 僅顯示黑幕 + 僅顯示主題 + 開啟自訂逾時 + 輸入警報文字 + 允許自動置中顯示 + 首頁 + 未經授權的連結,請輸入有效的帳號和密碼 + 現場Live清單 + Live 顯示 + 打開隱藏式側選單 + 關閉隱藏式側選單 + 下一個 + + 連接埠 + 前一個 + 程序 + 聚會清單 + 舞台查看 + 選擇顯示字體尺存 + 更改聚會文字大小 + 設定 + 主機名或IP + 無法處理請求 - 請檢查網路設定 + diff --git a/app/src/main/res/values/backgroundTimeouts.xml b/app/src/main/res/values/backgroundTimeouts.xml new file mode 100644 index 0000000..90af49f --- /dev/null +++ b/app/src/main/res/values/backgroundTimeouts.xml @@ -0,0 +1,22 @@ + + + @string/none + 1 + 2 + 5 + 10 + 15 + 20 + 30 + + + 0 + 1000 + 2000 + 5000 + 10000 + 15000 + 20000 + 30000 + + diff --git a/app/src/main/res/values/defaultValues.xml b/app/src/main/res/values/defaultValues.xml new file mode 100644 index 0000000..98d878b --- /dev/null +++ b/app/src/main/res/values/defaultValues.xml @@ -0,0 +1,12 @@ + + + 192.168.0.1 + 4316 + userid + password + + + 3000 + 14 + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..074e7a0 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,9 @@ + + + 16dp + 16dp + + + 240dp + diff --git a/app/src/main/res/values/httpClientTimeoutValues.xml b/app/src/main/res/values/httpClientTimeoutValues.xml new file mode 100644 index 0000000..048503a --- /dev/null +++ b/app/src/main/res/values/httpClientTimeoutValues.xml @@ -0,0 +1,16 @@ + + + 3000 + 4000 + 5000 + 8000 + 10000 + + + 3000 + 4000 + 5000 + 8000 + 10000 + + \ No newline at end of file diff --git a/app/src/main/res/values/keyStrings.xml b/app/src/main/res/values/keyStrings.xml new file mode 100644 index 0000000..9afc890 --- /dev/null +++ b/app/src/main/res/values/keyStrings.xml @@ -0,0 +1,11 @@ + + key_auto_scroll + key_enable_custom_timeout + key_connection_timeout + key_text_size + key_host + key_port + key_userid + key_password + key_shared_preferences + diff --git a/app/src/main/res/values/refs.xml b/app/src/main/res/values/refs.xml new file mode 100644 index 0000000..6fcf429 --- /dev/null +++ b/app/src/main/res/values/refs.xml @@ -0,0 +1,23 @@ + + + + + @layout/fragment_servicelist_list + @layout/fragment_livelist_list + + + @layout/fragment_item_list + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..b17bd88 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,61 @@ + + + OpenLP is free church presentation software + To find out more visit the OpenLP website + Copyright + Portions copyright + License + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + Settings + About + Alert + Back + Toggle Display + Preferences + Refresh + Search + OpenLP + Cancel + Configure Network + Password + Server Details + Connection Timeout + Select a value (milliseconds) + Username + Set Custom Timeout + Select the required display + Display Desktop background + Allow the selected item to scroll to the centre of the list + Live display + Display Setting + Display Black only + Display Theme only + Enable Custom Timeouts + Enter Alert Text + Allow displays to auto center + Home + Unauthorised Access, please enter valid username and password + Live List + Live View + Open navigation drawer + Close navigation drawer + Next + None + Port + Previous + Process + Search Text + Select Plugin + Service List + Search Results + Send Live + Add to Service + Showing Results for \'%s\' + Stage View + Select display text size + Change the Service text size + Settings + Hostname or IP + Unable to process request - check network settings + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..766ab99 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/values/textSize.xml b/app/src/main/res/values/textSize.xml new file mode 100644 index 0000000..94b52ac --- /dev/null +++ b/app/src/main/res/values/textSize.xml @@ -0,0 +1,22 @@ + + + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + + + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml new file mode 100644 index 0000000..5c84e5e --- /dev/null +++ b/app/src/main/res/xml/pref_general.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml new file mode 100644 index 0000000..d0c4461 --- /dev/null +++ b/app/src/main/res/xml/pref_headers.xml @@ -0,0 +1,14 @@ + + + + +
+ +
+ + + diff --git a/app/src/main/res/xml/pref_notification.xml b/app/src/main/res/xml/pref_notification.xml new file mode 100644 index 0000000..33606e5 --- /dev/null +++ b/app/src/main/res/xml/pref_notification.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..ef7ae5a --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.2' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/fixssl.iml b/fixssl.iml new file mode 100644 index 0000000..9b1c62e --- /dev/null +++ b/fixssl.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..1d3591c --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..8c0fb64 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a611e19 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Sep 16 06:02:15 BST 2016 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'