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