package com.ittianyu.mobileguard.activity;
import android.Manifest;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.widget.Toast;
import com.fastaccess.permission.base.activity.BasePermissionActivity;
import com.fastaccess.permission.base.model.PermissionModel;
import com.fastaccess.permission.base.model.PermissionModelBuilder;
import com.ittianyu.mobileguard.R;
import com.ittianyu.mobileguard.engine.ServiceManagerEngine;
import com.ittianyu.mobileguard.utils.WindowsUtils;
import java.util.ArrayList;
import java.util.List;
/**
* request permission if the system version >= 6.0
*/
public class PermissionActivity extends BasePermissionActivity {
private List<PermissionModel> permissions = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
// add all needed permission. need run before super.onCreate
addPermissions();
super.onCreate(savedInstanceState);
// check whether granted
isPermissionsGranted();
// set no action bar
WindowsUtils.hideActionBar(this);
}
// @Override
// protected void onStart() {
// super.onStart();
// System.out.println(permissionHelper);
//
// }
/**
* add all needed permission
*/
private void addPermissions(){
/*
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
*/
permissions.add(PermissionModelBuilder.withContext(this)
.withCanSkip(false)
.withPermissionName(Manifest.permission.ACCESS_FINE_LOCATION)
.withTitle(R.string.title_location)
.withMessage(R.string.message_location)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.colorPrimary)
.withImageResourceId(R.drawable.permission_three)
.build());
/*
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
*/
permissions.add(PermissionModelBuilder.withContext(this)
.withTitle(R.string.title_storage)
.withCanSkip(false)
.withPermissionName(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withMessage(R.string.message_storage)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.colorAccent)
.withImageResourceId(R.drawable.permission_two)
.build());
/*
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.READ_CONTACTS
*/
permissions.add(PermissionModelBuilder.withContext(this)
.withCanSkip(false)
.withTitle(R.string.title_contacts)
.withPermissionName(Manifest.permission.WRITE_CONTACTS)
.withMessage(R.string.message_contacts)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.blue)
.withImageResourceId(R.drawable.permission_one)
.build());
// Manifest.permission.SYSTEM_ALERT_WINDOW
permissions.add(PermissionModelBuilder.withContext(this)
.withCanSkip(false)
.withTitle(R.string.title_system_alert_window)
.withPermissionName(Manifest.permission.SYSTEM_ALERT_WINDOW)
.withMessage(R.string.message_system_alert_window)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.colorPrimaryDark)
.withImageResourceId(R.drawable.permission_two)
.build());
/*
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
*/
permissions.add(PermissionModelBuilder.withContext(this)
.withCanSkip(false)
.withTitle(R.string.title_sms)
.withPermissionName(Manifest.permission.SEND_SMS)
.withMessage(R.string.message_sms)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.colorPrimary)
.withImageResourceId(R.drawable.permission_three)
.build());
/*
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
*/
permissions.add(PermissionModelBuilder.withContext(this)
.withCanSkip(false)
.withTitle(R.string.title_phone)
.withPermissionName(Manifest.permission.READ_CALL_LOG)
.withMessage(R.string.message_phone)
.withExplanationMessage(R.string.explanation_message)
.withLayoutColorRes(R.color.colorPrimaryDark)
.withImageResourceId(R.drawable.permission_two).build());
}
/**
* check all permissions is granted
*/
private void isPermissionsGranted() {
int count = 0;
for (PermissionModel permission: permissions) {
if(permission.getPermissionName().equals(Manifest.permission.SYSTEM_ALERT_WINDOW)) {
if (permissionHelper.isSystemAlertGranted()) {
count++;
}
} else if (permissionHelper.isPermissionGranted(permission.getPermissionName())) {
count++;
}
}
if(count == permissions.size()) {
// all permissions have granted
finish();
}
}
@NonNull
@Override
protected List<PermissionModel> permissions() {
return permissions;
}
@Override
protected int theme() {
return R.style.AppTheme;
}
@Override
protected void onIntroFinished() {
Toast.makeText(this, R.string.tips_thank_you_for_your_use, Toast.LENGTH_SHORT).show();
Log.i("onIntroFinished", "Intro has finished");
// do whatever you like!
finish();
}
@Nullable
@Override
protected ViewPager.PageTransformer pagerTransformer() {
return null;//use default
}
@Override
protected boolean backPressIsEnabled() {
return false;
}
@Override
protected void permissionIsPermanentlyDenied(@NonNull String permissionName) {
Log.e("DANGER", "Permission ( " + permissionName + " ) is permanentlyDenied and can only be granted via settings screen");
/** {@link com.fastaccess.permission.base.PermissionHelper#openSettingsScreen(Context)} can help you to open it if you like */
}
@Override
protected void onUserDeclinePermission(@NonNull String permissionName) {
Log.w("Warning", "Permission ( " + permissionName + " ) is skipped you can request it again by calling doing such\n " +
"if (permissionHelper.isExplanationNeeded(permissionName)) {\n" +
" permissionHelper.requestAfterExplanation(permissionName);\n" +
" }\n" +
" if (permissionHelper.isPermissionPermanentlyDenied(permissionName)) {\n" +
" /** read {@link #permissionIsPermanentlyDenied(String)} **/\n" +
" }");
}
@Override
protected void onDestroy() {
super.onDestroy();
// check all services when start the app
ServiceManagerEngine.checkAndAutoStart(this);
}
}