Skip to content
Permalink
Browse files
Merge pull request #11092 from t895/view-binding
Android: Use view binding
  • Loading branch information
JosJuice committed Oct 29, 2022
2 parents 7d55e9f + 5c30f65 commit aeb0fcb
Show file tree
Hide file tree
Showing 54 changed files with 816 additions and 950 deletions.
@@ -4,6 +4,8 @@ android {
compileSdkVersion 33
ndkVersion "25.0.8775105"

viewBinding.enabled = true

compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
@@ -5,17 +5,12 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowCompat;
import androidx.core.widget.NestedScrollView;

import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.appbar.MaterialToolbar;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.databinding.ActivityConvertBinding;
import org.dolphinemu.dolphinemu.fragments.ConvertFragment;
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
import org.dolphinemu.dolphinemu.utils.ThemeHelper;
@@ -38,7 +33,8 @@ protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_convert);
ActivityConvertBinding binding = ActivityConvertBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

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

MaterialToolbar tb = findViewById(R.id.toolbar_convert);
CollapsingToolbarLayout ctb = findViewById(R.id.toolbar_convert_layout);
ctb.setTitle(getString(R.string.convert_convert));
setSupportActionBar(tb);
binding.toolbarConvertLayout.setTitle(getString(R.string.convert_convert));
setSupportActionBar(binding.toolbarConvert);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AppBarLayout appBarLayout = findViewById(R.id.appbar_convert);
NestedScrollView scrollView = findViewById(R.id.scroll_view_convert);
View workaroundView = findViewById(R.id.workaround_view);
InsetsHelper.setUpAppBarWithScrollView(this, appBarLayout, scrollView, workaroundView);
ThemeHelper.enableScrollTint(this, tb, appBarLayout);
InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarConvert, binding.scrollViewConvert,
binding.workaroundView);
ThemeHelper.enableScrollTint(this, binding.toolbarConvert, binding.appbarConvert);
}

@Override
@@ -12,7 +12,6 @@
import android.util.SparseIntArray;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
@@ -33,6 +32,9 @@

import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.databinding.ActivityEmulationBinding;
import org.dolphinemu.dolphinemu.databinding.DialogInputAdjustBinding;
import org.dolphinemu.dolphinemu.databinding.DialogIrSensitivityBinding;
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@@ -62,7 +64,6 @@
import static java.lang.annotation.RetentionPolicy.SOURCE;

import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.slider.LabelFormatter;
import com.google.android.material.slider.Slider;

public final class EmulationActivity extends AppCompatActivity implements ThemeProvider
@@ -338,7 +339,8 @@ protected void onCreate(Bundle savedInstanceState)

Rumble.initRumble(this);

setContentView(R.layout.activity_emulation);
ActivityEmulationBinding binding = ActivityEmulationBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

// Find or create the EmulationFragment
mEmulationFragment = (EmulationFragment) getSupportFragmentManager()
@@ -905,11 +907,10 @@ public void chooseDoubleTapButton()

private void adjustScale()
{
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_input_adjust, null);
DialogInputAdjustBinding dialogBinding = DialogInputAdjustBinding.inflate(getLayoutInflater());

final Slider scaleSlider = view.findViewById(R.id.input_scale_slider);
final TextView scaleValue = view.findViewById(R.id.input_scale_value);
final Slider scaleSlider = dialogBinding.inputScaleSlider;
final TextView scaleValue = dialogBinding.inputScaleValue;
scaleSlider.setValueTo(150);
scaleSlider.setValue(IntSetting.MAIN_CONTROL_SCALE.getInt(mSettings));
scaleSlider.setStepSize(1);
@@ -918,19 +919,18 @@ private void adjustScale()
scaleValue.setText(((int) scaleSlider.getValue() + 50) + "%");

// alpha
final Slider sliderOpacity = view.findViewById(R.id.input_opacity_slider);
final TextView valueOpacity = view.findViewById(R.id.input_opacity_value);
final Slider sliderOpacity = dialogBinding.inputOpacitySlider;
final TextView valueOpacity = dialogBinding.inputOpacityValue;
sliderOpacity.setValueTo(100);
sliderOpacity.setValue(IntSetting.MAIN_CONTROL_OPACITY.getInt(mSettings));
sliderOpacity.setStepSize(1);
sliderOpacity.addOnChangeListener(
(slider, progress, fromUser) -> valueOpacity.setText(((int) progress) + "%"));
valueOpacity.setText(((int) sliderOpacity.getValue()) + "%");


new MaterialAlertDialogBuilder(this)
.setTitle(R.string.emulation_control_adjustments)
.setView(view)
.setView(dialogBinding.getRoot())
.setPositiveButton(R.string.ok, (dialog, which) ->
{
IntSetting.MAIN_CONTROL_SCALE.setInt(mSettings, (int) scaleSlider.getValue());
@@ -1008,12 +1008,12 @@ private void setIRSensitivity()

int ir_pitch = ini.getInt(Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIBIND_IR_PITCH, 20);

LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.dialog_ir_sensitivity, null);
DialogIrSensitivityBinding dialogBinding =
DialogIrSensitivityBinding.inflate(getLayoutInflater());

TextView text_slider_value_pitch = view.findViewById(R.id.text_ir_pitch);
TextView units = view.findViewById(R.id.text_ir_pitch_units);
Slider slider_pitch = view.findViewById(R.id.slider_pitch);
TextView text_slider_value_pitch = dialogBinding.textIrPitch;
TextView units = dialogBinding.textIrPitchUnits;
Slider slider_pitch = dialogBinding.sliderPitch;

text_slider_value_pitch.setText(String.valueOf(ir_pitch));
units.setText(getString(R.string.pitch));
@@ -1026,9 +1026,9 @@ private void setIRSensitivity()

int ir_yaw = ini.getInt(Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIBIND_IR_YAW, 25);

TextView text_slider_value_yaw = view.findViewById(R.id.text_ir_yaw);
TextView units_yaw = view.findViewById(R.id.text_ir_yaw_units);
Slider seekbar_yaw = view.findViewById(R.id.slider_width);
TextView text_slider_value_yaw = dialogBinding.textIrYaw;
TextView units_yaw = dialogBinding.textIrYawUnits;
Slider seekbar_yaw = dialogBinding.sliderYaw;

text_slider_value_yaw.setText(String.valueOf(ir_yaw));
units_yaw.setText(getString(R.string.yaw));
@@ -1038,13 +1038,12 @@ private void setIRSensitivity()
seekbar_yaw.addOnChangeListener((slider, progress, fromUser) -> text_slider_value_yaw.setText(
String.valueOf((int) progress)));


int ir_vertical_offset =
ini.getInt(Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIBIND_IR_VERTICAL_OFFSET, 10);

TextView text_slider_value_vertical_offset = view.findViewById(R.id.text_ir_vertical_offset);
TextView units_vertical_offset = view.findViewById(R.id.text_ir_vertical_offset_units);
Slider seekbar_vertical_offset = view.findViewById(R.id.slider_vertical_offset);
TextView text_slider_value_vertical_offset = dialogBinding.textIrVerticalOffset;
TextView units_vertical_offset = dialogBinding.textIrVerticalOffsetUnits;
Slider seekbar_vertical_offset = dialogBinding.sliderVerticalOffset;

text_slider_value_vertical_offset.setText(String.valueOf(ir_vertical_offset));
units_vertical_offset.setText(getString(R.string.vertical_offset));
@@ -1057,7 +1056,7 @@ private void setIRSensitivity()

new MaterialAlertDialogBuilder(this)
.setTitle(getString(R.string.emulation_ir_sensitivity))
.setView(view)
.setView(dialogBinding.getRoot())
.setPositiveButton(R.string.ok, (dialogInterface, i) ->
{
ini.setString(Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIBIND_IR_PITCH,
@@ -10,19 +10,15 @@
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowCompat;
import androidx.core.widget.NestedScrollView;

import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.databinding.ActivityUserDataBinding;
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
import org.dolphinemu.dolphinemu.utils.InsetsHelper;
import org.dolphinemu.dolphinemu.utils.Log;
@@ -61,45 +57,36 @@ protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_user_data);
ActivityUserDataBinding binding = ActivityUserDataBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

TextView textType = findViewById(R.id.text_type);
TextView textPath = findViewById(R.id.text_path);
TextView textAndroid11 = findViewById(R.id.text_android_11);
Button buttonOpenSystemFileManager = findViewById(R.id.button_open_system_file_manager);
Button buttonImportUserData = findViewById(R.id.button_import_user_data);
Button buttonExportUserData = findViewById(R.id.button_export_user_data);

boolean android_10 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
boolean android_11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
boolean legacy = DirectoryInitialization.isUsingLegacyUserDirectory();

int user_data_new_location = android_10 ?
R.string.user_data_new_location_android_10 : R.string.user_data_new_location;
textType.setText(legacy ? R.string.user_data_old_location : user_data_new_location);
binding.textType.setText(legacy ? R.string.user_data_old_location : user_data_new_location);

textPath.setText(DirectoryInitialization.getUserDirectory());
binding.textPath.setText(DirectoryInitialization.getUserDirectory());

textAndroid11.setVisibility(android_11 && !legacy ? View.VISIBLE : View.GONE);
binding.textAndroid11.setVisibility(android_11 && !legacy ? View.VISIBLE : View.GONE);

buttonOpenSystemFileManager.setVisibility(android_11 ? View.VISIBLE : View.GONE);
buttonOpenSystemFileManager.setOnClickListener(view -> openFileManager());
binding.buttonOpenSystemFileManager.setVisibility(android_11 ? View.VISIBLE : View.GONE);
binding.buttonOpenSystemFileManager.setOnClickListener(view -> openFileManager());

buttonImportUserData.setOnClickListener(view -> importUserData());
binding.buttonImportUserData.setOnClickListener(view -> importUserData());

buttonExportUserData.setOnClickListener(view -> exportUserData());
binding.buttonExportUserData.setOnClickListener(view -> exportUserData());

MaterialToolbar tb = findViewById(R.id.toolbar_user_data);
setSupportActionBar(tb);
setSupportActionBar(binding.toolbarUserData);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AppBarLayout appBarLayout = findViewById(R.id.appbar_user_data);
NestedScrollView scrollView = findViewById(R.id.scroll_view_user_data);
View workaroundView = findViewById(R.id.workaround_view);
InsetsHelper.setUpAppBarWithScrollView(this, appBarLayout, scrollView, workaroundView);
ThemeHelper.enableScrollTint(this, tb, appBarLayout);
InsetsHelper.setUpAppBarWithScrollView(this, binding.appbarUserData,
binding.scrollViewUserData, binding.workaroundView);
ThemeHelper.enableScrollTint(this, binding.toolbarUserData, binding.appbarUserData);
}

@Override
@@ -3,7 +3,6 @@
package org.dolphinemu.dolphinemu.adapters;

import android.content.Context;
import android.graphics.Rect;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -14,16 +13,16 @@

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import org.dolphinemu.dolphinemu.databinding.CardGameBinding;
import org.dolphinemu.dolphinemu.dialogs.GamePropertiesDialog;
import org.dolphinemu.dolphinemu.model.GameFile;
import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
import org.dolphinemu.dolphinemu.utils.GlideUtils;
import org.dolphinemu.dolphinemu.viewholders.GameViewHolder;

import java.util.ArrayList;
import java.util.List;

public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> implements
public final class GameAdapter extends RecyclerView.Adapter<GameAdapter.GameViewHolder> implements
View.OnClickListener,
View.OnLongClickListener
{
@@ -45,18 +44,17 @@ public GameAdapter()
* @param viewType Not used here, but useful when more than one type of child will be used in the RecyclerView.
* @return The created ViewHolder with references to all the child view's members.
*/
@NonNull
@Override
public GameViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
// Create a new view.
View gameCard = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_game, parent, false);
CardGameBinding binding = CardGameBinding.inflate(LayoutInflater.from(parent.getContext()));

gameCard.setOnClickListener(this);
gameCard.setOnLongClickListener(this);
binding.getRoot().setOnClickListener(this);
binding.getRoot().setOnLongClickListener(this);

// Use that view to create a ViewHolder.
return new GameViewHolder(gameCard);
return new GameViewHolder(binding);
}

/**
@@ -72,21 +70,34 @@ public void onBindViewHolder(GameViewHolder holder, int position)
{
Context context = holder.itemView.getContext();
GameFile gameFile = mGameFiles.get(position);
GlideUtils.loadGameCover(holder, holder.imageScreenshot, gameFile);
GlideUtils.loadGameCover(holder, holder.binding.imageGameScreen, gameFile);

if (GameFileCacheManager.findSecondDisc(gameFile) != null)
{
holder.textGameCaption
holder.binding.textGameCaption
.setText(context.getString(R.string.disc_number, gameFile.getDiscNumber() + 1));
}
else
{
holder.textGameCaption.setText(gameFile.getCompany());
holder.binding.textGameCaption.setText(gameFile.getCompany());
}

holder.gameFile = gameFile;
}

public static class GameViewHolder extends RecyclerView.ViewHolder
{
public GameFile gameFile;
public CardGameBinding binding;

public GameViewHolder(@NonNull CardGameBinding binding)
{
super(binding.getRoot());
binding.getRoot().setTag(this);
this.binding = binding;
}
}

/**
* Called by the LayoutManager to find out how much data we have.
*

0 comments on commit aeb0fcb

Please sign in to comment.