mirror of
https://github.com/nextcloud/notes-android.git
synced 2024-10-25 14:15:48 +03:00
Added some null checks & more defensive programming
This commit is contained in:
parent
c2aef80d9d
commit
b9cd8c3592
9 changed files with 121 additions and 129 deletions
|
@ -180,26 +180,20 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
|
|||
private void setupNotesList() {
|
||||
initList();
|
||||
// Pull to Refresh
|
||||
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
swipeRefreshLayout.setOnRefreshListener(() -> {
|
||||
if (db.getNoteServerSyncHelper().isSyncPossible()) {
|
||||
synchronize();
|
||||
} else {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
Toast.makeText(getApplicationContext(), getString(R.string.error_sync, getString(NotesClientUtil.LoginStatus.NO_NETWORK.str)), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Floating Action Button
|
||||
fabCreate.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
fabCreate.setOnClickListener((View view) -> {
|
||||
Intent createIntent = new Intent(getApplicationContext(), EditNoteActivity.class);
|
||||
createIntent.putExtra(EditNoteActivity.PARAM_CATEGORY, navigationSelection);
|
||||
startActivityForResult(createIntent, create_note_cmd);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -373,12 +367,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
|
|||
|
||||
this.updateUsernameInDrawer();
|
||||
final NotesListViewActivity that = this;
|
||||
this.account.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
this.account.setOnClickListener((View v) -> {
|
||||
Intent settingsIntent = new Intent(that, SettingsActivity.class);
|
||||
startActivityForResult(settingsIntent, server_settings);
|
||||
}
|
||||
});
|
||||
|
||||
adapterMenu.setItems(itemsMenu);
|
||||
|
@ -424,14 +415,11 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
|
|||
refreshLists();
|
||||
Log.v("Note", "Item deleted through swipe ----------------------------------------------");
|
||||
Snackbar.make(swipeRefreshLayout, R.string.action_note_deleted, Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.action_undo, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
.setAction(R.string.action_undo, (View v) -> {
|
||||
db.addNoteAndSync(dbNote);
|
||||
refreshLists();
|
||||
Snackbar.make(swipeRefreshLayout, R.string.action_note_restored, Snackbar.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
})
|
||||
.show();
|
||||
break;
|
||||
|
@ -485,15 +473,12 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
|
|||
query = searchView.getQuery();
|
||||
}
|
||||
|
||||
LoadNotesListTask.NotesLoadedListener callback = new LoadNotesListTask.NotesLoadedListener() {
|
||||
@Override
|
||||
public void onNotesLoaded(List<Item> notes, boolean showCategory) {
|
||||
LoadNotesListTask.NotesLoadedListener callback = (List<Item> notes, boolean showCategory) -> {
|
||||
adapter.setShowCategory(showCategory);
|
||||
adapter.setItemList(notes);
|
||||
if (scrollToTop) {
|
||||
listView.scrollToPosition(0);
|
||||
}
|
||||
}
|
||||
};
|
||||
new LoadNotesListTask(getApplicationContext(), callback, navigationSelection, query).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
new LoadCategoryListTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
|
@ -534,11 +519,8 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
|
|||
if (currentVisibility == View.VISIBLE) {
|
||||
fabCreate.hide();
|
||||
} else {
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
new Handler().postDelayed(() -> {
|
||||
fabCreate.show();
|
||||
}
|
||||
}, 150);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,9 +6,6 @@ import android.graphics.drawable.Drawable;
|
|||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
|
@ -19,6 +16,10 @@ import android.widget.EditText;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import at.bitfire.cert4android.CustomCertManager;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
@ -76,11 +77,8 @@ public class SettingsActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
|
||||
field_url.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
field_url.setOnFocusChangeListener((View v, boolean hasFocus) -> {
|
||||
new URLValidatorAsyncTask().execute(NotesClientUtil.formatURL(field_url.getText().toString()));
|
||||
}
|
||||
});
|
||||
|
||||
field_url.addTextChangedListener(new TextWatcher() {
|
||||
|
@ -128,27 +126,18 @@ public class SettingsActivity extends AppCompatActivity {
|
|||
field_username.setText(preferences.getString(SETTINGS_USERNAME, DEFAULT_SETTINGS));
|
||||
old_password = preferences.getString(SETTINGS_PASSWORD, DEFAULT_SETTINGS);
|
||||
|
||||
field_password.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
field_password.setOnEditorActionListener((TextView v, int actionId, KeyEvent event) -> {
|
||||
login();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
field_password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
field_password.setOnFocusChangeListener((View v, boolean hasFocus) -> {
|
||||
setPasswordHint(hasFocus);
|
||||
}
|
||||
});
|
||||
setPasswordHint(false);
|
||||
|
||||
btn_submit.setEnabled(false);
|
||||
btn_submit.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
btn_submit.setOnClickListener((View v) -> {
|
||||
login();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.content.Intent;
|
|||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import it.niedermann.owncloud.notes.R;
|
||||
|
@ -55,15 +56,15 @@ public class NoteListWidget extends AppWidgetProvider {
|
|||
NotesListViewActivity.class.getName()));
|
||||
|
||||
// Open the main app if the user taps the widget header
|
||||
PendingIntent openAppI = PendingIntent.getActivity( context, 0, intent,
|
||||
PendingIntent openAppI = PendingIntent.getActivity(context, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
// Launch create note activity if user taps "+" icon on header
|
||||
PendingIntent newNoteI = PendingIntent.getActivity( context,0,
|
||||
PendingIntent newNoteI = PendingIntent.getActivity(context, 0,
|
||||
(new Intent(context, EditNoteActivity.class)),
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
PendingIntent templatePI = PendingIntent.getActivity(context,0,
|
||||
PendingIntent templatePI = PendingIntent.getActivity(context, 0,
|
||||
(new Intent(context, EditNoteActivity.class)),
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
|
@ -104,13 +105,21 @@ public class NoteListWidget extends AppWidgetProvider {
|
|||
super.onReceive(context, intent);
|
||||
AppWidgetManager awm = AppWidgetManager.getInstance(context);
|
||||
|
||||
if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) {
|
||||
if (intent.getAction() != null) {
|
||||
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
|
||||
if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
|
||||
updateAppWidget(context, awm, new int[] { intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1) });
|
||||
if (intent.getExtras() != null) {
|
||||
updateAppWidget(context, awm, new int[]{intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)});
|
||||
} else {
|
||||
Log.w(NoteListWidget.class.getSimpleName(), "intent.getExtras() is null");
|
||||
}
|
||||
} else {
|
||||
updateAppWidget(context, awm, awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.w(NoteListWidget.class.getSimpleName(), "intent.getAction() is null");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -129,10 +138,11 @@ public class NoteListWidget extends AppWidgetProvider {
|
|||
}
|
||||
|
||||
private static String getWidgetTitle(Context context, int displayMode, String category) {
|
||||
switch (displayMode)
|
||||
{
|
||||
case NoteListWidget.NLW_DISPLAY_ALL: return context.getString(R.string.app_name);
|
||||
case NoteListWidget.NLW_DISPLAY_STARRED: return context.getString(R.string.label_favorites);
|
||||
switch (displayMode) {
|
||||
case NoteListWidget.NLW_DISPLAY_ALL:
|
||||
return context.getString(R.string.app_name);
|
||||
case NoteListWidget.NLW_DISPLAY_STARRED:
|
||||
return context.getString(R.string.label_favorites);
|
||||
case NoteListWidget.NLW_DISPLAY_CATEGORY:
|
||||
if (category.equals("")) {
|
||||
return context.getString(R.string.action_uncategorized);
|
||||
|
|
|
@ -8,7 +8,7 @@ import android.content.Context;
|
|||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
@ -17,6 +17,7 @@ import android.widget.Filter;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import it.niedermann.owncloud.notes.R;
|
||||
|
@ -68,7 +69,7 @@ public class CategoryDialogFragment extends DialogFragment {
|
|||
public void onClick(DialogInterface dialog, int which) {
|
||||
CategoryDialogListener listener;
|
||||
Fragment target = getTargetFragment();
|
||||
if (target != null && target instanceof CategoryDialogListener) {
|
||||
if (target instanceof CategoryDialogListener) {
|
||||
listener = (CategoryDialogListener) target;
|
||||
} else {
|
||||
listener = (CategoryDialogListener) getActivity();
|
||||
|
@ -88,7 +89,11 @@ public class CategoryDialogFragment extends DialogFragment {
|
|||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
if (getDialog().getWindow() != null) {
|
||||
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
|
||||
} else {
|
||||
Log.w(CategoryDialogFragment.class.getSimpleName(), "can not set SOFT_INPUT_STATE_ALWAYAS_VISIBLE because getWindow() == null");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -109,6 +109,7 @@ public class NoteEditFragment extends BaseNoteFragment {
|
|||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
if(getView() != null) {
|
||||
ButterKnife.bind(this, getView());
|
||||
|
||||
setActiveTextView(editContent);
|
||||
|
@ -144,9 +145,12 @@ public class NoteEditFragment extends BaseNoteFragment {
|
|||
|
||||
editContent.setCustomSelectionActionModeCallback(new StyleCallback(this.editContent));
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
|
||||
if(sp.getBoolean("font", false)) {
|
||||
if (sp.getBoolean("font", false)) {
|
||||
editContent.setTypeface(Typeface.MONOSPACE);
|
||||
}
|
||||
} else {
|
||||
Log.e(NoteEditFragment.class.getSimpleName(), "getView() is null");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
package it.niedermann.owncloud.notes.android.fragment.about;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import it.niedermann.owncloud.notes.R;
|
||||
|
@ -22,7 +23,7 @@ public class AboutFragmentContributingTab extends Fragment {
|
|||
TextView aboutTranslate;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View v = inflater.inflate(R.layout.fragment_about_contribution_tab, container, false);
|
||||
ButterKnife.bind(this, v);
|
||||
SupportUtil.setHtml(aboutSource, R.string.about_source, getString(R.string.url_source));
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
package it.niedermann.owncloud.notes.android.fragment.about;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import it.niedermann.owncloud.notes.BuildConfig;
|
||||
|
@ -23,7 +24,7 @@ public class AboutFragmentCreditsTab extends Fragment {
|
|||
TextView aboutTranslators;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View v = inflater.inflate(R.layout.fragment_about_credits_tab, container, false);
|
||||
ButterKnife.bind(this, v);
|
||||
SupportUtil.setHtml(aboutVersion, R.string.about_version, "v" + BuildConfig.VERSION_NAME);
|
||||
|
|
|
@ -3,13 +3,14 @@ package it.niedermann.owncloud.notes.android.fragment.about;
|
|||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
|
@ -29,7 +30,7 @@ public class AboutFragmentLicenseTab extends Fragment {
|
|||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View v = inflater.inflate(R.layout.fragment_about_license_tab, container, false);
|
||||
ButterKnife.bind(this, v);
|
||||
SupportUtil.setHtml(iconsDisclaimer, R.string.about_icons_disclaimer, getString(R.string.about_app_icon_author));
|
||||
|
|
|
@ -6,9 +6,6 @@ import android.content.Intent;
|
|||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -18,6 +15,9 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import it.niedermann.owncloud.notes.android.appwidget.NoteListWidget;
|
||||
import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget;
|
||||
import it.niedermann.owncloud.notes.model.CloudNote;
|
||||
|
@ -49,14 +49,13 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {
|
|||
|
||||
private static NoteSQLiteOpenHelper instance;
|
||||
|
||||
private NoteServerSyncHelper serverSyncHelper = null;
|
||||
private Context context = null;
|
||||
private NoteServerSyncHelper serverSyncHelper;
|
||||
private Context context;
|
||||
|
||||
private NoteSQLiteOpenHelper(Context context) {
|
||||
super(context, database_name, null, database_version);
|
||||
this.context = context.getApplicationContext();
|
||||
serverSyncHelper = NoteServerSyncHelper.getInstance(this);
|
||||
//recreateDatabase(getWritableDatabase());
|
||||
}
|
||||
|
||||
public static NoteSQLiteOpenHelper getInstance(Context context) {
|
||||
|
|
Loading…
Reference in a new issue