]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/ui/patterns/PatternDetailsFragment.java
83aa17d22a82715c13e4142f7b159061f4b090b6
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / patterns / PatternDetailsFragment.java
1 /*
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.
8  *
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.
13  *
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/>.
16  */
17
18 package net.ktnx.mobileledger.ui.patterns;
19
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;
25
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;
33
34 import com.google.android.material.snackbar.Snackbar;
35
36 import net.ktnx.mobileledger.R;
37 import net.ktnx.mobileledger.databinding.PatternDetailsFragmentBinding;
38 import net.ktnx.mobileledger.ui.QRScanAbleFragment;
39 import net.ktnx.mobileledger.utils.Logger;
40
41 public class PatternDetailsFragment extends QRScanAbleFragment {
42     static final String ARG_PATTERN_ID = "pattern-id";
43     private static final String ARG_COLUMN_COUNT = "column-count";
44     PatternDetailsFragmentBinding b;
45     private PatternDetailsViewModel mViewModel;
46     private int mColumnCount = 1;
47     private int mPatternId = PatternDetailsViewModel.NEW_PATTERN;
48     public PatternDetailsFragment() {
49     }
50     public static PatternDetailsFragment newInstance(int columnCount, int patternId) {
51         final PatternDetailsFragment fragment = new PatternDetailsFragment();
52         Bundle args = new Bundle();
53         args.putInt(ARG_COLUMN_COUNT, columnCount);
54         if (patternId > 0)
55             args.putInt(ARG_PATTERN_ID, patternId);
56         fragment.setArguments(args);
57         return fragment;
58     }
59     @Override
60     public void onCreate(@Nullable Bundle savedInstanceState) {
61         super.onCreate(savedInstanceState);
62
63         final Bundle args = getArguments();
64         if (args != null) {
65             mColumnCount = args.getInt(ARG_COLUMN_COUNT, 1);
66             mPatternId = args.getInt(ARG_PATTERN_ID, PatternDetailsViewModel.NEW_PATTERN);
67         }
68         mViewModel.setPatternId(mPatternId);
69     }
70     @Override
71     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
72                              @Nullable Bundle savedInstanceState) {
73         b = PatternDetailsFragmentBinding.inflate(inflater);
74         Context context = b.patternDetailsRecyclerView.getContext();
75         if (mColumnCount <= 1) {
76             b.patternDetailsRecyclerView.setLayoutManager(new LinearLayoutManager(context));
77         }
78         else {
79             b.patternDetailsRecyclerView.setLayoutManager(
80                     new GridLayoutManager(context, mColumnCount));
81         }
82
83
84         PatternDetailsAdapter adapter = new PatternDetailsAdapter();
85         b.patternDetailsRecyclerView.setAdapter(adapter);
86         mViewModel.getItems()
87                   .observe(getViewLifecycleOwner(), adapter::setItems);
88         return b.getRoot();
89     }
90     @Override
91     public void onAttach(@NonNull Context context) {
92         super.onAttach(context);
93         NavController controller = ((PatternsActivity) context).getNavController();
94         final ViewModelStoreOwner viewModelStoreOwner =
95                 controller.getViewModelStoreOwner(R.id.pattern_list_navigation);
96         mViewModel = new ViewModelProvider(viewModelStoreOwner).get(PatternDetailsViewModel.class);
97         mViewModel.setDefaultPatternName(getString(R.string.unnamed_pattern));
98         Logger.debug("flow", "PatternDetailsFragment.onAttach(): model=" + mViewModel);
99
100     }
101     @Override
102     protected void onQrScanned(String text) {
103         Logger.debug("PatDet_fr", String.format("Got scanned text '%s'", text));
104         mViewModel.setTestText(text);
105     }
106     public void onSavePattern() {
107         mViewModel.onSavePattern();
108         final Snackbar snackbar = Snackbar.make(b.getRoot(),
109                 "One Save pattern action coming up soon in a fragment near you",
110                 Snackbar.LENGTH_INDEFINITE);
111 //        snackbar.setAction("Action", v -> snackbar.dismiss());
112         snackbar.show();
113     }
114 }