From b16bf335b7d3a5fca34b7a6a6fe8a0e9b9d415d5 Mon Sep 17 00:00:00 2001 From: Christophe Beyls Date: Mon, 1 Jan 2018 18:42:38 +0100 Subject: [PATCH] Updated code to the latest support library and build tools. MinSDK is now 14; removed legacy code --- app/build.gradle | 14 +- .../support/v4/app/SafeLoadersUtils.java | 18 ++ .../v7/widget/DividerItemDecoration.java | 157 ------------------ .../AppCompatPreferenceActivity.java | 53 ++++-- .../fosdem/activities/BaseActivity.java | 17 ++ .../activities/EventDetailsActivity.java | 3 +- .../fosdem/activities/MainActivity.java | 36 ++-- .../fosdem/activities/PersonInfoActivity.java | 3 +- .../activities/RoomImageDialogActivity.java | 3 +- .../activities/SearchResultActivity.java | 6 +- .../fosdem/activities/SettingsActivity.java | 4 +- .../activities/TrackScheduleActivity.java | 5 +- .../TrackScheduleEventActivity.java | 9 +- .../fosdem/adapters/EventsAdapter.java | 12 +- .../fragments/BookmarksListFragment.java | 3 +- .../fragments/EventDetailsFragment.java | 28 ++-- .../fosdem/fragments/LiveFragment.java | 8 +- .../fosdem/fragments/MapFragment.java | 3 +- .../fosdem/fragments/PersonsListFragment.java | 2 +- .../fragments/RecyclerViewFragment.java | 2 +- .../fragments/RoomImageDialogFragment.java | 2 +- .../fosdem/fragments/SmoothListFragment.java | 2 +- .../fragments/TrackScheduleListFragment.java | 15 +- .../fosdem/fragments/TracksFragment.java | 8 +- .../fosdem/fragments/TracksListFragment.java | 4 +- .../parsers/IterableAbstractPullParser.java | 3 + .../fosdem/services/AlarmIntentService.java | 8 +- .../fosdem/utils/NfcReceiverUtils.java | 28 ---- .../fosdem/utils/NfcSenderUtils.java | 51 ------ .../be/digitalia/fosdem/utils/NfcUtils.java | 62 ++++--- .../digitalia/fosdem/utils/StringUtils.java | 1 + .../utils/TwoStatePreferenceCompat.java | 40 ----- .../fosdem/widgets/CheckableLinearLayout.java | 43 ----- .../widgets/ForegroundLinearLayout.java | 1 - .../fosdem/widgets/MultiChoiceHelper.java | 17 +- .../fosdem/widgets/SaveStatePhotoView.java | 12 +- .../fosdem/widgets/SlidingTabLayout.java | 2 +- .../UnderlinePageIndicator.java | 27 ++- .../res/drawable-hdpi-v11/ic_stat_fosdem.png | Bin 1237 -> 0 bytes .../main/res/drawable-hdpi/ic_stat_fosdem.png | Bin 1165 -> 1237 bytes .../res/drawable-mdpi-v11/ic_stat_fosdem.png | Bin 809 -> 0 bytes .../main/res/drawable-mdpi/ic_stat_fosdem.png | Bin 440 -> 809 bytes .../res/drawable-v11/activated_background.xml | 11 -- .../res/drawable-xhdpi-v11/ic_stat_fosdem.png | Bin 1485 -> 0 bytes .../res/drawable-xhdpi/ic_stat_fosdem.png | Bin 1528 -> 1485 bytes .../drawable-xxhdpi-v11/ic_stat_fosdem.png | Bin 2003 -> 0 bytes .../res/drawable-xxhdpi/ic_stat_fosdem.png | Bin 1367 -> 2003 bytes .../res/drawable/activated_background.xml | 13 +- .../res/drawable/checkable_foreground.xml | 11 -- app/src/main/res/layout/item_event.xml | 6 +- app/src/main/res/menu/main.xml | 2 +- app/src/main/res/values-v11/styles.xml | 21 --- app/src/main/res/values/styles.xml | 20 +-- build.gradle | 5 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 55 files changed, 246 insertions(+), 559 deletions(-) create mode 100644 app/src/main/java/android/support/v4/app/SafeLoadersUtils.java delete mode 100644 app/src/main/java/android/support/v7/widget/DividerItemDecoration.java create mode 100644 app/src/main/java/be/digitalia/fosdem/activities/BaseActivity.java delete mode 100644 app/src/main/java/be/digitalia/fosdem/utils/NfcReceiverUtils.java delete mode 100644 app/src/main/java/be/digitalia/fosdem/utils/NfcSenderUtils.java delete mode 100644 app/src/main/java/be/digitalia/fosdem/utils/TwoStatePreferenceCompat.java delete mode 100644 app/src/main/java/be/digitalia/fosdem/widgets/CheckableLinearLayout.java delete mode 100644 app/src/main/res/drawable-hdpi-v11/ic_stat_fosdem.png delete mode 100644 app/src/main/res/drawable-mdpi-v11/ic_stat_fosdem.png delete mode 100644 app/src/main/res/drawable-v11/activated_background.xml delete mode 100644 app/src/main/res/drawable-xhdpi-v11/ic_stat_fosdem.png delete mode 100644 app/src/main/res/drawable-xxhdpi-v11/ic_stat_fosdem.png delete mode 100644 app/src/main/res/drawable/checkable_foreground.xml delete mode 100644 app/src/main/res/values-v11/styles.xml diff --git a/app/build.gradle b/app/build.gradle index da77918..f8e253c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.3" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { applicationId "be.digitalia.fosdem" - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion 25 versionCode 900146 versionName "1.4.6" @@ -22,14 +22,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - - aaptOptions { - cruncherEnabled false - } } ext { - supportLibraryVersion = '23.4.0' + supportLibraryVersion = '27.0.2' } dependencies { @@ -37,5 +33,5 @@ dependencies { compile "com.android.support:recyclerview-v7:$supportLibraryVersion" compile "com.android.support:cardview-v7:$supportLibraryVersion" compile "com.android.support:customtabs:$supportLibraryVersion" - compile 'com.github.chrisbanes.photoview:library:1.2.4' + compile 'com.github.chrisbanes:PhotoView:2.1.3' } diff --git a/app/src/main/java/android/support/v4/app/SafeLoadersUtils.java b/app/src/main/java/android/support/v4/app/SafeLoadersUtils.java new file mode 100644 index 0000000..e31a15d --- /dev/null +++ b/app/src/main/java/android/support/v4/app/SafeLoadersUtils.java @@ -0,0 +1,18 @@ +package android.support.v4.app; + +/** + * Contains utility method to prevent Loaders from being forcefully retained during a configuration change. + * Forceful retain currently causes all stopped Loaders to briefly start, causing unexpected issues for detached fragments. + * This restores the Loaders behavior of support libraries < 24.0.0 for fragments. + * + * @author Christophe Beyls + * @see Bug report + */ +public class SafeLoadersUtils { + + public static void onRetainCustomNonConfigurationInstance(FragmentActivity activity) { + // All loaders are already stopped or retained at that point, but calling this method again + // sets a flag to prevent them from being forcefully retained during the next phase + activity.mFragments.doLoaderStop(false); + } +} \ No newline at end of file diff --git a/app/src/main/java/android/support/v7/widget/DividerItemDecoration.java b/app/src/main/java/android/support/v7/widget/DividerItemDecoration.java deleted file mode 100644 index 59808f2..0000000 --- a/app/src/main/java/android/support/v7/widget/DividerItemDecoration.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2016 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 android.support.v7.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.v4.view.ViewCompat; -import android.view.View; -import android.widget.LinearLayout; - -/** - * DividerItemDecoration is a {@link RecyclerView.ItemDecoration} that can be used as a divider - * between items of a {@link LinearLayoutManager}. It supports both {@link #HORIZONTAL} and - * {@link #VERTICAL} orientations. - *

- *

- *     mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
- *             mLayoutManager.getOrientation());
- *     recyclerView.addItemDecoration(mDividerItemDecoration);
- * 
- */ -public class DividerItemDecoration extends RecyclerView.ItemDecoration { - public static final int HORIZONTAL = LinearLayout.HORIZONTAL; - public static final int VERTICAL = LinearLayout.VERTICAL; - - private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; - - private Drawable mDivider; - - /** - * Current orientation. Either {@link #HORIZONTAL} or {@link #VERTICAL}. - */ - private int mOrientation; - - private final Rect mBounds = new Rect(); - - /** - * Creates a divider {@link RecyclerView.ItemDecoration} that can be used with a - * {@link LinearLayoutManager}. - * - * @param context Current context, it will be used to access resources. - * @param orientation Divider orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}. - */ - public DividerItemDecoration(Context context, int orientation) { - final TypedArray a = context.obtainStyledAttributes(ATTRS); - mDivider = a.getDrawable(0); - a.recycle(); - setOrientation(orientation); - } - - /** - * Sets the orientation for this divider. This should be called if - * {@link RecyclerView.LayoutManager} changes orientation. - * - * @param orientation {@link #HORIZONTAL} or {@link #VERTICAL} - */ - public void setOrientation(int orientation) { - if (orientation != HORIZONTAL && orientation != VERTICAL) { - throw new IllegalArgumentException( - "Invalid orientation. It should be either HORIZONTAL or VERTICAL"); - } - mOrientation = orientation; - } - - /** - * Sets the {@link Drawable} for this divider. - * - * @param drawable Drawable that should be used as a divider. - */ - public void setDrawable(@NonNull Drawable drawable) { - mDivider = drawable; - } - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - if (parent.getLayoutManager() == null) { - return; - } - if (mOrientation == VERTICAL) { - drawVertical(c, parent); - } else { - drawHorizontal(c, parent); - } - } - - private static void getDecoratedBoundsWithMargins(View view, Rect outBounds) { - final RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); - final Rect insets = lp.mDecorInsets; - outBounds.set(view.getLeft() - insets.left - lp.leftMargin, - view.getTop() - insets.top - lp.topMargin, - view.getRight() + insets.right + lp.rightMargin, - view.getBottom() + insets.bottom + lp.bottomMargin); - } - - private void drawVertical(Canvas canvas, RecyclerView parent) { - canvas.save(); - final int left = 0; - final int right = parent.getWidth(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - getDecoratedBoundsWithMargins(child, mBounds); - final int bottom = mBounds.bottom + Math.round(ViewCompat.getTranslationY(child)); - final int top = bottom - mDivider.getIntrinsicHeight(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(canvas); - } - canvas.restore(); - } - - private void drawHorizontal(Canvas canvas, RecyclerView parent) { - canvas.save(); - final int top = 0; - final int bottom = parent.getHeight(); - - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount; i++) { - final View child = parent.getChildAt(i); - getDecoratedBoundsWithMargins(child, mBounds); - final int right = mBounds.right + Math.round(ViewCompat.getTranslationX(child)); - final int left = right - mDivider.getIntrinsicWidth(); - mDivider.setBounds(left, top, right, bottom); - mDivider.draw(canvas); - } - canvas.restore(); - } - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, - RecyclerView.State state) { - if (mOrientation == VERTICAL) { - outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); - } else { - outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/be/digitalia/fosdem/activities/AppCompatPreferenceActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/AppCompatPreferenceActivity.java index dbbdb3a..f511916 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/AppCompatPreferenceActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/AppCompatPreferenceActivity.java @@ -1,12 +1,14 @@ package be.digitalia.fosdem.activities; import android.content.res.Configuration; +import android.os.Build; import android.os.Bundle; import android.preference.PreferenceActivity; import android.support.annotation.IdRes; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StyleRes; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; @@ -21,14 +23,34 @@ import android.view.ViewGroup; public class AppCompatPreferenceActivity extends PreferenceActivity { private AppCompatDelegate mDelegate; + private int mThemeId = 0; @Override - protected void onCreate(Bundle savedInstanceState) { - getDelegate().installViewFactory(); - getDelegate().onCreate(savedInstanceState); + protected void onCreate(@Nullable Bundle savedInstanceState) { + final AppCompatDelegate delegate = getDelegate(); + delegate.installViewFactory(); + delegate.onCreate(savedInstanceState); + if (delegate.applyDayNight() && mThemeId != 0) { + // If DayNight has been applied, we need to re-apply the theme for + // the changes to take effect. On API 23+, we should bypass + // setTheme(), which will no-op if the theme ID is identical to the + // current theme ID. + if (Build.VERSION.SDK_INT >= 23) { + onApplyThemeResource(getTheme(), mThemeId, false); + } else { + setTheme(mThemeId); + } + } super.onCreate(savedInstanceState); } + @Override + public void setTheme(@StyleRes final int resid) { + super.setTheme(resid); + // Keep hold of the theme id so that we can re-set it later if needed + mThemeId = resid; + } + @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); @@ -44,8 +66,8 @@ public class AppCompatPreferenceActivity extends PreferenceActivity { getDelegate().setSupportActionBar(toolbar); } - @NonNull @Override + @NonNull public MenuInflater getMenuInflater() { return getDelegate().getMenuInflater(); } @@ -76,21 +98,27 @@ public class AppCompatPreferenceActivity extends PreferenceActivity { getDelegate().onConfigurationChanged(newConfig); } - @Override - protected void onStop() { - super.onStop(); - getDelegate().onStop(); - } - @Override protected void onPostResume() { super.onPostResume(); getDelegate().onPostResume(); } + @Override + protected void onStart() { + super.onStart(); + getDelegate().onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + getDelegate().onStop(); + } + @Override @Nullable - public View findViewById(@IdRes int id) { + public T findViewById(@IdRes int id) { return getDelegate().findViewById(id); } @@ -121,7 +149,8 @@ public class AppCompatPreferenceActivity extends PreferenceActivity { getDelegate().onSaveInstanceState(outState); } - private AppCompatDelegate getDelegate() { + @NonNull + public AppCompatDelegate getDelegate() { if (mDelegate == null) { mDelegate = AppCompatDelegate.create(this, null); } diff --git a/app/src/main/java/be/digitalia/fosdem/activities/BaseActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/BaseActivity.java new file mode 100644 index 0000000..6a96b1e --- /dev/null +++ b/app/src/main/java/be/digitalia/fosdem/activities/BaseActivity.java @@ -0,0 +1,17 @@ +package be.digitalia.fosdem.activities; + +import android.support.v4.app.SafeLoadersUtils; +import android.support.v7.app.AppCompatActivity; + +/** + * Common activity code with fragment loaders fix. + */ +public abstract class BaseActivity extends AppCompatActivity { + + @Override + public Object onRetainCustomNonConfigurationInstance() { + // TODO Remove when support-fragment Loaders bug is fixed + SafeLoadersUtils.onRetainCustomNonConfigurationInstance(this); + return super.onRetainCustomNonConfigurationInstance(); + } +} diff --git a/app/src/main/java/be/digitalia/fosdem/activities/EventDetailsActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/EventDetailsActivity.java index 6d85a44..bafa7d9 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/EventDetailsActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/EventDetailsActivity.java @@ -11,7 +11,6 @@ import android.support.v4.app.NavUtils; import android.support.v4.app.TaskStackBuilder; import android.support.v4.content.Loader; import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.widget.Toast; @@ -29,7 +28,7 @@ import be.digitalia.fosdem.utils.ThemeUtils; * * @author Christophe Beyls */ -public class EventDetailsActivity extends AppCompatActivity implements LoaderCallbacks, CreateNfcAppDataCallback { +public class EventDetailsActivity extends BaseActivity implements LoaderCallbacks, CreateNfcAppDataCallback { public static final String EXTRA_EVENT = "event"; diff --git a/app/src/main/java/be/digitalia/fosdem/activities/MainActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/MainActivity.java index cd7286d..a20f291 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/MainActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/MainActivity.java @@ -25,15 +25,12 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; -import android.support.v4.os.AsyncTaskCompat; import android.support.v4.view.GravityCompat; -import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.TextViewCompat; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.AppCompatDrawableManager; +import android.support.v7.content.res.AppCompatResources; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.text.SpannableString; @@ -68,7 +65,7 @@ import be.digitalia.fosdem.widgets.AdapterLinearLayout; * * @author Christophe Beyls */ -public class MainActivity extends AppCompatActivity { +public class MainActivity extends BaseActivity { public static final String ACTION_SHORTCUT_BOOKMARKS = BuildConfig.APPLICATION_ID + ".intent.action.SHORTCUT_BOOKMARKS"; public static final String ACTION_SHORTCUT_LIVE = BuildConfig.APPLICATION_ID + ".intent.action.SHORTCUT_LIVE"; @@ -212,14 +209,14 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.main); - toolbar = (Toolbar) findViewById(R.id.toolbar); + toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - progressBar = (ProgressBar) findViewById(R.id.progress); + progressBar = findViewById(R.id.progress); // Setup drawer layout getSupportActionBar().setDisplayHomeAsUpEnabled(true); - drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + drawerLayout = findViewById(R.id.drawer_layout); drawerLayout.setDrawerShadow(ContextCompat.getDrawable(this, R.drawable.drawer_shadow), GravityCompat.START); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.main_menu, R.string.close_menu) { @@ -260,7 +257,7 @@ public class MainActivity extends AppCompatActivity { // Setup Main menu mainMenu = findViewById(R.id.main_menu); - final AdapterLinearLayout sectionsList = (AdapterLinearLayout) findViewById(R.id.sections); + final AdapterLinearLayout sectionsList = findViewById(R.id.sections); menuAdapter = new MainMenuAdapter(getLayoutInflater()); sectionsList.setAdapter(menuAdapter); mainMenu.findViewById(R.id.settings).setOnClickListener(menuFooterClickListener); @@ -269,7 +266,7 @@ public class MainActivity extends AppCompatActivity { LocalBroadcastManager.getInstance(this).registerReceiver(scheduleRefreshedReceiver, new IntentFilter(DatabaseManager.ACTION_SCHEDULE_REFRESHED)); // Last update date, below the list - lastUpdateTextView = (TextView) mainMenu.findViewById(R.id.last_update); + lastUpdateTextView = mainMenu.findViewById(R.id.last_update); updateLastUpdateTime(); // Restore current section @@ -298,7 +295,7 @@ public class MainActivity extends AppCompatActivity { @Override public void run() { if (sectionsList.getChildCount() > currentSection.ordinal()) { - ScrollView mainMenuScrollView = (ScrollView) findViewById(R.id.main_menu_scroll); + ScrollView mainMenuScrollView = findViewById(R.id.main_menu_scroll); int requiredScroll = sectionsList.getTop() + sectionsList.getChildAt(currentSection.ordinal()).getBottom() - mainMenuScrollView.getHeight(); @@ -382,8 +379,8 @@ public class MainActivity extends AppCompatActivity { @Override protected void onStop() { - if ((searchMenuItem != null) && (MenuItemCompat.isActionViewExpanded(searchMenuItem))) { - MenuItemCompat.collapseActionView(searchMenuItem); + if ((searchMenuItem != null) && searchMenuItem.isActionViewExpanded()) { + searchMenuItem.collapseActionView(); } LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); @@ -407,14 +404,9 @@ public class MainActivity extends AppCompatActivity { this.searchMenuItem = searchMenuItem; // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); + SearchView searchView = (SearchView) searchMenuItem.getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - // Animated refresh icon - menu.findItem(R.id.refresh).setIcon(R.drawable.avd_sync_white_24dp); - } - return true; } @@ -444,7 +436,7 @@ public class MainActivity extends AppCompatActivity { progressBar.clearAnimation(); progressBar.setIndeterminate(true); progressBar.setVisibility(View.VISIBLE); - AsyncTaskCompat.executeParallel(new DownloadScheduleAsyncTask(this)); + new DownloadScheduleAsyncTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } private static class DownloadScheduleAsyncTask extends AsyncTask { @@ -501,9 +493,9 @@ public class MainActivity extends AppCompatActivity { Section section = getItem(position); convertView.setSelected(section == currentSection); - TextView tv = (TextView) convertView.findViewById(R.id.section_text); + TextView tv = convertView.findViewById(R.id.section_text); SpannableString sectionTitle = new SpannableString(getString(section.getTitleResId())); - Drawable sectionIcon = AppCompatDrawableManager.get().getDrawable(MainActivity.this, section.getIconResId()); + Drawable sectionIcon = AppCompatResources.getDrawable(MainActivity.this, section.getIconResId()); if (section == currentSection) { // Special color for the current section sectionTitle.setSpan(new ForegroundColorSpan(currentSectionForegroundColor), 0, sectionTitle.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); diff --git a/app/src/main/java/be/digitalia/fosdem/activities/PersonInfoActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/PersonInfoActivity.java index 0d54799..5182bc9 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/PersonInfoActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/PersonInfoActivity.java @@ -3,7 +3,6 @@ package be.digitalia.fosdem.activities; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.widget.TextView; @@ -12,7 +11,7 @@ import be.digitalia.fosdem.R; import be.digitalia.fosdem.fragments.PersonInfoListFragment; import be.digitalia.fosdem.model.Person; -public class PersonInfoActivity extends AppCompatActivity { +public class PersonInfoActivity extends BaseActivity { public static final String EXTRA_PERSON = "person"; diff --git a/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java index 47d445b..a4a348a 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java @@ -7,7 +7,6 @@ import android.net.Uri; import android.os.Bundle; import android.support.customtabs.CustomTabsIntent; import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.MenuItem; @@ -23,7 +22,7 @@ import be.digitalia.fosdem.utils.StringUtils; * * @author Christophe Beyls */ -public class RoomImageDialogActivity extends AppCompatActivity { +public class RoomImageDialogActivity extends BaseActivity { public static final String EXTRA_ROOM_NAME = "roomName"; public static final String EXTRA_ROOM_IMAGE_RESOURCE_ID = "imageResId"; diff --git a/app/src/main/java/be/digitalia/fosdem/activities/SearchResultActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/SearchResultActivity.java index 65d6d8a..bf62999 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/SearchResultActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/SearchResultActivity.java @@ -5,8 +5,6 @@ import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; @@ -15,7 +13,7 @@ import be.digitalia.fosdem.R; import be.digitalia.fosdem.fragments.MessageDialogFragment; import be.digitalia.fosdem.fragments.SearchResultListFragment; -public class SearchResultActivity extends AppCompatActivity { +public class SearchResultActivity extends BaseActivity { public static final int MIN_SEARCH_LENGTH = 3; @@ -92,7 +90,7 @@ public class SearchResultActivity extends AppCompatActivity { MenuItem searchMenuItem = menu.findItem(R.id.search); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); + searchView = (SearchView) searchMenuItem.getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); // Always show the search view setSearchViewQuery(currentQuery); diff --git a/app/src/main/java/be/digitalia/fosdem/activities/SettingsActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/SettingsActivity.java index 4520836..8b758f5 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/SettingsActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/SettingsActivity.java @@ -4,10 +4,10 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.PreferenceManager; +import android.preference.TwoStatePreference; import android.view.MenuItem; import be.digitalia.fosdem.R; -import be.digitalia.fosdem.utils.TwoStatePreferenceCompat; public class SettingsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -67,7 +67,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity implements Sha @SuppressWarnings("deprecation") private void updateNotificationsEnabled() { - boolean notificationsEnabled = TwoStatePreferenceCompat.isChecked(findPreference(KEY_PREF_NOTIFICATIONS_ENABLED)); + boolean notificationsEnabled = ((TwoStatePreference) findPreference(KEY_PREF_NOTIFICATIONS_ENABLED)).isChecked(); findPreference(KEY_PREF_NOTIFICATIONS_VIBRATE).setEnabled(notificationsEnabled); findPreference(KEY_PREF_NOTIFICATIONS_LED).setEnabled(notificationsEnabled); findPreference(KEY_PREF_NOTIFICATIONS_DELAY).setEnabled(notificationsEnabled); diff --git a/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleActivity.java index 27df124..654e759 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleActivity.java @@ -7,7 +7,6 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.widget.ImageView; @@ -28,7 +27,7 @@ import be.digitalia.fosdem.utils.ThemeUtils; * * @author Christophe Beyls */ -public class TrackScheduleActivity extends AppCompatActivity +public class TrackScheduleActivity extends BaseActivity implements TrackScheduleListFragment.Callbacks, EventDetailsFragment.FloatingActionButtonProvider, CreateNfcAppDataCallback { @@ -51,7 +50,7 @@ public class TrackScheduleActivity extends AppCompatActivity setContentView(R.layout.track_schedule); setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); - floatingActionButton = (ImageView) findViewById(R.id.fab); + floatingActionButton = findViewById(R.id.fab); Bundle extras = getIntent().getExtras(); day = extras.getParcelable(EXTRA_DAY); diff --git a/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleEventActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleEventActivity.java index 36c6e71..f00ee01 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleEventActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/TrackScheduleEventActivity.java @@ -11,7 +11,6 @@ import android.support.v4.content.ContextCompat; import android.support.v4.content.Loader; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import com.viewpagerindicator.UnderlinePageIndicator; @@ -32,7 +31,7 @@ import be.digitalia.fosdem.widgets.ContentLoadingProgressBar; * * @author Christophe Beyls */ -public class TrackScheduleEventActivity extends AppCompatActivity implements LoaderCallbacks, CreateNfcAppDataCallback { +public class TrackScheduleEventActivity extends BaseActivity implements LoaderCallbacks, CreateNfcAppDataCallback { public static final String EXTRA_DAY = "day"; public static final String EXTRA_TRACK = "track"; @@ -58,10 +57,10 @@ public class TrackScheduleEventActivity extends AppCompatActivity implements Loa day = extras.getParcelable(EXTRA_DAY); track = extras.getParcelable(EXTRA_TRACK); - progress = (ContentLoadingProgressBar) findViewById(R.id.progress); - pager = (ViewPager) findViewById(R.id.pager); + progress = findViewById(R.id.progress); + pager = findViewById(R.id.pager); adapter = new TrackScheduleEventAdapter(getSupportFragmentManager()); - pageIndicator = (UnderlinePageIndicator) findViewById(R.id.indicator); + pageIndicator = findViewById(R.id.indicator); pageIndicator.setSelectedColor(ContextCompat.getColor(this, track.getType().getColorResId())); if (savedInstanceState == null) { diff --git a/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java b/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java index baa5e50..d263305 100644 --- a/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java +++ b/app/src/main/java/be/digitalia/fosdem/adapters/EventsAdapter.java @@ -6,7 +6,7 @@ import android.database.Cursor; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.support.v4.widget.TextViewCompat; -import android.support.v7.widget.AppCompatDrawableManager; +import android.support.v7.content.res.AppCompatResources; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -65,7 +65,7 @@ public class EventsAdapter extends RecyclerViewCursorAdapter= Build.VERSION_CODES.HONEYCOMB) - && actionButton.isEnabled(); + animate = animate && actionButton.isEnabled(); actionButton.setEnabled(true); if (isBookmarked) { @@ -289,8 +288,7 @@ public class EventDetailsFragment extends Fragment { bookmarkMenuItem.setEnabled(false); } else { // Only animate if the menu item was showing a previous value - animate = animate && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - && bookmarkMenuItem.isEnabled(); + animate = animate && bookmarkMenuItem.isEnabled(); bookmarkMenuItem.setEnabled(true); if (isBookmarked) { @@ -457,7 +455,7 @@ public class EventDetailsFragment extends Fragment { holder.linksContainer.setVisibility(View.VISIBLE); for (Link link : data.links) { View view = holder.inflater.inflate(R.layout.item_link, holder.linksContainer, false); - TextView tv = (TextView) view.findViewById(R.id.description); + TextView tv = view.findViewById(R.id.description); tv.setText(link.getDescription()); view.setOnClickListener(new LinkClickListener(link)); holder.linksContainer.addView(view); diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/LiveFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/LiveFragment.java index a88a88d..9317e8a 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/LiveFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/LiveFragment.java @@ -2,6 +2,7 @@ package be.digitalia.fosdem.fragments; import android.content.res.Resources; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; @@ -25,13 +26,13 @@ public class LiveFragment extends Fragment implements RecycledViewPoolProvider { private ViewHolder holder; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_live, container, false); holder = new ViewHolder(); - holder.pager = (ViewPager) view.findViewById(R.id.pager); + holder.pager = view.findViewById(R.id.pager); holder.pager.setAdapter(new LivePagerAdapter(getChildFragmentManager(), getResources())); - holder.slidingTabs = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs); + holder.slidingTabs = view.findViewById(R.id.sliding_tabs); holder.slidingTabs.setViewPager(holder.pager); holder.recycledViewPool = new RecyclerView.RecycledViewPool(); @@ -85,6 +86,7 @@ public class LiveFragment extends Fragment implements RecycledViewPoolProvider { return null; } + @NonNull @Override public Object instantiateItem(ViewGroup container, int position) { // Allow the non-primary fragments to start as soon as they are visible diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java index f83b2fc..89d1da9 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java @@ -5,6 +5,7 @@ import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.customtabs.CustomTabsIntent; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; @@ -32,7 +33,7 @@ public class MapFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_map, container, false); } diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/PersonsListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/PersonsListFragment.java index d5df592..89cddfb 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/PersonsListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/PersonsListFragment.java @@ -106,7 +106,7 @@ public class PersonsListFragment extends SmoothListFragment implements LoaderCal View view = inflater.inflate(R.layout.simple_list_item_1_material, parent, false); ViewHolder holder = new ViewHolder(); - holder.textView = (TextView) view.findViewById(android.R.id.text1); + holder.textView = view.findViewById(android.R.id.text1); view.setTag(holder); return view; diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/RecyclerViewFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/RecyclerViewFragment.java index c5e5e09..51fd2a6 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/RecyclerViewFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/RecyclerViewFragment.java @@ -102,7 +102,7 @@ public class RecyclerViewFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final Context context = inflater.getContext(); mHolder = new ViewHolder(); diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java index 9ee9e1d..3bd5caa 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java @@ -40,7 +40,7 @@ public class RoomImageDialogFragment extends DialogFragment { View contentView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_room_image, null); ((ImageView) contentView.findViewById(R.id.room_image)).setImageResource(args.getInt(ARG_ROOM_IMAGE_RESOURCE_ID)); - Toolbar toolbar = (Toolbar) contentView.findViewById(R.id.toolbar); + Toolbar toolbar = contentView.findViewById(R.id.toolbar); RoomImageDialogActivity.configureToolbar(getActivity(), toolbar, args.getString(ARG_ROOM_NAME)); Dialog dialog = new AlertDialog.Builder(getActivity()) diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/SmoothListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/SmoothListFragment.java index 4fb5a46..cd9b0a7 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/SmoothListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/SmoothListFragment.java @@ -58,7 +58,7 @@ public class SmoothListFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final Context context = inflater.getContext(); mHolder = new ViewHolder(); diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java index 0a2a7d3..4e6f458 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/TrackScheduleListFragment.java @@ -7,12 +7,13 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.annotation.NonNull; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.ContextCompat; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.TextViewCompat; -import android.support.v7.widget.AppCompatDrawableManager; +import android.support.v7.content.res.AppCompatResources; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -88,7 +89,7 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han } @Override - public void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("isListAlreadyShown", isListAlreadyShown); } @@ -276,10 +277,10 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han View view = inflater.inflate(R.layout.item_schedule_event, parent, false); ViewHolder holder = new ViewHolder(); - holder.time = (TextView) view.findViewById(R.id.time); - holder.title = (TextView) view.findViewById(R.id.title); - holder.persons = (TextView) view.findViewById(R.id.persons); - holder.room = (TextView) view.findViewById(R.id.room); + holder.time = view.findViewById(R.id.time); + holder.title = view.findViewById(R.id.title); + holder.persons = view.findViewById(R.id.persons); + holder.room = view.findViewById(R.id.room); view.setTag(holder); return view; @@ -309,7 +310,7 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han holder.title.setText(event.getTitle()); boolean isBookmarked = DatabaseManager.toBookmarkStatus(cursor); Drawable bookmarkDrawable = isBookmarked - ? AppCompatDrawableManager.get().getDrawable(context, R.drawable.ic_bookmark_grey600_24dp) + ? AppCompatResources.getDrawable(context, R.drawable.ic_bookmark_grey600_24dp) : null; TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, null, null, bookmarkDrawable, null); holder.title.setContentDescription(isBookmarked diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/TracksFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/TracksFragment.java index 85d6e2a..a604131 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/TracksFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/TracksFragment.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; @@ -54,14 +55,14 @@ public class TracksFragment extends Fragment implements RecycledViewPoolProvider } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_tracks, container, false); holder = new ViewHolder(); holder.contentView = view.findViewById(R.id.content); holder.emptyView = view.findViewById(android.R.id.empty); - holder.pager = (ViewPager) view.findViewById(R.id.pager); - holder.slidingTabs = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs); + holder.pager = view.findViewById(R.id.pager); + holder.slidingTabs = view.findViewById(R.id.sliding_tabs); holder.daysAdapter = new DaysAdapter(getChildFragmentManager()); holder.recycledViewPool = new RecyclerView.RecycledViewPool(); @@ -194,6 +195,7 @@ public class TracksFragment extends Fragment implements RecycledViewPoolProvider return days.get(position).toString(); } + @NonNull @Override public Object instantiateItem(ViewGroup container, int position) { // Allow the non-primary fragments to start as soon as they are visible diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/TracksListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/TracksListFragment.java index e09f0ef..99589dd 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/TracksListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/TracksListFragment.java @@ -141,8 +141,8 @@ public class TracksListFragment extends RecyclerViewFragment implements LoaderCa TrackViewHolder(View itemView) { super(itemView); - name = (TextView) itemView.findViewById(android.R.id.text1); - type = (TextView) itemView.findViewById(android.R.id.text2); + name = itemView.findViewById(android.R.id.text1); + type = itemView.findViewById(android.R.id.text2); itemView.setOnClickListener(this); } diff --git a/app/src/main/java/be/digitalia/fosdem/parsers/IterableAbstractPullParser.java b/app/src/main/java/be/digitalia/fosdem/parsers/IterableAbstractPullParser.java index 227dc7f..92650bf 100644 --- a/app/src/main/java/be/digitalia/fosdem/parsers/IterableAbstractPullParser.java +++ b/app/src/main/java/be/digitalia/fosdem/parsers/IterableAbstractPullParser.java @@ -1,5 +1,7 @@ package be.digitalia.fosdem.parsers; +import android.support.annotation.NonNull; + import java.util.Iterator; import java.util.NoSuchElementException; @@ -61,6 +63,7 @@ public abstract class IterableAbstractPullParser extends AbstractPullParser parse(final XmlPullParser parser) throws Exception { return new Iterable() { + @NonNull @Override public Iterator iterator() { return new ParserIterator(parser); diff --git a/app/src/main/java/be/digitalia/fosdem/services/AlarmIntentService.java b/app/src/main/java/be/digitalia/fosdem/services/AlarmIntentService.java index 21e6aa0..c5d53ba 100644 --- a/app/src/main/java/be/digitalia/fosdem/services/AlarmIntentService.java +++ b/app/src/main/java/be/digitalia/fosdem/services/AlarmIntentService.java @@ -12,8 +12,8 @@ import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Typeface; import android.net.Uri; -import android.os.Build; import android.preference.PreferenceManager; +import android.support.v4.app.AlarmManagerCompat; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.TaskStackBuilder; @@ -242,11 +242,7 @@ public class AlarmIntentService extends IntentService { } private static void setExactAlarm(AlarmManager manager, int type, long triggerAtMillis, PendingIntent operation) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - manager.setExact(type, triggerAtMillis, operation); - } else { - manager.set(type, triggerAtMillis, operation); - } + AlarmManagerCompat.setExact(manager, type, triggerAtMillis, operation); } private long getDelay() { diff --git a/app/src/main/java/be/digitalia/fosdem/utils/NfcReceiverUtils.java b/app/src/main/java/be/digitalia/fosdem/utils/NfcReceiverUtils.java deleted file mode 100644 index fe7b7fa..0000000 --- a/app/src/main/java/be/digitalia/fosdem/utils/NfcReceiverUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package be.digitalia.fosdem.utils; - -import android.annotation.TargetApi; -import android.content.Intent; -import android.nfc.NdefMessage; -import android.nfc.NfcAdapter; -import android.os.Build; -import android.os.Parcelable; - -/** - * NFC helper methods for receiving data sent by NfcSenderUtils. This class wraps API 10+ code. - * - * @author Christophe Beyls - * - */ -@TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) -class NfcReceiverUtils { - - public static boolean hasAppData(Intent intent) { - return NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()); - } - - public static byte[] extractAppData(Intent intent) { - Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); - NdefMessage msg = (NdefMessage) rawMsgs[0]; - return msg.getRecords()[0].getPayload(); - } -} diff --git a/app/src/main/java/be/digitalia/fosdem/utils/NfcSenderUtils.java b/app/src/main/java/be/digitalia/fosdem/utils/NfcSenderUtils.java deleted file mode 100644 index afd7ec8..0000000 --- a/app/src/main/java/be/digitalia/fosdem/utils/NfcSenderUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package be.digitalia.fosdem.utils; - -import java.nio.charset.Charset; - -import be.digitalia.fosdem.utils.NfcUtils.CreateNfcAppDataCallback; -import android.annotation.TargetApi; -import android.app.Activity; -import android.nfc.NdefMessage; -import android.nfc.NdefRecord; -import android.nfc.NfcAdapter; -import android.nfc.NfcEvent; -import android.nfc.NfcAdapter.CreateNdefMessageCallback; -import android.os.Build; - -/** - * NFC helper methods for Android Beam foreground push. This class wraps API 14+ code. - * - * @author Christophe Beyls - * - */ -@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) -class NfcSenderUtils { - - public static boolean setAppDataPushMessageCallbackIfAvailable(Activity activity, final CreateNfcAppDataCallback callback) { - NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity); - if (adapter == null) { - return false; - } - final String packageName = activity.getPackageName(); - adapter.setNdefPushMessageCallback(new CreateNdefMessageCallback() { - - @Override - public NdefMessage createNdefMessage(NfcEvent event) { - byte[] appData = callback.createNfcAppData(); - if (appData == null) { - return null; - } - NdefRecord[] records = new NdefRecord[] { createMimeRecord("application/" + packageName, appData), - NdefRecord.createApplicationRecord(packageName) }; - return new NdefMessage(records); - } - - }, activity); - return true; - } - - static NdefRecord createMimeRecord(String mimeType, byte[] payload) { - byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII")); - return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload); - } -} diff --git a/app/src/main/java/be/digitalia/fosdem/utils/NfcUtils.java b/app/src/main/java/be/digitalia/fosdem/utils/NfcUtils.java index 5418ad1..e668e23 100644 --- a/app/src/main/java/be/digitalia/fosdem/utils/NfcUtils.java +++ b/app/src/main/java/be/digitalia/fosdem/utils/NfcUtils.java @@ -2,13 +2,18 @@ package be.digitalia.fosdem.utils; import android.app.Activity; import android.content.Intent; -import android.os.Build; +import android.nfc.NdefMessage; +import android.nfc.NdefRecord; +import android.nfc.NfcAdapter; +import android.nfc.NfcEvent; +import android.os.Parcelable; + +import java.nio.charset.Charset; /** - * NFC helper methods compatible with all API levels. - * + * NFC helper methods. + * * @author Christophe Beyls - * */ public class NfcUtils { @@ -17,7 +22,6 @@ public class NfcUtils { */ public interface CreateNfcAppDataCallback { /** - * * @return The app data, or null if no data is currently available for sharing. */ byte[] createNfcAppData(); @@ -27,41 +31,53 @@ public class NfcUtils { * Call this method in an Activity, between onCreate() and onDestroy(), to make its content sharable using Android Beam if available. MIME type of the data * to share will be "application/" followed by the app's package name. Declare it in your Manifest's intent filters as the data type with an action of * android.nfc.action.NDEF_DISCOVERED to handle the NFC Intents on the receiver side. - * - * @param activity - * @param callback + * * @return true if NFC is available and the content was made available, false if not. */ public static boolean setAppDataPushMessageCallbackIfAvailable(Activity activity, final CreateNfcAppDataCallback callback) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - return NfcSenderUtils.setAppDataPushMessageCallbackIfAvailable(activity, callback); + NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity); + if (adapter == null) { + return false; } - return false; + final String packageName = activity.getPackageName(); + adapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { + + @Override + public NdefMessage createNdefMessage(NfcEvent event) { + byte[] appData = callback.createNfcAppData(); + if (appData == null) { + return null; + } + NdefRecord[] records = new NdefRecord[]{createMimeRecord("application/" + packageName, appData), + NdefRecord.createApplicationRecord(packageName)}; + return new NdefMessage(records); + } + + }, activity); + return true; + } + + static NdefRecord createMimeRecord(String mimeType, byte[] payload) { + byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII")); + return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload); } /** * Determines if the intent contains NFC NDEF application-specific data to be extracted. - * - * @param intent - * @return */ public static boolean hasAppData(Intent intent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) { - return NfcReceiverUtils.hasAppData(intent); - } - return false; + return NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()); } /** * Extracts application-specific data sent through NFC from an intent. You must first ensure that the intent contains NFC data by calling hasAppData(). - * + * * @param intent * @return The extracted data */ public static byte[] extractAppData(Intent intent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) { - return NfcReceiverUtils.extractAppData(intent); - } - return null; + Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); + NdefMessage msg = (NdefMessage) rawMsgs[0]; + return msg.getRecords()[0].getPayload(); } } diff --git a/app/src/main/java/be/digitalia/fosdem/utils/StringUtils.java b/app/src/main/java/be/digitalia/fosdem/utils/StringUtils.java index 0a915a8..8891733 100644 --- a/app/src/main/java/be/digitalia/fosdem/utils/StringUtils.java +++ b/app/src/main/java/be/digitalia/fosdem/utils/StringUtils.java @@ -257,6 +257,7 @@ public class StringUtils { mLength = mString.length(); } + @NonNull public Iterator iterator() { return this; } diff --git a/app/src/main/java/be/digitalia/fosdem/utils/TwoStatePreferenceCompat.java b/app/src/main/java/be/digitalia/fosdem/utils/TwoStatePreferenceCompat.java deleted file mode 100644 index d686c9f..0000000 --- a/app/src/main/java/be/digitalia/fosdem/utils/TwoStatePreferenceCompat.java +++ /dev/null @@ -1,40 +0,0 @@ -package be.digitalia.fosdem.utils; - -import android.annotation.TargetApi; -import android.os.Build; -import android.preference.CheckBoxPreference; -import android.preference.Preference; -import android.preference.TwoStatePreference; - -/** - * Utility to retrieve the checked value from a two-state preference in a backwards-compatible way. - */ -public class TwoStatePreferenceCompat { - - private static final TwoStatePreferenceCompatImpl IMPL = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH - ? new TwoStatePreferenceCompatICS() : new TwoStatePreferenceCompatBase(); - - public static boolean isChecked(Preference preference) { - return IMPL.isChecked(preference); - } - - interface TwoStatePreferenceCompatImpl { - boolean isChecked(Preference preference); - } - - static class TwoStatePreferenceCompatBase implements TwoStatePreferenceCompatImpl { - @Override - public boolean isChecked(Preference preference) { - return (preference instanceof CheckBoxPreference) && ((CheckBoxPreference) preference).isChecked(); - } - } - - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - static class TwoStatePreferenceCompatICS implements TwoStatePreferenceCompatImpl { - @Override - public boolean isChecked(Preference preference) { - return (preference instanceof TwoStatePreference) && ((TwoStatePreference) preference).isChecked(); - } - } -} diff --git a/app/src/main/java/be/digitalia/fosdem/widgets/CheckableLinearLayout.java b/app/src/main/java/be/digitalia/fosdem/widgets/CheckableLinearLayout.java deleted file mode 100644 index eb6056d..0000000 --- a/app/src/main/java/be/digitalia/fosdem/widgets/CheckableLinearLayout.java +++ /dev/null @@ -1,43 +0,0 @@ -package be.digitalia.fosdem.widgets; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.Checkable; - -/** - * {@link android.widget.LinearLayout} implementing the {@link android.widget.Checkable} - * interface by keeping an internal 'checked' state flag. - */ -public class CheckableLinearLayout extends ForegroundLinearLayout implements Checkable { - private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; - - private boolean mChecked = false; - - public CheckableLinearLayout(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public boolean isChecked() { - return mChecked; - } - - public void setChecked(boolean b) { - if (b != mChecked) { - mChecked = b; - refreshDrawableState(); - } - } - - public void toggle() { - setChecked(!mChecked); - } - - @Override - public int[] onCreateDrawableState(int extraSpace) { - final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (isChecked()) { - mergeDrawableStates(drawableState, CHECKED_STATE_SET); - } - return drawableState; - } -} \ No newline at end of file diff --git a/app/src/main/java/be/digitalia/fosdem/widgets/ForegroundLinearLayout.java b/app/src/main/java/be/digitalia/fosdem/widgets/ForegroundLinearLayout.java index f247d5e..edffcbb 100644 --- a/app/src/main/java/be/digitalia/fosdem/widgets/ForegroundLinearLayout.java +++ b/app/src/main/java/be/digitalia/fosdem/widgets/ForegroundLinearLayout.java @@ -114,7 +114,6 @@ public class ForegroundLinearLayout extends LinearLayoutCompat { return super.verifyDrawable(who) || (who == mForeground); } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void jumpDrawablesToCurrentState() { super.jumpDrawablesToCurrentState(); diff --git a/app/src/main/java/be/digitalia/fosdem/widgets/MultiChoiceHelper.java b/app/src/main/java/be/digitalia/fosdem/widgets/MultiChoiceHelper.java index 448a955..3bb0af6 100644 --- a/app/src/main/java/be/digitalia/fosdem/widgets/MultiChoiceHelper.java +++ b/app/src/main/java/be/digitalia/fosdem/widgets/MultiChoiceHelper.java @@ -1,7 +1,6 @@ package be.digitalia.fosdem.widgets; import android.content.Context; -import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; @@ -71,7 +70,7 @@ public class MultiChoiceHelper { final boolean isChecked = multiChoiceHelper.isItemChecked(position); if (itemView instanceof Checkable) { ((Checkable) itemView).setChecked(isChecked); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + } else { itemView.setActivated(isChecked); } } @@ -236,25 +235,13 @@ public class MultiChoiceHelper { public Parcelable onSaveInstanceState() { SavedState savedState = new SavedState(); savedState.checkedItemCount = checkedItemCount; - savedState.checkStates = clone(checkStates); + savedState.checkStates = checkStates.clone(); if (checkedIdStates != null) { savedState.checkedIdStates = checkedIdStates.clone(); } return savedState; } - private static SparseBooleanArray clone(SparseBooleanArray original) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - return original.clone(); - } - final int size = original.size(); - SparseBooleanArray clone = new SparseBooleanArray(size); - for (int i = 0; i < size; ++i) { - clone.append(original.keyAt(i), original.valueAt(i)); - } - return clone; - } - public void onRestoreInstanceState(Parcelable state) { if ((state != null) && (checkedItemCount == 0)) { SavedState savedState = (SavedState) state; diff --git a/app/src/main/java/be/digitalia/fosdem/widgets/SaveStatePhotoView.java b/app/src/main/java/be/digitalia/fosdem/widgets/SaveStatePhotoView.java index 9cb8d97..8396b04 100644 --- a/app/src/main/java/be/digitalia/fosdem/widgets/SaveStatePhotoView.java +++ b/app/src/main/java/be/digitalia/fosdem/widgets/SaveStatePhotoView.java @@ -4,12 +4,10 @@ import android.content.Context; import android.graphics.RectF; import android.os.Parcel; import android.os.Parcelable; -import android.support.v4.os.ParcelableCompat; -import android.support.v4.os.ParcelableCompatCreatorCallbacks; import android.util.AttributeSet; import android.view.ViewTreeObserver; -import uk.co.senab.photoview.PhotoView; +import com.github.chrisbanes.photoview.PhotoView; /** * PhotoView which saves and restores the current scale and approximate position. @@ -84,10 +82,10 @@ public class SaveStatePhotoView extends PhotoView { out.writeFloat(pivotY); } - public static final Parcelable.Creator CREATOR - = ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks() { + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override - public SavedState createFromParcel(Parcel in, ClassLoader loader) { + public SavedState createFromParcel(Parcel in) { return new SavedState(in); } @@ -95,7 +93,7 @@ public class SaveStatePhotoView extends PhotoView { public SavedState[] newArray(int size) { return new SavedState[size]; } - }); + }; SavedState(Parcel in) { super(in); diff --git a/app/src/main/java/be/digitalia/fosdem/widgets/SlidingTabLayout.java b/app/src/main/java/be/digitalia/fosdem/widgets/SlidingTabLayout.java index 5643ac3..0e91d58 100644 --- a/app/src/main/java/be/digitalia/fosdem/widgets/SlidingTabLayout.java +++ b/app/src/main/java/be/digitalia/fosdem/widgets/SlidingTabLayout.java @@ -211,7 +211,7 @@ public class SlidingTabLayout extends HorizontalScrollView { if (mTabViewLayoutId != 0) { // If there is a custom tab view layout id set, try and inflate it tabView = inflater.inflate(mTabViewLayoutId, mTabStrip, false); - tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); + tabTitleView = tabView.findViewById(mTabViewTextViewId); if (tabTitleView == null) { tabTitleView = (TextView) tabView; } diff --git a/app/src/main/java/com/viewpagerindicator/UnderlinePageIndicator.java b/app/src/main/java/com/viewpagerindicator/UnderlinePageIndicator.java index 917c5ef..82a85e0 100644 --- a/app/src/main/java/com/viewpagerindicator/UnderlinePageIndicator.java +++ b/app/src/main/java/com/viewpagerindicator/UnderlinePageIndicator.java @@ -23,7 +23,6 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; -import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewConfigurationCompat; import android.support.v4.view.ViewPager; import android.util.AttributeSet; @@ -181,16 +180,16 @@ public class UnderlinePageIndicator extends View implements PageIndicator { return false; } - final int action = ev.getAction() & MotionEventCompat.ACTION_MASK; + final int action = ev.getAction() & MotionEvent.ACTION_MASK; switch (action) { case MotionEvent.ACTION_DOWN: - mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mActivePointerId = ev.getPointerId(0); mLastMotionX = ev.getX(); break; case MotionEvent.ACTION_MOVE: { - final int activePointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId); - final float x = MotionEventCompat.getX(ev, activePointerIndex); + final int activePointerIndex = ev.findPointerIndex(mActivePointerId); + final float x = ev.getX(activePointerIndex); final float deltaX = x - mLastMotionX; if (!mIsDragging) { @@ -235,21 +234,21 @@ public class UnderlinePageIndicator extends View implements PageIndicator { if (mViewPager.isFakeDragging()) mViewPager.endFakeDrag(); break; - case MotionEventCompat.ACTION_POINTER_DOWN: { - final int index = MotionEventCompat.getActionIndex(ev); - mLastMotionX = MotionEventCompat.getX(ev, index); - mActivePointerId = MotionEventCompat.getPointerId(ev, index); + case MotionEvent.ACTION_POINTER_DOWN: { + final int index = ev.getActionIndex(); + mLastMotionX = ev.getX(index); + mActivePointerId = ev.getPointerId(index); break; } - case MotionEventCompat.ACTION_POINTER_UP: - final int pointerIndex = MotionEventCompat.getActionIndex(ev); - final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); + case MotionEvent.ACTION_POINTER_UP: + final int pointerIndex = ev.getActionIndex(); + final int pointerId = ev.getPointerId(pointerIndex); if (pointerId == mActivePointerId) { final int newPointerIndex = pointerIndex == 0 ? 1 : 0; - mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex); + mActivePointerId = ev.getPointerId(newPointerIndex); } - mLastMotionX = MotionEventCompat.getX(ev, MotionEventCompat.findPointerIndex(ev, mActivePointerId)); + mLastMotionX = ev.getX(ev.findPointerIndex(mActivePointerId)); break; } diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_fosdem.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_fosdem.png deleted file mode 100644 index 569fee64a1c2b6e6024f5a60e3571ee43f18c228..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1237 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UH$0!1z1BC&U%V{XYsuWC&cC)Cr7z zhLt5je!&ckOw25-Y#f|i+`N1OLL#DKl2Xz#vhs>bs%q*Qnp)aAx(0?u#wO+#);6|w z_Kwaju5O-QKE8f|K_Ow`5s^_bv2pPUiAm`hS@{KpMJ1(W<&{;{HT8{6%^h9ceG?{5 znmld#%vrPNEm*i@*~(R`*RET?VdLg4+js2Twdc^`Bgc-PIDO{a`HPn>U%P(u*6llY z?>%_<=<$=M&tANG{r27a4{2AZP$Z-5) z{`DTuDT@Vyp4e%hiR`@4lVUWBvNFYUJBk zmWnQs&3Ak+^n0}~y)M~MzxC0S+M`eIE}W6&^Iargdl}nN&svTj?rrhYv>q`$n7O** zHOI~+9cmA@E$QV|&poxWSj21Pdc(^6Cz>bj-FeRH=dEg&G5Zqp|k3?#4J%UH$0!1z1BC&U%V{XYsuWC&cC)Cr7z zhLt5je!&ckOw25-Y#f|i+`N1OLL#DKl2Xz#vhs>bs%q*Qnp)aAx(0?u#wO+#);6|w z_Kwaju5O-QKE8f|K_Ow`5s^_bv2pPUiAm`hS@{KpMJ1(W<&{;{HT8{6%^h9ceG?{5 znmld#%vrPNEm*i@*~(R`*RET?VdLg4+js2Twdc^`Bgc-PIDO{a`HPn>U%P(u*6llY z?>%_<=<$=M&tANG{r27a4{2AZP$Z-5) z{`DTuDT@Vyp4e%hiR`@4lVUWBvNFYUJBk zmWnQs&3Ak+^n0}~y)M~MzxC0S+M`eIE}W6&^Iargdl}nN&svTj?rrhYv>q`$n7O** zHOI~+9cmA@E$QV|&poxWSj21Pdc(^6Cz>bj-FeRH=dEg&G5Zqppr^g?V={z(tWk- zvb7m-F=iw%jDdt0G7SV6Ve?W6Sq9lMh7w6w(72DT>*nv&zD+y#QKDR!>`C4{ea>^v z`JeMY=e%zf%`;xgGxo1p16Y;eHH!XQih6r{wK+LC!BxFRDa2KS_V)I5tfBe&`D=N3 zd52Z|&d$zHkPQ?R6pSthx+FkjW1}%8CFK>X)jBAK9UUE+e!qV(F){JaU@*9$q@-lp z>-Fx(`DsN_dh+x0k3JQE&*wX{u&}Tj2W32$wOVb(%*@OYWE!K#{0H+lQwL~*Wl$}#kQ=6jzZu9#as2So; z%l;bs$H+FRSqXitN66nUEiE030gx_1VHn{CNgqlyVFTgCF*!Ne>To#z<|w>eE>{vX z3HLTthHanSZr>HH7omvG$pZZnm+OUR0bnmKD=X_*iK^!2W+(S{(T5&QQc}`qu<$c< zJ*4=*#nb>0H%_hM5QFc_%gc9h4&}bwA~QWL{UiFXiVpP%H37AGz|3Ss07TJjHs73` zo!urG@EjoeUZH|cv2m7e^70r=Ces(t^Si}j@yTSjw6xecJEJmx44`{@db(M0yWP*@ zpoh!taBY-S<)P)aFi`gxGB@d3!%=zA+ei?5!siNx(bd}8`aS@c!?XsmwGJV-I5|1_Lz~U^14Z0Q0H=@#kRK=VbU>t5e{lX3XZIP*BTV&)a0Uz5ULc4{ zvKU!h2s(f#h%SGn0;_in=0yNLQqR&&&_2#faB~DeYC&Y*LPwS;!lNHbK7iv} zD}gXWdnx=GvQ&MYCdgm08L6tO>JAB^$dsO*K1kJH0wm&(o_Du&`xC z0Q&kcyq=7wzyu**Gb;eku~$>OlMJY9HGn=+e-~q+t)KlEduG&}_=Qf+2~b*CTU+ZD zhh1G=x@dYtw&eGquCDG4`u*kV>gumVslL8m!1{1Hi^FYDGYV~OoO7Y1o`G~Mmu*}h zeO`iFDCkc(Ia^axb4Z*yoldh1Ac6R3$1DE|K>n@_4-fCe$tZNl*DLN7R|au=TS9RS fU{&`1{}lZN{H0FArxWVL00000NkvXXu0mjfCIKTe diff --git a/app/src/main/res/drawable-mdpi-v11/ic_stat_fosdem.png b/app/src/main/res/drawable-mdpi-v11/ic_stat_fosdem.png deleted file mode 100644 index a90ba960e4a8c4c760400f742598f6f0cc06addd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)~?Esqftfk9C(K}ByR^%Ol+q-8-w z3n3^%647E-V6;C}50wUG{`-CZ&b9G+Z(bi7_?R;@-#KUI%sDgOp#R*wxb_o?#BjK& zp67jyt0Ue(9NdHd76)Zg#NkA`E#M?`pQD_HIzTxUh3%jo<#xs+kw2P|S@dtfC9nz< zz-bw%gKQLDfDhmhCBVUlm=pY~y2cPUzDagNEXOSUd*S8@S#fbM^I43|Qm;jdJ z(3c9fIzl7^Np6yHzGFV*V-^ZRfU>L*-L9a6Q7mZJitjTp2U0gi79;Ck>cCL22DB9wg%tam0IK+2&z1{Q)zMm!6llC@=wuYtszCRmt8n&xi!k_rc|8ZJ$b5*8oKy7?;jd)!T3|tG zo`LT7o=b)(c^5bUl(K3~pw!R*pmlrj?l3>y)=tr%2Oa3>ar}D%$a5L{k5(7*5L0TT zuR`Ie>i~W}W99s8n^&Rb!F%WOf@!*fMOC8WeFeBxsy9cKuDhBKbkVvix9!G(UlYms ze?4}WS=TGtU(-{fuxtRY!91Mk;-ei{U9`f`MeE(y$@IYln~F;BkN%8I~?Esqftfk9C(K}ByR^%Ol+q-8-w z3n3^%647E-V6;C}50wUG{`-CZ&b9G+Z(bi7_?R;@-#KUI%sDgOp#R*wxb_o?#BjK& zp67jyt0Ue(9NdHd76)Zg#NkA`E#M?`pQD_HIzTxUh3%jo<#xs+kw2P|S@dtfC9nz< zz-bw%gKQLDfDhmhCBVUlm=pY~y2cPUzDagNEXOSUd*S8@S#fbM^I43|Qm;jdJ z(3c9fIzl7^Np6yHzGFV*V-^ZRfU>L*-L9a6Q7mZJitjTp2U0gi79;Ck>cCL22DB9wg%tam0IK+2&z1{Q)zMm!6llC@=wuYtszCRmt8n&xi!k_rc|8ZJ$b5*8oKy7?;jd)!T3|tG zo`LT7o=b)(c^5bUl(K3~pw!R*pmlrj?l3>y)=tr%2Oa3>ar}D%$a5L{k5(7*5L0TT zuR`Ie>i~W}W99s8n^&Rb!F%WOf@!*fMOC8WeFeBxsy9cKuDhBKbkVvix9!G(UlYms ze?4}WS=TGtU(-{fuxtRY!91Mk;-ei{U9`f`MeE(y$@IYln~F;BkN%8IX1ONa4lJ#aH0004hNklU zJ!=#}00!VUiD+X;q5(N1*ovAU5{(urY89|aVWEYc-6>cE+bNu#ncbP$z1h9pHJzkN z8f(QyqIUL55JiLH2f`&Oa=b;1T;LG$1N3?D-+44%U%=kP{oB12d`hB_PH##`7=O1Xuq&BKIx&lRH?cf~KjLRGO%o7<*dYc1BVuMOSY1VWrv2D%#I(oq z+4g3U=8I*gnDNtwaW}pQAY68@OxG}NWOoeHCvL^CHJ42pnywv3k9n<`-P#^7=fy!a zW~PB~Pg67hnVtp^&Ly8TTkq5ucKM^(XHC7JZt4*LsWZ>js%Chb-OwZcP`DjFYAVVp z^r^FoiYZ$R^wf+#sBf($^!a(Y9+h$}qGYrsJ7QFfM#s@78}byO9>^cj;plp_wLO5n i=*fq3*ddSLpYj{*eY}_QVLYq=0000 - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi-v11/ic_stat_fosdem.png b/app/src/main/res/drawable-xhdpi-v11/ic_stat_fosdem.png deleted file mode 100644 index 9bf7af90e9895ed014a0350d3561da06d1c46181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1485 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_VA2lo32_B-|Br&v5FjE1LVj%N z1}2xCB|(0{42(?7EUawo99-NyynOruLc$`VV&alg(lWAg@(PMd$||ZFnp)aAx_X92 z#wKRwmR8m_b`FkCF0O7~K7RfIfkB~R;SrHh(XnxfNy#ax>6uwMxp@VJ#bxD{Rn;}M z4NWa=?VVlSJ-z)CCQq3-~Iy!4;?*r z;^e8*XU?6!aPiXRt2gi7fAH|p<0ns_y?FWR^_#cv-hcS`>GPMb-@gC&`Rn)Azs7dJ zv_Hes#W6%e^6J5#%99Hj*ghPWQ9OF*;=+(6N_REpYN#&l7HTcIaKV>dbFR|VOD=-Z z3oqWVsgHaAeXi{LZ+^cnK5wo(WUj~ge`(gOU5uMlXG{)X!sqm@;&<7ZL+YGP4UHyj zOdda7=e3sKs-70a+wgSCljH0xWfRUcm;d&7#bol*T*LU4re|~cM72q4V@pgWSrsK# z&3gIru$scsL=EPwq7{cq9`2hdbHVATXVupW>|B|%n;M!jZ$<2u&d!prUwS#fM&!`1 z%!&Xjx0wrzdihoAqVr~DCg0>=y0|2(v)MVzJhe?jqjlfH*jR=b7n|j4r1F$*Wfb4$ z=ep&`wRmHJ@SheZe~vqAW-`>6PWp@XPOH!ssGQP^5XA9#e-)g4|5iH zEec>gd2U+y^~DWOj;-6>IbqL&H~o5S#$xI5m6;1R@H{{~YPoBk(Fu%*o^f|e1 z3X53PE-aYESG%%cV)CLK{VCfbJ^wAq`I4lPrgCpnKpIc`?5+Mw9vX3E z*Pmsax2`()o=LAt_H3Rd8}j+E*QTrNTI+&cv%j4Co-&zj-WIn>mqTXQJmc3nv6{cN zOIhW2`IBukUZnK4mA9X*+0Ar7%6uwMxp@VJ#bxD{Rn;}M z4NWa=?VVlSJ-z)CCQq3-~Iy!4;?*r z;^e8*XU?6!aPiXRt2gi7fAH|p<0ns_y?FWR^_#cv-hcS`>GPMb-@gC&`Rn)Azs7dJ zv_Hes#W6%e^6J5#%99Hj*ghPWQ9OF*;=+(6N_REpYN#&l7HTcIaKV>dbFR|VOD=-Z z3oqWVsgHaAeXi{LZ+^cnK5wo(WUj~ge`(gOU5uMlXG{)X!sqm@;&<7ZL+YGP4UHyj zOdda7=e3sKs-70a+wgSCljH0xWfRUcm;d&7#bol*T*LU4re|~cM72q4V@pgWSrsK# z&3gIru$scsL=EPwq7{cq9`2hdbHVATXVupW>|B|%n;M!jZ$<2u&d!prUwS#fM&!`1 z%!&Xjx0wrzdihoAqVr~DCg0>=y0|2(v)MVzJhe?jqjlfH*jR=b7n|j4r1F$*Wfb4$ z=ep&`wRmHJ@SheZe~vqAW-`>6PWp@XPOH!ssGQP^5XA9#e-)g4|5iH zEec>gd2U+y^~DWOj;-6>IbqL&H~o5S#$xI5m6;1R@H{{~YPoBk(Fu%*o^f|e1 z3X53PE-aYESG%%cV)CLK{VCfbJ^wAq`I4lPrgCpnKpIc`?5+Mw9vX3E z*Pmsax2`()o=LAt_H3Rd8}j+E*QTrNTI+&cv%j4Co-&zj-WIn>mqTXQJmc3nv6{cN zOIhW2`IBukUZnK4mA9X*+0Ar7%#f%dO4#t+N?XnvJ|^B%$a#!6SQmI5n$mMe6qM{;XsZ@$A zkx0a1F^b~i;=H`Pf`S5(NK{!_nV+9uT3QNbVPPQ%AcIg*QBhJ-0)k8?!x0F?R9RUW z2FuIKLB=V_Krn?GIBJDL0YT_v1T+-jKrJ^nS11%hli*= z$PmFeM8Jm)93coA_?RL@P=Jh@Sb=tH9mtSE#yCKtg#p-x0ubP6QD6}UfnygoVl_bc z!M$>Fa)|q)hQgLTkRcB8*4<%%xI5vNxG5eZ#IbJ69tyaH4hAs}8uT#;11OLIqQwYW z&pGCzHMx5YHn$5ZENr7=;-X~>h6Bgw9s`uh6c8~?@2|HpOe3roDCyL_2m+|Rbn|1@&N z%*)(x=}-bAj3Jghdc+}j+Y46{HiNw)vNa!)&&40td;C|+#tBWaN)flT zmPSpGE{yVL9X0nfamkxXeLDGedh)_Znj)(yvN`kg{cc*d&Rb`to|rUsZ7aMrmRUGt z^Tlwh?)Gx38Q<+6S*rcgs>=H>adnT{`PNCs`kt)uPYQ@f~pJ!Pi!jG1#50@0-^{m@7C%kwF{N5zLPAKYy@KvC5G zD2TY$8`UT3rU|Xnf^EI7v^+h(X~cq>T0EH+cch`9PMr%f56 diff --git a/app/src/main/res/drawable-xxhdpi-v11/ic_stat_fosdem.png b/app/src/main/res/drawable-xxhdpi-v11/ic_stat_fosdem.png deleted file mode 100644 index 07dc6e2ccfbcfb905f1fefa7ba4649c38944d7b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2003 zcmeH{={Fk)6vczkh^CgNVk^=Vp>#rQwY9d^Qp?!8Sc2M%sjY+3NTk$0q@Bi6M2N(Z; zZT=gO(Bbw+TgCwZg2~R8-K-DKgCF`q;Qt^%uJ6w~%-?XVi=!(*Ku`!MEOG=S3KlyG zIVLV4DRmrrLK-F`E3craqzpfWP*FvyYn;*4I*ZcQLF*eB8X22hFt@O@vc7o9{<4Fk zle3GPyNBo1>)t+o82^C4px}_uu<(eRkvRlT+`e;qZie8TYfYb8_?Y3w|pi zK6v>1BT{im+2itxN^%vYx`tZ&gjQGI(D;(3`g-??%VQCnl$+XJ+5eeVAYPxVZG`Gk7&#^%=c&hFm+S1K9t9smI9 z*jkyp$;d7<_k5vo0Fjvl4~ZNEka$#FmnjzW0!ei1&34vBFf@r!x=W9Voj{(+7!a*t zPu9$1iK*0I=2!&?V16mxQ3`vBp7xHZD)vBk%G2)|*iU(N1o{ckluoH{D)LQdC9_QE%X8x!(9A=Snm-I)5J9i*( z&TH}c@XazKBT*r)t5>=g(KRLxteaOKWV4a^n3^QnNV1&e@~bLI`eP1Obs`hhGf|a= z&oKESr{DYTE>_n9Sk&f`mK`j^zrEeJAp7UyZ&mGrE4(P)M0#xRJ)@Wi~I>ApGpL{-DJ^-s?4pu`eYf^@v2Lbzh z+RK~9=M6)oxP#FE%c!9SX$vzIrMf4wOF-aHlZMpzrpw8?cr-6T0xYA0(W6`w z9n2=jLOsT1mQEi&J$q$`EXB@HVnH4_X{Ahbc@bfPa>BNED(ljJK8QXx}3QG)*{0GVvWUT*Y&p`QkIwsPtY?sdY53o&>)+ z8eLgOzH&*DzwfCXfmTr0ql1cSI#1Q)Vp0Q{SA6nWap&1`Ftt;xFFV&pmluvlSG(z@ zwAFTv*Y652ypbGxY~(vJ_tc>eS+@R^{+uK&iaPq}Xiigx$d)79M=1_1NrNX1Z_lp{I*=px1_PDbu&m^+ zK6C=ON*lTY!K27oB;m!(Y=EAzAGJJ4G?5jP9{3PO81{WFzqeR`IDH4yGueWIm_DWd mb9G#I^M0$Yu=rMPD!^{)I;E=*mwVWb09$KEt3NIL(*6Zb6#aYv diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_fosdem.png b/app/src/main/res/drawable-xxhdpi/ic_stat_fosdem.png index ef55f2b0cd79e9cd6eb18307e80a4504a8e4177e..07dc6e2ccfbcfb905f1fefa7ba4649c38944d7b0 100644 GIT binary patch literal 2003 zcmeH{={Fk)6vczkh^CgNVk^=Vp>#rQwY9d^Qp?!8Sc2M%sjY+3NTk$0q@Bi6M2N(Z; zZT=gO(Bbw+TgCwZg2~R8-K-DKgCF`q;Qt^%uJ6w~%-?XVi=!(*Ku`!MEOG=S3KlyG zIVLV4DRmrrLK-F`E3craqzpfWP*FvyYn;*4I*ZcQLF*eB8X22hFt@O@vc7o9{<4Fk zle3GPyNBo1>)t+o82^C4px}_uu<(eRkvRlT+`e;qZie8TYfYb8_?Y3w|pi zK6v>1BT{im+2itxN^%vYx`tZ&gjQGI(D;(3`g-??%VQCnl$+XJ+5eeVAYPxVZG`Gk7&#^%=c&hFm+S1K9t9smI9 z*jkyp$;d7<_k5vo0Fjvl4~ZNEka$#FmnjzW0!ei1&34vBFf@r!x=W9Voj{(+7!a*t zPu9$1iK*0I=2!&?V16mxQ3`vBp7xHZD)vBk%G2)|*iU(N1o{ckluoH{D)LQdC9_QE%X8x!(9A=Snm-I)5J9i*( z&TH}c@XazKBT*r)t5>=g(KRLxteaOKWV4a^n3^QnNV1&e@~bLI`eP1Obs`hhGf|a= z&oKESr{DYTE>_n9Sk&f`mK`j^zrEeJAp7UyZ&mGrE4(P)M0#xRJ)@Wi~I>ApGpL{-DJ^-s?4pu`eYf^@v2Lbzh z+RK~9=M6)oxP#FE%c!9SX$vzIrMf4wOF-aHlZMpzrpw8?cr-6T0xYA0(W6`w z9n2=jLOsT1mQEi&J$q$`EXB@HVnH4_X{Ahbc@bfPa>BNED(ljJK8QXx}3QG)*{0GVvWUT*Y&p`QkIwsPtY?sdY53o&>)+ z8eLgOzH&*DzwfCXfmTr0ql1cSI#1Q)Vp0Q{SA6nWap&1`Ftt;xFFV&pmluvlSG(z@ zwAFTv*Y652ypbGxY~(vJ_tc>eS+@R^{+uK&iaPq}Xiigx$d)79M=1_1NrNX1Z_lp{I*=px1_PDbu&m^+ zK6C=ON*lTY!K27oB;m!(Y=EAzAGJJ4G?5jP9{3PO81{WFzqeR`IDH4yGueWIm_DWd mb9G#I^M0$Yu=rMPD!^{)I;E=*mwVWb09$KEt3NIL(*6Zb6#aYv literal 1367 zcmV-d1*rOoP)LRl6=PB(h=@@`V!)6Xtd(G5F$#$mo8Y5r6trLsQLuyEnYnZCymp?u z1S3A^M=_Q(5(r8f5-N#CAwE;zwjmUYv=rKI_kQ5a&d$!=nca3;(BF(PB5U#oQ` z8g!fq*yxJyj<@Jf8eJJlN|`I=FH{KhF^|KcfXyCbT_i$HH`bZQbZi_4bHc3Q ziLe3ETRCFxGP>+-vsQ$4HpHEcQOHsbPqFlNrT?E3m*jQImgzNaKIl7QK{qM%gYXI3 z&F?`6`QE~z(B=ZO)_`?o2KA%nJH~6uFv29l-}vp~(o55__j)FJfY;DJxmq^zZHbb+ z?)8dTzpWsolQ739iDLOPU8+I{{Q=;;1?Ep(iS}8;I6!C7BZbe3nhv+YF;ZXK@2%4Z zU=HdCEO`j6nkXUot)zuGraf3tRlExB_pP8Y%$?!eNE_vI{RRD5vrey(=jRJ?+EYb` zsOh0D3V)Gn_J+|(au{7rmFAw9 zGSlPWt#Bj|AjP**vvS^o5Ed z{+wi0*UFZ%JxHREnSu74H)7SCS{V{LDfcxKn+V%s-_FaAb2y0Nvdrk4q*QuI{E+13 zha4?oGa*g+E}O6r>;vb4HAIq{xng21As>^L^IHjiP`t^}itQk52lFHvtbq04UG8sh z93V%WzvDbBJ-3w`4`W| za{RVf&Mn|?p(}lbLVaCIlJ0G?E|xxi2(er}3P_tXbY=cyS}CMh97G-~9jIU{CETNa z%jM{UmkX#SO4#EWr9tLb(gb4V53PYJ4R(KOG&aEbCM2#dxLCHDHJL4J4OLFhXMSQa zgIxl4+y1*M%a3x4__?q`x?8DNK8l?c2pyNCZni8$UVtTRPwvcswOLa7t+HP$$vPc2 zF9NJcp)#9U6P(?+H0u5@*xC8AgPoN7lhI{tBh%-ElGaY>o-KoY3=WAG*=Fh*=V@ZL zGiT^cVQR}WS@RPk6I-OPq)0Q#aZhu@*vze!vuhP6nf6~Lwe|9Qg zIBXU388bw`>h(p;PS-X2B6GX_iNUZLemF7}NR+fJ%1PWUG*06ww_UOB%a4vMTzfXr zrqwylqQut=vyx6)vU6mIG-W``qqh4#I;Y=k*%+;JGUz`8RZ7>>&C$9@5sFZRA`~GX Z{0l_3x+}9NzXJdO002ovPDHLkV1kB%oC*K{ diff --git a/app/src/main/res/drawable/activated_background.xml b/app/src/main/res/drawable/activated_background.xml index ec0b816..a28f929 100644 --- a/app/src/main/res/drawable/activated_background.xml +++ b/app/src/main/res/drawable/activated_background.xml @@ -1,4 +1,11 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/checkable_foreground.xml b/app/src/main/res/drawable/checkable_foreground.xml deleted file mode 100644 index a98c8b5..0000000 --- a/app/src/main/res/drawable/checkable_foreground.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_event.xml b/app/src/main/res/layout/item_event.xml index 685938c..a773fd0 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -1,12 +1,12 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index a59d68e..47693bc 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -11,7 +11,7 @@ app:showAsAction="ifRoom|collapseActionView"/> diff --git a/app/src/main/res/values-v11/styles.xml b/app/src/main/res/values-v11/styles.xml deleted file mode 100644 index 917c71c..0000000 --- a/app/src/main/res/values-v11/styles.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8fb96c5..ebd9964 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -16,8 +16,10 @@ - - - - - diff --git a/build.gradle b/build.gradle index 8674409..73766cb 100644 --- a/build.gradle +++ b/build.gradle @@ -2,14 +2,17 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { jcenter() + google() + maven { url "https://jitpack.io" } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ba3a25e..620b2b0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Apr 17 16:36:59 CEST 2017 +#Mon Jan 01 03:03:36 CET 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip