com.physphil.android.unitconverterultimate.MainActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.physphil.android.unitconverterultimate.MainActivity.java

Source

/*
 * Copyright 2015 Phil Shadlyn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.physphil.android.unitconverterultimate;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

import com.physphil.android.unitconverterultimate.fragments.ConversionFragment;
import com.physphil.android.unitconverterultimate.fragments.HelpDialogFragment;
import com.physphil.android.unitconverterultimate.models.Conversion;
import com.physphil.android.unitconverterultimate.util.Conversions;

/**
 * Main activity
 * Created by Phizz on 15-07-28.
 */
public class MainActivity extends BaseActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
    private DrawerLayout mDrawerLayout;
    private Conversions mConversions;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
        Preferences.getInstance(this).getPreferences().registerOnSharedPreferenceChangeListener(this);
        mConversions = Conversions.getInstance();

        setContentView(R.layout.activity_main);
        setupToolbar();
        setToolbarHomeNavigation(true);
        if (getSupportActionBar() != null)
            getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

        int conversion = Preferences.getInstance(this).getLastConversion();
        setToolbarTitle(mConversions.getById(conversion).getLabelResource());
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                hideKeyboard();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
            }

            @Override
            public void onDrawerStateChanged(int newState) {
            }
        });
        setupDrawer(conversion);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, ConversionFragment.newInstance(conversion)).commit();
        }
    }

    @Override
    protected void onStart() {
        super.onStart();

        // Show help dialog if never seen before
        if (Preferences.getInstance(this).showHelp()) {
            HelpDialogFragment.newInstance().show(getSupportFragmentManager(), HelpDialogFragment.TAG);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Preferences.getInstance(this).getPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    /**
     * Setup navigation drawer
     * @param state index of item to be selected initially
     */
    private void setupDrawer(int state) {
        NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_drawer);
        navigationView.getMenu().getItem(state).setChecked(true);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();
                switch (menuItem.getItemId()) {
                case R.id.drawer_settings:
                    PreferencesActivity.start(MainActivity.this);
                    return true;

                default:
                    menuItem.setChecked(true);
                    int conversion = getConversionFromDrawer(menuItem.getItemId());
                    setToolbarTitle(mConversions.getById(conversion).getLabelResource());
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.fragment_container, ConversionFragment.newInstance(conversion)).commit();
                    return true;
                }
            }
        });
    }

    @Conversion.id
    private int getConversionFromDrawer(int itemId) {
        switch (itemId) {
        case R.id.drawer_area:
            return Conversion.AREA;

        case R.id.drawer_cooking:
            return Conversion.COOKING;

        case R.id.drawer_storage:
            return Conversion.STORAGE;

        case R.id.drawer_energy:
            return Conversion.ENERGY;

        case R.id.drawer_fuel:
            return Conversion.FUEL;

        case R.id.drawer_length:
            return Conversion.LENGTH;

        case R.id.drawer_mass:
            return Conversion.MASS;

        case R.id.drawer_power:
            return Conversion.POWER;

        case R.id.drawer_pressure:
            return Conversion.PRESSURE;

        case R.id.drawer_speed:
            return Conversion.SPEED;

        case R.id.drawer_temperature:
            return Conversion.TEMPERATURE;

        case R.id.drawer_time:
            return Conversion.TIME;

        case R.id.drawer_torque:
            return Conversion.TORQUE;

        case R.id.drawer_volume:
            return Conversion.VOLUME;
        }

        return Conversion.AREA;
    }

    private void hideKeyboard() {
        View v = getCurrentFocus();
        if (v != null) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals(Preferences.PREFS_THEME)) {
            recreate();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }
    }
}