use view binding for three more activities

This commit is contained in:
dkanada 2020-09-02 12:40:32 +09:00
commit 1809a5d1dd
4 changed files with 73 additions and 106 deletions

View file

@ -11,47 +11,40 @@ import android.os.CountDownTimer;
import android.os.SystemClock; import android.os.SystemClock;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import android.widget.CheckBox;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.databinding.DialogSleepTimerBinding;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
import com.dkanada.gramophone.service.MusicService; import com.dkanada.gramophone.service.MusicService;
import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.MusicUtil;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.triggertrap.seekarc.SeekArc; import com.triggertrap.seekarc.SeekArc;
import butterknife.BindView;
import butterknife.ButterKnife;
public class SleepTimerDialog extends DialogFragment { public class SleepTimerDialog extends DialogFragment {
@BindView(R.id.seek_arc) private DialogSleepTimerBinding binding;
SeekArc seekArc;
@BindView(R.id.timer_display) private TimerUpdater timerUpdater;
TextView timerDisplay; private MaterialDialog materialDialog;
@BindView(R.id.should_finish_last_song)
CheckBox shouldFinishLastSong;
private int seekArcProgress; private int seekArcProgress;
private MaterialDialog materialDialog;
private TimerUpdater timerUpdater;
@Override @Override
public void onDismiss(DialogInterface dialog) { public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog); super.onDismiss(dialog);
timerUpdater.cancel(); timerUpdater.cancel();
} }
@NonNull @NonNull
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
binding = DialogSleepTimerBinding.inflate(getLayoutInflater());
timerUpdater = new TimerUpdater(); timerUpdater = new TimerUpdater();
materialDialog = new MaterialDialog.Builder(getActivity()) materialDialog = new MaterialDialog.Builder(getActivity())
.title(getActivity().getResources().getString(R.string.action_sleep_timer)) .title(getActivity().getResources().getString(R.string.action_sleep_timer))
@ -61,7 +54,7 @@ public class SleepTimerDialog extends DialogFragment {
return; return;
} }
PreferenceUtil.getInstance(getActivity()).setSleepTimerFinishMusic(shouldFinishLastSong.isChecked()); PreferenceUtil.getInstance(getActivity()).setSleepTimerFinishMusic(binding.shouldFinishLastSong.isChecked());
final int minutes = seekArcProgress; final int minutes = seekArcProgress;
@ -98,36 +91,34 @@ public class SleepTimerDialog extends DialogFragment {
timerUpdater.start(); timerUpdater.start();
} }
}) })
.customView(R.layout.dialog_sleep_timer, false) .customView(binding.getRoot(), false)
.build(); .build();
if (getActivity() == null || materialDialog.getCustomView() == null) { if (getActivity() == null || materialDialog.getCustomView() == null) {
return materialDialog; return materialDialog;
} }
ButterKnife.bind(this, materialDialog.getCustomView());
boolean finishMusic = PreferenceUtil.getInstance(getActivity()).getSleepTimerFinishMusic(); boolean finishMusic = PreferenceUtil.getInstance(getActivity()).getSleepTimerFinishMusic();
shouldFinishLastSong.setChecked(finishMusic); binding.shouldFinishLastSong.setChecked(finishMusic);
seekArc.setProgressColor(ThemeSingleton.get().positiveColor.getDefaultColor()); binding.seekArc.setProgressColor(ThemeSingleton.get().positiveColor.getDefaultColor());
seekArc.setThumbColor(ThemeSingleton.get().positiveColor.getDefaultColor()); binding.seekArc.setThumbColor(ThemeSingleton.get().positiveColor.getDefaultColor());
seekArc.post(() -> { binding.seekArc.post(() -> {
int width = seekArc.getWidth(); int width = binding.seekArc.getWidth();
int height = seekArc.getHeight(); int height = binding.seekArc.getHeight();
int small = Math.min(width, height); int small = Math.min(width, height);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(seekArc.getLayoutParams()); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(binding.seekArc.getLayoutParams());
layoutParams.height = small; layoutParams.height = small;
seekArc.setLayoutParams(layoutParams); binding.seekArc.setLayoutParams(layoutParams);
}); });
seekArcProgress = PreferenceUtil.getInstance(getActivity()).getLastSleepTimerValue(); seekArcProgress = PreferenceUtil.getInstance(getActivity()).getLastSleepTimerValue();
updateTimeDisplayTime(); updateTimeDisplayTime();
seekArc.setProgress(seekArcProgress); binding.seekArc.setProgress(seekArcProgress);
seekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() { binding.seekArc.setOnSeekArcChangeListener(new SeekArc.OnSeekArcChangeListener() {
@Override @Override
public void onProgressChanged(@NonNull SeekArc seekArc, int i, boolean b) { public void onProgressChanged(@NonNull SeekArc seekArc, int i, boolean b) {
if (i < 1) { if (i < 1) {
@ -153,7 +144,7 @@ public class SleepTimerDialog extends DialogFragment {
} }
private void updateTimeDisplayTime() { private void updateTimeDisplayTime() {
timerDisplay.setText(seekArcProgress + " min"); binding.timerDisplay.setText(seekArcProgress + " min");
} }
private PendingIntent makeTimerPendingIntent(int flag) { private PendingIntent makeTimerPendingIntent(int flag) {
@ -162,7 +153,7 @@ public class SleepTimerDialog extends DialogFragment {
private Intent makeTimerIntent() { private Intent makeTimerIntent() {
Intent intent = new Intent(getActivity(), MusicService.class); Intent intent = new Intent(getActivity(), MusicService.class);
if (shouldFinishLastSong.isChecked()) { if (binding.shouldFinishLastSong.isChecked()) {
return intent.setAction(MusicService.ACTION_PENDING_QUIT); return intent.setAction(MusicService.ACTION_PENDING_QUIT);
} }

View file

@ -5,15 +5,13 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import com.dkanada.gramophone.App; import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.databinding.ActivityLoginBinding;
import com.dkanada.gramophone.ui.activities.base.AbsBaseActivity; import com.dkanada.gramophone.ui.activities.base.AbsBaseActivity;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.ThemeStore;
@ -22,29 +20,19 @@ import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.system.SystemInfo; import org.jellyfin.apiclient.model.system.SystemInfo;
import org.jellyfin.apiclient.model.users.AuthenticationResult; import org.jellyfin.apiclient.model.users.AuthenticationResult;
import butterknife.BindView;
import butterknife.ButterKnife;
public class LoginActivity extends AbsBaseActivity implements View.OnClickListener { public class LoginActivity extends AbsBaseActivity implements View.OnClickListener {
@BindView(R.id.toolbar) private ActivityLoginBinding binding;
Toolbar toolbar;
@BindView(R.id.username)
EditText username;
@BindView(R.id.password)
EditText password;
@BindView(R.id.server)
EditText server;
@BindView(R.id.login)
Button login;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
setDrawUnderStatusbar();
ButterKnife.bind(this);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setDrawUnderStatusbar();
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto(); setTaskDescriptionColorAuto();
@ -57,13 +45,13 @@ public class LoginActivity extends AbsBaseActivity implements View.OnClickListen
} }
private void setUpToolbar() { private void setUpToolbar() {
toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); binding.toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar); setSupportActionBar(binding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} }
private void setUpOnClickListeners() { private void setUpOnClickListeners() {
login.setOnClickListener(this); binding.login.setOnClickListener(this);
} }
@Override @Override
@ -78,24 +66,24 @@ public class LoginActivity extends AbsBaseActivity implements View.OnClickListen
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v == login) { if (v == binding.login) {
final Context context = this; final Context context = this;
if (server.getText().toString().trim().length() == 0) { if (binding.server.getText().toString().trim().length() == 0) {
Toast.makeText(context, context.getResources().getString(R.string.error_login_empty_addr), Toast.LENGTH_SHORT).show(); Toast.makeText(context, context.getResources().getString(R.string.error_login_empty_addr), Toast.LENGTH_SHORT).show();
return; return;
} }
if (username.getText().toString().trim().length() == 0) { if (binding.username.getText().toString().trim().length() == 0) {
Toast.makeText(context, context.getResources().getString(R.string.error_no_username), Toast.LENGTH_SHORT).show(); Toast.makeText(context, context.getResources().getString(R.string.error_no_username), Toast.LENGTH_SHORT).show();
return; return;
} }
App.getApiClient().ChangeServerLocation(server.getText().toString()); App.getApiClient().ChangeServerLocation(binding.server.getText().toString());
App.getApiClient().AuthenticateUserAsync(username.getText().toString(), password.getText().toString(), new Response<AuthenticationResult>() { App.getApiClient().AuthenticateUserAsync(binding.username.getText().toString(), binding.password.getText().toString(), new Response<AuthenticationResult>() {
@Override @Override
public void onResponse(AuthenticationResult result) { public void onResponse(AuthenticationResult result) {
if (result.getAccessToken() == null) return; if (result.getAccessToken() == null) return;
check(context, server.getText().toString(), result.getUser().getId(), result.getAccessToken()); check(context, binding.server.getText().toString(), result.getUser().getId(), result.getAccessToken());
} }
@Override @Override

View file

@ -1,6 +1,5 @@
package com.dkanada.gramophone.ui.activities; package com.dkanada.gramophone.ui.activities;
import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -8,8 +7,8 @@ import android.os.Handler;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.dkanada.gramophone.databinding.ActivityMainDrawerLayoutBinding;
import com.dkanada.gramophone.dialogs.ConfirmLogoutDialog; import com.dkanada.gramophone.dialogs.ConfirmLogoutDialog;
import com.google.android.material.navigation.NavigationView;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.drawerlayout.widget.DrawerLayout; import androidx.drawerlayout.widget.DrawerLayout;
@ -41,16 +40,8 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto;
import java.util.List; import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AbsSlidingMusicPanelActivity { public class MainActivity extends AbsSlidingMusicPanelActivity {
public static final String TAG = MainActivity.class.getSimpleName(); private ActivityMainDrawerLayoutBinding binding;
@BindView(R.id.navigation_view)
NavigationView navigationView;
@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
@Nullable @Nullable
MainActivityFragmentCallbacks currentFragment; MainActivityFragmentCallbacks currentFragment;
@ -65,13 +56,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setDrawUnderStatusbar(); setDrawUnderStatusbar();
ButterKnife.bind(this);
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
navigationView.setFitsSystemWindows(false); binding.navigationView.setFitsSystemWindows(false);
} }
Menu menu = navigationView.getMenu(); Menu menu = binding.navigationView.getMenu();
QueryUtil.getLibraries(new MediaCallback() { QueryUtil.getLibraries(new MediaCallback() {
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
@ -118,20 +108,21 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
@Override @Override
protected View createContentView() { protected View createContentView() {
@SuppressLint("InflateParams") binding = ActivityMainDrawerLayoutBinding.inflate(getLayoutInflater());
View contentView = getLayoutInflater().inflate(R.layout.activity_main_drawer_layout, null);
ViewGroup drawerContent = contentView.findViewById(R.id.drawer_content_container); ViewGroup drawerContent = binding.getRoot().findViewById(R.id.drawer_content_container);
drawerContent.addView(wrapSlidingMusicPanel(R.layout.activity_main_content)); drawerContent.addView(wrapSlidingMusicPanel(R.layout.activity_main_content));
return contentView;
return binding.getRoot();
} }
private void setUpNavigationView() { private void setUpNavigationView() {
int accentColor = ThemeStore.accentColor(this); int accentColor = ThemeStore.accentColor(this);
NavigationViewUtil.setItemIconColors(navigationView, ATHUtil.resolveColor(this, R.attr.iconColor, ThemeStore.textColorSecondary(this)), accentColor); NavigationViewUtil.setItemIconColors(binding.navigationView, ATHUtil.resolveColor(this, R.attr.iconColor, ThemeStore.textColorSecondary(this)), accentColor);
NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor); NavigationViewUtil.setItemTextColors(binding.navigationView, ThemeStore.textColorPrimary(this), accentColor);
navigationView.setNavigationItemSelectedListener(menuItem -> { binding.navigationView.setNavigationItemSelectedListener(menuItem -> {
drawerLayout.closeDrawers(); binding.drawerLayout.closeDrawers();
switch (menuItem.getItemId()) { switch (menuItem.getItemId()) {
case R.id.nav_settings: case R.id.nav_settings:
new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, SettingsActivity.class)), 200); new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, SettingsActivity.class)), 200);
@ -161,11 +152,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|| menuItem.getItemId() == R.id.nav_about || menuItem.getItemId() == R.id.nav_about
|| menuItem.getItemId() == R.id.nav_logout) return true; || menuItem.getItemId() == R.id.nav_logout) return true;
for (int i = 0; i < navigationView.getMenu().size(); i++) { for (int i = 0; i < binding.navigationView.getMenu().size(); i++) {
if (navigationView.getMenu().getItem(i) == menuItem) { if (binding.navigationView.getMenu().getItem(i) == menuItem) {
navigationView.getMenu().getItem(i).setChecked(true); binding.navigationView.getMenu().getItem(i).setChecked(true);
} else { } else {
navigationView.getMenu().getItem(i).setChecked(false); binding.navigationView.getMenu().getItem(i).setChecked(false);
} }
} }
@ -181,9 +172,9 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) { if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) {
Song song = MusicPlayerRemote.getCurrentSong(); Song song = MusicPlayerRemote.getCurrentSong();
if (navigationDrawerHeader == null) { if (navigationDrawerHeader == null) {
navigationDrawerHeader = navigationView.inflateHeaderView(R.layout.navigation_drawer_header); navigationDrawerHeader = binding.navigationView.inflateHeaderView(R.layout.navigation_drawer_header);
navigationDrawerHeader.setOnClickListener(v -> { navigationDrawerHeader.setOnClickListener(v -> {
drawerLayout.closeDrawers(); binding.drawerLayout.closeDrawers();
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
expandPanel(); expandPanel();
} }
@ -198,7 +189,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
.build().into(((ImageView) navigationDrawerHeader.findViewById(R.id.image))); .build().into(((ImageView) navigationDrawerHeader.findViewById(R.id.image)));
} else { } else {
if (navigationDrawerHeader != null) { if (navigationDrawerHeader != null) {
navigationView.removeHeaderView(navigationDrawerHeader); binding.navigationView.removeHeaderView(navigationDrawerHeader);
navigationDrawerHeader = null; navigationDrawerHeader = null;
} }
} }
@ -219,10 +210,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
if (drawerLayout.isDrawerOpen(navigationView)) { if (binding.drawerLayout.isDrawerOpen(binding.navigationView)) {
drawerLayout.closeDrawer(navigationView); binding.drawerLayout.closeDrawer(binding.navigationView);
} else { } else {
drawerLayout.openDrawer(navigationView); binding.drawerLayout.openDrawer(binding.navigationView);
} }
return true; return true;
@ -233,8 +224,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
@Override @Override
public boolean handleBackPress() { public boolean handleBackPress() {
if (drawerLayout.isDrawerOpen(navigationView)) { if (binding.drawerLayout.isDrawerOpen(binding.navigationView)) {
drawerLayout.closeDrawers(); binding.drawerLayout.closeDrawers();
return true; return true;
} }
@ -244,13 +235,13 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
@Override @Override
public void onPanelExpanded(View view) { public void onPanelExpanded(View view) {
super.onPanelExpanded(view); super.onPanelExpanded(view);
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} }
@Override @Override
public void onPanelCollapsed(View view) { public void onPanelCollapsed(View view) {
super.onPanelCollapsed(view); super.onPanelCollapsed(view);
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
} }
public interface MainActivityFragmentCallbacks { public interface MainActivityFragmentCallbacks {

View file

@ -11,11 +11,11 @@ import androidx.preference.ListPreference;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.preference.TwoStatePreference; import androidx.preference.TwoStatePreference;
import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import com.afollestad.materialdialogs.color.ColorChooserDialog; import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.dkanada.gramophone.databinding.ActivitySettingsBinding;
import com.dkanada.gramophone.preferences.DirectPlayPreference; import com.dkanada.gramophone.preferences.DirectPlayPreference;
import com.dkanada.gramophone.preferences.DirectPlayPreferenceDialog; import com.dkanada.gramophone.preferences.DirectPlayPreferenceDialog;
import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.ThemeStore;
@ -31,27 +31,24 @@ import com.dkanada.gramophone.preferences.NowPlayingScreenPreferenceDialog;
import com.dkanada.gramophone.ui.activities.base.AbsBaseActivity; import com.dkanada.gramophone.ui.activities.base.AbsBaseActivity;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback { public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
private ActivitySettingsBinding binding;
@BindView(R.id.toolbar)
Toolbar toolbar;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
setDrawUnderStatusbar();
ButterKnife.bind(this);
binding = ActivitySettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setDrawUnderStatusbar();
setStatusbarColorAuto(); setStatusbarColorAuto();
setNavigationbarColorAuto(); setNavigationbarColorAuto();
setTaskDescriptionColorAuto(); setTaskDescriptionColorAuto();
toolbar.setBackgroundColor(ThemeStore.primaryColor(this)); binding.toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar); setSupportActionBar(binding.toolbar);
//noinspection ConstantConditions //noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);