package com.ov3rk1ll.kinocast.ui; import android.annotation.SuppressLint; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.database.Cursor; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v4.view.GravityCompat; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.ProgressBar; import com.google.android.libraries.cast.companionlibrary.cast.BaseCastManager; import com.google.android.libraries.cast.companionlibrary.cast.VideoCastManager; import com.kobakei.ratethisapp.RateThisApp; import com.ov3rk1ll.kinocast.BuildConfig; import com.ov3rk1ll.kinocast.R; import com.ov3rk1ll.kinocast.api.Parser; import com.ov3rk1ll.kinocast.ui.helper.layout.SearchSuggestionAdapter; import com.ov3rk1ll.kinocast.utils.Utils; import com.winsontan520.wversionmanager.library.WVersionManager; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ // private final int RESOLVE_CONNECTION_REQUEST_CODE = 5001; private static final String STATE_TITLE = "state_title"; private static final String STATE_IS_SEARCHVIEW = "state_is_searchview"; private static final String NAV_ITEM_ID = "navItemId"; private CharSequence mTitle; private boolean mIsSearchView = false; private ProgressBar mProgressBar; private SearchSuggestionAdapter searchSuggestionAdapter; private DrawerLayout mDrawerLayout; private int mNavItemId; private final Handler mDrawerActionHandler = new Handler(); private MenuItem searchMenuItem; private int mNavItemLast = -1; // TODO: Implement this in a better way @SuppressLint("StaticFieldLeak") public static MainActivity activity; @SuppressLint("StaticFieldLeak") public static WebView webView; @SuppressWarnings("deprecation") @Override public void setSupportProgressBarIndeterminateVisibility(boolean visible) { //super.setSupportProgressBarIndeterminateVisibility(visible); mProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(BuildConfig.GMS_CHECK) BaseCastManager.checkGooglePlayServices(this); Utils.initializeCastManager(this); setContentView(R.layout.activity_main); activity = this; webView = (WebView)findViewById(R.id.webview); Log.i("CloudflareDdos", "onCreate: static fields are ready"); //supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); WVersionManager versionManager = new WVersionManager(this); versionManager.setVersionContentUrl(getString(R.string.update_check)); versionManager.checkVersion(); RateThisApp.onStart(this); RateThisApp.Config config = new RateThisApp.Config(); config.setUrl(getString(R.string.paypal_donate)); config.setTitle(R.string.donate_dialog_title); config.setMessage(R.string.donate_dialog_message); config.setYesButtonText(R.string.donate_dialog_yes); config.setNoButtonText(R.string.donate_dialog_never); config.setCancelButtonText(R.string.donate_dialog_later); RateThisApp.init(config); // If the criteria is satisfied, "Rate this app" dialog will be shown // RateThisApp.showRateDialogIfNeeded(this); /*BackupManager bm = new BackupManager(this); bm.requestRestore(new RestoreObserver() { @Override public void restoreFinished(int error) { Log.i("BackupManager", "RestoreObserver.restoreFinished with " + error); super.restoreFinished(error); } });*/ mTitle = getTitle(); mNavItemId = R.string.title_section1; if (savedInstanceState != null) { mTitle = savedInstanceState.getString(STATE_TITLE); mIsSearchView = savedInstanceState.getBoolean(STATE_IS_SEARCHVIEW); mNavItemId = savedInstanceState.getInt(NAV_ITEM_ID); } mProgressBar = new ProgressBar(this); mProgressBar.setVisibility(View.GONE); mProgressBar.setIndeterminate(true); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mProgressBar.setIndeterminateTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.accent))); } Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar_actionbar); Toolbar.LayoutParams layoutParams = new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.gravity = Gravity.END; toolbar.addView(mProgressBar, layoutParams); setSupportActionBar(toolbar); VideoCastManager.getInstance().reconnectSessionIfPossible(); // listen for navigation events mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); navigationView.setNavigationItemSelectedListener(this); navigationView.getMenu().findItem(mNavItemId).setChecked(true); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); //noinspection deprecation mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerToggle.syncState(); navigate(mNavItemId); /*final ArrayAdapter<Parser> adapter = new ArrayAdapter<Parser>(this, android.R.layout.simple_list_item_1, new Parser[]{new KinoxParser(), new Movie4kParser()}); ((Spinner)findViewById(R.id.spinner)).setAdapter(adapter); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); int parserId = preferences.getInt("parser", KinoxParser.PARSER_ID); ((Spinner)findViewById(R.id.spinner)).setSelection(parserId); ((Spinner)findViewById(R.id.spinner)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { int parserId = adapter.getItem(position).getParserId(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); preferences.edit().putInt("parser", parserId).apply(); Parser.selectParser(parserId); mDrawerLayout.closeDrawers(); navigate(mNavItemId); //mCallbacks.onNavigationModeItemSelected(position); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); */ } @Override protected void onDestroy() { /*BackupManager bm = new BackupManager(this); bm.dataChanged();*/ super.onDestroy(); } @Override protected void onStart() { super.onStart(); // TODO mGoogleApiClient.connect(); } @Override protected void onResume() { super.onResume(); VideoCastManager.getInstance().incrementUiCounter(); NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); // remove active state from settings if(mNavItemLast != -1) { navigationView.setCheckedItem(mNavItemLast); navigate(mNavItemLast); mNavItemLast = -1; } } @Override protected void onPause() { super.onPause(); VideoCastManager.getInstance().decrementUiCounter(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(STATE_TITLE, mTitle.toString()); outState.putBoolean(STATE_IS_SEARCHVIEW, mIsSearchView); outState.putInt(NAV_ITEM_ID, mNavItemId); } @Override public boolean dispatchKeyEvent(KeyEvent event) { return VideoCastManager.getInstance().onDispatchVolumeKeyEvent(event, 0.05) || super.dispatchKeyEvent(event); } public void restoreActionBar() { ActionBar actionBar = getSupportActionBar(); if(actionBar != null) { //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayShowTitleEnabled(true); actionBar.setTitle(mTitle); } } @Override public boolean onCreateOptionsMenu(final Menu menu) { if (!mDrawerLayout.isDrawerOpen(GravityCompat.START)) { getMenuInflater().inflate(R.menu.main, menu); VideoCastManager.getInstance().addMediaRouterButton(menu, R.id.media_route_menu_item); searchMenuItem = menu.findItem(R.id.action_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); searchView.setQueryHint(getResources().getString(R.string.searchable_hint)); //noinspection ConstantConditions searchSuggestionAdapter = new SearchSuggestionAdapter( getSupportActionBar().getThemedContext(), android.R.layout.simple_list_item_1, null, new String[]{"item"}, new int[]{android.R.id.text1}, 0); searchView.setSuggestionsAdapter(searchSuggestionAdapter); searchView.setOnSuggestionListener(new android.support.v7.widget.SearchView.OnSuggestionListener() { @Override public boolean onSuggestionSelect(int position) { return false; } @Override public boolean onSuggestionClick(int position) { Cursor cursor = (Cursor) searchSuggestionAdapter.getItem(position); doSearch(cursor.getString(1)); MenuItemCompat.collapseActionView(searchMenuItem); return true; } }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { if(newText.length() >= 2) searchSuggestionAdapter.getFilter().filter(newText); return true; } @Override public boolean onQueryTextSubmit(String query) { MenuItemCompat.collapseActionView(searchMenuItem); doSearch(query); return true; } }); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); //restoreActionBar(); return true; } return super.onCreateOptionsMenu(menu); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doSearch(query); MenuItemCompat.collapseActionView(searchMenuItem); } } private void doSearch(String query){ FragmentManager fragmentManager = getSupportFragmentManager(); mIsSearchView = true; mTitle = "\"" + query + "\""; restoreActionBar(); // TODO Utils.trackPath(MainActivity.this, "Search.html?q=" + query); fragmentManager.beginTransaction() .replace(R.id.container, ListFragment.newInstance(Parser.getInstance().getSearchPage(query))) .commit(); } @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawers(); }else if(mIsSearchView) { mIsSearchView = false; navigate(mNavItemId); }else{ super.onBackPressed(); } } @Override public boolean onNavigationItemSelected(@NonNull final MenuItem menuItem) { menuItem.setChecked(true); if(menuItem.getItemId() != R.string.title_section7) { mNavItemId = menuItem.getItemId(); } else { mNavItemLast = mNavItemId; } // allow some time after closing the drawer before performing real navigation // so the user can see what is happening mDrawerLayout.closeDrawer(GravityCompat.START); mDrawerActionHandler.postDelayed(new Runnable() { @Override public void run() { navigate(menuItem.getItemId()); } }, 250); return true; } private void navigate(int menuItemId){ String query = null; boolean isSpecial = false; switch (menuItemId) { case R.string.title_section1: query = Parser.getInstance().getCineMovies(); mTitle = getString(R.string.title_section1); break; case R.string.title_section2: query = Parser.getInstance().getPopularMovies(); mTitle = getString(R.string.title_section2); break; case R.string.title_section3: query = Parser.getInstance().getLatestMovies(); mTitle = getString(R.string.title_section3); break; case R.string.title_section4: query = Parser.getInstance().getPopularSeries(); mTitle = getString(R.string.title_section4); break; case R.string.title_section5: query = Parser.getInstance().getLatestSeries(); mTitle = getString(R.string.title_section5); break; case R.string.title_section6: query = String.valueOf(ListFragment.SPECIAL_BOOKMARKS); isSpecial = true; mTitle = getString(R.string.title_section6); break; case R.string.title_section7: startActivity(new Intent(this, SettingsActivity.class)); break; } restoreActionBar(); if(query != null) { ListFragment fragment; if(isSpecial){ int special = Integer.valueOf(query); fragment = ListFragment.newInstance(special); query = "Special/"; switch (special){ case ListFragment.SPECIAL_BOOKMARKS: query += "Bookmarks.html"; } } else { fragment = ListFragment.newInstance(query); } // TODO Utils.trackPath(MainActivity.this, query); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.container, fragment) .commit(); } } }