mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-25 07:21:14 +01:00
Android: Have each activity manage insets separately
This commit is contained in:
parent
6abcaadd5a
commit
e9c60f3e65
@ -7,7 +7,12 @@ import android.content.Intent;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
|
import com.google.android.material.color.MaterialColors;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
import org.dolphinemu.dolphinemu.R;
|
||||||
import org.dolphinemu.dolphinemu.databinding.ActivityConvertBinding;
|
import org.dolphinemu.dolphinemu.databinding.ActivityConvertBinding;
|
||||||
@ -19,6 +24,8 @@ public class ConvertActivity extends AppCompatActivity
|
|||||||
{
|
{
|
||||||
private static final String ARG_GAME_PATH = "game_path";
|
private static final String ARG_GAME_PATH = "game_path";
|
||||||
|
|
||||||
|
private ActivityConvertBinding mBinding;
|
||||||
|
|
||||||
public static void launch(Context context, String gamePath)
|
public static void launch(Context context, String gamePath)
|
||||||
{
|
{
|
||||||
Intent launcher = new Intent(context, ConvertActivity.class);
|
Intent launcher = new Intent(context, ConvertActivity.class);
|
||||||
@ -33,8 +40,8 @@ public class ConvertActivity extends AppCompatActivity
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
ActivityConvertBinding binding = ActivityConvertBinding.inflate(getLayoutInflater());
|
mBinding = ActivityConvertBinding.inflate(getLayoutInflater());
|
||||||
setContentView(binding.getRoot());
|
setContentView(mBinding.getRoot());
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
||||||
|
|
||||||
@ -48,13 +55,12 @@ public class ConvertActivity extends AppCompatActivity
|
|||||||
getSupportFragmentManager().beginTransaction().add(R.id.fragment_convert, fragment).commit();
|
getSupportFragmentManager().beginTransaction().add(R.id.fragment_convert, fragment).commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.toolbarConvertLayout.setTitle(getString(R.string.convert_convert));
|
mBinding.toolbarConvertLayout.setTitle(getString(R.string.convert_convert));
|
||||||
setSupportActionBar(binding.toolbarConvert);
|
setSupportActionBar(mBinding.toolbarConvert);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarConvert, binding.scrollViewConvert,
|
setInsets();
|
||||||
binding.workaroundView);
|
ThemeHelper.enableScrollTint(this, mBinding.toolbarConvert, mBinding.appbarConvert);
|
||||||
ThemeHelper.enableScrollTint(this, binding.toolbarConvert, binding.appbarConvert);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -63,4 +69,22 @@ public class ConvertActivity extends AppCompatActivity
|
|||||||
onBackPressed();
|
onBackPressed();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarConvert, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(insets, mBinding.appbarConvert);
|
||||||
|
|
||||||
|
mBinding.scrollViewConvert.setPadding(insets.left, 0, insets.right, insets.bottom);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarConvert, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,12 @@ import android.view.View;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
|
import com.google.android.material.color.MaterialColors;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
import org.dolphinemu.dolphinemu.R;
|
||||||
@ -44,6 +48,8 @@ public class UserDataActivity extends AppCompatActivity
|
|||||||
|
|
||||||
private boolean sMustRestartApp = false;
|
private boolean sMustRestartApp = false;
|
||||||
|
|
||||||
|
private ActivityUserDataBinding mBinding;
|
||||||
|
|
||||||
public static void launch(Context context)
|
public static void launch(Context context)
|
||||||
{
|
{
|
||||||
Intent launcher = new Intent(context, UserDataActivity.class);
|
Intent launcher = new Intent(context, UserDataActivity.class);
|
||||||
@ -57,8 +63,8 @@ public class UserDataActivity extends AppCompatActivity
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
ActivityUserDataBinding binding = ActivityUserDataBinding.inflate(getLayoutInflater());
|
mBinding = ActivityUserDataBinding.inflate(getLayoutInflater());
|
||||||
setContentView(binding.getRoot());
|
setContentView(mBinding.getRoot());
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
||||||
|
|
||||||
@ -68,25 +74,24 @@ public class UserDataActivity extends AppCompatActivity
|
|||||||
|
|
||||||
int user_data_new_location = android_10 ?
|
int user_data_new_location = android_10 ?
|
||||||
R.string.user_data_new_location_android_10 : R.string.user_data_new_location;
|
R.string.user_data_new_location_android_10 : R.string.user_data_new_location;
|
||||||
binding.textType.setText(legacy ? R.string.user_data_old_location : user_data_new_location);
|
mBinding.textType.setText(legacy ? R.string.user_data_old_location : user_data_new_location);
|
||||||
|
|
||||||
binding.textPath.setText(DirectoryInitialization.getUserDirectory());
|
mBinding.textPath.setText(DirectoryInitialization.getUserDirectory());
|
||||||
|
|
||||||
binding.textAndroid11.setVisibility(android_11 && !legacy ? View.VISIBLE : View.GONE);
|
mBinding.textAndroid11.setVisibility(android_11 && !legacy ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
binding.buttonOpenSystemFileManager.setVisibility(android_11 ? View.VISIBLE : View.GONE);
|
mBinding.buttonOpenSystemFileManager.setVisibility(android_11 ? View.VISIBLE : View.GONE);
|
||||||
binding.buttonOpenSystemFileManager.setOnClickListener(view -> openFileManager());
|
mBinding.buttonOpenSystemFileManager.setOnClickListener(view -> openFileManager());
|
||||||
|
|
||||||
binding.buttonImportUserData.setOnClickListener(view -> importUserData());
|
mBinding.buttonImportUserData.setOnClickListener(view -> importUserData());
|
||||||
|
|
||||||
binding.buttonExportUserData.setOnClickListener(view -> exportUserData());
|
mBinding.buttonExportUserData.setOnClickListener(view -> exportUserData());
|
||||||
|
|
||||||
setSupportActionBar(binding.toolbarUserData);
|
setSupportActionBar(mBinding.toolbarUserData);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarUserData,
|
setInsets();
|
||||||
binding.scrollViewUserData, binding.workaroundView);
|
ThemeHelper.enableScrollTint(this, mBinding.toolbarUserData, mBinding.appbarUserData);
|
||||||
ThemeHelper.enableScrollTint(this, binding.toolbarUserData, binding.appbarUserData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -353,4 +358,22 @@ public class UserDataActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarUserData, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(insets, mBinding.appbarUserData);
|
||||||
|
|
||||||
|
mBinding.scrollViewUserData.setPadding(insets.left, 0, insets.right, insets.bottom);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarUserData, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,15 +9,18 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
import com.google.android.material.divider.MaterialDividerItemDecoration;
|
import com.google.android.material.divider.MaterialDividerItemDecoration;
|
||||||
|
|
||||||
|
import org.dolphinemu.dolphinemu.R;
|
||||||
import org.dolphinemu.dolphinemu.databinding.FragmentCheatListBinding;
|
import org.dolphinemu.dolphinemu.databinding.FragmentCheatListBinding;
|
||||||
import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
|
import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
|
||||||
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
|
|
||||||
|
|
||||||
public class CheatListFragment extends Fragment
|
public class CheatListFragment extends Fragment
|
||||||
{
|
{
|
||||||
@ -46,7 +49,7 @@ public class CheatListFragment extends Fragment
|
|||||||
divider.setLastItemDecorated(false);
|
divider.setLastItemDecorated(false);
|
||||||
mBinding.cheatList.addItemDecoration(divider);
|
mBinding.cheatList.addItemDecoration(divider);
|
||||||
|
|
||||||
InsetsHelper.setUpList(getContext(), mBinding.cheatList);
|
setInsets();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -55,4 +58,15 @@ public class CheatListFragment extends Fragment
|
|||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
mBinding = null;
|
mBinding = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.cheatList, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0,
|
||||||
|
insets.bottom + getResources().getDimensionPixelSize(R.dimen.spacing_xtralarge));
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,11 @@ import androidx.annotation.ColorInt;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsAnimationCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout;
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout;
|
||||||
|
|
||||||
@ -33,6 +36,8 @@ import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
|
|||||||
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
|
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
|
||||||
import org.dolphinemu.dolphinemu.utils.ThemeHelper;
|
import org.dolphinemu.dolphinemu.utils.ThemeHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class CheatsActivity extends AppCompatActivity
|
public class CheatsActivity extends AppCompatActivity
|
||||||
implements SlidingPaneLayout.PanelSlideListener
|
implements SlidingPaneLayout.PanelSlideListener
|
||||||
{
|
{
|
||||||
@ -104,9 +109,7 @@ public class CheatsActivity extends AppCompatActivity
|
|||||||
setSupportActionBar(mBinding.toolbarCheats);
|
setSupportActionBar(mBinding.toolbarCheats);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
InsetsHelper.setUpCheatsLayout(this, mBinding.appbarCheats, mBinding.slidingPaneLayout,
|
setInsets();
|
||||||
mBinding.cheatDetails,
|
|
||||||
mBinding.workaroundView);
|
|
||||||
|
|
||||||
@ColorInt int color =
|
@ColorInt int color =
|
||||||
MaterialColors.getColor(mBinding.toolbarCheats, R.attr.colorSurfaceVariant);
|
MaterialColors.getColor(mBinding.toolbarCheats, R.attr.colorSurfaceVariant);
|
||||||
@ -264,4 +267,73 @@ public class CheatsActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarCheats, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
Insets keyboardInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(barInsets, mBinding.appbarCheats);
|
||||||
|
|
||||||
|
mBinding.slidingPaneLayout.setPadding(barInsets.left, 0, barInsets.right, 0);
|
||||||
|
|
||||||
|
// Set keyboard insets if the system supports smooth keyboard animations
|
||||||
|
ViewGroup.MarginLayoutParams mlpDetails =
|
||||||
|
(ViewGroup.MarginLayoutParams) mBinding.cheatDetails.getLayoutParams();
|
||||||
|
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.R)
|
||||||
|
{
|
||||||
|
if (keyboardInsets.bottom > 0)
|
||||||
|
{
|
||||||
|
mlpDetails.bottomMargin = keyboardInsets.bottom;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mlpDetails.bottomMargin = barInsets.bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mlpDetails.bottomMargin == 0)
|
||||||
|
{
|
||||||
|
mlpDetails.bottomMargin = barInsets.bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mBinding.cheatDetails.setLayoutParams(mlpDetails);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(barInsets.bottom, mBinding.workaroundView);
|
||||||
|
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarCheats, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update the layout for every frame that the keyboard animates in
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
|
||||||
|
{
|
||||||
|
ViewCompat.setWindowInsetsAnimationCallback(mBinding.cheatDetails,
|
||||||
|
new WindowInsetsAnimationCompat.Callback(
|
||||||
|
WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP)
|
||||||
|
{
|
||||||
|
int keyboardInsets = 0;
|
||||||
|
int barInsets = 0;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public WindowInsetsCompat onProgress(@NonNull WindowInsetsCompat insets,
|
||||||
|
@NonNull List<WindowInsetsAnimationCompat> runningAnimations)
|
||||||
|
{
|
||||||
|
ViewGroup.MarginLayoutParams mlpDetails =
|
||||||
|
(ViewGroup.MarginLayoutParams) mBinding.cheatDetails.getLayoutParams();
|
||||||
|
keyboardInsets = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom;
|
||||||
|
barInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
|
||||||
|
mlpDetails.bottomMargin = Math.max(keyboardInsets, barInsets);
|
||||||
|
mBinding.cheatDetails.setLayoutParams(mlpDetails);
|
||||||
|
return insets;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,14 @@ import android.content.Intent;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import com.google.android.material.color.MaterialColors;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
import org.dolphinemu.dolphinemu.R;
|
||||||
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
|
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
|
||||||
import org.dolphinemu.dolphinemu.databinding.ActivityRiivolutionBootBinding;
|
import org.dolphinemu.dolphinemu.databinding.ActivityRiivolutionBootBinding;
|
||||||
@ -81,12 +86,11 @@ public class RiivolutionBootActivity extends AppCompatActivity
|
|||||||
runOnUiThread(() -> populateList(patches));
|
runOnUiThread(() -> populateList(patches));
|
||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
mBinding.toolbarRiivolutionLayout.setTitle(getString(R.string.riivolution_riivolution));
|
mBinding.toolbarRiivolution.setTitle(getString(R.string.riivolution_riivolution));
|
||||||
setSupportActionBar(mBinding.toolbarRiivolution);
|
setSupportActionBar(mBinding.toolbarRiivolution);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
InsetsHelper.setUpAppBarWithScrollView(this, mBinding.appbarRiivolution,
|
setInsets();
|
||||||
mBinding.scrollViewRiivolution, mBinding.workaroundView);
|
|
||||||
ThemeHelper.enableScrollTint(this, mBinding.toolbarRiivolution, mBinding.appbarRiivolution);
|
ThemeHelper.enableScrollTint(this, mBinding.toolbarRiivolution, mBinding.appbarRiivolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,4 +117,22 @@ public class RiivolutionBootActivity extends AppCompatActivity
|
|||||||
mBinding.recyclerView.setAdapter(new RiivolutionAdapter(this, patches));
|
mBinding.recyclerView.setAdapter(new RiivolutionAdapter(this, patches));
|
||||||
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarRiivolution, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(insets, mBinding.appbarRiivolution);
|
||||||
|
|
||||||
|
mBinding.scrollViewRiivolution.setPadding(insets.left, 0, insets.right, insets.bottom);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarRiivolution, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,21 +9,20 @@ import android.os.Bundle;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.appbar.MaterialToolbar;
|
import com.google.android.material.color.MaterialColors;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.NativeLibrary;
|
import org.dolphinemu.dolphinemu.NativeLibrary;
|
||||||
@ -49,6 +48,8 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
|
|||||||
|
|
||||||
private CollapsingToolbarLayout mToolbarLayout;
|
private CollapsingToolbarLayout mToolbarLayout;
|
||||||
|
|
||||||
|
private ActivitySettingsBinding mBinding;
|
||||||
|
|
||||||
public static void launch(Context context, MenuTag menuTag, String gameId, int revision,
|
public static void launch(Context context, MenuTag menuTag, String gameId, int revision,
|
||||||
boolean isWii)
|
boolean isWii)
|
||||||
{
|
{
|
||||||
@ -82,8 +83,8 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
|
|||||||
MainPresenter.skipRescanningLibrary();
|
MainPresenter.skipRescanningLibrary();
|
||||||
}
|
}
|
||||||
|
|
||||||
ActivitySettingsBinding binding = ActivitySettingsBinding.inflate(getLayoutInflater());
|
mBinding = ActivitySettingsBinding.inflate(getLayoutInflater());
|
||||||
setContentView(binding.getRoot());
|
setContentView(mBinding.getRoot());
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
||||||
|
|
||||||
@ -98,17 +99,16 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
|
|||||||
mPresenter = new SettingsActivityPresenter(this, getSettings());
|
mPresenter = new SettingsActivityPresenter(this, getSettings());
|
||||||
mPresenter.onCreate(savedInstanceState, menuTag, gameID, revision, isWii, this);
|
mPresenter.onCreate(savedInstanceState, menuTag, gameID, revision, isWii, this);
|
||||||
|
|
||||||
mToolbarLayout = binding.toolbarSettingsLayout;
|
mToolbarLayout = mBinding.toolbarSettingsLayout;
|
||||||
setSupportActionBar(binding.toolbarSettings);
|
setSupportActionBar(mBinding.toolbarSettings);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
// TODO: Remove this when CollapsingToolbarLayouts are fixed by Google
|
// TODO: Remove this when CollapsingToolbarLayouts are fixed by Google
|
||||||
// https://github.com/material-components/material-components-android/issues/1310
|
// https://github.com/material-components/material-components-android/issues/1310
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(mToolbarLayout, null);
|
ViewCompat.setOnApplyWindowInsetsListener(mToolbarLayout, null);
|
||||||
|
|
||||||
InsetsHelper.setUpSettingsLayout(this, binding.appbarSettings, binding.frameContentSettings,
|
setInsets();
|
||||||
binding.workaroundView);
|
ThemeHelper.enableScrollTint(this, mBinding.toolbarSettings, mBinding.appbarSettings);
|
||||||
ThemeHelper.enableScrollTint(this, binding.toolbarSettings, binding.appbarSettings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -344,4 +344,22 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
|
|||||||
{
|
{
|
||||||
mToolbarLayout.setTitle(title);
|
mToolbarLayout.setTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarSettings, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(insets, mBinding.appbarSettings);
|
||||||
|
|
||||||
|
mBinding.frameContentSettings.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarSettings, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,9 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
@ -20,8 +23,6 @@ import org.dolphinemu.dolphinemu.R;
|
|||||||
import org.dolphinemu.dolphinemu.databinding.FragmentSettingsBinding;
|
import org.dolphinemu.dolphinemu.databinding.FragmentSettingsBinding;
|
||||||
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
|
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
|
||||||
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
|
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
|
||||||
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
|
|
||||||
import org.dolphinemu.dolphinemu.utils.Log;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -149,7 +150,7 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
|
|||||||
divider.setLastItemDecorated(false);
|
divider.setLastItemDecorated(false);
|
||||||
recyclerView.addItemDecoration(divider);
|
recyclerView.addItemDecoration(divider);
|
||||||
|
|
||||||
InsetsHelper.setUpList(getContext(), recyclerView);
|
setInsets();
|
||||||
|
|
||||||
SettingsActivityView activity = (SettingsActivityView) getActivity();
|
SettingsActivityView activity = (SettingsActivityView) getActivity();
|
||||||
mPresenter.onViewCreated(menuTag, activity.getSettings());
|
mPresenter.onViewCreated(menuTag, activity.getSettings());
|
||||||
@ -246,4 +247,15 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
|
|||||||
{
|
{
|
||||||
mActivity.onExtensionSettingChanged(menuTag, value);
|
mActivity.onExtensionSettingChanged(menuTag, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.listSettings, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0,
|
||||||
|
insets.bottom + getResources().getDimensionPixelSize(R.dimen.spacing_list));
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,14 +9,19 @@ import android.os.Bundle;
|
|||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.splashscreen.SplashScreen;
|
import androidx.core.splashscreen.SplashScreen;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
|
|
||||||
|
import com.google.android.material.color.MaterialColors;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
import org.dolphinemu.dolphinemu.R;
|
||||||
@ -68,8 +73,7 @@ public final class MainActivity extends AppCompatActivity
|
|||||||
setContentView(mBinding.getRoot());
|
setContentView(mBinding.getRoot());
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
|
||||||
InsetsHelper.setUpMainLayout(this, mBinding.appbarMain, mBinding.buttonAddDirectory,
|
setInsets();
|
||||||
mBinding.pagerPlatforms, mBinding.workaroundView);
|
|
||||||
ThemeHelper.enableStatusBarScrollTint(this, mBinding.appbarMain);
|
ThemeHelper.enableStatusBarScrollTint(this, mBinding.appbarMain);
|
||||||
|
|
||||||
setSupportActionBar(mBinding.toolbarMain);
|
setSupportActionBar(mBinding.toolbarMain);
|
||||||
@ -398,4 +402,30 @@ public final class MainActivity extends AppCompatActivity
|
|||||||
{
|
{
|
||||||
ThemeHelper.setCorrectTheme(this);
|
ThemeHelper.setCorrectTheme(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarMain, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
|
||||||
|
InsetsHelper.insetAppBar(insets, mBinding.appbarMain);
|
||||||
|
|
||||||
|
ViewGroup.MarginLayoutParams mlpFab =
|
||||||
|
(ViewGroup.MarginLayoutParams) mBinding.buttonAddDirectory.getLayoutParams();
|
||||||
|
int fabPadding = getResources().getDimensionPixelSize(R.dimen.spacing_large);
|
||||||
|
mlpFab.leftMargin = insets.left + fabPadding;
|
||||||
|
mlpFab.bottomMargin = insets.bottom + fabPadding;
|
||||||
|
mlpFab.rightMargin = insets.right + fabPadding;
|
||||||
|
mBinding.buttonAddDirectory.setLayoutParams(mlpFab);
|
||||||
|
|
||||||
|
mBinding.pagerPlatforms.setPadding(insets.left, 0, insets.right, 0);
|
||||||
|
|
||||||
|
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
|
||||||
|
ThemeHelper.setNavigationBarColor(this,
|
||||||
|
MaterialColors.getColor(mBinding.appbarMain, R.attr.colorSurface));
|
||||||
|
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,9 @@ import android.view.ViewTreeObserver;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
@ -20,7 +23,6 @@ import org.dolphinemu.dolphinemu.R;
|
|||||||
import org.dolphinemu.dolphinemu.adapters.GameAdapter;
|
import org.dolphinemu.dolphinemu.adapters.GameAdapter;
|
||||||
import org.dolphinemu.dolphinemu.databinding.FragmentGridBinding;
|
import org.dolphinemu.dolphinemu.databinding.FragmentGridBinding;
|
||||||
import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
|
import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
|
||||||
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
|
|
||||||
|
|
||||||
public final class PlatformGamesFragment extends Fragment implements PlatformGamesView
|
public final class PlatformGamesFragment extends Fragment implements PlatformGamesView
|
||||||
{
|
{
|
||||||
@ -102,7 +104,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
|
|||||||
|
|
||||||
mSwipeRefresh.setOnRefreshListener(mOnRefreshListener);
|
mSwipeRefresh.setOnRefreshListener(mOnRefreshListener);
|
||||||
|
|
||||||
InsetsHelper.setUpList(getContext(), mBinding.gridGames);
|
setInsets();
|
||||||
|
|
||||||
setRefreshing(GameFileCacheManager.isLoadingOrRescanning());
|
setRefreshing(GameFileCacheManager.isLoadingOrRescanning());
|
||||||
|
|
||||||
@ -158,4 +160,16 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam
|
|||||||
{
|
{
|
||||||
mBinding.swipeRefresh.setRefreshing(refreshing);
|
mBinding.swipeRefresh.setRefreshing(refreshing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInsets()
|
||||||
|
{
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(mBinding.gridGames, (v, windowInsets) ->
|
||||||
|
{
|
||||||
|
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||||
|
v.setPadding(0, 0, 0,
|
||||||
|
insets.bottom + getResources().getDimensionPixelSize(R.dimen.spacing_list) +
|
||||||
|
getResources().getDimensionPixelSize(R.dimen.spacing_fab));
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,195 +4,20 @@ import android.app.Activity;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.core.graphics.Insets;
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
|
||||||
import androidx.core.view.WindowInsetsAnimationCompat;
|
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
|
||||||
import androidx.core.widget.NestedScrollView;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout;
|
|
||||||
import androidx.viewpager.widget.ViewPager;
|
|
||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.color.MaterialColors;
|
|
||||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
|
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class InsetsHelper
|
public class InsetsHelper
|
||||||
{
|
{
|
||||||
public static final int FAB_INSET = 16;
|
|
||||||
public static final int EXTRA_NAV_INSET = 32;
|
|
||||||
|
|
||||||
public static final int THREE_BUTTON_NAVIGATION = 0;
|
public static final int THREE_BUTTON_NAVIGATION = 0;
|
||||||
public static final int TWO_BUTTON_NAVIGATION = 1;
|
public static final int TWO_BUTTON_NAVIGATION = 1;
|
||||||
public static final int GESTURE_NAVIGATION = 2;
|
public static final int GESTURE_NAVIGATION = 2;
|
||||||
|
|
||||||
public static int dpToPx(Context context, int dp)
|
public static void insetAppBar(Insets insets, AppBarLayout appBarLayout)
|
||||||
{
|
|
||||||
return (int) (dp * ((float) context.getResources().getDisplayMetrics().densityDpi /
|
|
||||||
DisplayMetrics.DENSITY_DEFAULT) + 0.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpAppBarWithScrollView(AppCompatActivity activity,
|
|
||||||
AppBarLayout appBarLayout, NestedScrollView nestedScrollView, View workaroundView)
|
|
||||||
{
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(appBarLayout, (v, windowInsets) ->
|
|
||||||
{
|
|
||||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
||||||
|
|
||||||
insetAppBar(insets, appBarLayout);
|
|
||||||
|
|
||||||
nestedScrollView.setPadding(insets.left, 0, insets.right, insets.bottom);
|
|
||||||
|
|
||||||
applyWorkaround(insets.bottom, workaroundView);
|
|
||||||
|
|
||||||
ThemeHelper.setNavigationBarColor(activity,
|
|
||||||
MaterialColors.getColor(appBarLayout, R.attr.colorSurface));
|
|
||||||
|
|
||||||
return windowInsets;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpList(Context context, RecyclerView recyclerView)
|
|
||||||
{
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (v, windowInsets) ->
|
|
||||||
{
|
|
||||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
||||||
v.setPadding(0, 0, 0, insets.bottom + dpToPx(context, EXTRA_NAV_INSET));
|
|
||||||
|
|
||||||
return windowInsets;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpMainLayout(AppCompatActivity activity, AppBarLayout appBarLayout,
|
|
||||||
ExtendedFloatingActionButton fab, ViewPager viewPager, View workaroundView)
|
|
||||||
{
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(appBarLayout, (v, windowInsets) ->
|
|
||||||
{
|
|
||||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
||||||
|
|
||||||
insetAppBar(insets, appBarLayout);
|
|
||||||
|
|
||||||
ViewGroup.MarginLayoutParams mlpFab = (ViewGroup.MarginLayoutParams) fab.getLayoutParams();
|
|
||||||
int fabPadding =
|
|
||||||
InsetsHelper.dpToPx(activity.getApplicationContext(), FAB_INSET);
|
|
||||||
mlpFab.leftMargin = insets.left + fabPadding;
|
|
||||||
mlpFab.bottomMargin = insets.bottom + fabPadding;
|
|
||||||
mlpFab.rightMargin = insets.right + fabPadding;
|
|
||||||
fab.setLayoutParams(mlpFab);
|
|
||||||
|
|
||||||
viewPager.setPadding(insets.left, 0, insets.right, 0);
|
|
||||||
|
|
||||||
applyWorkaround(insets.bottom, workaroundView);
|
|
||||||
|
|
||||||
ThemeHelper.setNavigationBarColor(activity,
|
|
||||||
MaterialColors.getColor(appBarLayout, R.attr.colorSurface));
|
|
||||||
|
|
||||||
return windowInsets;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpSettingsLayout(AppCompatActivity activity,
|
|
||||||
AppBarLayout appBarLayout, FrameLayout frameLayout, View workaroundView)
|
|
||||||
{
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(appBarLayout, (v, windowInsets) ->
|
|
||||||
{
|
|
||||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
||||||
|
|
||||||
insetAppBar(insets, appBarLayout);
|
|
||||||
|
|
||||||
frameLayout.setPadding(insets.left, 0, insets.right, 0);
|
|
||||||
|
|
||||||
applyWorkaround(insets.bottom, workaroundView);
|
|
||||||
|
|
||||||
ThemeHelper.setNavigationBarColor(activity,
|
|
||||||
MaterialColors.getColor(appBarLayout, R.attr.colorSurface));
|
|
||||||
|
|
||||||
return windowInsets;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setUpCheatsLayout(AppCompatActivity activity, AppBarLayout appBarLayout,
|
|
||||||
SlidingPaneLayout slidingPaneLayout, View cheatDetails, View workaroundView)
|
|
||||||
{
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(appBarLayout, (v, windowInsets) ->
|
|
||||||
{
|
|
||||||
Insets barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
||||||
Insets keyboardInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime());
|
|
||||||
|
|
||||||
insetAppBar(barInsets, appBarLayout);
|
|
||||||
|
|
||||||
slidingPaneLayout.setPadding(barInsets.left, 0, barInsets.right, 0);
|
|
||||||
|
|
||||||
// Set keyboard insets if the system supports smooth keyboard animations
|
|
||||||
ViewGroup.MarginLayoutParams mlpDetails =
|
|
||||||
(ViewGroup.MarginLayoutParams) cheatDetails.getLayoutParams();
|
|
||||||
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.R)
|
|
||||||
{
|
|
||||||
if (keyboardInsets.bottom > 0)
|
|
||||||
{
|
|
||||||
mlpDetails.bottomMargin = keyboardInsets.bottom;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mlpDetails.bottomMargin = barInsets.bottom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (mlpDetails.bottomMargin == 0)
|
|
||||||
{
|
|
||||||
mlpDetails.bottomMargin = barInsets.bottom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cheatDetails.setLayoutParams(mlpDetails);
|
|
||||||
|
|
||||||
applyWorkaround(barInsets.bottom, workaroundView);
|
|
||||||
|
|
||||||
ThemeHelper.setNavigationBarColor(activity,
|
|
||||||
MaterialColors.getColor(appBarLayout, R.attr.colorSurface));
|
|
||||||
|
|
||||||
return windowInsets;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update the layout for every frame that the keyboard animates in
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
|
|
||||||
{
|
|
||||||
ViewCompat.setWindowInsetsAnimationCallback(cheatDetails,
|
|
||||||
new WindowInsetsAnimationCompat.Callback(
|
|
||||||
WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP)
|
|
||||||
{
|
|
||||||
int keyboardInsets = 0;
|
|
||||||
int barInsets = 0;
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public WindowInsetsCompat onProgress(@NonNull WindowInsetsCompat insets,
|
|
||||||
@NonNull List<WindowInsetsAnimationCompat> runningAnimations)
|
|
||||||
{
|
|
||||||
ViewGroup.MarginLayoutParams mlpDetails =
|
|
||||||
(ViewGroup.MarginLayoutParams) cheatDetails.getLayoutParams();
|
|
||||||
keyboardInsets = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom;
|
|
||||||
barInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
|
|
||||||
mlpDetails.bottomMargin = Math.max(keyboardInsets, barInsets);
|
|
||||||
cheatDetails.setLayoutParams(mlpDetails);
|
|
||||||
return insets;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void insetAppBar(Insets insets, AppBarLayout appBarLayout)
|
|
||||||
{
|
{
|
||||||
ViewGroup.MarginLayoutParams mlpAppBar =
|
ViewGroup.MarginLayoutParams mlpAppBar =
|
||||||
(ViewGroup.MarginLayoutParams) appBarLayout.getLayoutParams();
|
(ViewGroup.MarginLayoutParams) appBarLayout.getLayoutParams();
|
||||||
@ -204,7 +29,7 @@ public class InsetsHelper
|
|||||||
|
|
||||||
// Workaround for a bug on Android 13 that allows users to interact with UI behind the
|
// Workaround for a bug on Android 13 that allows users to interact with UI behind the
|
||||||
// navigation bar https://issuetracker.google.com/issues/248761842
|
// navigation bar https://issuetracker.google.com/issues/248761842
|
||||||
private static void applyWorkaround(int bottomInset, View workaroundView)
|
public static void applyNavbarWorkaround(int bottomInset, View workaroundView)
|
||||||
{
|
{
|
||||||
if (bottomInset > 0)
|
if (bottomInset > 0)
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
<dimen name="spacing_small">4dp</dimen>
|
<dimen name="spacing_small">4dp</dimen>
|
||||||
<dimen name="spacing_medlarge">12dp</dimen>
|
<dimen name="spacing_medlarge">12dp</dimen>
|
||||||
<dimen name="spacing_large">16dp</dimen>
|
<dimen name="spacing_large">16dp</dimen>
|
||||||
|
<dimen name="spacing_xtralarge">32dp</dimen>
|
||||||
|
<dimen name="spacing_list">64dp</dimen>
|
||||||
|
<dimen name="spacing_fab">72dp</dimen>
|
||||||
<dimen name="menu_width">256dp</dimen>
|
<dimen name="menu_width">256dp</dimen>
|
||||||
<dimen name="card_width">135dp</dimen>
|
<dimen name="card_width">135dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user