Skip to content

Commit 1a136ee

Browse files
Fix UI issues related to insets in ViewImgurImageFragment and ViewImgurVideoFragment.
1 parent 0576126 commit 1a136ee

4 files changed

Lines changed: 82 additions & 42 deletions

File tree

app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewImgurMediaActivity.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,29 @@
77
import android.graphics.Typeface;
88
import android.graphics.drawable.ColorDrawable;
99
import android.graphics.drawable.Drawable;
10+
import android.os.Build;
1011
import android.os.Bundle;
1112
import android.os.Handler;
1213
import android.os.Looper;
1314
import android.text.Html;
1415
import android.view.Menu;
1516
import android.view.MenuItem;
1617
import android.view.View;
18+
import android.view.WindowManager;
1719
import android.widget.Toast;
1820

1921
import androidx.annotation.NonNull;
2022
import androidx.annotation.Nullable;
2123
import androidx.annotation.WorkerThread;
2224
import androidx.appcompat.app.ActionBar;
2325
import androidx.appcompat.app.AppCompatActivity;
26+
import androidx.core.view.OnApplyWindowInsetsListener;
27+
import androidx.core.view.ViewCompat;
28+
import androidx.core.view.WindowInsetsCompat;
2429
import androidx.fragment.app.Fragment;
2530
import androidx.fragment.app.FragmentManager;
2631
import androidx.fragment.app.FragmentStatePagerAdapter;
32+
import androidx.lifecycle.ViewModelProvider;
2733
import androidx.viewpager.widget.ViewPager;
2834

2935
import org.json.JSONArray;
@@ -58,6 +64,7 @@
5864
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
5965
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
6066
import ml.docilealligator.infinityforreddit.utils.Utils;
67+
import ml.docilealligator.infinityforreddit.viewmodels.ViewGalleryViewModel;
6168
import retrofit2.Call;
6269
import retrofit2.Callback;
6370
import retrofit2.Response;
@@ -86,13 +93,20 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
8693
Executor executor;
8794
private Handler handler;
8895
private ActivityViewImgurMediaBinding binding;
96+
ViewGalleryViewModel viewGalleryViewModel;
8997

9098
@Override
9199
protected void onCreate(Bundle savedInstanceState) {
92100
super.onCreate(savedInstanceState);
93101

94102
((Infinity) getApplication()).getAppComponent().inject(this);
95103

104+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
105+
getWindow().setDecorFitsSystemWindows(false);
106+
} else {
107+
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
108+
}
109+
96110
getTheme().applyStyle(R.style.Theme_Normal, true);
97111

98112
getTheme().applyStyle(FontStyle.valueOf(sharedPreferences
@@ -116,11 +130,6 @@ protected void onCreate(Bundle savedInstanceState) {
116130
binding = ActivityViewImgurMediaBinding.inflate(getLayoutInflater());
117131
setContentView(binding.getRoot());
118132

119-
getWindow().getDecorView().setSystemUiVisibility(
120-
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
121-
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
122-
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
123-
124133
handler = new Handler(Looper.getMainLooper());
125134

126135
useBottomAppBar = sharedPreferences.getBoolean(SharedPreferencesUtils.USE_BOTTOM_TOOLBAR_IN_MEDIA_VIEWER, false);
@@ -135,6 +144,17 @@ protected void onCreate(Bundle savedInstanceState) {
135144
getSupportActionBar().hide();
136145
}
137146

147+
viewGalleryViewModel = new ViewModelProvider(this).get(ViewGalleryViewModel.class);
148+
149+
ViewCompat.setOnApplyWindowInsetsListener(binding.getRoot(), new OnApplyWindowInsetsListener() {
150+
@NonNull
151+
@Override
152+
public WindowInsetsCompat onApplyWindowInsets(@NonNull View v, @NonNull WindowInsetsCompat insets) {
153+
viewGalleryViewModel.setInsets(Utils.getInsets(insets, false, false));
154+
return WindowInsetsCompat.CONSUMED;
155+
}
156+
});
157+
138158
String imgurId = getIntent().getStringExtra(EXTRA_IMGUR_ID);
139159
if (imgurId == null) {
140160
finish();

app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurImageFragment.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import androidx.core.content.ContextCompat;
2626
import androidx.core.content.FileProvider;
2727
import androidx.fragment.app.Fragment;
28+
import androidx.lifecycle.ViewModelProvider;
2829

2930
import com.bumptech.glide.Glide;
3031
import com.bumptech.glide.RequestManager;
@@ -52,6 +53,7 @@
5253
import ml.docilealligator.infinityforreddit.post.ImgurMedia;
5354
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
5455
import ml.docilealligator.infinityforreddit.utils.Utils;
56+
import ml.docilealligator.infinityforreddit.viewmodels.ViewGalleryViewModel;
5557

5658
public class ViewImgurImageFragment extends Fragment {
5759

@@ -69,6 +71,7 @@ public class ViewImgurImageFragment extends Fragment {
6971
private boolean isDownloading = false;
7072
private boolean isActionBarHidden = false;
7173
private FragmentViewImgurImageBinding binding;
74+
ViewGalleryViewModel viewGalleryViewModel;
7275

7376
public ViewImgurImageFragment() {
7477
// Required empty public constructor
@@ -140,6 +143,20 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
140143
});
141144
}
142145

146+
viewGalleryViewModel = new ViewModelProvider(requireActivity()).get(ViewGalleryViewModel.class);
147+
viewGalleryViewModel.getInsets().observe(getViewLifecycleOwner(), insets -> {
148+
ViewGroup.LayoutParams lp = binding.bottomNavigationViewImgurImageFragment.getLayoutParams();
149+
if (lp instanceof ViewGroup.MarginLayoutParams) {
150+
ViewGroup.MarginLayoutParams marginParams = (ViewGroup.MarginLayoutParams) lp;
151+
152+
marginParams.bottomMargin = insets.bottom;
153+
marginParams.setMarginStart(insets.left);
154+
marginParams.setMarginEnd(insets.right);
155+
156+
binding.bottomNavigationViewImgurImageFragment.setLayoutParams(marginParams);
157+
}
158+
});
159+
143160
return binding.getRoot();
144161
}
145162

app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragment.java

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import android.content.Context;
77
import android.content.SharedPreferences;
88
import android.content.pm.PackageManager;
9-
import android.content.res.Configuration;
109
import android.graphics.drawable.Drawable;
1110
import android.media.AudioManager;
1211
import android.os.Build;
@@ -17,14 +16,14 @@
1716
import android.view.MenuItem;
1817
import android.view.View;
1918
import android.view.ViewGroup;
20-
import android.widget.LinearLayout;
2119
import android.widget.Toast;
2220

2321
import androidx.annotation.NonNull;
2422
import androidx.annotation.OptIn;
2523
import androidx.core.content.ContextCompat;
2624
import androidx.core.content.res.ResourcesCompat;
2725
import androidx.fragment.app.Fragment;
26+
import androidx.lifecycle.ViewModelProvider;
2827
import androidx.media3.common.MediaItem;
2928
import androidx.media3.common.PlaybackParameters;
3029
import androidx.media3.common.Player;
@@ -58,6 +57,7 @@
5857
import ml.docilealligator.infinityforreddit.utils.APIUtils;
5958
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
6059
import ml.docilealligator.infinityforreddit.utils.Utils;
60+
import ml.docilealligator.infinityforreddit.viewmodels.ViewGalleryViewModel;
6161
import okhttp3.OkHttpClient;
6262

6363
public class ViewImgurVideoFragment extends Fragment {
@@ -88,6 +88,7 @@ public class ViewImgurVideoFragment extends Fragment {
8888
@Inject
8989
SimpleCache mSimpleCache;
9090
private ViewImgurVideoFragmentBindingAdapter binding;
91+
ViewGalleryViewModel viewGalleryViewModel;
9192

9293
public ViewImgurVideoFragment() {
9394
// Required empty public constructor
@@ -112,41 +113,22 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
112113

113114
imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_VIDEO);
114115

115-
if (!mSharedPreferences.getBoolean(SharedPreferencesUtils.VIDEO_PLAYER_IGNORE_NAV_BAR, false)) {
116-
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || getResources().getBoolean(R.bool.isTablet)) {
117-
//Set player controller bottom margin in order to display it above the navbar
118-
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
119-
LinearLayout controllerLinearLayout = binding.getRoot().findViewById(R.id.linear_layout_exo_playback_control_view);
120-
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams();
121-
params.bottomMargin = getResources().getDimensionPixelSize(resourceId);
122-
} else {
123-
//Set player controller right margin in order to display it above the navbar
124-
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
125-
LinearLayout controllerLinearLayout = binding.getRoot().findViewById(R.id.linear_layout_exo_playback_control_view);
126-
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams();
127-
params.rightMargin = getResources().getDimensionPixelSize(resourceId);
128-
}
129-
}
130-
131-
binding.getRoot().setControllerVisibilityListener(new PlayerView.ControllerVisibilityListener() {
132-
@Override
133-
public void onVisibilityChanged(int visibility) {
134-
switch (visibility) {
135-
case View.GONE:
136-
activity.getWindow().getDecorView().setSystemUiVisibility(
137-
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
138-
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
139-
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
140-
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
141-
| View.SYSTEM_UI_FLAG_FULLSCREEN
142-
| View.SYSTEM_UI_FLAG_IMMERSIVE);
143-
break;
144-
case View.VISIBLE:
145-
activity.getWindow().getDecorView().setSystemUiVisibility(
146-
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
147-
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
148-
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
149-
}
116+
binding.getRoot().setControllerVisibilityListener((PlayerView.ControllerVisibilityListener) visibility -> {
117+
switch (visibility) {
118+
case View.GONE:
119+
activity.getWindow().getDecorView().setSystemUiVisibility(
120+
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
121+
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
122+
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
123+
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
124+
| View.SYSTEM_UI_FLAG_FULLSCREEN
125+
| View.SYSTEM_UI_FLAG_IMMERSIVE);
126+
break;
127+
case View.VISIBLE:
128+
activity.getWindow().getDecorView().setSystemUiVisibility(
129+
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
130+
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
131+
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
150132
}
151133
});
152134

@@ -190,6 +172,20 @@ public void onVisibilityChanged(int visibility) {
190172
});
191173
}
192174

175+
viewGalleryViewModel = new ViewModelProvider(requireActivity()).get(ViewGalleryViewModel.class);
176+
viewGalleryViewModel.getInsets().observe(getViewLifecycleOwner(), insets -> {
177+
ViewGroup.LayoutParams lp = binding.getController().getLayoutParams();
178+
if (lp instanceof ViewGroup.MarginLayoutParams) {
179+
ViewGroup.MarginLayoutParams marginParams = (ViewGroup.MarginLayoutParams) lp;
180+
181+
marginParams.bottomMargin = insets.bottom;
182+
marginParams.setMarginStart(insets.left);
183+
marginParams.setMarginEnd(insets.right);
184+
185+
binding.getController().setLayoutParams(marginParams);
186+
}
187+
});
188+
193189
return binding.getRoot();
194190
}
195191

app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragmentBindingAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ml.docilealligator.infinityforreddit.fragments;
22

3+
import android.widget.LinearLayout;
34
import android.widget.TextView;
45

56
import androidx.media3.ui.PlayerView;
@@ -12,6 +13,7 @@
1213

1314
class ViewImgurVideoFragmentBindingAdapter {
1415
private FragmentViewImgurVideoBinding binding;
16+
private LinearLayout controller;
1517
private MaterialButton muteButton;
1618
private BottomAppBar bottomAppBar;
1719
private TextView titleTextView;
@@ -21,6 +23,7 @@ class ViewImgurVideoFragmentBindingAdapter {
2123

2224
ViewImgurVideoFragmentBindingAdapter(FragmentViewImgurVideoBinding binding) {
2325
this.binding = binding;
26+
controller = binding.getRoot().findViewById(R.id.linear_layout_exo_playback_control_view);
2427
muteButton = binding.getRoot().findViewById(R.id.mute_exo_playback_control_view);
2528
bottomAppBar = binding.getRoot().findViewById(R.id.bottom_navigation_exo_playback_control_view);
2629
titleTextView = binding.getRoot().findViewById(R.id.title_text_view_exo_playback_control_view);
@@ -33,6 +36,10 @@ PlayerView getRoot() {
3336
return binding.getRoot();
3437
}
3538

39+
LinearLayout getController() {
40+
return controller;
41+
}
42+
3643
MaterialButton getMuteButton() {
3744
return muteButton;
3845
}

0 commit comments

Comments
 (0)