/* * Copyright (C) 2012-2016 The Android Money Manager Ex Project Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.money.manager.ex.common; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import com.money.manager.ex.R; import com.money.manager.ex.core.Core; import com.money.manager.ex.core.UIHelper; import com.money.manager.ex.log.ErrorRaisedEvent; import com.money.manager.ex.settings.AppSettings; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import icepick.Icepick; import rx.subscriptions.CompositeSubscription; import timber.log.Timber; //import net.sqlcipher.database.SQLiteDatabase; public abstract class MmxBaseFragmentActivity extends AppCompatActivity { public CompositeSubscription compositeSubscription; private Toolbar mToolbar; private boolean mDisplayHomeAsUpEnabled = false; @Override protected void onCreate(Bundle savedInstanceState) { setTheme(); AppSettings settings = new AppSettings(this); String locale = settings.getGeneralSettings().getApplicationLanguage(); new Core(this).setAppLocale(locale); // Add layout inflater for icon fonts in xml. // LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate())); // Initialize database encryption. // SQLiteDatabase.loadLibs(this); this.compositeSubscription = new CompositeSubscription(); Icepick.restoreInstanceState(this, savedInstanceState); super.onCreate(savedInstanceState); } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); mToolbar = (Toolbar) findViewById(R.id.toolbar); if (mToolbar != null) setSupportActionBar(mToolbar); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // home click can be handled in the manifest by setting up the parent activity. case android.R.id.home: // This is used to handle the <- Home arrow button in the toolbar. // NavUtils.navigateUpFromSameTask(this); // return true; if (mDisplayHomeAsUpEnabled) { setResult(Activity.RESULT_CANCELED); finish(); return true; } // case R.id.menu_cancel: // if (isDialogMode()) { // onActionCancelClick(); // return true; // } // case R.id.menu_done: // if (isDialogMode()) { // onActionDoneClick(); // return true; // } // } return super.onOptionsItemSelected(item); } @Override protected void onStart() { super.onStart(); // set elevation actionbar 0 // if (getSupportActionBar() != null) { // getSupportActionBar().setElevation(0); // } EventBus.getDefault().register(this); } @Override protected void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Icepick.saveInstanceState(this, outState); } @Override protected void onDestroy() { if (!compositeSubscription.isUnsubscribed()) { compositeSubscription.unsubscribe(); } super.onDestroy(); } @Subscribe public void onEvent(ErrorRaisedEvent event) { // display the error to the user new UIHelper(this).showToast(event.message); } /** * Add handlers for the OK/Cancel buttons at the bottom of the screen. */ public void addDefaultButtonHandlers() { View container = findViewById(R.id.defaultButtons); showStandardToolbarActions(container); } /** * Uses the default toolbar and action buttons. */ public void showStandardToolbarActions() { View toolbar = getToolbar(); if (toolbar != null) { showStandardToolbarActions(toolbar); } else { // use the button container at the bottom addDefaultButtonHandlers(); } } /** * Sets OK & Cancel as the toolbar buttons with handlers (onActionDoneClick & onActionCancelClick). * @param toolbar Toolbar element. */ public void showStandardToolbarActions(View toolbar) { showStandardToolbarActions(toolbar, R.id.action_cancel, R.id.action_done); } /** * Allows customization of the toolbar buttons * @param toolbar Toolbar element to attach to. * @param actionCancel R.id of the negative (cancel) button * @param actionDone R.id of the positive (action) button */ public void showStandardToolbarActions(View toolbar, int actionCancel, int actionDone) { if (toolbar != null) { View cancelActionView = toolbar.findViewById(actionCancel); if (cancelActionView != null) cancelActionView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onActionCancelClick(); } }); View doneActionView = toolbar.findViewById(actionDone); if (doneActionView != null) doneActionView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onActionDoneClick(); } }); } } /** * Override to e clicking the Cancel button in the toolbar */ public boolean onActionCancelClick() { return true; } /** * Override to e clicking the Action button in the toolbar */ public boolean onActionDoneClick() { return true; } public void setDisplayHomeAsUpEnabled(boolean mDisplayHomeAsUpEnabled) { this.mDisplayHomeAsUpEnabled = mDisplayHomeAsUpEnabled; getSupportActionBar().setDisplayHomeAsUpEnabled(mDisplayHomeAsUpEnabled); } // protected protected Toolbar getToolbar() { return mToolbar; } protected void setTheme() { try { UIHelper uiHelper = new UIHelper(this); this.setTheme(uiHelper.getThemeId()); } catch (Exception e) { Timber.e(e, "setting theme"); } } }