Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #11299 from t895/cleanup-insets-helper
Android: Have each activity manage insets separately
  • Loading branch information
lioncash committed Dec 4, 2022
2 parents 6abcaad + e9c60f3 commit 92cab5d
Show file tree
Hide file tree
Showing 11 changed files with 280 additions and 223 deletions.
Expand Up @@ -7,7 +7,12 @@
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
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.databinding.ActivityConvertBinding;
Expand All @@ -19,6 +24,8 @@ public class ConvertActivity extends AppCompatActivity
{
private static final String ARG_GAME_PATH = "game_path";

private ActivityConvertBinding mBinding;

public static void launch(Context context, String gamePath)
{
Intent launcher = new Intent(context, ConvertActivity.class);
Expand All @@ -33,8 +40,8 @@ protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

ActivityConvertBinding binding = ActivityConvertBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
mBinding = ActivityConvertBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

Expand All @@ -48,13 +55,12 @@ protected void onCreate(Bundle savedInstanceState)
getSupportFragmentManager().beginTransaction().add(R.id.fragment_convert, fragment).commit();
}

binding.toolbarConvertLayout.setTitle(getString(R.string.convert_convert));
setSupportActionBar(binding.toolbarConvert);
mBinding.toolbarConvertLayout.setTitle(getString(R.string.convert_convert));
setSupportActionBar(mBinding.toolbarConvert);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarConvert, binding.scrollViewConvert,
binding.workaroundView);
ThemeHelper.enableScrollTint(this, binding.toolbarConvert, binding.appbarConvert);
setInsets();
ThemeHelper.enableScrollTint(this, mBinding.toolbarConvert, mBinding.appbarConvert);
}

@Override
Expand All @@ -63,4 +69,22 @@ public boolean onSupportNavigateUp()
onBackPressed();
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;
});
}
}
Expand Up @@ -13,8 +13,12 @@

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
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 org.dolphinemu.dolphinemu.R;
Expand Down Expand Up @@ -44,6 +48,8 @@ public class UserDataActivity extends AppCompatActivity

private boolean sMustRestartApp = false;

private ActivityUserDataBinding mBinding;

public static void launch(Context context)
{
Intent launcher = new Intent(context, UserDataActivity.class);
Expand All @@ -57,8 +63,8 @@ protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

ActivityUserDataBinding binding = ActivityUserDataBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
mBinding = ActivityUserDataBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

Expand All @@ -68,25 +74,24 @@ protected void onCreate(Bundle savedInstanceState)

int user_data_new_location = android_10 ?
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);
binding.buttonOpenSystemFileManager.setOnClickListener(view -> openFileManager());
mBinding.buttonOpenSystemFileManager.setVisibility(android_11 ? View.VISIBLE : View.GONE);
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);

InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarUserData,
binding.scrollViewUserData, binding.workaroundView);
ThemeHelper.enableScrollTint(this, binding.toolbarUserData, binding.appbarUserData);
setInsets();
ThemeHelper.enableScrollTint(this, mBinding.toolbarUserData, mBinding.appbarUserData);
}

@Override
Expand Down Expand Up @@ -353,4 +358,22 @@ private void exportUserData(ZipOutputStream zos, File input, @Nullable File path
}
}
}

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;
});
}
}
Expand Up @@ -9,15 +9,18 @@

import androidx.annotation.NonNull;
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.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;

import com.google.android.material.divider.MaterialDividerItemDecoration;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.databinding.FragmentCheatListBinding;
import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
import org.dolphinemu.dolphinemu.utils.InsetsHelper;

public class CheatListFragment extends Fragment
{
Expand Down Expand Up @@ -46,7 +49,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
divider.setLastItemDecorated(false);
mBinding.cheatList.addItemDecoration(divider);

InsetsHelper.setUpList(getContext(), mBinding.cheatList);
setInsets();
}

@Override
Expand All @@ -55,4 +58,15 @@ public void onDestroyView()
super.onDestroyView();
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;
});
}
}
Expand Up @@ -14,8 +14,11 @@
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsAnimationCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider;
import androidx.slidingpanelayout.widget.SlidingPaneLayout;

Expand All @@ -33,6 +36,8 @@
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
import org.dolphinemu.dolphinemu.utils.ThemeHelper;

import java.util.List;

public class CheatsActivity extends AppCompatActivity
implements SlidingPaneLayout.PanelSlideListener
{
Expand Down Expand Up @@ -104,9 +109,7 @@ protected void onCreate(Bundle savedInstanceState)
setSupportActionBar(mBinding.toolbarCheats);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

InsetsHelper.setUpCheatsLayout(this, mBinding.appbarCheats, mBinding.slidingPaneLayout,
mBinding.cheatDetails,
mBinding.workaroundView);
setInsets();

@ColorInt int color =
MaterialColors.getColor(mBinding.toolbarCheats, R.attr.colorSurfaceVariant);
Expand Down Expand Up @@ -264,4 +267,73 @@ public static void setOnFocusChangeListenerRecursively(@NonNull View view,
}
}
}

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;
}
});
}
}
}
Expand Up @@ -7,9 +7,14 @@
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;

import com.google.android.material.color.MaterialColors;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import org.dolphinemu.dolphinemu.databinding.ActivityRiivolutionBootBinding;
Expand Down Expand Up @@ -81,12 +86,11 @@ protected void onCreate(Bundle savedInstanceState)
runOnUiThread(() -> populateList(patches));
}).start();

mBinding.toolbarRiivolutionLayout.setTitle(getString(R.string.riivolution_riivolution));
mBinding.toolbarRiivolution.setTitle(getString(R.string.riivolution_riivolution));
setSupportActionBar(mBinding.toolbarRiivolution);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

InsetsHelper.setUpAppBarWithScrollView(this, mBinding.appbarRiivolution,
mBinding.scrollViewRiivolution, mBinding.workaroundView);
setInsets();
ThemeHelper.enableScrollTint(this, mBinding.toolbarRiivolution, mBinding.appbarRiivolution);
}

Expand All @@ -113,4 +117,22 @@ private void populateList(RiivolutionPatches patches)
mBinding.recyclerView.setAdapter(new RiivolutionAdapter(this, patches));
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;
});
}
}

0 comments on commit 92cab5d

Please sign in to comment.