Miscellaneous code cleanups.

This commit is contained in:
akwizgran
2018-11-23 12:28:11 +00:00
parent c59ef29cdb
commit 8c25732d13
150 changed files with 551 additions and 463 deletions

View File

@@ -19,12 +19,14 @@ package im.delight.android.identicons;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import static android.graphics.Paint.Style.FILL;
@UiThread
@NotNullByDefault
class Identicon {
private static final int ROWS = 9, COLUMNS = 9;
@@ -36,7 +38,7 @@ class Identicon {
private int cellWidth, cellHeight;
Identicon(@NonNull byte[] input) {
Identicon(byte[] input) {
if (input.length == 0) throw new IllegalArgumentException();
this.input = input;

View File

@@ -20,19 +20,22 @@ import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import static android.graphics.PixelFormat.OPAQUE;
@UiThread
@NotNullByDefault
public class IdenticonDrawable extends Drawable {
private static final int HEIGHT = 200, WIDTH = 200;
private final Identicon identicon;
public IdenticonDrawable(@NonNull byte[] input) {
public IdenticonDrawable(byte[] input) {
super();
identicon = new Identicon(input);
}
@@ -48,7 +51,7 @@ public class IdenticonDrawable extends Drawable {
}
@Override
public void setBounds(@NonNull Rect bounds) {
public void setBounds(Rect bounds) {
super.setBounds(bounds);
identicon.updateSize(bounds.right - bounds.left,
bounds.bottom - bounds.top);
@@ -61,7 +64,7 @@ public class IdenticonDrawable extends Drawable {
}
@Override
public void draw(@NonNull Canvas canvas) {
public void draw(Canvas canvas) {
identicon.draw(canvas);
}
@@ -71,7 +74,7 @@ public class IdenticonDrawable extends Drawable {
}
@Override
public void setColorFilter(ColorFilter cf) {
public void setColorFilter(@Nullable ColorFilter cf) {
}

View File

@@ -9,6 +9,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.annotation.UiThread;
import android.support.v4.app.NotificationCompat;
@@ -21,8 +22,7 @@ import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.Service;
import org.briarproject.bramble.api.lifecycle.ServiceException;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
@@ -82,8 +82,7 @@ import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
@ThreadSafe
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class AndroidNotificationManagerImpl implements AndroidNotificationManager,
Service, EventListener {
@@ -103,12 +102,12 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
private final Multiset<GroupId> blogCounts = new Multiset<>();
private int introductionTotal = 0;
private int nextRequestId = 0;
@Nullable
private ContactId blockedContact = null;
@Nullable
private GroupId blockedGroup = null;
private boolean blockSignInReminder = false;
private boolean blockContacts = false, blockGroups = false;
private boolean blockForums = false, blockBlogs = false;
private boolean blockIntroductions = false;
private boolean blockBlogs = false;
private long lastSound = 0;
private volatile Settings settings = new Settings();
@@ -283,7 +282,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
private void showContactNotification(ContactId c) {
androidExecutor.runOnUiThread(() -> {
if (blockContacts) return;
if (c.equals(blockedContact)) return;
contactCounts.add(c);
updateContactNotification(true);
@@ -385,7 +383,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
@UiThread
private void showGroupMessageNotification(GroupId g) {
androidExecutor.runOnUiThread(() -> {
if (blockGroups) return;
if (g.equals(blockedGroup)) return;
groupCounts.add(g);
updateGroupMessageNotification(true);
@@ -456,7 +453,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
@UiThread
private void showForumPostNotification(GroupId g) {
androidExecutor.runOnUiThread(() -> {
if (blockForums) return;
if (g.equals(blockedGroup)) return;
forumCounts.add(g);
updateForumPostNotification(true);
@@ -580,7 +576,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
private void showIntroductionNotification() {
androidExecutor.runOnUiThread(() -> {
if (blockIntroductions) return;
introductionTotal++;
updateIntroductionNotification();
});

View File

@@ -44,6 +44,7 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION;
import static android.os.Build.VERSION.SDK_INT;
import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
@@ -57,11 +58,11 @@ import static org.briarproject.briar.api.android.LockManager.ACTION_LOCK;
public class BriarService extends Service {
public static String EXTRA_START_RESULT =
public static final String EXTRA_START_RESULT =
"org.briarproject.briar.START_RESULT";
public static String EXTRA_NOTIFICATION_ID =
public static final String EXTRA_NOTIFICATION_ID =
"org.briarproject.briar.FAILURE_NOTIFICATION_ID";
public static String EXTRA_STARTUP_FAILED =
public static final String EXTRA_STARTUP_FAILED =
"org.briarproject.briar.STARTUP_FAILED";
private static final Logger LOG = getLogger(BriarService.class.getName());
@@ -110,7 +111,7 @@ public class BriarService extends Service {
// Create notification channels
if (SDK_INT >= 26) {
NotificationManager nm = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
requireNonNull(getSystemService(NOTIFICATION_SERVICE));
NotificationChannel ongoingChannel = new NotificationChannel(
ONGOING_CHANNEL_ID,
getString(R.string.ongoing_notification_title),
@@ -178,8 +179,8 @@ public class BriarService extends Service {
i.putExtra(EXTRA_NOTIFICATION_ID, FAILURE_NOTIFICATION_ID);
b.setContentIntent(PendingIntent.getActivity(BriarService.this,
0, i, FLAG_UPDATE_CURRENT));
Object o = getSystemService(NOTIFICATION_SERVICE);
NotificationManager nm = (NotificationManager) o;
NotificationManager nm = (NotificationManager)
requireNonNull(getSystemService(NOTIFICATION_SERVICE));
nm.notify(FAILURE_NOTIFICATION_ID, b.build());
// Bring the dashboard to the front to clear the back stack
i = new Intent(BriarService.this, NavDrawerActivity.class);

View File

@@ -7,7 +7,6 @@ import android.content.IntentFilter;
import android.os.PowerManager;
import org.briarproject.bramble.api.lifecycle.Service;
import org.briarproject.bramble.api.lifecycle.ServiceException;
import org.briarproject.briar.api.android.DozeWatchdog;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -15,6 +14,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import static android.content.Context.POWER_SERVICE;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED;
import static java.util.Objects.requireNonNull;
class DozeWatchdogImpl implements DozeWatchdog, Service {
@@ -32,14 +32,14 @@ class DozeWatchdogImpl implements DozeWatchdog, Service {
}
@Override
public void startService() throws ServiceException {
public void startService() {
if (SDK_INT < 23) return;
IntentFilter filter = new IntentFilter(ACTION_DEVICE_IDLE_MODE_CHANGED);
appContext.registerReceiver(receiver, filter);
}
@Override
public void stopService() throws ServiceException {
public void stopService() {
if (SDK_INT < 23) return;
appContext.unregisterReceiver(receiver);
}
@@ -49,8 +49,8 @@ class DozeWatchdogImpl implements DozeWatchdog, Service {
@Override
public void onReceive(Context context, Intent intent) {
if (SDK_INT < 23) return;
PowerManager pm =
(PowerManager) appContext.getSystemService(POWER_SERVICE);
PowerManager pm = (PowerManager)
requireNonNull(appContext.getSystemService(POWER_SERVICE));
if (pm.isDeviceIdleMode()) dozed.set(true);
}
}

View File

@@ -38,6 +38,7 @@ public class NotificationCleanupService extends IntentService {
protected void onHandleIntent(@Nullable Intent i) {
if (i == null || i.getData() == null) return;
String uri = i.getData().toString();
//noinspection IfCanBeSwitch
if (uri.equals(CONTACT_URI)) {
notificationManager.clearAllContactNotifications();
} else if (uri.equals(GROUP_URI)) {

View File

@@ -8,8 +8,7 @@ import com.vanniktech.emoji.emoji.Emoji;
import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.sync.Client;
@@ -29,8 +28,7 @@ import static org.briarproject.bramble.util.LogUtils.logException;
import static org.briarproject.bramble.util.StringUtils.join;
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class RecentEmojiImpl implements RecentEmoji, Client {
private static final Logger LOG =

View File

@@ -44,8 +44,8 @@ public class StartupFailureActivity extends BaseActivity implements
// cancel notification
if (notificationId > -1) {
Object o = getSystemService(NOTIFICATION_SERVICE);
NotificationManager nm = (NotificationManager) requireNonNull(o);
NotificationManager nm = (NotificationManager)
requireNonNull(getSystemService(NOTIFICATION_SERVICE));
nm.cancel(notificationId);
}

View File

@@ -14,8 +14,7 @@ import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.Service;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
@@ -34,6 +33,7 @@ import static android.app.AlarmManager.ELAPSED_REALTIME;
import static android.app.PendingIntent.getService;
import static android.content.Context.ALARM_SERVICE;
import static android.os.SystemClock.elapsedRealtime;
import static java.util.Objects.requireNonNull;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
@@ -44,8 +44,7 @@ import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_
import static org.briarproject.briar.android.util.UiUtils.hasScreenLock;
@ThreadSafe
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
public class LockManagerImpl implements LockManager, Service, EventListener {
private static final Logger LOG =
@@ -79,19 +78,19 @@ public class LockManagerImpl implements LockManager, Service, EventListener {
this.settingsManager = settingsManager;
this.notificationManager = notificationManager;
this.dbExecutor = dbExecutor;
this.alarmManager =
(AlarmManager) appContext.getSystemService(ALARM_SERVICE);
alarmManager = (AlarmManager)
requireNonNull(appContext.getSystemService(ALARM_SERVICE));
Intent i =
new Intent(ACTION_LOCK, null, appContext, BriarService.class);
this.lockIntent = getService(appContext, 0, i, 0);
this.timeoutNever = Integer.valueOf(
lockIntent = getService(appContext, 0, i, 0);
timeoutNever = Integer.valueOf(
appContext.getString(R.string.pref_lock_timeout_value_never));
this.timeoutDefault = Integer.valueOf(
timeoutDefault = Integer.valueOf(
appContext.getString(R.string.pref_lock_timeout_value_default));
this.timeoutMinutes = timeoutNever;
timeoutMinutes = timeoutNever;
// setting this in the constructor makes #getValue() @NonNull
this.lockable.setValue(false);
lockable.setValue(false);
}
@Override
@@ -145,7 +144,7 @@ public class LockManagerImpl implements LockManager, Service, EventListener {
@UiThread
@Override
public void checkIfLockable() {
boolean oldValue = lockable.getValue();
boolean oldValue = requireNonNull(lockable.getValue());
boolean newValue = hasScreenLock(appContext) && lockableSetting;
if (oldValue != newValue) {
this.lockable.setValue(newValue);
@@ -201,7 +200,8 @@ public class LockManagerImpl implements LockManager, Service, EventListener {
}
private boolean timeoutEnabled() {
return timeoutMinutes != timeoutNever && lockable.getValue();
return timeoutMinutes != timeoutNever
&& requireNonNull(lockable.getValue());
}
private boolean timedOut() {

View File

@@ -212,14 +212,16 @@ public abstract class BaseActivity extends AppCompatActivity
}
public void showSoftKeyboard(View view) {
Object o = getSystemService(INPUT_METHOD_SERVICE);
((InputMethodManager) o).showSoftInput(view, SHOW_IMPLICIT);
InputMethodManager im = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
if (im != null) im.showSoftInput(view, SHOW_IMPLICIT);
}
public void hideSoftKeyboard(View view) {
IBinder token = view.getWindowToken();
Object o = getSystemService(INPUT_METHOD_SERVICE);
((InputMethodManager) o).hideSoftInputFromWindow(token, 0);
InputMethodManager im = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
if (im != null) im.hideSoftInputFromWindow(token, 0);
}
@UiThread

View File

@@ -54,9 +54,8 @@ abstract class BasePostFragment extends BaseFragment {
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// retrieve MessageId of blog post from arguments
byte[] p = requireNonNull(getArguments()).getByteArray(POST_ID);
if (p == null) throw new IllegalStateException("No post ID in args");
postId = new MessageId(p);
Bundle args = requireNonNull(getArguments());
postId = new MessageId(requireNonNull(args.getByteArray(POST_ID)));
View view = inflater.inflate(R.layout.fragment_blog_post, container,
false);

View File

@@ -1,5 +1,6 @@
package org.briarproject.briar.android.blog;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.api.blog.BlogCommentHeader;
import org.briarproject.briar.api.blog.BlogPostHeader;
@@ -7,9 +8,12 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javax.annotation.concurrent.NotThreadSafe;
import static java.util.Collections.sort;
// This class is not thread-safe
@NotThreadSafe
@NotNullByDefault
class BlogCommentItem extends BlogPostItem {
private static final BlogCommentComparator COMPARATOR =

View File

@@ -167,7 +167,8 @@ public class BlogFragment extends BaseFragment
}
@Override
public void onActivityResult(int request, int result, Intent data) {
public void onActivityResult(int request, int result,
@Nullable Intent data) {
super.onActivityResult(request, result, data);
if (request == REQUEST_WRITE_BLOG_POST && result == RESULT_OK) {

View File

@@ -7,13 +7,11 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class BlogPostAdapter extends BriarAdapter<BlogPostItem, BlogPostViewHolder> {
private final OnBlogPostClickListener listener;

View File

@@ -1,9 +1,8 @@
package org.briarproject.briar.android.blog;
import android.support.annotation.NonNull;
import org.briarproject.bramble.api.identity.Author;
import org.briarproject.bramble.api.identity.AuthorInfo;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.api.blog.BlogPostHeader;
@@ -12,6 +11,7 @@ import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@NotNullByDefault
public class BlogPostItem implements Comparable<BlogPostItem> {
private final BlogPostHeader header;
@@ -67,16 +67,13 @@ public class BlogPostItem implements Comparable<BlogPostItem> {
}
@Override
public int compareTo(@NonNull BlogPostItem other) {
public int compareTo(BlogPostItem other) {
if (this == other) return 0;
return compare(getHeader(), other.getHeader());
}
protected static int compare(BlogPostHeader h1, BlogPostHeader h2) {
// The newest post comes first
long aTime = h1.getTimeReceived(), bTime = h2.getTimeReceived();
if (aTime > bTime) return -1;
if (aTime < bTime) return 1;
return 0;
return Long.compare(h2.getTimeReceived(), h1.getTimeReceived());
}
}

View File

@@ -2,7 +2,6 @@ package org.briarproject.briar.android.blog;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewCompat;
@@ -14,6 +13,7 @@ import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.view.AuthorView;
@@ -33,6 +33,7 @@ import static org.briarproject.briar.android.util.UiUtils.makeLinksClickable;
import static org.briarproject.briar.api.blog.MessageType.POST;
@UiThread
@NotNullByDefault
class BlogPostViewHolder extends RecyclerView.ViewHolder {
private final Context ctx;
@@ -44,13 +45,12 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
private final ViewGroup commentContainer;
private final boolean fullText;
@NonNull
private final OnBlogPostClickListener listener;
@Nullable
private final FragmentManager fragmentManager;
BlogPostViewHolder(View v, boolean fullText,
@NonNull OnBlogPostClickListener listener,
OnBlogPostClickListener listener,
@Nullable FragmentManager fragmentManager) {
super(v);
this.fullText = fullText;

View File

@@ -96,7 +96,8 @@ public class FeedFragment extends BaseFragment implements
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
public void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// The BlogPostAddedEvent arrives when the controller is not listening

View File

@@ -54,9 +54,7 @@ public class FeedPostFragment extends BasePostFragment {
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
Bundle args = requireNonNull(getArguments());
byte[] b = args.getByteArray(GROUP_ID);
if (b == null) throw new IllegalStateException("No group ID in args");
blogId = new GroupId(b);
blogId = new GroupId(requireNonNull(args.getByteArray(GROUP_ID)));
return super.onCreateView(inflater, container, savedInstanceState);
}

View File

@@ -73,7 +73,6 @@ public class ReblogFragment extends BaseFragment implements SendListener {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
Bundle args = requireNonNull(getArguments());
GroupId blogId =
new GroupId(requireNonNull(args.getByteArray(GROUP_ID)));

View File

@@ -8,6 +8,7 @@ import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
import org.briarproject.briar.api.feed.Feed;
@@ -16,6 +17,7 @@ import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static org.briarproject.briar.android.util.UiUtils.formatDate;
@NotNullByDefault
class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
private final RssFeedListener listener;
@@ -72,10 +74,7 @@ class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
@Override
public int compare(Feed a, Feed b) {
if (a == b) return 0;
long aTime = a.getAdded(), bTime = b.getAdded();
if (aTime > bTime) return -1;
if (aTime < bTime) return 1;
return 0;
return Long.compare(b.getAdded(), a.getAdded());
}
@Override

View File

@@ -5,14 +5,14 @@ import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Patterns;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -33,6 +33,8 @@ import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class RssFeedImportActivity extends BriarActivity {
private static final Logger LOG =
@@ -47,11 +49,10 @@ public class RssFeedImportActivity extends BriarActivity {
Executor ioExecutor;
@Inject
@SuppressWarnings("WeakerAccess")
volatile FeedManager feedManager;
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss_feed_import);
@@ -80,16 +81,6 @@ public class RssFeedImportActivity extends BriarActivity {
progressBar = findViewById(R.id.progressBar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public void injectActivity(ActivityComponent component) {
component.inject(this);

View File

@@ -3,6 +3,7 @@ package org.briarproject.briar.android.blog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
@@ -11,6 +12,8 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -30,6 +33,8 @@ import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class RssFeedManageActivity extends BriarActivity
implements RssFeedListener {
@@ -40,11 +45,10 @@ public class RssFeedManageActivity extends BriarActivity
private RssFeedAdapter adapter;
@Inject
@SuppressWarnings("WeakerAccess")
volatile FeedManager feedManager;
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss_feed_manage);

View File

@@ -36,6 +36,7 @@ import javax.inject.Inject;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
@@ -70,9 +71,7 @@ public class WriteBlogPostActivity extends BriarActivity
super.onCreate(state);
Intent i = getIntent();
byte[] b = i.getByteArrayExtra(GROUP_ID);
if (b == null) throw new IllegalStateException("No Group in intent.");
groupId = new GroupId(b);
groupId = new GroupId(requireNonNull(i.getByteArrayExtra(GROUP_ID)));
setContentView(R.layout.activity_write_blog_post);

View File

@@ -1,10 +1,10 @@
package org.briarproject.briar.android.contact;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.util.BriarAdapter;
import javax.annotation.Nullable;
@@ -12,6 +12,7 @@ import javax.annotation.Nullable;
import static android.support.v7.util.SortedList.INVALID_POSITION;
import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
@NotNullByDefault
public abstract class BaseContactListAdapter<I extends ContactItem, VH extends ContactItemViewHolder<I>>
extends BriarAdapter<I, VH> {
@@ -25,7 +26,7 @@ public abstract class BaseContactListAdapter<I extends ContactItem, VH extends C
}
@Override
public void onBindViewHolder(@NonNull VH ui, int position) {
public void onBindViewHolder(VH ui, int position) {
I item = items.get(position);
ui.bind(item, listener);
}

View File

@@ -5,8 +5,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
@NotNullByDefault
public class ContactListAdapter extends
BaseContactListAdapter<ContactListItem, ContactListItemViewHolder> {
@@ -28,22 +30,14 @@ public class ContactListAdapter extends
public boolean areContentsTheSame(ContactListItem c1, ContactListItem c2) {
// check for all properties that influence visual
// representation of contact
if (c1.getUnreadCount() != c2.getUnreadCount()) {
return false;
}
if (c1.getTimestamp() != c2.getTimestamp()) {
return false;
}
return c1.isConnected() == c2.isConnected();
return c1.getUnreadCount() == c2.getUnreadCount() &&
c1.getTimestamp() == c2.getTimestamp() &&
c1.isConnected() == c2.isConnected();
}
@Override
public int compare(ContactListItem c1, ContactListItem c2) {
long time1 = c1.getTimestamp();
long time2 = c2.getTimestamp();
if (time1 < time2) return 1;
if (time1 > time2) return -1;
return 0;
return Long.compare(c2.getTimestamp(), c1.getTimestamp());
}
}

View File

@@ -53,11 +53,8 @@ public abstract class BaseContactSelectorFragment<I extends SelectableContactIte
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = requireNonNull(getArguments());
byte[] b = args.getByteArray(GROUP_ID);
if (b == null) throw new IllegalStateException("No GroupId");
groupId = new GroupId(b);
groupId = new GroupId(requireNonNull(args.getByteArray(GROUP_ID)));
}
@Override
@@ -65,7 +62,6 @@ public abstract class BaseContactSelectorFragment<I extends SelectableContactIte
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.list, container, false);
list = contentView.findViewById(R.id.list);

View File

@@ -59,6 +59,7 @@ public class SharingControllerImpl implements SharingController, EventListener {
}
private void setConnected(ContactId c) {
SharingListener listener = this.listener;
if (listener == null) return;
listener.runOnUiThreadUnlessDestroyed(() -> {
if (contacts.contains(c)) {

View File

@@ -3,7 +3,7 @@ package org.briarproject.briar.android.conversation;
import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
@@ -12,6 +12,8 @@ import android.widget.Button;
import android.widget.EditText;
import org.briarproject.bramble.api.contact.Contact;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -19,6 +21,8 @@ import javax.inject.Inject;
import static java.util.Objects.requireNonNull;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class AliasDialogFragment extends AppCompatDialogFragment {
final static String TAG = AliasDialogFragment.class.getName();
@@ -34,7 +38,7 @@ public class AliasDialogFragment extends AppCompatDialogFragment {
}
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, R.style.BriarDialogTheme);
@@ -45,8 +49,9 @@ public class AliasDialogFragment extends AppCompatDialogFragment {
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_alias_dialog, container,
false);

View File

@@ -58,7 +58,7 @@ import static org.briarproject.briar.android.util.UiUtils.observeForeverOnce;
@NotNullByDefault
public class ConversationViewModel extends AndroidViewModel {
private static Logger LOG =
private static final Logger LOG =
getLogger(ConversationViewModel.class.getName());
private static final String SHOW_ONBOARDING_IMAGE =
"showOnboardingImage";

View File

@@ -88,7 +88,8 @@ public class ForumActivity extends
}
@Override
protected void onActivityResult(int request, int result, Intent data) {
protected void onActivityResult(int request, int result,
@Nullable Intent data) {
super.onActivityResult(request, result, data);
if (request == REQUEST_SHARE_FORUM && result == RESULT_OK) {

View File

@@ -8,6 +8,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
@@ -21,6 +22,7 @@ import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
import static org.briarproject.briar.android.util.UiUtils.formatDate;
@NotNullByDefault
class ForumListAdapter
extends BriarAdapter<ForumListItem, ForumListAdapter.ForumViewHolder> {

View File

@@ -94,9 +94,8 @@ public class ForumListFragment extends BaseEventFragment implements
@Nullable Bundle savedInstanceState) {
requireActivity().setTitle(R.string.forums_button);
View contentView =
inflater.inflate(R.layout.fragment_forum_list, container,
false);
View contentView = inflater.inflate(R.layout.fragment_forum_list,
container, false);
adapter = new ForumListAdapter(requireActivity());

View File

@@ -4,7 +4,9 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.forum.Forum;
import org.briarproject.briar.api.forum.ForumPostHeader;
// This class is NOT thread-safe
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
class ForumListItem {
private final Forum forum;

View File

@@ -63,6 +63,7 @@ public abstract class BaseFragment extends Fragment
}
public interface BaseFragmentListener {
@Deprecated
void runOnDbThread(Runnable runnable);

View File

@@ -11,6 +11,8 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import static java.util.Objects.requireNonNull;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@@ -38,9 +40,7 @@ public class ErrorFragment extends BaseFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args == null) throw new AssertionError();
Bundle args = requireNonNull(getArguments());
errorMessage = args.getString(ERROR_MSG);
}
@@ -49,8 +49,7 @@ public class ErrorFragment extends BaseFragment {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater
.inflate(R.layout.fragment_error, container, false);
View v = inflater.inflate(R.layout.fragment_error, container, false);
TextView msg = v.findViewById(R.id.errorMessage);
msg.setText(errorMessage);
return v;

View File

@@ -2,8 +2,11 @@ package org.briarproject.briar.android.introduction;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -11,11 +14,13 @@ import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener
import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class IntroductionActivity extends BriarActivity
implements BaseFragmentListener {
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();

View File

@@ -95,7 +95,6 @@ public class IntroductionMessageFragment extends BaseFragment
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// change toolbar text
ActionBar actionBar = introductionActivity.getSupportActionBar();
if (actionBar != null) {
@@ -126,11 +125,6 @@ public class IntroductionMessageFragment extends BaseFragment
return v;
}
@Override
public void onStart() {
super.onStart();
}
@Override
public String getUniqueTag() {
return TAG;

View File

@@ -16,8 +16,7 @@ import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.IOException;
import java.util.List;
@@ -43,8 +42,7 @@ import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
@SuppressWarnings("deprecation")
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
AutoFocusCallback, View.OnClickListener {
@@ -61,7 +59,9 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
@Nullable
private Camera camera = null;
private int cameraIndex = 0;
@Nullable
private PreviewConsumer previewConsumer = null;
@Nullable
private Surface surface = null;
private int displayOrientation = 0, surfaceWidth = 0, surfaceHeight = 0;
private boolean previewStarted = false;
@@ -126,6 +126,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
} catch (RuntimeException e) {
throw new CameraException(e);
}
requireNonNull(camera);
setDisplayOrientation(getScreenRotationDegrees());
// Use barcode scene mode if it's available
Parameters params = requireNonNull(camera).getParameters();
@@ -214,7 +215,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
private void startConsumer() throws CameraException {
if (camera == null) throw new CameraException("Camera is null");
startAutoFocus();
previewConsumer.start(camera, cameraIndex);
requireNonNull(previewConsumer).start(camera, cameraIndex);
}
@UiThread
@@ -234,7 +235,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
private void stopConsumer() throws CameraException {
if (camera == null) throw new CameraException("Camera is null");
cancelAutoFocus();
previewConsumer.stop();
requireNonNull(previewConsumer).stop();
}
@UiThread

View File

@@ -22,6 +22,7 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
import static android.widget.Toast.LENGTH_LONG;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
@@ -48,7 +49,8 @@ public class ContactExchangeActivity extends KeyAgreementActivity implements
@Override
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
getSupportActionBar().setTitle(R.string.add_contact_title);
requireNonNull(getSupportActionBar())
.setTitle(R.string.add_contact_title);
}
private void startContactExchange(KeyAgreementResult result) {
@@ -97,9 +99,8 @@ public class ContactExchangeActivity extends KeyAgreementActivity implements
@Override
public void contactExchangeFailed() {
runOnUiThreadUnlessDestroyed(() -> {
showErrorFragment(R.string.connection_error_explanation);
});
runOnUiThreadUnlessDestroyed(() ->
showErrorFragment(R.string.connection_error_explanation));
}
@UiThread

View File

@@ -18,6 +18,7 @@ import org.briarproject.briar.android.util.UiUtils;
import javax.inject.Inject;
import static java.util.Objects.requireNonNull;
import static org.briarproject.briar.android.util.UiUtils.onSingleLinkClick;
@MethodsNotNullByDefault
@@ -59,10 +60,7 @@ public class ContactExchangeErrorFragment extends BaseFragment {
// set humanized error message
TextView explanation = v.findViewById(R.id.errorMessage);
Bundle args = getArguments();
if (args == null) {
throw new IllegalArgumentException("Use newInstance()");
}
Bundle args = requireNonNull(getArguments());
explanation.setText(args.getString(ERROR_MSG));
// make feedback link clickable

View File

@@ -54,7 +54,6 @@ public class IntroFragment extends BaseFragment {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_keyagreement_id, container,
false);
scrollView = v.findViewById(R.id.scrollView);

View File

@@ -5,6 +5,7 @@ import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.Size;
import android.os.AsyncTask;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import com.google.zxing.BinaryBitmap;
@@ -16,9 +17,7 @@ import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import java.util.logging.Logger;
@@ -28,8 +27,7 @@ import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger;
@SuppressWarnings("deprecation")
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
private static final Logger LOG = getLogger(QrCodeDecoder.class.getName());
@@ -37,6 +35,7 @@ class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
private final Reader reader = new QRCodeReader();
private final ResultCallback callback;
@Nullable
private Camera camera = null;
private int cameraIndex = 0;

View File

@@ -1,7 +1,7 @@
package org.briarproject.briar.android.login;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.text.TextWatcher;
@@ -15,6 +15,8 @@ import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -27,6 +29,8 @@ import static android.view.View.VISIBLE;
import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK;
import static org.briarproject.briar.android.util.UiUtils.setError;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class ChangePasswordActivity extends BriarActivity
implements OnClickListener, OnEditorActionListener {
@@ -44,7 +48,7 @@ public class ChangePasswordActivity extends BriarActivity
private ProgressBar progress;
@Override
public void onCreate(Bundle state) {
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
setContentView(R.layout.activity_change_password);
@@ -127,7 +131,7 @@ public class ChangePasswordActivity extends BriarActivity
newPassword.getText().toString(),
new UiResultHandler<Boolean>(this) {
@Override
public void onResultUi(@NonNull Boolean result) {
public void onResultUi(Boolean result) {
if (result) {
Toast.makeText(ChangePasswordActivity.this,
R.string.password_changed,

View File

@@ -76,7 +76,8 @@ public class DozeFragment extends SetupFragment
}
@Override
public void onActivityResult(int request, int result, Intent data) {
public void onActivityResult(int request, int result,
@Nullable Intent data) {
super.onActivityResult(request, result, data);
if (request == REQUEST_DOZE_WHITELISTING) {
if (!dozeView.needsToBeShown() || secondAttempt) {

View File

@@ -12,6 +12,7 @@ import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState;
import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
@@ -24,6 +25,7 @@ import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleS
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.MIGRATING_DATABASE;
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STARTING_SERVICES;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class OpenDatabaseActivity extends BriarActivity
implements EventListener {

View File

@@ -2,7 +2,7 @@ package org.briarproject.briar.android.login;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
@@ -13,6 +13,8 @@ import android.widget.EditText;
import android.widget.ProgressBar;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BaseActivity;
@@ -28,6 +30,8 @@ import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
import static org.briarproject.briar.android.util.UiUtils.enterPressed;
import static org.briarproject.briar.android.util.UiUtils.setError;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class PasswordActivity extends BaseActivity {
@Inject
@@ -48,7 +52,7 @@ public class PasswordActivity extends BaseActivity {
private EditText password;
@Override
public void onCreate(Bundle state) {
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
// fade-in after splash screen instead of default animation
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
@@ -146,7 +150,7 @@ public class PasswordActivity extends BaseActivity {
passwordController.validatePassword(password.getText().toString(),
new UiResultHandler<Boolean>(this) {
@Override
public void onResultUi(@NonNull Boolean result) {
public void onResultUi(Boolean result) {
if (result) {
setResult(RESULT_OK);
supportFinishAfterTransition();

View File

@@ -84,6 +84,7 @@ abstract class PowerView extends ConstraintLayout {
setChecked(ss.value[0]); // also calls listener
}
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public abstract boolean needsToBeShown();
public void setChecked(boolean checked) {

View File

@@ -27,6 +27,7 @@ import static android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_CANCEL
import static android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED;
import static android.os.Build.VERSION.SDK_INT;
import static android.view.View.INVISIBLE;
import static java.util.Objects.requireNonNull;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_KEYGUARD_UNLOCK;
import static org.briarproject.briar.android.util.UiUtils.hasKeyguardLock;
@@ -77,7 +78,7 @@ public class UnlockActivity extends BaseActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
@Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_KEYGUARD_UNLOCK) {
if (resultCode == RESULT_OK) unlock();
@@ -169,9 +170,8 @@ public class UnlockActivity extends BaseActivity {
}
private void requestKeyguardUnlock() {
KeyguardManager keyguardManager =
(KeyguardManager) getSystemService(KEYGUARD_SERVICE);
if (keyguardManager == null) throw new AssertionError();
KeyguardManager keyguardManager = (KeyguardManager)
requireNonNull(getSystemService(KEYGUARD_SERVICE));
Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(
SDK_INT < 23 ? getString(R.string.lock_unlock_verbose) :
getString(R.string.lock_unlock), null);

View File

@@ -2,18 +2,24 @@ package org.briarproject.briar.android.logout;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import java.util.logging.Logger;
import static android.os.Build.VERSION.SDK_INT;
import static java.util.logging.Logger.getLogger;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class ExitActivity extends Activity {
private static final Logger LOG = getLogger(ExitActivity.class.getName());
@Override
public void onCreate(Bundle state) {
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
if (SDK_INT >= 21) finishAndRemoveTask();
else finish();

View File

@@ -2,11 +2,17 @@ package org.briarproject.briar.android.logout;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class HideUiActivity extends Activity {
@Override
public void onCreate(Bundle state) {
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
finish();
}

View File

@@ -1,18 +1,23 @@
package org.briarproject.briar.android.panic;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.view.MenuItem;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class PanicPreferencesActivity extends BriarActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {

View File

@@ -3,9 +3,12 @@ package org.briarproject.briar.android.panic;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.preference.PreferenceManager;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.system.AndroidExecutor;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -24,6 +27,8 @@ import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_LOCK;
import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_PURGE;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class PanicResponderActivity extends BriarActivity {
private static final Logger LOG =
@@ -35,7 +40,7 @@ public class PanicResponderActivity extends BriarActivity {
protected AndroidExecutor androidExecutor;
@Override
public void onCreate(Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TrustedIntents trustedIntents = TrustedIntents.get(this);

View File

@@ -172,7 +172,8 @@ public class GroupActivity extends
}
@Override
protected void onActivityResult(int request, int result, Intent data) {
protected void onActivityResult(int request, int result,
@Nullable Intent data) {
if (request == REQUEST_GROUP_INVITE && result == RESULT_OK) {
displaySnackbar(R.string.groups_invitation_sent);
} else super.onActivityResult(request, result, data);

View File

@@ -3,9 +3,11 @@ package org.briarproject.briar.android.privategroup.invitation;
import android.content.Context;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.sharing.InvitationAdapter;
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem;
@NotNullByDefault
class GroupInvitationAdapter extends
InvitationAdapter<GroupInvitationItem, GroupInvitationViewHolder> {

View File

@@ -8,7 +8,9 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.privategroup.GroupMessageHeader;
import org.briarproject.briar.api.privategroup.PrivateGroup;
// This class is not thread-safe
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@NotNullByDefault
class GroupItem {

View File

@@ -5,8 +5,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
@@ -14,8 +13,7 @@ import org.briarproject.briar.android.util.BriarAdapter;
import static android.support.v7.util.SortedList.INVALID_POSITION;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class GroupListAdapter extends BriarAdapter<GroupItem, GroupViewHolder> {
private final OnGroupRemoveClickListener listener;

View File

@@ -8,8 +8,7 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
@@ -22,8 +21,7 @@ import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
import static org.briarproject.briar.android.util.UiUtils.formatDate;
import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
class GroupViewHolder extends RecyclerView.ViewHolder {
private final static float ALPHA = 0.42f;

View File

@@ -1,16 +1,17 @@
package org.briarproject.briar.android.privategroup.memberlist;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
@NotNullByDefault
class MemberListAdapter extends
BriarAdapter<MemberListItem, MemberListItemHolder> {
@@ -18,18 +19,15 @@ class MemberListAdapter extends
super(context, MemberListItem.class);
}
@NonNull
@Override
public MemberListItemHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
int i) {
public MemberListItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(ctx).inflate(
R.layout.list_item_group_member, viewGroup, false);
return new MemberListItemHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MemberListItemHolder ui,
int position) {
public void onBindViewHolder(MemberListItemHolder ui, int position) {
ui.bind(items.get(position));
}
@@ -44,10 +42,9 @@ class MemberListAdapter extends
@Override
public boolean areContentsTheSame(MemberListItem m1, MemberListItem m2) {
if (m1.isOnline() != m2.isOnline()) return false;
if (m1.getContactId() != m2.getContactId()) return false;
if (m1.getStatus() != m2.getStatus()) return false;
return true;
return m1.isOnline() == m2.isOnline() &&
m1.getContactId() == m2.getContactId() &&
m1.getStatus() == m2.getStatus();
}
@Override

View File

@@ -1,5 +1,6 @@
package org.briarproject.briar.android.reporting;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
@@ -11,10 +12,10 @@ import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.support.annotation.NonNull;
import org.acra.builder.ReportBuilder;
import org.acra.builder.ReportPrimer;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.BuildConfig;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.logging.BriefLogFormatter;
@@ -41,15 +42,17 @@ import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
import static android.os.Build.VERSION.SDK_INT;
import static java.util.Collections.unmodifiableMap;
import static java.util.Objects.requireNonNull;
import static org.briarproject.bramble.util.PrivacyUtils.scrubInetAddress;
import static org.briarproject.bramble.util.PrivacyUtils.scrubMacAddress;
import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
@SuppressLint("HardwareIds")
@NotNullByDefault
public class BriarReportPrimer implements ReportPrimer {
@Override
public void primeReport(@NonNull Context ctx,
@NonNull ReportBuilder builder) {
public void primeReport(Context ctx, ReportBuilder builder) {
CustomDataTask task = new CustomDataTask(ctx);
FutureTask<Map<String, String>> futureTask = new FutureTask<>(task);
// Use a new thread as the Android executor thread may have died
@@ -85,8 +88,8 @@ public class BriarReportPrimer implements ReportPrimer {
customData.put("Log", sb.toString());
// System memory
Object o = ctx.getSystemService(ACTIVITY_SERVICE);
ActivityManager am = (ActivityManager) o;
ActivityManager am = (ActivityManager)
requireNonNull(ctx.getSystemService(ACTIVITY_SERVICE));
ActivityManager.MemoryInfo mem = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mem);
String systemMemory;
@@ -127,8 +130,8 @@ public class BriarReportPrimer implements ReportPrimer {
customData.put("External storage", external);
// Is mobile data available?
o = ctx.getSystemService(CONNECTIVITY_SERVICE);
ConnectivityManager cm = (ConnectivityManager) o;
ConnectivityManager cm = (ConnectivityManager)
requireNonNull(ctx.getSystemService(CONNECTIVITY_SERVICE));
NetworkInfo mobile = cm.getNetworkInfo(TYPE_MOBILE);
boolean mobileAvailable = mobile != null && mobile.isAvailable();
// Is mobile data enabled?
@@ -162,8 +165,8 @@ public class BriarReportPrimer implements ReportPrimer {
NetworkInfo wifi = cm.getNetworkInfo(TYPE_WIFI);
boolean wifiAvailable = wifi != null && wifi.isAvailable();
// Is wifi enabled?
o = ctx.getApplicationContext().getSystemService(WIFI_SERVICE);
WifiManager wm = (WifiManager) o;
WifiManager wm = (WifiManager)
ctx.getApplicationContext().getSystemService(WIFI_SERVICE);
boolean wifiEnabled = wm != null &&
wm.getWifiState() == WIFI_STATE_ENABLED;
// Is wifi connected?

View File

@@ -1,11 +1,12 @@
package org.briarproject.briar.android.reporting;
import android.content.Context;
import android.support.annotation.NonNull;
import org.acra.collector.CrashReportData;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.reporting.DevReporter;
import org.briarproject.bramble.util.AndroidUtils;
import org.briarproject.briar.android.AndroidComponent;
@@ -17,6 +18,8 @@ import javax.inject.Inject;
import static org.acra.ReportField.REPORT_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class BriarReportSender implements ReportSender {
private final AndroidComponent component;
@@ -29,8 +32,7 @@ public class BriarReportSender implements ReportSender {
}
@Override
public void send(@NonNull Context ctx,
@NonNull CrashReportData errorContent)
public void send(Context ctx, CrashReportData errorContent)
throws ReportSenderException {
component.inject(this);
String crashReport = errorContent.toJSON().toString();

View File

@@ -1,19 +1,18 @@
package org.briarproject.briar.android.reporting;
import android.content.Context;
import android.support.annotation.NonNull;
import org.acra.config.ACRAConfiguration;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderFactory;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.BriarApplication;
@NotNullByDefault
public class BriarReportSenderFactory implements ReportSenderFactory {
@NonNull
@Override
public ReportSender create(@NonNull Context ctx,
@NonNull ACRAConfiguration config) {
public ReportSender create(Context ctx, ACRAConfiguration config) {
// ACRA passes in the Application as context
BriarApplication app = (BriarApplication) ctx;
return new BriarReportSender(app.getApplicationComponent());

View File

@@ -74,8 +74,9 @@ public class DevReportActivity extends BaseCrashReportDialog
requiredFields.add(STACK_TRACE);
}
private final Set<ReportField> excludedFields = new HashSet<>();
private AppCompatDelegate delegate;
private Set<ReportField> excludedFields = new HashSet<>();
private EditText userCommentView = null;
private EditText userEmailView = null;
private CheckBox includeDebugReport = null;

View File

@@ -1,18 +1,23 @@
package org.briarproject.briar.android.settings;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.view.MenuItem;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class SettingsActivity extends BriarActivity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {

View File

@@ -9,6 +9,7 @@ import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v14.preference.SwitchPreference;
import android.support.v4.content.ContextCompat;
@@ -242,8 +243,9 @@ public class SettingsFragment extends PreferenceFragmentCompat
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
ColorDrawable divider = new ColorDrawable(
ContextCompat.getColor(requireContext(), R.color.divider));
@@ -630,7 +632,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
}
@Override
public void onActivityResult(int request, int result, Intent data) {
public void onActivityResult(int request, int result,
@Nullable Intent data) {
super.onActivityResult(request, result, data);
if (request == REQUEST_RINGTONE && result == RESULT_OK) {
Settings s = new Settings();

View File

@@ -40,7 +40,6 @@ public abstract class BaseMessageFragment extends BaseFragment
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// inflate view
View v = inflater.inflate(R.layout.fragment_message, container,
false);

View File

@@ -1,15 +1,16 @@
package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
import org.briarproject.briar.api.sharing.InvitationItem;
@NotNullByDefault
public abstract class InvitationAdapter<I extends InvitationItem, VH extends InvitationViewHolder<I>>
extends BriarAdapter<I, VH> {
@@ -27,7 +28,7 @@ public abstract class InvitationAdapter<I extends InvitationItem, VH extends Inv
}
@Override
public void onBindViewHolder(@NonNull VH ui, int position) {
public void onBindViewHolder(VH ui, int position) {
I item = getItemAt(position);
if (item == null) return;
ui.onBind(item, listener);

View File

@@ -25,7 +25,6 @@ public class ShareForumMessageFragment extends BaseMessageFragment {
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
setTitle(R.string.forum_share_button);
return super.onCreateView(inflater, container, savedInstanceState);
}

View File

@@ -3,8 +3,10 @@ package org.briarproject.briar.android.sharing;
import android.content.Context;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.api.sharing.SharingInvitationItem;
@NotNullByDefault
class SharingInvitationAdapter extends
InvitationAdapter<SharingInvitationItem, SharingInvitationViewHolder> {
@@ -14,8 +16,7 @@ class SharingInvitationAdapter extends
}
@Override
public SharingInvitationViewHolder onCreateViewHolder(
ViewGroup parent,
public SharingInvitationViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
return new SharingInvitationViewHolder(getView(parent));
}

View File

@@ -5,11 +5,13 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.contact.BaseContactListAdapter;
import org.briarproject.briar.android.contact.ContactItem;
import org.briarproject.briar.android.contact.ContactItemViewHolder;
@NotNullByDefault
class SharingStatusAdapter extends
BaseContactListAdapter<ContactItem, ContactItemViewHolder<ContactItem>> {

View File

@@ -3,10 +3,13 @@ package org.briarproject.briar.android.splash;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.preference.PreferenceManager;
import android.transition.Fade;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.system.AndroidExecutor;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
@@ -24,6 +27,8 @@ import static android.os.Build.VERSION.SDK_INT;
import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class SplashScreenActivity extends BaseActivity {
private static final Logger LOG =
@@ -37,7 +42,7 @@ public class SplashScreenActivity extends BaseActivity {
protected AndroidExecutor androidExecutor;
@Override
public void onCreate(Bundle state) {
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
if (SDK_INT >= 21) {

View File

@@ -2,12 +2,15 @@ package org.briarproject.briar.android.test;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.view.MenuItem;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
@@ -18,6 +21,8 @@ import javax.inject.Inject;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class TestDataActivity extends BriarActivity {
@Inject
@@ -39,8 +44,8 @@ public class TestDataActivity extends BriarActivity {
private SeekBar forumPostsSeekBar;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
public void onCreate(@Nullable Bundle state) {
super.onCreate(state);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {

View File

@@ -83,6 +83,7 @@ public abstract class ThreadItem implements MessageNode {
this.level = level;
}
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public boolean isRead() {
return isRead;
}

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.android.threaded;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -8,6 +7,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.VersionedAdapter;
@@ -19,6 +19,7 @@ import javax.annotation.Nullable;
import static android.support.v7.widget.RecyclerView.NO_POSITION;
@UiThread
@NotNullByDefault
public class ThreadItemAdapter<I extends ThreadItem>
extends RecyclerView.Adapter<BaseThreadItemViewHolder<I>>
implements VersionedAdapter {
@@ -37,18 +38,16 @@ public class ThreadItemAdapter<I extends ThreadItem>
this.layoutManager = layoutManager;
}
@NonNull
@Override
public BaseThreadItemViewHolder<I> onCreateViewHolder(@NonNull
ViewGroup parent, int viewType) {
public BaseThreadItemViewHolder<I> onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_thread, parent, false);
return new ThreadPostViewHolder<>(v);
}
@Override
public void onBindViewHolder(@NonNull BaseThreadItemViewHolder<I> ui,
int position) {
public void onBindViewHolder(BaseThreadItemViewHolder<I> ui, int position) {
I item = items.get(position);
ui.bind(item, listener);
}
@@ -118,7 +117,7 @@ public class ThreadItemAdapter<I extends ThreadItem>
void setHighlightedItem(@Nullable MessageId id) {
for (int i = 0; i < items.size(); i++) {
I item = items.get(i);
if (id != null && item.getId().equals(id)) {
if (item.getId().equals(id)) {
item.setHighlighted(true);
notifyItemChanged(i, item);
} else if (item.isHighlighted()) {

View File

@@ -6,12 +6,15 @@ import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView.Adapter;
import android.support.v7.widget.RecyclerView.ViewHolder;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.util.Collection;
import javax.annotation.Nullable;
import static android.support.v7.util.SortedList.INVALID_POSITION;
@NotNullByDefault
public abstract class BriarAdapter<T, V extends ViewHolder>
extends Adapter<V> implements VersionedAdapter {

View File

@@ -42,8 +42,7 @@ import org.acra.ACRA;
import org.briarproject.bramble.api.contact.Contact;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.identity.Author;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.system.AndroidExecutor;
import org.briarproject.briar.R;
import org.briarproject.briar.android.view.ArticleMovementMethod;
@@ -76,11 +75,11 @@ import static android.text.format.DateUtils.YEAR_IN_MILLIS;
import static android.view.KeyEvent.ACTION_DOWN;
import static android.view.KeyEvent.KEYCODE_ENTER;
import static android.view.inputmethod.EditorInfo.IME_NULL;
import static java.util.Objects.requireNonNull;
import static org.briarproject.briar.BuildConfig.APPLICATION_ID;
import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
public class UiUtils {
public static final long MIN_DATE_RESOLUTION = MINUTE_IN_MILLIS;
@@ -242,9 +241,9 @@ public class UiUtils {
public static boolean needsDozeWhitelisting(Context ctx) {
if (SDK_INT < 23) return false;
PowerManager pm = (PowerManager) ctx.getSystemService(POWER_SERVICE);
PowerManager pm = (PowerManager)
requireNonNull(ctx.getSystemService(POWER_SERVICE));
String packageName = ctx.getPackageName();
if (pm == null) throw new AssertionError();
return !pm.isIgnoringBatteryOptimizations(packageName);
}

View File

@@ -25,6 +25,7 @@ import static android.graphics.Typeface.BOLD;
import static android.util.TypedValue.COMPLEX_UNIT_PX;
import static org.briarproject.bramble.api.identity.AuthorInfo.Status.NONE;
import static org.briarproject.bramble.api.identity.AuthorInfo.Status.OURSELVES;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
import static org.briarproject.briar.android.util.UiUtils.formatDate;
import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
import static org.briarproject.briar.android.util.UiUtils.resolveAttribute;
@@ -49,8 +50,8 @@ public class AuthorView extends ConstraintLayout {
public AuthorView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = (LayoutInflater) requireNonNull(
context.getSystemService(LAYOUT_INFLATER_SERVICE));
inflater.inflate(R.layout.author_view, this, true);
avatar = findViewById(R.id.avatar);

View File

@@ -174,9 +174,9 @@ public class KeyboardAwareLinearLayout extends LinearLayout {
}
private int getDeviceRotation() {
WindowManager windowManager =
(WindowManager) getContext().getSystemService(WINDOW_SERVICE);
return requireNonNull(windowManager).getDefaultDisplay().getRotation();
WindowManager windowManager = (WindowManager) requireNonNull(
getContext().getSystemService(WINDOW_SERVICE));
return windowManager.getDefaultDisplay().getRotation();
}
private int getKeyboardLandscapeHeight() {

View File

@@ -7,8 +7,7 @@ import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.Button;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.R;
import javax.annotation.Nullable;
@@ -17,8 +16,7 @@ import static android.view.Gravity.BOTTOM;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
@NotNullByDefault
public class LargeTextInputView extends TextInputView {
public LargeTextInputView(Context context) {

View File

@@ -50,6 +50,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/errorTitle"
tools:text="@string/qr_code_unsupported"/>
tools:text="@string/startup_failed_service_error"/>
</android.support.constraint.ConstraintLayout>

View File

@@ -23,7 +23,6 @@ import org.robolectric.annotation.Config;
import static java.util.Arrays.asList;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.briarproject.bramble.api.identity.AuthorInfo.Status.UNKNOWN;
import static org.briarproject.bramble.test.TestUtils.getAuthor;
import static org.briarproject.bramble.test.TestUtils.getRandomId;
@@ -103,18 +102,18 @@ public class ForumActivityTest {
ThreadItemAdapter<ForumItem> adapter = forumActivity.getAdapter();
assertNotNull(adapter);
assertEquals(6, adapter.getItemCount());
assertTrue(dummyData.get(0).getText()
.equals(adapter.getItemAt(0).getText()));
assertTrue(dummyData.get(1).getText()
.equals(adapter.getItemAt(1).getText()));
assertTrue(dummyData.get(2).getText()
.equals(adapter.getItemAt(2).getText()));
assertTrue(dummyData.get(3).getText()
.equals(adapter.getItemAt(3).getText()));
assertTrue(dummyData.get(4).getText()
.equals(adapter.getItemAt(4).getText()));
assertTrue(dummyData.get(5).getText()
.equals(adapter.getItemAt(5).getText()));
assertEquals(dummyData.get(0).getText(),
adapter.getItemAt(0).getText());
assertEquals(dummyData.get(1).getText(),
adapter.getItemAt(1).getText());
assertEquals(dummyData.get(2).getText(),
adapter.getItemAt(2).getText());
assertEquals(dummyData.get(3).getText(),
adapter.getItemAt(3).getText());
assertEquals(dummyData.get(4).getText(),
adapter.getItemAt(4).getText());
assertEquals(dummyData.get(5).getText(),
adapter.getItemAt(5).getText());
}
}

View File

@@ -15,7 +15,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static java.util.Objects.requireNonNull;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.NONE;
import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG;
import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK;
@@ -46,7 +49,7 @@ public class PasswordFragmentTest {
MockitoAnnotations.initMocks(this);
startFragment(passwordFragment, SetupActivity.class);
View v = passwordFragment.getView();
View v = requireNonNull(passwordFragment.getView());
passwordEntry = v.findViewById(R.id.password_entry);
passwordConfirmation = v.findViewById(R.id.password_confirm);
passwordConfirmationWrapper =
@@ -67,7 +70,7 @@ public class PasswordFragmentTest {
passwordEntry.setText(safePass);
passwordConfirmation.setText(safePass);
// Confirm that the create account button is clickable
assertEquals(createAccountButton.isEnabled(), true);
assertTrue(createAccountButton.isEnabled());
createAccountButton.performClick();
// assert controller has been called properly
@@ -98,7 +101,7 @@ public class PasswordFragmentTest {
// Password mismatch
passwordEntry.setText("really.safe.password");
passwordConfirmation.setText("really.safe.pass");
assertEquals(createAccountButton.isEnabled(), false);
assertFalse(createAccountButton.isEnabled());
assertEquals(passwordConfirmationWrapper.getError(),
passwordFragment.getString(R.string.passwords_do_not_match));
// Button enabled
@@ -108,7 +111,7 @@ public class PasswordFragmentTest {
assertNotEquals(passwordConfirmationWrapper.getError(),
passwordFragment.getString(R.string.passwords_do_not_match));
// Passwords match, so button should be enabled
assertEquals(createAccountButton.isEnabled(), true);
assertTrue(createAccountButton.isEnabled());
}
}