1616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme/*
2616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * Copyright (C) 2016 The Android Open Source Project
3616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme *
4616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * except in compliance with the License. You may obtain a copy of the License at
6616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme *
7616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme *      http://www.apache.org/licenses/LICENSE-2.0
8616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme *
9616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * Unless required by applicable law or agreed to in writing, software distributed under the
10616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * KIND, either express or implied. See the License for the specific language governing
12616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * permissions and limitations under the License.
13616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme */
14616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
15616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemepackage com.android.settings.datausage;
16616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
17616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport android.content.Intent;
18616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport android.content.pm.PackageManager;
19616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport android.os.Bundle;
20616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport android.provider.Settings;
21616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport android.util.Log;
22616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
23785f294d042df8112dbeb10735b259e5141c153bFelipe Lemeimport com.android.settings.R;
24616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport com.android.settings.SettingsActivity;
25616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemeimport com.android.settingslib.AppItem;
26616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
27616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme/**
28616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * Standalone activity used to launch {@link AppDataUsage} from a
29616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme * {@link Settings#ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS} intent.
30616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme */
31616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Lemepublic class AppDataUsageActivity extends SettingsActivity {
32616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
33616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    private static final boolean DEBUG = false;
34616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    private static final String TAG = "AppDataUsageActivity";
35616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
36616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    @Override
37616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    protected void onCreate(Bundle savedInstanceState) {
38616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final Intent intent = getIntent();
39616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final String packageName = intent.getData().getSchemeSpecificPart();
40616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final PackageManager pm = getPackageManager();
41616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final int uid;
42616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        try {
43616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            uid = pm.getPackageUid(packageName, 0);
44616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        } catch (PackageManager.NameNotFoundException e) {
45616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            Log.w(TAG, "invalid package: " + packageName);
46616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            try {
47616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                // Activity lifecycle still requires calling onCreate()
48616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                super.onCreate(savedInstanceState);
49616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            } catch (Exception e2) {
50616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                // Ignore - most likely caused by SettingsActivity because of invalid fragment
51616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                if (DEBUG) Log.d(TAG, "onCreate() exception", e);
52616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            } finally {
53616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                finish();
54616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            }
55616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme            return;
56616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        }
57616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        if (DEBUG) Log.d(TAG, "Package: " + packageName + " UID: " + uid);
58616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
59616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final Bundle args = new Bundle();
60616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        final AppItem appItem = new AppItem(uid);
61616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        appItem.addUid(uid);
62616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        args.putParcelable(AppDataUsage.ARG_APP_ITEM, appItem);
63616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
64616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        intent.putExtra(EXTRA_SHOW_FRAGMENT, AppDataUsage.class.getName());
65785f294d042df8112dbeb10735b259e5141c153bFelipe Leme        intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.app_data_usage);
66616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
67616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        super.onCreate(savedInstanceState);
68616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    }
69616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme
70616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    @Override
71616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    protected boolean isValidFragment(String fragmentName) {
72616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme        return super.isValidFragment(fragmentName)
73616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme                || AppDataUsage.class.getName().equals(fragmentName);
74616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme    }
75616ff3e6a4647c00fb1863bb999f9dabd0932d20Felipe Leme}
76