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