2 * Copyright © 2021 Damyan Ivanov.
3 * This file is part of MoLe.
4 * MoLe is free software: you can distribute it and/or modify it
5 * under the term of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your opinion), any later version.
9 * MoLe is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License terms for details.
14 * You should have received a copy of the GNU General Public License
15 * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
18 package net.ktnx.mobileledger.ui.templates;
20 import android.content.Context;
21 import android.os.Bundle;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
26 import androidx.annotation.NonNull;
27 import androidx.annotation.Nullable;
28 import androidx.lifecycle.ViewModelProvider;
29 import androidx.lifecycle.ViewModelStoreOwner;
30 import androidx.navigation.NavController;
31 import androidx.recyclerview.widget.GridLayoutManager;
32 import androidx.recyclerview.widget.LinearLayoutManager;
34 import com.google.android.material.snackbar.Snackbar;
36 import net.ktnx.mobileledger.R;
37 import net.ktnx.mobileledger.databinding.TemplateDetailsFragmentBinding;
38 import net.ktnx.mobileledger.ui.QRScanCapableFragment;
39 import net.ktnx.mobileledger.utils.Logger;
41 public class TemplateDetailsFragment extends QRScanCapableFragment {
42 static final String ARG_TEMPLATE_ID = "pattern-id";
43 private static final String ARG_COLUMN_COUNT = "column-count";
44 TemplateDetailsFragmentBinding b;
45 private TemplateDetailsViewModel mViewModel;
46 private int mColumnCount = 1;
47 private Long mPatternId;
48 public TemplateDetailsFragment() {
50 public static TemplateDetailsFragment newInstance(int columnCount, int patternId) {
51 final TemplateDetailsFragment fragment = new TemplateDetailsFragment();
52 Bundle args = new Bundle();
53 args.putInt(ARG_COLUMN_COUNT, columnCount);
55 args.putInt(ARG_TEMPLATE_ID, patternId);
56 fragment.setArguments(args);
60 public void onCreate(@Nullable Bundle savedInstanceState) {
61 super.onCreate(savedInstanceState);
63 final Bundle args = getArguments();
65 mColumnCount = args.getInt(ARG_COLUMN_COUNT, 1);
66 mPatternId = args.getLong(ARG_TEMPLATE_ID, -1);
72 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
73 @Nullable Bundle savedInstanceState) {
74 NavController controller = ((TemplatesActivity) requireActivity()).getNavController();
75 final ViewModelStoreOwner viewModelStoreOwner =
76 controller.getViewModelStoreOwner(R.id.template_list_navigation);
77 mViewModel = new ViewModelProvider(viewModelStoreOwner).get(TemplateDetailsViewModel.class);
78 mViewModel.setDefaultPatternName(getString(R.string.unnamed_template));
79 Logger.debug("flow", "PatternDetailsFragment.onCreateView(): model=" + mViewModel);
81 b = TemplateDetailsFragmentBinding.inflate(inflater);
82 Context context = b.patternDetailsRecyclerView.getContext();
83 if (mColumnCount <= 1) {
84 b.patternDetailsRecyclerView.setLayoutManager(new LinearLayoutManager(context));
87 b.patternDetailsRecyclerView.setLayoutManager(
88 new GridLayoutManager(context, mColumnCount));
92 TemplateDetailsAdapter adapter = new TemplateDetailsAdapter();
93 b.patternDetailsRecyclerView.setAdapter(adapter);
94 mViewModel.getItems(mPatternId)
95 .observe(getViewLifecycleOwner(), adapter::setItems);
100 protected void onQrScanned(String text) {
101 Logger.debug("PatDet_fr", String.format("Got scanned text '%s'", text));
103 mViewModel.setTestText(text);
105 public void onSavePattern() {
106 mViewModel.onSaveTemplate();
107 final Snackbar snackbar = Snackbar.make(b.getRoot(),
108 "One Save pattern action coming up soon in a fragment near you",
109 Snackbar.LENGTH_INDEFINITE);
110 // snackbar.setAction("Action", v -> snackbar.dismiss());