Fix more lint (#325)
* fix/ignore lint errors, run lint on travis * fix/ignore some lint warnings
This commit is contained in:
parent
37329a67f7
commit
e169235d96
42 changed files with 152 additions and 163 deletions
25
.travis.yml
25
.travis.yml
|
@ -1,18 +1,5 @@
|
|||
language: android
|
||||
jdk: oraclejdk8
|
||||
android:
|
||||
components:
|
||||
- platform-tools
|
||||
- tools
|
||||
- build-tools-23.0.3
|
||||
- build-tools-24.0.2
|
||||
- build-tools-25.0.2
|
||||
- build-tools-25.0.3
|
||||
- android-23
|
||||
- android-24
|
||||
- android-25
|
||||
- extra-google-m2repository
|
||||
- extra-android-m2repository
|
||||
|
||||
licenses:
|
||||
- 'android-sdk-preview-license-.+'
|
||||
|
@ -26,7 +13,15 @@ cache:
|
|||
# ok no tests for now
|
||||
# - sys-img-x86-android-22
|
||||
|
||||
before_script:
|
||||
install:
|
||||
- echo y | android update sdk -u -a -t tools
|
||||
- echo y | android update sdk -u -a -t platform-tools
|
||||
- echo y | android update sdk -u -a -t build-tools-25.0.3
|
||||
- echo y | android update sdk -u -a -t android-25
|
||||
- echo y | android update sdk -u -a -t extra-google-m2repository
|
||||
- echo y | android update sdk -u -a -t extra-android-m2repository
|
||||
|
||||
env:
|
||||
- GRADLE_OPTS="-Xms40m -Xmx3g -XX:MaxPermSize=3g"
|
||||
|
||||
script: "./gradlew clean build test -Dpre-dex=false"
|
||||
script: "./gradlew clean build test lintDebug -Dpre-dex=false"
|
||||
|
|
|
@ -15,9 +15,9 @@ android {
|
|||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
// avoid Travis failures
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
abortOnError true // make sure build failes with lint errors!
|
||||
disable 'MissingTranslation', 'PluralsCandidate'
|
||||
}
|
||||
packagingOptions {
|
||||
exclude '.readme'
|
||||
|
|
|
@ -55,7 +55,6 @@ public class GitActivityTest extends ActivityInstrumentationTestCase2<GitActivit
|
|||
|
||||
/**
|
||||
* If we change from ssh protocol to https we automatically switch to username/password auth
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testSpinnerChange() throws Exception{
|
||||
gitActivity.runOnUiThread(new Runnable() {
|
||||
|
|
|
@ -8,9 +8,6 @@ import android.preference.PreferenceManager;
|
|||
import android.test.ActivityInstrumentationTestCase2;
|
||||
|
||||
public class RepositoryCreation extends ActivityInstrumentationTestCase2<PasswordStore> {
|
||||
private Activity passwordStore;
|
||||
Instrumentation mInstrumentation;
|
||||
SharedPreferences settings;
|
||||
|
||||
public RepositoryCreation() {
|
||||
super(PasswordStore.class);
|
||||
|
@ -18,19 +15,18 @@ public class RepositoryCreation extends ActivityInstrumentationTestCase2<Passwor
|
|||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
mInstrumentation = getInstrumentation();
|
||||
Instrumentation mInstrumentation = getInstrumentation();
|
||||
Intent intent = new Intent();
|
||||
setActivityIntent(intent);
|
||||
|
||||
passwordStore = getActivity(); // get a references to the app under test
|
||||
Activity passwordStore = getActivity();
|
||||
assertNotNull(passwordStore);
|
||||
settings = PreferenceManager.getDefaultSharedPreferences(passwordStore.getApplicationContext());
|
||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(passwordStore.getApplicationContext());
|
||||
settings.edit().clear().apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* If we change from ssh protocol to https we automatically switch to username/password auth
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testSpinnerChange() throws Exception{
|
||||
}
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.zeapo.pwdstore">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.zeapo.pwdstore">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
|
||||
<application android:allowBackup="true" android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name" android:theme="@style/AppTheme">
|
||||
<application android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme"
|
||||
android:supportsRtl="true">
|
||||
<activity android:name=".PasswordStore" android:label="@string/app_name"
|
||||
android:configChanges="orientation|screenSize">
|
||||
<intent-filter>
|
||||
|
@ -57,7 +61,8 @@
|
|||
<activity android:name=".autofill.AutofillActivity"
|
||||
android:parentActivityName=".PasswordStore"
|
||||
android:documentLaunchMode="intoExisting"
|
||||
android:excludeFromRecents="true">
|
||||
android:excludeFromRecents="true"
|
||||
tools:ignore="UnusedAttribute">
|
||||
|
||||
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="com.zeapo.pwdstore.PasswordStore" />
|
||||
|
|
|
@ -8,7 +8,7 @@ import android.support.v4.content.ContextCompat;
|
|||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
|
||||
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
|
||||
class DividerItemDecoration extends RecyclerView.ItemDecoration {
|
||||
|
||||
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
|
||||
|
||||
|
@ -26,7 +26,7 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration {
|
|||
/**
|
||||
* Custom divider will be used
|
||||
*/
|
||||
public DividerItemDecoration(Context context, int resId) {
|
||||
DividerItemDecoration(Context context, int resId) {
|
||||
mDivider = ContextCompat.getDrawable(context, resId);
|
||||
}
|
||||
|
||||
|
|
|
@ -294,7 +294,7 @@ public class PasswordStore extends AppCompatActivity {
|
|||
checkLocalRepository();
|
||||
}
|
||||
|
||||
public void initializeRepositoryInfo() {
|
||||
private void initializeRepositoryInfo() {
|
||||
if (settings.getBoolean("git_external", false) && settings.getString("git_external_repo", null) != null) {
|
||||
File dir = new File(settings.getString("git_external_repo", null));
|
||||
|
||||
|
@ -521,13 +521,13 @@ public class PasswordStore extends AppCompatActivity {
|
|||
/**
|
||||
* Updates the adapter with the current view of passwords
|
||||
*/
|
||||
public void refreshListAdapter() {
|
||||
private void refreshListAdapter() {
|
||||
if ((null != plist)) {
|
||||
plist.refreshAdapter();
|
||||
}
|
||||
}
|
||||
|
||||
public void filterListAdapter(String filter) {
|
||||
private void filterListAdapter(String filter) {
|
||||
if ((null != plist)) {
|
||||
plist.filterAdapter(filter);
|
||||
}
|
||||
|
@ -643,7 +643,7 @@ public class PasswordStore extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
|
||||
protected void initRepository(final int operation) {
|
||||
private void initRepository(final int operation) {
|
||||
PasswordRepository.closeRepository();
|
||||
|
||||
new AlertDialog.Builder(this)
|
||||
|
|
|
@ -285,7 +285,7 @@ public class UserPreference extends AppCompatActivity {
|
|||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
public void selectExternalGitRepository() {
|
||||
private void selectExternalGitRepository() {
|
||||
final Activity activity = this;
|
||||
new AlertDialog.Builder(this).
|
||||
setTitle("Choose where to store the passwords").
|
||||
|
@ -332,7 +332,7 @@ public class UserPreference extends AppCompatActivity {
|
|||
/**
|
||||
* Opens a file explorer to import the private key
|
||||
*/
|
||||
public void getSshKeyWithPermissions(boolean useDefaultPicker) {
|
||||
private void getSshKeyWithPermissions(boolean useDefaultPicker) {
|
||||
final Activity activity = this;
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
|
@ -362,7 +362,7 @@ public class UserPreference extends AppCompatActivity {
|
|||
/**
|
||||
* Opens a file explorer to import the private key
|
||||
*/
|
||||
public void getSshKey(boolean useDefaultPicker) {
|
||||
private void getSshKey(boolean useDefaultPicker) {
|
||||
if (useDefaultPicker) {
|
||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
intent.setType("*/*");
|
||||
|
@ -382,7 +382,7 @@ public class UserPreference extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
|
||||
public void exportPasswordsWithPermissions() {
|
||||
private void exportPasswordsWithPermissions() {
|
||||
final Activity activity = this;
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
|
@ -421,7 +421,7 @@ public class UserPreference extends AppCompatActivity {
|
|||
/**
|
||||
* Opens a key generator to generate a public/private key pair
|
||||
*/
|
||||
public void makeSshKey(boolean fromPreferences) {
|
||||
private void makeSshKey(boolean fromPreferences) {
|
||||
Intent intent = new Intent(getApplicationContext(), SshKeyGen.class);
|
||||
startActivity(intent);
|
||||
if (!fromPreferences) {
|
||||
|
|
|
@ -18,23 +18,23 @@ import com.zeapo.pwdstore.R;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecyclerAdapter.ViewHolder> {
|
||||
class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecyclerAdapter.ViewHolder> {
|
||||
|
||||
private SortedList<AppInfo> apps;
|
||||
private ArrayList<AppInfo> allApps; // for filtering, maintain a list of all
|
||||
private AutofillPreferenceActivity activity;
|
||||
Drawable browserIcon = null;
|
||||
private Drawable browserIcon = null;
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||
public View view;
|
||||
public TextView name;
|
||||
public TextView secondary;
|
||||
TextView secondary;
|
||||
public ImageView icon;
|
||||
public String packageName;
|
||||
public String appName;
|
||||
public Boolean isWeb;
|
||||
String packageName;
|
||||
String appName;
|
||||
Boolean isWeb;
|
||||
|
||||
public ViewHolder(View view) {
|
||||
ViewHolder(View view) {
|
||||
super(view);
|
||||
this.view = view;
|
||||
name = (TextView) view.findViewById(R.id.app_name);
|
||||
|
@ -50,13 +50,13 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
|
|||
|
||||
}
|
||||
|
||||
public static class AppInfo {
|
||||
public String packageName;
|
||||
public String appName;
|
||||
public boolean isWeb;
|
||||
static class AppInfo {
|
||||
String packageName;
|
||||
String appName;
|
||||
boolean isWeb;
|
||||
public Drawable icon;
|
||||
|
||||
public AppInfo(String packageName, String appName, boolean isWeb, Drawable icon) {
|
||||
AppInfo(String packageName, String appName, boolean isWeb, Drawable icon) {
|
||||
this.packageName = packageName;
|
||||
this.appName = appName;
|
||||
this.isWeb = isWeb;
|
||||
|
@ -69,7 +69,7 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
|
|||
}
|
||||
}
|
||||
|
||||
public AutofillRecyclerAdapter(List<AppInfo> allApps, final PackageManager pm
|
||||
AutofillRecyclerAdapter(List<AppInfo> allApps, final PackageManager pm
|
||||
, AutofillPreferenceActivity activity) {
|
||||
SortedList.Callback<AppInfo> callback = new SortedListAdapterCallback<AppInfo>(this) {
|
||||
// don't take into account secondary text. This is good enough
|
||||
|
@ -92,7 +92,6 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
|
|||
this.apps = new SortedList<>(AppInfo.class, callback);
|
||||
this.apps.addAll(allApps);
|
||||
this.allApps = new ArrayList<>(allApps);
|
||||
PackageManager pm1 = pm;
|
||||
this.activity = activity;
|
||||
try {
|
||||
browserIcon = activity.getPackageManager().getApplicationIcon("com.android.browser");
|
||||
|
@ -155,28 +154,28 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
|
|||
return apps.size();
|
||||
}
|
||||
|
||||
public int getPosition(String appName) {
|
||||
int getPosition(String appName) {
|
||||
return apps.indexOf(new AppInfo(null, appName, false, null));
|
||||
}
|
||||
|
||||
// for websites, URL = packageName == appName
|
||||
public void addWebsite(String packageName) {
|
||||
void addWebsite(String packageName) {
|
||||
apps.add(new AppInfo(packageName, packageName, true, browserIcon));
|
||||
allApps.add(new AppInfo(packageName, packageName, true, browserIcon));
|
||||
}
|
||||
|
||||
public void removeWebsite(String packageName) {
|
||||
void removeWebsite(String packageName) {
|
||||
apps.remove(new AppInfo(null, packageName, false, null));
|
||||
allApps.remove(new AppInfo(null, packageName, false, null)); // compare with equals
|
||||
}
|
||||
|
||||
public void updateWebsite(String oldPackageName, String packageName) {
|
||||
void updateWebsite(String oldPackageName, String packageName) {
|
||||
apps.updateItemAt(getPosition(oldPackageName), new AppInfo (packageName, packageName, true, browserIcon));
|
||||
allApps.remove(new AppInfo(null, oldPackageName, false, null)); // compare with equals
|
||||
allApps.add(new AppInfo(null, packageName, false, null));
|
||||
}
|
||||
|
||||
public void filter(String s) {
|
||||
void filter(String s) {
|
||||
if (s.isEmpty()) {
|
||||
apps.addAll(allApps);
|
||||
return;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.zeapo.pwdstore.crypto;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.DialogFragment;
|
||||
import android.app.PendingIntent;
|
||||
|
@ -666,8 +667,6 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne
|
|||
|
||||
/**
|
||||
* Encrypts a password file
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void encrypt(Intent data) {
|
||||
data.setAction(OpenPgpApi.ACTION_ENCRYPT);
|
||||
|
@ -730,6 +729,7 @@ public class PgpHandler extends AppCompatActivity implements OpenPgpServiceConne
|
|||
}
|
||||
|
||||
// TODO (low priority but still...) android M potential permissions crashes
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public void onBound(IOpenPgpService2 service) {
|
||||
Log.i("PGP", "ISBOUND!!");
|
||||
|
|
|
@ -456,8 +456,6 @@ public class GitActivity extends AppCompatActivity {
|
|||
|
||||
/**
|
||||
* Save the repository information to the shared preferences settings
|
||||
*
|
||||
* @param view
|
||||
*/
|
||||
public void saveConfiguration(View view) {
|
||||
if (!saveConfiguration())
|
||||
|
@ -500,8 +498,6 @@ public class GitActivity extends AppCompatActivity {
|
|||
|
||||
/**
|
||||
* Clones the repository, the directory exists, deletes it
|
||||
*
|
||||
* @param view
|
||||
*/
|
||||
public void cloneRepository(View view) {
|
||||
if (PasswordRepository.getRepository(null) == null) {
|
||||
|
|
|
@ -30,9 +30,9 @@ public abstract class GitOperation {
|
|||
public static final int GET_SSH_KEY_FROM_CLONE = 201;
|
||||
|
||||
protected final Repository repository;
|
||||
protected final Activity callingActivity;
|
||||
protected UsernamePasswordCredentialsProvider provider;
|
||||
protected GitCommand command;
|
||||
final Activity callingActivity;
|
||||
UsernamePasswordCredentialsProvider provider;
|
||||
GitCommand command;
|
||||
|
||||
/**
|
||||
* Creates a new git operation
|
||||
|
@ -52,7 +52,7 @@ public abstract class GitOperation {
|
|||
* @param password the password
|
||||
* @return the current object
|
||||
*/
|
||||
public GitOperation setAuthentication(String username, String password) {
|
||||
GitOperation setAuthentication(String username, String password) {
|
||||
SshSessionFactory.setInstance(new GitConfigSessionFactory());
|
||||
this.provider = new UsernamePasswordCredentialsProvider(username, password);
|
||||
return this;
|
||||
|
@ -66,7 +66,7 @@ public abstract class GitOperation {
|
|||
* @param passphrase the passphrase
|
||||
* @return the current object
|
||||
*/
|
||||
public GitOperation setAuthentication(File sshKey, String username, String passphrase) {
|
||||
GitOperation setAuthentication(File sshKey, String username, String passphrase) {
|
||||
JschConfigSessionFactory sessionFactory = new SshConfigSessionFactory(sshKey.getAbsolutePath(), username, passphrase);
|
||||
SshSessionFactory.setInstance(sessionFactory);
|
||||
this.provider = null;
|
||||
|
|
|
@ -16,11 +16,11 @@ import org.eclipse.jgit.api.StatusCommand;
|
|||
import java.io.File;
|
||||
|
||||
public class SyncOperation extends GitOperation {
|
||||
protected AddCommand addCommand;
|
||||
protected StatusCommand statusCommand;
|
||||
protected CommitCommand commitCommand;
|
||||
protected PullCommand pullCommand;
|
||||
protected PushCommand pushCommand;
|
||||
private AddCommand addCommand;
|
||||
private StatusCommand statusCommand;
|
||||
private CommitCommand commitCommand;
|
||||
private PullCommand pullCommand;
|
||||
private PushCommand pushCommand;
|
||||
|
||||
/**
|
||||
* Creates a new git operation
|
||||
|
|
|
@ -185,16 +185,12 @@ public final class PRNGFixes {
|
|||
/**
|
||||
* Input stream for reading from Linux PRNG or {@code null} if not yet
|
||||
* opened.
|
||||
*
|
||||
* @GuardedBy("sLock")
|
||||
*/
|
||||
private static DataInputStream sUrandomIn;
|
||||
|
||||
/**
|
||||
* Output stream for writing to Linux PRNG or {@code null} if not yet
|
||||
* opened.
|
||||
*
|
||||
* @GuardedBy("sLock")
|
||||
*/
|
||||
private static OutputStream sUrandomOut;
|
||||
|
||||
|
@ -224,6 +220,7 @@ public final class PRNGFixes {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
|
||||
@Override
|
||||
protected void engineNextBytes(byte[] bytes) {
|
||||
if (!mSeeded) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.zeapo.pwdstore.pwgen;
|
||||
|
||||
public class pw_phonemes {
|
||||
class pw_phonemes {
|
||||
private static final int CONSONANT = 0x0001;
|
||||
private static final int VOWEL = 0x0002;
|
||||
private static final int DIPTHONG = 0x0004;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.zeapo.pwdstore.pwgen;
|
||||
|
||||
public class pw_rand {
|
||||
class pw_rand {
|
||||
|
||||
/**
|
||||
* Generates a completely random password.
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.zeapo.pwdstore.pwgen;
|
|||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
public class randnum {
|
||||
class randnum {
|
||||
private static SecureRandom random;
|
||||
|
||||
static {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.zeapo.pwdstore;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
|
@ -30,6 +31,7 @@ public class pwgenDialogFragment extends DialogFragment {
|
|||
}
|
||||
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.zeapo.pwdstore.utils;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.graphics.Color;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -83,7 +84,7 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec
|
|||
}
|
||||
|
||||
@NonNull
|
||||
protected View.OnLongClickListener getOnLongClickListener(ViewHolder holder, PasswordItem pass) {
|
||||
View.OnLongClickListener getOnLongClickListener(ViewHolder holder, PasswordItem pass) {
|
||||
return new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
|
@ -93,6 +94,7 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec
|
|||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||
final PasswordItem pass = getValues().get(position);
|
||||
|
@ -118,7 +120,7 @@ public abstract class EntryRecyclerAdapter extends RecyclerView.Adapter<EntryRec
|
|||
holder.itemView.setBackgroundResource(R.color.deep_orange_200);
|
||||
holder.type.setTextColor(Color.BLACK);
|
||||
} else {
|
||||
holder.itemView.setBackgroundResource(Color.alpha(1));
|
||||
holder.itemView.setBackgroundColor(Color.alpha(1));
|
||||
holder.type.setTextColor(ContextCompat.getColor(activity, R.color.grey_500));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,11 +18,8 @@ public class PasswordItem implements Comparable{
|
|||
/** Create a password item
|
||||
*
|
||||
* Make it protected so that we use a builder
|
||||
* @param name
|
||||
* @param parent
|
||||
* @param type
|
||||
*/
|
||||
protected PasswordItem(String name, PasswordItem parent, char type, File file, File rootDir) {
|
||||
private PasswordItem(String name, PasswordItem parent, char type, File file, File rootDir) {
|
||||
this.name = name;
|
||||
this.parent = parent;
|
||||
this.type = type;
|
||||
|
@ -31,38 +28,24 @@ public class PasswordItem implements Comparable{
|
|||
}
|
||||
|
||||
/** Create a new Category item
|
||||
*
|
||||
* @param name
|
||||
* @param parent
|
||||
* @return
|
||||
*/
|
||||
public static PasswordItem newCategory(String name, File file, PasswordItem parent, File rootDir) {
|
||||
return new PasswordItem(name, parent, TYPE_CATEGORY, file, rootDir);
|
||||
}
|
||||
|
||||
/** Create a new parentless category item
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static PasswordItem newCategory(String name, File file, File rootDir) {
|
||||
return new PasswordItem(name, null, TYPE_CATEGORY, file, rootDir);
|
||||
}
|
||||
|
||||
/** Create a new password item
|
||||
*
|
||||
* @param name
|
||||
* @param parent
|
||||
* @return
|
||||
*/
|
||||
public static PasswordItem newPassword(String name, File file, PasswordItem parent, File rootDir) {
|
||||
return new PasswordItem(name, parent, TYPE_PASSWORD, file, rootDir);
|
||||
}
|
||||
|
||||
/** Create a new parentless password item
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static PasswordItem newPassword(String name, File file, File rootDir) {
|
||||
return new PasswordItem(name, null, TYPE_PASSWORD, file, rootDir);
|
||||
|
@ -72,7 +55,7 @@ public class PasswordItem implements Comparable{
|
|||
return this.type;
|
||||
}
|
||||
|
||||
public String getName(){
|
||||
private String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ import java.io.File;
|
|||
import java.io.FileFilter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.Collections.sort;
|
||||
|
@ -168,7 +167,7 @@ public class PasswordRepository {
|
|||
|
||||
Log.d("REPO", "current path: " + path.getPath());
|
||||
ArrayList<File> files = new ArrayList<>(Arrays.asList(path.listFiles((FileFilter) FileFilterUtils.directoryFileFilter())));
|
||||
files.addAll(new ArrayList<>((List<File>) FileUtils.listFiles(path, new String[]{"gpg"}, false)));
|
||||
files.addAll(new ArrayList<>(FileUtils.listFiles(path, new String[]{"gpg"}, false)));
|
||||
|
||||
return new ArrayList<>(files);
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle"
|
||||
android:dither="true">
|
||||
<corners android:radius="2dp"/>
|
||||
<solid android:color="@color/blue_grey_200" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
<item android:bottom="2dp" android:left="1dp" android:right="1dp">
|
||||
<shape android:shape="rectangle" android:dither="true">
|
||||
<corners android:radius="2dp" />
|
||||
<solid android:color="@android:color/white" />
|
||||
|
||||
<padding android:bottom="2dp" android:left="1dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
|
@ -20,7 +20,7 @@
|
|||
android:text="@string/server_name"
|
||||
android:textStyle="bold"
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:gravity="left"
|
||||
android:gravity="start"
|
||||
android:paddingBottom="6dp"
|
||||
android:textColor="@color/blue_grey_500"
|
||||
android:background="@drawable/bottom_line"/>
|
||||
|
@ -71,6 +71,7 @@
|
|||
android:hint="@string/server_user_hint"
|
||||
android:id="@+id/server_user"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@+id/label_server_user"
|
||||
android:layout_toRightOf="@+id/label_server_user"
|
||||
android:layout_alignParentRight="true"
|
||||
|
@ -99,11 +100,13 @@
|
|||
android:hint="@string/server_url_hint"
|
||||
android:id="@+id/server_url"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@+id/label_server_url"
|
||||
android:layout_toRightOf="@+id/label_server_url"
|
||||
android:layout_toLeftOf="@+id/label_server_port"
|
||||
android:layout_toStartOf="@+id/label_server_port"
|
||||
android:inputType="textWebEmailAddress" />
|
||||
android:inputType="textWebEmailAddress"
|
||||
tools:ignore="TextFields" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label_server_port"
|
||||
|
@ -122,6 +125,7 @@
|
|||
android:hint="@string/server_port_hint"
|
||||
android:id="@+id/server_port"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:inputType="number"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
@ -147,6 +151,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:hint="@string/server_path_hint"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:id="@+id/server_path"
|
||||
android:layout_toEndOf="@+id/label_server_path"
|
||||
android:layout_toRightOf="@+id/label_server_path"
|
||||
|
@ -162,7 +167,7 @@
|
|||
android:text="@string/server_resulting_url"
|
||||
android:textStyle="bold"
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:gravity="left"
|
||||
android:gravity="start"
|
||||
android:paddingBottom="6dp"
|
||||
android:textColor="@color/blue_grey_500"
|
||||
android:background="@drawable/bottom_line"/>
|
||||
|
@ -172,7 +177,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/repository_uri"
|
||||
android:inputType="textWebEmailAddress" />
|
||||
android:inputType="textWebEmailAddress"
|
||||
tools:ignore="TextFields" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
android:text="@string/git_config"
|
||||
android:textStyle="bold"
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:gravity="left"
|
||||
android:gravity="start"
|
||||
android:paddingBottom="6dp"
|
||||
android:textColor="@color/blue_grey_500"
|
||||
android:background="@drawable/bottom_line"/>
|
||||
|
@ -47,6 +47,7 @@
|
|||
android:hint="@string/git_user_name_hint"
|
||||
android:id="@+id/git_user_name"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@+id/label_git_user_name"
|
||||
android:layout_toRightOf="@+id/label_git_user_name"
|
||||
android:layout_alignParentRight="true"
|
||||
|
@ -76,6 +77,7 @@
|
|||
android:hint="@string/git_user_email_hint"
|
||||
android:id="@+id/git_user_email"
|
||||
android:layout_marginLeft="35dp"
|
||||
android:layout_marginStart="35dp"
|
||||
android:layout_toEndOf="@+id/label_git_user_email"
|
||||
android:layout_toRightOf="@+id/label_git_user_email"
|
||||
android:layout_alignParentRight="true"
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="20dp"
|
||||
android:paddingLeft="24dp"
|
||||
|
@ -26,7 +26,8 @@
|
|||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:src="@drawable/autofill_ins_1" />
|
||||
android:src="@drawable/autofill_ins_1"
|
||||
android:contentDescription="@string/autofill_ins_1_hint" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView2"
|
||||
|
@ -34,7 +35,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:src="@drawable/autofill_ins_2" />
|
||||
android:src="@drawable/autofill_ins_2"
|
||||
android:contentDescription="@string/autofill_ins_2_hint" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView3"
|
||||
|
@ -49,7 +51,8 @@
|
|||
android:layout_height="114dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:src="@drawable/autofill_ins_3" />
|
||||
android:src="@drawable/autofill_ins_3"
|
||||
android:contentDescription="@string/autofill_ins_3_hint" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView4"
|
||||
|
|
|
@ -32,5 +32,6 @@
|
|||
app:borderWidth="0dp"
|
||||
android:layout_margin="@dimen/fab_compat_margin"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"/>
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
</RelativeLayout>
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:background="@drawable/autofill_row_background"
|
||||
|
@ -17,14 +18,16 @@
|
|||
<ImageView
|
||||
android:id="@+id/app_icon"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp" />
|
||||
android:layout_height="48dp"
|
||||
android:contentDescription="@string/app_icon_hint"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical">
|
||||
android:orientation="vertical"
|
||||
tools:ignore="RtlHardcoded">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_name"
|
||||
|
@ -41,5 +44,4 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
|
@ -24,6 +24,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:text="CATEGORY HERE"
|
||||
android:textColor="@color/grey_500"
|
||||
android:textIsSelectable="false"
|
||||
|
@ -35,6 +36,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/activity_horizontal_margin"
|
||||
android:text="PASSWORD FILE NAME HERE"
|
||||
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
|
||||
android:textColor="@color/accent"
|
||||
|
@ -48,7 +50,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/divider"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="16dp" />
|
||||
android:layout_marginBottom="16dp"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/crypto_container"
|
||||
|
@ -127,7 +130,7 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_toLeftOf="@id/crypto_copy_username"
|
||||
android:layout_toEndOf="@id/crypto_copy_username"
|
||||
android:layout_toStartOf="@id/crypto_copy_username"
|
||||
android:text="@string/username"
|
||||
android:textColor="@android:color/black"
|
||||
android:textStyle="bold" />
|
||||
|
@ -140,7 +143,7 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@id/crypto_username_show_label"
|
||||
android:layout_toLeftOf="@id/crypto_copy_username"
|
||||
android:layout_toEndOf="@id/crypto_copy_username"
|
||||
android:layout_toStartOf="@id/crypto_copy_username"
|
||||
android:textColor="@android:color/black"
|
||||
android:textIsSelectable="true"
|
||||
android:typeface="monospace" />
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/activity_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/activity_horizontal_margin"
|
||||
android:text="CATEGORY HERE"
|
||||
android:textColor="@color/grey_500"
|
||||
android:textIsSelectable="false"
|
||||
|
@ -77,7 +78,7 @@
|
|||
android:id="@+id/generate_password"
|
||||
android:text="@string/pwd_generate_button"
|
||||
android:onClick="handleClick"
|
||||
android:layout_gravity="right" />
|
||||
android:layout_gravity="end" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
@ -67,7 +67,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="+"
|
||||
android:id="@+id/matchButton"
|
||||
android:layout_gravity="center_horizontal"/>
|
||||
android:layout_gravity="center_horizontal"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/never"
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
|
@ -25,9 +24,9 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:baselineAligned="false"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2"
|
||||
android:baselineAligned="false">
|
||||
android:weightSum="2">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="20dp"
|
||||
android:paddingLeft="24dp"
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
|
@ -23,7 +24,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:spinnerMode="dropdown" />
|
||||
|
||||
<android.support.design.widget.TextInputLayout xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
|
@ -45,7 +46,7 @@
|
|||
android:checked="false"
|
||||
android:text="@string/ssh_keygen_show_passphrase" />
|
||||
|
||||
<android.support.design.widget.TextInputLayout xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
android:id="@+id/imageView"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_launcher"
|
||||
android:contentDescription="@string/app_icon_hint"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_centerHorizontal="true" />
|
||||
|
||||
|
@ -44,7 +45,8 @@
|
|||
android:layout_marginRight="@dimen/activity_horizontal_margin"
|
||||
android:layout_marginEnd="@dimen/activity_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/activity_vertical_margin"
|
||||
android:textAllCaps="true"/>
|
||||
android:textAllCaps="true"
|
||||
tools:ignore="RelativeOverlap" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -77,7 +79,8 @@
|
|||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="11sp" />
|
||||
android:textSize="11sp"
|
||||
tools:ignore="RelativeOverlap" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
|
|
@ -26,5 +26,6 @@
|
|||
app:borderWidth="0dp"
|
||||
android:layout_margin="@dimen/fab_compat_margin"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"/>
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -12,18 +12,21 @@
|
|||
android:paddingBottom="8dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:gravity="left">
|
||||
android:gravity="start">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="32dp"
|
||||
android:id="@+id/type_image"
|
||||
android:src="@drawable/ic_folder_grey600_24dp"
|
||||
android:contentDescription="@string/folder_icon_hint"
|
||||
android:alpha="0.5"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:paddingRight="8dp"/>
|
||||
android:paddingRight="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
tools:ignore="RtlSymmetry" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/type"
|
||||
|
|
|
@ -174,6 +174,9 @@
|
|||
<string name="send_plaintext_password_to">Passwort senden als Nur-Text mit behilfe von…</string>
|
||||
<string name="show_password">Password wiedergeben</string>
|
||||
<string name="repository_uri">Repository URI</string>
|
||||
<string name="app_icon_hint">App Icon</string>
|
||||
<string name="folder_icon_hint">Verzeichnis Icon</string>
|
||||
|
||||
|
||||
<!-- Autofill -->
|
||||
<string name="autofill_description">Füge das Passwort automatisch in Apps ein (Autofill). Funktioniert nur unter Android 4.3 und höher. Dies basiert nicht auf der Zwischenablage für Android 5.0 oder höher.</string>
|
||||
|
@ -188,4 +191,7 @@
|
|||
<string name="autofill_paste">Einfügen</string>
|
||||
<string name="autofill_paste_username">Benutzername einfügen?\n\n%s</string>
|
||||
<string name="autofill_toast_username">Wähle ein editierbares Feld um den Benutzernamen einzufügen.\nDer Benutzername ist für %d Sekunden verfügbar.</string>
|
||||
<string name="autofill_ins_1_hint">Bildschirmfoto Accessibility Services</string>
|
||||
<string name="autofill_ins_2_hint">Bildschirmfoto des Schalters in Accessibility Services</string>
|
||||
<string name="autofill_ins_3_hint">Bildschirmfoto von Autofill in Aktion</string>
|
||||
</resources>
|
||||
|
|
|
@ -182,6 +182,8 @@
|
|||
<string name="send_plaintext_password_to">Send password as plaintext using…</string>
|
||||
<string name="show_password">Show password</string>
|
||||
<string name="repository_uri">Repository URI</string>
|
||||
<string name="app_icon_hint">App icon</string>
|
||||
<string name="folder_icon_hint">Folder icon</string>
|
||||
|
||||
<!-- Autofill -->
|
||||
<string name="autofill_description">Autofills password fields in apps. Only works for Android versions 4.3 and up. Does not rely on the clipboard for Android versions 5.0 and up.</string>
|
||||
|
@ -196,4 +198,7 @@
|
|||
<string name="autofill_paste">Paste</string>
|
||||
<string name="autofill_paste_username">Paste username?\n\n%s</string>
|
||||
<string name="autofill_toast_username">Select an editable field to past the username.\nUsername is available for %d seconds.</string>
|
||||
<string name="autofill_ins_1_hint">Screenshot of accessibility services</string>
|
||||
<string name="autofill_ins_2_hint">Screenshot of toggle in accessibility services</string>
|
||||
<string name="autofill_ins_3_hint">Screenshot of autofill service in action</string>
|
||||
</resources>
|
||||
|
|
|
@ -6,7 +6,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.2'
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
|
Loading…
Reference in a new issue