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