1e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill/* 2e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Copyright (C) 2013 The Android Open Source Project 3e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * 4e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Licensed under the Apache License, Version 2.0 (the "License"); 5e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * you may not use this file except in compliance with the License. 6e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * You may obtain a copy of the License at 7e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * 8e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * http://www.apache.org/licenses/LICENSE-2.0 9e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * 10e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Unless required by applicable law or agreed to in writing, software 11e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * distributed under the License is distributed on an "AS IS" BASIS, 12e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * See the License for the specific language governing permissions and 14e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * limitations under the License. 15e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 16e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 17e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neillpackage com.android.settings.location; 18e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 19e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neillimport android.content.Intent; 2039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.os.UserHandle; 21e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neillimport android.text.TextUtils; 22e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neillimport android.util.Log; 2339b467482d1bf256a111c757e9b7621c6f523271Jason Monk 24e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neillimport com.android.internal.annotations.Immutable; 25e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neillimport com.android.internal.util.Preconditions; 26e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 27e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill/** 28db0b7637faa5200906c3facf90872aa819e8db5aLifu Tang * Specifies a setting that is being injected into Settings > Location > Location services. 29e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * 30e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * @see android.location.SettingInjectorService 31e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 32e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill@Immutable 33e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neillclass InjectedSetting { 34e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 35e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 36e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Package for the subclass of {@link android.location.SettingInjectorService} and for the 37e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * settings activity. 38e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 39e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public final String packageName; 40e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 41e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 42e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Class name for the subclass of {@link android.location.SettingInjectorService} that 43e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * specifies dynamic values for the location setting. 44e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 45e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public final String className; 46e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 47e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 4839b467482d1bf256a111c757e9b7621c6f523271Jason Monk * The {@link android.support.v7.preference.Preference#getTitle()} value. 49e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 50e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public final String title; 51e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 52e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 5339b467482d1bf256a111c757e9b7621c6f523271Jason Monk * The {@link android.support.v7.preference.Preference#getIcon()} value. 54e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 55e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public final int iconId; 56e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 57e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 5886c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban * The user/profile associated with this setting (e.g. managed profile) 5986c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban */ 6086c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban public final UserHandle mUserHandle; 6186c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban 6286c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban /** 63e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * The activity to launch to allow the user to modify the settings value. Assumed to be in the 64e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * {@link #packageName} package. 65e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 66e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public final String settingsActivity; 67e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 68e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill private InjectedSetting(String packageName, String className, 6986c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban String title, int iconId, UserHandle userHandle, String settingsActivity) { 70e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill this.packageName = Preconditions.checkNotNull(packageName, "packageName"); 71e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill this.className = Preconditions.checkNotNull(className, "className"); 72e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill this.title = Preconditions.checkNotNull(title, "title"); 73e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill this.iconId = iconId; 7486c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban this.mUserHandle = userHandle; 75e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill this.settingsActivity = Preconditions.checkNotNull(settingsActivity); 76e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill } 77e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill 78e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill /** 79e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill * Returns a new instance, or null. 80e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill */ 81e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill public static InjectedSetting newInstance(String packageName, String className, 8286c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban String title, int iconId, UserHandle userHandle, String settingsActivity) { 83e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill if (packageName == null || className == null || 84e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill TextUtils.isEmpty(title) || TextUtils.isEmpty(settingsActivity)) { 85e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill if (Log.isLoggable(SettingsInjector.TAG, Log.WARN)) { 86e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill Log.w(SettingsInjector.TAG, "Illegal setting specification: package=" 87e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill + packageName + ", class=" + className 88e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill + ", title=" + title + ", settingsActivity=" + settingsActivity); 89e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill } 90e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill return null; 91e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill } 9286c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban return new InjectedSetting(packageName, className, title, iconId, userHandle, 9386c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban settingsActivity); 94e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill } 95e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 96e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill @Override 97e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public String toString() { 98e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill return "InjectedSetting{" + 99e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill "mPackageName='" + packageName + '\'' + 100e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill ", mClassName='" + className + '\'' + 101e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill ", label=" + title + 102e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill ", iconId=" + iconId + 10386c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban ", userId=" + mUserHandle.getIdentifier() + 104e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill ", settingsActivity='" + settingsActivity + '\'' + 105e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill '}'; 106e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill } 107e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill 108e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill /** 109e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill * Returns the intent to start the {@link #className} service. 110e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill */ 111e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill public Intent getServiceIntent() { 112e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill Intent intent = new Intent(); 113e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill intent.setClassName(packageName, className); 114e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill return intent; 115e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill } 116e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill 117e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill @Override 118e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill public boolean equals(Object o) { 119e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill if (this == o) return true; 120e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill if (!(o instanceof InjectedSetting)) return false; 121e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill 122e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill InjectedSetting that = (InjectedSetting) o; 123e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill 124e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill return packageName.equals(that.packageName) && className.equals(that.className) 125e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill && title.equals(that.title) && iconId == that.iconId 12686c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban && mUserHandle.equals(that.mUserHandle) 127e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill && settingsActivity.equals(that.settingsActivity); 128e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill } 129e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill 130e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill @Override 131e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill public int hashCode() { 132e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill int result = packageName.hashCode(); 133e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill result = 31 * result + className.hashCode(); 134e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill result = 31 * result + title.hashCode(); 135e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill result = 31 * result + iconId; 13686c877e9b66165bb46432de6172d1fdc6b2808feZoltan Szatmary-Ban result = 31 * result + mUserHandle.hashCode(); 137e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill result = 31 * result + settingsActivity.hashCode(); 138e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill return result; 139e17ce5fb73efe8046f9d806a6fbb9a5abb5b0e87Tom O'Neill } 140e2921c9566e34fd95b864cca247ff71cf9b30752Tom O'Neill} 141