Commit 42b4e719 authored by feihuaduo's avatar feihuaduo

修复悬浮窗权限判断未获取的问题

增加内核替换
parent 333e6a44
......@@ -36,6 +36,7 @@ public interface Constants {
String PREF_CHANGE_LOG = "pref_key_change_log";
String PREF_CHECK_UPDATE = "pref_key_about_check_update";
String PREF_LAST_ROOM_LIST = "pref_key_lastroom_list";
String PERF_TEST_REPLACE_KERNEL = "pref_key_test_replace_kernel";
int LAST_ROOM_MAX = 10;
/***
* 卡组编辑,长按删除对话框
......
......@@ -36,7 +36,7 @@ public class BaseActivity extends AppCompatActivity {
protected final String[] PERMISSIONS ={
// Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.SYSTEM_ALERT_WINDOW,
// Manifest.permission.SYSTEM_ALERT_WINDOW,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
};
......
......@@ -16,7 +16,12 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.utils.FileLogUtil;
/**
* 权限获取页面
......@@ -51,6 +56,11 @@ public class PermissionsActivity extends AppCompatActivity {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent() == null || !getIntent().hasExtra(EXTRA_PERMISSIONS)) {
try {
FileLogUtil.writeAndTime("所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
allPermissionsGranted();
}else {
mChecker = PermissionsChecker.getPermissionsChecker(this);
......@@ -65,8 +75,18 @@ public class PermissionsActivity extends AppCompatActivity {
String[] permissions = getPermissions();
if (mChecker.lacksPermissions(permissions)) {
requestPermissions(permissions); // 请求权限
try {
FileLogUtil.writeAndTime("onResume请求权限");
} catch (IOException e) {
e.printStackTrace();
}
} else {
allPermissionsGranted(); // 全部权限都已获取
try {
FileLogUtil.writeAndTime("onResume所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
isRequireCheck = true;
......@@ -101,12 +121,34 @@ public class PermissionsActivity extends AppCompatActivity {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) {
try {
FileLogUtil.writeAndTime("权限请求回调:所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
isRequireCheck = true;
allPermissionsGranted();
} else {
try {
FileLogUtil.writeAndTime("权限请求回调:权限未得到");
} catch (IOException e) {
e.printStackTrace();
}
isRequireCheck = false;
showMissingPermissionDialog(permissions);
showMissingPermissionDialog(getNoPermission(permissions,grantResults));
}
}
//获取未同意的权限
private List<String> getNoPermission(String[] permissions, int[] grantResults){
List<String> permissionList=new ArrayList<>();
for (int i=0;i<grantResults.length;i++) {
int grantResult = grantResults[i];
if (grantResult == PackageManager.PERMISSION_DENIED) {
permissionList.add(permissions[i]);
}
}
return permissionList;
}
// 含有全部的权限
......@@ -120,7 +162,7 @@ public class PermissionsActivity extends AppCompatActivity {
}
// 显示缺失权限提示
private void showMissingPermissionDialog(String[] permissionList) {
private void showMissingPermissionDialog(List<String > permissionList) {
AlertDialog.Builder builder = new AlertDialog.Builder(PermissionsActivity.this);
builder.setTitle(R.string.help);
String noPermission="";
......
......@@ -52,6 +52,7 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment {
Intent intent = FileActivity.getIntent(getActivity(), title, null, defPath, false, FileOpenType.SelectFolder);
startActivityForResult(intent, REQUEST_CHOOSE_FOLDER);
}
/***
* @param preference
* @param type *\/*
......
package cn.garymb.ygomobile.ui.preference.fragments;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
......@@ -30,6 +34,7 @@ import com.pgyersdk.update.javabean.AppBean;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
......@@ -72,10 +77,14 @@ import static cn.garymb.ygomobile.Constants.PREF_USE_EXTRA_CARD_CARDS;
import static cn.garymb.ygomobile.Constants.SETTINGS_AVATAR;
import static cn.garymb.ygomobile.Constants.SETTINGS_CARD_BG;
import static cn.garymb.ygomobile.Constants.SETTINGS_COVER;
import static cn.garymb.ygomobile.Constants.PERF_TEST_REPLACE_KERNEL;
import static cn.garymb.ygomobile.ui.home.ResCheckTask.getDatapath;
public class SettingFragment extends PreferenceFragmentPlus {
private static final int COPY_SO_OK=0;
private static final int COPY_SO_EXCEPTION=1;
public SettingFragment() {
}
......@@ -111,6 +120,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
bind(PREF_GAME_FONT, mSettings.getFontPath());
bind(PREF_READ_EX, mSettings.isReadExpansions());
bind(PREF_DECK_MANAGER_V2, mSettings.isUseDeckManagerV2());
bind(PERF_TEST_REPLACE_KERNEL,"替换ygopro的内核");
Preference preference = findPreference(PREF_READ_EX);
if (preference != null) {
preference.setSummary(mSettings.getExpansionsPath().getAbsolutePath());
......@@ -306,6 +316,8 @@ public class SettingFragment extends PreferenceFragmentPlus {
}
} else if (PREF_GAME_PATH.equals(key)) {
showFolderChooser(preference, mSettings.getResourcePath(), getString(R.string.choose_game_path));
}else if (PERF_TEST_REPLACE_KERNEL.equals(key)){
showFileChooser(preference,".so", mSettings.getResourcePath(),"内核文件选择");
}
return false;
}
......@@ -343,11 +355,49 @@ public class SettingFragment extends PreferenceFragmentPlus {
((CheckBoxPreference) preference).setChecked(true);
mSettings.setUseExtraCards(true);
copyDataBase(preference, file);
} else {
} else if(PERF_TEST_REPLACE_KERNEL.equals(key)){
File path=App.get().getDir("lib",Context.MODE_APPEND);
String name="libYGOMobile.so";
File soFile=new File(path.getAbsolutePath(),name);
new Thread(new Runnable() {
@Override
public void run() {
Message me=new Message();
try {
IOUtils.delete(soFile);
IOUtils.copyFile(file,soFile.getAbsolutePath(),true);
me.what=COPY_SO_OK;
} catch (FileNotFoundException e) {
e.printStackTrace();
me.what=COPY_SO_EXCEPTION;
me.obj=e;
}
handler.sendMessage(me);
}
}).start();
}else {
super.onChooseFileOk(preference, file);
}
}
@SuppressLint("HandlerLeak")
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case COPY_SO_OK:
Toast.makeText(getActivity(),"替换成功", Toast.LENGTH_SHORT).show();
break;
case COPY_SO_EXCEPTION:
Toast.makeText(getActivity(),"替换失败,原因为"+msg.obj, Toast.LENGTH_SHORT).show();
break;
}
}
};
private void showImageDialog(Preference preference, String title, String outFile, boolean isJpeg, int outWidth, int outHeight) {
int width = getResources().getDisplayMetrics().widthPixels;
//DialogPlus builder = new DialogPlus(getActivity());
......
......@@ -9,6 +9,8 @@ import android.util.Log;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
......@@ -227,4 +229,19 @@ public class IOUtils {
return false;
}
public static void copyFile(String oldPath, String newPath, boolean isname) throws FileNotFoundException {
//判断复制后的路径是否含有文件名,如果没有则加上
if (!isname) {
//由于newPath是路径加文件名,所以获取要复制的文件名与复制后的路径组成新的newPath
String abb[]=oldPath.split("/");
newPath = newPath + "/" + abb[abb.length - 1];
}
FileInputStream fis=new FileInputStream(oldPath);
copyToFile(fis,newPath);
}
}
......@@ -60,6 +60,8 @@
<string name="settings_game_diy_cover">배경이미지</string>
<string name="settings_game_diy_card_back">카드커버</string>
<string name="settings_game_diy_card_db">커스텀cdb사용</string>
<string name="settings_test_options"></string>
<string name="settings_test_replace_kernel"></string>
<string name="settings_game_immersive_mode">해상도 최적화</string>
<string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">프로필 이미지</string>
......
......@@ -60,6 +60,8 @@
<string name="settings_game_diy_cover">游戏背景</string>
<string name="settings_game_diy_card_back">卡片背面</string>
<string name="settings_game_diy_card_db">使用自定义数据库</string>
<string name="settings_test_options">实验选项</string>
<string name="settings_test_replace_kernel">替换内核</string>
<string name="settings_game_immersive_mode">适配非16:9分辨率的屏幕</string>
<string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">头像图片</string>
......
......@@ -66,6 +66,8 @@
<string name="settings_game_diy_cover">Game Background</string>
<string name="settings_game_diy_card_back">Card Cover</string>
<string name="settings_game_diy_card_db">Use your own card database</string>
<string name="settings_test_options"></string>
<string name="settings_test_replace_kernel"></string>
<string name="settings_game_immersive_mode">Optimize not 16:9 resolution</string>
<string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">Game Avatar</string>
......
......@@ -105,4 +105,11 @@
android:title="@string/settings_game_diy_card_db"/>-->
</PreferenceCategory>
</PreferenceScreen>
\ No newline at end of file
<PreferenceCategory android:title="@string/settings_test_options">
<Preference
android:key="pref_key_test_replace_kernel"
android:persistent="true"
android:title="@string/settings_test_replace_kernel" />
</PreferenceCategory>
</PreferenceScreen>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment