reset last updated and keyserver status on change of keyserver preference
This commit is contained in:
@@ -466,6 +466,29 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
|
|||||||
return getHostID();
|
return getHostID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (! (obj instanceof ParcelableHkpKeyserver)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ParcelableHkpKeyserver other = (ParcelableHkpKeyserver) obj;
|
||||||
|
if (other.mUrl == null ^ mUrl == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (other.mOnion == null ^ mOnion == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mUrl != null && !mUrl.equals(other.mUrl)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mOnion != null && !mOnion.equals(other.mOnion)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tries to find a server responsible for a given domain
|
* Tries to find a server responsible for a given domain
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1363,4 +1363,11 @@ public class KeyWritableRepository extends KeyRepository {
|
|||||||
return mContentResolver.insert(UpdatedKeys.CONTENT_URI, values);
|
return mContentResolver.insert(UpdatedKeys.CONTENT_URI, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetAllLastUpdatedTimes() {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.putNull(UpdatedKeys.LAST_UPDATED);
|
||||||
|
values.putNull(UpdatedKeys.SEEN_ON_KEYSERVERS);
|
||||||
|
mContentResolver.update(UpdatedKeys.CONTENT_URI, values, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -916,6 +916,19 @@ public class KeychainProvider extends ContentProvider {
|
|||||||
buildDefaultApiAppsSelection(uri, selection), selectionArgs);
|
buildDefaultApiAppsSelection(uri, selection), selectionArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case UPDATED_KEYS: {
|
||||||
|
if (values.size() != 2 ||
|
||||||
|
!values.containsKey(UpdatedKeys.SEEN_ON_KEYSERVERS) ||
|
||||||
|
!values.containsKey(UpdatedKeys.LAST_UPDATED) ||
|
||||||
|
values.get(UpdatedKeys.LAST_UPDATED) != null ||
|
||||||
|
values.get(UpdatedKeys.SEEN_ON_KEYSERVERS) != null ||
|
||||||
|
selection != null || selectionArgs != null) {
|
||||||
|
throw new UnsupportedOperationException("can only reset all keys");
|
||||||
|
}
|
||||||
|
|
||||||
|
db.update(Tables.UPDATED_KEYS, values, null, null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,11 @@
|
|||||||
|
|
||||||
package org.sufficientlysecure.keychain.ui;
|
package org.sufficientlysecure.keychain.ui;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
@@ -38,6 +43,8 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
|
||||||
|
import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
|
||||||
import org.sufficientlysecure.keychain.ui.dialog.AddEditKeyserverDialogFragment;
|
import org.sufficientlysecure.keychain.ui.dialog.AddEditKeyserverDialogFragment;
|
||||||
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||||
@@ -45,20 +52,20 @@ import org.sufficientlysecure.keychain.ui.util.recyclerview.ItemTouchHelperAdapt
|
|||||||
import org.sufficientlysecure.keychain.ui.util.recyclerview.ItemTouchHelperDragCallback;
|
import org.sufficientlysecure.keychain.ui.util.recyclerview.ItemTouchHelperDragCallback;
|
||||||
import org.sufficientlysecure.keychain.ui.util.recyclerview.ItemTouchHelperViewHolder;
|
import org.sufficientlysecure.keychain.ui.util.recyclerview.ItemTouchHelperViewHolder;
|
||||||
import org.sufficientlysecure.keychain.ui.util.recyclerview.RecyclerItemClickListener;
|
import org.sufficientlysecure.keychain.ui.util.recyclerview.RecyclerItemClickListener;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
|
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
public class SettingsKeyserverFragment extends Fragment implements RecyclerItemClickListener.OnItemClickListener {
|
public class SettingsKeyserverFragment extends Fragment implements RecyclerItemClickListener.OnItemClickListener {
|
||||||
|
|
||||||
private static final String ARG_KEYSERVER_ARRAY = "arg_keyserver_array";
|
private static final String ARG_KEYSERVER_ARRAY = "arg_keyserver_array";
|
||||||
private ItemTouchHelper mItemTouchHelper;
|
private ItemTouchHelper mItemTouchHelper;
|
||||||
|
|
||||||
private ArrayList<ParcelableHkpKeyserver> mKeyservers;
|
private ArrayList<ParcelableHkpKeyserver> mKeyserversMutable;
|
||||||
|
private List<ParcelableHkpKeyserver> mKeyservers;
|
||||||
private KeyserverListAdapter mAdapter;
|
private KeyserverListAdapter mAdapter;
|
||||||
|
|
||||||
|
private KeyWritableRepository databaseReadWriteInteractor;
|
||||||
|
|
||||||
public static SettingsKeyserverFragment newInstance(ArrayList<ParcelableHkpKeyserver> keyservers) {
|
public static SettingsKeyserverFragment newInstance(ArrayList<ParcelableHkpKeyserver> keyservers) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putParcelableArrayList(ARG_KEYSERVER_ARRAY, keyservers);
|
args.putParcelableArrayList(ARG_KEYSERVER_ARRAY, keyservers);
|
||||||
@@ -72,6 +79,7 @@ public class SettingsKeyserverFragment extends Fragment implements RecyclerItemC
|
|||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
|
||||||
savedInstanceState) {
|
savedInstanceState) {
|
||||||
|
databaseReadWriteInteractor = KeyWritableRepository.createDatabaseReadWriteInteractor(getContext());
|
||||||
|
|
||||||
return inflater.inflate(R.layout.settings_keyserver_fragment, null);
|
return inflater.inflate(R.layout.settings_keyserver_fragment, null);
|
||||||
}
|
}
|
||||||
@@ -80,9 +88,10 @@ public class SettingsKeyserverFragment extends Fragment implements RecyclerItemC
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
mKeyservers = getArguments().getParcelableArrayList(ARG_KEYSERVER_ARRAY);
|
mKeyserversMutable = getArguments().getParcelableArrayList(ARG_KEYSERVER_ARRAY);
|
||||||
|
mKeyservers = Collections.unmodifiableList(new ArrayList<>(mKeyserversMutable));
|
||||||
|
|
||||||
mAdapter = new KeyserverListAdapter(mKeyservers);
|
mAdapter = new KeyserverListAdapter(mKeyserversMutable);
|
||||||
|
|
||||||
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.keyserver_recycler_view);
|
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.keyserver_recycler_view);
|
||||||
// recyclerView.setHasFixedSize(true); // the size of the first item changes
|
// recyclerView.setHasFixedSize(true); // the size of the first item changes
|
||||||
@@ -143,7 +152,7 @@ public class SettingsKeyserverFragment extends Fragment implements RecyclerItemC
|
|||||||
if (deleted) {
|
if (deleted) {
|
||||||
Notify.create(getActivity(),
|
Notify.create(getActivity(),
|
||||||
getActivity().getString(
|
getActivity().getString(
|
||||||
R.string.keyserver_preference_deleted, mKeyservers.get(position)),
|
R.string.keyserver_preference_deleted, mKeyserversMutable.get(position)),
|
||||||
Notify.Style.OK)
|
Notify.Style.OK)
|
||||||
.show();
|
.show();
|
||||||
deleteKeyserver(position);
|
deleteKeyserver(position);
|
||||||
@@ -187,27 +196,27 @@ public class SettingsKeyserverFragment extends Fragment implements RecyclerItemC
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addKeyserver(ParcelableHkpKeyserver keyserver) {
|
private void addKeyserver(ParcelableHkpKeyserver keyserver) {
|
||||||
mKeyservers.add(keyserver);
|
mKeyserversMutable.add(keyserver);
|
||||||
mAdapter.notifyItemInserted(mKeyservers.size() - 1);
|
mAdapter.notifyItemInserted(mKeyserversMutable.size() - 1);
|
||||||
saveKeyserverList();
|
saveKeyserverList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void editKeyserver(ParcelableHkpKeyserver newKeyserver, int position) {
|
private void editKeyserver(ParcelableHkpKeyserver newKeyserver, int position) {
|
||||||
mKeyservers.set(position, newKeyserver);
|
mKeyserversMutable.set(position, newKeyserver);
|
||||||
mAdapter.notifyItemChanged(position);
|
mAdapter.notifyItemChanged(position);
|
||||||
saveKeyserverList();
|
saveKeyserverList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteKeyserver(int position) {
|
private void deleteKeyserver(int position) {
|
||||||
if (mKeyservers.size() == 1) {
|
if (mKeyserversMutable.size() == 1) {
|
||||||
Notify.create(getActivity(), R.string.keyserver_preference_cannot_delete_last,
|
Notify.create(getActivity(), R.string.keyserver_preference_cannot_delete_last,
|
||||||
Notify.Style.ERROR).show();
|
Notify.Style.ERROR).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mKeyservers.remove(position);
|
mKeyserversMutable.remove(position);
|
||||||
// we use this
|
// we use this
|
||||||
mAdapter.notifyItemRemoved(position);
|
mAdapter.notifyItemRemoved(position);
|
||||||
if (position == 0 && mKeyservers.size() > 0) {
|
if (position == 0 && mKeyserversMutable.size() > 0) {
|
||||||
// if we deleted the first item, we need the adapter to redraw the new first item
|
// if we deleted the first item, we need the adapter to redraw the new first item
|
||||||
mAdapter.notifyItemChanged(0);
|
mAdapter.notifyItemChanged(0);
|
||||||
}
|
}
|
||||||
@@ -215,13 +224,20 @@ public class SettingsKeyserverFragment extends Fragment implements RecyclerItemC
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveKeyserverList() {
|
private void saveKeyserverList() {
|
||||||
Preferences.getPreferences(getActivity()).setKeyServers(mKeyservers);
|
if (mKeyserversMutable.equals(mKeyservers)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Preferences.getPreferences(getActivity()).setKeyServers(mKeyserversMutable);
|
||||||
|
mKeyservers = Collections.unmodifiableList(new ArrayList<>(mKeyserversMutable));
|
||||||
|
|
||||||
|
databaseReadWriteInteractor.resetAllLastUpdatedTimes();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(View view, int position) {
|
public void onItemClick(View view, int position) {
|
||||||
startEditKeyserverDialog(AddEditKeyserverDialogFragment.DialogAction.EDIT,
|
startEditKeyserverDialog(AddEditKeyserverDialogFragment.DialogAction.EDIT,
|
||||||
mKeyservers.get(position), position);
|
mKeyserversMutable.get(position), position);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class KeyserverListAdapter extends RecyclerView.Adapter<KeyserverListAdapter.ViewHolder>
|
public class KeyserverListAdapter extends RecyclerView.Adapter<KeyserverListAdapter.ViewHolder>
|
||||||
|
|||||||
Reference in New Issue
Block a user