Commit 42b4e719 authored by feihuaduo's avatar feihuaduo

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

增加内核替换
parent 333e6a44
...@@ -36,6 +36,7 @@ public interface Constants { ...@@ -36,6 +36,7 @@ public interface Constants {
String PREF_CHANGE_LOG = "pref_key_change_log"; String PREF_CHANGE_LOG = "pref_key_change_log";
String PREF_CHECK_UPDATE = "pref_key_about_check_update"; String PREF_CHECK_UPDATE = "pref_key_about_check_update";
String PREF_LAST_ROOM_LIST = "pref_key_lastroom_list"; String PREF_LAST_ROOM_LIST = "pref_key_lastroom_list";
String PERF_TEST_REPLACE_KERNEL = "pref_key_test_replace_kernel";
int LAST_ROOM_MAX = 10; int LAST_ROOM_MAX = 10;
/*** /***
* 卡组编辑,长按删除对话框 * 卡组编辑,长按删除对话框
......
...@@ -36,7 +36,7 @@ public class BaseActivity extends AppCompatActivity { ...@@ -36,7 +36,7 @@ public class BaseActivity extends AppCompatActivity {
protected final String[] PERMISSIONS ={ protected final String[] PERMISSIONS ={
// Manifest.permission.RECORD_AUDIO, // Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_STATE,
Manifest.permission.SYSTEM_ALERT_WINDOW, // Manifest.permission.SYSTEM_ALERT_WINDOW,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,
}; };
......
...@@ -16,7 +16,12 @@ import android.support.v4.content.ContextCompat; ...@@ -16,7 +16,12 @@ import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity; 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.lite.R;
import cn.garymb.ygomobile.utils.FileLogUtil;
/** /**
* 权限获取页面 * 权限获取页面
...@@ -51,6 +56,11 @@ public class PermissionsActivity extends AppCompatActivity { ...@@ -51,6 +56,11 @@ public class PermissionsActivity extends AppCompatActivity {
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getIntent() == null || !getIntent().hasExtra(EXTRA_PERMISSIONS)) { if (getIntent() == null || !getIntent().hasExtra(EXTRA_PERMISSIONS)) {
try {
FileLogUtil.writeAndTime("所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
allPermissionsGranted(); allPermissionsGranted();
}else { }else {
mChecker = PermissionsChecker.getPermissionsChecker(this); mChecker = PermissionsChecker.getPermissionsChecker(this);
...@@ -65,8 +75,18 @@ public class PermissionsActivity extends AppCompatActivity { ...@@ -65,8 +75,18 @@ public class PermissionsActivity extends AppCompatActivity {
String[] permissions = getPermissions(); String[] permissions = getPermissions();
if (mChecker.lacksPermissions(permissions)) { if (mChecker.lacksPermissions(permissions)) {
requestPermissions(permissions); // 请求权限 requestPermissions(permissions); // 请求权限
try {
FileLogUtil.writeAndTime("onResume请求权限");
} catch (IOException e) {
e.printStackTrace();
}
} else { } else {
allPermissionsGranted(); // 全部权限都已获取 allPermissionsGranted(); // 全部权限都已获取
try {
FileLogUtil.writeAndTime("onResume所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
} }
} else { } else {
isRequireCheck = true; isRequireCheck = true;
...@@ -101,12 +121,34 @@ public class PermissionsActivity extends AppCompatActivity { ...@@ -101,12 +121,34 @@ public class PermissionsActivity extends AppCompatActivity {
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) { if (requestCode == PERMISSION_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) {
try {
FileLogUtil.writeAndTime("权限请求回调:所有权限已获取");
} catch (IOException e) {
e.printStackTrace();
}
isRequireCheck = true; isRequireCheck = true;
allPermissionsGranted(); allPermissionsGranted();
} else { } else {
try {
FileLogUtil.writeAndTime("权限请求回调:权限未得到");
} catch (IOException e) {
e.printStackTrace();
}
isRequireCheck = false; 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 { ...@@ -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); AlertDialog.Builder builder = new AlertDialog.Builder(PermissionsActivity.this);
builder.setTitle(R.string.help); builder.setTitle(R.string.help);
String noPermission=""; String noPermission="";
......
...@@ -52,6 +52,7 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment { ...@@ -52,6 +52,7 @@ public abstract class PreferenceFragmentPlus extends BasePreferenceFragment {
Intent intent = FileActivity.getIntent(getActivity(), title, null, defPath, false, FileOpenType.SelectFolder); Intent intent = FileActivity.getIntent(getActivity(), title, null, defPath, false, FileOpenType.SelectFolder);
startActivityForResult(intent, REQUEST_CHOOSE_FOLDER); startActivityForResult(intent, REQUEST_CHOOSE_FOLDER);
} }
/*** /***
* @param preference * @param preference
* @param type *\/* * @param type *\/*
......
package cn.garymb.ygomobile.ui.preference.fragments; package cn.garymb.ygomobile.ui.preference.fragments;
import android.annotation.SuppressLint;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.ListPreference; import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
...@@ -30,6 +34,7 @@ import com.pgyersdk.update.javabean.AppBean; ...@@ -30,6 +34,7 @@ import com.pgyersdk.update.javabean.AppBean;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -72,10 +77,14 @@ import static cn.garymb.ygomobile.Constants.PREF_USE_EXTRA_CARD_CARDS; ...@@ -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_AVATAR;
import static cn.garymb.ygomobile.Constants.SETTINGS_CARD_BG; import static cn.garymb.ygomobile.Constants.SETTINGS_CARD_BG;
import static cn.garymb.ygomobile.Constants.SETTINGS_COVER; 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; import static cn.garymb.ygomobile.ui.home.ResCheckTask.getDatapath;
public class SettingFragment extends PreferenceFragmentPlus { public class SettingFragment extends PreferenceFragmentPlus {
private static final int COPY_SO_OK=0;
private static final int COPY_SO_EXCEPTION=1;
public SettingFragment() { public SettingFragment() {
} }
...@@ -111,6 +120,7 @@ public class SettingFragment extends PreferenceFragmentPlus { ...@@ -111,6 +120,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
bind(PREF_GAME_FONT, mSettings.getFontPath()); bind(PREF_GAME_FONT, mSettings.getFontPath());
bind(PREF_READ_EX, mSettings.isReadExpansions()); bind(PREF_READ_EX, mSettings.isReadExpansions());
bind(PREF_DECK_MANAGER_V2, mSettings.isUseDeckManagerV2()); bind(PREF_DECK_MANAGER_V2, mSettings.isUseDeckManagerV2());
bind(PERF_TEST_REPLACE_KERNEL,"替换ygopro的内核");
Preference preference = findPreference(PREF_READ_EX); Preference preference = findPreference(PREF_READ_EX);
if (preference != null) { if (preference != null) {
preference.setSummary(mSettings.getExpansionsPath().getAbsolutePath()); preference.setSummary(mSettings.getExpansionsPath().getAbsolutePath());
...@@ -306,6 +316,8 @@ public class SettingFragment extends PreferenceFragmentPlus { ...@@ -306,6 +316,8 @@ public class SettingFragment extends PreferenceFragmentPlus {
} }
} else if (PREF_GAME_PATH.equals(key)) { } else if (PREF_GAME_PATH.equals(key)) {
showFolderChooser(preference, mSettings.getResourcePath(), getString(R.string.choose_game_path)); 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; return false;
} }
...@@ -343,11 +355,49 @@ public class SettingFragment extends PreferenceFragmentPlus { ...@@ -343,11 +355,49 @@ public class SettingFragment extends PreferenceFragmentPlus {
((CheckBoxPreference) preference).setChecked(true); ((CheckBoxPreference) preference).setChecked(true);
mSettings.setUseExtraCards(true); mSettings.setUseExtraCards(true);
copyDataBase(preference, file); 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); 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) { private void showImageDialog(Preference preference, String title, String outFile, boolean isJpeg, int outWidth, int outHeight) {
int width = getResources().getDisplayMetrics().widthPixels; int width = getResources().getDisplayMetrics().widthPixels;
//DialogPlus builder = new DialogPlus(getActivity()); //DialogPlus builder = new DialogPlus(getActivity());
......
...@@ -9,6 +9,8 @@ import android.util.Log; ...@@ -9,6 +9,8 @@ import android.util.Log;
import java.io.Closeable; import java.io.Closeable;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -227,4 +229,19 @@ public class IOUtils { ...@@ -227,4 +229,19 @@ public class IOUtils {
return false; 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 @@ ...@@ -60,6 +60,8 @@
<string name="settings_game_diy_cover">배경이미지</string> <string name="settings_game_diy_cover">배경이미지</string>
<string name="settings_game_diy_card_back">카드커버</string> <string name="settings_game_diy_card_back">카드커버</string>
<string name="settings_game_diy_card_db">커스텀cdb사용</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_immersive_mode">해상도 최적화</string>
<string name="settings_game_opengl">OpenGL</string> <string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">프로필 이미지</string> <string name="settings_game_avatar">프로필 이미지</string>
......
...@@ -60,6 +60,8 @@ ...@@ -60,6 +60,8 @@
<string name="settings_game_diy_cover">游戏背景</string> <string name="settings_game_diy_cover">游戏背景</string>
<string name="settings_game_diy_card_back">卡片背面</string> <string name="settings_game_diy_card_back">卡片背面</string>
<string name="settings_game_diy_card_db">使用自定义数据库</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_immersive_mode">适配非16:9分辨率的屏幕</string>
<string name="settings_game_opengl">OpenGL</string> <string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">头像图片</string> <string name="settings_game_avatar">头像图片</string>
......
...@@ -66,6 +66,8 @@ ...@@ -66,6 +66,8 @@
<string name="settings_game_diy_cover">Game Background</string> <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_back">Card Cover</string>
<string name="settings_game_diy_card_db">Use your own card database</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_immersive_mode">Optimize not 16:9 resolution</string>
<string name="settings_game_opengl">OpenGL</string> <string name="settings_game_opengl">OpenGL</string>
<string name="settings_game_avatar">Game Avatar</string> <string name="settings_game_avatar">Game Avatar</string>
......
...@@ -105,4 +105,11 @@ ...@@ -105,4 +105,11 @@
android:title="@string/settings_game_diy_card_db"/>--> android:title="@string/settings_game_diy_card_db"/>-->
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> <PreferenceCategory android:title="@string/settings_test_options">
\ No newline at end of file
<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