diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java index 1d316083..ccdfbec8 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java @@ -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() { - 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(); - } + 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) { - Intent createIntent = new Intent(getApplicationContext(), EditNoteActivity.class); - createIntent.putExtra(EditNoteActivity.PARAM_CATEGORY, navigationSelection); - startActivityForResult(createIntent, create_note_cmd); - } + 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) { - Intent settingsIntent = new Intent(that, SettingsActivity.class); - startActivityForResult(settingsIntent, server_settings); - } + 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) { - db.addNoteAndSync(dbNote); - refreshLists(); - Snackbar.make(swipeRefreshLayout, R.string.action_note_restored, Snackbar.LENGTH_SHORT) - .show(); - } + .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,14 +473,11 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap query = searchView.getQuery(); } - LoadNotesListTask.NotesLoadedListener callback = new LoadNotesListTask.NotesLoadedListener() { - @Override - public void onNotesLoaded(List notes, boolean showCategory) { - adapter.setShowCategory(showCategory); - adapter.setItemList(notes); - if (scrollToTop) { - listView.scrollToPosition(0); - } + LoadNotesListTask.NotesLoadedListener callback = (List 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); @@ -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() { - fabCreate.show(); - } + new Handler().postDelayed(() -> { + fabCreate.show(); }, 150); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java index ea9d1777..bea5ab7a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java @@ -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) { - new URLValidatorAsyncTask().execute(NotesClientUtil.formatURL(field_url.getText().toString())); - } + 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) { - login(); - return true; - } + 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) { - setPasswordHint(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) { - login(); - } + btn_submit.setOnClickListener((View v) -> { + login(); }); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java b/app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java index 034fbb18..b0b18f33 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java @@ -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; @@ -52,20 +53,20 @@ public class NoteListWidget extends AppWidgetProvider { // Launch application when user taps the header icon or app title Intent intent = new Intent("android.intent.action.MAIN"); intent.setComponent(new ComponentName(context.getPackageName(), - NotesListViewActivity.class.getName())); + NotesListViewActivity.class.getName())); // Open the main app if the user taps the widget header - PendingIntent openAppI = PendingIntent.getActivity( context, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); + 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, - (new Intent(context, EditNoteActivity.class)), - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent newNoteI = PendingIntent.getActivity(context, 0, + (new Intent(context, EditNoteActivity.class)), + PendingIntent.FLAG_UPDATE_CURRENT); - PendingIntent templatePI = PendingIntent.getActivity(context,0, - (new Intent(context, EditNoteActivity.class)), - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent templatePI = PendingIntent.getActivity(context, 0, + (new Intent(context, EditNoteActivity.class)), + PendingIntent.FLAG_UPDATE_CURRENT); if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list_dark); @@ -104,12 +105,20 @@ public class NoteListWidget extends AppWidgetProvider { super.onReceive(context, intent); AppWidgetManager awm = AppWidgetManager.getInstance(context); - if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) { - if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) { - updateAppWidget(context, awm, new int[] { intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1) }); - } else { - updateAppWidget(context, awm, awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class))); + if (intent.getAction() != null) { + if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) { + if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) { + 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"); } } @@ -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); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java index 7d6f7d83..e27d45e9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/CategoryDialogFragment.java @@ -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); - getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + 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"); + } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java index c432a869..254e66fc 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/NoteEditFragment.java @@ -109,43 +109,47 @@ public class NoteEditFragment extends BaseNoteFragment { public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - ButterKnife.bind(this, getView()); + if(getView() != null) { + ButterKnife.bind(this, getView()); - setActiveTextView(editContent); + setActiveTextView(editContent); - if (note.getContent().isEmpty()) { - getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - } + if (note.getContent().isEmpty()) { + getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } - // workaround for issue yydcdut/RxMarkdown#41 - note.setContent(note.getContent().replace("\r\n", "\n")); + // workaround for issue yydcdut/RxMarkdown#41 + note.setContent(note.getContent().replace("\r\n", "\n")); - editContent.setText(note.getContent()); - editContent.setEnabled(true); + editContent.setText(note.getContent()); + editContent.setEnabled(true); - RxMarkdown.live(editContent) - .config(MarkDownUtil.getMarkDownConfiguration(getActivity().getApplicationContext()).build()) - .factory(EditFactory.create()) - .intoObservable() - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - } + RxMarkdown.live(editContent) + .config(MarkDownUtil.getMarkDownConfiguration(getActivity().getApplicationContext()).build()) + .factory(EditFactory.create()) + .intoObservable() + .subscribe(new Subscriber() { + @Override + public void onCompleted() { + } - @Override - public void onError(Throwable e) { - } + @Override + public void onError(Throwable e) { + } - @Override - public void onNext(CharSequence charSequence) { - editContent.setText(charSequence, TextView.BufferType.SPANNABLE); - } - }); + @Override + public void onNext(CharSequence charSequence) { + editContent.setText(charSequence, TextView.BufferType.SPANNABLE); + } + }); - editContent.setCustomSelectionActionModeCallback(new StyleCallback(this.editContent)); - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); - if(sp.getBoolean("font", false)) { - editContent.setTypeface(Typeface.MONOSPACE); + editContent.setCustomSelectionActionModeCallback(new StyleCallback(this.editContent)); + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); + if (sp.getBoolean("font", false)) { + editContent.setTypeface(Typeface.MONOSPACE); + } + } else { + Log.e(NoteEditFragment.class.getSimpleName(), "getView() is null"); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentContributingTab.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentContributingTab.java index 3d4358d7..4c72608b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentContributingTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentContributingTab.java @@ -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)); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java index f725393c..d2b01a7c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentCreditsTab.java @@ -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); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentLicenseTab.java index cf8fe07b..d32b4632 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentLicenseTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/about/AboutFragmentLicenseTab.java @@ -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)); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java index b92d29cc..d20cb33d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java @@ -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) {