1cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang/* 2cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * Copyright (C) 2018 The Android Open Source Project 3cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * 4cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * you may not use this file except in compliance with the License. 6cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * You may obtain a copy of the License at 7cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * 8cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * http://www.apache.org/licenses/LICENSE-2.0 9cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * 10cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * Unless required by applicable law or agreed to in writing, software 11cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * See the License for the specific language governing permissions and 14cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang * limitations under the License. 15cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang */ 16cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 17cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangpackage com.android.settings.applications.appinfo; 18cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 19cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_OPEN_APP_SETTING; 20cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 21cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport android.content.Context; 22cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport android.content.Intent; 23cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport android.content.pm.ResolveInfo; 24cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport android.support.v7.preference.Preference; 25cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport android.text.TextUtils; 26cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 27cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangimport com.android.settings.overlay.FeatureFactory; 28cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 29cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhangpublic class AppSettingPreferenceController extends AppInfoPreferenceControllerBase { 30cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 31cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang private String mPackageName; 32cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 33cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang public AppSettingPreferenceController(Context context, String preferenceKey) { 34cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang super(context, preferenceKey); 35cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 36cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 37cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang public AppSettingPreferenceController setPackageName(String packageName) { 38cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang mPackageName = packageName; 39cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return this; 40cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 41cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 42cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang @Override 43cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang public int getAvailabilityStatus() { 44cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang if (TextUtils.isEmpty(mPackageName) || mParent == null) { 45cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return CONDITIONALLY_UNAVAILABLE; 46cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 47cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang final Intent intent = resolveIntent( 48cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang new Intent(Intent.ACTION_APPLICATION_PREFERENCES).setPackage(mPackageName)); 49cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return intent != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; 50cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 51cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 52cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang @Override 53cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang public boolean handlePreferenceTreeClick(Preference preference) { 54cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { 55cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return false; 56cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 57cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang final Intent intent = resolveIntent( 58cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang new Intent(Intent.ACTION_APPLICATION_PREFERENCES).setPackage(mPackageName)); 59cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang if (intent == null) { 60cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return false; 61cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 62cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang FeatureFactory.getFactory(mContext).getMetricsFeatureProvider() 63cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang .actionWithSource(mContext, mParent.getMetricsCategory(), 64cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang ACTION_OPEN_APP_SETTING); 65cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang mContext.startActivity(intent); 66cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return true; 67cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 68cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang 69cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang private Intent resolveIntent(Intent i) { 70cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang ResolveInfo result = mContext.getPackageManager().resolveActivity(i, 0); 71cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang if (result != null) { 72cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return new Intent(i.getAction()) 73cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang .setClassName(result.activityInfo.packageName, result.activityInfo.name); 74cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 75cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang return null; 76cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang } 77cac18e12ac5ae59248182edf9bef43ab6472e723Fan Zhang} 78