From f84504ad8a238d272f9e71e01e9f78de01124e99 Mon Sep 17 00:00:00 2001 From: Peter Kalata Date: Wed, 7 Mar 2018 14:48:19 +0100 Subject: [PATCH] Update dependecies, deprecate --- CHANGELOG.md | 6 +++++- README.md | 10 ++++++++-- build.gradle | 2 +- gradle.properties | 2 +- library/build.gradle | 15 ++++++++------- .../fixture/fragment/VMTestFragment.java | 9 +++++---- .../eu/inloop/viewmodel/ProxyViewHelper.java | 7 +------ .../eu/inloop/viewmodel/ViewModelHelper.java | 6 +++--- .../viewmodel/base/ViewModelBaseFragment.java | 4 ++-- .../binding/ViewModelBaseBindingFragment.java | 2 +- sample/build.gradle | 15 ++++++++------- .../sample/activity/ViewPagerActivity.java | 10 +++++++--- .../sample/fragment/PagerFragment.java | 7 ++++--- .../fragment/SampleBindingFragment.java | 5 +++-- .../sample/fragment/UserListFragment.java | 19 ++++++++++--------- .../sample/viewmodel/UserListViewModel.java | 3 +++ 16 files changed, 70 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79af7df..cd9ac1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ -## 1.3.3(2017-11-02) +## 1.3.5(2018-03-07) + +- Updated dependencies (Support library, build tools, Gradle). + +## 1.3.4(2017-11-02) - Update Gradle plugin. Fix Nullable annotation in getBinding(). diff --git a/README.md b/README.md index 38294d9..46031ce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ AndroidViewModel ================ +Important notice: Deprecated +-------- +This library served it's purpose for over 3 years. We believe that Google's Android [Architecture Components](https://developer.android.com/topic/libraries/architecture/index.html) are the preferred setup now for new projects. +[INLOOPX](http://www.inloopx.com) is dedicated to continue maintaining this library (no deadline on support end). So rest assured that your existing projects don't need be migrated from AndroidViewModel because of this deprecation. We are only stopping new feature development and don't recommend using it for new projects. + + Separating data and state handling from Fragments or Activities without lots of boilerplate-code. Reducing them to simple dumb views. Basic idea behind this library. @@ -87,7 +93,7 @@ Data binding is supported - extend [ViewModelBaseBindingFragment.java](library/s ``` java @Override public ViewModelBindingConfig getViewModelBindingConfig() { - return new ViewModelBindingConfig(R.layout.fragment_sample_binding, getActivity()); + return new ViewModelBindingConfig(R.layout.fragment_sample_binding, requireActivity()); } ``` @@ -112,7 +118,7 @@ Download -------- ```groovy -compile 'eu.inloop:androidviewmodel:1.3.4' +compile 'eu.inloop:androidviewmodel:1.3.5' ``` ## Android Studio Template diff --git a/build.gradle b/build.gradle index e38ee82..4916934 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } diff --git a/gradle.properties b/gradle.properties index 635e98a..35b39c4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,4 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME=1.3.4 \ No newline at end of file +VERSION_NAME=1.3.5 \ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index 211e9a6..0d8d9a6 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -2,20 +2,20 @@ apply plugin: 'com.android.library' apply plugin: 'maven' android { - compileSdkVersion 26 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { minSdkVersion 15 - targetSdkVersion 26 + targetSdkVersion 27 versionCode 1 versionName VERSION_NAME consumerProguardFiles 'proguard-rules.pro' testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { } @@ -26,8 +26,9 @@ android { } dependencies { - implementation 'com.android.support:support-fragment:26.1.0' - implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:support-fragment:27.1.0' + implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'com.android.support:support-v4:27.1.0' androidTestImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' diff --git a/library/src/androidTest/java/eu/inloop/viewmodel/fixture/fragment/VMTestFragment.java b/library/src/androidTest/java/eu/inloop/viewmodel/fixture/fragment/VMTestFragment.java index dd03c29..782467d 100644 --- a/library/src/androidTest/java/eu/inloop/viewmodel/fixture/fragment/VMTestFragment.java +++ b/library/src/androidTest/java/eu/inloop/viewmodel/fixture/fragment/VMTestFragment.java @@ -1,6 +1,7 @@ package eu.inloop.viewmodel.fixture.fragment; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -15,19 +16,19 @@ public class VMTestFragment extends ViewModelBaseFragment getGenericType(@NonNull Class in, @NonNull Class wh return null; } - private static final InvocationHandler sInvocationHandler = new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - return null; - } - }; + private static final InvocationHandler sInvocationHandler = (proxy, method, args) -> null; } diff --git a/library/src/main/java/eu/inloop/viewmodel/ViewModelHelper.java b/library/src/main/java/eu/inloop/viewmodel/ViewModelHelper.java index 48b9844..b94b7f5 100644 --- a/library/src/main/java/eu/inloop/viewmodel/ViewModelHelper.java +++ b/library/src/main/java/eu/inloop/viewmodel/ViewModelHelper.java @@ -162,15 +162,15 @@ public void onDestroy(@NonNull final Fragment fragment) { //no viewmodel for this fragment return; } - if (fragment.getActivity().isFinishing()) { - removeViewModel(fragment.getActivity()); + if (fragment.requireActivity().isFinishing()) { + removeViewModel(fragment.requireActivity()); } else if (fragment.isRemoving() && !mOnSaveInstanceCalled) { // The fragment can be still in backstack even if isRemoving() is true. // We check mOnSaveInstanceCalled - if this was not called then the fragment is totally removed. if (BuildConfig.DEBUG) { Log.d("mode", "Removing viewmodel - fragment replaced"); //NON-NLS } - removeViewModel(fragment.getActivity()); + removeViewModel(fragment.requireActivity()); } mBinding = null; } diff --git a/library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java b/library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java index d198615..35851f1 100644 --- a/library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java +++ b/library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseFragment.java @@ -29,7 +29,7 @@ public void onCreate(@Nullable final Bundle savedInstanceState) { //noinspection unchecked viewModelClass = (Class>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class); } - getViewModelHelper().onCreate(getActivity(), savedInstanceState, viewModelClass, getArguments()); + getViewModelHelper().onCreate(requireActivity(), savedInstanceState, viewModelClass, getArguments()); } @CallSuper @@ -94,7 +94,7 @@ public ViewModelHelper getViewModelHelper() { @Override public void removeViewModel() { - mViewModelHelper.removeViewModel(getActivity()); + mViewModelHelper.removeViewModel(requireActivity()); } /** diff --git a/library/src/main/java/eu/inloop/viewmodel/binding/ViewModelBaseBindingFragment.java b/library/src/main/java/eu/inloop/viewmodel/binding/ViewModelBaseBindingFragment.java index cf153e0..abc4485 100644 --- a/library/src/main/java/eu/inloop/viewmodel/binding/ViewModelBaseBindingFragment.java +++ b/library/src/main/java/eu/inloop/viewmodel/binding/ViewModelBaseBindingFragment.java @@ -25,7 +25,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { getViewModelHelper().performBinding(this); final ViewDataBinding binding = getViewModelHelper().getBinding(); if (binding != null) { diff --git a/sample/build.gradle b/sample/build.gradle index 5f90db3..62412e8 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,21 +1,21 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId 'eu.inloop.viewmodel.sample' minSdkVersion 15 - targetSdkVersion 26 + targetSdkVersion 27 versionCode 1 versionName '1.0' } compileOptions { encoding "UTF-8" - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { @@ -30,8 +30,9 @@ android { } dependencies { - implementation 'com.android.support:support-fragment:26.1.0' - implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:support-fragment:27.1.0' + implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'com.android.support:support-v4:27.1.0' debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.1' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' implementation 'com.jakewharton:butterknife:8.8.1' diff --git a/sample/src/main/java/eu/inloop/viewmodel/sample/activity/ViewPagerActivity.java b/sample/src/main/java/eu/inloop/viewmodel/sample/activity/ViewPagerActivity.java index 3027c8e..7d7ec34 100644 --- a/sample/src/main/java/eu/inloop/viewmodel/sample/activity/ViewPagerActivity.java +++ b/sample/src/main/java/eu/inloop/viewmodel/sample/activity/ViewPagerActivity.java @@ -5,6 +5,8 @@ import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; +import butterknife.BindView; +import butterknife.ButterKnife; import eu.inloop.viewmodel.base.ViewModelBaseEmptyActivity; import eu.inloop.viewmodel.sample.R; import eu.inloop.viewmodel.sample.fragment.PagerFragment; @@ -12,13 +14,15 @@ public class ViewPagerActivity extends ViewModelBaseEmptyActivity { + @BindView(R.id.pager) + ViewPager mViewPager; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pager); - - final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); - viewPager.setAdapter(new TestPagerAdapter(getSupportFragmentManager())); + ButterKnife.bind(this); + mViewPager.setAdapter(new TestPagerAdapter(getSupportFragmentManager())); } private final static class TestPagerAdapter extends ViewModelStatePagerAdapter { diff --git a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/PagerFragment.java b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/PagerFragment.java index 8eedea9..d90717f 100644 --- a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/PagerFragment.java +++ b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/PagerFragment.java @@ -1,6 +1,7 @@ package eu.inloop.viewmodel.sample.fragment; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -28,12 +29,12 @@ public static PagerFragment newInstance(int position) { @Nullable @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_pager, container, false); } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ((TextView)view.findViewById(R.id.text)).setText(Integer.toString(getArguments().getInt("position"))); setModelView(this); @@ -44,7 +45,7 @@ public void onDestroy() { super.onDestroy(); // watch for memory leaks - RefWatcher refWatcher = SampleApplication.getRefWatcher(getActivity()); + RefWatcher refWatcher = SampleApplication.getRefWatcher(requireActivity()); refWatcher.watch(this); } } diff --git a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/SampleBindingFragment.java b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/SampleBindingFragment.java index 6aad23b..7fa2e9f 100644 --- a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/SampleBindingFragment.java +++ b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/SampleBindingFragment.java @@ -1,6 +1,7 @@ package eu.inloop.viewmodel.sample.fragment; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.View; @@ -24,13 +25,13 @@ public SampleBindingFragment() { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setModelView(this); } @Override public ViewModelBindingConfig getViewModelBindingConfig() { - return new ViewModelBindingConfig(R.layout.fragment_sample_binding, getActivity()); + return new ViewModelBindingConfig(R.layout.fragment_sample_binding, requireActivity()); } } diff --git a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/UserListFragment.java b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/UserListFragment.java index c0bf3b9..92c8814 100644 --- a/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/UserListFragment.java +++ b/sample/src/main/java/eu/inloop/viewmodel/sample/fragment/UserListFragment.java @@ -2,6 +2,7 @@ import android.content.Intent; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; @@ -44,11 +45,11 @@ public class UserListFragment extends ViewModelBaseFragment(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, new ArrayList()); + mAdapter = new ArrayAdapter<>(requireActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, new ArrayList()); } @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 View view = inflater.inflate(R.layout.fragment_userlist, container, false); ButterKnife.bind(this, view); @@ -56,34 +57,34 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, headerView.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - getFragmentManager().beginTransaction().replace(R.id.root_content, SampleBundleFragment.newInstance(1234), "empty-fragment").addToBackStack(null).commit(); + requireFragmentManager().beginTransaction().replace(R.id.root_content, SampleBundleFragment.newInstance(1234), "empty-fragment").addToBackStack(null).commit(); } }); headerView.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - getActivity().finish(); - getActivity().startActivity(getActivity().getIntent()); + requireActivity().finish(); + requireActivity().startActivity(requireActivity().getIntent()); } }); headerView.findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - startActivity(new Intent(getContext(), ViewPagerActivity.class)); + startActivity(new Intent(requireContext(), ViewPagerActivity.class)); } }); mListview.addHeaderView(headerView, null, false); mOpenBindingFragment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - startActivity(SampleBindingActivity.newIntent(getActivity())); + startActivity(SampleBindingActivity.newIntent(requireActivity())); } }); return view; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mListview.setAdapter(mAdapter); mListview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -120,7 +121,7 @@ public void onDestroy() { super.onDestroy(); // watch for memory leaks - RefWatcher refWatcher = SampleApplication.getRefWatcher(getActivity()); + RefWatcher refWatcher = SampleApplication.getRefWatcher(requireActivity()); refWatcher.watch(this); } } diff --git a/sample/src/main/java/eu/inloop/viewmodel/sample/viewmodel/UserListViewModel.java b/sample/src/main/java/eu/inloop/viewmodel/sample/viewmodel/UserListViewModel.java index 3c000bf..607cd43 100644 --- a/sample/src/main/java/eu/inloop/viewmodel/sample/viewmodel/UserListViewModel.java +++ b/sample/src/main/java/eu/inloop/viewmodel/sample/viewmodel/UserListViewModel.java @@ -1,5 +1,6 @@ package eu.inloop.viewmodel.sample.viewmodel; +import android.annotation.SuppressLint; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; @@ -45,6 +46,7 @@ public void onBindView(@NonNull IUserListView view) { } } + @SuppressLint("StaticFieldLeak") private void loadUsers() { mLoadingUsers = true; mCurrentLoadingProgress = 0; @@ -86,6 +88,7 @@ protected void onPostExecute(List s) { }.execute(); } + @SuppressLint("StaticFieldLeak") public void deleteUser(final int position) { if (position > mLoadedUsers.size() - 1) { return;