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