X-Git-Url: https://git.mdrn.pl/mobilnebezpieczenstwo.git/blobdiff_plain/4b08fd3d054a0b4872d60adc7627bfdef069c39b..be45943134f44b96728f516e91a66149e51443c0:/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 index 0000000..1d311c9 --- /dev/null +++ b/app/src/main/java/com/samsung/srpol/ui/MainActivity.java @@ -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 . +*/ + +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> { + 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> onCreateLoader(int id, Bundle args) { + AppListLoader loader = new AppListLoader(this.getApplicationContext()); + initNavigationDrawer(); + + return loader; + } + + @Override + public void onLoadFinished(Loader> loader, + List 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> 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); + } + } +}