diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-05-03 21:11:35 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-05-03 21:11:35 +0300 |
commit | b43ec8fd32811ee6d498d5304fe262a9228f36ad (patch) | |
tree | 2fcda6f7fe6d74549c5a40e35cd431ba77a65246 /News-Android-App/src/main/java | |
parent | feb3ed672129182b2bf6f6512ac8fcd467dc8394 (diff) |
Remove warnings, use lambdas, use try-with, ...
Diffstat (limited to 'News-Android-App/src/main/java')
83 files changed, 631 insertions, 855 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java index 1d42285a..ee3da659 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/Constants.java @@ -31,7 +31,7 @@ public class Constants { Pattern p = Pattern.compile("(\\d+).(\\d+).(\\d+)"); Matcher m = p.matcher(appVersion); - int version[] = new int[] { 0, 0, 0 }; + int[] version = new int[] { 0, 0, 0 }; if (m.matches()) { version[0] = Integer.parseInt(m.group(1)); version[1] = Integer.parseInt(m.group(2)); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java index 5e9b45b7..185ccb8c 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastArrayAdapter.java @@ -1,5 +1,6 @@ package de.luhmer.owncloudnewsreader.ListView; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -20,8 +21,8 @@ import de.luhmer.owncloudnewsreader.model.PodcastItem; public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> { - private LayoutInflater inflater; - private EventBus eventBus; + private final LayoutInflater inflater; + private final EventBus eventBus; public PodcastArrayAdapter(Context context, PodcastItem[] values) { super(context, R.layout.podcast_row, values); @@ -30,6 +31,7 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> { //eventBus.register(this); } + @SuppressLint("SetTextI18n") @Override public View getView(final int position, View view, ViewGroup parent) { final ViewHolder holder; @@ -55,32 +57,21 @@ public class PodcastArrayAdapter extends ArrayAdapter<PodcastItem> { }); - holder.binding.flDownloadPodcastWrapper.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - holder.binding.flDownloadPodcastWrapper.setVisibility(View.GONE); + holder.binding.flDownloadPodcastWrapper.setOnClickListener(view1 -> { + holder.binding.flDownloadPodcastWrapper.setVisibility(View.GONE); - Toast.makeText(getContext(), "Starting download.. Please wait", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "Starting download.. Please wait", Toast.LENGTH_SHORT).show(); - eventBus.post(new StartDownloadPodcast() {{ podcast = podcastItem; }}); - } + eventBus.post(new StartDownloadPodcast() {{ podcast = podcastItem; }}); }); - holder.binding.flPlayPodcastWrapper.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - playPodcast(position); - } - }); + holder.binding.flPlayPodcastWrapper.setOnClickListener(view12 -> playPodcast(position)); - holder.binding.flDeletePodcastWrapper.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if(NewsFileUtils.deletePodcastFile(getContext(), podcastItem.link)) { - podcastItem.offlineCached = false; - podcastItem.downloadProgress = PodcastItem.DOWNLOAD_NOT_STARTED; - notifyDataSetChanged(); - } + holder.binding.flDeletePodcastWrapper.setOnClickListener(view13 -> { + if(NewsFileUtils.deletePodcastFile(getContext(), podcastItem.link)) { + podcastItem.offlineCached = false; + podcastItem.downloadProgress = PodcastItem.DOWNLOAD_NOT_STARTED; + notifyDataSetChanged(); } }); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java index f30dd4e9..d87363ff 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/PodcastFeedArrayAdapter.java @@ -18,8 +18,8 @@ import de.luhmer.owncloudnewsreader.model.PodcastFeedItem; public class PodcastFeedArrayAdapter extends ArrayAdapter<PodcastFeedItem> { - private LayoutInflater inflater; - private EventBus eventBus; + private final LayoutInflater inflater; + private final EventBus eventBus; public PodcastFeedArrayAdapter(Context context, PodcastFeedItem[] values) { super(context, R.layout.podcast_feed_row, values); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java index de94ffb9..960247cd 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -64,15 +64,14 @@ import static de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAd public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter { private final String TAG = getClass().getCanonicalName(); - private Context mContext; - private DatabaseConnectionOrm dbConn; + private final Context mContext; + private final DatabaseConnectionOrm dbConn; - private ListView listView; + private final ListView listView; private ExpListTextClicked eListTextClickHandler; - private FavIconHandler favIconHandler; - private LayoutInflater inflater; + private final FavIconHandler favIconHandler; private ArrayList<AbstractItem> mCategoriesArrayList; private SparseArray<ArrayList<ConcreteFeedItem>> mItemsArrayList; @@ -83,12 +82,12 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter private SparseArray<String> unreadCountFolders; private SparseArray<String> unreadCountFeeds; - private SharedPreferences mPrefs; + private final SharedPreferences mPrefs; public enum SPECIAL_FOLDERS { ALL_UNREAD_ITEMS(-10), ALL_STARRED_ITEMS(-11), ALL_ITEMS(-12), ITEMS_WITHOUT_FOLDER(-22); - private int id; + private final int id; SPECIAL_FOLDERS(int id) { this.id = id; } @@ -112,7 +111,6 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter this.favIconHandler = new FavIconHandler(mContext); this.mPrefs = prefs; - this.inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.mContext = mContext; this.dbConn = dbConn; @@ -246,38 +244,30 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter } viewHolder.binding.summary.setText(group.header); - viewHolder.binding.listItemLayout.setOnClickListener(new OnClickListener() { + viewHolder.binding.listItemLayout.setOnClickListener(v -> { - @Override - public void onClick(View v) { + long idFeed = group.id_database; + boolean skipFireEvent = false; - long idFeed = group.id_database; - boolean skipFireEvent = false; - - if (group instanceof ConcreteFeedItem) { - fireListTextClicked(idFeed, false, (long) ITEMS_WITHOUT_FOLDER.getValue()); - skipFireEvent = true; - } - - if (!skipFireEvent) - fireListTextClicked(idFeed, true, ((FolderSubscribtionItem) group).idFolder); + if (group instanceof ConcreteFeedItem) { + fireListTextClicked(idFeed, false, (long) ITEMS_WITHOUT_FOLDER.getValue()); + skipFireEvent = true; } - }); - viewHolder.binding.listItemLayout.setOnLongClickListener(new View.OnLongClickListener() { + if (!skipFireEvent) + fireListTextClicked(idFeed, true, ((FolderSubscribtionItem) group).idFolder); + }); - @Override - public boolean onLongClick(View v) { + viewHolder.binding.listItemLayout.setOnLongClickListener(v -> { - long idFeed = group.id_database; + long idFeed = group.id_database; - if (group instanceof ConcreteFeedItem) { - fireListTextLongClicked(idFeed, false, (long) ITEMS_WITHOUT_FOLDER.getValue()); - } else { - fireListTextLongClicked(idFeed, true, ((FolderSubscribtionItem) group).idFolder); - } - return true; //consume event + if (group instanceof ConcreteFeedItem) { + fireListTextLongClicked(idFeed, false, (long) ITEMS_WITHOUT_FOLDER.getValue()); + } else { + fireListTextLongClicked(idFeed, true, ((FolderSubscribtionItem) group).idFolder); } + return true; //consume event }); @@ -337,14 +327,11 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter contentDescriptionId = R.string.content_desc_expand; } - viewHolder.binding.imgViewExpandableIndicator.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if(isExpanded) - ((ExpandableListView)listView).collapseGroup(groupPosition); - else - ((ExpandableListView)listView).expandGroup(groupPosition); - } + viewHolder.binding.imgViewExpandableIndicator.setOnClickListener(v -> { + if(isExpanded) + ((ExpandableListView)listView).collapseGroup(groupPosition); + else + ((ExpandableListView)listView).expandGroup(groupPosition); }); } } @@ -448,7 +435,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter } } - notifyCountDataSetChanged(unreadCountFoldersTemp, unreadCountFeedsTemp, urlsToFavIconsTemp, starredCountFeedsTemp); + notifyCountDataSetChanged(unreadCountFoldersTemp, unreadCountFeedsTemp, starredCountFeedsTemp); super.onPostExecute(aVoid); } } @@ -527,7 +514,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter for(int groupPosition = 0; groupPosition < mCategoriesArrayListAsync.size(); groupPosition++) { //int parent_id = (int)getGroupId(groupPosition); int parent_id = (int) mCategoriesArrayListAsync.get(groupPosition).id_database; - mItemsArrayListAsync.append(parent_id, new ArrayList<ConcreteFeedItem>()); + mItemsArrayListAsync.append(parent_id, new ArrayList<>()); List<Feed> feedItemList = null; @@ -557,7 +544,7 @@ public class SubscriptionExpandableListAdapter extends BaseExpandableListAdapter @SuppressLint("NewApi") // wrongly reports setSelectionFromTop is only available in lollipop - public void notifyCountDataSetChanged(SparseArray<String> unreadCountFolders, SparseArray<String> unreadCountFeeds, SparseArray<String> urlsToFavIcons, SparseArray<String> starredCountFeeds) { + public void notifyCountDataSetChanged(SparseArray<String> unreadCountFolders, SparseArray<String> unreadCountFeeds, SparseArray<String> starredCountFeeds) { this.unreadCountFolders = unreadCountFolders; this.unreadCountFeeds = unreadCountFeeds; this.starredCountFeeds = starredCountFeeds; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java index da8feb32..e12fbabe 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/LoginDialogActivity.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -63,6 +63,7 @@ import com.nextcloud.android.sso.ui.UiExceptionManager; import java.net.MalformedURLException; import java.net.URL; +import java.util.Objects; import javax.inject.Inject; @@ -79,6 +80,7 @@ import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import static de.luhmer.owncloudnewsreader.Constants.MIN_NEXTCLOUD_FILES_APP_VERSION_CODE; +import static java.util.Objects.requireNonNull; /** * Activity which displays a login screen to the user, offering registration as @@ -141,15 +143,9 @@ public class LoginDialogActivity extends AppCompatActivity { binding.edtOwncloudRootPath.setText(mOc_root_path); binding.cbAllowAllSSLCertificates.setChecked(mCbDisableHostnameVerification); - binding.cbAllowAllSSLCertificates.setOnCheckedChangeListener(new OnCheckedChangeListener() { - @SuppressLint("ApplySharedPref") - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mPrefs.edit() - .putBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, isChecked) - .commit(); - } - }); + binding.cbAllowAllSSLCertificates.setOnCheckedChangeListener((buttonView, isChecked) -> mPrefs.edit() + .putBoolean(SettingsActivity.CB_DISABLE_HOSTNAME_VERIFICATION_STRING, isChecked) + .commit()); } @Override @@ -200,7 +196,7 @@ public class LoginDialogActivity extends AppCompatActivity { binding.oldLoginWrapper.setVisibility(View.VISIBLE); } - private TextWatcher PasswordTextChangedListener = new TextWatcher() { + private final TextWatcher PasswordTextChangedListener = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -219,7 +215,7 @@ public class LoginDialogActivity extends AppCompatActivity { } }; - private View.OnClickListener ImgViewShowPasswordListener = new View.OnClickListener() { + private final View.OnClickListener ImgViewShowPasswordListener = new View.OnClickListener() { @Override public void onClick(View v) { mPasswordVisible = !mPasswordVisible; @@ -274,21 +270,22 @@ public class LoginDialogActivity extends AppCompatActivity { * If there are form errors (invalid email, missing fields, etc.), the * errors are presented and no actual login attempt is made. */ - public void attemptLogin() { + @SuppressLint({"SetTextI18n"}) + public void attemptLogin() { // Reset errors. binding.username.setError(null); binding.password.setError(null); binding.edtOwncloudRootPath.setError(null); // Append "https://" is url doesn't contain it already - mOc_root_path = binding.edtOwncloudRootPath.getText().toString().trim(); + mOc_root_path = requireNonNull(binding.edtOwncloudRootPath.getText()).toString().trim(); if(!mOc_root_path.startsWith("http")) { binding.edtOwncloudRootPath.setText("https://" + mOc_root_path); } // Store values at the time of the login attempt. - mUsername = binding.username.getText().toString().trim(); - mPassword = binding.password.getText().toString(); + mUsername = requireNonNull(binding.username.getText()).toString().trim(); + mPassword = requireNonNull(binding.password.getText()).toString(); mOc_root_path = binding.edtOwncloudRootPath.getText().toString().trim(); boolean cancel = false; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java index 7f35bd06..2b9d4848 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java @@ -48,6 +48,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.inject.Inject; @@ -65,6 +66,8 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; +import static java.util.Objects.requireNonNull; + public class NewFeedActivity extends AppCompatActivity { private static final String TAG = NewFeedActivity.class.getCanonicalName(); @@ -94,10 +97,8 @@ public class NewFeedActivity extends AppCompatActivity { binding.btnImportOpml.setOnClickListener((v) -> importOpml()); binding.btnExportOpml.setOnClickListener((v) -> exportOpml()); - if (binding.toolbarLayout.toolbar != null) { - setSupportActionBar(binding.toolbarLayout.toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } + setSupportActionBar(binding.toolbarLayout.toolbar); + requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(this); @@ -124,7 +125,7 @@ public class NewFeedActivity extends AppCompatActivity { url = intent.getStringExtra(Intent.EXTRA_TEXT); } - if(url.endsWith(".opml")) { + if(url != null && url.endsWith(".opml")) { AsyncTaskHelper.StartAsyncTask(new ImportOpmlSubscriptionsTask(url, NewFeedActivity.this)); } @@ -229,7 +230,7 @@ public class NewFeedActivity extends AppCompatActivity { private final String mUrlToFile; private HashMap<String, String> extractedUrls; private ProgressDialog pd; - private Context mContext; + private final Context mContext; ImportOpmlSubscriptionsTask(String urlToFile, Context context) { this.mUrlToFile = urlToFile; @@ -318,16 +319,16 @@ public class NewFeedActivity extends AppCompatActivity { @Override protected void onProgressUpdate(List<String>... values) { - String text = "This might take a few minutes.. please wait:\n"; + StringBuilder text = new StringBuilder("This might take a few minutes.. please wait:\n"); List<String> log = values[0]; for (String line : log) { - text += "\n" + line; + text.append("\n").append(line); } pd.setMax(extractedUrls.size()); pd.setProgress(log.size()); - pd.setMessage(text); + pd.setMessage(text.toString()); super.onProgressUpdate(values); } @@ -390,7 +391,7 @@ public class NewFeedActivity extends AppCompatActivity { mApi.getNewsAPI().createFeed(urlToFeed, folder.getId()).enqueue(new Callback<List<Feed>>() { @Override - public void onResponse(Call<List<Feed>> call, final Response<List<Feed>> response) { + public void onResponse(@NonNull Call<List<Feed>> call, @NonNull final Response<List<Feed>> response) { runOnUiThread(() -> { showProgress(false); @@ -423,7 +424,7 @@ public class NewFeedActivity extends AppCompatActivity { } @Override - public void onFailure(Call<List<Feed>> call, final Throwable t) { + public void onFailure(@NonNull Call<List<Feed>> call, @NonNull final Throwable t) { runOnUiThread(() -> { showProgress(false); @@ -480,14 +481,12 @@ public class NewFeedActivity extends AppCompatActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - // Respond to the action bar's Up/Home button - case android.R.id.home: - //NavUtils.navigateUpFromSameTask(this); - finish(); - return true; - default: - Log.v(TAG, "Unknown option selected.."); + // Respond to the action bar's Up/Home button + if (item.getItemId() == android.R.id.home) {//NavUtils.navigateUpFromSameTask(this); + finish(); + return true; + } else { + Log.v(TAG, "Unknown option selected.."); } return super.onOptionsItemSelected(item); } @@ -498,7 +497,7 @@ public class NewFeedActivity extends AppCompatActivity { @NonNull public static String convertStreamToString(InputStream is) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); - String line = null; + String line; while ((line = reader.readLine()) != null) { sb.append(line).append("\n"); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java index 801c7612..5785f081 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailActivity.java @@ -1,5 +1,5 @@ -/** - * Android ownCloud News +/* +* Android ownCloud News * * @author David Luhmer * @copyright 2013 David Luhmer david-dev@live.de @@ -38,6 +38,7 @@ import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; @@ -47,6 +48,7 @@ import androidx.viewpager.widget.ViewPager; import java.lang.ref.WeakReference; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import javax.inject.Inject; @@ -61,6 +63,8 @@ import de.luhmer.owncloudnewsreader.model.TTSItem; import de.luhmer.owncloudnewsreader.view.PodcastSlidingUpPanelLayout; import de.luhmer.owncloudnewsreader.widget.WidgetProvider; +import static java.util.Objects.requireNonNull; + public class NewsDetailActivity extends PodcastFragmentActivity { @@ -141,9 +145,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { } - if (binding.toolbarLayout.toolbar != null) { - setSupportActionBar(binding.toolbarLayout.toolbar); - } + setSupportActionBar(binding.toolbarLayout.toolbar); /* if (bottomAppBar != null) { setSupportActionBar(bottomAppBar); @@ -159,10 +161,10 @@ public class NewsDetailActivity extends PodcastFragmentActivity { item_id = intent.getExtras().getInt(NewsReaderListActivity.ITEM_ID); } if (intent.hasExtra(NewsReaderListActivity.TITLE)) { - getSupportActionBar().setTitle(intent.getExtras().getString(NewsReaderListActivity.TITLE)); + requireNonNull(getSupportActionBar()).setTitle(intent.getExtras().getString(NewsReaderListActivity.TITLE)); } - getSupportActionBar().setDisplayHomeAsUpEnabled(true); + requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); rssItems = dbConn.getAllRssItems(); @@ -289,7 +291,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { rssItems.close(); } - private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() { + private final ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int pos) { @@ -348,9 +350,9 @@ public class NewsDetailActivity extends PodcastFragmentActivity { if (rssItems.get(position).getFeed() != null) { // Try getting the feed title and use it for the action bar title - getSupportActionBar().setTitle(rssItems.get(position).getFeed().getFeedTitle()); + requireNonNull(getSupportActionBar()).setTitle(rssItems.get(position).getFeed().getFeedTitle()); } else { - getSupportActionBar().setTitle(rssItems.get(position).getTitle()); + requireNonNull(getSupportActionBar()).setTitle(rssItems.get(position).getTitle()); } RssItem rssItem = rssItems.get(position); @@ -480,38 +482,24 @@ public class NewsDetailActivity extends PodcastFragmentActivity { public boolean onOptionsItemSelected(MenuItem item) { RssItem rssItem = rssItems.get(currentPosition); - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - - case R.id.action_read: - this.markRead(currentPosition); - break; - - case R.id.action_starred: - toggleRssItemStarredState(); - break; - - case R.id.action_openInBrowser: - this.openInBrowser(currentPosition); - break; - - case R.id.action_playPodcast: - openPodcast(rssItem); - break; - - case R.id.action_tts: - this.startTTS(currentPosition); - break; - - case R.id.action_ShareItem: - this.share(currentPosition); - break; - - case R.id.action_incognito_mode: - toggleIncognitoMode(); - break; + final int itemId = item.getItemId(); + if (itemId == android.R.id.home) { + onBackPressed(); + return true; + } else if (itemId == R.id.action_read) { + this.markRead(currentPosition); + } else if (itemId == R.id.action_starred) { + toggleRssItemStarredState(); + } else if (itemId == R.id.action_openInBrowser) { + this.openInBrowser(currentPosition); + } else if (itemId == R.id.action_playPodcast) { + openPodcast(rssItem); + } else if (itemId == R.id.action_tts) { + this.startTTS(currentPosition); + } else if (itemId == R.id.action_ShareItem) { + this.share(currentPosition); + } else if (itemId == R.id.action_incognito_mode) { + toggleIncognitoMode(); } return super.onOptionsItemSelected(item); @@ -527,7 +515,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { NewsDetailFragment newsDetailFragment = getNewsDetailFragmentAtPosition(currentPosition); String link = "about:blank"; - if (newsDetailFragment != null && newsDetailFragment.binding.webview != null) { + if (newsDetailFragment != null) { link = newsDetailFragment.binding.webview.getUrl(); } @@ -536,7 +524,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { } if (link.length() > 0) { - newsDetailFragment.loadURL(link); + requireNonNull(newsDetailFragment).loadURL(link); } } @@ -610,7 +598,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://")); ResolveInfo resolveInfo = getPackageManager().resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY); - Log.v(TAG, "Default Browser is: " + resolveInfo.loadLabel(getPackageManager()).toString()); + Log.v(TAG, "Default Browser is: " + requireNonNull(resolveInfo).loadLabel(getPackageManager()).toString()); return (resolveInfo.loadLabel(getPackageManager()).toString().contains("Chrome")); } @@ -710,6 +698,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { } } + @NonNull @Override public Fragment getItem(int position) { NewsDetailFragment fragment = null; @@ -730,7 +719,7 @@ public class NewsDetailActivity extends PodcastFragmentActivity { } @Override - public void destroyItem(ViewGroup container, int position, Object object) { + public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { items.remove(position); super.destroyItem(container, position, object); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java index 3e8cc957..755349ea 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailFragment.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -39,11 +39,14 @@ import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.browser.customtabs.CustomTabsIntent; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentTransaction; import org.jsoup.Jsoup; @@ -92,7 +95,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); // Retain this fragment across configuration changes. setRetainInstance(true); @@ -115,24 +118,18 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li @Override public void onDestroy() { super.onDestroy(); - if(binding.webview != null) { - binding.webview.destroy(); - } + binding.webview.destroy(); } public void pauseCurrentPage() { - if(binding.webview != null) { - binding.webview.onPause(); - binding.webview.pauseTimers(); - } + binding.webview.onPause(); + binding.webview.pauseTimers(); } public void resumeCurrentPage() { - if(binding.webview != null) { - binding.webview.onResume(); - binding.webview.resumeTimers(); - } + binding.webview.onResume(); + binding.webview.resumeTimers(); } /** @@ -159,10 +156,10 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentNewsDetailBinding.inflate(inflater, container, false); - section_number = (Integer) getArguments().get(ARG_SECTION_NUMBER); + section_number = (Integer) requireArguments().get(ARG_SECTION_NUMBER); // Do not reload webview if retained if(savedInstanceState == null) { @@ -181,14 +178,14 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li } protected void syncIncognitoState() { - NewsDetailActivity ndActivity = ((NewsDetailActivity)getActivity()); + NewsDetailActivity ndActivity = ((NewsDetailActivity) requireActivity()); boolean isIncognito = ndActivity.isIncognitoEnabled(); binding.webview.getSettings().setBlockNetworkLoads(isIncognito); // binding.webview.getSettings().setBlockNetworkImage(isIncognito); } @Override - public void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(@NonNull Bundle outState) { binding.webview.saveState(outState); } @@ -261,8 +258,6 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li /** * This function has no effect on devices with api level < HONEYCOMB - * @param htmlPage - * @param webView */ private void setSoftwareRenderModeForWebView(String htmlPage, WebView webView) { if (htmlPage.contains(".gif")) { @@ -307,7 +302,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li binding.webview.setWebViewClient(new WebViewClient() { - private Map<String, Boolean> loadedUrls = new HashMap<>(); + private final Map<String, Boolean> loadedUrls = new HashMap<>(); @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { @@ -385,13 +380,14 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li binding.tvOfflineVersion.setVisibility(View.GONE); switch (selectedBrowser) { case 0: // Custom Tabs + final FragmentActivity activity = requireActivity(); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder() - .setToolbarColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary)) + .setToolbarColor(ContextCompat.getColor(activity, R.color.colorPrimary)) .setShowTitle(true) - .setStartAnimations(getActivity(), R.anim.slide_in_right, R.anim.slide_out_left) - .setExitAnimations(getActivity(), R.anim.slide_in_left, R.anim.slide_out_right) + .setStartAnimations(activity, R.anim.slide_in_right, R.anim.slide_out_left) + .setExitAnimations(activity, R.anim.slide_in_left, R.anim.slide_out_right) .addDefaultShareMenuItem(); - builder.build().launchUrl(getActivity(), Uri.parse(url)); + builder.build().launchUrl(activity, Uri.parse(url)); break; case 1: // External Browser Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); @@ -407,7 +403,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li } - public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { + public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View view, ContextMenu.ContextMenuInfo menuInfo) { if (!(view instanceof WebView)) { Log.w(TAG, "onCreateContextMenu - no webview reference found"); return; @@ -421,7 +417,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li int type = result.getType(); Document htmlDoc = Jsoup.parse(html); - FragmentTransaction ft = getFragmentManager().beginTransaction(); + FragmentTransaction ft = requireFragmentManager().beginTransaction(); String text; DialogFragment newFragment; @@ -505,6 +501,7 @@ public class NewsDetailFragment extends Fragment implements RssItemToHtmlTask.Li * @return true when the current page on the webview's history stack is * the original rss item page */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean isCurrentPageRssItem() { if(binding.webview.copyBackForwardList().getCurrentItem() != null) { String currentPageUrl = binding.webview.copyBackForwardList().getCurrentItem().getOriginalUrl(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailImageDialogFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailImageDialogFragment.java index 36c61463..a2c22a76 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailImageDialogFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsDetailImageDialogFragment.java @@ -96,11 +96,12 @@ public class NewsDetailImageDialogFragment extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mDialogIcon = getArguments().getInt("titleIcon"); - mDialogTitle = getArguments().getString("title"); - mDialogText = getArguments().getString("text"); - mImageUrl = (URL) getArguments().getSerializable("imageUrl"); - mDialogType = (TYPE) getArguments().getSerializable("dialogType"); + final Bundle args = requireArguments(); + mDialogIcon = args.getInt("titleIcon"); + mDialogTitle = args.getString("title"); + mDialogText = args.getString("text"); + mImageUrl = (URL) args.getSerializable("imageUrl"); + mDialogType = (TYPE) args.getSerializable("dialogType"); mMenuItems = new LinkedHashMap<>(); @@ -120,24 +121,9 @@ public class NewsDetailImageDialogFragment extends DialogFragment { changeDownloadDir(); } }); - mMenuItems.put(getString(R.string.action_img_open), new MenuAction() { - @Override - public void execute() { - openLinkInBrowser(mImageUrl); - } - }); - mMenuItems.put(getString(R.string.action_img_sharelink), new MenuAction() { - @Override - public void execute() { - shareImage(); - } - }); - mMenuItems.put(getString(R.string.action_img_copylink), new MenuAction() { - @Override - public void execute() { - copyToClipboard(mDialogTitle, mImageUrl.toString()); - } - }); + mMenuItems.put(getString(R.string.action_img_open), () -> openLinkInBrowser(mImageUrl)); + mMenuItems.put(getString(R.string.action_img_sharelink), this::shareImage); + mMenuItems.put(getString(R.string.action_img_copylink), () -> copyToClipboard(mDialogTitle, mImageUrl.toString())); } else if (mImageUrl.toString().startsWith("file:///")) { mMenuItems.put(getString(R.string.action_img_download), new MenuActionLongClick() { @Override @@ -157,35 +143,20 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } break; case URL: - mMenuItems.put(getString(R.string.action_link_open), new MenuAction() { - @Override - public void execute() { - try { - openLinkInBrowser(new URL(mDialogText)); - } catch (MalformedURLException e) { - Toast.makeText(getActivity(), getString(R.string.error_invalid_url), Toast.LENGTH_SHORT).show(); - e.printStackTrace(); - } - } - }); - mMenuItems.put(getString(R.string.action_link_share), new MenuAction() { - @Override - public void execute() { - shareLink(); - } - }); - mMenuItems.put(getString(R.string.action_link_copy), new MenuAction() { - @Override - public void execute() { - copyToClipboard(mDialogTitle, mDialogText); + mMenuItems.put(getString(R.string.action_link_open), () -> { + try { + openLinkInBrowser(new URL(mDialogText)); + } catch (MalformedURLException e) { + Toast.makeText(getActivity(), getString(R.string.error_invalid_url), Toast.LENGTH_SHORT).show(); + e.printStackTrace(); } }); + mMenuItems.put(getString(R.string.action_link_share), this::shareLink); + mMenuItems.put(getString(R.string.action_link_copy), () -> copyToClipboard(mDialogTitle, mDialogText)); break; } - int style = DialogFragment.STYLE_NO_TITLE; - int theme = R.style.FloatingDialog; - setStyle(style, theme); + setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FloatingDialog); } @Override @@ -195,9 +166,10 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } private void showDownloadShowcase() { - if(mMenuItems.containsKey(getActivity().getString(R.string.action_img_download))) { + final Context context = requireContext(); + if(mMenuItems.containsKey(context.getString(R.string.action_img_download))) { List<String> menuItemsList = new ArrayList<>(mMenuItems.keySet()); - int position = menuItemsList.indexOf(getActivity().getString(R.string.action_img_download)); + int position = menuItemsList.indexOf(context.getString(R.string.action_img_download)); Log.v(TAG, "Position of Download Menu: " + position); /* // Bug in the Library.. ShowcaseView is rendered behind the DialogFragment //TODO check https://github.com/deano2390/MaterialShowcaseView/issues/51 for updates @@ -233,7 +205,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } } - ListView mListView = (ListView) v.findViewById(R.id.ic_menu_item_list); + ListView mListView = v.findViewById(R.id.ic_menu_item_list); List<String> menuItemsList = new ArrayList<>(mMenuItems.keySet()); final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>( @@ -278,7 +250,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { private void copyToClipboard(String label, String text) { - ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Activity.CLIPBOARD_SERVICE); + ClipboardManager clipboard = (ClipboardManager) requireContext().getSystemService(Activity.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText(label, text); clipboard.setPrimaryClip(clip); Toast.makeText(getActivity(), getString(R.string.toast_copied_to_clipboard), Toast.LENGTH_SHORT).show(); @@ -312,11 +284,11 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } private void downloadImage(URL url) { - Toast.makeText(getActivity().getApplicationContext(), getString(R.string.toast_img_download_wait), Toast.LENGTH_SHORT).show(); + Toast.makeText(requireContext().getApplicationContext(), getString(R.string.toast_img_download_wait), Toast.LENGTH_SHORT).show(); if(isExternalStorageWritable()) { String filename = url.getFile().substring(url.getFile().lastIndexOf('/') + 1, url.getFile().length()); - downloadManager = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE); + downloadManager = (DownloadManager) requireContext().getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url.toString())); request.setDestinationUri(getDownloadDir(filename)); request.setTitle(getString(R.string.app_name) + " - " + getString(R.string.action_img_download)); @@ -327,9 +299,9 @@ public class NewsDetailImageDialogFragment extends DialogFragment { //request.setVisibleInDownloadsUi(false); //request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); downloadID = downloadManager.enqueue(request); - getDialog().hide(); + requireDialog().hide(); } else { - Toast.makeText(getActivity().getApplicationContext(), getString(R.string.toast_img_notwriteable), Toast.LENGTH_LONG).show(); + Toast.makeText(requireContext().getApplicationContext(), getString(R.string.toast_img_notwriteable), Toast.LENGTH_LONG).show(); dismiss(); } } @@ -343,24 +315,24 @@ public class NewsDetailImageDialogFragment extends DialogFragment { try { NewsFileUtils.copyFile(new FileInputStream(path), new FileOutputStream(dstPath)); } catch (IOException e) { - Toast.makeText(getActivity().getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); + Toast.makeText(requireContext().getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } - NextcloudNotificationManager.showNotificationSaveSingleCachedImageService(getActivity().getApplicationContext(), CHANNEL_ID, dstPath); - getDialog().hide(); + NextcloudNotificationManager.showNotificationSaveSingleCachedImageService(requireContext().getApplicationContext(), CHANNEL_ID, dstPath); + requireDialog().hide(); } else { - Toast.makeText(getActivity().getApplicationContext(), getString(R.string.toast_img_notwriteable), Toast.LENGTH_LONG).show(); + Toast.makeText(requireContext().getApplicationContext(), getString(R.string.toast_img_notwriteable), Toast.LENGTH_LONG).show(); dismiss(); } } public boolean haveStoragePermission() { if (Build.VERSION.SDK_INT >= 23) { - if (checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED) { + if (checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PermissionChecker.PERMISSION_GRANTED) { Log.v("Permission error","You have permission"); return true; } else { Log.e("Permission error","Asking for permission"); - ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); + ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); return false; } } @@ -374,7 +346,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { private void changeDownloadDir() { final Intent chooserIntent = new Intent(getActivity(), DirectoryChooserActivity.class); final DirectoryChooserConfig config = DirectoryChooserConfig.builder() - .initialDirectory(getActivity().getPreferences(Context.MODE_PRIVATE).getString("manualImageDownloadLocation", "")) + .initialDirectory(requireActivity().getPreferences(Context.MODE_PRIVATE).getString("manualImageDownloadLocation", "")) .newDirectoryName("new folder") .allowNewDirectoryNameModification(true) .allowReadOnlyDirectory(false) @@ -388,14 +360,14 @@ public class NewsDetailImageDialogFragment extends DialogFragment { if(path.equals("")) { path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(); } - SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); + SharedPreferences sharedPref = requireActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("manualImageDownloadLocation", path); editor.commit(); } private Uri getDownloadDir(String filename) { - SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); + SharedPreferences sharedPref = requireActivity().getPreferences(Context.MODE_PRIVATE); String dir = sharedPref.getString("manualImageDownloadLocation", ""); if(dir.equals("")) { //sharedPref has never been set setNewDownloadDir(""); //set to default public download dir @@ -419,7 +391,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { private void unregisterImageDownloadReceiver() { if (downloadCompleteReceiver != null) { - getActivity().unregisterReceiver(downloadCompleteReceiver); + requireActivity().unregisterReceiver(downloadCompleteReceiver); downloadCompleteReceiver = null; } } @@ -443,7 +415,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { switch (status) { case DownloadManager.STATUS_SUCCESSFUL: - Toast.makeText(getActivity().getApplicationContext(), getString(R.string.toast_img_saved), Toast.LENGTH_LONG).show(); + Toast.makeText(requireContext().getApplicationContext(), getString(R.string.toast_img_saved), Toast.LENGTH_LONG).show(); //String imagePath = downloadManager.getUriForDownloadedFile(refID).toString(); @@ -457,7 +429,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } break; case DownloadManager.STATUS_FAILED: - Toast.makeText(getActivity().getApplicationContext(), getString(R.string.error_download_failed) + ": " + reason, Toast.LENGTH_LONG).show(); + Toast.makeText(requireContext().getApplicationContext(), getString(R.string.error_download_failed) + ": " + reason, Toast.LENGTH_LONG).show(); if(isVisible()) { dismiss(); } @@ -469,7 +441,7 @@ public class NewsDetailImageDialogFragment extends DialogFragment { } }; IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); - getActivity().registerReceiver(downloadCompleteReceiver, intentFilter); + requireActivity().registerReceiver(downloadCompleteReceiver, intentFilter); } public boolean isExternalStorageWritable() { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java index 86859afb..f4fc236b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderDetailFragment.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -46,6 +46,7 @@ import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.core.view.GestureDetectorCompat; import androidx.fragment.app.Fragment; @@ -58,6 +59,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.List; +import java.util.Objects; import javax.inject.Inject; @@ -81,6 +83,7 @@ import static de.luhmer.owncloudnewsreader.SettingsActivity.SP_SWIPE_LEFT_ACTION import static de.luhmer.owncloudnewsreader.SettingsActivity.SP_SWIPE_LEFT_ACTION_DEFAULT; import static de.luhmer.owncloudnewsreader.SettingsActivity.SP_SWIPE_RIGHT_ACTION; import static de.luhmer.owncloudnewsreader.SettingsActivity.SP_SWIPE_RIGHT_ACTION_DEFAULT; +import static java.util.Objects.requireNonNull; /** * A fragment representing a single NewsReader detail screen. This fragment is @@ -125,7 +128,7 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public void onAttach(Context context) { + public void onAttach(@NonNull Context context) { super.onAttach(context); this.mActivity = (PodcastFragmentActivity) context; } @@ -138,7 +141,7 @@ public class NewsReaderDetailFragment extends Fragment { protected DisposableObserver<List<RssItem>> searchResultObserver = new DisposableObserver<List<RssItem>>() { @Override - public void onNext(List<RssItem> rssItems) { + public void onNext(@NonNull List<RssItem> rssItems) { loadRssItemsIntoView(rssItems); } @@ -186,7 +189,7 @@ public class NewsReaderDetailFragment extends Fragment { this.idFeed = idFeed; this.idFolder = idFolder; this.titel = title; - mActivity.getSupportActionBar().setTitle(title); + requireNonNull(mActivity.getSupportActionBar()).setTitle(title); if (updateListView) { updateCurrentRssView(); @@ -200,7 +203,7 @@ public class NewsReaderDetailFragment extends Fragment { Log.v(TAG, "onResume called!"); mMarkAsReadWhileScrollingEnabled = mPrefs.getBoolean(SettingsActivity.CB_MARK_AS_READ_WHILE_SCROLLING_STRING, false); - this.initFastDoneAll(this.getView()); + this.initFastDoneAll(this.requireView()); //When the fragment is instantiated by the xml file, onResume will be called twice if (onResumeCount >= 2) { @@ -216,11 +219,7 @@ public class NewsReaderDetailFragment extends Fragment { protected void updateMenuItemsState() { NewsReaderListActivity nla = (NewsReaderListActivity) mActivity; if(nla != null && nla.getMenuItemDownloadMoreItems() != null) { - if (idFolder != null && idFolder == ALL_UNREAD_ITEMS.getValue()) { - nla.getMenuItemDownloadMoreItems().setEnabled(false); - } else { - nla.getMenuItemDownloadMoreItems().setEnabled(true); - } + nla.getMenuItemDownloadMoreItems().setEnabled(idFolder == null || idFolder != ALL_UNREAD_ITEMS.getValue()); } } @@ -243,7 +242,7 @@ public class NewsReaderDetailFragment extends Fragment { binding.pbLoading.setVisibility(View.GONE); if (layoutManagerSavedState != null) { - binding.list.getLayoutManager().onRestoreInstanceState(layoutManagerSavedState); + requireNonNull(binding.list.getLayoutManager()).onRestoreInstanceState(layoutManagerSavedState); layoutManagerSavedState = null; } }); @@ -278,7 +277,6 @@ public class NewsReaderDetailFragment extends Fragment { } public LinearLayoutManager getLayoutManager() { - if (binding.list == null) return null; return (LinearLayoutManager) binding.list.getLayoutManager(); } @@ -319,7 +317,7 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentNewsreaderDetailBinding.inflate(inflater, container, false); @@ -346,7 +344,7 @@ public class NewsReaderDetailFragment extends Fragment { binding.list.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { if (dy > 0) { //check for scroll down if (mMarkAsReadWhileScrollingEnabled) { //Log.v(TAG, "Scroll Delta y: " + dy); @@ -357,16 +355,16 @@ public class NewsReaderDetailFragment extends Fragment { }); itemTouchListener = new RecyclerView.OnItemTouchListener() { - GestureDetectorCompat detector = new GestureDetectorCompat(mActivity, new RecyclerViewOnGestureListener()); + final GestureDetectorCompat detector = new GestureDetectorCompat(mActivity, new RecyclerViewOnGestureListener()); @Override - public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { + public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { detector.onTouchEvent(e); return false; } @Override - public void onTouchEvent(RecyclerView rv, MotionEvent e) { + public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { } @Override @@ -431,10 +429,10 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) { + public void onInflate(@NonNull Context context, @NonNull AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(context, attrs, savedInstanceState); - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); TypedArray styledAttributes = context.obtainStyledAttributes(attrs, new int[]{R.attr.colorAccent}); updateSwipeDrawables(true); @@ -460,7 +458,7 @@ public class NewsReaderDetailFragment extends Fragment { int leftId = getLayoutId(leftAction); int rightId = getLayoutId(rightAction); - TypedArray styledAttributes = getContext().obtainStyledAttributes(new int[]{leftId, rightId}); + TypedArray styledAttributes = requireContext().obtainStyledAttributes(new int[]{leftId, rightId}); leftSwipeDrawable = styledAttributes.getDrawable(0); rightSwipeDrawable = styledAttributes.getDrawable(1); styledAttributes.recycle(); @@ -485,7 +483,7 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(LAYOUT_MANAGER_STATE, getLayoutManager().onSaveInstanceState()); @@ -597,17 +595,17 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) { + public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { return 0.25f; } @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { return false; } @Override - public void onSwiped(final RecyclerView.ViewHolder viewHolder, final int direction) { + public void onSwiped(@NonNull final RecyclerView.ViewHolder viewHolder, final int direction) { final NewsListRecyclerAdapter adapter = (NewsListRecyclerAdapter) binding.list.getAdapter(); String swipeAction; @@ -637,7 +635,7 @@ public class NewsReaderDetailFragment extends Fragment { } @Override - public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); // binding.swipeRefresh cancels swiping left/right when accidentally moving in the y direction; binding.swipeRefresh.setEnabled(!isCurrentlyActive); @@ -673,8 +671,8 @@ public class NewsReaderDetailFragment extends Fragment { * A movement up is required to prevent accidentally marking articles as read. */ private class FastMarkReadMotionListener implements View.OnTouchListener { - private View fabMarkAllAsRead; - private ImageView targetView; + private final View fabMarkAllAsRead; + private final ImageView targetView; private boolean markAsRead = false; private float originX, @@ -684,7 +682,7 @@ public class NewsReaderDetailFragment extends Fragment { public FastMarkReadMotionListener(View fabMarkAllAsRead) { this.fabMarkAllAsRead = fabMarkAllAsRead; - this.targetView = (ImageView)fabMarkAllAsRead.findViewById(R.id.target_done_all); + this.targetView = fabMarkAllAsRead.findViewById(R.id.target_done_all); } @Override diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java index 826d520e..07c51c93 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -171,7 +171,7 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements String sharedPreferencesFileName; - private View.OnClickListener mSnackbarListener = view -> { + private final View.OnClickListener mSnackbarListener = view -> { //Toast.makeText(getActivity(), "button 1 pressed", 3000).show(); updateCurrentRssView(); }; @@ -219,9 +219,7 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements initAccountManager(); binding.toolbarLayout.avatar.setVisibility(View.VISIBLE); - binding.toolbarLayout.avatar.setOnClickListener((v) -> { - startActivityForResult(new Intent(this, LoginDialogActivity.class), RESULT_LOGIN); - }); + binding.toolbarLayout.avatar.setOnClickListener((v) -> startActivityForResult(new Intent(this, LoginDialogActivity.class), RESULT_LOGIN)); // Init config --> if nothing is configured start the login dialog. if (!isUserLoggedIn()) { @@ -780,63 +778,50 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements if (drawerToggle != null && drawerToggle.onOptionsItemSelected(item)) return true; - switch (item.getItemId()) { - - case android.R.id.home: - if (handlePodcastBackPressed()) - return true; - break; - - case R.id.menu_update: - startSync(); - break; - - case R.id.menu_StartImageCaching: - final DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(this); - - long highestItemId = dbConn.getLowestRssItemIdUnread(); - - - Intent data = new Intent(); - data.putExtra(DownloadImagesService.LAST_ITEM_ID, highestItemId); - data.putExtra(DownloadImagesService.DOWNLOAD_MODE_STRING, DownloadImagesService.DownloadMode.PICTURES_ONLY); - DownloadImagesService.enqueueWork(this, data); - - break; - - case R.id.menu_CreateDatabaseDump: - DatabaseUtils.CopyDatabaseToSdCard(this); - - new AlertDialog.Builder(this) - .setMessage("Created dump at: " + DatabaseUtils.GetPath(this)) - .setNeutralButton(getString(android.R.string.ok), null) - .show(); - break; - - case R.id.menu_markAllAsRead: - NewsReaderDetailFragment ndf = getNewsReaderDetailFragment(); - if(ndf != null) { - DatabaseConnectionOrm dbConn2 = new DatabaseConnectionOrm(this); - dbConn2.markAllItemsAsReadForCurrentView(); - - reloadCountNumbersOfSlidingPaneAdapter(); - ndf.refreshCurrentRssView(); - } + int itemId = item.getItemId(); + if (itemId == android.R.id.home) { + if (handlePodcastBackPressed()) return true; - - case R.id.menu_downloadMoreItems: - DownloadMoreItems(); - return true; - - case R.id.menu_search: - mSearchView.setIconified(false); - mSearchView.setFocusable(true); - mSearchView.requestFocusFromTouch(); - return true; - - case R.id.menu_download_web_archive: - checkAndStartDownloadWebPagesForOfflineReadingPermission(); - return true; + } else if (itemId == R.id.menu_update) { + startSync(); + } else if (itemId == R.id.menu_StartImageCaching) { + final DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(this); + + long highestItemId = dbConn.getLowestRssItemIdUnread(); + + + Intent data = new Intent(); + data.putExtra(DownloadImagesService.LAST_ITEM_ID, highestItemId); + data.putExtra(DownloadImagesService.DOWNLOAD_MODE_STRING, DownloadImagesService.DownloadMode.PICTURES_ONLY); + DownloadImagesService.enqueueWork(this, data); + } else if (itemId == R.id.menu_CreateDatabaseDump) { + DatabaseUtils.CopyDatabaseToSdCard(this); + + new AlertDialog.Builder(this) + .setMessage("Created dump at: " + DatabaseUtils.GetPath(this)) + .setNeutralButton(getString(android.R.string.ok), null) + .show(); + } else if (itemId == R.id.menu_markAllAsRead) { + NewsReaderDetailFragment ndf = getNewsReaderDetailFragment(); + if (ndf != null) { + DatabaseConnectionOrm dbConn2 = new DatabaseConnectionOrm(this); + dbConn2.markAllItemsAsReadForCurrentView(); + + reloadCountNumbersOfSlidingPaneAdapter(); + ndf.refreshCurrentRssView(); + } + return true; + } else if (itemId == R.id.menu_downloadMoreItems) { + DownloadMoreItems(); + return true; + } else if (itemId == R.id.menu_search) { + mSearchView.setIconified(false); + mSearchView.setFocusable(true); + mSearchView.requestFocusFromTouch(); + return true; + } else if (itemId == R.id.menu_download_web_archive) { + checkAndStartDownloadWebPagesForOfflineReadingPermission(); + return true; } return super.onOptionsItemSelected(item); } @@ -914,19 +899,13 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action() { - @Override - public void run() throws Exception { - updateCurrentRssView(); - Log.v(TAG, "Finished Download extra items.."); - } - }, new Consumer<Throwable>() { - @Override - public void accept(@io.reactivex.annotations.NonNull Throwable throwable) throws Exception { - throwable.printStackTrace(); - Throwable e = OkHttpSSLClient.HandleExceptions(throwable); - Toast.makeText(NewsReaderListActivity.this, getString(R.string.login_dialog_text_something_went_wrong) + " - " + e.getMessage(), Toast.LENGTH_SHORT).show(); - } + .subscribe(() -> { + updateCurrentRssView(); + Log.v(TAG, "Finished Download extra items.."); + }, throwable -> { + throwable.printStackTrace(); + Throwable e = OkHttpSSLClient.HandleExceptions(throwable); + Toast.makeText(NewsReaderListActivity.this, getString(R.string.login_dialog_text_something_went_wrong) + " - " + e.getMessage(), Toast.LENGTH_SHORT).show(); }); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java index 62c71275..6b72e27a 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListDialogFragment.java @@ -68,59 +68,42 @@ public class NewsReaderListDialogFragment extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); - mFeedId = getArguments().getLong("feedid"); - mDialogTitle = getArguments().getString("title"); - mDialogIconUrl = getArguments().getString("iconurl"); - mDialogText = getArguments().getString("feedurl"); + final Bundle args = requireArguments(); + mFeedId = args.getLong("feedid"); + mDialogTitle = args.getString("title"); + mDialogIconUrl = args.getString("iconurl"); + mDialogText = args.getString("feedurl"); mMenuItems = new LinkedHashMap<>(); - mMenuItems.put(getString(R.string.action_feed_rename), new MenuAction() { - @Override - public void execute() { - showRenameFeedView(mFeedId, mDialogTitle); - } - }); + mMenuItems.put(getString(R.string.action_feed_rename), () -> showRenameFeedView(mFeedId, mDialogTitle)); - mMenuItems.put(getString(R.string.action_feed_remove), new MenuAction() { - @Override - public void execute() { - showRemoveFeedView(mFeedId); - } - }); + mMenuItems.put(getString(R.string.action_feed_remove), () -> showRemoveFeedView(mFeedId)); - mMenuItems.put(getString(R.string.action_feed_move), new MenuAction() { - @Override - public void execute() { showMoveFeedView(mFeedId); } - }); + mMenuItems.put(getString(R.string.action_feed_move), () -> showMoveFeedView(mFeedId)); - int style = DialogFragment.STYLE_NO_TITLE; - int theme = R.style.FloatingDialog; - setStyle(style, theme); + setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FloatingDialog); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentDialogFeedoptionsBinding.inflate(inflater, container, false); - FavIconHandler favIconHandler = new FavIconHandler(getContext()); + FavIconHandler favIconHandler = new FavIconHandler(requireContext()); favIconHandler.loadFavIconForFeed(mDialogIconUrl, binding.icMenuFeedicon); binding.tvMenuTitle.setText(mDialogTitle); binding.tvMenuText.setText(mDialogText); - binding.tvMenuText.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mDialogText != null) { - Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse(mDialogText)); - startActivity(i); - } + binding.tvMenuText.setOnClickListener(v -> { + if (mDialogText != null) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(mDialogText)); + startActivity(i); } }); @@ -133,13 +116,10 @@ public class NewsReaderListDialogFragment extends DialogFragment { binding.lvMenuList.setAdapter(arrayAdapter); - binding.lvMenuList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { - String key = arrayAdapter.getItem(i); - MenuAction mAction = mMenuItems.get(key); - mAction.execute(); - } + binding.lvMenuList.setOnItemClickListener((adapterView, view, i, l) -> { + String key = arrayAdapter.getItem(i); + MenuAction mAction = mMenuItems.get(key); + mAction.execute(); }); return binding.getRoot(); } @@ -182,19 +162,11 @@ public class NewsReaderListDialogFragment extends DialogFragment { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - if (s.toString().equals(feedName) || s.length() == 0) { - binding.buttonRenameConfirm.setEnabled(false); - } else { - binding.buttonRenameConfirm.setEnabled(true); - } + binding.buttonRenameConfirm.setEnabled(!s.toString().equals(feedName) && s.length() != 0); } }); - binding.buttonRenameCancel.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - dismiss(); - } - }); + binding.buttonRenameCancel.setOnClickListener(v -> dismiss()); binding.buttonRenameConfirm.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -208,23 +180,17 @@ public class NewsReaderListDialogFragment extends DialogFragment { mApi.getNewsAPI().renameFeed(feedId, paramMap) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action() { - @Override - public void run() throws Exception { - DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); - dbConn.renameFeedById(mFeedId, binding.renamefeedFeedname.getText().toString()); - - parentActivity.getSlidingListFragment().reloadAdapter(); - parentActivity.startSync(); - - dismiss(); - } - }, new Consumer<Throwable>() { - @Override - public void accept(@NonNull Throwable throwable) throws Exception { - Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); - dismiss(); - } + .subscribe(() -> { + DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); + dbConn.renameFeedById(mFeedId, binding.renamefeedFeedname.getText().toString()); + + parentActivity.getSlidingListFragment().reloadAdapter(); + parentActivity.startSync(); + + dismiss(); + }, throwable -> { + Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); + dismiss(); }); } }); @@ -235,45 +201,33 @@ public class NewsReaderListDialogFragment extends DialogFragment { binding.lvMenuList.setVisibility(View.GONE); binding.removeFeedDialog.setVisibility(View.VISIBLE); - binding.buttonRemoveCancel.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - dismiss(); - } - }); - - binding.buttonRemoveConfirm.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - showProgress(true); - setCancelable(false); - getDialog().setCanceledOnTouchOutside(false); - - - mApi.getNewsAPI().deleteFeed(feedId) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action() { - @Override - public void run() throws Exception { - DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); - dbConn.removeFeedById(mFeedId); - - Long currentFeedId = parentActivity.getNewsReaderDetailFragment().getIdFeed(); - if(currentFeedId != null && currentFeedId == mFeedId) { - parentActivity.switchToAllUnreadItemsFolder(); - } - parentActivity.getSlidingListFragment().reloadAdapter(); - parentActivity.updateCurrentRssView(); - - dismiss(); - } - }, new Consumer<Throwable>() { - @Override - public void accept(@NonNull Throwable throwable) throws Exception { - Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); - dismiss(); - } - }); - } + binding.buttonRemoveCancel.setOnClickListener(v -> dismiss()); + + binding.buttonRemoveConfirm.setOnClickListener(v -> { + showProgress(true); + setCancelable(false); + getDialog().setCanceledOnTouchOutside(false); + + + mApi.getNewsAPI().deleteFeed(feedId) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(() -> { + DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); + dbConn.removeFeedById(mFeedId); + + Long currentFeedId = parentActivity.getNewsReaderDetailFragment().getIdFeed(); + if(currentFeedId != null && currentFeedId == mFeedId) { + parentActivity.switchToAllUnreadItemsFolder(); + } + parentActivity.getSlidingListFragment().reloadAdapter(); + parentActivity.updateCurrentRssView(); + + dismiss(); + }, throwable -> { + Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); + dismiss(); + }); }); } @@ -299,40 +253,31 @@ public class NewsReaderListDialogFragment extends DialogFragment { ArrayAdapter<String> folderAdapter = new ArrayAdapter<> (getActivity(), R.layout.dialog_list_folder, android.R.id.text1, folderNames); binding.folderList.setAdapter(folderAdapter); - binding.folderList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - final Folder folder = folders.get(position); - - showProgress(true); - setCancelable(false); - getDialog().setCanceledOnTouchOutside(false); - - Map<String, Long> paramMap = new LinkedHashMap<>(); - paramMap.put("folderId", folder.getId()); - mApi.getNewsAPI().moveFeed(mFeedId, paramMap) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action() { - @Override - public void run() { - DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); - Feed feed = dbConn.getFeedById(mFeedId); - feed.setFolder(folder); - - parentActivity.getSlidingListFragment().reloadAdapter(); - parentActivity.startSync(); - - dismiss(); - } - }, new Consumer<Throwable>() { - @Override - public void accept(@NonNull Throwable throwable) throws Exception { - Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); - dismiss(); - } - }); - } + binding.folderList.setOnItemClickListener((parent, view, position, id) -> { + final Folder folder = folders.get(position); + + showProgress(true); + setCancelable(false); + getDialog().setCanceledOnTouchOutside(false); + + Map<String, Long> paramMap = new LinkedHashMap<>(); + paramMap.put("folderId", folder.getId()); + mApi.getNewsAPI().moveFeed(mFeedId, paramMap) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(() -> { + DatabaseConnectionOrm dbConn1 = new DatabaseConnectionOrm(getContext()); + Feed feed = dbConn1.getFeedById(mFeedId); + feed.setFolder(folder); + + parentActivity.getSlidingListFragment().reloadAdapter(); + parentActivity.startSync(); + + dismiss(); + }, throwable -> { + Toast.makeText(getContext().getApplicationContext(), getString(R.string.login_dialog_text_something_went_wrong) + " - " + throwable.getMessage(), Toast.LENGTH_LONG).show(); + dismiss(); + }); }); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java index 0d6112de..4b6d6ab1 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -35,6 +35,7 @@ import android.widget.AdapterView; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; @@ -59,7 +60,6 @@ import de.luhmer.owncloudnewsreader.model.ConcreteFeedItem; import de.luhmer.owncloudnewsreader.model.OcsUser; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; @@ -92,7 +92,6 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM private Callbacks mCallbacks = null; - @SuppressWarnings("unused") protected static final String TAG = "NewsReaderListFragment"; public void ListViewNotifyDataSetChanged() { @@ -141,12 +140,12 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM @Override public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { binding = FragmentNewsreaderListBinding.inflate(requireActivity().getLayoutInflater(), container, false); lvAdapter = new SubscriptionExpandableListAdapter(getActivity(), new DatabaseConnectionOrm(getActivity()), binding.expandableListView, mPrefs); @@ -161,12 +160,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM binding.expandableListView.setLongClickable(true); binding.expandableListView.setAdapter(lvAdapter); - binding.headerView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((NewsReaderListActivity) getActivity()).startSync(); - } - }); + binding.headerView.setOnClickListener(v -> ((NewsReaderListActivity) requireActivity()).startSync()); lvAdapter.notifyDataSetChanged(); reloadAdapter(); @@ -177,7 +171,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM } @Override - public void onAttach(Context context) { + public void onAttach(@NonNull Context context) { super.onAttach(context); // Activities containing this fragment must implement its callbacks. @@ -229,10 +223,10 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM case R.id.action_add_new_feed: if(mApi.getNewsAPI() != null) { Intent newFeedIntent = new Intent(getContext(), NewFeedActivity.class); - getActivity().startActivityForResult(newFeedIntent, NewsReaderListActivity.RESULT_ADD_NEW_FEED); + requireActivity().startActivityForResult(newFeedIntent, NewsReaderListActivity.RESULT_ADD_NEW_FEED); } else { Intent loginIntent = new Intent(getContext(), LoginDialogActivity.class); - getActivity().startActivityForResult(loginIntent, RESULT_LOGIN); + requireActivity().startActivityForResult(loginIntent, RESULT_LOGIN); } return true; default: @@ -242,7 +236,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM list.addFooterView(footerView); } - private ExpListTextClicked expListTextClickedListener = new ExpListTextClicked() { + private final ExpListTextClicked expListTextClickedListener = new ExpListTextClicked() { @Override public void onTextClicked(long idFeed, boolean isFolder, Long optional_folder_id) { @@ -284,23 +278,14 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM } }; - AdapterView.OnItemLongClickListener onItemLongClickListener = new AdapterView.OnItemLongClickListener() { - - @Override - public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { - if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { - int childPosition = ExpandableListView.getPackedPositionChild(id); - mCallbacks.onChildItemLongClicked(childPosition); - } - - return true; - } - }; - + AdapterView.OnItemLongClickListener onItemLongClickListener = (parent, view, position, id) -> { + if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { + int childPosition = ExpandableListView.getPackedPositionChild(id); + mCallbacks.onChildItemLongClicked(childPosition); + } - public ExpandableListView getListView() { - return binding.expandableListView; - } + return true; + }; public void startAsyncTaskGetUserInfo() { mApi.getServerAPI().user() diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java index bd54a090..fa417f34 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java @@ -214,7 +214,7 @@ public class PodcastFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // create ContextThemeWrapper from the original Activity Context with the custom theme //Context context = new ContextThemeWrapper(getActivity(), R.style.Theme_MaterialComponents_Light_DarkActionBar); // clone the inflater using the ContextThemeWrapper @@ -259,7 +259,7 @@ public class PodcastFragment extends Fragment { - private SlidingUpPanelLayout.PanelSlideListener onPanelSlideListener = new SlidingUpPanelLayout.PanelSlideListener() { + private final SlidingUpPanelLayout.PanelSlideListener onPanelSlideListener = new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View view, float v) { } @@ -284,7 +284,7 @@ public class PodcastFragment extends Fragment { boolean blockSeekbarUpdate = false; - private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + private final SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { int before; @Override @@ -335,7 +335,7 @@ public class PodcastFragment extends Fragment { numberPicker.setWrapSelectorWheel(false); - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(requireContext()); // set title alertDialogBuilder.setTitle(getString(R.string.podcast_playback_speed_dialog_title)); @@ -371,7 +371,7 @@ public class PodcastFragment extends Fragment { } } - private MediaControllerCompat.Callback controllerCallback = + private final MediaControllerCompat.Callback controllerCallback = new MediaControllerCompat.Callback() { @Override public void onMetadataChanged(MediaMetadataCompat metadata) { @@ -569,7 +569,7 @@ public class PodcastFragment extends Fragment { } */ - private MediaControllerCompat.Callback mediaControllerCallback = new MediaControllerCompat.Callback() { + private final MediaControllerCompat.Callback mediaControllerCallback = new MediaControllerCompat.Callback() { @Override public void onSessionReady() { Log.d(TAG, "onSessionReady() called"); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java index d69e7c68..9c9b5f2b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java @@ -261,7 +261,7 @@ public abstract class PodcastFragmentActivity extends AppCompatActivity implemen return (int) (px / Resources.getSystem().getDisplayMetrics().density); } - private float dipToPx(float dip) { + private float dipToPx(@SuppressWarnings("SameParameterValue") float dip) { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, getResources().getDisplayMetrics()); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java index e46dee5b..757ad2c4 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -27,7 +27,6 @@ import android.os.Bundle; import android.preference.PreferenceActivity; import android.view.MenuItem; -import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java index e7b7dc23..aaab8c9e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java @@ -75,7 +75,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); // Define the settings file to use by this settings fragment getPreferenceManager().setSharedPreferencesName(sharedPreferencesFileName); @@ -126,7 +126,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { * A preference value change listener that updates the preference's summary * to reflect its new value. */ - private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = (preference, value) -> { + private static final Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = (preference, value) -> { String stringValue = value.toString(); if (preference instanceof ListPreference) { @@ -140,10 +140,8 @@ public class SettingsFragment extends PreferenceFragmentCompat { // only enable black-bg setting if light or auto theme is selected if(SP_APP_THEME.equals(preference.getKey())) { - if (value.equals("1")) // value "1" means Light theme - preference.getPreferenceManager().findPreference(CB_OLED_MODE).setEnabled(false); - else - preference.getPreferenceManager().findPreference(CB_OLED_MODE).setEnabled(true); + // value "1" means Light theme + preference.getPreferenceManager().findPreference(CB_OLED_MODE).setEnabled(!value.equals("1")); } } else { @@ -158,7 +156,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { return true; }; - private static Preference.OnPreferenceChangeListener sBindPreferenceBooleanToValueListener = (preference, newValue) -> { + private static final Preference.OnPreferenceChangeListener sBindPreferenceBooleanToValueListener = (preference, newValue) -> { if(preference instanceof CheckBoxPreference) { //For legacy Android support CheckBoxPreference cbPreference = ((CheckBoxPreference) preference); cbPreference.setChecked((Boolean) newValue); @@ -300,7 +298,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { Preference changelogPreference = prefFrag.findPreference(CB_VERSION); changelogPreference.setOnPreferenceClickListener(preference -> { DialogFragment dialog = new VersionInfoDialogFragment(); - dialog.show(prefFrag.getActivity().getFragmentManager(), "VersionChangelogDialogFragment"); + dialog.show(prefFrag.requireActivity().getFragmentManager(), "VersionChangelogDialogFragment"); return true; }); @@ -353,7 +351,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { String debugInfo = "Please describe your bug here...\n\n---\n"; try { - PackageInfo pInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0); + PackageInfo pInfo = requireContext().getPackageManager().getPackageInfo(requireContext().getPackageName(), 0); debugInfo += "\nApp Version: " + pInfo.versionName; debugInfo += "\nApp Version Code: " + pInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { @@ -394,7 +392,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { public static class ResetDatabaseAsyncTask extends AsyncTask<Void, Void, Void> { private ProgressDialog pd; - private Context context; + private final Context context; public ResetDatabaseAsyncTask(Context context) { this.context = context; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java index 59cf2b37..0ba46494 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SyncIntervalSelectorActivity.java @@ -43,9 +43,7 @@ public class SyncIntervalSelectorActivity extends AppCompatActivity { binding = ActivitySyncIntervalSelectorBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - if (binding.toolbarLayout.toolbar != null) { - setSupportActionBar(binding.toolbarLayout.toolbar); - } + setSupportActionBar(binding.toolbarLayout.toolbar); items_values = getResources().getStringArray(R.array.array_sync_interval_values); @@ -132,7 +130,7 @@ public class SyncIntervalSelectorActivity extends AppCompatActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ((NewsReaderApplication) getActivity().getApplication()).getAppComponent().injectFragment(this); + ((NewsReaderApplication) requireActivity().getApplication()).getAppComponent().injectFragment(this); } @Override @@ -152,7 +150,7 @@ public class SyncIntervalSelectorActivity extends AppCompatActivity { int position = 0; int minutes = mPrefs.getInt(SYNC_INTERVAL_IN_MINUTES_STRING, SYNC_DEFAULT_INTERVAL); - for (String item : ((SyncIntervalSelectorActivity) getActivity()).items_values) { + for (String item : ((SyncIntervalSelectorActivity) requireActivity()).items_values) { if (Integer.parseInt(item) == minutes) break; position++; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java index e0aa1a84..499b5fd8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/VersionInfoDialogFragment.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -59,12 +59,7 @@ public class VersionInfoDialogFragment extends DialogFragment { // build dialog AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setView(view) - .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dismiss(); - } - }) + .setPositiveButton(getString(android.R.string.ok), (dialog, which) -> dismiss()) .setCancelable(true) // React to click outside of version info .setTitle("Changelog"); // changelog content is in english only anyways.. diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/DividerItemDecoration.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/DividerItemDecoration.java index fbeb21c2..81196684 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/DividerItemDecoration.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/DividerItemDecoration.java @@ -7,12 +7,13 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.view.View; +import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; public class DividerItemDecoration extends RecyclerView.ItemDecoration { - private Drawable mDivider; + private final Drawable mDivider; private int size = 0; @@ -25,8 +26,8 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration { } @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, - RecyclerView.State state) { + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, + @NonNull RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); if (mDivider == null || parent.getChildLayoutPosition(view) < 1) { return; @@ -36,7 +37,7 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration { } @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { if(mDivider == null) return; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/NewsListRecyclerAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/NewsListRecyclerAdapter.java index d0e9936b..2d79a146 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/NewsListRecyclerAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/NewsListRecyclerAdapter.java @@ -40,26 +40,27 @@ import de.luhmer.owncloudnewsreader.model.CurrentRssViewDataHolder; public class NewsListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final String TAG = "NewsListRecyclerAdapter"; + @SuppressWarnings("FieldCanBeLocal") private final int VIEW_ITEM = 1; // Item private final int VIEW_PROG = 0; // Progress private long idOfCurrentlyPlayedPodcast = -1; private List<RssItem> lazyList; - private DatabaseConnectionOrm dbConn; - private PostDelayHandler pDelayHandler; - private FragmentActivity activity; + private final DatabaseConnectionOrm dbConn; + private final PostDelayHandler pDelayHandler; + private final FragmentActivity activity; private int totalItemCount = 0; private int cachedPages = 1; - private IPlayPausePodcastClicked playPausePodcastClicked; + private final IPlayPausePodcastClicked playPausePodcastClicked; private boolean loading = false; // The minimum amount of items to have below your current scroll position // before loading more. - private int visibleThreshold = 5; - private SharedPreferences mPrefs; + private final int visibleThreshold = 5; + private final SharedPreferences mPrefs; public NewsListRecyclerAdapter(FragmentActivity activity, RecyclerView recyclerView, IPlayPausePodcastClicked playPausePodcastClicked, PostDelayHandler postDelayHandler, SharedPreferences prefs) { this.activity = activity; @@ -155,8 +156,9 @@ public class NewsListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.V Log.v(TAG, "Updating Listview - Podcast completed"); } + @NonNull @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, @NonNull int viewType) { + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == VIEW_PROG) { View v = LayoutInflater.from(parent.getContext()).inflate( R.layout.progressbar_item, parent, false); @@ -355,7 +357,7 @@ public class NewsListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.V private class RefreshDataAsyncTask extends AsyncTask<Void, Void, List<RssItem>> { - private IOnRefreshFinished listener; + private final IOnRefreshFinished listener; public RefreshDataAsyncTask(IOnRefreshFinished listener) { this.listener = listener; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ProgressBarWebChromeClient.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ProgressBarWebChromeClient.java index c0423600..6bcdaa3b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ProgressBarWebChromeClient.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/ProgressBarWebChromeClient.java @@ -15,7 +15,7 @@ public class ProgressBarWebChromeClient extends WebChromeClient { public final String TAG = getClass().getCanonicalName(); - private ProgressBar mProgressBar; + private final ProgressBar mProgressBar; public ProgressBarWebChromeClient(ProgressBar progressBar) { mProgressBar = progressBar; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/RssItemViewHolder.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/RssItemViewHolder.java index c727ddeb..f6bac358 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/RssItemViewHolder.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/adapter/RssItemViewHolder.java @@ -42,6 +42,7 @@ public abstract class RssItemViewHolder<T extends ViewBinding> extends RecyclerV private static final SparseIntArray downloadProgressList = new SparseIntArray(); private static FavIconHandler favIconHandler = null; protected final SharedPreferences mPrefs; + @SuppressWarnings("FieldCanBeLocal") private final int LengthBody = 400; private final ForegroundColorSpan bodyForegroundColor; private RecyclerItemClickListener clickListener; @@ -51,7 +52,7 @@ public abstract class RssItemViewHolder<T extends ViewBinding> extends RecyclerV private int starColor; private int inactiveStarColor; - private SparseIntArray initalFontSizes = new SparseIntArray(); + private final SparseIntArray initalFontSizes = new SparseIntArray(); RssItemViewHolder(@NonNull ViewBinding binding, SharedPreferences sharedPreferences) { super(binding.getRoot()); @@ -273,6 +274,7 @@ public abstract class RssItemViewHolder<T extends ViewBinding> extends RecyclerV return rssItem; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean shouldStayUnread() { return stayUnread; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadChangelogTask.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadChangelogTask.java index d43ffab6..643e667f 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadChangelogTask.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadChangelogTask.java @@ -24,15 +24,14 @@ import de.luhmer.owncloudnewsreader.view.ChangeLogFileListView; */ public class DownloadChangelogTask extends AsyncTask<Void, Void, String> { - @SuppressWarnings("unused") private static final String TAG = "DownloadChangelogTask"; private static final String README_URL = "https://raw.githubusercontent.com/nextcloud/news-android/master/CHANGELOG.md"; private static final String FILE_NAME = "changelog.xml"; - private Context mContext; - private ChangeLogFileListView mChangelogView; - private Listener mListener; + private final Context mContext; + private final ChangeLogFileListView mChangelogView; + private final Listener mListener; private IOException exception; /** @@ -126,7 +125,7 @@ public class DownloadChangelogTask extends AsyncTask<Void, Void, String> { } else if (!line.contains("---------------------")) { // version start versionStarted = true; - builder.append("<changelogversion versionName=\"" + line + "\">"); + builder.append("<changelogversion versionName=\"").append(line).append("\">"); } } @@ -135,14 +134,11 @@ public class DownloadChangelogTask extends AsyncTask<Void, Void, String> { return builder.toString(); } - private String saveToTempFile(String content, String fileName) throws IOException { + private String saveToTempFile(String content, @SuppressWarnings("SameParameterValue") String fileName) throws IOException { File file = File.createTempFile(fileName, null, mContext.getCacheDir()); - BufferedWriter out = new BufferedWriter(new FileWriter(file)); - try { + try (BufferedWriter out = new BufferedWriter(new FileWriter(file))) { out.write(content); - } finally { - out.close(); } return "file://" + file.getAbsolutePath(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadImageHandler.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadImageHandler.java index f41f904d..653ed5ec 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadImageHandler.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/async_tasks/DownloadImageHandler.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudAccountAuthenticator.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudAccountAuthenticator.java index 104494c8..19c551c1 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudAccountAuthenticator.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudAccountAuthenticator.java @@ -17,7 +17,7 @@ import static android.accounts.AccountManager.KEY_BOOLEAN_RESULT; public class OwnCloudAccountAuthenticator extends AbstractAccountAuthenticator { - private String TAG = "UdinicAuthenticator"; + private static final String TAG = "UdinicAuthenticator"; private final Context mContext; public OwnCloudAccountAuthenticator(Context context) { @@ -28,7 +28,7 @@ public class OwnCloudAccountAuthenticator extends AbstractAccountAuthenticator { } @Override - public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException { + public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) { Log.d("udinic", TAG + "> addAccount"); final Intent intent = new Intent(mContext, LoginDialogActivity.class); @@ -43,7 +43,7 @@ public class OwnCloudAccountAuthenticator extends AbstractAccountAuthenticator { } @Override - public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { + public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) { Log.d("udinic", TAG + "> getAuthToken"); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java index 90e42a69..c72b8564 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/authentication/OwnCloudSyncAdapter.java @@ -96,7 +96,7 @@ public class OwnCloudSyncAdapter extends AbstractThreadedSyncAdapter { - private class NextcloudSyncResult { + private static class NextcloudSyncResult { private final List<Folder> folders; private final List<Feed> feeds; private final boolean stateSyncSuccessful; @@ -122,17 +122,14 @@ public class OwnCloudSyncAdapter extends AbstractThreadedSyncAdapter { final DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(getContext()); Observable<Boolean> rssStateSync = Observable.fromPublisher( - new Publisher<Boolean>() { - @Override - public void subscribe(Subscriber<? super Boolean> s) { - Log.v(TAG, "(rssStateSync) subscribe() called with: s = [" + s + "] [" + Thread.currentThread().getName() + "]"); - try { - boolean success = ItemStateSync.PerformItemStateSync(mApi.getNewsAPI(), dbConn); - s.onNext(success); - s.onComplete(); - } catch(Exception ex) { - s.onError(ex); - } + (Publisher<Boolean>) s -> { + Log.v(TAG, "(rssStateSync) subscribe() called with: s = [" + s + "] [" + Thread.currentThread().getName() + "]"); + try { + boolean success = ItemStateSync.PerformItemStateSync(mApi.getNewsAPI(), dbConn); + s.onNext(success); + s.onComplete(); + } catch(Exception ex) { + s.onError(ex); } }).subscribeOn(Schedulers.newThread()); @@ -148,12 +145,9 @@ public class OwnCloudSyncAdapter extends AbstractThreadedSyncAdapter { .subscribeOn(Schedulers.newThread()); // Wait for results - Observable<NextcloudSyncResult> combined = Observable.zip(folderObservable, feedsObservable, rssStateSync, new Function3<List<Folder>, List<Feed>, Boolean, NextcloudSyncResult>() { - @Override - public NextcloudSyncResult apply(@NonNull List<Folder> folders, @NonNull List<Feed> feeds, @NonNull Boolean mRes) { - Log.v(TAG, "apply() called with: folders = [" + folders + "], feeds = [" + feeds + "], mRes = [" + mRes + "] [" + Thread.currentThread().getName() + "]"); - return new NextcloudSyncResult(folders, feeds, mRes); - } + Observable<NextcloudSyncResult> combined = Observable.zip(folderObservable, feedsObservable, rssStateSync, (folders, feeds, mRes) -> { + Log.v(TAG, "apply() called with: folders = [" + folders + "], feeds = [" + feeds + "], mRes = [" + mRes + "] [" + Thread.currentThread().getName() + "]"); + return new NextcloudSyncResult(folders, feeds, mRes); }); Log.v(TAG, "subscribing now.. [" + Thread.currentThread().getName() + "]"); @@ -192,15 +186,10 @@ public class OwnCloudSyncAdapter extends AbstractThreadedSyncAdapter { Log.v(TAG, "[syncRssItems] - onNext() called with: totalCount = [" + totalCount + "]"); Handler handler = new Handler(Looper.getMainLooper()); - handler.post(new Runnable() { - @Override - public void run() { - Toast.makeText( - getContext(), - getContext().getResources().getQuantityString(R.plurals.fetched_items_so_far, totalCount, totalCount), - Toast.LENGTH_SHORT).show(); - } - }); + handler.post(() -> Toast.makeText( + getContext(), + getContext().getResources().getQuantityString(R.plurals.fetched_items_so_far, totalCount, totalCount), + Toast.LENGTH_SHORT).show()); } @Override diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/chrometabs/CustomTabActivityManager.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/chrometabs/CustomTabActivityManager.java index aa7675cb..cbe1cb3f 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/chrometabs/CustomTabActivityManager.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/chrometabs/CustomTabActivityManager.java @@ -128,7 +128,7 @@ public class CustomTabActivityManager { List<ResolveInfo> handlers = pm.queryIntentActivities( intent, PackageManager.GET_RESOLVED_FILTER); - if (handlers == null || handlers.size() == 0) { + if (handlers.size() == 0) { return false; } for (ResolveInfo resolveInfo : handlers) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java index 0589ee7b..37b4557e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java @@ -61,7 +61,7 @@ public class DatabaseConnectionOrm { private static final String[] VIDEO_FORMATS = { "video/mp4" }; public enum SORT_DIRECTION { asc, desc } - private DaoSession daoSession; + private final DaoSession daoSession; private final static int PageSize = 100; @@ -314,8 +314,13 @@ public class DatabaseConnectionOrm { List<RssItem> rssItemList; do { int offset = iterationCount * itemsPerIteration; - int limit = itemsPerIteration; - rssItemList = daoSession.getRssItemDao().queryBuilder().where(whereCondition).limit(limit).offset(offset).listLazy(); + rssItemList = daoSession + .getRssItemDao() + .queryBuilder() + .where(whereCondition) + .limit(itemsPerIteration) + .offset(offset) + .listLazy(); for (RssItem rssItem : rssItemList) { rssItem.setRead_temp(true); } @@ -394,7 +399,7 @@ public class DatabaseConnectionOrm { class UpdateRssItemAsyncTask extends AsyncTask<Void, Void, Void> { - private RssItem rssItem; + private final RssItem rssItem; UpdateRssItemAsyncTask(RssItem rssItem) { this.rssItem = rssItem; @@ -665,13 +670,9 @@ public class DatabaseConnectionOrm { int totalUnreadItemsCount = 0; - Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null); - try - { - if(cursor != null) - { - if(cursor.getCount() > 0) - { + try (Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null)) { + if (cursor != null) { + if (cursor.getCount() > 0) { cursor.moveToFirst(); do { int folderId = cursor.getInt(0); @@ -681,18 +682,16 @@ public class DatabaseConnectionOrm { totalUnreadItemsCount += unreadCount; values[1].put(feedId, String.valueOf(unreadCount)); - if(folderId != 0) { - if(values[0].get(folderId) != null) { + if (folderId != 0) { + if (values[0].get(folderId) != null) { unreadCount += Integer.parseInt(values[0].get(folderId)); } values[0].put(folderId, String.valueOf(unreadCount)); } - } while(cursor.moveToNext()); + } while (cursor.moveToNext()); } } - } finally { - cursor.close(); } @@ -791,14 +790,10 @@ public class DatabaseConnectionOrm { { long result = -1; - Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null); - try - { - if(cursor != null && cursor.moveToFirst()) { + try (Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null)) { + if (cursor != null && cursor.moveToFirst()) { result = cursor.getLong(0); } - } finally { - cursor.close(); } return result; @@ -807,23 +802,17 @@ public class DatabaseConnectionOrm { public SparseArray<Integer> getIntegerSparseArrayFromSQL(String buildSQL, int indexKey, int indexValue) { SparseArray<Integer> result = new SparseArray<>(); - Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null); - try - { - if(cursor != null) - { - if(cursor.getCount() > 0) - { + try (Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null)) { + if (cursor != null) { + if (cursor.getCount() > 0) { cursor.moveToFirst(); do { int key = cursor.getInt(indexKey); Integer value = cursor.getInt(indexValue); result.put(key, value); - } while(cursor.moveToNext()); + } while (cursor.moveToNext()); } } - } finally { - cursor.close(); } return result; @@ -832,23 +821,17 @@ public class DatabaseConnectionOrm { public SparseArray<String> getStringSparseArrayFromSQL(String buildSQL, int indexKey, int indexValue) { SparseArray<String> result = new SparseArray<>(); - Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null); - try - { - if(cursor != null) - { - if(cursor.getCount() > 0) - { + try (Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null)) { + if (cursor != null) { + if (cursor.getCount() > 0) { cursor.moveToFirst(); do { int key = cursor.getInt(indexKey); String value = cursor.getString(indexValue); result.put(key, value); - } while(cursor.moveToNext()); + } while (cursor.moveToNext()); } } - } finally { - cursor.close(); } return result; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseHelperOrm.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseHelperOrm.java index 1c48237f..6da86f56 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseHelperOrm.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseHelperOrm.java @@ -1,5 +1,5 @@ -/** - * Android ownCloud News +/* +* Android ownCloud News * * @author David Luhmer * @copyright 2013 David Luhmer david-dev@live.de diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java index ef5ef537..0dea1d78 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/generator/DatabaseOrmGenerator.java @@ -17,11 +17,6 @@ public class DatabaseOrmGenerator { * (including older versions used for migration test purposes) and ensures * business rules are met; these include ensuring we only have a single * current schema instance and the version numbering is correct. - * - * @param args - * - * @throws Exception - * @throws IOException */ public static void main(String[] args) throws Exception { List<SchemaVersion> versions = new ArrayList<>(); @@ -42,7 +37,6 @@ public class DatabaseOrmGenerator { /** * Validate the schema, throws * - * @param versions * @throws IllegalArgumentException * if data is invalid */ diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/CurrentRssItemViewDao.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/CurrentRssItemViewDao.java index 44613799..399bfbc0 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/CurrentRssItemViewDao.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/CurrentRssItemViewDao.java @@ -48,7 +48,6 @@ public class CurrentRssItemViewDao extends AbstractDao<CurrentRssItemView, Long> db.execSQL(sql); } - /** @inheritdoc */ @Override protected void bindValues(SQLiteStatement stmt, CurrentRssItemView entity) { stmt.clearBindings(); @@ -56,37 +55,31 @@ public class CurrentRssItemViewDao extends AbstractDao<CurrentRssItemView, Long> stmt.bindLong(2, entity.getRssItemId()); } - /** @inheritdoc */ @Override public Long readKey(Cursor cursor, int offset) { - return cursor.getLong(offset + 0); + return cursor.getLong(offset); } - /** @inheritdoc */ @Override public CurrentRssItemView readEntity(Cursor cursor, int offset) { - CurrentRssItemView entity = new CurrentRssItemView( // - cursor.getLong(offset + 0), // id + return new CurrentRssItemView( // + cursor.getLong(offset), // id cursor.getLong(offset + 1) // rssItemId ); - return entity; } - /** @inheritdoc */ @Override public void readEntity(Cursor cursor, CurrentRssItemView entity, int offset) { - entity.setId(cursor.getLong(offset + 0)); + entity.setId(cursor.getLong(offset)); entity.setRssItemId(cursor.getLong(offset + 1)); } - /** @inheritdoc */ @Override protected Long updateKeyAfterInsert(CurrentRssItemView entity, long rowId) { entity.setId(rowId); return rowId; } - /** @inheritdoc */ @Override public Long getKey(CurrentRssItemView entity) { if(entity != null) { @@ -96,8 +89,7 @@ public class CurrentRssItemViewDao extends AbstractDao<CurrentRssItemView, Long> } } - /** @inheritdoc */ - @Override + @Override protected boolean isEntityUpdateable() { return true; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FeedDao.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FeedDao.java index be654579..18d62970 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FeedDao.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FeedDao.java @@ -106,27 +106,26 @@ public class FeedDao extends AbstractDao<Feed, Long> { /** @inheritdoc */ @Override public Long readKey(Cursor cursor, int offset) { - return cursor.getLong(offset + 0); + return cursor.getLong(offset); } /** @inheritdoc */ @Override public Feed readEntity(Cursor cursor, int offset) { - Feed entity = new Feed( // - cursor.getLong(offset + 0), // id + return new Feed( // + cursor.getLong(offset), // id cursor.isNull(offset + 1) ? null : cursor.getLong(offset + 1), // folderId cursor.getString(offset + 2), // feedTitle cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // faviconUrl cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // link cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // avgColour ); - return entity; } /** @inheritdoc */ @Override public void readEntity(Cursor cursor, Feed entity, int offset) { - entity.setId(cursor.getLong(offset + 0)); + entity.setId(cursor.getLong(offset)); entity.setFolderId(cursor.isNull(offset + 1) ? null : cursor.getLong(offset + 1)); entity.setFeedTitle(cursor.getString(offset + 2)); entity.setFaviconUrl(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); @@ -209,9 +208,8 @@ public class FeedDao extends AbstractDao<Feed, Long> { String sql = builder.toString(); String[] keyArray = new String[] { key.toString() }; - Cursor cursor = db.rawQuery(sql, keyArray); - - try { + + try (Cursor cursor = db.rawQuery(sql, keyArray)) { boolean available = cursor.moveToFirst(); if (!available) { return null; @@ -219,8 +217,6 @@ public class FeedDao extends AbstractDao<Feed, Long> { throw new IllegalStateException("Expected unique result, but count was " + cursor.getCount()); } return loadCurrentDeep(cursor, true); - } finally { - cursor.close(); } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FolderDao.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FolderDao.java index 30537be8..f43b942d 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FolderDao.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/FolderDao.java @@ -68,23 +68,22 @@ public class FolderDao extends AbstractDao<Folder, Long> { /** @inheritdoc */ @Override public Long readKey(Cursor cursor, int offset) { - return cursor.getLong(offset + 0); + return cursor.getLong(offset); } /** @inheritdoc */ @Override public Folder readEntity(Cursor cursor, int offset) { - Folder entity = new Folder( // - cursor.getLong(offset + 0), // id + return new Folder( // + cursor.getLong(offset), // id cursor.getString(offset + 1) // label ); - return entity; } /** @inheritdoc */ @Override public void readEntity(Cursor cursor, Folder entity, int offset) { - entity.setId(cursor.getLong(offset + 0)); + entity.setId(cursor.getLong(offset)); entity.setLabel(cursor.getString(offset + 1)); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java index ba4e1139..38f19bc8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/model/RssItemDao.java @@ -188,14 +188,14 @@ public class RssItemDao extends AbstractDao<RssItem, Long> { /** @inheritdoc */ @Override public Long readKey(Cursor cursor, int offset) { - return cursor.getLong(offset + 0); + return cursor.getLong(offset); } /** @inheritdoc */ @Override public RssItem readEntity(Cursor cursor, int offset) { - RssItem entity = new RssItem( // - cursor.getLong(offset + 0), // id + return new RssItem( // + cursor.getLong(offset), // id cursor.getLong(offset + 1), // feedId cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // link cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title @@ -216,13 +216,12 @@ public class RssItemDao extends AbstractDao<RssItem, Long> { cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18), // mediaDescription cursor.isNull(offset + 19) ? null : cursor.getShort(offset + 19) != 0 // rtl ); - return entity; } /** @inheritdoc */ @Override public void readEntity(Cursor cursor, RssItem entity, int offset) { - entity.setId(cursor.getLong(offset + 0)); + entity.setId(cursor.getLong(offset)); entity.setFeedId(cursor.getLong(offset + 1)); entity.setLink(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); @@ -321,9 +320,8 @@ public class RssItemDao extends AbstractDao<RssItem, Long> { String sql = builder.toString(); String[] keyArray = new String[] { key.toString() }; - Cursor cursor = db.rawQuery(sql, keyArray); - - try { + + try (Cursor cursor = db.rawQuery(sql, keyArray)) { boolean available = cursor.moveToFirst(); if (!available) { return null; @@ -331,8 +329,6 @@ public class RssItemDao extends AbstractDao<RssItem, Long> { throw new IllegalStateException("Expected unique result, but count was " + cursor.getCount()); } return loadCurrentDeep(cursor, true); - } finally { - cursor.close(); } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/di/ApiModule.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/di/ApiModule.java index 760471e2..1c62a6e5 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/di/ApiModule.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/di/ApiModule.java @@ -26,7 +26,7 @@ import okhttp3.OkHttpClient; @Module public class ApiModule { - private Application mApplication; + private final Application mApplication; public ApiModule(Application application) { this.mApplication = application; @@ -86,9 +86,8 @@ public class ApiModule { @Provides @Singleton OkHttpClient provideOkHttpClient(Cache cache) { - OkHttpClient client = new OkHttpClient(); - //client.setCache(cache); - return client; + // setCache(cache); + return new OkHttpClient(); } @Provides diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/UpdatePodcastStatusEvent.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/UpdatePodcastStatusEvent.java index 7e85eb09..846fa72a 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/UpdatePodcastStatusEvent.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/UpdatePodcastStatusEvent.java @@ -6,14 +6,15 @@ import de.luhmer.owncloudnewsreader.services.podcast.PlaybackService; public class UpdatePodcastStatusEvent { - private long current; - private long max; - private String author; - private String title; - private @PlaybackStateCompat.State int status; - private PlaybackService.VideoType videoType; - private long rssItemId; - private float speed; + private final long current; + private final long max; + private final String author; + private final String title; + private @PlaybackStateCompat.State + final int status; + private final PlaybackService.VideoType videoType; + private final long rssItemId; + private final float speed; public long getRssItemId() { return rssItemId; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/AutoResizeTextView.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/AutoResizeTextView.java index b6af7fbc..548e7a86 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/AutoResizeTextView.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/AutoResizeTextView.java @@ -16,6 +16,7 @@ package de.luhmer.owncloudnewsreader.helper; * 0. You just DO WHAT THE FUCK YOU WANT TO. */ +import android.annotation.SuppressLint; import android.content.Context; import android.text.Layout.Alignment; import android.text.StaticLayout; @@ -233,6 +234,7 @@ public class AutoResizeTextView extends AppCompatTextView { * @param width * @param height */ + @SuppressLint("SetTextI18n") public void resizeText(int width, int height) { CharSequence text = getText(); // Do not resize if the view does not have dimensions or there is no text diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ColorHelper.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ColorHelper.java index 25df2a90..23b03c0d 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ColorHelper.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ColorHelper.java @@ -1,5 +1,6 @@ package de.luhmer.owncloudnewsreader.helper; +import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; @@ -8,6 +9,7 @@ import de.luhmer.owncloudnewsreader.R; import de.luhmer.owncloudnewsreader.database.model.Feed; public class ColorHelper { + @SuppressLint("DefaultLocale") public static String getCssColor(int color) { // using %f for the double value would result in a localized string, e.g. 0,12 which // would be an invalid css color string diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java index ea73cf04..384ce1a7 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/DatabaseUtils.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java index b0176d22..4613a77c 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/FavIconHandler.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ForegroundListener.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ForegroundListener.java index 5d4a8e9c..4c63cc03 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ForegroundListener.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ForegroundListener.java @@ -4,6 +4,8 @@ import android.app.Activity; import android.app.Application; import android.os.Bundle; +import androidx.annotation.NonNull; + public class ForegroundListener implements Application.ActivityLifecycleCallbacks { private static int numStarted; @@ -13,37 +15,37 @@ public class ForegroundListener implements Application.ActivityLifecycleCallback } @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) { // do nothing } @Override - public void onActivityStarted(Activity activity) { + public void onActivityStarted(@NonNull Activity activity) { numStarted++; } @Override - public void onActivityResumed(Activity activity) { + public void onActivityResumed(@NonNull Activity activity) { // do nothing } @Override - public void onActivityPaused(Activity activity) { + public void onActivityPaused(@NonNull Activity activity) { // do nothing } @Override - public void onActivityStopped(Activity activity) { + public void onActivityStopped(@NonNull Activity activity) { numStarted--; } @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { // do nothing } @Override - public void onActivityDestroyed(Activity activity) { + public void onActivityDestroyed(@NonNull Activity activity) { // do nothing } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java index b4fe6268..11b50a14 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageDownloadFinished.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageHandler.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageHandler.java index 48352bff..1b838342 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageHandler.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ImageHandler.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -42,7 +42,7 @@ public class ImageHandler { Matcher matcherSrcLink = patternImgSrcLink.matcher(matcher.group()); if(matcherSrcLink.find()) { String link = matcherSrcLink.group(1); - if(link.startsWith("//")) { //Maybe the text contains image urls without http or https prefix. + if(link != null && link.startsWith("//")) { //Maybe the text contains image urls without http or https prefix. link = "https:" + link; } links.add(link); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java index 5754a615..7ce267f3 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NetworkConnection.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NewsFileUtils.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NewsFileUtils.java index 851d4a61..62dc60bf 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NewsFileUtils.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NewsFileUtils.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java index 43672dc9..13663682 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/NotificationActionReceiver.java @@ -4,8 +4,11 @@ import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.util.Log; +import androidx.annotation.RequiresApi; + import org.greenrobot.eventbus.EventBus; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; @@ -17,6 +20,7 @@ import static de.luhmer.owncloudnewsreader.Constants.NOTIFICATION_ACTION_MARK_AL public class NotificationActionReceiver extends BroadcastReceiver { private static final String TAG = NotificationActionReceiver.class.getCanonicalName(); + @RequiresApi(api = Build.VERSION_CODES.O) @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); @@ -26,7 +30,7 @@ public class NotificationActionReceiver extends BroadcastReceiver { dbConn.markAllItemsAsRead(); EventBus.getDefault().post(new SyncFinishedEvent()); - Integer notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); + int notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); if (notificationId != -1) { NotificationManager nMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nMgr.cancel(notificationId); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/OpmlXmlParser.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/OpmlXmlParser.java index eba5a48b..e6186a96 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/OpmlXmlParser.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/OpmlXmlParser.java @@ -158,7 +158,7 @@ public class OpmlXmlParser { // Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them off // to their respective "read" methods for processing. Otherwise, skips the tag. - private static Entry ReadOutline(XmlPullParser parser) throws XmlPullParserException, IOException { + private static Entry ReadOutline(XmlPullParser parser) { //parser.require(XmlPullParser.START_TAG, ns, "outline"); String link = parser.getAttributeValue(null, "xmlUrl"); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java index 4927596a..eb79e422 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/PostDelayHandler.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -32,7 +32,7 @@ public class PostDelayHandler { private static final String TAG = "PostDelayHandler"; private static Handler handlerTimer; - private Context context; + private final Context context; private static boolean isDelayed = false; public PostDelayHandler(Context context) { @@ -67,17 +67,16 @@ public class PostDelayHandler { Log.v(TAG, "delay() called with: time = [" + time + "]"); if(!isDelayed) { isDelayed = true; - handlerTimer.postDelayed(new Runnable(){ - public void run() { - isDelayed = false; - Log.v(TAG, "Time exceeded.. Sync state of changed items. Delay was: " + time); - if((!SyncItemStateService.isMyServiceRunning(context)) && NetworkConnection.isNetworkAvailable(context)) - { - Log.v(TAG, "Starting SyncItemStateService"); + handlerTimer.postDelayed(() -> { + isDelayed = false; + Log.v(TAG, "Time exceeded.. Sync state of changed items. Delay was: " + time); + if((!SyncItemStateService.isMyServiceRunning(context)) && NetworkConnection.isNetworkAvailable(context)) + { + Log.v(TAG, "Starting SyncItemStateService"); - SyncItemStateService.enqueueWork(context, new Intent()); - } - }}, time); + SyncItemStateService.enqueueWork(context, new Intent()); + } + }, time); } } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/SquareRoundedBitmapDisplayer.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/SquareRoundedBitmapDisplayer.java index 84beb411..62d2f80e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/SquareRoundedBitmapDisplayer.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/SquareRoundedBitmapDisplayer.java @@ -46,6 +46,7 @@ public class SquareRoundedBitmapDisplayer implements BitmapProcessor { // float scaleFactor = (float) width / bitmap.getWidth(); int side = Math.min(bitmap.getWidth(), bitmap.getHeight()); + //noinspection SuspiciousNameCombination int height = width; Log.d(TAG, "scale bitmap " + bitmap.getWidth() + "x" + bitmap.getHeight() + " -> " + width + "x" + height); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java index 6602ed49..23965e43 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeChooser.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -57,6 +57,7 @@ public class ThemeChooser { case 0: // Auto (Light / Dark) Log.v(TAG, "Auto (Light / Dark)"); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { + //noinspection deprecation defaultNightMode = AppCompatDelegate.MODE_NIGHT_AUTO_TIME; } else { // Android 10+ (Q) supports a system-wide dark mode defaultNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; @@ -131,6 +132,7 @@ public class ThemeChooser { Log.v(TAG, "MODE_NIGHT_YES (Dark Theme)"); return true; case AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM: + //noinspection deprecation case AppCompatDelegate.MODE_NIGHT_AUTO: //Log.v(TAG, "MODE_NIGHT_AUTO"); int nightModeFlags = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeUtils.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeUtils.java index 7c1a77f5..61d2416b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeUtils.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/helper/ThemeUtils.java @@ -1,5 +1,5 @@ -/** - * Android ownCloud News +/* +* Android ownCloud News * * @author David Luhmer * @copyright 2019 David Luhmer david-dev@live.de @@ -33,6 +33,7 @@ import android.widget.SearchView; import android.widget.TextView; import androidx.annotation.ColorInt; +import androidx.annotation.RequiresApi; import androidx.appcompat.widget.ActionMenuView; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; @@ -122,6 +123,7 @@ public class ThemeUtils { * @param activity * @param statusBarColor */ + @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static void changeStatusBarColor(Activity activity, @ColorInt int statusBarColor) { Window window = activity.getWindow(); // clear FLAG_TRANSLUCENT_STATUS flag: diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java index 10a20595..450309f8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/interfaces/ExpListTextClicked.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/AbstractItem.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/AbstractItem.java index 9b3002b1..9c8c5b3b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/AbstractItem.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/AbstractItem.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/ConcreteFeedItem.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/ConcreteFeedItem.java index 24f73a89..645ded1d 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/ConcreteFeedItem.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/ConcreteFeedItem.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/FolderSubscribtionItem.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/FolderSubscribtionItem.java index 2ed2c580..ab484a0f 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/FolderSubscribtionItem.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/FolderSubscribtionItem.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/NextcloudStatus.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/NextcloudStatus.java index 0c962a00..eaef20b8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/NextcloudStatus.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/NextcloudStatus.java @@ -9,7 +9,7 @@ public class NextcloudStatus { public String version; public Warnings warnings; - class Warnings { + static class Warnings { public String improperlyConfiguredCron; } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/Tuple.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/Tuple.java index 47111459..6f6fc1e6 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/Tuple.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/model/Tuple.java @@ -1,5 +1,6 @@ package de.luhmer.owncloudnewsreader.model; +// TODO replace with Pair public class Tuple<E, T> { public final E key; public final T value; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java index 6bd9e829..8cfa2468 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/notification/NextcloudNotificationManager.java @@ -85,7 +85,8 @@ public class NextcloudNotificationManager { Intent intentNewsReader = new Intent(context, NewsReaderListActivity.class); PendingIntent pIntent = PendingIntent.getActivity(context, 0, intentNewsReader, 0); - NotificationCompat.Builder mNotificationDownloadImages = new NotificationCompat.Builder(context, channelId) + + return new NotificationCompat.Builder(context, channelId) .setContentTitle(context.getResources().getString(R.string.app_name)) .setContentText(context.getString(R.string.notification_download_images_offline)) .setSmallIcon(R.drawable.ic_notification) @@ -93,8 +94,6 @@ public class NextcloudNotificationManager { .setAutoCancel(true) .setOnlyAlertOnce(true) .setOngoing(true); - - return mNotificationDownloadImages; } public static void showNotificationSaveSingleCachedImageService(Context context, String channelId, File file) { @@ -118,7 +117,8 @@ public class NextcloudNotificationManager { Intent intentNewsReader = new Intent(context, NewsReaderListActivity.class); PendingIntent pIntent = PendingIntent.getActivity(context, 0, intentNewsReader, 0); - NotificationCompat.Builder mNotificationWebPages = new NotificationCompat.Builder(context, channelId) + + return new NotificationCompat.Builder(context, channelId) .setContentTitle(context.getResources().getString(R.string.app_name)) .setContentText(context.getString(R.string.notification_download_articles_offline)) .setSmallIcon(R.drawable.ic_notification) @@ -126,8 +126,6 @@ public class NextcloudNotificationManager { .setAutoCancel(true) .setOnlyAlertOnce(true) .setOngoing(true); - - return mNotificationWebPages; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java index 9eafa476..768d09ec 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/FeedItemTags.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -29,7 +29,7 @@ public enum FeedItemTags { ALL_STARRED("2"), ALL("3"); - private String segment; + private final String segment; FeedItemTags(String segment) { this.segment = segment; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java index d2f36172..8d42dbe5 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/InsertIntoDatabase.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OkHttpImageDownloader.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OkHttpImageDownloader.java index b28a1025..8afae922 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OkHttpImageDownloader.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OkHttpImageDownloader.java @@ -15,10 +15,9 @@ import okhttp3.ResponseBody; public class OkHttpImageDownloader extends BaseImageDownloader { - @SuppressWarnings("unused") private static final String TAG = "OkHttpImageDownloader"; - private OkHttpClient imageClient; + private final OkHttpClient imageClient; public OkHttpImageDownloader(Context context, OkHttpClient imageClient) { super(context); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java index 416a381e..280a4e5d 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/OnAsyncTaskCompletedListener.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java index 113ed93a..1088e120 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/InsertRssItemIntoDatabase.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -138,6 +138,7 @@ class InsertRssItemIntoDatabase { } } + @SuppressWarnings("SameParameterValue") private static Boolean getBooleanOrDefault(String key, Boolean defaultValue, JsonObject jObj) { if(jObj.has(key) && !jObj.get(key).isJsonNull()) { return jObj.get(key).getAsBoolean(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java index 9340f494..ff6abef2 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/reader/nextcloud/RssItemObservable.java @@ -35,9 +35,9 @@ import okio.BufferedSource; */ public class RssItemObservable implements Publisher<Integer> { - private DatabaseConnectionOrm mDbConn; - private NewsAPI mNewsApi; - private SharedPreferences mPrefs; + private final DatabaseConnectionOrm mDbConn; + private final NewsAPI mNewsApi; + private final SharedPreferences mPrefs; private static final String TAG = RssItemObservable.class.getCanonicalName(); private static int maxSizePerSync = 300; @@ -130,7 +130,7 @@ public class RssItemObservable implements Publisher<Integer> { .subscribe(new Observer<RssItem>() { int totalUpdatedUnreadItemCount = 0; final int bufferSize = 150; - List<RssItem> buffer = new ArrayList<>(bufferSize); //Buffer of size X + final List<RssItem> buffer = new ArrayList<>(bufferSize); //Buffer of size X @Override public void onSubscribe(@NonNull Disposable d) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java index c6aec03c..ea80835a 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -34,6 +34,7 @@ import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Random; import de.greenrobot.dao.query.LazyList; @@ -112,7 +113,7 @@ public class DownloadImagesService extends JobIntentService { DatabaseConnectionOrm dbConn = new DatabaseConnectionOrm(this); mNotificationDownloadImages = NextcloudNotificationManager.buildNotificationDownloadImageService(this, CHANNEL_ID); - if(downloadMode.equals(DownloadMode.FAVICONS_ONLY)) { + if(Objects.equals(downloadMode, DownloadMode.FAVICONS_ONLY)) { List<Feed> feedList = dbConn.getListOfFeeds(); FavIconHandler favIconHandler = new FavIconHandler(getApplicationContext()); for(Feed feed : feedList) { @@ -122,7 +123,7 @@ public class DownloadImagesService extends JobIntentService { Log.e(TAG, ex.getMessage()); } } - } else if(downloadMode.equals(DownloadMode.FAVICONS_AND_PICTURES) || downloadMode.equals(DownloadMode.PICTURES_ONLY)) { + } else if(Objects.equals(downloadMode, DownloadMode.FAVICONS_AND_PICTURES) || Objects.equals(downloadMode, DownloadMode.PICTURES_ONLY)) { long lastId = intent.getLongExtra(LAST_ITEM_ID, 0); List<RssItem> rssItemList = dbConn.getAllItemsWithIdHigher(lastId); List<String> links = new ArrayList<>(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadWebPageService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadWebPageService.java index 729c19b8..55293b27 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadWebPageService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadWebPageService.java @@ -127,7 +127,7 @@ public class DownloadWebPageService extends Service { } } - private void delayedRunOnMainThread(Runnable runnable, int waitMillis) { + private void delayedRunOnMainThread(Runnable runnable, @SuppressWarnings("SameParameterValue") int waitMillis) { try { Thread.sleep(waitMillis); runOnMainThreadAndWait(runnable); @@ -189,7 +189,7 @@ public class DownloadWebPageService extends Service { class DownloadWebPage implements Runnable { - private String url; + private final String url; private WebView webView; private final Object lock; @@ -239,7 +239,7 @@ public class DownloadWebPageService extends Service { } } - class DownloadImageWebViewChromeClient extends WebChromeClient { + static class DownloadImageWebViewChromeClient extends WebChromeClient { @Override public boolean onConsoleMessage(ConsoleMessage cm) { //Log.d("TAG", cm.message() + " at " + cm.sourceId() + ":" + cm.lineNumber()); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastDownloadService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastDownloadService.java index 77315462..abafc983 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastDownloadService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastDownloadService.java @@ -36,7 +36,6 @@ import de.luhmer.owncloudnewsreader.notification.NextcloudNotificationManager; */ public class PodcastDownloadService extends IntentService { - @SuppressWarnings("unused") private static final String TAG = PodcastDownloadService.class.getCanonicalName(); // IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS @@ -45,7 +44,7 @@ public class PodcastDownloadService extends IntentService { private static final String EXTRA_RECEIVER = "de.luhmer.owncloudnewsreader.services.extra.RECEIVER"; private static final String EXTRA_URL = "de.luhmer.owncloudnewsreader.services.extra.URL"; - private EventBus eventBus; + private final EventBus eventBus; /** * Starts this service to download a podcast. If @@ -164,7 +163,7 @@ public class PodcastDownloadService extends IntentService { long startTime = System.nanoTime(); - byte data[] = new byte[1024]; + byte[] data = new byte[1024]; long total = 0; int count; int lastProgress = -1; @@ -236,7 +235,7 @@ public class PodcastDownloadService extends IntentService { //public static final int UPDATE_PROGRESS = 5555; - public class DownloadProgressUpdate { + public static class DownloadProgressUpdate { public DownloadProgressUpdate(PodcastItem podcast) { this.podcast = podcast; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java index acd2fe86..3e16256c 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java @@ -106,7 +106,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { private PlaybackService mPlaybackService; private MediaSessionCompat mSession; - public static final float PLAYBACK_SPEEDS[] = { 0.25f, 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f, 2.5f, 3.0f }; + public static final float[] PLAYBACK_SPEEDS = { 0.25f, 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f, 2.5f, 3.0f }; private float currentPlaybackSpeed = 1; @@ -163,7 +163,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { mediaItems.add(new MediaBrowserCompat.MediaItem(desc.build(), MediaBrowserCompat.MediaItem.FLAG_BROWSABLE)); } } else { - Long feedId = Long.parseLong(s.substring(5)); + long feedId = Long.parseLong(s.substring(5)); for (PodcastItem item: dbConn.getListOfAudioPodcastsForFeed(this, feedId)) { MediaDescriptionCompat.Builder desc = new MediaDescriptionCompat.Builder() @@ -333,7 +333,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { } */ - private PlaybackService.PodcastStatusListener podcastStatusListener = new PlaybackService.PodcastStatusListener() { + private final PlaybackService.PodcastStatusListener podcastStatusListener = new PlaybackService.PodcastStatusListener() { @Override public void podcastStatusUpdated() { syncMediaAndPlaybackStatus(); @@ -411,7 +411,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { @Subscribe public void onEvent(RegisterVideoOutput videoOutput) { if(mPlaybackService != null && mPlaybackService instanceof MediaPlayerPlaybackService) { - ((MediaPlayerPlaybackService) mPlaybackService).setVideoView(videoOutput.surfaceView, videoOutput.parentResizableView); + ((MediaPlayerPlaybackService) mPlaybackService).setVideoView(videoOutput.surfaceView); } } @@ -471,7 +471,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { audioManager.abandonAudioFocus(audioFocusChangeListener); } - private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = focusChange -> { + private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = focusChange -> { if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { // Permanent loss of audio focus // Pause playback immediately @@ -562,11 +562,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { .build()); } - if(playbackState == PlaybackStateCompat.STATE_PLAYING) { - mSession.setActive(true); - } else { - mSession.setActive(false); - } + mSession.setActive(playbackState == PlaybackStateCompat.STATE_PLAYING); podcastNotification.updateStateOfNotification(playbackState, currentPosition, totalDuration); } @@ -769,10 +765,7 @@ public class PodcastPlaybackService extends MediaBrowserServiceCompat { List<PodcastItem> audioPodcasts= new ArrayList<>(); for(PodcastFeedItem podcastFeed : dbConn.getListOfFeedsWithAudioPodcasts()) { long id = podcastFeed.mFeed.getId(); - for(PodcastItem podcastItem : dbConn.getListOfAudioPodcastsForFeed(PodcastPlaybackService.this, id)) { - - audioPodcasts.add(podcastItem); - } + audioPodcasts.addAll(dbConn.getListOfAudioPodcastsForFeed(PodcastPlaybackService.this, id)); } return audioPodcasts; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java index e40bb1f3..b435c182 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -27,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import androidx.annotation.NonNull; import androidx.core.app.JobIntentService; import java.io.IOException; @@ -62,7 +63,7 @@ public class SyncItemStateService extends JobIntentService { } @Override - protected void onHandleWork(Intent intent) { + protected void onHandleWork(@NonNull Intent intent) { if(mApi.getNewsAPI() == null) { Log.w(TAG, "API is not initialized"); return; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/events/SyncFailedEvent.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/events/SyncFailedEvent.java index 6ae8418e..49ff4941 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/events/SyncFailedEvent.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/events/SyncFailedEvent.java @@ -5,7 +5,7 @@ package de.luhmer.owncloudnewsreader.services.events; */ public class SyncFailedEvent { - private Throwable throwable; + private final Throwable throwable; public SyncFailedEvent(Throwable throwable) { this.throwable = throwable; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java index cee05c68..096ce698 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java @@ -21,7 +21,7 @@ import de.luhmer.owncloudnewsreader.model.PodcastItem; public class MediaPlayerPlaybackService extends PlaybackService { private static final String TAG = MediaPlayerPlaybackService.class.getCanonicalName(); - private MediaPlayer mMediaPlayer; + private final MediaPlayer mMediaPlayer; //private View parentView; public MediaPlayerPlaybackService(final Context context, PodcastStatusListener podcastStatusListener, MediaItem mediaItem) { @@ -145,7 +145,7 @@ public class MediaPlayerPlaybackService extends PlaybackService { return mMediaPlayer.getVideoWidth(); } - public void setVideoView(SurfaceView surfaceView, View parentResizableView) { + public void setVideoView(SurfaceView surfaceView) { if (surfaceView == null) { mMediaPlayer.setDisplay(null); //Log.v(TAG, "Disable Screen output!"); @@ -166,7 +166,7 @@ public class MediaPlayerPlaybackService extends PlaybackService { //private int mSurfaceWidth; //private int mSurfaceHeight; private SurfaceHolder mSurfaceHolder; - private SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() { + private final SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() { public void surfaceChanged(SurfaceHolder holder, int format, int surfaceWidth, int surfaceHeight) { Log.v(TAG, "surfaceChanged() called with: holder = [" + holder + "], format = [" + format + "], surfaceWidth = [" + surfaceWidth + "], surfaceHeight = [" + surfaceHeight + "]"); //mSurfaceWidth = surfaceWidth; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java index 48d2b67c..031c5edc 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java @@ -13,8 +13,8 @@ public abstract class PlaybackService { public enum VideoType { None, Video, VideoType, YouTube } private @PlaybackStateCompat.State int mStatus = PlaybackStateCompat.STATE_NONE; - private PodcastStatusListener podcastStatusListener; - private MediaItem mediaItem; + private final PodcastStatusListener podcastStatusListener; + private final MediaItem mediaItem; public interface PodcastStatusListener { void podcastStatusUpdated(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingDialogFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingDialogFragment.java index 2b77d0d5..bfc4c394 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingDialogFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingDialogFragment.java @@ -32,6 +32,7 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import de.luhmer.owncloudnewsreader.R; @@ -51,11 +52,11 @@ public class MemorizingDialogFragment extends DialogFragment @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); - Bundle i = getArguments(); + Bundle args = requireArguments(); - app = i.getString(MemorizingTrustManager.DECISION_INTENT_APP); - decisionId = i.getInt(MemorizingTrustManager.DECISION_INTENT_ID, MTMDecision.DECISION_INVALID); - cert = i.getString(MemorizingTrustManager.DECISION_INTENT_CERT); + app = args.getString(MemorizingTrustManager.DECISION_INTENT_APP); + decisionId = args.getInt(MemorizingTrustManager.DECISION_INTENT_ID, MTMDecision.DECISION_INVALID); + cert = args.getString(MemorizingTrustManager.DECISION_INTENT_CERT); //Log.d(TAG, "onResume with " + i.getExtras() + " decId=" + decisionId); //Log.d(TAG, "data: " + i.getData()); @@ -66,7 +67,7 @@ public class MemorizingDialogFragment extends DialogFragment public void onResume() { super.onResume(); - new AlertDialog.Builder(getActivity()).setTitle(R.string.mtm_accept_cert) + new AlertDialog.Builder(requireContext()).setTitle(R.string.mtm_accept_cert) .setMessage(cert) .setPositiveButton(R.string.mtm_decision_always, this) .setNegativeButton(R.string.mtm_decision_abort, this) @@ -79,9 +80,9 @@ public class MemorizingDialogFragment extends DialogFragment Intent i = new Intent(MemorizingTrustManager.DECISION_INTENT + "/" + app); i.putExtra(MemorizingTrustManager.DECISION_INTENT_ID, decisionId); i.putExtra(MemorizingTrustManager.DECISION_INTENT_CHOICE, decision); - getActivity().sendBroadcast(i); + requireActivity().sendBroadcast(i); //finish(); - getDialog().dismiss(); + requireDialog().dismiss(); } // react on AlertDialog button press @@ -101,7 +102,7 @@ public class MemorizingDialogFragment extends DialogFragment sendDecision(decision); } - public void onCancel(DialogInterface dialog) { + public void onCancel(@NonNull DialogInterface dialog) { sendDecision(MTMDecision.DECISION_ABORT); } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingTrustManager.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingTrustManager.java index 8f6e2192..1efaa34f 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingTrustManager.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/MemorizingTrustManager.java @@ -44,6 +44,10 @@ import android.os.Handler; import android.util.Log; import android.util.SparseArray; +import androidx.core.app.NotificationCompat; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentActivity; + import java.io.File; import java.io.IOException; import java.lang.ref.WeakReference; @@ -61,9 +65,6 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; -import androidx.core.app.NotificationCompat; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentActivity; import de.luhmer.owncloudnewsreader.R; /** @@ -94,11 +95,11 @@ public class MemorizingTrustManager implements X509TrustManager { private static final SparseArray<MTMDecision> openDecisions = new SparseArray<>(); Handler masterHandler; - private File keyStoreFile; - private KeyStore appKeyStore; - private X509TrustManager defaultTrustManager; + private final File keyStoreFile; + private final KeyStore appKeyStore; + private final X509TrustManager defaultTrustManager; private X509TrustManager appTrustManager; - private Context mContext; + private final Context mContext; /** Creates an instance of the MemorizingTrustManager class. * @@ -496,24 +497,22 @@ public class MemorizingTrustManager implements X509TrustManager { public void onReceive(Context ctx, Intent i) { interactResult(i); } }; mContext.registerReceiver(decisionReceiver, new IntentFilter(DECISION_INTENT + "/" + mContext.getPackageName())); - masterHandler.post(new Runnable() { - public void run() { - Intent ni = new Intent(mContext, MemorizingDialogFragment.class); - ni.setData(Uri.parse(MemorizingTrustManager.class.getName() + "/" + myId)); - - Bundle bundle = new Bundle(); - bundle.putString(DECISION_INTENT_APP, mContext.getPackageName()); - bundle.putInt(DECISION_INTENT_ID, myId); - bundle.putString(DECISION_INTENT_CERT, certMessage); - - DialogFragment dialog = new MemorizingDialogFragment(); - dialog.setArguments(bundle); - try { - dialog.show(((FragmentActivity) getUI()).getSupportFragmentManager(), "NoticeDialogFragment"); - } catch(Exception ex) { - Log.e(TAG, "startActivity: " + ex); - startActivityNotification(ni, certMessage); - } + masterHandler.post(() -> { + Intent ni = new Intent(mContext, MemorizingDialogFragment.class); + ni.setData(Uri.parse(MemorizingTrustManager.class.getName() + "/" + myId)); + + Bundle bundle = new Bundle(); + bundle.putString(DECISION_INTENT_APP, mContext.getPackageName()); + bundle.putInt(DECISION_INTENT_ID, myId); + bundle.putString(DECISION_INTENT_CERT, certMessage); + + DialogFragment dialog = new MemorizingDialogFragment(); + dialog.setArguments(bundle); + try { + dialog.show(((FragmentActivity) getUI()).getSupportFragmentManager(), "NoticeDialogFragment"); + } catch (Exception ex) { + Log.e(TAG, "startActivity: " + ex); + startActivityNotification(ni, certMessage); } }); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/OkHttpSSLClient.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/OkHttpSSLClient.java index d28af577..36f1aac8 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/OkHttpSSLClient.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/OkHttpSSLClient.java @@ -4,6 +4,8 @@ import android.annotation.SuppressLint; import android.content.SharedPreferences; import android.os.Build; +import androidx.annotation.NonNull; + import com.google.gson.JsonParseException; import java.io.IOException; @@ -123,6 +125,7 @@ public class OkHttpSSLClient { this.mCredentials = credentials; } + @NonNull @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/TLSSocketFactory.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/TLSSocketFactory.java index f50f6f76..7e111b44 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/TLSSocketFactory.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ssl/TLSSocketFactory.java @@ -60,19 +60,19 @@ public class TLSSocketFactory extends SSLSocketFactory { //NoTLS @Override - public Socket createSocket(String s, int i) throws IOException { + public Socket createSocket(String s, int i) { return null; } @Override - public Socket createSocket(String s, int i, InetAddress inetAddress, int i2) throws IOException { + public Socket createSocket(String s, int i, InetAddress inetAddress, int i2) { return null; } @Override - public Socket createSocket(InetAddress inetAddress, int i) throws IOException { + public Socket createSocket(InetAddress inetAddress, int i) { return null; } @Override - public Socket createSocket(InetAddress inetAddress, int i, InetAddress inetAddress2, int i2) throws IOException { + public Socket createSocket(InetAddress inetAddress, int i, InetAddress inetAddress2, int i2) { return null; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/AnimatingProgressBar.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/AnimatingProgressBar.java index fd8e7398..22256b7e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/AnimatingProgressBar.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/AnimatingProgressBar.java @@ -85,13 +85,7 @@ public class AnimatingProgressBar extends ProgressBar { animator = ValueAnimator.ofInt(getProgress() * RESOLUTION, progress * RESOLUTION); animator.setInterpolator(DEFAULT_INTERPOLATOR); animator.setDuration(ANIMATION_DURATION); - animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - - @Override - public void onAnimationUpdate(ValueAnimator animation) { - AnimatingProgressBar.super.setProgress((Integer) animation.getAnimatedValue()); - } - }); + animator.addUpdateListener(animation -> AnimatingProgressBar.super.setProgress((Integer) animation.getAnimatedValue())); } animator.cancel(); @@ -110,13 +104,7 @@ public class AnimatingProgressBar extends ProgressBar { animatorSecondary = ValueAnimator.ofInt(getSecondaryProgress() * RESOLUTION, secondaryProgress * RESOLUTION); animatorSecondary.setInterpolator(DEFAULT_INTERPOLATOR); animatorSecondary.setDuration(ANIMATION_DURATION); - animatorSecondary.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - - @Override - public void onAnimationUpdate(ValueAnimator animation) { - AnimatingProgressBar.super.setSecondaryProgress((Integer) animation.getAnimatedValue()); - } - }); + animatorSecondary.addUpdateListener(animation -> AnimatingProgressBar.super.setSecondaryProgress((Integer) animation.getAnimatedValue())); } animatorSecondary.cancel(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastNotification.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastNotification.java index 8277e13d..3493d2f2 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastNotification.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastNotification.java @@ -29,7 +29,7 @@ public class PodcastNotification { private NotificationCompat.Builder notificationBuilder; private final String CHANNEL_ID = "Podcast Notification"; - private MediaSessionCompat mSession; + private final MediaSessionCompat mSession; private @PlaybackStateCompat.State int lastStatus = PlaybackStateCompat.STATE_NONE; public final static int NOTIFICATION_ID = 1111; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastSlidingUpPanelLayout.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastSlidingUpPanelLayout.java index e2437064..85c83db7 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastSlidingUpPanelLayout.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/view/PodcastSlidingUpPanelLayout.java @@ -65,8 +65,7 @@ public class PodcastSlidingUpPanelLayout extends SlidingUpPanelLayout { v.getLayoutParams().height = 0; v.setVisibility(View.VISIBLE); - Animation a = new Animation() - { + Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { v.getLayoutParams().height = interpolatedTime == 1 diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetNewsViewsFactory.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetNewsViewsFactory.java index 6c7a1218..e67d6a9f 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetNewsViewsFactory.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetNewsViewsFactory.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -48,9 +48,9 @@ public class WidgetNewsViewsFactory implements RemoteViewsService.RemoteViewsFac private DatabaseConnectionOrm dbConn; private LazyList<RssItem> rssItems; - private Context context; + private final Context context; - private int appWidgetId; + private final int appWidgetId; public WidgetNewsViewsFactory(Context context, Intent intent) { this.context = context; diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java index 40f1b892..9df84b7a 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetProvider.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer @@ -60,7 +60,7 @@ public class WidgetProvider extends AppWidgetProvider { public static void UpdateWidget(Context context) { - int ids[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WidgetProvider.class)); + int[] ids = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WidgetProvider.class)); for(int appWidgetId : ids) { AppWidgetManager.getInstance(context).notifyAppWidgetViewDataChanged(appWidgetId, R.id.list_view); @@ -83,7 +83,7 @@ public class WidgetProvider extends AppWidgetProvider { public void onReceive(Context context, Intent intent) { inject(context); - final int appWidgetId[]; + final int[] appWidgetId; if(intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)) appWidgetId = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); else if(intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) @@ -111,7 +111,7 @@ public class WidgetProvider extends AppWidgetProvider { } */ else if (action.equals(ACTION_LIST_CLICK)) { try { - Long rssItemId = intent.getExtras().getLong(RSS_ITEM_ID); + long rssItemId = intent.getExtras().getLong(RSS_ITEM_ID); if (intent.hasExtra(ACTION_CHECKED_CLICK)) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetService.java index 84f3e63e..0bc6fb62 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/widget/WidgetService.java @@ -1,4 +1,4 @@ -/** +/* * Android ownCloud News * * @author David Luhmer |