/* * Copyright (C) 2015 AChep@xda <artemchep@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package com.achep.base.permissions; import android.content.Context; import android.content.Intent; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import com.achep.acdisplay.permissions.PermissionAccessibility; import com.achep.acdisplay.permissions.PermissionDeviceAdmin; import com.achep.acdisplay.permissions.PermissionNotificationListener; import com.achep.acdisplay.permissions.PermissionUsageStats; import com.achep.base.interfaces.IPermission; import com.achep.base.interfaces.ISubscriptable; import com.achep.base.utils.IntentUtils; import java.util.ArrayList; /** * @author Artem Chepurnoy */ public abstract class Permission implements ISubscriptable<Permission.OnPermissionStateChanged>, IPermission { /** * @see com.achep.acdisplay.permissions.PermissionAccessibility */ @NonNull public static final String PERMISSION_ACCESSIBILITY = PermissionAccessibility.class.getSimpleName(); /** * @see com.achep.acdisplay.permissions.PermissionDeviceAdmin */ @NonNull public static final String PERMISSION_DEVICE_ADMIN = PermissionDeviceAdmin.class.getSimpleName(); /** * @see com.achep.acdisplay.permissions.PermissionNotificationListener */ @NonNull public static final String PERMISSION_NOTIFICATION_LISTENER = PermissionNotificationListener.class.getSimpleName(); /** * @see com.achep.acdisplay.permissions.PermissionUsageStats */ @NonNull public static final String PERMISSION_USAGE_STATS = PermissionUsageStats.class.getSimpleName(); /** * @see com.achep.base.permissions.Permission#PERMISSION_ACCESSIBILITY * @see com.achep.base.permissions.Permission#PERMISSION_DEVICE_ADMIN * @see com.achep.base.permissions.Permission#PERMISSION_NOTIFICATION_LISTENER * @see com.achep.base.permissions.Permission#PERMISSION_USAGE_STATS */ @NonNull public static Permission newInstance(@NonNull Context context, @NonNull String name) { if (PERMISSION_ACCESSIBILITY.equals(name)) { return new PermissionAccessibility(context); } else if (PERMISSION_DEVICE_ADMIN.equals(name)) { return new PermissionDeviceAdmin(context); } else if (PERMISSION_NOTIFICATION_LISTENER.equals(name)) { return new PermissionNotificationListener(context); } else if (PERMISSION_USAGE_STATS.equals(name)) { return new PermissionUsageStats(context); } throw new IllegalArgumentException(); } //-- MAIN ----------------------------------------------------------------- @NonNull protected final Context mContext; @NonNull protected final ArrayList<OnPermissionStateChanged> mListeners = new ArrayList<>(); public interface OnPermissionStateChanged { } public Permission(@NonNull Context context) { mContext = context.getApplicationContext(); } /** * {@inheritDoc} */ @Override public void registerListener(@NonNull OnPermissionStateChanged listener) { synchronized (this) { mListeners.add(listener); } } /** * {@inheritDoc} */ @Override public void unregisterListener(@NonNull OnPermissionStateChanged listener) { synchronized (this) { mListeners.remove(listener); } } /** * {@inheritDoc} */ @Override public void onLowMemory() { /* empty */ } /** * {@inheritDoc} */ @Override public boolean exists(@NonNull Context context) { return IntentUtils.hasActivityForThat(context, getIntentSettings()); } /** * @return An intent to <i>enable the permission</i> settings' screen. */ @NonNull public abstract Intent getIntentSettings(); //-- UI ------------------------------------------------------------------- @DrawableRes public int getIconResource() { return 0; } @StringRes public int getTitleResource() { return 0; } @StringRes public int getSummaryResource() { return 0; } @StringRes public int getErrorResource() { return 0; } }