migrate to androidx

This commit is contained in:
Vincent Breitmoser 2019-11-15 12:09:08 +01:00
parent 5cd210831b
commit 5172002f0e
343 changed files with 946 additions and 2335 deletions

View file

@ -7,12 +7,12 @@ dependencies {
// NOTE: libraries are pinned to a specific build, see below // NOTE: libraries are pinned to a specific build, see below
// from local Android SDK // from local Android SDK
implementation 'com.android.support:support-v4:28.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.android.support:design:28.0.0' implementation 'com.google.android.material:material:1.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.android.support:cardview-v7:28.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.android.support:support-annotations:28.0.0' implementation 'androidx.annotation:annotation:1.1.0'
// JCenter etc. // JCenter etc.
implementation 'com.journeyapps:zxing-android-embedded:3.4.0' implementation 'com.journeyapps:zxing-android-embedded:3.4.0'
@ -29,7 +29,7 @@ dependencies {
implementation 'com.jpardogo.materialtabstrip:library:1.1.1' implementation 'com.jpardogo.materialtabstrip:library:1.1.1'
implementation 'com.getbase:floatingactionbutton:1.10.1' implementation 'com.getbase:floatingactionbutton:1.10.1'
implementation 'com.nispok:snackbar:2.11.0' implementation 'com.nispok:snackbar:2.11.0'
implementation 'com.cocosw:bottomsheet:1.3.1@aar' implementation 'com.cocosw:bottomsheet:1.5.0@aar'
// RecyclerView // RecyclerView
implementation 'eu.davidea:flexible-adapter:5.0.5' implementation 'eu.davidea:flexible-adapter:5.0.5'
@ -60,7 +60,7 @@ dependencies {
implementation project(':extern:bouncycastle:prov') implementation project(':extern:bouncycastle:prov')
implementation project(':extern:MaterialChipsInput') implementation project(':extern:MaterialChipsInput')
implementation "android.arch.work:work-runtime:1.0.0-alpha02" implementation 'androidx.work:work-runtime:2.2.0'
// Unit tests in the local JVM with Robolectric // Unit tests in the local JVM with Robolectric
// https://developer.android.com/training/testing/unit-testing/local-unit-tests.html // https://developer.android.com/training/testing/unit-testing/local-unit-tests.html
@ -75,14 +75,14 @@ dependencies {
// UI testing with Espresso // UI testing with Espresso
// Force usage of support libs in the test app, since they are internally used by the runner module. // Force usage of support libs in the test app, since they are internally used by the runner module.
// https://github.com/googlesamples/android-testing/blob/master/ui/espresso/BasicSample/app/build.gradle#L28 // https://github.com/googlesamples/android-testing/blob/master/ui/espresso/BasicSample/app/build.gradle#L28
androidTestCompile 'com.android.support:support-annotations:27.1.1' androidTestCompile 'androidx.annotation:annotation:1.0.0'
androidTestCompile 'com.android.support:appcompat-v7:27.1.1' androidTestCompile 'androidx.appcompat:appcompat:1.0.0'
androidTestCompile 'com.android.support:design:27.1.1' androidTestCompile 'com.google.android.material:material:1.0.0'
androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'androidx.test.ext:junit:1.1.1'
androidTestCompile 'com.android.support.test:rules:0.5' androidTestCompile 'androidx.test:rules:1.1.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'androidx.test.espresso:espresso-core:3.1.0'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2' androidTestCompile 'androidx.test.espresso:espresso-intents:3.1.0'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2') { androidTestCompile ('androidx.test.espresso:espresso-contrib:3.1.0') {
exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4' exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7' exclude module: 'recyclerview-v7'
@ -96,11 +96,11 @@ dependencies {
annotationProcessor "com.ryanharter.auto.value:auto-value-parcel:0.2.5" annotationProcessor "com.ryanharter.auto.value:auto-value-parcel:0.2.5"
implementation 'com.ryanharter.auto.value:auto-value-parcel-adapter:0.2.5' implementation 'com.ryanharter.auto.value:auto-value-parcel-adapter:0.2.5'
implementation "android.arch.lifecycle:extensions:1.0.0" implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
annotationProcessor "android.arch.lifecycle:compiler:1.0.0" annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0'
implementation "android.arch.persistence:db-framework:1.0.0" implementation 'androidx.sqlite:sqlite-framework:2.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// for debugging the db. don't enable by default, this will expose the database no the network! // for debugging the db. don't enable by default, this will expose the database no the network!
// debugImplementation 'com.amitshekhar.android:debug-db:1.0.3' // debugImplementation 'com.amitshekhar.android:debug-db:1.0.3'
@ -117,7 +117,7 @@ android {
applicationId "org.sufficientlysecure.keychain" applicationId "org.sufficientlysecure.keychain"
// the androidjunitrunner is broken regarding coverage, see here: // the androidjunitrunner is broken regarding coverage, see here:
// https://code.google.com/p/android/issues/detail?id=170607 // https://code.google.com/p/android/issues/detail?id=170607
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// this workaround runner fixes the coverage problem, BUT doesn't work // this workaround runner fixes the coverage problem, BUT doesn't work
// with android studio single test execution. use it to generate coverage // with android studio single test execution. use it to generate coverage
// data, but keep the other one otherwis // data, but keep the other one otherwis

View file

@ -28,10 +28,10 @@ import java.io.OutputStream;
import java.util.Random; import java.util.Random;
import android.content.Context; import android.content.Context;
import android.support.annotation.StringRes; import androidx.annotation.StringRes;
import android.support.test.espresso.UiController; import androidx.test.espresso.UiController;
import android.support.test.espresso.ViewAction; import androidx.test.espresso.ViewAction;
import android.support.test.espresso.matcher.ViewMatchers; import androidx.test.espresso.matcher.ViewMatchers;
import android.view.View; import android.view.View;
import com.nispok.snackbar.Snackbar; import com.nispok.snackbar.Snackbar;
@ -42,12 +42,12 @@ import org.sufficientlysecure.keychain.daos.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import static android.support.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.withClassName; import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.endsWith;
import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withSnackbarLineColor; import static org.sufficientlysecure.keychain.matcher.CustomMatchers.withSnackbarLineColor;

View file

@ -4,7 +4,7 @@ package org.sufficientlysecure.keychain;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import android.os.Bundle; import android.os.Bundle;
import android.support.test.runner.AndroidJUnitRunner; import androidx.test.runner.AndroidJUnitRunner;
public class JacocoWorkaroundJUnitRunner extends AndroidJUnitRunner { public class JacocoWorkaroundJUnitRunner extends AndroidJUnitRunner {

View file

@ -19,9 +19,9 @@
package org.sufficientlysecure.keychain.actions; package org.sufficientlysecure.keychain.actions;
import android.support.test.espresso.UiController; import androidx.test.espresso.UiController;
import android.support.test.espresso.ViewAction; import androidx.test.espresso.ViewAction;
import android.support.test.espresso.matcher.ViewMatchers; import androidx.test.espresso.matcher.ViewMatchers;
import android.view.View; import android.view.View;
import com.tokenautocomplete.TokenCompleteTextView; import com.tokenautocomplete.TokenCompleteTextView;
@ -29,7 +29,7 @@ import org.hamcrest.Matcher;
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing;
import org.sufficientlysecure.keychain.daos.KeyWritableRepository; import org.sufficientlysecure.keychain.daos.KeyWritableRepository;
import static android.support.test.InstrumentationRegistry.getTargetContext; import static androidx.test.platform.app.InstrumentationRegistry.getTargetContext;
public abstract class CustomActions { public abstract class CustomActions {

View file

@ -7,15 +7,15 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.support.test.espresso.UiController; import androidx.test.espresso.UiController;
import android.support.test.espresso.ViewAction; import androidx.test.espresso.ViewAction;
import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry; import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.support.test.runner.lifecycle.Stage; import androidx.test.runner.lifecycle.Stage;
import android.view.View; import android.view.View;
import org.hamcrest.Matcher; import org.hamcrest.Matcher;
import static android.support.test.espresso.matcher.ViewMatchers.isRoot; import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
public class OrientationChangeAction implements ViewAction { public class OrientationChangeAction implements ViewAction {
private final int orientation; private final int orientation;

View file

@ -19,10 +19,10 @@
package org.sufficientlysecure.keychain.matcher; package org.sufficientlysecure.keychain.matcher;
import android.support.annotation.ColorRes; import androidx.annotation.ColorRes;
import android.support.annotation.IdRes; import androidx.annotation.IdRes;
import android.support.test.espresso.matcher.BoundedMatcher; import androidx.test.espresso.matcher.BoundedMatcher;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.ViewAnimator; import android.widget.ViewAnimator;
@ -32,12 +32,12 @@ import org.hamcrest.Description;
import org.hamcrest.Matcher; import org.hamcrest.Matcher;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent; import static androidx.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.not;
import static org.sufficientlysecure.keychain.matcher.DrawableMatcher.withDrawable; import static org.sufficientlysecure.keychain.matcher.DrawableMatcher.withDrawable;

View file

@ -5,9 +5,9 @@ import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.support.test.InstrumentationRegistry; import androidx.test.platform.app.InstrumentationRegistry;
import android.support.test.rule.ServiceTestRule; import androidx.test.rule.ServiceTestRule;
import android.support.test.runner.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.LargeTest;
import org.junit.Before; import org.junit.Before;
@ -21,12 +21,12 @@ import org.sufficientlysecure.keychain.R;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import static android.support.test.espresso.Espresso.closeSoftKeyboard; import static androidx.test.espresso.Espresso.closeSoftKeyboard;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.core.Is.is; import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.cleanupForTests; import static org.sufficientlysecure.keychain.AndroidTestHelpers.cleanupForTests;

View file

@ -25,8 +25,8 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build.VERSION; import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.support.test.espresso.intent.Intents; import androidx.test.espresso.intent.Intents;
import android.support.test.espresso.intent.rule.IntentsTestRule; import androidx.test.espresso.intent.rule.IntentsTestRule;
import android.widget.AdapterView; import android.widget.AdapterView;
import org.junit.Before; import org.junit.Before;
@ -38,26 +38,26 @@ import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import java.io.File; import java.io.File;
import static android.support.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onData; import static androidx.test.espresso.Espresso.onData;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu; import static androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu;
import static android.support.test.espresso.Espresso.pressBack; import static androidx.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasAction; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasCategories; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasCategories;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtra; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtraWithKey; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtraWithKey;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasType; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasType;
import static android.support.test.espresso.matcher.ViewMatchers.assertThat; import static androidx.test.espresso.matcher.ViewMatchers.assertThat;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;

View file

@ -20,7 +20,7 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.support.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import android.widget.AdapterView; import android.widget.AdapterView;
import org.junit.Before; import org.junit.Before;
@ -30,18 +30,18 @@ import org.sufficientlysecure.keychain.service.PassphraseCacheService;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import static android.support.test.espresso.Espresso.onData; import static androidx.test.espresso.Espresso.onData;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.pressBack; import static androidx.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource;

View file

@ -18,33 +18,27 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import android.support.test.espresso.matcher.ViewMatchers; import androidx.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.LargeTest;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.sufficientlysecure.keychain.R;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.swipeLeft; import static androidx.test.espresso.action.ViewActions.swipeLeft;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.RootMatchers.isDialog; import static androidx.test.espresso.matcher.RootMatchers.isDialog;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.hasSibling; import static androidx.test.espresso.matcher.ViewMatchers.hasSibling;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.allOf;
import static org.sufficientlysecure.keychain.matcher.EditTextMatchers.withError;
import static org.sufficientlysecure.keychain.matcher.EditTextMatchers.withTransformationMethod;
//TODO This test is disabled because it needs to be fixed to work with updated code //TODO This test is disabled because it needs to be fixed to work with updated code
//@RunWith(AndroidJUnit4.class) //@RunWith(AndroidJUnit4.class)

View file

@ -20,22 +20,21 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.support.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import org.junit.FixMethodOrder; import org.junit.FixMethodOrder;
import org.junit.Rule; import org.junit.Rule;
import org.junit.runners.MethodSorters; import org.junit.runners.MethodSorters;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.KeychainDatabase;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnHolderItem; import static androidx.test.espresso.contrib.RecyclerViewActions.actionOnHolderItem;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource;

View file

@ -27,9 +27,9 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.support.test.espresso.intent.Intents; import androidx.test.espresso.intent.Intents;
import android.support.test.espresso.intent.rule.IntentsTestRule; import androidx.test.espresso.intent.rule.IntentsTestRule;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
@ -42,25 +42,25 @@ import org.sufficientlysecure.keychain.util.Preferences;
import java.io.File; import java.io.File;
import static android.support.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu; import static androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu;
import static android.support.test.espresso.Espresso.pressBack; import static androidx.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnHolderItem; import static androidx.test.espresso.contrib.RecyclerViewActions.actionOnHolderItem;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasAction; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasCategories; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasCategories;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasType; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasType;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.hasSibling; import static androidx.test.espresso.matcher.ViewMatchers.hasSibling;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isChecked; import static androidx.test.espresso.matcher.ViewMatchers.isChecked;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isNotChecked; import static androidx.test.espresso.matcher.ViewMatchers.isNotChecked;
import static android.support.test.espresso.matcher.ViewMatchers.withChild; import static androidx.test.espresso.matcher.ViewMatchers.withChild;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.hasItem;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar;

View file

@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Activity; import android.app.Activity;
import android.app.Instrumentation.ActivityResult; import android.app.Instrumentation.ActivityResult;
import android.content.Intent; import android.content.Intent;
import android.support.test.espresso.intent.rule.IntentsTestRule; import androidx.test.espresso.intent.rule.IntentsTestRule;
import org.junit.FixMethodOrder; import org.junit.FixMethodOrder;
import org.junit.Rule; import org.junit.Rule;
@ -30,26 +30,26 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.TemporaryFileProvider; import org.sufficientlysecure.keychain.provider.TemporaryFileProvider;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import static android.support.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu; import static androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu;
import static android.support.test.espresso.Espresso.pressBack; import static androidx.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.intent.Intents.intending; import static androidx.test.espresso.intent.Intents.intending;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasAction; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasData; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasData;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtra; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtraWithKey; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtraWithKey;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasFlags; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasFlags;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasType; import static androidx.test.espresso.intent.matcher.IntentMatchers.hasType;
import static android.support.test.espresso.intent.matcher.UriMatchers.hasHost; import static androidx.test.espresso.intent.matcher.UriMatchers.hasHost;
import static android.support.test.espresso.intent.matcher.UriMatchers.hasScheme; import static androidx.test.espresso.intent.matcher.UriMatchers.hasScheme;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar; import static org.sufficientlysecure.keychain.AndroidTestHelpers.checkSnackbar;

View file

@ -20,10 +20,10 @@ package org.sufficientlysecure.keychain.ui.widget;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.support.test.espresso.action.ViewActions; import androidx.test.espresso.action.ViewActions;
import android.support.test.espresso.matcher.RootMatchers; import androidx.test.espresso.matcher.RootMatchers;
import android.support.test.espresso.matcher.ViewMatchers; import androidx.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.widget.AdapterView; import android.widget.AdapterView;
@ -31,14 +31,14 @@ import org.junit.Rule;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.EncryptTextActivity; import org.sufficientlysecure.keychain.ui.EncryptTextActivity;
import static android.support.test.espresso.Espresso.onData; import static androidx.test.espresso.Espresso.onData;
import static android.support.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText; import static androidx.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.allOf;
import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource; import static org.sufficientlysecure.keychain.AndroidTestHelpers.importKeysFromResource;
import static org.sufficientlysecure.keychain.actions.CustomActions.tokenEncryptViewAddToken; import static org.sufficientlysecure.keychain.actions.CustomActions.tokenEncryptViewAddToken;

View file

@ -1,30 +0,0 @@
package android.support.design.widget;
import android.content.Context;
import android.support.v4.view.WindowInsetsCompat;
import android.util.AttributeSet;
public class FixedCollapsingToolbarLayout extends CollapsingToolbarLayout {
public FixedCollapsingToolbarLayout(Context context) {
this(context, null);
}
public FixedCollapsingToolbarLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// During the super call to onMeasure(), we'll save a copy of mLastInsets,
// consume the insets of mLastInsets so the super call has no insets to work with,
// then re-assign mLastInsets to what it was before the super call.
WindowInsetsCompat oldInsets = mLastInsets;
if (mLastInsets != null) {
mLastInsets = mLastInsets.consumeSystemWindowInsets();
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mLastInsets = oldInsets;
}
}

View file

@ -26,7 +26,7 @@ import android.accounts.AccountManager;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.widget.Toast; import android.widget.Toast;
import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider;
@ -106,7 +106,7 @@ public class KeychainApplication extends Application {
KeyserverSyncManager.updateKeyserverSyncScheduleAsync(this, false); KeyserverSyncManager.updateKeyserverSyncScheduleAsync(this, false);
TemporaryFileProvider.scheduleCleanupImmediately(); TemporaryFileProvider.scheduleCleanupImmediately(getApplicationContext());
analyticsManager = AnalyticsManager.getInstance(getApplicationContext()); analyticsManager = AnalyticsManager.getInstance(getApplicationContext());
analyticsManager.initialize(this); analyticsManager.initialize(this);

View file

@ -23,11 +23,11 @@ import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import android.arch.persistence.db.SupportSQLiteOpenHelper; import androidx.sqlite.db.SupportSQLiteOpenHelper;
import android.arch.persistence.db.SupportSQLiteOpenHelper.Callback; import androidx.sqlite.db.SupportSQLiteOpenHelper.Callback;
import android.arch.persistence.db.SupportSQLiteOpenHelper.Configuration; import androidx.sqlite.db.SupportSQLiteOpenHelper.Configuration;
import android.arch.persistence.db.framework.FrameworkSQLiteOpenHelperFactory; import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.database.SQLException; import android.database.SQLException;

View file

@ -6,8 +6,8 @@ import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.support.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import android.support.annotation.StringRes; import androidx.annotation.StringRes;
public class NotificationChannelManager { public class NotificationChannelManager {

View file

@ -19,11 +19,11 @@ package org.sufficientlysecure.keychain.compatibility;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.support.v7.app.ActionBar; import androidx.appcompat.app.ActionBar;
import android.support.v7.app.AppCompatDelegate; import androidx.appcompat.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View file

@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.compatibility;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import timber.log.Timber; import timber.log.Timber;

View file

@ -4,8 +4,8 @@ package org.sufficientlysecure.keychain.daos;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import android.arch.persistence.db.SupportSQLiteQuery; import androidx.sqlite.db.SupportSQLiteQuery;
import android.database.Cursor; import android.database.Cursor;
import com.squareup.sqldelight.RowMapper; import com.squareup.sqldelight.RowMapper;

View file

@ -24,7 +24,7 @@ import java.util.List;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.squareup.sqldelight.SqlDelightQuery; import com.squareup.sqldelight.SqlDelightQuery;
import org.sufficientlysecure.keychain.AutocryptPeersModel.DeleteByIdentifier; import org.sufficientlysecure.keychain.AutocryptPeersModel.DeleteByIdentifier;

View file

@ -3,7 +3,7 @@ package org.sufficientlysecure.keychain.daos;
import java.util.List; import java.util.List;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import org.sufficientlysecure.keychain.CertsModel.InsertCert; import org.sufficientlysecure.keychain.CertsModel.InsertCert;
import org.sufficientlysecure.keychain.KeyRingsPublicModel.InsertKeyRingPublic; import org.sufficientlysecure.keychain.KeyRingsPublicModel.InsertKeyRingPublic;

View file

@ -24,7 +24,7 @@ import java.util.List;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.support.annotation.WorkerThread; import androidx.annotation.WorkerThread;
import com.squareup.sqldelight.SqlDelightQuery; import com.squareup.sqldelight.SqlDelightQuery;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;

View file

@ -25,10 +25,10 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.util.LongSparseArray; import androidx.collection.LongSparseArray;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.KeyRingsPublicModel.DeleteByMasterKeyId; import org.sufficientlysecure.keychain.KeyRingsPublicModel.DeleteByMasterKeyId;

View file

@ -17,7 +17,7 @@
package org.sufficientlysecure.keychain.keyimport; package org.sufficientlysecure.keychain.keyimport;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;

View file

@ -26,8 +26,8 @@ import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;

View file

@ -22,8 +22,8 @@ import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;

View file

@ -18,7 +18,7 @@
package org.sufficientlysecure.keychain.keyimport; package org.sufficientlysecure.keychain.keyimport;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;

View file

@ -19,7 +19,7 @@ package org.sufficientlysecure.keychain.keyimport;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;

View file

@ -18,7 +18,7 @@
package org.sufficientlysecure.keychain.keyimport; package org.sufficientlysecure.keychain.keyimport;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;

View file

@ -18,8 +18,8 @@
package org.sufficientlysecure.keychain.keyimport.processing; package org.sufficientlysecure.keychain.keyimport.processing;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.support.v4.content.AsyncTaskLoader; import androidx.loader.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.keyimport.CloudSearch; import org.sufficientlysecure.keychain.keyimport.CloudSearch;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.keyimport.KeyserverClient; import org.sufficientlysecure.keychain.keyimport.KeyserverClient;

View file

@ -19,8 +19,8 @@ package org.sufficientlysecure.keychain.keyimport.processing;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.content.AsyncTaskLoader; import androidx.loader.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.operations.results.GetKeyResult; import org.sufficientlysecure.keychain.operations.results.GetKeyResult;

View file

@ -19,22 +19,22 @@ package org.sufficientlysecure.keychain.keysync;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import android.content.Context; import android.content.Context;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build.VERSION; import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.support.annotation.WorkerThread;
import androidx.annotation.WorkerThread;
import androidx.work.Constraints.Builder; import androidx.work.Constraints.Builder;
import androidx.work.NetworkType; import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest; import androidx.work.OneTimeWorkRequest;
import androidx.work.PeriodicWorkRequest; import androidx.work.PeriodicWorkRequest;
import androidx.work.State; import androidx.work.WorkInfo;
import androidx.work.SynchronousWorkManager; import androidx.work.WorkInfo.State;
import androidx.work.WorkManager; import androidx.work.WorkManager;
import androidx.work.WorkStatus;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber; import timber.log.Timber;
@ -58,30 +58,26 @@ public class KeyserverSyncManager {
@WorkerThread @WorkerThread
private static void updateKeyserverSyncSchedule(Context context, boolean forceReschedule) { private static void updateKeyserverSyncSchedule(Context context, boolean forceReschedule) {
Preferences prefs = Preferences.getPreferences(context); Preferences prefs = Preferences.getPreferences(context);
WorkManager workManager = WorkManager.getInstance(); WorkManager workManager = WorkManager.getInstance(context);
if (workManager == null) {
Timber.e("WorkManager unavailable!");
return;
}
SynchronousWorkManager synchronousWorkManager = workManager.synchronous();
if (synchronousWorkManager == null) {
Timber.e("WorkManager unavailable!");
return;
}
UUID workUuid = prefs.getKeyserverSyncWorkUuid(); UUID workUuid = prefs.getKeyserverSyncWorkUuid();
WorkStatus status = workUuid != null ? synchronousWorkManager.getStatusByIdSync(workUuid) : null; try {
boolean workIsScheduled = status != null && status.getState() != State.CANCELLED; WorkInfo info = workUuid != null ? workManager.getWorkInfoById(workUuid).get() : null;
if (workIsScheduled == prefs.isKeyserverSyncEnabled()) {
if (!forceReschedule) { boolean workIsScheduled = info != null && info.getState() != State.CANCELLED;
Timber.d("Key sync already scheduled, no changes necessary"); if (workIsScheduled == prefs.isKeyserverSyncEnabled()) {
return; if (!forceReschedule) {
Timber.d("Key sync already scheduled, no changes necessary");
return;
}
Timber.d("Key sync already scheduled, but forcing reschedule");
} }
Timber.d("Key sync already scheduled, but forcing reschedule"); } catch (ExecutionException | InterruptedException e) {
Timber.e(e, "Error getting info for scheduled key sync work?");
} }
Timber.d("Cancelling sync tasks…"); Timber.d("Cancelling sync tasks…");
synchronousWorkManager.cancelAllWorkByTagSync(PERIODIC_WORK_TAG); workManager.cancelAllWorkByTag(PERIODIC_WORK_TAG);
if (!prefs.isKeyserverSyncEnabled()) { if (!prefs.isKeyserverSyncEnabled()) {
Timber.d("Key sync disabled"); Timber.d("Key sync disabled");
@ -102,14 +98,17 @@ public class KeyserverSyncManager {
.setConstraints(constraints.build()) .setConstraints(constraints.build())
.addTag(PERIODIC_WORK_TAG) .addTag(PERIODIC_WORK_TAG)
.build(); .build();
synchronousWorkManager.enqueueSync(workRequest); try {
workManager.enqueue(workRequest).getResult().get();
Timber.d("Work id: %s", workRequest.getId()); Timber.d("Work id: %s", workRequest.getId());
prefs.setKeyserverSyncScheduled(workRequest.getId()); prefs.setKeyserverSyncScheduled(workRequest.getId());
} catch (InterruptedException | ExecutionException e) {
Timber.e(e, "Error enqueueing job!");
}
} }
public static void debugRunSyncNow() { public static void debugRunSyncNow(Context context) {
WorkManager workManager = WorkManager.getInstance(); WorkManager workManager = WorkManager.getInstance(context);
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(KeyserverSyncWorker.class).build(); OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(KeyserverSyncWorker.class).build();
workManager.enqueue(workRequest); workManager.enqueue(workRequest);
} }

View file

@ -5,11 +5,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationCompat.Builder;
import androidx.work.Worker; import androidx.work.Worker;
import androidx.work.WorkerParameters;
import org.sufficientlysecure.keychain.Constants.NotificationIds; import org.sufficientlysecure.keychain.Constants.NotificationIds;
import org.sufficientlysecure.keychain.NotificationChannelManager; import org.sufficientlysecure.keychain.NotificationChannelManager;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
@ -28,9 +29,13 @@ import timber.log.Timber;
public class KeyserverSyncWorker extends Worker { public class KeyserverSyncWorker extends Worker {
private AtomicBoolean cancellationSignal = new AtomicBoolean(false); private AtomicBoolean cancellationSignal = new AtomicBoolean(false);
public KeyserverSyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull @NonNull
@Override @Override
public WorkerResult doWork() { public Result doWork() {
KeyWritableRepository keyWritableRepository = KeyWritableRepository.create(getApplicationContext()); KeyWritableRepository keyWritableRepository = KeyWritableRepository.create(getApplicationContext());
Timber.d("Starting key sync…"); Timber.d("Starting key sync…");
@ -47,7 +52,7 @@ public class KeyserverSyncWorker extends Worker {
* @param result * @param result
* result of keyserver sync * result of keyserver sync
*/ */
private WorkerResult handleUpdateResult(ImportKeyResult result) { private Result handleUpdateResult(ImportKeyResult result) {
if (result.isPending()) { if (result.isPending()) {
Timber.d("Orbot required for sync but not running, attempting to start"); Timber.d("Orbot required for sync but not running, attempting to start");
// result is pending due to Orbot not being started // result is pending due to Orbot not being started
@ -62,13 +67,13 @@ public class KeyserverSyncWorker extends Worker {
OrbotRequiredDialogActivity.showOrbotRequiredNotification(getApplicationContext()); OrbotRequiredDialogActivity.showOrbotRequiredNotification(getApplicationContext());
} }
}.startOrbotAndListen(getApplicationContext(), false); }.startOrbotAndListen(getApplicationContext(), false);
return WorkerResult.RETRY; return Result.retry();
} else if (isStopped()) { } else if (isStopped()) {
Timber.d("Keyserver sync cancelled"); Timber.d("Keyserver sync cancelled");
return WorkerResult.FAILURE; return Result.failure();
} else { } else {
Timber.d("Keyserver sync completed: Updated: %d, Failed: %d", result.mUpdatedKeys, result.mBadKeys); Timber.d("Keyserver sync completed: Updated: %d, Failed: %d", result.mUpdatedKeys, result.mBadKeys);
return WorkerResult.SUCCESS; return Result.success();
} }
} }

View file

@ -3,7 +3,7 @@ package org.sufficientlysecure.keychain.model;
import java.util.Date; import java.util.Date;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.CertsModel; import org.sufficientlysecure.keychain.CertsModel;

View file

@ -3,7 +3,7 @@ package org.sufficientlysecure.keychain.model;
import java.util.Date; import java.util.Date;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import com.squareup.sqldelight.ColumnAdapter; import com.squareup.sqldelight.ColumnAdapter;
import org.sufficientlysecure.keychain.model.AutocryptPeer.GossipOrigin; import org.sufficientlysecure.keychain.model.AutocryptPeer.GossipOrigin;

View file

@ -1,11 +1,10 @@
package org.sufficientlysecure.keychain.model; package org.sufficientlysecure.keychain.model;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.KeyRingsPublicModel; import org.sufficientlysecure.keychain.KeyRingsPublicModel;
import org.sufficientlysecure.keychain.KeysModel.InsertKey;
@AutoValue @AutoValue

View file

@ -1,7 +1,7 @@
package org.sufficientlysecure.keychain.model; package org.sufficientlysecure.keychain.model;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.KeySignaturesModel; import org.sufficientlysecure.keychain.KeySignaturesModel;

View file

@ -6,7 +6,7 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import com.squareup.sqldelight.RowMapper; import com.squareup.sqldelight.RowMapper;

View file

@ -1,8 +1,8 @@
package org.sufficientlysecure.keychain.model; package org.sufficientlysecure.keychain.model;
import android.arch.persistence.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.UserPacketsModel; import org.sufficientlysecure.keychain.UserPacketsModel;

View file

@ -41,8 +41,8 @@ import java.util.Set;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.support.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLHandshakeException;

View file

@ -21,8 +21,8 @@ import java.net.URISyntaxException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.bouncycastle.util.encoders.DecoderException; import org.bouncycastle.util.encoders.DecoderException;

View file

@ -6,7 +6,7 @@ import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.support.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;

View file

@ -61,8 +61,8 @@ import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.text.TextUtils; import android.text.TextUtils;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;

View file

@ -32,8 +32,8 @@ import java.util.regex.Pattern;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;

View file

@ -22,8 +22,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.StringRes; import androidx.annotation.StringRes;
import org.sufficientlysecure.keychain.Constants.key; import org.sufficientlysecure.keychain.Constants.key;
import org.sufficientlysecure.keychain.daos.KeyRepository; import org.sufficientlysecure.keychain.daos.KeyRepository;

View file

@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.operations;
import java.util.Random; import java.util.Random;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.bouncycastle.bcpg.HashAlgorithmTags; import org.bouncycastle.bcpg.HashAlgorithmTags;
import org.bouncycastle.bcpg.S2K; import org.bouncycastle.bcpg.S2K;

View file

@ -22,7 +22,7 @@ import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.daos.KeyMetadataDao; import org.sufficientlysecure.keychain.daos.KeyMetadataDao;
import org.sufficientlysecure.keychain.daos.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.daos.KeyRepository.NotFoundException;

View file

@ -18,7 +18,7 @@
package org.sufficientlysecure.keychain.operations; package org.sufficientlysecure.keychain.operations;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.EditKeyResult;

View file

@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.operations;
import java.util.Collections; import java.util.Collections;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.DeleteResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;

View file

@ -22,7 +22,7 @@ import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.daos.KeyMetadataDao; import org.sufficientlysecure.keychain.daos.KeyMetadataDao;

View file

@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.daos.KeyMetadataDao; import org.sufficientlysecure.keychain.daos.KeyMetadataDao;

View file

@ -28,7 +28,7 @@ import java.util.ArrayList;
import android.content.ClipDescription; import android.content.ClipDescription;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;

View file

@ -8,7 +8,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.daos.KeyMetadataDao; import org.sufficientlysecure.keychain.daos.KeyMetadataDao;

View file

@ -23,7 +23,7 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.daos.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.daos.KeyRepository.NotFoundException;

View file

@ -19,7 +19,7 @@ package org.sufficientlysecure.keychain.operations;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;
import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.EditKeyResult;

View file

@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.daos.KeyRepository; import org.sufficientlysecure.keychain.daos.KeyRepository;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;

View file

@ -24,8 +24,8 @@ import java.net.Proxy;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;

View file

@ -20,7 +20,7 @@ package org.sufficientlysecure.keychain.operations.results;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Parcel; import android.os.Parcel;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;

View file

@ -22,7 +22,7 @@ import java.util.ArrayList;
import android.net.Uri; import android.net.Uri;
import android.os.Parcel; import android.os.Parcel;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.openintents.openpgp.OpenPgpMetadata; import org.openintents.openpgp.OpenPgpMetadata;

View file

@ -18,7 +18,7 @@
package org.sufficientlysecure.keychain.operations.results; package org.sufficientlysecure.keychain.operations.results;
import android.os.Parcel; import android.os.Parcel;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;

View file

@ -22,7 +22,7 @@ import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.LogDisplayActivity; import org.sufficientlysecure.keychain.ui.LogDisplayActivity;
import org.sufficientlysecure.keychain.ui.LogDisplayFragment; import org.sufficientlysecure.keychain.ui.LogDisplayFragment;

View file

@ -21,7 +21,7 @@ import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;

View file

@ -18,7 +18,7 @@
package org.sufficientlysecure.keychain.operations.results; package org.sufficientlysecure.keychain.operations.results;
import android.os.Parcel; import android.os.Parcel;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;

View file

@ -24,7 +24,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.bouncycastle.openpgp.PGPObjectFactory; import org.bouncycastle.openpgp.PGPObjectFactory;
import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKey;

View file

@ -23,7 +23,7 @@ import java.util.List;
import android.net.Uri; import android.net.Uri;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;

View file

@ -33,7 +33,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;

View file

@ -21,10 +21,10 @@ package org.sufficientlysecure.keychain.pgp;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import android.support.annotation.CheckResult; import androidx.annotation.CheckResult;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.support.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import android.text.TextUtils; import android.text.TextUtils;
import timber.log.Timber; import timber.log.Timber;

View file

@ -35,7 +35,7 @@ import java.util.List;
import java.util.Stack; import java.util.Stack;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.nist.NISTNamedCurves; import org.bouncycastle.asn1.nist.NISTNamedCurves;

View file

@ -21,7 +21,7 @@ package org.sufficientlysecure.keychain.pgp;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.bouncycastle.asn1.nist.NISTNamedCurves; import org.bouncycastle.asn1.nist.NISTNamedCurves;
import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;

View file

@ -24,7 +24,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;

View file

@ -20,7 +20,7 @@ package org.sufficientlysecure.keychain.pgp;
import android.net.Uri; import android.net.Uri;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;

View file

@ -37,7 +37,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.bouncycastle.bcpg.BCPGOutputStream; import org.bouncycastle.bcpg.BCPGOutputStream;

View file

@ -19,7 +19,7 @@ package org.sufficientlysecure.keychain.pgp;
import android.net.Uri; import android.net.Uri;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;

View file

@ -36,7 +36,7 @@ import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.TreeSet; import java.util.TreeSet;
import android.support.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.bouncycastle.bcpg.PublicKeyAlgorithmTags; import org.bouncycastle.bcpg.PublicKeyAlgorithmTags;

View file

@ -5,8 +5,8 @@ import android.content.ContentProvider;
import android.content.ContentValues; import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
public class KeychainProvider extends ContentProvider { public class KeychainProvider extends ContentProvider {

View file

@ -38,11 +38,12 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri; import android.net.Uri;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.work.OneTimeWorkRequest; import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager; import androidx.work.WorkManager;
import androidx.work.Worker; import androidx.work.Worker;
import androidx.work.WorkerParameters;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.DatabaseUtil; import org.sufficientlysecure.keychain.util.DatabaseUtil;
import timber.log.Timber; import timber.log.Timber;
@ -314,18 +315,21 @@ public class TemporaryFileProvider extends ContentProvider {
WorkManager.getInstance().enqueue(cleanupWork); WorkManager.getInstance().enqueue(cleanupWork);
} }
public static void scheduleCleanupImmediately() { public static void scheduleCleanupImmediately(Context context) {
OneTimeWorkRequest cleanupWork = new OneTimeWorkRequest.Builder(CleanupWorker.class).build(); OneTimeWorkRequest cleanupWork = new OneTimeWorkRequest.Builder(CleanupWorker.class).build();
WorkManager workManager = WorkManager.getInstance(); WorkManager workManager = WorkManager.getInstance(context);
if (workManager != null) { // it's possible this is null, if this is called in onCreate of secondary processes workManager.enqueue(cleanupWork);
workManager.enqueue(cleanupWork);
}
} }
public static class CleanupWorker extends Worker { public static class CleanupWorker extends Worker {
public CleanupWorker(@NonNull Context context,
@NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull @NonNull
@Override @Override
public WorkerResult doWork() { public Result doWork() {
Timber.d("Cleaning up temporary files…"); Timber.d("Cleaning up temporary files…");
ContentResolver contentResolver = getApplicationContext().getContentResolver(); ContentResolver contentResolver = getApplicationContext().getContentResolver();
@ -335,7 +339,7 @@ public class TemporaryFileProvider extends ContentProvider {
new String[]{Long.toString(System.currentTimeMillis() - Constants.TEMPFILE_TTL)} new String[]{Long.toString(System.currentTimeMillis() - Constants.TEMPFILE_TTL)}
); );
return WorkerResult.SUCCESS; return Result.success();
} }
} }
} }

View file

@ -2,15 +2,13 @@ package org.sufficientlysecure.keychain.remote;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import org.openintents.openpgp.AutocryptPeerUpdate; import org.openintents.openpgp.AutocryptPeerUpdate;

View file

@ -31,7 +31,7 @@ import android.content.UriMatcher;
import android.database.Cursor; import android.database.Cursor;
import android.database.MatrixCursor; import android.database.MatrixCursor;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.widget.Toast; import android.widget.Toast;
import org.sufficientlysecure.keychain.BuildConfig; import org.sufficientlysecure.keychain.BuildConfig;

View file

@ -38,8 +38,8 @@ import android.os.Messenger;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;

View file

@ -27,8 +27,8 @@ import android.content.ContentResolver;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.provider.KeychainExternalContract; import org.sufficientlysecure.keychain.provider.KeychainExternalContract;

View file

@ -27,7 +27,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.ImageView; import android.widget.ImageView;

View file

@ -21,10 +21,10 @@ package org.sufficientlysecure.keychain.remote.ui;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;

View file

@ -20,19 +20,19 @@ package org.sufficientlysecure.keychain.remote.ui;
import java.util.List; import java.util.List;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.Adapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View file

@ -19,8 +19,8 @@ package org.sufficientlysecure.keychain.remote.ui;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import androidx.fragment.app.Fragment;
import android.support.v4.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.remote.CryptoInputParcelCacheService; import org.sufficientlysecure.keychain.remote.CryptoInputParcelCacheService;

View file

@ -25,9 +25,9 @@ import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -25,9 +25,9 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -27,10 +27,10 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.annotation.StringRes; import androidx.annotation.StringRes;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -25,9 +25,9 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -23,7 +23,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable; import androidx.annotation.Nullable;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;

View file

@ -24,11 +24,11 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;

View file

@ -21,11 +21,11 @@ package org.sufficientlysecure.keychain.remote.ui;
import java.util.List; import java.util.List;
import android.app.Activity; import android.app.Activity;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View file

@ -5,9 +5,9 @@ import java.util.List;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.Adapter;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View file

@ -23,19 +23,19 @@ import java.util.List;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.Adapter;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -20,9 +20,9 @@ package org.sufficientlysecure.keychain.remote.ui.dialog;
import java.util.List; import java.util.List;
import android.arch.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import android.content.Context; import android.content.Context;
import android.support.v7.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.Adapter;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;

View file

@ -23,9 +23,9 @@ import java.util.List;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
@ -33,13 +33,13 @@ import android.content.res.Resources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable.ConstantState; import android.graphics.drawable.Drawable.ConstantState;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.support.v4.content.res.ResourcesCompat; import androidx.core.content.res.ResourcesCompat;
import android.support.v4.graphics.drawable.DrawableCompat; import androidx.core.graphics.drawable.DrawableCompat;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View file

@ -20,7 +20,7 @@ package org.sufficientlysecure.keychain.remote.ui.dialog;
import java.util.List; import java.util.List;
import android.arch.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;

View file

@ -23,9 +23,9 @@ import java.util.List;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.arch.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import android.arch.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
@ -34,17 +34,17 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable.ConstantState; import android.graphics.drawable.Drawable.ConstantState;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import androidx.annotation.NonNull;
import android.support.transition.Fade; import androidx.transition.Fade;
import android.support.transition.Transition; import androidx.transition.Transition;
import android.support.transition.TransitionListenerAdapter; import androidx.transition.TransitionListenerAdapter;
import android.support.transition.TransitionManager; import androidx.transition.TransitionManager;
import android.support.v4.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import android.support.v4.content.res.ResourcesCompat; import androidx.core.content.res.ResourcesCompat;
import android.support.v4.graphics.drawable.DrawableCompat; import androidx.core.graphics.drawable.DrawableCompat;
import android.support.v7.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

Some files were not shown because too many files have changed in this diff Show more