]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/AccountSummary.java
rewording and translations
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / AccountSummary.java
1 package net.ktnx.mobileledger;
2
3 import android.arch.lifecycle.ViewModelProviders;
4 import android.content.Intent;
5 import android.content.SharedPreferences;
6 import android.content.pm.PackageInfo;
7 import android.os.Build;
8 import android.os.Bundle;
9 import android.preference.PreferenceManager;
10 import android.support.design.widget.Snackbar;
11 import android.support.v4.view.GravityCompat;
12 import android.support.v4.widget.DrawerLayout;
13 import android.support.v4.widget.SwipeRefreshLayout;
14 import android.support.v7.app.ActionBarDrawerToggle;
15 import android.support.v7.app.AppCompatActivity;
16 import android.support.v7.widget.LinearLayoutManager;
17 import android.support.v7.widget.RecyclerView;
18 import android.support.v7.widget.Toolbar;
19 import android.util.Log;
20 import android.view.Menu;
21 import android.view.MenuItem;
22 import android.view.View;
23 import android.widget.LinearLayout;
24
25 import java.lang.ref.WeakReference;
26 import java.util.Date;
27 import java.util.List;
28
29 public class AccountSummary extends AppCompatActivity {
30     DrawerLayout drawer;
31
32     private static long account_list_last_updated;
33     private static boolean account_list_needs_update = true;
34     MenuItem mShowHiddenAccounts;
35     SharedPreferences.OnSharedPreferenceChangeListener sBindPreferenceSummaryToValueListener;
36     private MobileLedgerDatabase dbh;
37     private AccountSummaryViewModel model;
38     private AccountSummaryAdapter modelAdapter;
39     private Menu optMenu;
40
41     public static void preferences_changed() {
42         account_list_needs_update = true;
43     }
44
45     @Override
46     protected void onCreate(Bundle savedInstanceState) {
47         super.onCreate(savedInstanceState);
48         setContentView(R.layout.activity_account_summary);
49         Toolbar toolbar = findViewById(R.id.toolbar);
50         setSupportActionBar(toolbar);
51
52         dbh = new MobileLedgerDatabase(this);
53
54         drawer = findViewById(R.id.drawer_layout);
55         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
56                 this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
57         drawer.addDrawerListener(toggle);
58         toggle.syncState();
59
60         android.widget.TextView ver = drawer.findViewById(R.id.drawer_version_text);
61
62         try {
63             PackageInfo pi = getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0);
64             ver.setText(pi.versionName);
65         } catch (Exception e) {
66             e.printStackTrace();
67         }
68
69         model = ViewModelProviders.of(this).get(AccountSummaryViewModel.class);
70         List<LedgerAccount> accounts = model.getAccounts();
71         modelAdapter = new AccountSummaryAdapter(accounts);
72
73         RecyclerView root = findViewById(R.id.account_root);
74         root.setAdapter(modelAdapter);
75
76         LinearLayoutManager llm = new LinearLayoutManager(this);
77         llm.setOrientation(LinearLayoutManager.VERTICAL);
78         root.setLayoutManager(llm);
79
80         root.addOnItemTouchListener(new RecyclerItemListener(this, root, new RecyclerItemListener.RecyclerTouchListener() {
81             @Override
82             public void onClickItem(View v, int position) {
83                 Log.d("list", String.format("item %d clicked", position));
84                 if (modelAdapter.isSelectionActive()) {
85                     modelAdapter.selectItem(position);
86                 }
87             }
88
89             @Override
90             public void onLongClickItem(View v, int position) {
91                 Log.d("list", String.format("item %d long-clicked", position));
92                 modelAdapter.startSelection();
93                 if (optMenu != null) {
94                     optMenu.findItem(R.id.menu_acc_summary_cancel_selection).setVisible(true);
95                     optMenu.findItem(R.id.menu_acc_summary_hide_selected).setVisible(true);
96                 }
97             }
98         }));
99
100         ((SwipeRefreshLayout) findViewById(R.id.account_swiper)).setOnRefreshListener(() -> {
101             Log.d("ui", "refreshing accounts via swipe");
102             update_accounts(true);
103         });
104         prepare_db();
105 //        update_account_table();
106         update_accounts(false);
107     }
108
109     @Override
110     protected void onStart() {
111         super.onStart();
112         LinearLayout grp = drawer.findViewById(R.id.nav_actions);
113         for (int i = 0; i < grp.getChildCount(); i++) {
114             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
115                 grp.getChildAt(i).setBackgroundColor(
116                         getResources().getColor(R.color.drawer_background, getTheme()));
117             }
118             else {
119                 grp.getChildAt(i)
120                         .setBackgroundColor(getResources().getColor(R.color.drawer_background));
121             }
122         }
123         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
124             drawer.findViewById(R.id.nav_account_summary).setBackgroundColor(
125                     getResources().getColor(R.color.table_row_even_bg, getTheme()));
126         }
127         else {
128             drawer.findViewById(R.id.nav_account_summary)
129                     .setBackgroundColor(getResources().getColor(R.color.table_row_even_bg));
130         }
131     }
132
133     public void fab_new_transaction_clicked(View view) {
134         Intent intent = new Intent(this, NewTransactionActivity.class);
135         startActivity(intent);
136         overridePendingTransition(R.anim.slide_in_right, R.anim.dummy);
137     }
138
139     public void nav_exit_clicked(View view) {
140         Log.w("app", "exiting");
141         finish();
142     }
143
144     public void nav_settings_clicked(View view) {
145         Intent intent = new Intent(this, SettingsActivity.class);
146         startActivity(intent);
147     }
148
149     @Override
150     public void onBackPressed() {
151         DrawerLayout drawer = findViewById(R.id.drawer_layout);
152         if (drawer.isDrawerOpen(GravityCompat.START)) {
153             drawer.closeDrawer(GravityCompat.START);
154         } else {
155             super.onBackPressed();
156         }
157     }
158
159     @Override
160     public boolean onCreateOptionsMenu(Menu menu) {
161         // Inflate the menu; this adds items to the action bar if it is present.
162         getMenuInflater().inflate(R.menu.account_summary, menu);
163         optMenu = menu;
164
165         mShowHiddenAccounts = menu.findItem(R.id.menu_acc_summary_only_starred);
166         if (mShowHiddenAccounts == null) throw new AssertionError();
167
168         sBindPreferenceSummaryToValueListener = (preference, value) -> mShowHiddenAccounts
169                 .setChecked(preference.getBoolean("show_hidden_accounts", false));
170         SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
171         pref.registerOnSharedPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
172
173         mShowHiddenAccounts.setChecked(pref.getBoolean("show_hidden_accounts", false));
174
175         return true;
176     }
177
178     @Override
179     public boolean onOptionsItemSelected(MenuItem item) {
180         // Handle action bar item clicks here. The action bar will
181         // automatically handle clicks on the Home/Up button, so long
182         // as you specify a parent activity in AndroidManifest.xml.
183 //        int id = item.getItemId();
184
185         //noinspection SimplifiableIfStatement
186         //if (id == R.id.action_settings) {
187         //    return true;
188         // }
189
190         return super.onOptionsItemSelected(item);
191     }
192
193     public void onRefreshAccountSummaryClicked(MenuItem mi) {
194         update_accounts(true);
195     }
196
197     public
198     void onShowOnlyStarredClicked(MenuItem mi) {
199         SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
200         boolean flag = pref.getBoolean("show_hidden_accounts", false);
201
202         SharedPreferences.Editor editor = pref.edit();
203         editor.putBoolean("show_hidden_accounts", !flag);
204         Log.d("pref", "Setting show_hidden_accounts to " + (flag ? "false" : "true"));
205         editor.apply();
206
207         update_account_table();
208     }
209
210     private void prepare_db() {
211         account_list_last_updated = dbh.get_option_value("last_refresh", (long) 0);
212     }
213
214     private void update_accounts(boolean force) {
215         long now = new Date().getTime();
216         if ((now > (account_list_last_updated + (24 * 3600*1000))) || force) {
217             Log.d("db", "accounts last updated at " + account_list_last_updated+" and now is " + now+". re-fetching");
218             update_accounts();
219         }
220     }
221
222     private void update_accounts() {
223         RetrieveAccountsTask task = new RetrieveAccountsTask(new WeakReference<>(this));
224
225         task.setPref(PreferenceManager.getDefaultSharedPreferences(this));
226         task.execute();
227
228     }
229     void onAccountRefreshDone(int error) {
230         SwipeRefreshLayout srl = findViewById(R.id.account_swiper);
231         srl.setRefreshing(false);
232         if (error != 0) {
233             String err_text = getResources().getString(error);
234             Log.d("visual", String.format("showing snackbar: %s", err_text));
235             Snackbar.make(drawer, err_text, Snackbar.LENGTH_LONG ).show();
236         }
237         else {
238             dbh.set_option_value("last_refresh", new Date().getTime() );
239             update_account_table();
240         }
241     }
242     private void update_account_table() {
243         model.reloadAccounts();
244         modelAdapter.notifyDataSetChanged();
245     }
246     public void onCancelAccSelection(MenuItem item) {
247         modelAdapter.stopSelection();
248         if (optMenu != null) {
249             optMenu.findItem(R.id.menu_acc_summary_cancel_selection).setVisible(false);
250             optMenu.findItem(R.id.menu_acc_summary_hide_selected).setVisible(false);
251         }
252     }
253 }