diff options
Diffstat (limited to 'src/com/android/settings/applications/AppOpsSummary.java')
-rw-r--r-- | src/com/android/settings/applications/AppOpsSummary.java | 114 |
1 files changed, 111 insertions, 3 deletions
diff --git a/src/com/android/settings/applications/AppOpsSummary.java b/src/com/android/settings/applications/AppOpsSummary.java index 0d47dc1..71af7f4 100644 --- a/src/com/android/settings/applications/AppOpsSummary.java +++ b/src/com/android/settings/applications/AppOpsSummary.java @@ -16,10 +16,16 @@ package com.android.settings.applications; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.AppOpsManager; import android.app.Fragment; import android.app.FragmentManager; +import android.content.Context; +import android.content.DialogInterface; import android.content.res.Resources; import android.content.res.TypedArray; +import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceFrameLayout; import android.support.v13.app.FragmentPagerAdapter; @@ -27,6 +33,9 @@ import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.util.TypedValue; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -42,6 +51,11 @@ public class AppOpsSummary extends InstrumentedFragment { private View mRootView; private ViewPager mViewPager; + private MyPagerAdapter mAdapter; + + private Activity mActivity; + private SharedPreferences mPreferences; + CharSequence[] mPageNames; static AppOpsState.OpsTemplate[] sPageTemplates = new AppOpsState.OpsTemplate[] { AppOpsState.LOCATION_TEMPLATE, @@ -88,6 +102,10 @@ public class AppOpsSummary extends InstrumentedFragment { mCurPos = position; } + public int getCurrentPage() { + return mCurPos; + } + @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { @@ -96,6 +114,14 @@ public class AppOpsSummary extends InstrumentedFragment { } } + private void resetAdapter() { + // trigger adapter load, preserving the selected page + int curPos = mAdapter.getCurrentPage(); + mViewPager.setAdapter(mAdapter); + mViewPager.setOnPageChangeListener(mAdapter); + mViewPager.setCurrentItem(curPos); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // initialize the inflater @@ -109,9 +135,9 @@ public class AppOpsSummary extends InstrumentedFragment { mPageNames = getResources().getTextArray(R.array.app_ops_categories_cm); mViewPager = (ViewPager) rootView.findViewById(R.id.pager); - MyPagerAdapter adapter = new MyPagerAdapter(getChildFragmentManager()); - mViewPager.setAdapter(adapter); - mViewPager.setOnPageChangeListener(adapter); + mAdapter = new MyPagerAdapter(getChildFragmentManager()); + mViewPager.setAdapter(mAdapter); + mViewPager.setOnPageChangeListener(mAdapter); PagerTabStrip tabs = (PagerTabStrip) rootView.findViewById(R.id.tabs); Resources.Theme theme = tabs.getContext().getTheme(); @@ -126,6 +152,88 @@ public class AppOpsSummary extends InstrumentedFragment { ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true; } + mActivity = getActivity(); + return rootView; } + + private boolean shouldShowUserApps() { + return mPreferences.getBoolean("show_user_apps", true); + } + + private boolean shouldShowSystemApps() { + return mPreferences.getBoolean("show_system_apps", true); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // get shared preferences + mPreferences = mActivity.getSharedPreferences("appops_manager", Activity.MODE_PRIVATE); + + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.appops_manager, menu); + menu.findItem(R.id.show_user_apps).setChecked(shouldShowUserApps()); + menu.findItem(R.id.show_system_apps).setChecked(shouldShowSystemApps()); + } + + private void resetCounters() { + final AppOpsManager appOps = + (AppOpsManager) mActivity.getSystemService(Context.APP_OPS_SERVICE); + if (appOps == null) { + return; + } + appOps.resetCounters(); + // reload content + resetAdapter(); + } + + private void resetCountersConfirm() { + new AlertDialog.Builder(getActivity()) + .setIcon(android.R.drawable.ic_dialog_alert) + .setTitle(R.string.app_ops_reset_confirm_title) + .setMessage(R.string.app_ops_reset_confirm_mesg) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int which) { + resetCounters(); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.show_user_apps: + final String prefNameUserApps = "show_user_apps"; + // set the menu checkbox and save it in shared preference + item.setChecked(!item.isChecked()); + mPreferences.edit().putBoolean(prefNameUserApps, item.isChecked()).commit(); + // reload content + resetAdapter(); + return true; + case R.id.show_system_apps: + final String prefNameSysApps = "show_system_apps"; + // set the menu checkbox and save it in shared preference + item.setChecked(!item.isChecked()); + mPreferences.edit().putBoolean(prefNameSysApps, item.isChecked()).commit(); + // reload view content + resetAdapter(); + return true; + case R.id.reset_counters: + resetCountersConfirm(); + return true; + default: + return super.onContextItemSelected(item); + } + } } |