118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn/**
218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * Copyright (C) 2013 The Android Open Source Project
318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn *
418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); you may not
518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * use this file except in compliance with the License. You may obtain a copy
618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * of the License at
718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn *
818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0
918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn *
1018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
1118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
1218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * License for the specific language governing permissions and limitations
1418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn * under the License.
1518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn */
1618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
17a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornpackage com.android.settings.applications;
18a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
19a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.app.Fragment;
20a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.app.FragmentManager;
2155eaa96fe44ab473975fd2d9b3d97836935752feAlan Viveretteimport android.content.res.TypedArray;
22a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.os.Bundle;
23a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.preference.PreferenceFrameLayout;
24a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.support.v13.app.FragmentPagerAdapter;
25a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.support.v4.view.PagerTabStrip;
26a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.support.v4.view.ViewPager;
27a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.view.LayoutInflater;
28a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.view.View;
29a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport android.view.ViewGroup;
30a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
318a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger;
328a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.settings.InstrumentedFragment;
33a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackbornimport com.android.settings.R;
34a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
358a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenpublic class AppOpsSummary extends InstrumentedFragment {
36a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    // layout inflater object used to inflate views
37a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    private LayoutInflater mInflater;
38a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
39a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    private ViewGroup mContentContainer;
40a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    private View mRootView;
41a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    private ViewPager mViewPager;
42a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
43a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    CharSequence[] mPageNames;
4418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn    static AppOpsState.OpsTemplate[] sPageTemplates = new AppOpsState.OpsTemplate[] {
4518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn        AppOpsState.LOCATION_TEMPLATE,
4618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn        AppOpsState.PERSONAL_TEMPLATE,
47983378738761150d8ba649b4b1d74635881e61ecDianne Hackborn        AppOpsState.MESSAGING_TEMPLATE,
486e91babedac9983b10fdf2650de86386800017beDianne Hackborn        AppOpsState.MEDIA_TEMPLATE,
4918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn        AppOpsState.DEVICE_TEMPLATE
50228df665d4c98e267dce3f529ab953046cd03e5bDianne Hackborn    };
51a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
52a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    int mCurPos;
53a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
548a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
558a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
568a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        return MetricsLogger.APP_OPS_SUMMARY;
578a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
588a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
59a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    class MyPagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener {
60a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
61a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public MyPagerAdapter(FragmentManager fm) {
62a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            super(fm);
63a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
64a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
65a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
66a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public Fragment getItem(int position) {
6718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn            return new AppOpsCategory(sPageTemplates[position]);
68a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
69a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
70a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
71a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public int getCount() {
7218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn            return sPageTemplates.length;
73a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
74a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
75a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
76a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public CharSequence getPageTitle(int position) {
77a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            return mPageNames[position];
78a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
79a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
80a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
81a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
82a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
83a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
84a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
85a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public void onPageSelected(int position) {
86a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            mCurPos = position;
87a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
88a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
89a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        @Override
90a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        public void onPageScrollStateChanged(int state) {
91a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            if (state == ViewPager.SCROLL_STATE_IDLE) {
92a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn                //updateCurrentTab(mCurPos);
93a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            }
94a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
95a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    }
96a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
97a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    @Override
98a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
99a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        // initialize the inflater
100a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mInflater = inflater;
101a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
102a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        View rootView = mInflater.inflate(R.layout.app_ops_summary,
103a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn                container, false);
104a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mContentContainer = container;
105a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mRootView = rootView;
106a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
107a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mPageNames = getResources().getTextArray(R.array.app_ops_categories);
108a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
109a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
110a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        MyPagerAdapter adapter = new MyPagerAdapter(getChildFragmentManager());
111a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mViewPager.setAdapter(adapter);
112a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        mViewPager.setOnPageChangeListener(adapter);
113a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        PagerTabStrip tabs = (PagerTabStrip) rootView.findViewById(R.id.tabs);
11455eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette
11555eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        // This should be set in the XML layout, but PagerTabStrip lives in
11655eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        // support-v4 and doesn't have styleable attributes.
11755eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        final TypedArray ta = tabs.getContext().obtainStyledAttributes(
11855eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette                new int[] { android.R.attr.colorAccent });
11955eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        final int colorAccent = ta.getColor(0, 0);
12055eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        ta.recycle();
12155eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette
12255eaa96fe44ab473975fd2d9b3d97836935752feAlan Viverette        tabs.setTabIndicatorColorResource(colorAccent);
123a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
124a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        // We have to do this now because PreferenceFrameLayout looks at it
125a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        // only when the view is added.
126a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        if (container instanceof PreferenceFrameLayout) {
127a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn            ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true;
128a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        }
129a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn
130a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn        return rootView;
131a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn    }
132a522a8ef8233382bbd39308b7d5f2e26eed44d22Dianne Hackborn}
133