246 lines
10 KiB
Java
246 lines
10 KiB
Java
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.tv.util;
|
|
|
|
import android.content.Context;
|
|
import android.content.SharedPreferences;
|
|
import android.media.tv.TvTrackInfo;
|
|
import android.preference.PreferenceManager;
|
|
import android.support.annotation.IntDef;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.Collections;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* A class about the constants for TV settings. Objects that are returned from the various {@code
|
|
* get} methods must be treated as immutable.
|
|
*/
|
|
public final class TvSettings {
|
|
public static final String PREF_DISPLAY_MODE = "display_mode"; // int value
|
|
public static final String PREF_PIN = "pin"; // 4-digit string value. Otherwise, it's not set.
|
|
|
|
// Multi-track audio settings
|
|
private static final String PREF_MULTI_AUDIO_ID = "pref.multi_audio_id";
|
|
private static final String PREF_MULTI_AUDIO_LANGUAGE = "pref.multi_audio_language";
|
|
private static final String PREF_MULTI_AUDIO_CHANNEL_COUNT = "pref.multi_audio_channel_count";
|
|
|
|
// DVR Multi-audio and subtitle settings
|
|
private static final String PREF_DVR_MULTI_AUDIO_ID = "pref.dvr_multi_audio_id";
|
|
private static final String PREF_DVR_MULTI_AUDIO_LANGUAGE = "pref.dvr_multi_audio_language";
|
|
private static final String PREF_DVR_MULTI_AUDIO_CHANNEL_COUNT =
|
|
"pref.dvr_multi_audio_channel_count";
|
|
private static final String PREF_DVR_SUBTITLE_ID = "pref.dvr_subtitle_id";
|
|
private static final String PREF_DVR_SUBTITLE_LANGUAGE = "pref.dvr_subtitle_language";
|
|
|
|
// Parental Control settings
|
|
private static final String PREF_CONTENT_RATING_SYSTEMS = "pref.content_rating_systems";
|
|
private static final String PREF_CONTENT_RATING_LEVEL = "pref.content_rating_level";
|
|
private static final String PREF_DISABLE_PIN_UNTIL = "pref.disable_pin_until";
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@IntDef({
|
|
CONTENT_RATING_LEVEL_NONE,
|
|
CONTENT_RATING_LEVEL_HIGH,
|
|
CONTENT_RATING_LEVEL_MEDIUM,
|
|
CONTENT_RATING_LEVEL_LOW,
|
|
CONTENT_RATING_LEVEL_CUSTOM
|
|
})
|
|
public @interface ContentRatingLevel {}
|
|
|
|
public static final int CONTENT_RATING_LEVEL_NONE = 0;
|
|
public static final int CONTENT_RATING_LEVEL_HIGH = 1;
|
|
public static final int CONTENT_RATING_LEVEL_MEDIUM = 2;
|
|
public static final int CONTENT_RATING_LEVEL_LOW = 3;
|
|
public static final int CONTENT_RATING_LEVEL_CUSTOM = 4;
|
|
|
|
private TvSettings() {}
|
|
|
|
// Multi-track audio settings
|
|
public static String getMultiAudioId(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getString(PREF_MULTI_AUDIO_ID, null);
|
|
}
|
|
|
|
public static void setMultiAudioId(Context context, String language) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putString(PREF_MULTI_AUDIO_ID, language)
|
|
.apply();
|
|
}
|
|
|
|
public static String getMultiAudioLanguage(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getString(PREF_MULTI_AUDIO_LANGUAGE, null);
|
|
}
|
|
|
|
public static void setMultiAudioLanguage(Context context, String language) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putString(PREF_MULTI_AUDIO_LANGUAGE, language)
|
|
.apply();
|
|
}
|
|
|
|
public static int getMultiAudioChannelCount(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getInt(PREF_MULTI_AUDIO_CHANNEL_COUNT, 0);
|
|
}
|
|
|
|
public static void setMultiAudioChannelCount(Context context, int channelCount) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putInt(PREF_MULTI_AUDIO_CHANNEL_COUNT, channelCount)
|
|
.apply();
|
|
}
|
|
|
|
public static void setDvrPlaybackTrackSettings(
|
|
Context context, int trackType, TvTrackInfo info) {
|
|
if (trackType == TvTrackInfo.TYPE_AUDIO) {
|
|
if (info == null) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.remove(PREF_DVR_MULTI_AUDIO_ID)
|
|
.apply();
|
|
} else {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putString(PREF_DVR_MULTI_AUDIO_LANGUAGE, info.getLanguage())
|
|
.putInt(PREF_DVR_MULTI_AUDIO_CHANNEL_COUNT, info.getAudioChannelCount())
|
|
.putString(PREF_DVR_MULTI_AUDIO_ID, info.getId())
|
|
.apply();
|
|
}
|
|
} else if (trackType == TvTrackInfo.TYPE_SUBTITLE) {
|
|
if (info == null) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.remove(PREF_DVR_SUBTITLE_ID)
|
|
.apply();
|
|
} else {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putString(PREF_DVR_SUBTITLE_LANGUAGE, info.getLanguage())
|
|
.putString(PREF_DVR_SUBTITLE_ID, info.getId())
|
|
.apply();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static TvTrackInfo getDvrPlaybackTrackSettings(Context context, int trackType) {
|
|
String language;
|
|
String trackId;
|
|
int channelCount;
|
|
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
|
|
if (trackType == TvTrackInfo.TYPE_AUDIO) {
|
|
trackId = pref.getString(PREF_DVR_MULTI_AUDIO_ID, null);
|
|
if (trackId == null) {
|
|
return null;
|
|
}
|
|
language = pref.getString(PREF_DVR_MULTI_AUDIO_LANGUAGE, null);
|
|
channelCount = pref.getInt(PREF_DVR_MULTI_AUDIO_CHANNEL_COUNT, 0);
|
|
return new TvTrackInfo.Builder(trackType, trackId)
|
|
.setLanguage(language)
|
|
.setAudioChannelCount(channelCount)
|
|
.build();
|
|
} else if (trackType == TvTrackInfo.TYPE_SUBTITLE) {
|
|
trackId = pref.getString(PREF_DVR_SUBTITLE_ID, null);
|
|
if (trackId == null) {
|
|
return null;
|
|
}
|
|
language = pref.getString(PREF_DVR_SUBTITLE_LANGUAGE, null);
|
|
return new TvTrackInfo.Builder(trackType, trackId).setLanguage(language).build();
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Parental Control settings
|
|
public static void addContentRatingSystem(Context context, String id) {
|
|
Set<String> contentRatingSystemSet = getContentRatingSystemSet(context);
|
|
if (contentRatingSystemSet.add(id)) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putStringSet(PREF_CONTENT_RATING_SYSTEMS, contentRatingSystemSet)
|
|
.apply();
|
|
}
|
|
}
|
|
|
|
public static void removeContentRatingSystem(Context context, String id) {
|
|
Set<String> contentRatingSystemSet = getContentRatingSystemSet(context);
|
|
if (contentRatingSystemSet.remove(id)) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putStringSet(PREF_CONTENT_RATING_SYSTEMS, contentRatingSystemSet)
|
|
.apply();
|
|
}
|
|
}
|
|
|
|
public static boolean hasContentRatingSystem(Context context, String id) {
|
|
return getContentRatingSystemSet(context).contains(id);
|
|
}
|
|
|
|
/**
|
|
* Returns whether the content rating system is ever set. Returns {@code false} only when the
|
|
* user changes parental control settings for the first time.
|
|
*/
|
|
public static boolean isContentRatingSystemSet(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getStringSet(PREF_CONTENT_RATING_SYSTEMS, null)
|
|
!= null;
|
|
}
|
|
|
|
private static Set<String> getContentRatingSystemSet(Context context) {
|
|
return new HashSet<>(
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getStringSet(PREF_CONTENT_RATING_SYSTEMS, Collections.emptySet()));
|
|
}
|
|
|
|
@ContentRatingLevel
|
|
@SuppressWarnings("ResourceType")
|
|
public static int getContentRatingLevel(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getInt(PREF_CONTENT_RATING_LEVEL, CONTENT_RATING_LEVEL_NONE);
|
|
}
|
|
|
|
public static void setContentRatingLevel(Context context, @ContentRatingLevel int level) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putInt(PREF_CONTENT_RATING_LEVEL, level)
|
|
.apply();
|
|
}
|
|
|
|
/**
|
|
* Returns the time until we should disable the PIN dialog (because the user input wrong PINs
|
|
* repeatedly).
|
|
*/
|
|
public static long getDisablePinUntil(Context context) {
|
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
|
.getLong(PREF_DISABLE_PIN_UNTIL, 0);
|
|
}
|
|
|
|
/**
|
|
* Saves the time until we should disable the PIN dialog (because the user input wrong PINs
|
|
* repeatedly).
|
|
*/
|
|
public static void setDisablePinUntil(Context context, long timeMillis) {
|
|
PreferenceManager.getDefaultSharedPreferences(context)
|
|
.edit()
|
|
.putLong(PREF_DISABLE_PIN_UNTIL, timeMillis)
|
|
.apply();
|
|
}
|
|
}
|