diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4c35730b..086c98bd 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="28" + android:versionName="0.4.5" > Sync on startup Show only unread articles - Allow all SSL Certificates + + Disable Hostname Verification (Pay extra attention to the certificate validation dialog!) Navigate with volume buttons Mark as read while scrolling + + Accept Unknown Certificate? + Always + Once + Abort + Certificate Verification + + Display diff --git a/src/com/android/vending/billing/IInAppBillingService.aidl b/src/com/android/vending/billing/IInAppBillingService.aidl deleted file mode 100644 index 2a492f78..00000000 --- a/src/com/android/vending/billing/IInAppBillingService.aidl +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.vending.billing; - -import android.os.Bundle; - -/** - * InAppBillingService is the service that provides in-app billing version 3 and beyond. - * This service provides the following features: - * 1. Provides a new API to get details of in-app items published for the app including - * price, type, title and description. - * 2. The purchase flow is synchronous and purchase information is available immediately - * after it completes. - * 3. Purchase information of in-app purchases is maintained within the Google Play system - * till the purchase is consumed. - * 4. An API to consume a purchase of an inapp item. All purchases of one-time - * in-app items are consumable and thereafter can be purchased again. - * 5. An API to get current purchases of the user immediately. This will not contain any - * consumed purchases. - * - * All calls will give a response code with the following possible values - * RESULT_OK = 0 - success - * RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog - * RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested - * RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase - * RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API - * RESULT_ERROR = 6 - Fatal error during the API action - * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned - * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned - */ -interface IInAppBillingService { - /** - * Checks support for the requested billing API version, package and in-app type. - * Minimum API version supported by this interface is 3. - * @param apiVersion the billing version which the app is using - * @param packageName the package name of the calling app - * @param type type of the in-app item being purchased "inapp" for one-time purchases - * and "subs" for subscription. - * @return RESULT_OK(0) on success, corresponding result code on failures - */ - int isBillingSupported(int apiVersion, String packageName, String type); - - /** - * Provides details of a list of SKUs - * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle - * with a list JSON strings containing the productId, price, title and description. - * This API can be called with a maximum of 20 SKUs. - * @param apiVersion billing API version that the Third-party is using - * @param packageName the package name of the calling app - * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" - * @return Bundle containing the following key-value pairs - * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on - * failure as listed above. - * "DETAILS_LIST" with a StringArrayList containing purchase information - * in JSON format similar to: - * '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00", - * "title : "Example Title", "description" : "This is an example description" }' - */ - Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle); - - /** - * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, - * the type, a unique purchase token and an optional developer payload. - * @param apiVersion billing API version that the app is using - * @param packageName package name of the calling app - * @param sku the SKU of the in-app item as published in the developer console - * @param type the type of the in-app item ("inapp" for one-time purchases - * and "subs" for subscription). - * @param developerPayload optional argument to be sent back with the purchase information - * @return Bundle containing the following key-value pairs - * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on - * failure as listed above. - * "BUY_INTENT" - PendingIntent to start the purchase flow - * - * The Pending intent should be launched with startIntentSenderForResult. When purchase flow - * has completed, the onActivityResult() will give a resultCode of OK or CANCELED. - * If the purchase is successful, the result data will contain the following key-value pairs - * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on - * failure as listed above. - * "INAPP_PURCHASE_DATA" - String in JSON format similar to - * '{"orderId":"12999763169054705758.1371079406387615", - * "packageName":"com.example.app", - * "productId":"exampleSku", - * "purchaseTime":1345678900000, - * "purchaseToken" : "122333444455555", - * "developerPayload":"example developer payload" }' - * "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that - * was signed with the private key of the developer - * TODO: change this to app-specific keys. - */ - Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, - String developerPayload); - - /** - * Returns the current SKUs owned by the user of the type and package name specified along with - * purchase information and a signature of the data to be validated. - * This will return all SKUs that have been purchased in V3 and managed items purchased using - * V1 and V2 that have not been consumed. - * @param apiVersion billing API version that the app is using - * @param packageName package name of the calling app - * @param type the type of the in-app items being requested - * ("inapp" for one-time purchases and "subs" for subscription). - * @param continuationToken to be set as null for the first call, if the number of owned - * skus are too many, a continuationToken is returned in the response bundle. - * This method can be called again with the continuation token to get the next set of - * owned skus. - * @return Bundle containing the following key-value pairs - * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on - * failure as listed above. - * "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs - * "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information - * "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures - * of the purchase information - * "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the - * next set of in-app purchases. Only set if the - * user has more owned skus than the current list. - */ - Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken); - - /** - * Consume the last purchase of the given SKU. This will result in this item being removed - * from all subsequent responses to getPurchases() and allow re-purchase of this item. - * @param apiVersion billing API version that the app is using - * @param packageName package name of the calling app - * @param purchaseToken token in the purchase information JSON that identifies the purchase - * to be consumed - * @return 0 if consumption succeeded. Appropriate error values for failures. - */ - int consumePurchase(int apiVersion, String packageName, String purchaseToken); -} diff --git a/src/com/devspark/robototextview/widget/RobotoDigitalClock.java b/src/com/devspark/robototextview/widget/RobotoDigitalClock.java index 8bdbc9ce..5ad33532 100644 --- a/src/com/devspark/robototextview/widget/RobotoDigitalClock.java +++ b/src/com/devspark/robototextview/widget/RobotoDigitalClock.java @@ -15,6 +15,7 @@ import de.luhmer.owncloudnewsreader.R; * * @author e.shishkin */ +@SuppressWarnings("deprecation") public class RobotoDigitalClock extends DigitalClock { /** diff --git a/src/de/luhmer/owncloudnewsreader/Constants.java b/src/de/luhmer/owncloudnewsreader/Constants.java index 38830d56..7dd80390 100644 --- a/src/de/luhmer/owncloudnewsreader/Constants.java +++ b/src/de/luhmer/owncloudnewsreader/Constants.java @@ -4,13 +4,11 @@ public class Constants { public static final Boolean DEBUG_MODE = true; public static final Boolean debugModeWidget = true; - public static final String UPDATE_SERVER_HOSTNAME = "https://ourhomework.de/N43Z5W5T6721903JS98SFD7"; - public static final String FILENAME = "OwncloudNewsReader.apk"; - + public static final String _TAG_LABEL_UNREAD = "stream/contents/user/-/state/com.google/reading-list?n=1000&r=n&xt=user/-/state/com.google/read"; public static final String _TAG_LABEL_STARRED = "stream/contents/user/-/state/com.google/starred?n=20"; - public static final String LAST_SYNC = "LAST_SYNC"; + //public static final String LAST_SYNC = "LAST_SYNC"; public static final int maxItemsCount = 1000; @@ -21,7 +19,7 @@ public class Constants { public static final int TaskID_GetItems = 3; public static final int TaskID_PerformStateChange = -1; - + /* private static final String _P_KEY_PART1 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgNmCsMj6M4zkjpKRG8MG5+yIAyqSQE2etVkZsc3s"; private static final String _P_KEY_PART2 = "V5zLoQ/NUOVC0fS2tj8IWk6UYqQGk9rmVold3sDGiTCvWGFecjwel3qxzz23hKLlemrv2+0WPrZ5KOqiaCEMi"; private static final String _P_KEY_PART3 = "CeQ7zgpcytcQdD9Y/aeaHJ9P27ntn0ub6H1Bx3VDRHm4Jkg6LQnqmdIpEmeIztnoMFlLXTaVKapaFmqJGX9ar"; @@ -32,4 +30,5 @@ public class Constants { { return _P_KEY_PART1 + _P_KEY_PART2 + _P_KEY_PART3 + _P_KEY_PART4 + _P_KEY_PART5; } + */ } diff --git a/src/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java b/src/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java index c2f785ac..2451be69 100644 --- a/src/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java +++ b/src/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java @@ -1,11 +1,34 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.ListView; import java.util.ArrayList; import android.annotation.SuppressLint; +import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; +import android.os.Build; import android.preference.PreferenceManager; import android.util.SparseArray; import android.view.LayoutInflater; @@ -210,6 +233,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter return ((AbstractItem)getGroup(groupPosition)).id_database; } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("CutPasteId") @Override public View getGroupView(int groupPosition, boolean isExpanded, @@ -319,7 +343,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter //viewHolder.txt_UnreadCount.setText(group.unreadCount); - viewHolder.imgView.setRotation(0); + viewHolder.imgView.setRotation(0);//TODO setRotation is only available in api > 11 if(group.idFolder != null) { if(group.idFolder.equals(ITEMS_WITHOUT_FOLDER)) diff --git a/src/de/luhmer/owncloudnewsreader/ListView/UnreadFeedCount.java b/src/de/luhmer/owncloudnewsreader/ListView/UnreadFeedCount.java index bd85e479..9f07d82e 100644 --- a/src/de/luhmer/owncloudnewsreader/ListView/UnreadFeedCount.java +++ b/src/de/luhmer/owncloudnewsreader/ListView/UnreadFeedCount.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.ListView; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/ListView/UnreadFolderCount.java b/src/de/luhmer/owncloudnewsreader/ListView/UnreadFolderCount.java index 1d64ea25..4c02faa3 100644 --- a/src/de/luhmer/owncloudnewsreader/ListView/UnreadFolderCount.java +++ b/src/de/luhmer/owncloudnewsreader/ListView/UnreadFolderCount.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.ListView; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/LoginDialogFragment.java b/src/de/luhmer/owncloudnewsreader/LoginDialogFragment.java index dabd50d6..a1b3c9a7 100644 --- a/src/de/luhmer/owncloudnewsreader/LoginDialogFragment.java +++ b/src/de/luhmer/owncloudnewsreader/LoginDialogFragment.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.net.MalformedURLException; @@ -47,13 +68,15 @@ public class LoginDialogFragment extends SherlockDialogFragment { private String mUsername; private String mPassword; private String mOc_root_path; - private boolean mCbAllowAllSSL; + //private boolean mCbAllowAllSSL; + private boolean mCbDisableHostnameVerification; // UI references. private EditText mUsernameView; private EditText mPasswordView; private EditText mOc_root_path_View; - private CheckBox mCbAllowAllSSLView; + //private CheckBox mCbAllowAllSSLView; + private CheckBox mCbDisableHostnameVerificationView; //private View mLoginFormView; //private View mLoginStatusView; @@ -93,7 +116,8 @@ public class LoginDialogFragment extends SherlockDialogFragment { mUsername = mPrefs.getString(SettingsActivity.EDT_USERNAME_STRING, null); mPassword = mPrefs.getString(SettingsActivity.EDT_PASSWORD_STRING, null); mOc_root_path = mPrefs.getString(SettingsActivity.EDT_OWNCLOUDROOTPATH_STRING, null); - mCbAllowAllSSL = mPrefs.getBoolean(SettingsActivity.CB_ALLOWALLSSLCERTIFICATES_STRING, false); + //mCbAllowAllSSL = mPrefs.getBoolean(SettingsActivity.CB_ALLOWALLSSLCERTIFICATES_STRING, false); + mCbDisableHostnameVerification = mPrefs.getBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, false); /* @@ -116,14 +140,14 @@ public class LoginDialogFragment extends SherlockDialogFragment { mOc_root_path_View = (EditText) view.findViewById(R.id.edt_owncloudRootPath); mOc_root_path_View.setText(mOc_root_path); - mCbAllowAllSSLView = (CheckBox) view.findViewById(R.id.cb_AllowAllSSLCertificates); - mCbAllowAllSSLView.setChecked(mCbAllowAllSSL); - mCbAllowAllSSLView.setOnCheckedChangeListener(new OnCheckedChangeListener() { + mCbDisableHostnameVerificationView = (CheckBox) view.findViewById(R.id.cb_AllowAllSSLCertificates); + mCbDisableHostnameVerificationView.setChecked(mCbDisableHostnameVerification); + mCbDisableHostnameVerificationView.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); mPrefs.edit() - .putBoolean(SettingsActivity.CB_ALLOWALLSSLCERTIFICATES_STRING, isChecked) + .putBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, isChecked) .commit(); } }); diff --git a/src/de/luhmer/owncloudnewsreader/NewsDetailActivity.java b/src/de/luhmer/owncloudnewsreader/NewsDetailActivity.java index fbf1e2a1..50826a0a 100644 --- a/src/de/luhmer/owncloudnewsreader/NewsDetailActivity.java +++ b/src/de/luhmer/owncloudnewsreader/NewsDetailActivity.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/NewsDetailFragment.java b/src/de/luhmer/owncloudnewsreader/NewsDetailFragment.java index 9966086d..b21ef076 100644 --- a/src/de/luhmer/owncloudnewsreader/NewsDetailFragment.java +++ b/src/de/luhmer/owncloudnewsreader/NewsDetailFragment.java @@ -1,8 +1,28 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.io.File; import java.io.InputStream; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; diff --git a/src/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java b/src/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java index 439fb309..0372b40d 100644 --- a/src/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java +++ b/src/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.util.ArrayList; @@ -48,11 +69,12 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO //private boolean DialogShowedToMarkLastItemsAsRead = false; + /* private NewsListCursorAdapter lvAdapter; public NewsListCursorAdapter getLvAdapter() { return lvAdapter; - } + }*/ String idFeed; /** @@ -89,7 +111,7 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setRetainInstance(true); + //setRetainInstance(true); //dbConn = new DatabaseConnection(getActivity()); @@ -111,7 +133,7 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO //getListView().setLayerType(View.LAYER_TYPE_SOFTWARE, null); //lvAdapter = null; - lvAdapter = new NewsListCursorAdapter(getActivity(), null, this); + NewsListCursorAdapter lvAdapter = new NewsListCursorAdapter(getActivity(), null, this); setListAdapter(lvAdapter); getActivity().getSupportLoaderManager().destroyLoader(0); @@ -194,8 +216,8 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO @Override public void onDestroy() { - if(lvAdapter != null) - lvAdapter.CloseDatabaseConnection(); + //if(lvAdapter != null) + // lvAdapter.CloseDatabaseConnection(); //if(lvAdapter != null) // lvAdapter.CloseDatabaseConnection(); //if(dbConn != null) @@ -217,13 +239,17 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO @Override public void onLoadFinished(Loader loader, Cursor cursor) { - ((NewsListCursorAdapter) getListAdapter()).swapCursor(cursor); + NewsListCursorAdapter nca = (NewsListCursorAdapter) getListAdapter(); + if(nca != null) + nca.swapCursor(cursor); //((NewsListCursorAdapter) getListAdapter()).changeCursor(cursor); } @Override public void onLoaderReset(Loader loader) { - ((NewsListCursorAdapter) getListAdapter()).swapCursor(null); + NewsListCursorAdapter nca = (NewsListCursorAdapter) getListAdapter(); + if(nca != null) + ((NewsListCursorAdapter) getListAdapter()).swapCursor(null); } }); @@ -234,6 +260,13 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO ex.printStackTrace(); } } + + public void notifyDataSetChangedOnAdapter() + { + NewsListCursorAdapter nca = (NewsListCursorAdapter) getListAdapter(); + if(nca != null) + ((NewsListCursorAdapter) getListAdapter()).notifyDataSetChanged(); + } public static Cursor getRightCusor(Context context, String idFolder, String idFeed) { diff --git a/src/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java b/src/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java index 22d75c76..ab59258a 100644 --- a/src/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java +++ b/src/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import android.annotation.TargetApi; @@ -20,6 +41,7 @@ import com.actionbarsherlock.view.MenuItem; import com.handmark.pulltorefresh.library.BlockingExpandableListView; import com.handmark.pulltorefresh.library.PullToRefreshExpandableListView; +import de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAdapter; import de.luhmer.owncloudnewsreader.database.DatabaseConnection; import de.luhmer.owncloudnewsreader.helper.MenuUtilsSherlockFragmentActivity; import de.luhmer.owncloudnewsreader.helper.ThemeChooser; @@ -154,16 +176,14 @@ public class NewsReaderListActivity extends MenuUtilsSherlockFragmentActivity im //if(mPrefs.getBoolean(SettingsActivity.CB_SYNCONSTARTUP_STRING, false)) // startSync(); - if(shouldDrawerStayOpen()) { - //LinearLayout ll_expListView = (LinearLayout) findViewById(R.id.expandableListView_LinearLayoutWrapper); - //ll_expListView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT)); - } - - //if(!shouldDrawerStayOpen()) { - // getSupportActionBar().setDisplayHomeAsUpEnabled(true); - // getSupportActionBar().setHomeButtonEnabled(true); - //} + /* + if(!shouldDrawerStayOpen()) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + }*/ + startDetailFHolder = new StartDetailFragmentHolder(SubscriptionExpandableListAdapter.ALL_UNREAD_ITEMS, true, null); + startDetailFHolder.StartDetailFragment(); //onTopItemClicked(SubscriptionExpandableListAdapter.ALL_UNREAD_ITEMS, true, null); } @@ -224,7 +244,7 @@ public class NewsReaderListActivity extends MenuUtilsSherlockFragmentActivity im super.onResume(); } - private boolean shouldDrawerStayOpen() { + public boolean shouldDrawerStayOpen() { if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); @@ -285,7 +305,7 @@ public class NewsReaderListActivity extends MenuUtilsSherlockFragmentActivity im if(!shouldDrawerStayOpen()) mSlidingLayout.closePane(); - startDetailFHolder = new StartDetailFragmentHolder(idSubscription, isFolder, optional_folder_id); + startDetailFHolder = new StartDetailFragmentHolder(idSubscription, isFolder, optional_folder_id); //StartDetailFragment(idSubscription, isFolder, optional_folder_id); } @@ -512,7 +532,7 @@ public class NewsReaderListActivity extends MenuUtilsSherlockFragmentActivity im //@TargetApi(Build.VERSION_CODES.FROYO) public static void UpdateListViewAndScrollToPos(FragmentActivity act, int pos) { - ((NewsReaderDetailFragment) act.getSupportFragmentManager().findFragmentById(R.id.content_frame)).getLvAdapter().notifyDataSetChanged(); + ((NewsReaderDetailFragment) act.getSupportFragmentManager().findFragmentById(R.id.content_frame)).notifyDataSetChangedOnAdapter(); //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) //((NewsReaderDetailFragment) act.getSupportFragmentManager().findFragmentById(R.id.newsreader_detail_container)).getListView().smoothScrollToPosition(pos); //else diff --git a/src/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java b/src/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java index b9bd5271..2dc54624 100644 --- a/src/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java +++ b/src/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import org.apache.http.client.HttpResponseException; @@ -120,7 +141,7 @@ public class NewsReaderListFragment extends SherlockFragment implements OnCreate public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setRetainInstance(true); + //setRetainInstance(true); try { diff --git a/src/de/luhmer/owncloudnewsreader/SettingsActivity.java b/src/de/luhmer/owncloudnewsreader/SettingsActivity.java index 44d18a8c..9c341382 100644 --- a/src/de/luhmer/owncloudnewsreader/SettingsActivity.java +++ b/src/de/luhmer/owncloudnewsreader/SettingsActivity.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.io.File; @@ -57,13 +78,13 @@ public class SettingsActivity extends SherlockPreferenceActivity { public static final String EDT_OWNCLOUDROOTPATH_STRING = "edt_owncloudRootPath"; public static final String EDT_CLEAR_CACHE = "edt_clearCache"; - public static final String CB_ALLOWALLSSLCERTIFICATES_STRING = "cb_AllowAllSSLCertificates"; + //public static final String CB_ALLOWALLSSLCERTIFICATES_STRING = "cb_AllowAllSSLCertificates"; public static final String CB_SYNCONSTARTUP_STRING = "cb_AutoSyncOnStart"; public static final String CB_SHOWONLYUNREAD_STRING = "cb_ShowOnlyUnread"; public static final String CB_NAVIGATE_WITH_VOLUME_BUTTONS_STRING = "cb_NavigateWithVolumeButtons"; public static final String CB_CACHE_IMAGES_OFFLINE_STRING = "cb_cacheImagesOffline"; public static final String CB_MARK_AS_READ_WHILE_SCROLLING_STRING = "cb_MarkAsReadWhileScrolling"; - + public static final String CB_DISABLE_HOSTNAME_VERIFICATION_STRING = "cb_DisableHostnameVerification"; public static final String SP_APP_THEME = "sp_app_theme"; diff --git a/src/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java b/src/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java index 16e4bb00..01d9c86f 100644 --- a/src/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java +++ b/src/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader; import java.io.InputStream; diff --git a/src/de/luhmer/owncloudnewsreader/async_tasks/AsyncTask_DownloadImages.java b/src/de/luhmer/owncloudnewsreader/async_tasks/AsyncTask_DownloadImages.java index bdb38a80..3c59257d 100644 --- a/src/de/luhmer/owncloudnewsreader/async_tasks/AsyncTask_DownloadImages.java +++ b/src/de/luhmer/owncloudnewsreader/async_tasks/AsyncTask_DownloadImages.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.async_tasks; import java.util.List; diff --git a/src/de/luhmer/owncloudnewsreader/async_tasks/FillTextForTextViewAsyncTask.java b/src/de/luhmer/owncloudnewsreader/async_tasks/FillTextForTextViewAsyncTask.java index 90c7d204..ec566e06 100644 --- a/src/de/luhmer/owncloudnewsreader/async_tasks/FillTextForTextViewAsyncTask.java +++ b/src/de/luhmer/owncloudnewsreader/async_tasks/FillTextForTextViewAsyncTask.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.async_tasks; import android.os.AsyncTask; diff --git a/src/de/luhmer/owncloudnewsreader/async_tasks/GetImageAsyncTask.java b/src/de/luhmer/owncloudnewsreader/async_tasks/GetImageAsyncTask.java index b35f8c32..82461b84 100644 --- a/src/de/luhmer/owncloudnewsreader/async_tasks/GetImageAsyncTask.java +++ b/src/de/luhmer/owncloudnewsreader/async_tasks/GetImageAsyncTask.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.async_tasks; import java.io.BufferedInputStream; @@ -18,13 +39,9 @@ import org.apache.http.util.ByteArrayBuffer; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.preference.PreferenceManager; import de.luhmer.owncloudnewsreader.SettingsActivity; -import de.luhmer.owncloudnewsreader.database.DatabaseConnection; -import de.luhmer.owncloudnewsreader.helper.ColourCalculator; import de.luhmer.owncloudnewsreader.helper.ImageDownloadFinished; import de.luhmer.owncloudnewsreader.helper.ImageHandler; diff --git a/src/de/luhmer/owncloudnewsreader/async_tasks/IGetTextForTextViewAsyncTask.java b/src/de/luhmer/owncloudnewsreader/async_tasks/IGetTextForTextViewAsyncTask.java index 404d7b26..ddc22003 100644 --- a/src/de/luhmer/owncloudnewsreader/async_tasks/IGetTextForTextViewAsyncTask.java +++ b/src/de/luhmer/owncloudnewsreader/async_tasks/IGetTextForTextViewAsyncTask.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.async_tasks; public interface IGetTextForTextViewAsyncTask { diff --git a/src/de/luhmer/owncloudnewsreader/cursor/IOnStayUnread.java b/src/de/luhmer/owncloudnewsreader/cursor/IOnStayUnread.java index b2eaa17f..90ca8e73 100644 --- a/src/de/luhmer/owncloudnewsreader/cursor/IOnStayUnread.java +++ b/src/de/luhmer/owncloudnewsreader/cursor/IOnStayUnread.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.cursor; import com.devspark.robototextview.widget.RobotoCheckBox; diff --git a/src/de/luhmer/owncloudnewsreader/cursor/NewsListCursorAdapter.java b/src/de/luhmer/owncloudnewsreader/cursor/NewsListCursorAdapter.java index 73256a21..3535cbc1 100644 --- a/src/de/luhmer/owncloudnewsreader/cursor/NewsListCursorAdapter.java +++ b/src/de/luhmer/owncloudnewsreader/cursor/NewsListCursorAdapter.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.cursor; import android.annotation.SuppressLint; diff --git a/src/de/luhmer/owncloudnewsreader/cursor/SimpleCursorLoader.java b/src/de/luhmer/owncloudnewsreader/cursor/SimpleCursorLoader.java index feced7ad..85162955 100644 --- a/src/de/luhmer/owncloudnewsreader/cursor/SimpleCursorLoader.java +++ b/src/de/luhmer/owncloudnewsreader/cursor/SimpleCursorLoader.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.cursor; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/data/AbstractItem.java b/src/de/luhmer/owncloudnewsreader/data/AbstractItem.java index fde3450f..2753f8df 100644 --- a/src/de/luhmer/owncloudnewsreader/data/AbstractItem.java +++ b/src/de/luhmer/owncloudnewsreader/data/AbstractItem.java @@ -1,8 +1,26 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.data; -/** - * Created by David on 24.05.13. - */ public abstract class AbstractItem { public long id_database; diff --git a/src/de/luhmer/owncloudnewsreader/data/ConcreteFeedItem.java b/src/de/luhmer/owncloudnewsreader/data/ConcreteFeedItem.java index 0ec87c7d..dfc635bd 100644 --- a/src/de/luhmer/owncloudnewsreader/data/ConcreteFeedItem.java +++ b/src/de/luhmer/owncloudnewsreader/data/ConcreteFeedItem.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.data; public class ConcreteFeedItem { diff --git a/src/de/luhmer/owncloudnewsreader/data/FolderSubscribtionItem.java b/src/de/luhmer/owncloudnewsreader/data/FolderSubscribtionItem.java index 86d243c3..32a28046 100644 --- a/src/de/luhmer/owncloudnewsreader/data/FolderSubscribtionItem.java +++ b/src/de/luhmer/owncloudnewsreader/data/FolderSubscribtionItem.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.data; public class FolderSubscribtionItem extends AbstractItem { diff --git a/src/de/luhmer/owncloudnewsreader/data/RssFile.java b/src/de/luhmer/owncloudnewsreader/data/RssFile.java index e8cb9c78..6948dd6d 100644 --- a/src/de/luhmer/owncloudnewsreader/data/RssFile.java +++ b/src/de/luhmer/owncloudnewsreader/data/RssFile.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.data; import java.util.Date; diff --git a/src/de/luhmer/owncloudnewsreader/database/DatabaseConnection.java b/src/de/luhmer/owncloudnewsreader/database/DatabaseConnection.java index 0a545bf8..813b053d 100644 --- a/src/de/luhmer/owncloudnewsreader/database/DatabaseConnection.java +++ b/src/de/luhmer/owncloudnewsreader/database/DatabaseConnection.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.database; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/database/DatabaseHelper.java b/src/de/luhmer/owncloudnewsreader/database/DatabaseHelper.java index 85f9d72e..4fbedd68 100644 --- a/src/de/luhmer/owncloudnewsreader/database/DatabaseHelper.java +++ b/src/de/luhmer/owncloudnewsreader/database/DatabaseHelper.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.database; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/helper/BitmapDownloaderTask.java b/src/de/luhmer/owncloudnewsreader/helper/BitmapDownloaderTask.java index 556378bb..89c7e5f6 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/BitmapDownloaderTask.java +++ b/src/de/luhmer/owncloudnewsreader/helper/BitmapDownloaderTask.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import java.io.InputStream; diff --git a/src/de/luhmer/owncloudnewsreader/helper/ColourCalculator.java b/src/de/luhmer/owncloudnewsreader/helper/ColourCalculator.java index db7a9869..83c1f2d6 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/ColourCalculator.java +++ b/src/de/luhmer/owncloudnewsreader/helper/ColourCalculator.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.graphics.Bitmap; diff --git a/src/de/luhmer/owncloudnewsreader/helper/CustomHostnameVerifier.java b/src/de/luhmer/owncloudnewsreader/helper/CustomHostnameVerifier.java deleted file mode 100644 index 894efa54..00000000 --- a/src/de/luhmer/owncloudnewsreader/helper/CustomHostnameVerifier.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.luhmer.owncloudnewsreader.helper; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLException; -import javax.net.ssl.SSLPeerUnverifiedException; -import javax.net.ssl.SSLSession; -import javax.security.cert.X509Certificate; - -import org.apache.http.conn.ssl.AbstractVerifier; -import org.apache.http.conn.ssl.StrictHostnameVerifier; - -import android.util.Log; - -public class CustomHostnameVerifier implements HostnameVerifier { - - private static final String TAG = "CustomHostnameVerifier"; - - @Override - public boolean verify(String hostname, SSLSession session) { - Log.d(TAG, session.getCipherSuite().toString()); - try { - if(hostname.equals(session.getPeerCertificates()[0])) - { - return true; - } - } catch (SSLPeerUnverifiedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return false; - } -} diff --git a/src/de/luhmer/owncloudnewsreader/helper/CustomSSLSocketFactory.java b/src/de/luhmer/owncloudnewsreader/helper/CustomSSLSocketFactory.java deleted file mode 100644 index 849180bc..00000000 --- a/src/de/luhmer/owncloudnewsreader/helper/CustomSSLSocketFactory.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.luhmer.owncloudnewsreader.helper; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; -import java.net.UnknownHostException; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; - -import org.apache.http.conn.ConnectTimeoutException; -import org.apache.http.conn.scheme.LayeredSocketFactory; -import org.apache.http.conn.ssl.X509HostnameVerifier; -import org.apache.http.params.HttpParams; - -public class CustomSSLSocketFactory implements LayeredSocketFactory {/* extends SSLSocketFactory {*/ - - private SSLSocketFactory socketFactory; - private X509HostnameVerifier hostnameVerifier; - - public CustomSSLSocketFactory(SSLContext sslCtx, - X509HostnameVerifier hostnameVerifier) { - this.socketFactory = sslCtx.getSocketFactory(); - this.hostnameVerifier = hostnameVerifier; - } - - //.. - - @Override - public Socket createSocket() throws IOException { - return socketFactory.createSocket(); - } - - @Override - public Socket connectSocket(Socket arg0, String arg1, int arg2, - InetAddress arg3, int arg4, HttpParams arg5) throws IOException, - UnknownHostException, ConnectTimeoutException { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean isSecure(Socket arg0) throws IllegalArgumentException { - // TODO Auto-generated method stub - return false; - } - - @Override - public Socket createSocket(Socket arg0, String arg1, int arg2, boolean arg3) - throws IOException, UnknownHostException { - // TODO Auto-generated method stub - return null; - } - - /* - public static KeyStore getTruststore() { - KeyStore truststore = null; - try { - truststore = KeyStore.getInstance("BKS"); - truststore.load(null, null); - } catch (Exception e) { - e.printStackTrace(); - } - - return truststore; - } - - private SSLContext sslContext = SSLContext.getInstance("TLS"); - - public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { - super(truststore); - - TrustManager tm = new X509TrustManager() { - - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - }; - - sslContext.init(null, new TrustManager[] {tm}, null); - - // Registering schemes for both HTTP and HTTPS - SchemeRegistry registry = new SchemeRegistry(); - //SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); - registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); - setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - registry.register(new Scheme("https", this, 443)); - } - - @Override - public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { - return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); - } - - @Override - public Socket createSocket() throws IOException { - return sslContext.getSocketFactory().createSocket(); - }*/ -} diff --git a/src/de/luhmer/owncloudnewsreader/helper/CustomTrustManager.java b/src/de/luhmer/owncloudnewsreader/helper/CustomTrustManager.java deleted file mode 100644 index ea945202..00000000 --- a/src/de/luhmer/owncloudnewsreader/helper/CustomTrustManager.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.luhmer.owncloudnewsreader.helper; - -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.X509TrustManager; - -public class CustomTrustManager implements X509TrustManager { - // Create a trust manager that does not validate certificate chains - - @Override - public void checkClientTrusted(X509Certificate[] chain, - String authType) throws CertificateException { - // TODO Auto-generated method stub - - } - - @Override - public void checkServerTrusted(X509Certificate[] chain, - String authType) throws CertificateException { - // TODO Auto-generated method stub - - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - // TODO Auto-generated method stub - return null; - } -} \ No newline at end of file diff --git a/src/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java b/src/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java index 56882bbf..f8d8f9ad 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java +++ b/src/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import java.io.File; diff --git a/src/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java b/src/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java index a94a5f01..fe191ea1 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java +++ b/src/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import java.io.File; diff --git a/src/de/luhmer/owncloudnewsreader/helper/FileUtils.java b/src/de/luhmer/owncloudnewsreader/helper/FileUtils.java index 8eda2dbc..d329987c 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/FileUtils.java +++ b/src/de/luhmer/owncloudnewsreader/helper/FileUtils.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import java.io.FileInputStream; diff --git a/src/de/luhmer/owncloudnewsreader/helper/FontHelper.java b/src/de/luhmer/owncloudnewsreader/helper/FontHelper.java index 619c6242..802867d4 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/FontHelper.java +++ b/src/de/luhmer/owncloudnewsreader/helper/FontHelper.java @@ -1,10 +1,30 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Typeface; import android.preference.PreferenceManager; -import android.renderscript.Font.Style; import android.util.SparseIntArray; import android.view.View; import android.view.ViewGroup; diff --git a/src/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java b/src/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java index a125acf3..814cd476 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java +++ b/src/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; diff --git a/src/de/luhmer/owncloudnewsreader/helper/ImageHandler.java b/src/de/luhmer/owncloudnewsreader/helper/ImageHandler.java index 91d2c272..44dc65c0 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/ImageHandler.java +++ b/src/de/luhmer/owncloudnewsreader/helper/ImageHandler.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import java.io.File; @@ -15,9 +36,6 @@ import android.graphics.drawable.Drawable; import android.os.Environment; import de.luhmer.owncloudnewsreader.R; -/** - * Created by David on 24.05.13. - */ public class ImageHandler { //private static final String TAG = "DownloadImagesFromWeb"; diff --git a/src/de/luhmer/owncloudnewsreader/helper/MenuUtilsSherlockFragmentActivity.java b/src/de/luhmer/owncloudnewsreader/helper/MenuUtilsSherlockFragmentActivity.java index 790aa4b9..a89b0c09 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/MenuUtilsSherlockFragmentActivity.java +++ b/src/de/luhmer/owncloudnewsreader/helper/MenuUtilsSherlockFragmentActivity.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.annotation.TargetApi; diff --git a/src/de/luhmer/owncloudnewsreader/helper/MyTrustManager.java b/src/de/luhmer/owncloudnewsreader/helper/MyTrustManager.java deleted file mode 100644 index fe9d16c7..00000000 --- a/src/de/luhmer/owncloudnewsreader/helper/MyTrustManager.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.luhmer.owncloudnewsreader.helper; - -import java.security.KeyStore; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.X509TrustManager; - -public class MyTrustManager implements X509TrustManager { - - private X509TrustManager defaultTrustManager; - - public MyTrustManager() { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - try { - defaultTrustManager.checkServerTrusted(chain, authType); - } catch (CertificateException ce) { - - } - } - - @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - // TODO Auto-generated method stub - - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java b/src/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java index cf68c7e4..dd3c0123 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java +++ b/src/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java b/src/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java index 7c647d68..5e87ba71 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java +++ b/src/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/helper/SSLHttpClient.java b/src/de/luhmer/owncloudnewsreader/helper/SSLHttpClient.java deleted file mode 100644 index a2531516..00000000 --- a/src/de/luhmer/owncloudnewsreader/helper/SSLHttpClient.java +++ /dev/null @@ -1,110 +0,0 @@ -package de.luhmer.owncloudnewsreader.helper; - -import android.content.Context; - -import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.SingleClientConnManager; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import java.io.IOException; -import java.net.Socket; -import java.net.UnknownHostException; -import java.security.*; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -/** - * Created by David on 27.05.13. - */ -public class SSLHttpClient extends DefaultHttpClient { - final Context context; - TrustManager easyTrustManager = new X509TrustManager() { - @Override - public void checkClientTrusted( - X509Certificate[] chain, - String authType) throws CertificateException { - } - - @Override - public void checkServerTrusted( - X509Certificate[] chain, - String authType) throws CertificateException { - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - }; - public SSLHttpClient(Context context) { - this.context = context; - } - - @Override protected ClientConnectionManager createClientConnectionManager() { - SchemeRegistry registry = new SchemeRegistry(); - registry.register( - new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); - registry.register(new Scheme("https", newSslSocketFactory(), 443)); - return new SingleClientConnManager(getParams(), registry); - } - - - private MySSLSocketFactory newSslSocketFactory() { - try { - KeyStore trusted = KeyStore.getInstance("BKS"); - try { - trusted.load(null, null); - } finally { - } - - MySSLSocketFactory sslfactory = new MySSLSocketFactory(trusted); - sslfactory.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); - //sslfactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - - return sslfactory; - } catch (Exception e) { - throw new AssertionError(e); - } - - } - public class MySSLSocketFactory extends SSLSocketFactory { - SSLContext sslContext = SSLContext.getInstance("TLS"); - - public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { - super(truststore); - - TrustManager tm = new X509TrustManager() { - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - } - - public X509Certificate[] getAcceptedIssuers() { - return null; - } - }; - - sslContext.init(null, new TrustManager[] { tm }, null); - } - - @Override - public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { - return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); - } - - @Override - public Socket createSocket() throws IOException { - return sslContext.getSocketFactory().createSocket(); - } - } -} diff --git a/src/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java b/src/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java index eec4e2e0..3edbf610 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java +++ b/src/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java @@ -1,16 +1,34 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; -import com.actionbarsherlock.R.color; - -import de.luhmer.owncloudnewsreader.R; -import de.luhmer.owncloudnewsreader.SettingsActivity; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; -import android.view.View; +import de.luhmer.owncloudnewsreader.R; +import de.luhmer.owncloudnewsreader.SettingsActivity; public class ThemeChooser { diff --git a/src/de/luhmer/owncloudnewsreader/helper/URLSpanNoUnderline.java b/src/de/luhmer/owncloudnewsreader/helper/URLSpanNoUnderline.java index 0734fc8d..e872348d 100644 --- a/src/de/luhmer/owncloudnewsreader/helper/URLSpanNoUnderline.java +++ b/src/de/luhmer/owncloudnewsreader/helper/URLSpanNoUnderline.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.helper; import android.text.Spannable; @@ -5,9 +26,6 @@ import android.text.TextPaint; import android.text.style.URLSpan; import android.widget.TextView; -/** - * Created by David on 26.05.13. - */ public class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String url) { super(url); diff --git a/src/de/luhmer/owncloudnewsreader/interfaces/AsyncUpdateFinished.java b/src/de/luhmer/owncloudnewsreader/interfaces/AsyncUpdateFinished.java index faad4742..81a96452 100644 --- a/src/de/luhmer/owncloudnewsreader/interfaces/AsyncUpdateFinished.java +++ b/src/de/luhmer/owncloudnewsreader/interfaces/AsyncUpdateFinished.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.interfaces; public interface AsyncUpdateFinished { diff --git a/src/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java b/src/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java index 8501abac..7954d714 100644 --- a/src/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java +++ b/src/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.interfaces; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/preference/SigninPreference.java b/src/de/luhmer/owncloudnewsreader/preference/SigninPreference.java deleted file mode 100644 index a1a99896..00000000 --- a/src/de/luhmer/owncloudnewsreader/preference/SigninPreference.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.luhmer.owncloudnewsreader.preference; - -import android.content.Context; -import android.preference.DialogPreference; -import android.util.AttributeSet; -import android.view.View; - -public class SigninPreference extends DialogPreference { - - public SigninPreference(Context context, AttributeSet attrs) { - super(context, attrs); - - } - - // along with constructors, you will want to override - @Override - protected void onBindDialogView(View view) { - super.onBindDialogView(view); - // view is your layout expanded and added to the dialog - // find and hang on to your views here, add click listeners etc - // basically things you would do in onCreate - //mTextView = (TextView)view.findViewById(R.Id.mytextview); - } - - @Override - protected void onDialogClosed(boolean positiveResult) { - super.onDialogClosed(positiveResult); - - if (positiveResult) { - // deal with persisting your values here - } - } -} diff --git a/src/de/luhmer/owncloudnewsreader/reader/AsyncTask_Reader.java b/src/de/luhmer/owncloudnewsreader/reader/AsyncTask_Reader.java index 25c9432c..6920f7ba 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/AsyncTask_Reader.java +++ b/src/de/luhmer/owncloudnewsreader/reader/AsyncTask_Reader.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/DownloadItemsToCache.java b/src/de/luhmer/owncloudnewsreader/reader/DownloadItemsToCache.java index 842ac5eb..1eb11f86 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/DownloadItemsToCache.java +++ b/src/de/luhmer/owncloudnewsreader/reader/DownloadItemsToCache.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java b/src/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java index 02eb6319..4106c375 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java +++ b/src/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; public class FeedItemTags { diff --git a/src/de/luhmer/owncloudnewsreader/reader/GoogleReaderApi/GoogleReaderMethods.java b/src/de/luhmer/owncloudnewsreader/reader/GoogleReaderApi/GoogleReaderMethods.java index 931b0737..943ae558 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/GoogleReaderApi/GoogleReaderMethods.java +++ b/src/de/luhmer/owncloudnewsreader/reader/GoogleReaderApi/GoogleReaderMethods.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.GoogleReaderApi; import java.io.IOException; diff --git a/src/de/luhmer/owncloudnewsreader/reader/HttpJsonRequest.java b/src/de/luhmer/owncloudnewsreader/reader/HttpJsonRequest.java index cbb3eb86..de23cc56 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/HttpJsonRequest.java +++ b/src/de/luhmer/owncloudnewsreader/reader/HttpJsonRequest.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; import java.io.IOException; @@ -5,28 +26,26 @@ import java.io.InputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLConnection; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.util.List; -import java.util.Locale; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; import org.apache.http.NameValuePair; import org.apache.http.auth.AuthenticationException; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; -import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import de.luhmer.owncloudnewsreader.SettingsActivity; -import de.luhmer.owncloudnewsreader.helper.CustomTrustManager; import de.luhmer.owncloudnewsreader.reader.owncloud.API; +import de.luhmer.owncloudnewsreader.ssl.MemorizingTrustManager; import de.luhmer.owncloudnewsreader.util.Base64; public class HttpJsonRequest { @@ -93,6 +112,41 @@ public class HttpJsonRequest { } + private static HttpURLConnection getUrlConnection(URL url, Context context, String username, String password) throws IOException, KeyManagementException, NoSuchAlgorithmException { + URLConnection urlConnection = url.openConnection(); + + // If https is used, use MemorizingTrustManager for certificate verification + if (urlConnection instanceof HttpsURLConnection) { + HttpsURLConnection httpsURLConnection = (HttpsURLConnection) urlConnection; + + // set location of the keystore + MemorizingTrustManager.setKeyStoreFile("private", "sslkeys.bks"); + + // register MemorizingTrustManager for HTTPS + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, MemorizingTrustManager.getInstanceList(context), + new java.security.SecureRandom()); + httpsURLConnection.setSSLSocketFactory(sc.getSocketFactory()); + + // disable redirects to reduce possible confusion + //httpsURLConnection.setFollowRedirects(false); + + // disable hostname verification, when preference is set + // (this still shows a certification dialog, which requires user interaction!) + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); + if(sp.getBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, false)) + httpsURLConnection.setHostnameVerifier(new AllowAllHostnameVerifier()); + else + httpsURLConnection.setHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier()); + } + + if(username != null && password != null) + urlConnection.setRequestProperty("Authorization", "Basic " + Base64.encode((username + ":" + password).getBytes())); + + return (HttpURLConnection) urlConnection; + } + + /* private static HttpURLConnection getUrlConnection(URL url, Context context, String username, String password) throws IOException, KeyManagementException, NoSuchAlgorithmException { HttpURLConnection urlConnection = null; if(url.getProtocol().toLowerCase(Locale.ENGLISH).equals("http")) @@ -122,6 +176,7 @@ public class HttpJsonRequest { return urlConnection; } + */ @SuppressLint("DefaultLocale") diff --git a/src/de/luhmer/owncloudnewsreader/reader/IReader.java b/src/de/luhmer/owncloudnewsreader/reader/IReader.java index 8cf4a031..5eedf2f1 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/IReader.java +++ b/src/de/luhmer/owncloudnewsreader/reader/IReader.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java b/src/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java index 3a98e937..903a8216 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java +++ b/src/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java b/src/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java index b4db6a00..9b129c31 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java +++ b/src/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader; public interface OnAsyncTaskCompletedListener { diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/API.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/API.java index 2c17ecb9..3fb1db92 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/API.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/API.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.util.List; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetApiVersion.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetApiVersion.java index d5b5337a..6c964093 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetApiVersion.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetApiVersion.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFeeds.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFeeds.java index 82dfbd16..4b16537a 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFeeds.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFeeds.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.content.Context; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFolderTags.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFolderTags.java index f8b75286..56bd2c47 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFolderTags.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetFolderTags.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetItems.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetItems.java index 2d3590df..1d8a10f4 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetItems.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetItems.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetOldItems.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetOldItems.java index 29be9287..0c9417fa 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetOldItems.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_GetOldItems.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_PerformItemStateChange.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_PerformItemStateChange.java index b7c684bc..b5ee7908 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_PerformItemStateChange.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/AsyncTask_PerformItemStateChange.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v1.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v1.java index 9ab729fc..37375b92 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v1.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v1.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import org.json.JSONObject; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v2.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v2.java index 861c5b76..f34ac4b2 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v2.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/GetVersion_v2.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import org.json.JSONObject; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/IHandleJsonObject.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/IHandleJsonObject.java index f4ad987c..a83d1056 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/IHandleJsonObject.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/IHandleJsonObject.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import org.json.JSONObject; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFeedIntoDatabase.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFeedIntoDatabase.java index 4be98ea6..ebcdef4e 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFeedIntoDatabase.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFeedIntoDatabase.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFolderIntoDatabase.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFolderIntoDatabase.java index d6885084..2986dce9 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFolderIntoDatabase.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertFolderIntoDatabase.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertItemIntoDatabase.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertItemIntoDatabase.java index 3c5d3efd..88727dfe 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertItemIntoDatabase.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/InsertItemIntoDatabase.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.util.Date; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudConstants.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudConstants.java index a95f3644..12af3324 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudConstants.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudConstants.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; public class OwnCloudConstants { diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudReaderMethods.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudReaderMethods.java index 52223d9a..2b6ed68e 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudReaderMethods.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloudReaderMethods.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import java.io.IOException; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloud_Reader.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloud_Reader.java index df1c2301..446418cd 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloud_Reader.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/OwnCloud_Reader.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud; import android.app.Activity; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv1/APIv1.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv1/APIv1.java index ebaed91e..95e9e304 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv1/APIv1.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv1/APIv1.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud.apiv1; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv2/APIv2.java b/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv2/APIv2.java index b67f2224..f33c00f0 100644 --- a/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv2/APIv2.java +++ b/src/de/luhmer/owncloudnewsreader/reader/owncloud/apiv2/APIv2.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.reader.owncloud.apiv2; import java.util.List; diff --git a/src/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java b/src/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java index 32d0fae8..43f5d4e3 100644 --- a/src/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java +++ b/src/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.services; import java.util.ArrayList; diff --git a/src/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java b/src/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java index a0018b87..6092a4ba 100644 --- a/src/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java +++ b/src/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.services; import android.app.ActivityManager; diff --git a/src/de/luhmer/owncloudnewsreader/services/SyncService.java b/src/de/luhmer/owncloudnewsreader/services/SyncService.java index e044c752..9ce32d75 100644 --- a/src/de/luhmer/owncloudnewsreader/services/SyncService.java +++ b/src/de/luhmer/owncloudnewsreader/services/SyncService.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.services; import android.app.Service; diff --git a/src/de/luhmer/owncloudnewsreader/updater/AppUpdater.java b/src/de/luhmer/owncloudnewsreader/updater/AppUpdater.java deleted file mode 100644 index 665b39f0..00000000 --- a/src/de/luhmer/owncloudnewsreader/updater/AppUpdater.java +++ /dev/null @@ -1,208 +0,0 @@ -package de.luhmer.owncloudnewsreader.updater; - -import java.io.File; -import java.util.Date; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.util.EntityUtils; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.DownloadManager; -import android.app.DownloadManager.Query; -import android.app.DownloadManager.Request; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Environment; -import android.preference.PreferenceManager; -import android.widget.Toast; -import de.luhmer.owncloudnewsreader.Constants; - -public class AppUpdater { - private long enqueue; - private DownloadManager dm; - private Activity act; - private Boolean forceUpdate; - - static String VERSION = "0.5.0.0"; - - public AppUpdater(Activity act, Boolean forceUpdate){ - this.act = act; - this.forceUpdate = forceUpdate; - } - - @SuppressWarnings("deprecation") - public void UpdateApp() - { - if(!forceUpdate) - { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(act); - long dt = sharedPref.getLong("last_update", 0); - Date date = new Date(); - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - Date date2 = new Date(dt); - date2.setHours(0); - date2.setMinutes(0); - date2.setSeconds(0); - - long diffInSeconds = (date2.getTime() - date.getTime()) / 1000; - double diffInDays = (((diffInSeconds / 60d) / 60d) / 24d); - - if(diffInDays != 0) - { - CheckVersion cv = new CheckVersion(); - cv.execute(); - sharedPref.edit().putLong("last_update", date.getTime()).commit(); - } - } - else - { - CheckVersion cv = new CheckVersion(); - cv.execute(); - } - } - - private void DownloadApp() - { - BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { - //long downloadId = intent.getLongExtra( - // DownloadManager.EXTRA_DOWNLOAD_ID, 0); - Query query = new Query(); - query.setFilterById(enqueue); - Cursor c = dm.query(query); - if (c.moveToFirst()) { - int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS); - if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) { - String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); - File mFile = new File(Uri.parse(uriString).getPath()); - //Toast.makeText(getApplicationContext(), uriString, Toast.LENGTH_LONG).show(); - openFile(mFile); - } - else - Toast.makeText(act.getApplicationContext(), "ERROR", Toast.LENGTH_LONG).show(); - } - } - } - }; - - act.registerReceiver(receiver, new IntentFilter( - DownloadManager.ACTION_DOWNLOAD_COMPLETE)); - - try - { - String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(); - - dm = (DownloadManager) act.getSystemService(Context.DOWNLOAD_SERVICE); - - Request request = new Request(Uri.parse(Constants.UPDATE_SERVER_HOSTNAME + "/" + Constants.FILENAME)); - - File f = new File(dir + "/" + Constants.FILENAME); - if (f.exists()) { - f.delete(); - } - enqueue = dm.enqueue(request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, Constants.FILENAME)); - //enqueue = dm.enqueue(request); - } - catch(Exception e) - { - e.printStackTrace(); - } - } - - protected void openFile(File file) { - Intent install = new Intent(Intent.ACTION_VIEW); - try - { - install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); - act.startActivity(install); - } - catch(Exception ex) - { - ex.printStackTrace(); - } - } - - - - public class CheckVersion extends AsyncTask { - - @Override - protected String doInBackground(Object... params) { - String output = getOutputFromUrl(params); - return output; - } - - private String getOutputFromUrl(Object... val) { - String output = null; - try { - HttpResponse httpResponse = postDataForInsert(val); - HttpEntity httpEntity = httpResponse.getEntity(); - output = EntityUtils.toString(httpEntity); - } catch (Exception e) { - e.printStackTrace(); - } - return output; - } - - @Override - protected void onPostExecute(String output) { - if(!VERSION.equals(output)) - { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which){ - case DialogInterface.BUTTON_POSITIVE: - //Yes button clicked - DownloadApp(); - break; - - case DialogInterface.BUTTON_NEGATIVE: - //No button clicked - break; - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(act); - builder.setMessage("Aktuelle Version: " + VERSION + "\nNeue Version " + output + " verfügbar\nMöchten Sie diese nun herunterladen ?").setPositiveButton("Yes", dialogClickListener).setNegativeButton("No", dialogClickListener).show(); - } - else if(forceUpdate) - { - AlertDialog.Builder builder = new AlertDialog.Builder(act); - builder.setMessage("Ihre App ist auf dem neuesten Stand\nAktuelle Version: " + VERSION).setNeutralButton("Ok", null).show(); - } - } - } - - public static HttpResponse postDataForInsert(Object... val) { - HttpResponse response = null; - HttpClient httpclient = new DefaultHttpClient(); - HttpPost httppost = new HttpPost(Constants.UPDATE_SERVER_HOSTNAME + "/index.php"); - - try { - response = httpclient.execute(httppost); - } - catch (Exception e) { - e.printStackTrace(); - } - return response; - } -} diff --git a/src/de/luhmer/owncloudnewsreader/util/IabException.java b/src/de/luhmer/owncloudnewsreader/util/IabException.java deleted file mode 100644 index 7c0b108c..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/IabException.java +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -/** - * Exception thrown when something went wrong with in-app billing. - * An IabException has an associated IabResult (an error). - * To get the IAB result that caused this exception to be thrown, - * call {@link #getResult()}. - */ -public class IabException extends Exception { - /** - * - */ - private static final long serialVersionUID = 1835316195024502592L; - IabResult mResult; - - public IabException(IabResult r) { - this(r, null); - } - public IabException(int response, String message) { - this(new IabResult(response, message)); - } - public IabException(IabResult r, Exception cause) { - super(r.getMessage(), cause); - mResult = r; - } - public IabException(int response, String message, Exception cause) { - this(new IabResult(response, message), cause); - } - - /** Returns the IAB result (error) that this exception signals. */ - public IabResult getResult() { return mResult; } -} \ No newline at end of file diff --git a/src/de/luhmer/owncloudnewsreader/util/IabHelper.java b/src/de/luhmer/owncloudnewsreader/util/IabHelper.java deleted file mode 100644 index 9a992369..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/IabHelper.java +++ /dev/null @@ -1,958 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -import java.util.ArrayList; -import java.util.List; - -import org.json.JSONException; - -import android.app.Activity; -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.IntentSender.SendIntentException; -import android.content.ServiceConnection; -import android.os.Bundle; -import android.os.Handler; -import android.os.IBinder; -import android.os.RemoteException; -import android.text.TextUtils; -import android.util.Log; - -import com.android.vending.billing.IInAppBillingService; - - -/** - * Provides convenience methods for in-app billing. You can create one instance of this - * class for your application and use it to process in-app billing operations. - * It provides synchronous (blocking) and asynchronous (non-blocking) methods for - * many common in-app billing operations, as well as automatic signature - * verification. - * - * After instantiating, you must perform setup in order to start using the object. - * To perform setup, call the {@link #startSetup} method and provide a listener; - * that listener will be notified when setup is complete, after which (and not before) - * you may call other methods. - * - * After setup is complete, you will typically want to request an inventory of owned - * items and subscriptions. See {@link #queryInventory}, {@link #queryInventoryAsync} - * and related methods. - * - * When you are done with this object, don't forget to call {@link #dispose} - * to ensure proper cleanup. This object holds a binding to the in-app billing - * service, which will leak unless you dispose of it correctly. If you created - * the object on an Activity's onCreate method, then the recommended - * place to dispose of it is the Activity's onDestroy method. - * - * A note about threading: When using this object from a background thread, you may - * call the blocking versions of methods; when using from a UI thread, call - * only the asynchronous versions and handle the results via callbacks. - * Also, notice that you can only call one asynchronous operation at a time; - * attempting to start a second asynchronous operation while the first one - * has not yet completed will result in an exception being thrown. - * - * @author Bruno Oliveira (Google) - * - */ -public class IabHelper { - // Is debug logging enabled? - boolean mDebugLog = false; - String mDebugTag = "IabHelper"; - - // Is setup done? - boolean mSetupDone = false; - - // Are subscriptions supported? - boolean mSubscriptionsSupported = false; - - // Is an asynchronous operation in progress? - // (only one at a time can be in progress) - boolean mAsyncInProgress = false; - - // (for logging/debugging) - // if mAsyncInProgress == true, what asynchronous operation is in progress? - String mAsyncOperation = ""; - - // Context we were passed during initialization - Context mContext; - - // Connection to the service - IInAppBillingService mService; - ServiceConnection mServiceConn; - - // The request code used to launch purchase flow - int mRequestCode; - - // The item type of the current purchase flow - String mPurchasingItemType; - - // Public key for verifying signature, in base64 encoding - String mSignatureBase64 = null; - - // Billing response codes - public static final int BILLING_RESPONSE_RESULT_OK = 0; - public static final int BILLING_RESPONSE_RESULT_USER_CANCELED = 1; - public static final int BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE = 3; - public static final int BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE = 4; - public static final int BILLING_RESPONSE_RESULT_DEVELOPER_ERROR = 5; - public static final int BILLING_RESPONSE_RESULT_ERROR = 6; - public static final int BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED = 7; - public static final int BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED = 8; - - // IAB Helper error codes - public static final int IABHELPER_ERROR_BASE = -1000; - public static final int IABHELPER_REMOTE_EXCEPTION = -1001; - public static final int IABHELPER_BAD_RESPONSE = -1002; - public static final int IABHELPER_VERIFICATION_FAILED = -1003; - public static final int IABHELPER_SEND_INTENT_FAILED = -1004; - public static final int IABHELPER_USER_CANCELLED = -1005; - public static final int IABHELPER_UNKNOWN_PURCHASE_RESPONSE = -1006; - public static final int IABHELPER_MISSING_TOKEN = -1007; - public static final int IABHELPER_UNKNOWN_ERROR = -1008; - public static final int IABHELPER_SUBSCRIPTIONS_NOT_AVAILABLE = -1009; - public static final int IABHELPER_INVALID_CONSUMPTION = -1010; - - // Keys for the responses from InAppBillingService - public static final String RESPONSE_CODE = "RESPONSE_CODE"; - public static final String RESPONSE_GET_SKU_DETAILS_LIST = "DETAILS_LIST"; - public static final String RESPONSE_BUY_INTENT = "BUY_INTENT"; - public static final String RESPONSE_INAPP_PURCHASE_DATA = "INAPP_PURCHASE_DATA"; - public static final String RESPONSE_INAPP_SIGNATURE = "INAPP_DATA_SIGNATURE"; - public static final String RESPONSE_INAPP_ITEM_LIST = "INAPP_PURCHASE_ITEM_LIST"; - public static final String RESPONSE_INAPP_PURCHASE_DATA_LIST = "INAPP_PURCHASE_DATA_LIST"; - public static final String RESPONSE_INAPP_SIGNATURE_LIST = "INAPP_DATA_SIGNATURE_LIST"; - public static final String INAPP_CONTINUATION_TOKEN = "INAPP_CONTINUATION_TOKEN"; - - // Item types - public static final String ITEM_TYPE_INAPP = "inapp"; - public static final String ITEM_TYPE_SUBS = "subs"; - - // some fields on the getSkuDetails response bundle - public static final String GET_SKU_DETAILS_ITEM_LIST = "ITEM_ID_LIST"; - public static final String GET_SKU_DETAILS_ITEM_TYPE_LIST = "ITEM_TYPE_LIST"; - - /** - * Creates an instance. After creation, it will not yet be ready to use. You must perform - * setup by calling {@link #startSetup} and wait for setup to complete. This constructor does not - * block and is safe to call from a UI thread. - * - * @param ctx Your application or Activity context. Needed to bind to the in-app billing service. - * @param base64PublicKey Your application's public key, encoded in base64. - * This is used for verification of purchase signatures. You can find your app's base64-encoded - * public key in your application's page on Google Play Developer Console. Note that this - * is NOT your "developer public key". - */ - public IabHelper(Context ctx, String base64PublicKey) { - mContext = ctx.getApplicationContext(); - mSignatureBase64 = base64PublicKey; - logDebug("IAB helper created."); - } - - /** - * Enables or disable debug logging through LogCat. - */ - public void enableDebugLogging(boolean enable, String tag) { - mDebugLog = enable; - mDebugTag = tag; - } - - public void enableDebugLogging(boolean enable) { - mDebugLog = enable; - } - - /** - * Callback for setup process. This listener's {@link #onIabSetupFinished} method is called - * when the setup process is complete. - */ - public interface OnIabSetupFinishedListener { - /** - * Called to notify that setup is complete. - * - * @param result The result of the setup process. - */ - public void onIabSetupFinished(IabResult result); - } - - /** - * Starts the setup process. This will start up the setup process asynchronously. - * You will be notified through the listener when the setup process is complete. - * This method is safe to call from a UI thread. - * - * @param listener The listener to notify when the setup process is complete. - */ - public void startSetup(final OnIabSetupFinishedListener listener) { - // If already set up, can't do it again. - if (mSetupDone) throw new IllegalStateException("IAB helper is already set up."); - - // Connection to IAB service - logDebug("Starting in-app billing setup."); - mServiceConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - logDebug("Billing service disconnected."); - mService = null; - } - - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - logDebug("Billing service connected."); - mService = IInAppBillingService.Stub.asInterface(service); - String packageName = mContext.getPackageName(); - try { - logDebug("Checking for in-app billing 3 support."); - - // check for in-app billing v3 support - int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP); - if (response != BILLING_RESPONSE_RESULT_OK) { - if (listener != null) listener.onIabSetupFinished(new IabResult(response, - "Error checking for billing v3 support.")); - - // if in-app purchases aren't supported, neither are subscriptions. - mSubscriptionsSupported = false; - return; - } - logDebug("In-app billing version 3 supported for " + packageName); - - // check for v3 subscriptions support - response = mService.isBillingSupported(3, packageName, ITEM_TYPE_SUBS); - if (response == BILLING_RESPONSE_RESULT_OK) { - logDebug("Subscriptions AVAILABLE."); - mSubscriptionsSupported = true; - } - else { - logDebug("Subscriptions NOT AVAILABLE. Response: " + response); - } - - mSetupDone = true; - } - catch (RemoteException e) { - if (listener != null) { - listener.onIabSetupFinished(new IabResult(IABHELPER_REMOTE_EXCEPTION, - "RemoteException while setting up in-app billing.")); - } - e.printStackTrace(); - return; - } - - if (listener != null) { - listener.onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Setup successful.")); - } - } - }; - - Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); - if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) { - // service available to handle that Intent - mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); - } - else { - // no service available to handle that Intent - if (listener != null) { - listener.onIabSetupFinished( - new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE, - "Billing service unavailable on device.")); - } - } - } - - /** - * Dispose of object, releasing resources. It's very important to call this - * method when you are done with this object. It will release any resources - * used by it such as service connections. Naturally, once the object is - * disposed of, it can't be used again. - */ - public void dispose() { - logDebug("Disposing."); - mSetupDone = false; - if (mServiceConn != null) { - logDebug("Unbinding from service."); - if (mContext != null) mContext.unbindService(mServiceConn); - mServiceConn = null; - mService = null; - mPurchaseListener = null; - } - } - - /** Returns whether subscriptions are supported. */ - public boolean subscriptionsSupported() { - return mSubscriptionsSupported; - } - - - /** - * Callback that notifies when a purchase is finished. - */ - public interface OnIabPurchaseFinishedListener { - /** - * Called to notify that an in-app purchase finished. If the purchase was successful, - * then the sku parameter specifies which item was purchased. If the purchase failed, - * the sku and extraData parameters may or may not be null, depending on how far the purchase - * process went. - * - * @param result The result of the purchase. - * @param info The purchase information (null if purchase failed) - */ - public void onIabPurchaseFinished(IabResult result, Purchase info); - } - - // The listener registered on launchPurchaseFlow, which we have to call back when - // the purchase finishes - OnIabPurchaseFinishedListener mPurchaseListener; - - public void launchPurchaseFlow(Activity act, String sku, int requestCode, OnIabPurchaseFinishedListener listener) { - launchPurchaseFlow(act, sku, requestCode, listener, ""); - } - - public void launchPurchaseFlow(Activity act, String sku, int requestCode, - OnIabPurchaseFinishedListener listener, String extraData) { - launchPurchaseFlow(act, sku, ITEM_TYPE_INAPP, requestCode, listener, extraData); - } - - public void launchSubscriptionPurchaseFlow(Activity act, String sku, int requestCode, - OnIabPurchaseFinishedListener listener) { - launchSubscriptionPurchaseFlow(act, sku, requestCode, listener, ""); - } - - public void launchSubscriptionPurchaseFlow(Activity act, String sku, int requestCode, - OnIabPurchaseFinishedListener listener, String extraData) { - launchPurchaseFlow(act, sku, ITEM_TYPE_SUBS, requestCode, listener, extraData); - } - - /** - * Initiate the UI flow for an in-app purchase. Call this method to initiate an in-app purchase, - * which will involve bringing up the Google Play screen. The calling activity will be paused while - * the user interacts with Google Play, and the result will be delivered via the activity's - * {@link android.app.Activity#onActivityResult} method, at which point you must call - * this object's {@link #handleActivityResult} method to continue the purchase flow. This method - * MUST be called from the UI thread of the Activity. - * - * @param act The calling activity. - * @param sku The sku of the item to purchase. - * @param itemType indicates if it's a product or a subscription (ITEM_TYPE_INAPP or ITEM_TYPE_SUBS) - * @param requestCode A request code (to differentiate from other responses -- - * as in {@link android.app.Activity#startActivityForResult}). - * @param listener The listener to notify when the purchase process finishes - * @param extraData Extra data (developer payload), which will be returned with the purchase data - * when the purchase completes. This extra data will be permanently bound to that purchase - * and will always be returned when the purchase is queried. - */ - public void launchPurchaseFlow(Activity act, String sku, String itemType, int requestCode, - OnIabPurchaseFinishedListener listener, String extraData) { - checkSetupDone("launchPurchaseFlow"); - flagStartAsync("launchPurchaseFlow"); - IabResult result; - - if (itemType.equals(ITEM_TYPE_SUBS) && !mSubscriptionsSupported) { - IabResult r = new IabResult(IABHELPER_SUBSCRIPTIONS_NOT_AVAILABLE, - "Subscriptions are not available."); - if (listener != null) listener.onIabPurchaseFinished(r, null); - return; - } - - try { - logDebug("Constructing buy intent for " + sku + ", item type: " + itemType); - Bundle buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType, extraData); - int response = getResponseCodeFromBundle(buyIntentBundle); - if (response != BILLING_RESPONSE_RESULT_OK) { - logError("Unable to buy item, Error response: " + getResponseDesc(response)); - - result = new IabResult(response, "Unable to buy item"); - if (listener != null) listener.onIabPurchaseFinished(result, null); - return; - } - - PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT); - logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode); - mRequestCode = requestCode; - mPurchaseListener = listener; - mPurchasingItemType = itemType; - act.startIntentSenderForResult(pendingIntent.getIntentSender(), - requestCode, new Intent(), - Integer.valueOf(0), Integer.valueOf(0), - Integer.valueOf(0)); - } - catch (SendIntentException e) { - logError("SendIntentException while launching purchase flow for sku " + sku); - e.printStackTrace(); - - result = new IabResult(IABHELPER_SEND_INTENT_FAILED, "Failed to send intent."); - if (listener != null) listener.onIabPurchaseFinished(result, null); - } - catch (RemoteException e) { - logError("RemoteException while launching purchase flow for sku " + sku); - e.printStackTrace(); - - result = new IabResult(IABHELPER_REMOTE_EXCEPTION, "Remote exception while starting purchase flow"); - if (listener != null) listener.onIabPurchaseFinished(result, null); - } - } - - /** - * Handles an activity result that's part of the purchase flow in in-app billing. If you - * are calling {@link #launchPurchaseFlow}, then you must call this method from your - * Activity's {@link android.app.Activity@onActivityResult} method. This method - * MUST be called from the UI thread of the Activity. - * - * @param requestCode The requestCode as you received it. - * @param resultCode The resultCode as you received it. - * @param data The data (Intent) as you received it. - * @return Returns true if the result was related to a purchase flow and was handled; - * false if the result was not related to a purchase, in which case you should - * handle it normally. - */ - public boolean handleActivityResult(int requestCode, int resultCode, Intent data) { - IabResult result; - if (requestCode != mRequestCode) return false; - - checkSetupDone("handleActivityResult"); - - // end of async purchase operation - flagEndAsync(); - - if (data == null) { - logError("Null data in IAB activity result."); - result = new IabResult(IABHELPER_BAD_RESPONSE, "Null data in IAB result"); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); - return true; - } - - int responseCode = getResponseCodeFromIntent(data); - String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA); - String dataSignature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE); - - if (resultCode == Activity.RESULT_OK && responseCode == BILLING_RESPONSE_RESULT_OK) { - logDebug("Successful resultcode from purchase activity."); - logDebug("Purchase data: " + purchaseData); - logDebug("Data signature: " + dataSignature); - logDebug("Extras: " + data.getExtras()); - logDebug("Expected item type: " + mPurchasingItemType); - - if (purchaseData == null || dataSignature == null) { - logError("BUG: either purchaseData or dataSignature is null."); - logDebug("Extras: " + data.getExtras().toString()); - result = new IabResult(IABHELPER_UNKNOWN_ERROR, "IAB returned null purchaseData or dataSignature"); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); - return true; - } - - Purchase purchase = null; - try { - purchase = new Purchase(mPurchasingItemType, purchaseData, dataSignature); - String sku = purchase.getSku(); - - // Verify signature - if (!Security.verifyPurchase(mSignatureBase64, purchaseData, dataSignature)) { - logError("Purchase signature verification FAILED for sku " + sku); - result = new IabResult(IABHELPER_VERIFICATION_FAILED, "Signature verification failed for sku " + sku); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, purchase); - return true; - } - logDebug("Purchase signature successfully verified."); - } - catch (JSONException e) { - logError("Failed to parse purchase data."); - e.printStackTrace(); - result = new IabResult(IABHELPER_BAD_RESPONSE, "Failed to parse purchase data."); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); - return true; - } - - if (mPurchaseListener != null) { - mPurchaseListener.onIabPurchaseFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Success"), purchase); - } - } - else if (resultCode == Activity.RESULT_OK) { - // result code was OK, but in-app billing response was not OK. - logDebug("Result code was OK but in-app billing response was not OK: " + getResponseDesc(responseCode)); - if (mPurchaseListener != null) { - result = new IabResult(responseCode, "Problem purchashing item."); - mPurchaseListener.onIabPurchaseFinished(result, null); - } - } - else if (resultCode == Activity.RESULT_CANCELED) { - logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode)); - result = new IabResult(IABHELPER_USER_CANCELLED, "User canceled."); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); - } - else { - logError("Purchase failed. Result code: " + Integer.toString(resultCode) - + ". Response: " + getResponseDesc(responseCode)); - result = new IabResult(IABHELPER_UNKNOWN_PURCHASE_RESPONSE, "Unknown purchase response."); - if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null); - } - return true; - } - - public Inventory queryInventory(boolean querySkuDetails, List moreSkus) throws IabException { - return queryInventory(querySkuDetails, moreSkus, null); - } - - /** - * Queries the inventory. This will query all owned items from the server, as well as - * information on additional skus, if specified. This method may block or take long to execute. - * Do not call from a UI thread. For that, use the non-blocking version {@link #refreshInventoryAsync}. - * - * @param querySkuDetails if true, SKU details (price, description, etc) will be queried as well - * as purchase information. - * @param moreItemSkus additional PRODUCT skus to query information on, regardless of ownership. - * Ignored if null or if querySkuDetails is false. - * @param moreSubsSkus additional SUBSCRIPTIONS skus to query information on, regardless of ownership. - * Ignored if null or if querySkuDetails is false. - * @throws IabException if a problem occurs while refreshing the inventory. - */ - public Inventory queryInventory(boolean querySkuDetails, List moreItemSkus, - List moreSubsSkus) throws IabException { - checkSetupDone("queryInventory"); - try { - Inventory inv = new Inventory(); - int r = queryPurchases(inv, ITEM_TYPE_INAPP); - if (r != BILLING_RESPONSE_RESULT_OK) { - throw new IabException(r, "Error refreshing inventory (querying owned items)."); - } - - if (querySkuDetails) { - r = querySkuDetails(ITEM_TYPE_INAPP, inv, moreItemSkus); - if (r != BILLING_RESPONSE_RESULT_OK) { - throw new IabException(r, "Error refreshing inventory (querying prices of items)."); - } - } - - // if subscriptions are supported, then also query for subscriptions - if (mSubscriptionsSupported) { - r = queryPurchases(inv, ITEM_TYPE_SUBS); - if (r != BILLING_RESPONSE_RESULT_OK) { - throw new IabException(r, "Error refreshing inventory (querying owned subscriptions)."); - } - - if (querySkuDetails) { - r = querySkuDetails(ITEM_TYPE_SUBS, inv, moreItemSkus); - if (r != BILLING_RESPONSE_RESULT_OK) { - throw new IabException(r, "Error refreshing inventory (querying prices of subscriptions)."); - } - } - } - - return inv; - } - catch (RemoteException e) { - throw new IabException(IABHELPER_REMOTE_EXCEPTION, "Remote exception while refreshing inventory.", e); - } - catch (JSONException e) { - throw new IabException(IABHELPER_BAD_RESPONSE, "Error parsing JSON response while refreshing inventory.", e); - } - } - - /** - * Listener that notifies when an inventory query operation completes. - */ - public interface QueryInventoryFinishedListener { - /** - * Called to notify that an inventory query operation completed. - * - * @param result The result of the operation. - * @param inv The inventory. - */ - public void onQueryInventoryFinished(IabResult result, Inventory inv); - } - - - /** - * Asynchronous wrapper for inventory query. This will perform an inventory - * query as described in {@link #queryInventory}, but will do so asynchronously - * and call back the specified listener upon completion. This method is safe to - * call from a UI thread. - * - * @param querySkuDetails as in {@link #queryInventory} - * @param moreSkus as in {@link #queryInventory} - * @param listener The listener to notify when the refresh operation completes. - */ - public void queryInventoryAsync(final boolean querySkuDetails, - final List moreSkus, - final QueryInventoryFinishedListener listener) { - final Handler handler = new Handler(); - checkSetupDone("queryInventory"); - flagStartAsync("refresh inventory"); - (new Thread(new Runnable() { - public void run() { - IabResult result = new IabResult(BILLING_RESPONSE_RESULT_OK, "Inventory refresh successful."); - Inventory inv = null; - try { - inv = queryInventory(querySkuDetails, moreSkus); - } - catch (IabException ex) { - result = ex.getResult(); - } - - flagEndAsync(); - - final IabResult result_f = result; - final Inventory inv_f = inv; - handler.post(new Runnable() { - public void run() { - listener.onQueryInventoryFinished(result_f, inv_f); - } - }); - } - })).start(); - } - - public void queryInventoryAsync(QueryInventoryFinishedListener listener) { - queryInventoryAsync(true, null, listener); - } - - public void queryInventoryAsync(boolean querySkuDetails, QueryInventoryFinishedListener listener) { - queryInventoryAsync(querySkuDetails, null, listener); - } - - - /** - * Consumes a given in-app product. Consuming can only be done on an item - * that's owned, and as a result of consumption, the user will no longer own it. - * This method may block or take long to return. Do not call from the UI thread. - * For that, see {@link #consumeAsync}. - * - * @param itemInfo The PurchaseInfo that represents the item to consume. - * @throws IabException if there is a problem during consumption. - */ - void consume(Purchase itemInfo) throws IabException { - checkSetupDone("consume"); - - if (!itemInfo.mItemType.equals(ITEM_TYPE_INAPP)) { - throw new IabException(IABHELPER_INVALID_CONSUMPTION, - "Items of type '" + itemInfo.mItemType + "' can't be consumed."); - } - - try { - String token = itemInfo.getToken(); - String sku = itemInfo.getSku(); - if (token == null || token.equals("")) { - logError("Can't consume "+ sku + ". No token."); - throw new IabException(IABHELPER_MISSING_TOKEN, "PurchaseInfo is missing token for sku: " - + sku + " " + itemInfo); - } - - logDebug("Consuming sku: " + sku + ", token: " + token); - int response = mService.consumePurchase(3, mContext.getPackageName(), token); - if (response == BILLING_RESPONSE_RESULT_OK) { - logDebug("Successfully consumed sku: " + sku); - } - else { - logDebug("Error consuming consuming sku " + sku + ". " + getResponseDesc(response)); - throw new IabException(response, "Error consuming sku " + sku); - } - } - catch (RemoteException e) { - throw new IabException(IABHELPER_REMOTE_EXCEPTION, "Remote exception while consuming. PurchaseInfo: " + itemInfo, e); - } - } - - /** - * Callback that notifies when a consumption operation finishes. - */ - public interface OnConsumeFinishedListener { - /** - * Called to notify that a consumption has finished. - * - * @param purchase The purchase that was (or was to be) consumed. - * @param result The result of the consumption operation. - */ - public void onConsumeFinished(Purchase purchase, IabResult result); - } - - /** - * Callback that notifies when a multi-item consumption operation finishes. - */ - public interface OnConsumeMultiFinishedListener { - /** - * Called to notify that a consumption of multiple items has finished. - * - * @param purchases The purchases that were (or were to be) consumed. - * @param results The results of each consumption operation, corresponding to each - * sku. - */ - public void onConsumeMultiFinished(List purchases, List results); - } - - /** - * Asynchronous wrapper to item consumption. Works like {@link #consume}, but - * performs the consumption in the background and notifies completion through - * the provided listener. This method is safe to call from a UI thread. - * - * @param purchase The purchase to be consumed. - * @param listener The listener to notify when the consumption operation finishes. - */ - public void consumeAsync(Purchase purchase, OnConsumeFinishedListener listener) { - checkSetupDone("consume"); - List purchases = new ArrayList(); - purchases.add(purchase); - consumeAsyncInternal(purchases, listener, null); - } - - /** - * Same as {@link consumeAsync}, but for multiple items at once. - * @param purchases The list of PurchaseInfo objects representing the purchases to consume. - * @param listener The listener to notify when the consumption operation finishes. - */ - public void consumeAsync(List purchases, OnConsumeMultiFinishedListener listener) { - checkSetupDone("consume"); - consumeAsyncInternal(purchases, null, listener); - } - - /** - * Returns a human-readable description for the given response code. - * - * @param code The response code - * @return A human-readable string explaining the result code. - * It also includes the result code numerically. - */ - public static String getResponseDesc(int code) { - String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/" + - "3:Billing Unavailable/4:Item unavailable/" + - "5:Developer Error/6:Error/7:Item Already Owned/" + - "8:Item not owned").split("/"); - String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/" + - "-1002:Bad response received/" + - "-1003:Purchase signature verification failed/" + - "-1004:Send intent failed/" + - "-1005:User cancelled/" + - "-1006:Unknown purchase response/" + - "-1007:Missing token/" + - "-1008:Unknown error/" + - "-1009:Subscriptions not available/" + - "-1010:Invalid consumption attempt").split("/"); - - if (code <= IABHELPER_ERROR_BASE) { - int index = IABHELPER_ERROR_BASE - code; - if (index >= 0 && index < iabhelper_msgs.length) return iabhelper_msgs[index]; - else return String.valueOf(code) + ":Unknown IAB Helper Error"; - } - else if (code < 0 || code >= iab_msgs.length) - return String.valueOf(code) + ":Unknown"; - else - return iab_msgs[code]; - } - - - // Checks that setup was done; if not, throws an exception. - void checkSetupDone(String operation) { - if (!mSetupDone) { - logError("Illegal state for operation (" + operation + "): IAB helper is not set up."); - throw new IllegalStateException("IAB helper is not set up. Can't perform operation: " + operation); - } - } - - // Workaround to bug where sometimes response codes come as Long instead of Integer - int getResponseCodeFromBundle(Bundle b) { - Object o = b.get(RESPONSE_CODE); - if (o == null) { - logDebug("Bundle with null response code, assuming OK (known issue)"); - return BILLING_RESPONSE_RESULT_OK; - } - else if (o instanceof Integer) return ((Integer)o).intValue(); - else if (o instanceof Long) return (int)((Long)o).longValue(); - else { - logError("Unexpected type for bundle response code."); - logError(o.getClass().getName()); - throw new RuntimeException("Unexpected type for bundle response code: " + o.getClass().getName()); - } - } - - // Workaround to bug where sometimes response codes come as Long instead of Integer - int getResponseCodeFromIntent(Intent i) { - Object o = i.getExtras().get(RESPONSE_CODE); - if (o == null) { - logError("Intent with no response code, assuming OK (known issue)"); - return BILLING_RESPONSE_RESULT_OK; - } - else if (o instanceof Integer) return ((Integer)o).intValue(); - else if (o instanceof Long) return (int)((Long)o).longValue(); - else { - logError("Unexpected type for intent response code."); - logError(o.getClass().getName()); - throw new RuntimeException("Unexpected type for intent response code: " + o.getClass().getName()); - } - } - - void flagStartAsync(String operation) { - if (mAsyncInProgress) throw new IllegalStateException("Can't start async operation (" + - operation + ") because another async operation(" + mAsyncOperation + ") is in progress."); - mAsyncOperation = operation; - mAsyncInProgress = true; - logDebug("Starting async operation: " + operation); - } - - void flagEndAsync() { - logDebug("Ending async operation: " + mAsyncOperation); - mAsyncOperation = ""; - mAsyncInProgress = false; - } - - - int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException { - // Query purchases - logDebug("Querying owned items, item type: " + itemType); - logDebug("Package name: " + mContext.getPackageName()); - boolean verificationFailed = false; - String continueToken = null; - - do { - logDebug("Calling getPurchases with continuation token: " + continueToken); - Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), - itemType, continueToken); - - int response = getResponseCodeFromBundle(ownedItems); - logDebug("Owned items response: " + String.valueOf(response)); - if (response != BILLING_RESPONSE_RESULT_OK) { - logDebug("getPurchases() failed: " + getResponseDesc(response)); - return response; - } - if (!ownedItems.containsKey(RESPONSE_INAPP_ITEM_LIST) - || !ownedItems.containsKey(RESPONSE_INAPP_PURCHASE_DATA_LIST) - || !ownedItems.containsKey(RESPONSE_INAPP_SIGNATURE_LIST)) { - logError("Bundle returned from getPurchases() doesn't contain required fields."); - return IABHELPER_BAD_RESPONSE; - } - - ArrayList ownedSkus = ownedItems.getStringArrayList( - RESPONSE_INAPP_ITEM_LIST); - ArrayList purchaseDataList = ownedItems.getStringArrayList( - RESPONSE_INAPP_PURCHASE_DATA_LIST); - ArrayList signatureList = ownedItems.getStringArrayList( - RESPONSE_INAPP_SIGNATURE_LIST); - - for (int i = 0; i < purchaseDataList.size(); ++i) { - String purchaseData = purchaseDataList.get(i); - String signature = signatureList.get(i); - String sku = ownedSkus.get(i); - if (Security.verifyPurchase(mSignatureBase64, purchaseData, signature)) { - logDebug("Sku is owned: " + sku); - Purchase purchase = new Purchase(itemType, purchaseData, signature); - - if (TextUtils.isEmpty(purchase.getToken())) { - logWarn("BUG: empty/null token!"); - logDebug("Purchase data: " + purchaseData); - } - - // Record ownership and token - inv.addPurchase(purchase); - } - else { - logWarn("Purchase signature verification **FAILED**. Not adding item."); - logDebug(" Purchase data: " + purchaseData); - logDebug(" Signature: " + signature); - verificationFailed = true; - } - } - - continueToken = ownedItems.getString(INAPP_CONTINUATION_TOKEN); - logDebug("Continuation token: " + continueToken); - } while (!TextUtils.isEmpty(continueToken)); - - return verificationFailed ? IABHELPER_VERIFICATION_FAILED : BILLING_RESPONSE_RESULT_OK; - } - - int querySkuDetails(String itemType, Inventory inv, List moreSkus) - throws RemoteException, JSONException { - logDebug("Querying SKU details."); - ArrayList skuList = new ArrayList(); - skuList.addAll(inv.getAllOwnedSkus(itemType)); - if (moreSkus != null) skuList.addAll(moreSkus); - - if (skuList.size() == 0) { - logDebug("queryPrices: nothing to do because there are no SKUs."); - return BILLING_RESPONSE_RESULT_OK; - } - - Bundle querySkus = new Bundle(); - querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList); - Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), - itemType, querySkus); - - if (!skuDetails.containsKey(RESPONSE_GET_SKU_DETAILS_LIST)) { - int response = getResponseCodeFromBundle(skuDetails); - if (response != BILLING_RESPONSE_RESULT_OK) { - logDebug("getSkuDetails() failed: " + getResponseDesc(response)); - return response; - } - else { - logError("getSkuDetails() returned a bundle with neither an error nor a detail list."); - return IABHELPER_BAD_RESPONSE; - } - } - - ArrayList responseList = skuDetails.getStringArrayList( - RESPONSE_GET_SKU_DETAILS_LIST); - - for (String thisResponse : responseList) { - SkuDetails d = new SkuDetails(itemType, thisResponse); - logDebug("Got sku details: " + d); - inv.addSkuDetails(d); - } - return BILLING_RESPONSE_RESULT_OK; - } - - - void consumeAsyncInternal(final List purchases, - final OnConsumeFinishedListener singleListener, - final OnConsumeMultiFinishedListener multiListener) { - final Handler handler = new Handler(); - flagStartAsync("consume"); - (new Thread(new Runnable() { - public void run() { - final List results = new ArrayList(); - for (Purchase purchase : purchases) { - try { - consume(purchase); - results.add(new IabResult(BILLING_RESPONSE_RESULT_OK, "Successful consume of sku " + purchase.getSku())); - } - catch (IabException ex) { - results.add(ex.getResult()); - } - } - - flagEndAsync(); - if (singleListener != null) { - handler.post(new Runnable() { - public void run() { - singleListener.onConsumeFinished(purchases.get(0), results.get(0)); - } - }); - } - if (multiListener != null) { - handler.post(new Runnable() { - public void run() { - multiListener.onConsumeMultiFinished(purchases, results); - } - }); - } - } - })).start(); - } - - void logDebug(String msg) { - if (mDebugLog) Log.d(mDebugTag, msg); - } - - void logError(String msg) { - Log.e(mDebugTag, "In-app billing error: " + msg); - } - - void logWarn(String msg) { - Log.w(mDebugTag, "In-app billing warning: " + msg); - } -} diff --git a/src/de/luhmer/owncloudnewsreader/util/IabResult.java b/src/de/luhmer/owncloudnewsreader/util/IabResult.java deleted file mode 100644 index 6080d8c1..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/IabResult.java +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -/** - * Represents the result of an in-app billing operation. - * A result is composed of a response code (an integer) and possibly a - * message (String). You can get those by calling - * {@link #getResponse} and {@link #getMessage()}, respectively. You - * can also inquire whether a result is a success or a failure by - * calling {@link #isSuccess()} and {@link #isFailure()}. - */ -public class IabResult { - int mResponse; - String mMessage; - - public IabResult(int response, String message) { - mResponse = response; - if (message == null || message.trim().length() == 0) { - mMessage = IabHelper.getResponseDesc(response); - } - else { - mMessage = message + " (response: " + IabHelper.getResponseDesc(response) + ")"; - } - } - public int getResponse() { return mResponse; } - public String getMessage() { return mMessage; } - public boolean isSuccess() { return mResponse == IabHelper.BILLING_RESPONSE_RESULT_OK; } - public boolean isFailure() { return !isSuccess(); } - public String toString() { return "IabResult: " + getMessage(); } -} - diff --git a/src/de/luhmer/owncloudnewsreader/util/Inventory.java b/src/de/luhmer/owncloudnewsreader/util/Inventory.java deleted file mode 100644 index 6dd07d5f..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/Inventory.java +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Represents a block of information about in-app items. - * An Inventory is returned by such methods as {@link IabHelper#queryInventory}. - */ -public class Inventory { - Map mSkuMap = new HashMap(); - Map mPurchaseMap = new HashMap(); - - Inventory() { } - - /** Returns the listing details for an in-app product. */ - public SkuDetails getSkuDetails(String sku) { - return mSkuMap.get(sku); - } - - /** Returns purchase information for a given product, or null if there is no purchase. */ - public Purchase getPurchase(String sku) { - return mPurchaseMap.get(sku); - } - - /** Returns whether or not there exists a purchase of the given product. */ - public boolean hasPurchase(String sku) { - return mPurchaseMap.containsKey(sku); - } - - /** Return whether or not details about the given product are available. */ - public boolean hasDetails(String sku) { - return mSkuMap.containsKey(sku); - } - - /** - * Erase a purchase (locally) from the inventory, given its product ID. This just - * modifies the Inventory object locally and has no effect on the server! This is - * useful when you have an existing Inventory object which you know to be up to date, - * and you have just consumed an item successfully, which means that erasing its - * purchase data from the Inventory you already have is quicker than querying for - * a new Inventory. - */ - public void erasePurchase(String sku) { - if (mPurchaseMap.containsKey(sku)) mPurchaseMap.remove(sku); - } - - /** Returns a list of all owned product IDs. */ - List getAllOwnedSkus() { - return new ArrayList(mPurchaseMap.keySet()); - } - - /** Returns a list of all owned product IDs of a given type */ - List getAllOwnedSkus(String itemType) { - List result = new ArrayList(); - for (Purchase p : mPurchaseMap.values()) { - if (p.getItemType().equals(itemType)) result.add(p.getSku()); - } - return result; - } - - /** Returns a list of all purchases. */ - List getAllPurchases() { - return new ArrayList(mPurchaseMap.values()); - } - - void addSkuDetails(SkuDetails d) { - mSkuMap.put(d.getSku(), d); - } - - void addPurchase(Purchase p) { - mPurchaseMap.put(p.getSku(), p); - } -} diff --git a/src/de/luhmer/owncloudnewsreader/util/Purchase.java b/src/de/luhmer/owncloudnewsreader/util/Purchase.java deleted file mode 100644 index f2b872fa..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/Purchase.java +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -import org.json.JSONException; -import org.json.JSONObject; - -/** - * Represents an in-app billing purchase. - */ -public class Purchase { - String mItemType; // ITEM_TYPE_INAPP or ITEM_TYPE_SUBS - String mOrderId; - String mPackageName; - String mSku; - long mPurchaseTime; - int mPurchaseState; - String mDeveloperPayload; - String mToken; - String mOriginalJson; - String mSignature; - - public Purchase(String itemType, String jsonPurchaseInfo, String signature) throws JSONException { - mItemType = itemType; - mOriginalJson = jsonPurchaseInfo; - JSONObject o = new JSONObject(mOriginalJson); - mOrderId = o.optString("orderId"); - mPackageName = o.optString("packageName"); - mSku = o.optString("productId"); - mPurchaseTime = o.optLong("purchaseTime"); - mPurchaseState = o.optInt("purchaseState"); - mDeveloperPayload = o.optString("developerPayload"); - mToken = o.optString("token", o.optString("purchaseToken")); - mSignature = signature; - } - - public String getItemType() { return mItemType; } - public String getOrderId() { return mOrderId; } - public String getPackageName() { return mPackageName; } - public String getSku() { return mSku; } - public long getPurchaseTime() { return mPurchaseTime; } - public int getPurchaseState() { return mPurchaseState; } - public String getDeveloperPayload() { return mDeveloperPayload; } - public String getToken() { return mToken; } - public String getOriginalJson() { return mOriginalJson; } - public String getSignature() { return mSignature; } - - @Override - public String toString() { return "PurchaseInfo(type:" + mItemType + "):" + mOriginalJson; } -} diff --git a/src/de/luhmer/owncloudnewsreader/util/Security.java b/src/de/luhmer/owncloudnewsreader/util/Security.java deleted file mode 100644 index f26bee72..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/Security.java +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -import java.security.InvalidKeyException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.PublicKey; -import java.security.Signature; -import java.security.SignatureException; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; - -import android.text.TextUtils; -import android.util.Log; - -/** - * Security-related methods. For a secure implementation, all of this code - * should be implemented on a server that communicates with the - * application on the device. For the sake of simplicity and clarity of this - * example, this code is included here and is executed on the device. If you - * must verify the purchases on the phone, you should obfuscate this code to - * make it harder for an attacker to replace the code with stubs that treat all - * purchases as verified. - */ -public class Security { - private static final String TAG = "IABUtil/Security"; - - private static final String KEY_FACTORY_ALGORITHM = "RSA"; - private static final String SIGNATURE_ALGORITHM = "SHA1withRSA"; - - /** - * Verifies that the data was signed with the given signature, and returns - * the verified purchase. The data is in JSON format and signed - * with a private key. The data also contains the {@link PurchaseState} - * and product ID of the purchase. - * @param base64PublicKey the base64-encoded public key to use for verifying. - * @param signedData the signed JSON string (signed, not encrypted) - * @param signature the signature for the data, signed with the private key - */ - public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) { - if (signedData == null) { - Log.e(TAG, "data is null"); - return false; - } - - boolean verified = false; - if (!TextUtils.isEmpty(signature)) { - PublicKey key = Security.generatePublicKey(base64PublicKey); - verified = Security.verify(key, signedData, signature); - if (!verified) { - Log.w(TAG, "signature does not match data."); - return false; - } - } - return true; - } - - /** - * Generates a PublicKey instance from a string containing the - * Base64-encoded public key. - * - * @param encodedPublicKey Base64-encoded public key - * @throws IllegalArgumentException if encodedPublicKey is invalid - */ - public static PublicKey generatePublicKey(String encodedPublicKey) { - try { - byte[] decodedKey = Base64.decode(encodedPublicKey); - KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM); - return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey)); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } catch (InvalidKeySpecException e) { - Log.e(TAG, "Invalid key specification."); - throw new IllegalArgumentException(e); - } catch (Base64DecoderException e) { - Log.e(TAG, "Base64 decoding failed."); - throw new IllegalArgumentException(e); - } - } - - /** - * Verifies that the signature from the server matches the computed - * signature on the data. Returns true if the data is correctly signed. - * - * @param publicKey public key associated with the developer account - * @param signedData signed data from server - * @param signature server signature - * @return true if the data and signature match - */ - public static boolean verify(PublicKey publicKey, String signedData, String signature) { - Signature sig; - try { - sig = Signature.getInstance(SIGNATURE_ALGORITHM); - sig.initVerify(publicKey); - sig.update(signedData.getBytes()); - if (!sig.verify(Base64.decode(signature))) { - Log.e(TAG, "Signature verification failed."); - return false; - } - return true; - } catch (NoSuchAlgorithmException e) { - Log.e(TAG, "NoSuchAlgorithmException."); - } catch (InvalidKeyException e) { - Log.e(TAG, "Invalid key specification."); - } catch (SignatureException e) { - Log.e(TAG, "Signature exception."); - } catch (Base64DecoderException e) { - Log.e(TAG, "Base64 decoding failed."); - } - return false; - } -} diff --git a/src/de/luhmer/owncloudnewsreader/util/SkuDetails.java b/src/de/luhmer/owncloudnewsreader/util/SkuDetails.java deleted file mode 100644 index 06ad41d2..00000000 --- a/src/de/luhmer/owncloudnewsreader/util/SkuDetails.java +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.luhmer.owncloudnewsreader.util; - -import org.json.JSONException; -import org.json.JSONObject; - -/** - * Represents an in-app product's listing details. - */ -public class SkuDetails { - String mItemType; - String mSku; - String mType; - String mPrice; - String mTitle; - String mDescription; - String mJson; - - public SkuDetails(String jsonSkuDetails) throws JSONException { - this(IabHelper.ITEM_TYPE_INAPP, jsonSkuDetails); - } - - public SkuDetails(String itemType, String jsonSkuDetails) throws JSONException { - mItemType = itemType; - mJson = jsonSkuDetails; - JSONObject o = new JSONObject(mJson); - mSku = o.optString("productId"); - mType = o.optString("type"); - mPrice = o.optString("price"); - mTitle = o.optString("title"); - mDescription = o.optString("description"); - } - - public String getSku() { return mSku; } - public String getType() { return mType; } - public String getPrice() { return mPrice; } - public String getTitle() { return mTitle; } - public String getDescription() { return mDescription; } - - @Override - public String toString() { - return "SkuDetails:" + mJson; - } -} diff --git a/src/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java b/src/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java index c2d9eb7b..8fe24118 100644 --- a/src/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java +++ b/src/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.widget; import android.annotation.TargetApi; diff --git a/src/de/luhmer/owncloudnewsreader/widget/WidgetService.java b/src/de/luhmer/owncloudnewsreader/widget/WidgetService.java index 345c55bc..9c577498 100644 --- a/src/de/luhmer/owncloudnewsreader/widget/WidgetService.java +++ b/src/de/luhmer/owncloudnewsreader/widget/WidgetService.java @@ -1,8 +1,32 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.widget; +import android.annotation.TargetApi; import android.content.Intent; +import android.os.Build; import android.widget.RemoteViewsService; +@TargetApi(Build.VERSION_CODES.HONEYCOMB) public class WidgetService extends RemoteViewsService { @Override diff --git a/src/de/luhmer/owncloudnewsreader/widget/WidgetTodoViewsFactory.java b/src/de/luhmer/owncloudnewsreader/widget/WidgetTodoViewsFactory.java index 1b85d1e8..b729e2b9 100644 --- a/src/de/luhmer/owncloudnewsreader/widget/WidgetTodoViewsFactory.java +++ b/src/de/luhmer/owncloudnewsreader/widget/WidgetTodoViewsFactory.java @@ -1,3 +1,24 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + package de.luhmer.owncloudnewsreader.widget; import java.text.SimpleDateFormat; @@ -12,7 +33,6 @@ import android.database.Cursor; import android.os.Build; import android.text.Html; import android.util.Log; -import android.view.View; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import de.luhmer.owncloudnewsreader.Constants; @@ -131,6 +151,7 @@ public class WidgetTodoViewsFactory implements RemoteViewsService.RemoteViewsFac return(true); } + @SuppressWarnings("deprecation") @Override public void onDataSetChanged() { if(Constants.debugModeWidget)