Migrate to gradle, appcompat as external dependency.
[mobilnebezpieczenstwo.git] / app / src / main / java / com / samsung / srpol / ui / MainActivity.java
diff --git a/app/src/main/java/com/samsung/srpol/ui/MainActivity.java b/app/src/main/java/com/samsung/srpol/ui/MainActivity.java
new file mode 100644 (file)
index 0000000..1d311c9
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+   Copyright (C) 2014  Samsung Electronics Polska Sp. z o.o.
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU AFFERO General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+    You may obtain a copy of the License at
+
+                http://www.gnu.org/licenses/agpl-3.0.txt
+
+    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.samsung.srpol.ui;
+
+import java.util.List;
+
+import com.samsung.srpol.R;
+import com.samsung.srpol.loader.AppDetails;
+import com.samsung.srpol.loader.AppListLoader;
+import com.samsung.srpol.ui.drawer.MenuFragment;
+import com.samsung.srpol.ui.drawer.NavigationDrawerItemListener;
+import com.samsung.srpol.ui.tabpager.PageAdapter;
+
+import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.ActionBar;
+import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.view.PagerTabStrip;
+import android.support.v4.view.ViewPager;
+import android.support.v4.widget.DrawerLayout;
+
+public class MainActivity extends ActionBarActivity implements
+        LoaderManager.LoaderCallbacks<List<AppDetails>> {
+    public static final String TAG = "MainActivity";
+
+    private static final String STATE_WELCOME_DIALOG_IS_OPEN = "welcome_dialog_is_open";
+    private static final String STATE_WELCOME_DIALOG_OPENED_FROM_MENU = "welcome_dialog_opened_from_menu";
+    private static final String STATE_DRAWER_MENU_IS_OPEN = "state_drawer_menu_is_open";
+
+    private MenuFragment mMenuFragment;
+
+    private WelcomeDialog mWelcomeDialog;
+    private ViewPager mViewPager;
+    private PageAdapter mFramePagerAdapter;
+    private boolean mDrawerOpenState = false;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        if (savedInstanceState != null) {
+            boolean isWelcomeDialogOpen = savedInstanceState.getBoolean(
+                    STATE_WELCOME_DIALOG_IS_OPEN, false);
+            if (isWelcomeDialogOpen) {
+                boolean isOpenedFromMenu = savedInstanceState.getBoolean(
+                        STATE_WELCOME_DIALOG_OPENED_FROM_MENU, false);
+                showWelcomeDialog(isOpenedFromMenu);
+            }
+            mDrawerOpenState = savedInstanceState.getBoolean(STATE_DRAWER_MENU_IS_OPEN, false);
+        } else {
+            showWelcomeDialog(false);
+        }
+
+        getSupportLoaderManager().initLoader(0, null, this);
+
+        // if Loader was created then we have all data to create
+        // NavigationDrawer otherwise wait for loader to be created and then
+        // create NavigationDrawer
+        if (getSupportLoaderManager().getLoader(0) != null) {
+            initNavigationDrawer();
+        }
+
+        mFramePagerAdapter = new PageAdapter(getSupportFragmentManager(), getApplicationContext());
+        mViewPager = (ViewPager) findViewById(R.id.myviewpager);
+        mViewPager.setAdapter(mFramePagerAdapter);
+
+        PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.titlestrip);
+        pagerTabStrip.setDrawFullUnderline(true);
+        pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.tab_underline_color));
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mWelcomeDialog != null) {
+            outState.putBoolean(STATE_WELCOME_DIALOG_IS_OPEN,
+                    mWelcomeDialog.isShowing());
+            outState.putBoolean(STATE_WELCOME_DIALOG_OPENED_FROM_MENU,
+                    mWelcomeDialog.ismOpenedFromMenu());
+        }
+        if (isDrawerOpen() || (mDrawerOpenState && mDrawerLayout == null)) {
+            outState.putBoolean(STATE_DRAWER_MENU_IS_OPEN, true);
+        }
+    }
+
+    protected void onDestroy() {
+        if (mWelcomeDialog != null) {
+            if (mWelcomeDialog.isShowing()) {
+                mWelcomeDialog.dismiss();
+            }
+        }
+        super.onDestroy();
+    }
+
+    public void restoreActionBar() {
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+        actionBar.setDisplayShowTitleEnabled(true);
+    }
+
+    @Override
+    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
+        SharedPreferences sp = PreferenceManager
+                .getDefaultSharedPreferences(this);
+        boolean showSystemApp = sp.getBoolean(
+                AppListLoader.PREF_INCLUDE_SYSTEM_APPS,
+                true);
+        MenuItem menuItemSystem = menu.findItem(R.id.action_toggle_system_visibility);
+        if (menuItemSystem != null) {
+            if (showSystemApp) {
+                menuItemSystem.setTitle(R.string.hide_system_visibility);
+            } else {
+                menuItemSystem.setTitle(R.string.show_system_visibility);
+            }
+        }
+        return super.onPrepareOptionsPanel(view, menu);
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        restoreActionBar();
+        return true;
+    }
+
+    @Override
+    public void onBackPressed() {
+        if (isDrawerOpen()) {
+            closeDrawer();
+        } else {
+            super.onBackPressed();
+        }
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mActionBarDrawerToggle != null
+                && mActionBarDrawerToggle.onOptionsItemSelected(item))
+            return true;
+        int id = item.getItemId();
+        switch (id) {
+            case R.id.action_about:
+                showWelcomeDialog(true);
+                return true;
+            case R.id.action_licence:
+                showLicense();
+                return true;
+            case R.id.action_toggle_system_visibility:
+                toggleSharedPrefences(AppListLoader.PREF_INCLUDE_SYSTEM_APPS);
+                refreshAfterChanges();
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    public void toggleSharedPrefences(String preferenceName) {
+        SharedPreferences sp = PreferenceManager
+                .getDefaultSharedPreferences(this);
+        boolean actualValue = sp.getBoolean(preferenceName, true);
+        sp.edit().putBoolean(preferenceName, !actualValue).commit();
+    }
+
+    public void refreshAfterChanges() {
+        supportInvalidateOptionsMenu();
+        if (mFramePagerAdapter != null) {
+            mFramePagerAdapter.refreshAdapterNotify();
+            mFramePagerAdapter.notifyDataSetChanged();
+        }
+        if (mMenuFragment != null) {
+            mMenuFragment.notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public Loader<List<AppDetails>> onCreateLoader(int id, Bundle args) {
+        AppListLoader loader = new AppListLoader(this.getApplicationContext());
+        initNavigationDrawer();
+
+        return loader;
+    }
+
+    @Override
+    public void onLoadFinished(Loader<List<AppDetails>> loader,
+            List<AppDetails> data) {
+        Log.d(TAG, "onLoadFinished");
+
+        AppListLoader appLoader = (AppListLoader) loader;
+        if (appLoader.wasDataReloaded()) {
+            appLoader.resetWasDataReloaded();
+            mViewPager.setOffscreenPageLimit(AppListLoader.getCategories().size());
+            mFramePagerAdapter.refreshPages();
+        } else {
+            mFramePagerAdapter.refreshAdapterNotify();
+        }
+        if (mWelcomeDialog != null && mWelcomeDialog.isShowing()) {
+            mWelcomeDialog.loadingDone();
+        }
+        if (mMenuFragment != null) {
+            mMenuFragment.notifyDataSetChanged();
+        }
+    }
+
+    public void onLoaderReset(Loader<List<AppDetails>> arg0) {
+        mFramePagerAdapter.refreshAdapterNotify();
+    }
+
+    private void showWelcomeDialog(boolean fromMenu) {
+        Log.d(TAG, "showWelcomeActivity flag: " + fromMenu);
+        if (mWelcomeDialog == null) {
+            mWelcomeDialog = new WelcomeDialog(this, fromMenu);
+        }
+        if (!mWelcomeDialog.isShowing()) {
+            mWelcomeDialog.show(fromMenu);
+        }
+        if (!fromMenu) {
+            mWelcomeDialog.setOnDismissListener(new OnDismissListener() {
+
+                @Override
+                public void onDismiss(DialogInterface dialog) {
+                    openDrawerAnimate();
+                }
+            });
+        }
+    }
+
+    private void showLicense() {
+        Intent intent = new Intent(this, LicenseActivity.class);
+        startActivity(intent);
+    }
+
+    private DrawerLayout mDrawerLayout;
+    private View mFragmentContainerView;
+    private ActionBarDrawerToggle mActionBarDrawerToggle;
+
+    private void initNavigationDrawer() {
+        mMenuFragment = (MenuFragment) getSupportFragmentManager()
+                .findFragmentById(R.id.menu_container);
+        mMenuFragment.setDrawerItemListener(mDrawerItemListener);
+        mFragmentContainerView = findViewById(R.id.menu_container);
+        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+        setUp();
+        mMenuFragment.refresh();
+    }
+    
+    private NavigationDrawerItemListener mDrawerItemListener = new NavigationDrawerItemListener() {
+
+        public void onNavigationDrawerItemSelected(int position) {
+            if (mViewPager != null) {
+                mViewPager.setCurrentItem(position, true);
+                closeDrawer();
+            }
+        }
+    };
+
+    public void closeDrawer() {
+        if(mDrawerLayout != null){
+            mDrawerLayout.closeDrawer(Gravity.LEFT);
+            mDrawerOpenState=false;
+        }
+    }
+    
+    public boolean isDrawerOpen() {
+        return mDrawerLayout != null
+                && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
+    }
+    
+    public void setUp() {
+        if (mDrawerLayout == null)
+            return;
+        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
+                GravityCompat.START);
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setDisplayHomeAsUpEnabled(true);
+        actionBar.setHomeButtonEnabled(true);
+
+        mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
+                R.drawable.ic_drawer, R.string.navigation_drawer_open,
+                R.string.navigation_drawer_close) {
+            @Override
+            public void onDrawerClosed(View drawerView) {
+                super.onDrawerClosed(drawerView);
+                supportInvalidateOptionsMenu();
+            }
+
+            @Override
+            public void onDrawerOpened(View drawerView) {
+                super.onDrawerOpened(drawerView);
+                supportInvalidateOptionsMenu(); 
+            }
+        };
+        mDrawerLayout.post(new Runnable() {
+            @Override
+            public void run() {
+                mActionBarDrawerToggle.syncState();
+            }
+        });
+        if (mDrawerOpenState && !isDrawerOpen()) {
+            mDrawerLayout.openDrawer(Gravity.LEFT);
+        }
+        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
+    }
+
+    public void openDrawerAnimate() {
+        new Handler().post(new Runnable() {
+
+            @Override
+            public void run() {
+                if (mDrawerLayout != null) {
+                    mDrawerLayout.openDrawer(Gravity.LEFT);
+                    mDrawerOpenState = true;
+                }
+            }
+        });
+
+        if (mWelcomeDialog != null) {
+            mWelcomeDialog.setOnDismissListener(null);
+        }
+    }
+}