From 4b5dc1fb4027475a69722429d44215a829e92357 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Denis=20=C3=87erri?=
<64997243+deniscerri@users.noreply.github.com>
Date: Sun, 1 Jan 2023 20:04:34 +0100
Subject: [PATCH] added invidous support for youtube queries
also added search suggestions
---
.idea/assetWizardSettings.xml | 4 +-
app/src/main/AndroidManifest.xml | 1 +
.../deniscerri/ytdlnis/DownloaderService.java | 1 +
.../com/deniscerri/ytdlnis/MainActivity.java | 12 +
.../deniscerri/ytdlnis/page/HomeFragment.java | 35 ++-
.../com/deniscerri/ytdlnis/util/InfoUtil.java | 268 ++++++++++++------
.../ytdlnis/util/NotificationUtil.java | 2 +-
app/src/main/res/drawable/ic_arrow_up.xml | 5 +
app/src/main/res/layout/fragment_home.xml | 15 +
.../res/layout/search_suggestion_item.xml | 67 +++++
10 files changed, 324 insertions(+), 86 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_arrow_up.xml
create mode 100644 app/src/main/res/layout/search_suggestion_item.xml
diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index ddd7d6b8..f70e7af4 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -331,7 +331,7 @@
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ec38bb68..69b75151 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,6 +18,7 @@
android:supportsRtl="true"
android:theme="@style/AppDefaultTheme" >
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java
index d0796bfa..17d0a6c3 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java
+++ b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java
@@ -228,6 +228,7 @@ public class DownloaderService extends Service {
});
}
}catch (Exception ignored){}
+ onDestroy();
}
private void onDownloadEnd(){
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java
index 517d7178..601856a6 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java
+++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java
@@ -14,9 +14,13 @@ import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
+import android.view.View;
+import android.view.WindowInsets;
+
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
+import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -134,6 +138,14 @@ public class MainActivity extends AppCompatActivity{
return true;
});
+ getWindow().getDecorView().setOnApplyWindowInsetsListener((view, windowInsets) -> {
+ WindowInsetsCompat windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat(windowInsets, view);
+ boolean isImeVisible = windowInsetsCompat.isVisible(WindowInsetsCompat.Type.ime());
+ binding.bottomNavigationView.setVisibility(isImeVisible ? View.GONE : View.VISIBLE);
+ view.onApplyWindowInsets(windowInsets);
+ return windowInsets;
+ });
+
askPermissions();
Intent intent = getIntent();
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java b/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java
index dfc24a0a..07f09b66 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java
+++ b/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java
@@ -21,7 +21,12 @@ import android.view.ViewGroup;
import android.view.Window;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
import androidx.appcompat.widget.SearchView;
+import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
@@ -44,6 +49,9 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.android.material.textfield.TextInputLayout;
+import com.google.android.material.textview.MaterialTextView;
+
+import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.regex.Matcher;
@@ -59,6 +67,8 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
private int inputQueriesLength = 0;
private RecyclerView recyclerView;
private HomeRecyclerViewAdapter homeRecyclerViewAdapter;
+ private ScrollView searchSuggestions;
+ private LinearLayout searchSuggestionsLinearLayout;
private ShimmerFrameLayout shimmerCards;
private CoordinatorLayout downloadFabs;
private CoordinatorLayout downloadAllFab;
@@ -220,6 +230,8 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
shimmerCards = fragmentView.findViewById(R.id.shimmer_results_framelayout);
topAppBar = fragmentView.findViewById(R.id.home_toolbar);
recyclerView = fragmentView.findViewById(R.id.recycler_view_home);
+ searchSuggestions = fragmentView.findViewById(R.id.search_suggestions_scroll_view);
+ searchSuggestionsLinearLayout = fragmentView.findViewById(R.id.search_suggestions_linear_layout);
homeRecyclerViewAdapter = new HomeRecyclerViewAdapter(resultObjects, this, activity);
recyclerView.setAdapter(homeRecyclerViewAdapter);
@@ -347,6 +359,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
public boolean onMenuItemActionExpand(MenuItem menuItem) {
homeFabs.setVisibility(View.GONE);
recyclerView.setVisibility(View.GONE);
+ searchSuggestions.setVisibility(View.VISIBLE);
return true;
}
@@ -354,6 +367,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
homeFabs.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.VISIBLE);
+ searchSuggestions.setVisibility(View.GONE);
return true;
}
};
@@ -368,6 +382,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
searchView.setQueryHint(getString(R.string.search_hint));
dbManager = new DBManager(context);
+ infoUtil = new InfoUtil(context);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
@@ -394,7 +409,25 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
}
@Override
- public boolean onQueryTextChange(String newText) { return false; }
+ public boolean onQueryTextChange(String newText) {
+ searchSuggestionsLinearLayout.removeAllViews();
+ if (newText.isEmpty()) return false;
+ Thread thread = new Thread(() -> {
+ ArrayList suggestions = infoUtil.getSearchSuggestions(newText);
+ for (int i = 0; i < suggestions.size();i++){
+ View v = LayoutInflater.from(fragmentContext).inflate(R.layout.search_suggestion_item, null);
+ TextView textView = v.findViewById(R.id.suggestion_text);
+ textView.setText(suggestions.get(i));
+ new Handler(Looper.getMainLooper()).post(() -> searchSuggestionsLinearLayout.addView(v));
+ textView.setOnClickListener(view -> onQueryTextSubmit(textView.getText().toString()));
+
+ MaterialButton mb = v.findViewById(R.id.set_search_query_button);
+ mb.setOnClickListener(view -> searchView.setQuery(textView.getText(), false));
+ }
+ });
+ thread.start();
+ return false;
+ }
});
topAppBar.setOnClickListener(view -> scrollToTop());
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.java b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.java
index f797f1ba..93b4ef80 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.java
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.java
@@ -28,9 +28,11 @@ import java.util.Locale;
public class InfoUtil {
private static final String TAG = "API MANAGER";
- private static String countryCODE = "US";
+ private static final String invidousURL = "https://invidious.baczek.me/api/v1/";
+ private static String countryCODE;
private ArrayList