Home | History | Annotate | Download | only in location
      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.text.TextUtils;
     21 import android.util.Log;
     22 import android.os.UserHandle;
     23 import com.android.internal.annotations.Immutable;
     24 import com.android.internal.util.Preconditions;
     25 
     26 /**
     27  * Specifies a setting that is being injected into Settings > Location > Location services.
     28  *
     29  * @see android.location.SettingInjectorService
     30  */
     31 @Immutable
     32 class InjectedSetting {
     33 
     34     /**
     35      * Package for the subclass of {@link android.location.SettingInjectorService} and for the
     36      * settings activity.
     37      */
     38     public final String packageName;
     39 
     40     /**
     41      * Class name for the subclass of {@link android.location.SettingInjectorService} that
     42      * specifies dynamic values for the location setting.
     43      */
     44     public final String className;
     45 
     46     /**
     47      * The {@link android.preference.Preference#getTitle()} value.
     48      */
     49     public final String title;
     50 
     51     /**
     52      * The {@link android.preference.Preference#getIcon()} value.
     53      */
     54     public final int iconId;
     55 
     56     /**
     57      * The user/profile associated with this setting (e.g. managed profile)
     58      */
     59     public final UserHandle mUserHandle;
     60 
     61     /**
     62      * The activity to launch to allow the user to modify the settings value. Assumed to be in the
     63      * {@link #packageName} package.
     64      */
     65     public final String settingsActivity;
     66 
     67     private InjectedSetting(String packageName, String className,
     68             String title, int iconId, UserHandle userHandle, String settingsActivity) {
     69         this.packageName = Preconditions.checkNotNull(packageName, "packageName");
     70         this.className = Preconditions.checkNotNull(className, "className");
     71         this.title = Preconditions.checkNotNull(title, "title");
     72         this.iconId = iconId;
     73         this.mUserHandle = userHandle;
     74         this.settingsActivity = Preconditions.checkNotNull(settingsActivity);
     75     }
     76 
     77     /**
     78      * Returns a new instance, or null.
     79      */
     80     public static InjectedSetting newInstance(String packageName, String className,
     81             String title, int iconId, UserHandle userHandle, String settingsActivity) {
     82         if (packageName == null || className == null ||
     83                 TextUtils.isEmpty(title) || TextUtils.isEmpty(settingsActivity)) {
     84             if (Log.isLoggable(SettingsInjector.TAG, Log.WARN)) {
     85                 Log.w(SettingsInjector.TAG, "Illegal setting specification: package="
     86                         + packageName + ", class=" + className
     87                         + ", title=" + title + ", settingsActivity=" + settingsActivity);
     88             }
     89             return null;
     90         }
     91         return new InjectedSetting(packageName, className, title, iconId, userHandle,
     92                 settingsActivity);
     93     }
     94 
     95     @Override
     96     public String toString() {
     97         return "InjectedSetting{" +
     98                 "mPackageName='" + packageName + '\'' +
     99                 ", mClassName='" + className + '\'' +
    100                 ", label=" + title +
    101                 ", iconId=" + iconId +
    102                 ", userId=" + mUserHandle.getIdentifier() +
    103                 ", settingsActivity='" + settingsActivity + '\'' +
    104                 '}';
    105     }
    106 
    107     /**
    108      * Returns the intent to start the {@link #className} service.
    109      */
    110     public Intent getServiceIntent() {
    111         Intent intent = new Intent();
    112         intent.setClassName(packageName, className);
    113         return intent;
    114     }
    115 
    116     @Override
    117     public boolean equals(Object o) {
    118         if (this == o) return true;
    119         if (!(o instanceof InjectedSetting)) return false;
    120 
    121         InjectedSetting that = (InjectedSetting) o;
    122 
    123         return packageName.equals(that.packageName) && className.equals(that.className)
    124                 && title.equals(that.title) && iconId == that.iconId
    125                 && mUserHandle.equals(that.mUserHandle)
    126                 && settingsActivity.equals(that.settingsActivity);
    127     }
    128 
    129     @Override
    130     public int hashCode() {
    131         int result = packageName.hashCode();
    132         result = 31 * result + className.hashCode();
    133         result = 31 * result + title.hashCode();
    134         result = 31 * result + iconId;
    135         result = 31 * result + mUserHandle.hashCode();
    136         result = 31 * result + settingsActivity.hashCode();
    137         return result;
    138     }
    139 }
    140