diff --git a/.travis.yml b/.travis.yml index 1337593..69a752b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,17 +3,17 @@ jdk: oraclejdk8 android: components: # The BuildTools version used by your project - - build-tools-26.0.2 + - build-tools-27.0.3 # The SDK version used to compile your project - android-21 - - android-26 + - android-27 # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository - - addon-google_apis-google-26 + - addon-google_apis-google-27 # Specify at least one system image, # if you need to run emulator(s) during your tests diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2776004..0b50798 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -87,7 +87,7 @@ android:screenOrientation="portrait" android:theme="@style/Theme.Default" /> account = arguments.getParcelable(AccountOperationsFragment.KEY_ACCOUNT) } + } + + override fun initViews(view: View) { + listView.adapter = RecordAdapter(activity, getRecords()) + } + + private fun getRecords(): List { + val accountRecords = recordController.getRecordsForAccount(account) + val accountTransfers = transferController.getTransfersForAccount(account) + + accountRecords += obtainRecordsFromTransfers(accountTransfers) + accountRecords.sortByDescending { it.time } + + return accountRecords + } + + private fun obtainRecordsFromTransfers(transfers: List): List { + val records = mutableListOf() + + transfers.forEach { + val type = if (it.fromAccountId == account.id) Record.TYPE_EXPENSE else Record.TYPE_INCOME + val title = constructRecordTitle(type, it) + val category = Category(getString(R.string.transfer).toLowerCase()) + val price = if (type == Record.TYPE_EXPENSE) it.fromAmount else it.toAmount + val decimals = if (type == Record.TYPE_EXPENSE) it.fromDecimals else it.toDecimals + + records += Record(it.id, it.time, type, title, category, price, account, account.currency, decimals) + } + + return records.toList() + } + + private fun constructRecordTitle(type: Int, transfer: Transfer): String { + val titlePrefix = getString(if (type == Record.TYPE_EXPENSE) R.string.to else R.string.from) + val oppositeAccountId = if (type == Record.TYPE_EXPENSE) transfer.toAccountId else transfer.fromAccountId + val oppositeAccountTitle = "$titlePrefix ${accountController.read(oppositeAccountId)?.title}" + return "${getString(R.string.transfer)} $oppositeAccountTitle".toLowerCase() + } + + companion object { + + private const val KEY_ACCOUNT = "key_account" + + fun newInstance(account: Account): AccountOperationsFragment { + val fragment = AccountOperationsFragment() + val arguments = Bundle() + arguments.putParcelable(KEY_ACCOUNT, account) + fragment.arguments = arguments + return fragment + } + + } +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/edit/fragment/EditAccountFragment.kt b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/edit/fragment/EditAccountFragment.kt new file mode 100644 index 0000000..a33586a --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/edit/fragment/EditAccountFragment.kt @@ -0,0 +1,70 @@ +package com.blogspot.e_kanivets.moneytracker.activity.account.edit.fragment + +import android.app.Activity +import android.os.Bundle +import android.support.design.widget.FloatingActionButton +import android.view.View +import com.blogspot.e_kanivets.moneytracker.R +import com.blogspot.e_kanivets.moneytracker.R.layout +import com.blogspot.e_kanivets.moneytracker.activity.base.BaseFragment +import com.blogspot.e_kanivets.moneytracker.controller.data.AccountController +import com.blogspot.e_kanivets.moneytracker.entity.data.Account +import kotlinx.android.synthetic.main.fragment_edit_account.* +import javax.inject.Inject + +class EditAccountFragment : BaseFragment() { + + @Inject + internal lateinit var accountController: AccountController + + private lateinit var account: Account + + override val contentViewId: Int = layout.fragment_edit_account + + override fun initData() { + appComponent.inject(this@EditAccountFragment) + arguments?.let { arguments -> account = arguments.getParcelable(KEY_ACCOUNT) } + } + + override fun initViews(view: View) { + etTitle.setText(account.title) + etGoal.setText(account.goal.toString()) + viewColor.setBackgroundColor(account.color) + + val fabDone = view.rootView.findViewById(R.id.fabDone) + fabDone.setOnClickListener { done() } + } + + private fun done() { + val title = etTitle.text.toString().trim { it <= ' ' } + + if (title.isEmpty()) { + tilTitle.error = getString(R.string.field_cant_be_empty) + } else { + val newAccount = Account( + account.id, title, account.curSum.toDouble(), + account.currency, account.goal, account.isArchived, account.color + ) + val updated = accountController.update(newAccount) != null + if (updated) { + activity?.setResult(Activity.RESULT_OK) + activity?.finish() + } + } + } + + companion object { + + private const val KEY_ACCOUNT = "key_account" + + fun newInstance(account: Account): EditAccountFragment { + val fragment = EditAccountFragment() + val arguments = Bundle() + arguments.putParcelable(KEY_ACCOUNT, account) + fragment.arguments = arguments + return fragment + } + + } + +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseFragment.kt b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseFragment.kt new file mode 100644 index 0000000..d3d5a73 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseFragment.kt @@ -0,0 +1,33 @@ +package com.blogspot.e_kanivets.moneytracker.activity.base + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.blogspot.e_kanivets.moneytracker.MtApp +import com.blogspot.e_kanivets.moneytracker.di.AppComponent + +abstract class BaseFragment : Fragment() { + + protected val appComponent: AppComponent = MtApp.get().appComponent + + protected abstract val contentViewId: Int + + protected abstract fun initData() + + protected abstract fun initViews(view: View) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + initData() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = + inflater.inflate(contentViewId, container, false) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initViews(view) + } +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java index 918cb11..16b6136 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java @@ -1,16 +1,14 @@ package com.blogspot.e_kanivets.moneytracker.activity.charts; -import android.graphics.Color; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity; import com.blogspot.e_kanivets.moneytracker.activity.charts.fragment.GraphFragment; import com.blogspot.e_kanivets.moneytracker.activity.charts.fragment.SummaryFragment; +import com.blogspot.e_kanivets.moneytracker.adapter.GeneralViewPagerAdapter; import com.blogspot.e_kanivets.moneytracker.controller.CurrencyController; import com.blogspot.e_kanivets.moneytracker.controller.data.ExchangeRateController; import com.blogspot.e_kanivets.moneytracker.controller.data.RecordController; @@ -18,7 +16,6 @@ import com.blogspot.e_kanivets.moneytracker.report.ReportMaker; import com.blogspot.e_kanivets.moneytracker.report.chart.IMonthReport; -import java.util.ArrayList; import java.util.List; import javax.inject.Inject; @@ -27,32 +24,24 @@ public class ChartsActivity extends BaseBackActivity { - @Inject - RecordController recordController; - @Inject - ExchangeRateController exchangeRateController; - @Inject - CurrencyController currencyController; + @Inject RecordController recordController; + @Inject ExchangeRateController exchangeRateController; + @Inject CurrencyController currencyController; - @BindView(R.id.tabs) - TabLayout tabLayout; - @BindView(R.id.view_pager) - ViewPager viewPager; + @BindView(R.id.tabs) TabLayout tabLayout; + @BindView(R.id.view_pager) ViewPager viewPager; - @Override - protected int getContentViewId() { + @Override protected int getContentViewId() { return R.layout.activity_charts; } - @Override - protected boolean initData() { + @Override protected boolean initData() { boolean result = super.initData(); getAppComponent().inject(ChartsActivity.this); return result; } - @Override - protected void initViews() { + @Override protected void initViews() { super.initViews(); setupViewPager(viewPager); @@ -85,38 +74,9 @@ private void setupViewPager(ViewPager viewPager) { graphFragment = GraphFragment.newInstance(monthReport); } - ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); - adapter.addFragment(SummaryFragment.newInstance(monthReport), "Summary"); - adapter.addFragment(graphFragment, "Graph"); + GeneralViewPagerAdapter adapter = new GeneralViewPagerAdapter(getSupportFragmentManager()); + adapter.addFragment(SummaryFragment.newInstance(monthReport), getString(R.string.summary)); + adapter.addFragment(graphFragment, getString(R.string.graph)); viewPager.setAdapter(adapter); } - - class ViewPagerAdapter extends FragmentPagerAdapter { - private final List mFragmentList = new ArrayList<>(); - private final List mFragmentTitleList = new ArrayList<>(); - - ViewPagerAdapter(FragmentManager manager) { - super(manager); - } - - @Override - public Fragment getItem(int position) { - return mFragmentList.get(position); - } - - @Override - public int getCount() { - return mFragmentList.size(); - } - - void addFragment(Fragment fragment, String title) { - mFragmentList.add(fragment); - mFragmentTitleList.add(title); - } - - @Override - public CharSequence getPageTitle(int position) { - return mFragmentTitleList.get(position); - } - } } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java index 57dc083..3a155f8 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java @@ -94,14 +94,12 @@ protected void initViews() { setTitle(R.string.title_records); - tvDefaultAccountTitle = (TextView) navigationView.getHeaderView(0).findViewById(R.id.tv_default_account_title); - tvDefaultAccountSum = (TextView) navigationView.getHeaderView(0).findViewById(R.id.tv_default_account_sum); - tvCurrency = (TextView) navigationView.getHeaderView(0).findViewById(R.id.tv_currency); + tvDefaultAccountTitle = navigationView.getHeaderView(0).findViewById(R.id.tv_default_account_title); + tvDefaultAccountSum = navigationView.getHeaderView(0).findViewById(R.id.tv_default_account_sum); + tvCurrency = navigationView.getHeaderView(0).findViewById(R.id.tv_currency); if (preferenceController.checkRateDialog()) showAppRateDialog(); - //registerForContextMenu(listView); - View summaryView = summaryPresenter.create(true); listView.addHeaderView(summaryView); summaryView.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/GeneralViewPagerAdapter.kt b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/GeneralViewPagerAdapter.kt new file mode 100644 index 0000000..68325c7 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/GeneralViewPagerAdapter.kt @@ -0,0 +1,29 @@ +package com.blogspot.e_kanivets.moneytracker.adapter + +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager +import android.support.v4.app.FragmentPagerAdapter +import java.util.ArrayList + +class GeneralViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) { + private val fragmentList = ArrayList() + private val fragmentTitleList = ArrayList() + + override fun getItem(position: Int): Fragment { + return fragmentList[position] + } + + override fun getCount(): Int { + return fragmentList.size + } + + fun addFragment(fragment: Fragment, title: String) { + fragmentList.add(fragment) + fragmentTitleList.add(title) + } + + override fun getPageTitle(position: Int): CharSequence? { + return fragmentTitleList[position] + } + +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java index a17b984..5bd47d0 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java @@ -27,30 +27,27 @@ public class RecordController extends BaseController { private final AccountController accountController; public RecordController(IRepo recordRepo, CategoryController categoryController, - AccountController accountController) { + AccountController accountController) { super(recordRepo); this.categoryController = categoryController; this.accountController = accountController; } - @Override - @SuppressWarnings("SimplifiableIfStatement") - public Record create(@Nullable Record record) { + @Override @SuppressWarnings("SimplifiableIfStatement") public Record create(@Nullable Record record) { if (record == null) return null; record = validateRecord(record); Record createdRecord = repo.create(record); - if (createdRecord == null) return null; - else { + if (createdRecord == null) { + return null; + } else { accountController.recordAdded(createdRecord); return createdRecord; } } - @Override - @SuppressWarnings("SimplifiableIfStatement") - public Record update(@Nullable Record record) { + @Override @SuppressWarnings("SimplifiableIfStatement") public Record update(@Nullable Record record) { if (record == null) return null; record = validateRecord(record); @@ -58,44 +55,42 @@ record = validateRecord(record); Record oldRecord = read(record.getId()); Record updatedRecord = repo.update(record); - if (updatedRecord == null) return null; - else { + if (updatedRecord == null) { + return null; + } else { accountController.recordUpdated(oldRecord, updatedRecord); return updatedRecord; } } - @Override - @SuppressWarnings("SimplifiableIfStatement") - public boolean delete(@Nullable Record record) { - if (repo.delete(record)) return accountController.recordDeleted(record); - else return false; + @Override @SuppressWarnings("SimplifiableIfStatement") public boolean delete(@Nullable Record record) { + if (repo.delete(record)) { + return accountController.recordDeleted(record); + } else { + return false; + } } - @Nullable - @Override - public Record read(long id) { - List list = readWithCondition("id=?", new String[]{Long.toString(id)}); + @Nullable @Override public Record read(long id) { + List list = readWithCondition("id=?", new String[] { Long.toString(id) }); - if (list.size() == 1) return list.get(0); - else return null; + if (list.size() == 1) { + return list.get(0); + } else { + return null; + } } - @NonNull - @Override - public List readAll() { + @NonNull @Override public List readAll() { return readWithCondition(null, null); } - @NonNull - @Override - public List readWithCondition(String condition, String[] args) { + @NonNull @Override public List readWithCondition(String condition, String[] args) { List recordList = super.readWithCondition(condition, args); // Sort record list by time field from smallest to biggest Collections.sort(recordList, new Comparator() { - @Override - public int compare(Record lhs, Record rhs) { + @Override public int compare(Record lhs, Record rhs) { return lhs.getTime() < rhs.getTime() ? -1 : (lhs.getTime() == rhs.getTime() ? 0 : 1); } }); @@ -104,16 +99,14 @@ public int compare(Record lhs, Record rhs) { List completedRecordList = new ArrayList<>(); for (Record record : recordList) { Category category = null; - if (record.getCategory() != null) - category = categoryController.read(record.getCategory().getId()); + if (record.getCategory() != null) category = categoryController.read(record.getCategory().getId()); Account account = null; - if (record.getAccount() != null) - account = accountController.read(record.getAccount().getId()); + if (record.getAccount() != null) account = accountController.read(record.getAccount().getId()); - completedRecordList.add(new Record(record.getId(), record.getTime(), record.getType(), - record.getTitle(), category, record.getPrice(), account, record.getCurrency(), - record.getDecimals())); + completedRecordList.add( + new Record(record.getId(), record.getTime(), record.getType(), record.getTitle(), category, + record.getPrice(), account, record.getCurrency(), record.getDecimals())); } return completedRecordList; @@ -121,8 +114,16 @@ public int compare(Record lhs, Record rhs) { public List getRecordsForPeriod(Period period) { String condition = DbHelper.TIME_COLUMN + " BETWEEN ? AND ?"; - String[] args = new String[]{Long.toString(period.getFirst().getTime()), - Long.toString(period.getLast().getTime())}; + String[] args = new String[] { + Long.toString(period.getFirst().getTime()), Long.toString(period.getLast().getTime()) + }; + + return readWithCondition(condition, args); + } + + public List getRecordsForAccount(Account account) { + String condition = DbHelper.ACCOUNT_ID_COLUMN + "=?"; + String[] args = new String[] { Long.toString(account.getId()) }; return readWithCondition(condition, args); } @@ -132,8 +133,7 @@ private Record validateRecord(@NonNull Record record) { Category category = categoryController.readOrCreate(record.getCategory().getName()); - return new Record(record.getId(), record.getTime(), record.getType(), record.getTitle(), - category, record.getPrice(), record.getAccount(), record.getCurrency(), - record.getDecimals()); + return new Record(record.getId(), record.getTime(), record.getType(), record.getTitle(), category, + record.getPrice(), record.getAccount(), record.getCurrency(), record.getDecimals()); } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.java deleted file mode 100644 index 765a5f8..0000000 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.blogspot.e_kanivets.moneytracker.controller.data; - -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer; -import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; - -/** - * Controller class to encapsulate transfer handling logic. - * Created on 2/17/16. - * - * @author Evgenii Kanivets - */ -public class TransferController extends BaseController { - @SuppressWarnings("unused") - private static final String TAG = "TransferController"; - - @NonNull - private AccountController accountController; - - public TransferController(@NonNull IRepo transferRepo, - @NonNull AccountController accountController) { - super(transferRepo); - this.accountController = accountController; - } - - @Override - @SuppressWarnings("SimplifiableIfStatement") - public Transfer create(@Nullable Transfer transfer) { - Transfer createdTransfer = repo.create(transfer); - - if (createdTransfer == null) return null; - else { - accountController.transferDone(createdTransfer); - return createdTransfer; - } - } -} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.kt b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.kt new file mode 100644 index 0000000..457901e --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.kt @@ -0,0 +1,36 @@ +package com.blogspot.e_kanivets.moneytracker.controller.data + +import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController +import com.blogspot.e_kanivets.moneytracker.entity.data.Account +import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer +import com.blogspot.e_kanivets.moneytracker.repo.DbHelper +import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo + +/** + * Controller class to encapsulate transfer handling logic. + * Created on 2/17/16. + * + * @author Evgenii Kanivets + */ +class TransferController( + transferRepo: IRepo, + private val accountController: AccountController +) : BaseController(transferRepo) { + + override fun create(transfer: Transfer?): Transfer? { + val createdTransfer = repo.create(transfer) + + return if (createdTransfer == null) null else { + accountController.transferDone(createdTransfer) + createdTransfer + } + } + + fun getTransfersForAccount(account: Account): List { + val condition = "${DbHelper.FROM_ACCOUNT_ID_COLUMN}=? OR ${DbHelper.TO_ACCOUNT_ID_COLUMN}=?" + val args = arrayOf(account.id.toString(), account.id.toString()) + + return readWithCondition(condition, args) + } + +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java index 6d31fa5..1f0b100 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java @@ -1,6 +1,8 @@ package com.blogspot.e_kanivets.moneytracker.di; -import com.blogspot.e_kanivets.moneytracker.activity.account.EditAccountActivity; +import com.blogspot.e_kanivets.moneytracker.activity.account.edit.EditAccountActivity; +import com.blogspot.e_kanivets.moneytracker.activity.account.edit.fragment.AccountOperationsFragment; +import com.blogspot.e_kanivets.moneytracker.activity.account.edit.fragment.EditAccountFragment; import com.blogspot.e_kanivets.moneytracker.activity.charts.ChartsActivity; import com.blogspot.e_kanivets.moneytracker.activity.external.BackupActivity; import com.blogspot.e_kanivets.moneytracker.activity.external.ImportExportActivity; @@ -81,4 +83,8 @@ public interface AppComponent { void inject(MonthSummaryAdapter monthSummaryAdapter); void inject(EditAccountActivity editAccountActivity); + + void inject(EditAccountFragment editAccountFragment); + + void inject(AccountOperationsFragment accountRecordsFragment); } diff --git a/app/src/main/res/layout/activity_edit_account.xml b/app/src/main/res/layout/activity_edit_account.xml index 370e430..4a73f71 100644 --- a/app/src/main/res/layout/activity_edit_account.xml +++ b/app/src/main/res/layout/activity_edit_account.xml @@ -6,97 +6,49 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" - tools:context="com.blogspot.e_kanivets.moneytracker.activity.account.EditAccountActivity"> + tools:context="com.blogspot.e_kanivets.moneytracker.activity.account.edit.EditAccountActivity" + > - - - - - + - - - - - - - - - - - + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + app:popupTheme="@style/AppTheme.PopupOverlay" + /> - - - - - - - - - - - - - - + app:tabGravity="fill" + app:tabIndicatorColor="@color/white" + app:tabMode="fixed" + /> + + + + + + diff --git a/app/src/main/res/layout/fragment_account_operations.xml b/app/src/main/res/layout/fragment_account_operations.xml new file mode 100644 index 0000000..f4e5e9d --- /dev/null +++ b/app/src/main/res/layout/fragment_account_operations.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_edit_account.xml b/app/src/main/res/layout/fragment_edit_account.xml new file mode 100644 index 0000000..c09d09a --- /dev/null +++ b/app/src/main/res/layout/fragment_edit_account.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7bb319a..ff1375e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -123,4 +123,8 @@ Нельзя архивировать счет по умолчанию. Удалить счет Вы уверены, что хотите удалить этот счет ? Вы не сможете восстановить его после удаления. + + График + Информация + Операции diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2398fdd..c721c4a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -123,4 +123,8 @@ Неможливо архівувати рахунок за замовчанням. Видалити рахунок Ви впевнені, що хочете видалити цей рахунок? Ви не зможете відновити його після видалення. + + Графік + Інформація + Операції diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c98ea3a..ea66930 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -112,4 +112,8 @@ 您无法获得默认帐户。 删除帐户 你确定要删除这个帐户吗? 以后不能恢复。 + + 圖形 + 信息 + 操作 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4552453..3250acf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -133,5 +133,9 @@ Delete account Are you sure about deleting this account? It can\'t be restored after. + Graph + Information + Operations +