diff --git a/ShoppingList/build.gradle b/ShoppingList/build.gradle index f848a98..e5f05aa 100644 --- a/ShoppingList/build.gradle +++ b/ShoppingList/build.gradle @@ -17,7 +17,7 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion testApplicationId "org.openintents.shopping.test" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" setProperty("archivesBaseName", "$applicationId-$versionName") } @@ -76,17 +76,12 @@ dependencies { implementation project(':ShoppingListLibrary') implementation 'com.github.openintents:distribution:3.0.2' - implementation "com.android.support:appcompat-v7:$rootProject.ext.supportVersion" - implementation "com.android.support:design:$rootProject.ext.supportVersion" + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' androidTestImplementation 'junit:junit:4.13' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test:rules:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2' - androidTestImplementation "com.android.support:support-annotations:$rootProject.ext.supportVersion" - androidTestImplementation "com.android.support:recyclerview-v7:$rootProject.ext.supportVersion" - androidTestImplementation "com.android.support:appcompat-v7:$rootProject.ext.supportVersion" - androidTestImplementation "com.android.support:support-v4:$rootProject.ext.supportVersion" - androidTestImplementation "com.android.support:design:$rootProject.ext.supportVersion" + androidTestImplementation group: 'androidx.test', name: 'runner', version: '1.3.0' + androidTestImplementation group: 'androidx.test', name: 'rules', version: '1.3.0' + androidTestImplementation group: 'androidx.test.espresso', name: 'espresso-core', version: '3.3.0' + androidTestImplementation group: 'androidx.test.espresso', name: 'espresso-contrib', version: '3.3.0' } diff --git a/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityInsertByIntentTest.java b/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityInsertByIntentTest.java index 2e7b478..713d261 100644 --- a/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityInsertByIntentTest.java +++ b/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityInsertByIntentTest.java @@ -4,9 +4,10 @@ import android.content.SharedPreferences; import android.net.Uri; import android.preference.PreferenceManager; -import android.support.test.InstrumentationRegistry; -import android.support.test.espresso.matcher.RootMatchers; -import android.support.test.rule.ActivityTestRule; + +import androidx.test.InstrumentationRegistry; +import androidx.test.espresso.matcher.RootMatchers; +import androidx.test.rule.ActivityTestRule; import org.junit.Before; import org.junit.Rule; @@ -21,12 +22,12 @@ import java.util.ArrayList; import java.util.Random; -import static android.support.test.espresso.Espresso.onData; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.typeText; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.typeText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; diff --git a/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityTest.java b/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityTest.java index 6a7f504..b289d55 100644 --- a/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityTest.java +++ b/ShoppingList/src/androidTest/java/org/openintents/shopping/test/test/ShoppingActivityTest.java @@ -4,17 +4,18 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.support.test.InstrumentationRegistry; -import android.support.test.espresso.UiController; -import android.support.test.espresso.ViewAction; -import android.support.test.espresso.contrib.DrawerActions; -import android.support.test.rule.ActivityTestRule; -import android.support.v7.widget.ActionBarContainer; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Adapter; import android.widget.AdapterView; +import androidx.appcompat.widget.ActionBarContainer; +import androidx.test.InstrumentationRegistry; +import androidx.test.espresso.UiController; +import androidx.test.espresso.ViewAction; +import androidx.test.espresso.contrib.DrawerActions; +import androidx.test.rule.ActivityTestRule; + import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; @@ -30,21 +31,21 @@ import java.util.Random; import java.util.concurrent.TimeUnit; -import static android.support.test.espresso.Espresso.onData; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.Espresso.openContextualActionModeOverflowMenu; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.longClick; -import static android.support.test.espresso.action.ViewActions.replaceText; -import static android.support.test.espresso.action.ViewActions.typeText; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.CursorMatchers.withRowString; -import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; -import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.isRoot; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withText; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.Espresso.openContextualActionModeOverflowMenu; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.longClick; +import static androidx.test.espresso.action.ViewActions.replaceText; +import static androidx.test.espresso.action.ViewActions.typeText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.CursorMatchers.withRowString; +import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom; +import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isRoot; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasEntry; diff --git a/ShoppingList/src/main/java/org/openintents/convertcsv/common/ConvertCsvBaseActivity.java b/ShoppingList/src/main/java/org/openintents/convertcsv/common/ConvertCsvBaseActivity.java index 78aa05c..07fe18d 100644 --- a/ShoppingList/src/main/java/org/openintents/convertcsv/common/ConvertCsvBaseActivity.java +++ b/ShoppingList/src/main/java/org/openintents/convertcsv/common/ConvertCsvBaseActivity.java @@ -24,7 +24,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; -import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; @@ -33,8 +32,6 @@ import android.os.ParcelFileDescriptor; import android.preference.PreferenceManager; import android.provider.OpenableColumns; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.util.Xml.Encoding; @@ -52,6 +49,8 @@ import android.widget.Spinner; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; + import org.openintents.convertcsv.PreferenceActivity; import org.openintents.distribution.DownloadOIAppDialog; import org.openintents.shopping.R; diff --git a/ShoppingList/src/main/java/org/openintents/distribution/DistributionLibraryFragmentActivity.java b/ShoppingList/src/main/java/org/openintents/distribution/DistributionLibraryFragmentActivity.java index 4d8882b..aa1c07c 100644 --- a/ShoppingList/src/main/java/org/openintents/distribution/DistributionLibraryFragmentActivity.java +++ b/ShoppingList/src/main/java/org/openintents/distribution/DistributionLibraryFragmentActivity.java @@ -2,10 +2,11 @@ import android.app.Dialog; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; +import androidx.appcompat.app.AppCompatActivity; + //public class DistributionLibraryActivity extends Activity {//Temp - FragmentActivity for 3.x compatibility public class DistributionLibraryFragmentActivity extends AppCompatActivity { diff --git a/ShoppingList/src/main/java/org/openintents/shopping/ui/LayoutChoiceActivity.java b/ShoppingList/src/main/java/org/openintents/shopping/ui/LayoutChoiceActivity.java index 7f25907..eb35d11 100644 --- a/ShoppingList/src/main/java/org/openintents/shopping/ui/LayoutChoiceActivity.java +++ b/ShoppingList/src/main/java/org/openintents/shopping/ui/LayoutChoiceActivity.java @@ -3,13 +3,14 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.view.View; import android.widget.RadioGroup; +import androidx.annotation.IdRes; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + import org.openintents.shopping.R; public class LayoutChoiceActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { diff --git a/ShoppingList/src/main/java/org/openintents/shopping/ui/ShoppingActivity.java b/ShoppingList/src/main/java/org/openintents/shopping/ui/ShoppingActivity.java index 8fa2d9d..db04190 100644 --- a/ShoppingList/src/main/java/org/openintents/shopping/ui/ShoppingActivity.java +++ b/ShoppingList/src/main/java/org/openintents/shopping/ui/ShoppingActivity.java @@ -39,15 +39,9 @@ import android.hardware.SensorManager; import android.net.Uri; import android.os.AsyncTask; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.design.widget.Snackbar; -import android.support.v4.view.ActionProvider; -import android.support.v4.view.MenuItemCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -86,6 +80,13 @@ import android.widget.Toast; import android.widget.WrapperListAdapter; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.core.view.ActionProvider; +import androidx.core.view.MenuItemCompat; +import androidx.drawerlayout.widget.DrawerLayout; + +import com.google.android.material.snackbar.Snackbar; + import org.openintents.OpenIntents; import org.openintents.convertcsv.shoppinglist.ConvertCsvActivity; import org.openintents.distribution.DistributionLibraryFragmentActivity; @@ -129,6 +130,8 @@ import java.util.LinkedList; import java.util.List; +import static org.openintents.shopping.ui.PreferenceActivity.PREFS_HIDECHECKED; +import static org.openintents.shopping.ui.PreferenceActivity.PREFS_HIDECHECKED_DEFAULT; import static org.openintents.shopping.ui.widget.ShoppingItemsView.MODE_IN_SHOP; /** @@ -1530,14 +1533,14 @@ public boolean onCreateOptionsMenu(Menu menu) { View searchView = mItemsView.getSearchView(); if (searchView != null) { item = menu.add(0, MENU_SEARCH_ADD, 0, R.string.menu_search_add); - MenuItemCompat.setActionView(item, searchView); - MenuItemCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_ALWAYS); + item.setActionView(searchView); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } mAddPanel.setVisibility(searchView == null ? View.VISIBLE : View.GONE); item = menu.add(0, MENU_SORT_LIST, 0, R.string.menu_sort_list) .setIcon(android.R.drawable.ic_menu_sort_alphabetically); - MenuItemCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); if (mListSortActionProvider == null) { mListSortActionProvider = new ListSortActionProvider(this); @@ -1553,8 +1556,7 @@ public boolean onCreateOptionsMenu(Menu menu) { item = menu.add(0, MENU_CLEAN_UP_LIST, 0, R.string.clean_up_list) .setIcon(R.drawable.ic_menu_cleanup).setShortcut('1', 'c'); - MenuItemCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM - | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); menu.add(0, MENU_PICK_ITEMS, 0, R.string.menu_pick_items) .setIcon(android.R.drawable.ic_menu_add).setShortcut('2', 'p'). @@ -1695,9 +1697,14 @@ public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(MENU_MARK_ALL_ITEMS).setVisible(mItemsView.mNumUnchecked > 0); menu.findItem(MENU_UNMARK_ALL_ITEMS).setVisible(mItemsView.mNumChecked > 0); - menu.findItem(MENU_CLEAN_UP_LIST).setEnabled( - mItemsView.mNumChecked > 0).setVisible(!drawerOpen); - + // Show clean_up_list menu action only if setting "Hide checked items" is set to false + // as clean_up_list menu item would unexpected work on already hidden items + SharedPreferences sp = getSharedPreferences("org.openintents.shopping_preferences", MODE_PRIVATE); + if (sp.getBoolean(PREFS_HIDECHECKED, PREFS_HIDECHECKED_DEFAULT)) { + menu.findItem(MENU_CLEAN_UP_LIST).setVisible(false); + } else { + menu.findItem(MENU_CLEAN_UP_LIST).setEnabled(mItemsView.mNumChecked > 0).setVisible(!drawerOpen); + } // Delete list is possible, if we have more than one list: // AND diff --git a/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/QuickSelectMenu.java b/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/QuickSelectMenu.java index 08074ff..aa90f09 100644 --- a/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/QuickSelectMenu.java +++ b/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/QuickSelectMenu.java @@ -5,19 +5,21 @@ import android.view.MenuItem; import android.view.View; +import androidx.appcompat.widget.PopupMenu; + /* This class exposes a subset of PopupMenu functionality, and chooses whether * to use the platform PopupMenu (on Honeycomb or above) or a backported version. */ public class QuickSelectMenu { - private android.support.v7.widget.PopupMenu mImplPlatform; + private PopupMenu mImplPlatform; private OnItemSelectedListener mItemSelectedListener; public QuickSelectMenu(Context context, View anchor) { - mImplPlatform = new android.support.v7.widget.PopupMenu(context, anchor); + mImplPlatform = new PopupMenu(context, anchor); mImplPlatform - .setOnMenuItemClickListener(new android.support.v7.widget.PopupMenu.OnMenuItemClickListener() { + .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return onMenuItemClickImpl(item); diff --git a/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/ShoppingItemsView.java b/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/ShoppingItemsView.java index 0fd3b50..4a983da 100644 --- a/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/ShoppingItemsView.java +++ b/ShoppingList/src/main/java/org/openintents/shopping/ui/widget/ShoppingItemsView.java @@ -24,8 +24,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; -import android.support.design.widget.Snackbar; -import android.support.v7.widget.SearchView; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextPaint; @@ -55,6 +53,10 @@ import android.widget.SimpleCursorAdapter.ViewBinder; import android.widget.TextView; +import androidx.appcompat.widget.SearchView; + +import com.google.android.material.snackbar.Snackbar; + import org.openintents.distribution.DownloadAppDialog; import org.openintents.shopping.R; import org.openintents.shopping.ShoppingApplication; diff --git a/ShoppingList/src/main/res/layout/activity_shopping.xml b/ShoppingList/src/main/res/layout/activity_shopping.xml index e90b987..2ec0d7a 100644 --- a/ShoppingList/src/main/res/layout/activity_shopping.xml +++ b/ShoppingList/src/main/res/layout/activity_shopping.xml @@ -14,7 +14,7 @@ * limitations under the License. --> - @@ -154,4 +154,4 @@ android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> - + diff --git a/build.gradle b/build.gradle index eef39f8..66b0605 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,6 @@ allprojects { ext { compileSdkVersion = 28 targetSdkVersion = 28 - supportVersion = "28.+" playServicesVersion = "16.0.1" supportWearableVersion = "2.4.0" } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..5d18585 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,13 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true \ No newline at end of file