private void exitFullscreenAnimated(boolean animated) { if (!isVideoFullScreen()) return; swipeRefreshLayout.setVisibility(View.VISIBLE); // reset the values correctly viewer.setRotation(0.f); viewer.setScaleX(1.f); viewer.setScaleY(1.f); viewer.setTranslationX(0.f); // simulate scrolling to fix the clipping and translationY simulateScroll(); // go back to normal! FragmentActivity activity = getActivity(); activity.supportInvalidateOptionsMenu(); if (activity instanceof ToolbarActivity) { // show the toolbar again ((ToolbarActivity) activity).getScrollHideToolbarListener().reset(); } Screen.unlockOrientation(activity); }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (!isVideoFullScreen() && newState == RecyclerView.SCROLL_STATE_IDLE) { int y = estimateRecyclerViewScrollY(recyclerView).or(Integer.MAX_VALUE); activity.getScrollHideToolbarListener().onScrollFinished(y); } }
@Override protected void onDestroy() { super.onDestroy(); mCancel = null; mOk = null; mSelectAll = null; mDeselectAll = null; mInvertSelection = null; mRecyclerView = null; mAdapter = null; }
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (isVideoFullScreen()) return; // get our facts straight int recyclerHeight = recyclerView.getHeight(); Optional<Integer> scrollEstimate = estimateRecyclerViewScrollY(recyclerView); boolean viewerVisible = scrollEstimate.isPresent(); int scrollY = scrollEstimate.or(viewer.getHeight()); int viewerHeight = viewer.getHeight(); boolean doFancyScroll = viewerHeight < recyclerHeight; ScrollHideToolbarListener toolbar = activity.getScrollHideToolbarListener(); if (!doFancyScroll || dy < 0 || scrollY > toolbar.getToolbarHeight()) { toolbar.onScrolled(dy); } float scroll = doFancyScroll ? 0.7f * scrollY : scrollY; if (doFancyScroll) { int clipTop = (int) (scroll + 0.5f); int clipBottom = viewer.getHeight() - (int) (scrollY - scroll + 0.5f); if (clipTop < clipBottom) { viewer.setClipBoundsCompat(new Rect(0, clipTop, viewer.getRight(), clipBottom)); } else { viewerVisible = false; } } else { // reset bounds. we might have set some previously and want // to clear those bounds now. viewer.setClipBoundsCompat(null); } offsetMediaView(viewerVisible, scroll); // position the vote indicator float remaining = viewerHeight - scrollY; int tbVisibleHeight = toolbar.getVisibleHeight(); float voteIndicatorY = Math.min((remaining - tbVisibleHeight) / 2, (recyclerHeight - tbVisibleHeight) / 2) + tbVisibleHeight; voteAnimationIndicator.setTranslationY(voteIndicatorY); }
@OnOptionsItemSelected(R.id.action_zoom) public void enterFullscreen() { FragmentActivity activity = getActivity(); if (activity == null) return; if (isStaticImage(feedItem)) { boolean hq = settings.loadHqInZoomView(); Intent intent = ZoomViewActivity.newIntent(activity, feedItem, hq); startActivity(intent); } else { FullscreenParams params = new FullscreenParams(); ObjectAnimator.ofPropertyValuesHolder( viewer, ofFloat(View.ROTATION, params.rotation), ofFloat(View.TRANSLATION_Y, params.trY), ofFloat(View.SCALE_X, params.scale), ofFloat(View.SCALE_Y, params.scale)) .setDuration(500) .start(); repostHint.setVisibility(View.GONE); // hide content below swipeRefreshLayout.setVisibility(View.GONE); if (activity instanceof ToolbarActivity) { // hide the toolbar if required necessary ((ToolbarActivity) activity).getScrollHideToolbarListener().hide(); } viewer.setClipBoundsCompat(null); activity.supportInvalidateOptionsMenu(); registerExitFullscreenListener(); // forbid orientation changes while in fullscreen Screen.lockOrientation(activity); } }
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scene_excluded_languages); setNavigationIcon(R.drawable.v_arrow_left_dark_x24); if (null == savedInstanceState) { onInit(); } else { onRestore(savedInstanceState); } mCancel = ViewUtils.$$(this, R.id.cancel); mOk = ViewUtils.$$(this, R.id.ok); mSelectAll = ViewUtils.$$(this, R.id.select_all); mDeselectAll = ViewUtils.$$(this, R.id.deselect_all); mInvertSelection = ViewUtils.$$(this, R.id.invert_selection); mRecyclerView = (EasyRecyclerView) ViewUtils.$$(this, R.id.recycler_view); mRecyclerView.setHasFixedSize(true); mRecyclerView.setClipToPadding(false); mAdapter = new LanguageAdapter(); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mCancel.setOnClickListener(this); mOk.setOnClickListener(this); mSelectAll.setOnClickListener(this); mDeselectAll.setOnClickListener(this); mInvertSelection.setOnClickListener(this); Ripple.addRipple(mCancel, false); Ripple.addRipple(mOk, false); Ripple.addRipple(mSelectAll, false); Ripple.addRipple(mDeselectAll, false); Ripple.addRipple(mInvertSelection, false); }
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); trySetupSwipeRefresh(); }
@Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); ButterKnife.bind(this); }
@Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); this.tabletLayout = view.findViewById(R.id.infoview) != null; if (!(getActivity() instanceof ToolbarActivity)) { throw new IllegalStateException("Fragment must be child of a ToolbarActivity."); } ToolbarActivity activity = (ToolbarActivity) getActivity(); activity.getScrollHideToolbarListener().reset(); int abHeight = AndroidUtility.getActionBarContentOffset(getActivity()); if (tabletLayout) { View tabletLayout = ButterKnife.findById(view, R.id.tabletlayout); tabletLayout.setPadding(0, abHeight, 0, 0); ((FrameLayout.LayoutParams) voteAnimationIndicator.getLayoutParams()).gravity = Gravity.CENTER; scrollHandler = new NoopOnScrollListener(); } else { // use height of the toolbar to configure swipe refresh layout. swipeRefreshLayout.setProgressViewOffset(false, 0, (int) (1.5 * abHeight)); scrollHandler = new ScrollHandler(activity); } content.addOnScrollListener(scrollHandler); swipeRefreshLayout.setColorSchemeResources(R.color.primary); swipeRefreshLayout.setOnRefreshListener( () -> { if (!isVideoFullScreen()) { rewindOnLoad = true; loadPostDetails(); } }); swipeRefreshLayout.setKeepScreenOn(settings.keepScreenOn()); adapter = new MergeRecyclerAdapter(); content.setItemAnimator(null); content.setLayoutManager(new LinearLayoutManager(getActivity())); content.setAdapter(adapter); initializeMediaView(); initializeInfoLine(); initializeCommentPostLine(); commentsAdapter = new CommentsAdapter(userService.getName().or("")); commentsAdapter.setCommentActionListener(this); commentsAdapter.setPrioritizeOpComments(settings.prioritizeOpComments()); commentsAdapter.setShowFavCommentButton(userService.isAuthorized()); adapter.addAdapter(commentsAdapter); // restore the postInfo, if possible. if (tags != null && comments != null) { displayTags(tags); displayComments(comments); } loadPostDetails(); // show the repost badge if this is a repost repostHint.setVisibility(isRepost() ? View.VISIBLE : View.GONE); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie); activateToolbar(); context = this; Bundle extras = getIntent().getExtras(); LOG_TAG = getBaseContext().getClass().getSimpleName(); movieDescriptionTextView = (TextView) findViewById(R.id.MoviePageMovieDescription); movieNameTextView = (TextView) findViewById(R.id.MoviePageMovieName); movieImageImageView = (ImageView) findViewById(R.id.MoviePageMovieImage); movieGenresTextView = (TextView) findViewById(R.id.MoviePageMovieGenres); movieReleaseDateTextView = (TextView) findViewById(R.id.MoviePageReleaseDate); imdbScoreTextView = (TextView) findViewById(R.id.MoviePageIMDBScore); metascoreTextView = (TextView) findViewById(R.id.MoviePageMetascore); rtScoreTextView = (TextView) findViewById(R.id.MoviePageRottenTomatoesScore); final ParseUser currentUser = ParseUser.getCurrentUser(); final String currentUserName = currentUser.getUsername(); volleySingleton = VolleySingleton.getInstance(); requestQueue = volleySingleton.getRequestQueue(); if (extras != null) { movieName = extras.getString("movieName"); movieId = extras.getInt("movieId"); movieNameTextView.setText(movieName); // String requestURL = TMDB_API_URL_BASE + TMDB_API_URL_MOVIE + Integer.toString(movieId) + // TMDB_API_URL_API + TMDB_API_KEY; String requestURL = URLBuilder.getMovieWithIdURL(movieId); movieDescriptionTextView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View PopupDesc = inflater.inflate(R.layout.description_popup, null, false); pw = new PopupWindow( PopupDesc, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); pw.showAtLocation(findViewById(R.id.MoviePageRelLay), Gravity.CENTER, 0, 0); PopupDescTextView = (TextView) PopupDesc.findViewById(R.id.popup_desc); PopupDescTextView.setText(movieDescriptionTextView.getText().toString()); pwRelLay = (RelativeLayout) PopupDesc.findViewById(R.id.descPopupRelLay); AnimationUtils.PopupAnimate(pwRelLay, true); pwRelLay.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { AnimationUtils.PopupAnimate(pwRelLay, false); pw.dismiss(); } }); } }); JsonObjectRequest movieRequest = new JsonObjectRequest( Request.Method.GET, requestURL, (JSONObject) null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { MovieInformation currentMovie = new MovieInformation(response, MOVIE_CONSTRUCTOR_EXTENDED); // String imageURL = TMDB_IMAGE_BASE_URL + TMDB_POSTER_SIZE_DEFAULT + // response.getString(TMDB_POSTER_PATH); if (!currentMovie.poster_path.isEmpty()) { String imageURL = URLBuilder.getImageURL(currentMovie.poster_path); Picasso.with(getBaseContext()) .load(imageURL) .error(R.drawable.ic_action_user) .into(movieImageImageView); } movieDescriptionTextView.setText(currentMovie.overview); if (!currentMovie.release_date.isEmpty()) { Date date = dateFormat.parse(currentMovie.release_date); } movieReleaseDateTextView.setText(currentMovie.release_date); String genresText = ""; if (currentMovie.genres.size() > 0) { genresText += GENRES.get(currentMovie.genres.get(0)); for (int i = 1; i < currentMovie.genres.size(); i++) { genresText += ", "; genresText += GENRES.get(currentMovie.genres.get(i)); } } movieGenresTextView.setText(genresText); if (!currentMovie.imdbId.isEmpty()) { String rtScoreURL = URLBuilder.getRottenTomatoesResultWithIdURL(currentMovie.imdbId); String omdbScoreURL = URLBuilder.getOmdbResultWithIdURL(currentMovie.imdbId); Log.d(LOG_TAG, rtScoreURL); final JsonObjectRequest rtScoreRequest = new JsonObjectRequest( Request.Method.GET, rtScoreURL, (JSONObject) null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { String possibleError = response.optString("error"); if (possibleError.equals("")) { Log.d(LOG_TAG, Integer.toString(response.getInt("id"))); JSONObject ratingObject = response.getJSONObject(ROTTEN_TOMATOES_RATINGS); double score = ratingObject.getInt(ROTTEN_TOMATOES_CRITICS_SCORE); score /= 10; String rtRating; if (score >= 0) { rtRating = Double.toString(score); } else { rtRating = "N/A"; } rtScoreTextView.setText(rtRating); } else { rtScoreTextView.setText("N/A"); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(LOG_TAG, "ERROR: " + error.getMessage()); } }); requestQueue.add(rtScoreRequest); JsonObjectRequest omdbScoreRequest = new JsonObjectRequest( Request.Method.GET, omdbScoreURL, (JSONObject) null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { String imdbRating = response.getString(OMDB_IMDB_RATING); imdbScoreTextView.setText(imdbRating); String metascore = response.getString(OMDB_METASCORE); if (!metascore.equals("N/A")) { double score = (double) Integer.parseInt(metascore); score /= 10; metascoreTextView.setText(Double.toString(score)); } else { metascoreTextView.setText("N/A"); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(LOG_TAG, "ERROR: " + error.getMessage()); } }); requestQueue.add(omdbScoreRequest); } } catch (JSONException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(LOG_TAG, "ERROR: " + error.getMessage()); } }); requestQueue.add(movieRequest); } mPager = (ViewPager) findViewById(R.id.MoviePagePager); mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); mTabs = (SlidingTabLayout) findViewById(R.id.MoviePageTabs); mTabs.setDistributeEvenly(true); mTabs.setViewPager(mPager); }
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(KEY_SELECTIONS, saveSelectionsToLong()); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); replaceFragment(R.id.scaffold_content, getSettingsFragment()); }