aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments')
-rw-r--r--app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/AboutFragment.java111
-rw-r--r--app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeAdapter.java85
-rw-r--r--app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeFragment.java175
3 files changed, 371 insertions, 0 deletions
diff --git a/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/AboutFragment.java b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/AboutFragment.java
new file mode 100644
index 0000000..3047e85
--- /dev/null
+++ b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/AboutFragment.java
@@ -0,0 +1,111 @@
+package me.brysonsteck.wiimmfiwatcher.fragments;
+
+import android.annotation.SuppressLint;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.Spanned;
+import android.text.method.LinkMovementMethod;
+import android.transition.TransitionInflater;
+import android.view.View;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.google.android.material.appbar.MaterialToolbar;
+
+import me.brysonsteck.wiimmfiwatcher.BuildConfig;
+import me.brysonsteck.wiimmfiwatcher.R;
+
+public class AboutFragment extends Fragment {
+ View aboutButton;
+ MaterialToolbar toolbar;
+ ScrollView scrollView;
+
+ public AboutFragment() {
+ super(R.layout.about_fragment);
+ }
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ TransitionInflater inflater = TransitionInflater.from(requireContext());
+ setEnterTransition(inflater.inflateTransition(R.transition.slide_right));
+ setExitTransition(inflater.inflateTransition(R.transition.slide_right));
+ }
+
+ @SuppressLint("SetTextI18n")
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ scrollView = view.findViewById(R.id.about_view);
+
+ int nightModeFlags =
+ getContext().getResources().getConfiguration().uiMode &
+ Configuration.UI_MODE_NIGHT_MASK;
+ if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
+ // Night mode is active, we're using dark theme
+ scrollView.setBackgroundColor(Color.parseColor("#151515"));
+ }
+
+ aboutButton = getActivity().findViewById(R.id.about_button);
+ toolbar = getActivity().findViewById(R.id.toolbar);
+ toolbar.setTitle(R.string.about_fragment_title);
+
+ TextView aboutWatcher = view.findViewById(R.id.about_watcher_text);
+ TextView aboutMe = view.findViewById(R.id.about_me_text);
+ TextView github = view.findViewById(R.id.github_text);
+ TextView contact = view.findViewById(R.id.contact_text);
+ TextView bugs = view.findViewById(R.id.bugs_text);
+ TextView license = view.findViewById(R.id.license_text);
+ TextView version = view.findViewById(R.id.version_text);
+
+ aboutWatcher.setText(R.string.about_watcher);
+
+ aboutMe.setText(R.string.about_me);
+
+ github.setClickable(true);
+ github.setMovementMethod(LinkMovementMethod.getInstance());
+
+ github.setText(R.string.github);
+
+ contact.setClickable(true);
+ contact.setMovementMethod(LinkMovementMethod.getInstance());
+
+ contact.setText(R.string.contact);
+
+ bugs.setClickable(true);
+ bugs.setMovementMethod(LinkMovementMethod.getInstance());
+
+ bugs.setText(R.string.bugs);
+
+ license.setClickable(true);
+ license.setMovementMethod(LinkMovementMethod.getInstance());
+
+ license.setText(R.string.license);
+
+ version.setClickable(true);
+ version.setMovementMethod(LinkMovementMethod.getInstance());
+
+ Spanned version_text = Html.fromHtml(getResources().getString(R.string.version, BuildConfig.VERSION_NAME));
+
+ version.setText(version_text);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ aboutButton.setVisibility(View.VISIBLE);
+ toolbar.setTitle("Wiimmfi Watcher");
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+ aboutButton.setVisibility(View.INVISIBLE);
+ toolbar.setTitle(R.string.about_fragment_title);
+ }
+
+}
diff --git a/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeAdapter.java b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeAdapter.java
new file mode 100644
index 0000000..400436b
--- /dev/null
+++ b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeAdapter.java
@@ -0,0 +1,85 @@
+package me.brysonsteck.wiimmfiwatcher.fragments;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.ObservableArrayList;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.google.android.material.button.MaterialButton;
+import com.google.android.material.textview.MaterialTextView;
+
+import java.util.ArrayList;
+
+import me.brysonsteck.wiimmfiwatcher.R;
+import me.brysonsteck.wiimmfiwatcher.model.FriendCode;
+import me.brysonsteck.wiimmfiwatcher.wiimmfi.WiimmfiActivity;
+
+public class WatchCodeAdapter extends RecyclerView.Adapter<WatchCodeAdapter.ViewHolder>{
+ ObservableArrayList<FriendCode> entries;
+ Context context;
+ MaterialTextView errorText;
+ ProgressDialog progressBar;
+ ArrayList<String> recentCodes;
+
+ public WatchCodeAdapter(Context context, ObservableArrayList<FriendCode> entries,
+ MaterialTextView errorText, ProgressDialog progressBar) {
+ this.context = context;
+ this.entries = entries;
+ this.errorText = errorText;
+ this.progressBar = progressBar;
+ this.recentCodes = new ArrayList<>();
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recent_friend_codes_item, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ String currentFC = entries.get(position).friendCode;
+ MaterialButton fcButton = holder.itemView.findViewById(R.id.recent_friend_code_button);
+ int nightModeFlags =
+ context.getResources().getConfiguration().uiMode &
+ Configuration.UI_MODE_NIGHT_MASK;
+ if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
+ // Night mode is active, we're using dark theme
+ fcButton.setBackgroundColor(Color.parseColor("#313131"));
+ }
+ fcButton.setText(currentFC);
+ fcButton.setOnClickListener(view -> {
+ progressBar.setCancelable(true);
+ progressBar.setMessage(holder.itemView.getResources().getString(R.string.locating_text, currentFC));
+ progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ progressBar.setProgress(0);
+ progressBar.setMax(100);
+ progressBar.show();
+ errorText.setText("");
+ Intent intent = new Intent(view.getContext(), WiimmfiActivity.class);
+ intent.putExtra("friendCode", currentFC);
+ context.startActivity(intent);
+ });
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return entries.size();
+ }
+
+ class ViewHolder extends RecyclerView.ViewHolder {
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ }
+ }
+}
diff --git a/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeFragment.java b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeFragment.java
new file mode 100644
index 0000000..2687518
--- /dev/null
+++ b/app/src/main/java/me/brysonsteck/wiimmfiwatcher/fragments/WatchCodeFragment.java
@@ -0,0 +1,175 @@
+package me.brysonsteck.wiimmfiwatcher.fragments;
+
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.os.Bundle;
+import android.transition.TransitionInflater;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ProgressBar;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.databinding.ObservableList;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.google.android.material.textview.MaterialTextView;
+
+import me.brysonsteck.wiimmfiwatcher.R;
+import me.brysonsteck.wiimmfiwatcher.model.FriendCode;
+import me.brysonsteck.wiimmfiwatcher.viewmodel.FriendCodeViewModel;
+import me.brysonsteck.wiimmfiwatcher.wiimmfi.WiimmfiActivity;
+
+public class WatchCodeFragment extends Fragment {
+ ProgressDialog progressBar;
+
+ public WatchCodeFragment() {
+ super(R.layout.watch_code_fragment);
+ }
+
+ public boolean isValidFriendCode(String friendCode) {
+ String[] friendCodeSplit = friendCode.split("-");
+ boolean valid = false;
+ if (friendCodeSplit.length == 3) {
+ for (String friendCodePart : friendCodeSplit) {
+ valid = friendCodePart.length() == 4;
+ if (!valid) {
+ break;
+ }
+ }
+ }
+ return valid;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ TransitionInflater inflater = TransitionInflater.from(requireContext());
+ setEnterTransition(inflater.inflateTransition(R.transition.fade));
+ setExitTransition(inflater.inflateTransition(R.transition.fade));
+ }
+
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ FriendCodeViewModel viewModel = new ViewModelProvider(getActivity()).get(FriendCodeViewModel.class);
+ progressBar = new ProgressDialog(getContext(), R.style.AppCompatAlertDialogStyle);
+
+ MaterialTextView errorText = view.findViewById(R.id.error_text);
+ WatchCodeAdapter adapter = new WatchCodeAdapter(getContext(), viewModel.getEntries(), errorText, progressBar);
+ viewModel.getEntries().addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<FriendCode>>() {
+ @Override
+ public void onChanged(ObservableList<FriendCode> sender) {
+ getActivity().runOnUiThread(() -> {
+ adapter.notifyDataSetChanged();
+ });
+ }
+
+ @Override
+ public void onItemRangeChanged(ObservableList<FriendCode> sender, int positionStart, int itemCount) {
+ getActivity().runOnUiThread(() -> {
+ adapter.notifyItemRangeChanged(positionStart, itemCount);
+ });
+ }
+
+ @Override
+ public void onItemRangeInserted(ObservableList<FriendCode> sender, int positionStart, int itemCount) {
+ getActivity().runOnUiThread(() -> {
+ adapter.notifyItemRangeInserted(positionStart, itemCount); // this is the only method that seems to be called
+ });
+ }
+
+ @Override
+ public void onItemRangeMoved(ObservableList<FriendCode> sender, int fromPosition, int toPosition, int itemCount) {
+ getActivity().runOnUiThread(() -> {
+ adapter.notifyItemMoved(fromPosition, toPosition);
+ });
+ }
+
+ @Override
+ public void onItemRangeRemoved(ObservableList<FriendCode> sender, int positionStart, int itemCount) {
+ getActivity().runOnUiThread(() -> {
+ adapter.notifyItemRangeRemoved(positionStart, itemCount);
+ });
+ }
+ });
+ RecyclerView recyclerView = view.findViewById(R.id.recent_friend_codes_recycler_view);
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
+ linearLayoutManager.setReverseLayout(true);
+ linearLayoutManager.setStackFromEnd(true);
+ recyclerView.setLayoutManager(linearLayoutManager);
+ recyclerView.setAdapter(adapter);
+
+ EditText friendCode = view.findViewById(R.id.friend_code_edit_text);
+ Button watchButton = view.findViewById(R.id.watch_button);
+ watchButton.setOnClickListener(buttonClick -> {
+ startWiimmfiActivity(
+ view,
+ friendCode,
+ errorText,
+ watchButton,
+ viewModel
+ );
+ watchButton.setText(R.string.watch);
+ });
+ friendCode.setOnKeyListener(new View.OnKeyListener()
+ {
+ public boolean onKey(View view1, int keyCode, KeyEvent event)
+ {
+ if (event.getAction() == KeyEvent.ACTION_DOWN)
+ {
+ switch (keyCode)
+ {
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ case KeyEvent.KEYCODE_ENTER:
+ startWiimmfiActivity(
+ view,
+ friendCode,
+ errorText,
+ watchButton,
+ viewModel
+ );
+ return true;
+ default:
+ break;
+ }
+ }
+ return false;
+ }
+ });
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ if (progressBar.isShowing()) { progressBar.dismiss(); }
+ }
+
+ public void startWiimmfiActivity(View view, EditText friendCode, MaterialTextView errorText, Button watchButton, FriendCodeViewModel viewModel) {
+ Intent intent = new Intent(view.getContext(), WiimmfiActivity.class);
+ if (!isValidFriendCode(friendCode.getText().toString())) {
+ errorText.setText(R.string.error_fc_syntax);
+ } else {
+ progressBar.setCancelable(false);
+ progressBar.setMessage(getResources().getString(R.string.locating_text, friendCode.getText()));
+ progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ progressBar.show();
+
+ errorText.setText("");
+ viewModel.saveFriendCode("", friendCode.getText().toString());
+ intent.putExtra("friendCode", friendCode.getText().toString());
+ ProgressBar p = view.findViewById(R.id.progressBar1);
+ if(p.getVisibility() != View.GONE){ // check if it is visible
+ p.setVisibility(View.GONE); // if not set it to visible
+ watchButton.setVisibility(View.VISIBLE); // use 1 or 2 as parameters.. arg0 is the view(your button) from the onclick listener
+ }
+ startActivity(intent);
+ }
+ }
+}