From f86ee2ddf360ecec562db5c39277a1419daca3ac Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Fri, 19 Oct 2018 00:25:50 +0200 Subject: [PATCH] Migration to AndroidX --- .idea/misc.xml | 2 +- app/build.gradle | 22 +- .../java/de/sebse/fuplanner/MainActivity.java | 23 ++- .../fuplanner/fragments/CanteensAdapter.java | 4 +- .../fuplanner/fragments/CanteensFragment.java | 10 +- .../fuplanner/fragments/LoginFragment.java | 4 +- .../fuplanner/fragments/ModulesAdapter.java | 4 +- .../fuplanner/fragments/ModulesFragment.java | 10 +- .../fuplanner/fragments/PrefsFragment.java | 6 +- .../fuplanner/fragments/ScheduleFragment.java | 6 +- .../fuplanner/fragments/StartupFragment.java | 4 +- .../fragments/canteen/DaySwitcherAdapter.java | 6 +- .../canteen/DaySwitcherFragment.java | 6 +- .../fragments/canteen/MealAdapter.java | 6 +- .../fragments/canteen/MealFragment.java | 9 +- .../moddetails/ModDetailAdapter.java | 6 +- .../moddetails/ModDetailAnnounceFragment.java | 6 +- .../ModDetailAssignmentFragment.java | 6 +- .../moddetails/ModDetailEventAdapter.java | 4 +- .../moddetails/ModDetailEventFragment.java | 10 +- .../moddetails/ModDetailFragment.java | 6 +- .../moddetails/ModDetailGradebookAdapter.java | 5 +- .../ModDetailGradebookFragment.java | 10 +- .../moddetails/ModDetailOverviewAdapter.java | 6 +- .../moddetails/ModDetailOverviewFragment.java | 12 +- .../moddetails/ModDetailResourceFragment.java | 12 +- .../services/Canteen/types/Canteen.java | 2 +- .../services/Canteen/types/Canteens.java | 2 +- .../fuplanner/services/Canteen/types/Day.java | 2 +- .../services/GoogleAuth/GoogleAuth.java | 5 +- .../de/sebse/fuplanner/services/KVV/KVV.java | 2 +- .../services/KVV/types/LoginToken.java | 3 +- .../fuplanner/services/KVV/types/Modules.java | 5 +- .../services/KVV/types/Resource.java | 3 +- .../de/sebse/fuplanner/tools/ColorRes.java | 2 +- .../tools/MainAcitivityListener.java | 2 +- .../de/sebse/fuplanner/tools/Preferences.java | 4 +- .../de/sebse/fuplanner/tools/SortedList.java | 4 +- .../de/sebse/fuplanner/tools/UtilsDate.java | 2 +- .../tools/network/BetterHurlStack.java | 191 +++++++++++------- .../fuplanner/tools/network/HTTPService.java | 2 +- .../tools/network/NetworkCallback.java | 2 +- .../fuplanner/tools/ui/CustomViewHolder.java | 3 +- .../tools/ui/cardview/ExpandableCardView.java | 6 +- .../fuplanner/tools/ui/treeview/TreeNode.java | 2 +- .../tools/ui/treeview/TreeViewAdapter.java | 9 +- .../tools/ui/treeview/TreeViewBinder.java | 5 +- .../tools/ui/weekview/TextColorPicker.java | 2 +- .../fuplanner/tools/ui/weekview/WeekView.java | 10 +- app/src/main/res/layout/activity_main.xml | 6 +- app/src/main/res/layout/app_bar_main.xml | 10 +- .../layout/fragment_expandable_list_view.xml | 5 +- app/src/main/res/layout/fragment_login.xml | 12 +- .../main/res/layout/fragment_mod_detail.xml | 6 +- .../main/res/layout/fragment_modules_list.xml | 8 +- .../res/layout/fragment_recycler_view.xml | 8 +- docs/GoogleAuth-old.java | 7 +- gradle.properties | 2 + 58 files changed, 300 insertions(+), 239 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 26dc4f5..70996f8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -25,5 +25,5 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 31b5123..0063e94 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { targetSdkVersion 28 versionCode 3 versionName "1.1.1" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { @@ -27,24 +27,24 @@ android { dependencies { - implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation fileTree(include: ['*.jar'], dir: 'libs') - androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-beta02', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:preference-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.android.volley:volley:1.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.preference:preference:1.0.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2' + implementation 'com.android.volley:volley:1.1.0' //noinspection GradleDependency implementation 'com.google.android.gms:play-services-auth:15.0.0' - implementation 'com.android.support:support-v4:28.0.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.12' implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' - implementation 'com.android.support:support-v4:28.0.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'org.jetbrains:annotations-java5:15.0' //implementation 'com.github.quivr:android-week-view:2.0.2'//com.github.alamkanak:android-week-view:1.2.6 implementation 'com.ms-square:expandableTextView:0.1.4' diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java index 56c3c79..14ec7e8 100644 --- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java +++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java @@ -2,24 +2,25 @@ package de.sebse.fuplanner; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.design.widget.NavigationView; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import com.google.android.material.navigation.NavigationView; + import java.util.Iterator; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import de.sebse.fuplanner.fragments.CanteensFragment; import de.sebse.fuplanner.fragments.LoginFragment; import de.sebse.fuplanner.fragments.ModulesFragment; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensAdapter.java index 223b594..41c6ba0 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensAdapter.java @@ -1,11 +1,11 @@ package de.sebse.fuplanner.fragments; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.fragments.CanteensFragment.OnCanteensFragmentInteractionListener; import de.sebse.fuplanner.services.Canteen.types.Canteen; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java index efb5813..7ae6a94 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java @@ -2,15 +2,15 @@ package de.sebse.fuplanner.fragments; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.Canteen.CanteenBrowser; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java index 8a43ba5..40f5909 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java @@ -3,8 +3,6 @@ package de.sebse.fuplanner.fragments; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,6 +11,8 @@ import android.widget.EditText; import java.io.IOException; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java index 140e4e8..4b85503 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java @@ -1,11 +1,11 @@ package de.sebse.fuplanner.fragments; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.fragments.ModulesFragment.OnModulesFragmentInteractionListener; import de.sebse.fuplanner.services.KVV.types.Modules; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java index e0a3ae0..0c69320 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java @@ -2,15 +2,15 @@ package de.sebse.fuplanner.fragments; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/PrefsFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/PrefsFragment.java index f229b7b..3b69850 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/PrefsFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/PrefsFragment.java @@ -2,9 +2,9 @@ package de.sebse.fuplanner.fragments; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.v7.preference.ListPreference; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceFragmentCompat; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import de.sebse.fuplanner.R; import de.sebse.fuplanner.tools.logging.Logger; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java index 3c63246..9248904 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java @@ -4,8 +4,6 @@ import android.app.AlertDialog; import android.content.Context; import android.graphics.RectF; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,12 +13,14 @@ import java.util.Calendar; import java.util.Iterator; import java.util.List; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; import de.sebse.fuplanner.services.KVV.types.Event; import de.sebse.fuplanner.services.KVV.types.Modules; -import de.sebse.fuplanner.tools.UtilsDate; import de.sebse.fuplanner.tools.MainAcitivityListener; +import de.sebse.fuplanner.tools.UtilsDate; import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.ui.weekview.MonthLoader; import de.sebse.fuplanner.tools.ui.weekview.WeekView; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/StartupFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/StartupFragment.java index 27ffdcc..260c71a 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/StartupFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/StartupFragment.java @@ -1,12 +1,12 @@ package de.sebse.fuplanner.fragments; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import de.sebse.fuplanner.R; /** diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java index e46ed31..d9bfcca 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherAdapter.java @@ -1,8 +1,8 @@ package de.sebse.fuplanner.fragments.canteen; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; import de.sebse.fuplanner.services.Canteen.types.Canteen; import de.sebse.fuplanner.tools.UtilsDate; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java index a855b50..5b299cb 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java @@ -2,13 +2,13 @@ package de.sebse.fuplanner.fragments.canteen; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.Canteen.CanteenBrowser; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java index 74a5210..c3ce176 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealAdapter.java @@ -1,9 +1,6 @@ package de.sebse.fuplanner.fragments.canteen; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,6 +9,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.Canteen.types.Day; import de.sebse.fuplanner.services.Canteen.types.Meal; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java index 16eadf2..95cee0b 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/MealFragment.java @@ -3,15 +3,14 @@ package de.sebse.fuplanner.fragments.canteen; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ExpandableListView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.Canteen.CanteenBrowser; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java index 01b252a..a8c22cc 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java @@ -1,9 +1,9 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; import de.sebse.fuplanner.R; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java index f6a6a17..95e5b05 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java @@ -2,14 +2,14 @@ package de.sebse.fuplanner.fragments.moddetails; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ExpandableListView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java index 966fad7..cbd9c92 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java @@ -2,14 +2,14 @@ package de.sebse.fuplanner.fragments.moddetails; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ExpandableListView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java index b9929fa..960682c 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventAdapter.java @@ -1,7 +1,5 @@ package de.sebse.fuplanner.fragments.moddetails; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -9,6 +7,8 @@ import android.view.ViewGroup; import java.util.ArrayList; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.types.Event; import de.sebse.fuplanner.services.KVV.types.Modules; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventFragment.java index dee1b91..04fb784 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailEventFragment.java @@ -3,15 +3,15 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java index bdede97..4eaab77 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java @@ -2,13 +2,13 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.tools.MainAcitivityListener; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookAdapter.java index 43311a3..62a779d 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookAdapter.java @@ -1,8 +1,6 @@ package de.sebse.fuplanner.fragments.moddetails; import android.annotation.SuppressLint; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -11,10 +9,11 @@ import android.widget.TextView; import java.util.ArrayList; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.types.Gradebook; import de.sebse.fuplanner.services.KVV.types.Modules; -import de.sebse.fuplanner.tools.ui.CustomViewHolder; import de.sebse.fuplanner.tools.ui.StringViewHolder; class ModDetailGradebookAdapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookFragment.java index e6dea02..8ddf651 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailGradebookFragment.java @@ -3,15 +3,15 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java index 6e0aace..aca5eb7 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java @@ -1,8 +1,5 @@ package de.sebse.fuplanner.fragments.moddetails; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -12,6 +9,9 @@ import com.ms.square.android.expandabletextview.ExpandableTextView; import java.util.ArrayList; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.types.Announcement; import de.sebse.fuplanner.services.KVV.types.Assignment; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java index 5573ae3..ae8c7ec 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java @@ -3,16 +3,16 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java index c4bd605..dc4067c 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java @@ -8,12 +8,6 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -22,6 +16,12 @@ import android.widget.ImageView; import java.io.File; import java.util.Arrays; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.KVV; diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteen.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteen.java index c948706..165b38b 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteen.java +++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteen.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.services.Canteen.types; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.Serializable; import java.util.Calendar; diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteens.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteens.java index 80d6c08..959be93 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteens.java +++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Canteens.java @@ -1,7 +1,7 @@ package de.sebse.fuplanner.services.Canteen.types; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.FileInputStream; import java.io.FileOutputStream; diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Day.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Day.java index 34a10de..699b752 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Day.java +++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/types/Day.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.services.Canteen.types; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.Serializable; import java.util.Calendar; diff --git a/app/src/main/java/de/sebse/fuplanner/services/GoogleAuth/GoogleAuth.java b/app/src/main/java/de/sebse/fuplanner/services/GoogleAuth/GoogleAuth.java index a4f78b1..ead95a8 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/GoogleAuth/GoogleAuth.java +++ b/app/src/main/java/de/sebse/fuplanner/services/GoogleAuth/GoogleAuth.java @@ -2,8 +2,6 @@ package de.sebse.fuplanner.services.GoogleAuth; import android.content.Intent; import android.content.IntentSender; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; import android.util.Log; import android.widget.Toast; @@ -17,6 +15,9 @@ import com.google.android.gms.common.api.ApiException; import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.common.api.ResolvableApiException; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; + import static android.app.Activity.RESULT_OK; /** diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java index f815c5b..70fbd10 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java @@ -1,13 +1,13 @@ package de.sebse.fuplanner.services.KVV; import android.content.Context; -import android.support.annotation.NonNull; import android.util.Pair; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import androidx.annotation.NonNull; import de.sebse.fuplanner.services.KVV.types.LoginToken; import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.tools.MainAcitivityListener; diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/LoginToken.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/LoginToken.java index 179ea06..d87218c 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/LoginToken.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/LoginToken.java @@ -1,7 +1,6 @@ package de.sebse.fuplanner.services.KVV.types; import android.content.Context; -import android.support.annotation.Nullable; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -11,6 +10,8 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.HashMap; +import androidx.annotation.Nullable; + /** * Created by sebastian on 29.10.17. */ diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java index b8dbb1a..9c313bf 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java @@ -1,8 +1,6 @@ package de.sebse.fuplanner.services.KVV.types; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -14,6 +12,9 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + /** * Created by sebastian on 29.10.17. */ diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Resource.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Resource.java index e1b6400..0d29a3f 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Resource.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Resource.java @@ -1,10 +1,9 @@ package de.sebse.fuplanner.services.KVV.types; -import android.support.annotation.LayoutRes; - import java.io.Serializable; import java.util.ArrayList; +import androidx.annotation.LayoutRes; import de.sebse.fuplanner.R; import de.sebse.fuplanner.tools.ui.treeview.LayoutItemType; import de.sebse.fuplanner.tools.ui.treeview.TreeNode; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java b/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java index 4d59659..f4fc34b 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ColorRes.java @@ -1,7 +1,7 @@ package de.sebse.fuplanner.tools; import android.graphics.Paint; -import android.support.annotation.ColorInt; +import androidx.annotation.ColorInt; public class ColorRes implements Color { @ColorInt private final int mResId; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java b/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java index 114d984..0b17123 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.tools; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import de.sebse.fuplanner.services.Canteen.CanteenBrowser; import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/Preferences.java b/app/src/main/java/de/sebse/fuplanner/tools/Preferences.java index b3c6985..66a1581 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/Preferences.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/Preferences.java @@ -1,8 +1,8 @@ package de.sebse.fuplanner.tools; import android.content.Context; -import android.support.annotation.ArrayRes; -import android.support.v7.preference.PreferenceManager; +import androidx.annotation.ArrayRes; +import androidx.preference.PreferenceManager; public class Preferences { public static String getString(Context context, @ArrayRes int key) { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/SortedList.java b/app/src/main/java/de/sebse/fuplanner/tools/SortedList.java index 48e66ff..15a0ee4 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/SortedList.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/SortedList.java @@ -1,7 +1,7 @@ package de.sebse.fuplanner.tools; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.io.Serializable; import java.util.ArrayList; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/UtilsDate.java b/app/src/main/java/de/sebse/fuplanner/tools/UtilsDate.java index a32ab60..ef817fa 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/UtilsDate.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/UtilsDate.java @@ -4,7 +4,7 @@ import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.format.DateFormat; import com.google.android.gms.common.logging.Logger; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/network/BetterHurlStack.java b/app/src/main/java/de/sebse/fuplanner/tools/network/BetterHurlStack.java index 3979805..f6c4de0 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/network/BetterHurlStack.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/network/BetterHurlStack.java @@ -1,24 +1,18 @@ package de.sebse.fuplanner.tools.network; import com.android.volley.AuthFailureError; +import com.android.volley.Header; import com.android.volley.Request; +import com.android.volley.toolbox.HttpResponse; import com.android.volley.toolbox.HurlStack; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.ProtocolVersion; -import org.apache.http.StatusLine; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.message.BasicStatusLine; - import java.io.DataOutputStream; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,12 +22,15 @@ import java.util.regex.Pattern; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSocketFactory; +import androidx.annotation.VisibleForTesting; + /** * Created by sebastian on 29.10.17. */ public class BetterHurlStack extends HurlStack { private static final String HEADER_CONTENT_TYPE = "Content-Type"; + private static final int HTTP_CONTINUE = 100; private final UrlRewriter mUrlRewriter; private final SSLSocketFactory mSslSocketFactory; @@ -76,12 +73,12 @@ public class BetterHurlStack extends HurlStack { } @Override - public HttpResponse performRequest(Request request, Map additionalHeaders) + public HttpResponse executeRequest(Request request, Map additionalHeaders) throws IOException, AuthFailureError { String url = request.getUrl(); HashMap map = new HashMap<>(); - map.putAll(request.getHeaders()); map.putAll(additionalHeaders); + map.putAll(request.getHeaders()); if (mUrlRewriter != null) { String rewritten = mUrlRewriter.rewriteUrl(url); if (rewritten == null) { @@ -91,67 +88,85 @@ public class BetterHurlStack extends HurlStack { } URL parsedUrl = new URL(url); HttpURLConnection connection = openConnection(parsedUrl, request); - for (String headerName : map.keySet()) { - connection.addRequestProperty(headerName, map.get(headerName)); + boolean keepConnectionOpen = false; + try { + for (String headerName : map.keySet()) { + connection.setRequestProperty(headerName, map.get(headerName)); + } + setConnectionParametersForRequest(connection, request); + // Initialize HttpResponse with data from the HttpURLConnection. + int responseCode = connection.getResponseCode(); + if (responseCode == -1) { + // -1 is returned by getResponseCode() if the response code could not be retrieved. + // Signal to the caller that something was wrong with the connection. + throw new IOException("Could not retrieve response code from HttpUrlConnection."); + } + + if (!hasResponseBody(request.getMethod(), responseCode)) { + return new HttpResponse(responseCode, convertHeaders(connection.getHeaderFields())); + } + + // Need to keep the connection open until the stream is consumed by the caller. Wrap the + // stream such that close() will disconnect the connection. + keepConnectionOpen = true; + return new HttpResponse( + responseCode, + convertHeaders(connection.getHeaderFields()), + connection.getContentLength(), + new UrlConnectionInputStream(connection)); + + } finally { + if (!keepConnectionOpen) { + connection.disconnect(); + } } - setConnectionParametersForRequest(connection, request); - // Initialize HttpResponse with data from the HttpURLConnection. - ProtocolVersion protocolVersion = new ProtocolVersion("HTTP", 1, 1); - int responseCode = connection.getResponseCode(); - if (responseCode == -1) { - // -1 is returned by getResponseCode() if the response code could not be retrieved. - // Signal to the caller that something was wrong with the connection. - throw new IOException("Could not retrieve response code from HttpUrlConnection."); - } - StatusLine responseStatus = new BasicStatusLine(protocolVersion, - connection.getResponseCode(), connection.getResponseMessage()); - BasicHttpResponse response = new BasicHttpResponse(responseStatus); - response.setEntity(entityFromConnection(connection)); - for (Map.Entry> header : connection.getHeaderFields().entrySet()) { - if (header.getKey() != null) { - Header h; - if (header.getKey().equals("Set-Cookie")) { + } + + @VisibleForTesting + static List
convertHeaders(Map> responseHeaders) { + List
headerList = new ArrayList<>(responseHeaders.size()); + for (Map.Entry> entry : responseHeaders.entrySet()) { + // HttpUrlConnection includes the status line as a header with a null key; omit it here + // since it's not really a header and the rest of Volley assumes non-null keys. + if (entry.getKey() != null) { + if (entry.getKey().equals("Set-Cookie")) { Pattern pattern = Pattern.compile("^([^=]+=[^;]+;)"); StringBuilder cookieValue = new StringBuilder(); - for (String value: header.getValue()) { + for (String value : entry.getValue()) { Matcher matcher = pattern.matcher(value); if (matcher.find()) { cookieValue.append(matcher.group(1)); } } - h = new BasicHeader(header.getKey(), cookieValue.toString()); + headerList.add(new Header(entry.getKey(), cookieValue.toString())); } else { - h = new BasicHeader(header.getKey(), header.getValue().get(0)); + headerList.add(new Header(entry.getKey(), entry.getValue().get(0))); } - response.addHeader(h); } } - return response; + return headerList; } /** - * Initializes an {@link HttpEntity} from the given {@link HttpURLConnection}. - * @param connection A http connection - * @return an HttpEntity populated with data from connection. + * Checks if a response message contains a body. + * + * @see RFC 7230 section 3.3 + * @param requestMethod request method + * @param responseCode response status code + * @return whether the response has a body */ - private static HttpEntity entityFromConnection(HttpURLConnection connection) { - BasicHttpEntity entity = new BasicHttpEntity(); - InputStream inputStream; - try { - inputStream = connection.getInputStream(); - } catch (IOException ioe) { - inputStream = connection.getErrorStream(); - } - entity.setContent(inputStream); - entity.setContentLength(connection.getContentLength()); - entity.setContentEncoding(connection.getContentEncoding()); - entity.setContentType(connection.getContentType()); - return entity; + private static boolean hasResponseBody(int requestMethod, int responseCode) { + return requestMethod != Request.Method.HEAD + && !(HTTP_CONTINUE <= responseCode && responseCode < HttpURLConnection.HTTP_OK) + && responseCode != HttpURLConnection.HTTP_NO_CONTENT + && responseCode != HttpURLConnection.HTTP_NOT_MODIFIED; } + // NOTE: Any request headers added here (via setRequestProperty or addRequestProperty) should be + // checked against the existing properties in the connection and not overridden if already set. @SuppressWarnings("deprecation") - /* package */ static void setConnectionParametersForRequest(HttpURLConnection connection, - Request request) throws IOException, AuthFailureError { + /* package */ static void setConnectionParametersForRequest( + HttpURLConnection connection, Request request) throws IOException, AuthFailureError { switch (request.getMethod()) { case Request.Method.DEPRECATED_GET_OR_POST: // This is the deprecated way that needs to be handled for backwards compatibility. @@ -159,16 +174,8 @@ public class BetterHurlStack extends HurlStack { // GET. Otherwise, it is assumed that the request is a POST. byte[] postBody = request.getPostBody(); if (postBody != null) { - // Prepare output. There is no need to set Content-Length explicitly, - // since this is handled by HttpURLConnection using the size of the prepared - // output stream. - connection.setDoOutput(true); connection.setRequestMethod("POST"); - connection.addRequestProperty(HEADER_CONTENT_TYPE, - request.getPostBodyContentType()); - DataOutputStream out = new DataOutputStream(connection.getOutputStream()); - out.write(postBody); - out.close(); + addBody(connection, request, postBody); } break; case Request.Method.GET: @@ -209,14 +216,26 @@ public class BetterHurlStack extends HurlStack { throws IOException, AuthFailureError { byte[] body = request.getBody(); if (body != null) { - connection.setDoOutput(true); - connection.addRequestProperty(HEADER_CONTENT_TYPE, request.getBodyContentType()); - DataOutputStream out = new DataOutputStream(connection.getOutputStream()); - out.write(body); - out.close(); + addBody(connection, request, body); } } + private static void addBody(HttpURLConnection connection, Request request, byte[] body) + throws IOException { + // Prepare output. There is no need to set Content-Length explicitly, + // since this is handled by HttpURLConnection using the size of the prepared + // output stream. + connection.setDoOutput(true); + // Set the content-type unless it was already set (by Request#getHeaders). + if (!connection.getRequestProperties().containsKey(HEADER_CONTENT_TYPE)) { + connection.setRequestProperty( + HEADER_CONTENT_TYPE, request.getBodyContentType()); + } + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.write(body); + out.close(); + } + private HttpURLConnection openConnection(URL url, Request request) throws IOException { HttpURLConnection connection = createConnection(url); int timeoutMs = request.getTimeoutMs(); @@ -230,4 +249,40 @@ public class BetterHurlStack extends HurlStack { } return connection; } + + + /** + * Wrapper for a {@link HttpURLConnection}'s InputStream which disconnects the connection on + * stream close. + */ + static class UrlConnectionInputStream extends FilterInputStream { + private final HttpURLConnection mConnection; + + UrlConnectionInputStream(HttpURLConnection connection) { + super(inputStreamFromConnection(connection)); + mConnection = connection; + } + + @Override + public void close() throws IOException { + super.close(); + mConnection.disconnect(); + } + } + + /** + * Initializes an {@link InputStream} from the given {@link HttpURLConnection}. + * + * @param connection + * @return an HttpEntity populated with data from connection. + */ + private static InputStream inputStreamFromConnection(HttpURLConnection connection) { + InputStream inputStream; + try { + inputStream = connection.getInputStream(); + } catch (IOException ioe) { + inputStream = connection.getErrorStream(); + } + return inputStream; + } } diff --git a/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java b/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java index 59a7811..ca7e6ef 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java @@ -1,7 +1,6 @@ package de.sebse.fuplanner.tools.network; import android.content.Context; -import android.support.annotation.Nullable; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; @@ -17,6 +16,7 @@ import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; +import androidx.annotation.Nullable; import de.sebse.fuplanner.tools.logging.Logger; /** diff --git a/app/src/main/java/de/sebse/fuplanner/tools/network/NetworkCallback.java b/app/src/main/java/de/sebse/fuplanner/tools/network/NetworkCallback.java index fc74221..2f508fe 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/network/NetworkCallback.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/network/NetworkCallback.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.tools.network; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public interface NetworkCallback { void onResponse(@NonNull T success); diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/CustomViewHolder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/CustomViewHolder.java index 8a7a0fb..a80021e 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/CustomViewHolder.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/CustomViewHolder.java @@ -1,8 +1,9 @@ package de.sebse.fuplanner.tools.ui; -import android.support.v7.widget.RecyclerView; import android.view.View; +import androidx.recyclerview.widget.RecyclerView; + public class CustomViewHolder extends RecyclerView.ViewHolder { public final View mView; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/cardview/ExpandableCardView.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/cardview/ExpandableCardView.java index 455d3b6..2bd0063 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/cardview/ExpandableCardView.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/cardview/ExpandableCardView.java @@ -4,9 +4,6 @@ package de.sebse.fuplanner.tools.ui.cardview; import android.content.Context; import android.content.res.TypedArray; import android.os.Build; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.v7.widget.CardView; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; @@ -15,6 +12,9 @@ import android.view.animation.RotateAnimation; import android.view.animation.Transformation; import android.widget.ImageButton; +import androidx.annotation.LayoutRes; +import androidx.annotation.Nullable; +import androidx.cardview.widget.CardView; import de.sebse.fuplanner.R; import de.sebse.fuplanner.tools.UtilsUi; import de.sebse.fuplanner.tools.logging.Logger; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeNode.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeNode.java index 38f6ed0..6e56c51 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeNode.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeNode.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.tools.ui.treeview; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewAdapter.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewAdapter.java index 0f3c130..958c412 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewAdapter.java @@ -1,10 +1,6 @@ package de.sebse.fuplanner.tools.ui.treeview; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.util.DiffUtil; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,6 +9,11 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.RecyclerView; + /** * Created by tlh on 2016/10/1 :) */ diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewBinder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewBinder.java index 522536c..a591b35 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewBinder.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/treeview/TreeViewBinder.java @@ -1,9 +1,10 @@ package de.sebse.fuplanner.tools.ui.treeview; -import android.support.annotation.IdRes; -import android.support.v7.widget.RecyclerView; import android.view.View; +import androidx.annotation.IdRes; +import androidx.recyclerview.widget.RecyclerView; + public abstract class TreeViewBinder implements LayoutItemType { public abstract VH provideViewHolder(View itemView); diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/TextColorPicker.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/TextColorPicker.java index 487874d..ac49e9a 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/TextColorPicker.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/TextColorPicker.java @@ -1,6 +1,6 @@ package de.sebse.fuplanner.tools.ui.weekview; -import android.support.annotation.ColorInt; +import androidx.annotation.ColorInt; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java index 65ffd20..5ba8223 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/weekview/WeekView.java @@ -13,11 +13,6 @@ import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; -import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; -import android.support.v4.view.GestureDetectorCompat; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.animation.FastOutLinearInInterpolator; import android.text.Layout; import android.text.SpannableStringBuilder; import android.text.StaticLayout; @@ -44,6 +39,11 @@ import java.util.Collections; import java.util.List; import java.util.Locale; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.core.view.GestureDetectorCompat; +import androidx.core.view.ViewCompat; +import androidx.interpolator.view.animation.FastOutLinearInInterpolator; import de.sebse.fuplanner.R; import de.sebse.fuplanner.tools.ColorRes; import de.sebse.fuplanner.tools.UtilsDate; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 18e45b1..6b82597 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - - - + diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 58e8c9b..e93de49 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -1,18 +1,18 @@ - - - - + - + diff --git a/app/src/main/res/layout/fragment_expandable_list_view.xml b/app/src/main/res/layout/fragment_expandable_list_view.xml index 5ecf219..61d6923 100644 --- a/app/src/main/res/layout/fragment_expandable_list_view.xml +++ b/app/src/main/res/layout/fragment_expandable_list_view.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index eb9b474..58854a9 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -21,7 +21,7 @@ android:contentDescription="@string/cd_ic_launcher"/> - - + - - + - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_modules_list.xml b/app/src/main/res/layout/fragment_modules_list.xml index 546bc96..0d4345e 100644 --- a/app/src/main/res/layout/fragment_modules_list.xml +++ b/app/src/main/res/layout/fragment_modules_list.xml @@ -1,17 +1,17 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_recycler_view.xml b/app/src/main/res/layout/fragment_recycler_view.xml index 23c5ea4..f561b1b 100644 --- a/app/src/main/res/layout/fragment_recycler_view.xml +++ b/app/src/main/res/layout/fragment_recycler_view.xml @@ -1,19 +1,19 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/docs/GoogleAuth-old.java b/docs/GoogleAuth-old.java index 4630c80..c93200b 100644 --- a/docs/GoogleAuth-old.java +++ b/docs/GoogleAuth-old.java @@ -3,9 +3,6 @@ package de.sebse.fuplanner.services.GoogleAuth; import android.content.Intent; import android.content.IntentSender; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; import android.util.Log; import android.widget.Toast; @@ -19,6 +16,10 @@ import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.FragmentActivity; + import static android.app.Activity.RESULT_OK; /** diff --git a/gradle.properties b/gradle.properties index aac7c9b..9e6fce1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode.