Update permission

pull/123/head
FongMi 3 years ago
parent 69c7102b9c
commit 5c16a872f3
  1. 2
      app/build.gradle
  2. 37
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  3. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java
  4. 15
      app/src/leanback/res/layout/dialog_config.xml
  5. 1
      app/src/main/AndroidManifest.xml
  6. 12
      app/src/main/java/com/fongmi/android/tv/event/ServerEvent.java
  7. 2
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  8. 28
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java
  9. 4
      app/src/main/res/raw/index.html
  10. 2
      app/src/main/res/raw/script.js
  11. 1
      app/src/main/res/values-zh-rCN/strings.xml
  12. 1
      app/src/main/res/values-zh-rTW/strings.xml
  13. 1
      app/src/main/res/values/strings.xml
  14. 2
      catvod/build.gradle
  15. 2
      drpy/build.gradle
  16. 2
      forcetech/build.gradle
  17. 2
      ijkplayer/build.gradle
  18. 2
      pyramid/build.gradle
  19. 2
      tvbus/build.gradle

@ -9,7 +9,7 @@ android {
defaultConfig {
applicationId "com.fongmi.android.tv"
minSdk 21
targetSdk 33
targetSdk 29
versionCode 52
versionName "1.5.2"
ndk { abiFilters "armeabi-v7a" }

@ -3,16 +3,7 @@ package com.fongmi.android.tv.ui.activity;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.BuildConfig;
@ -26,7 +17,6 @@ import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.databinding.ActivitySettingBinding;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.impl.LiveCallback;
import com.fongmi.android.tv.impl.SiteCallback;
@ -38,15 +28,10 @@ import com.fongmi.android.tv.ui.custom.dialog.SiteDialog;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
import com.permissionx.guolindev.PermissionX;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class SettingActivity extends BaseActivity implements ConfigCallback, SiteCallback, LiveCallback {
private final ActivityResultLauncher<Intent> launcherIntent = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> loadConfig());
private ActivitySettingBinding mBinding;
private Config config;
@ -100,24 +85,13 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
}
private void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
openSetting();
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R && ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
PermissionX.init(this).permissions(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> loadConfig());
if (config.getUrl().startsWith("file") && !PermissionX.isGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
PermissionX.init(this).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> loadConfig());
} else {
loadConfig();
}
}
@RequiresApi(api = Build.VERSION_CODES.R)
private void openSetting() {
try {
launcherIntent.launch(new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} catch (Exception e) {
launcherIntent.launch(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
}
}
private void loadConfig() {
switch (config.getType()) {
case 0:
@ -171,11 +145,6 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onServerEvent(ServerEvent event) {
if (event.getType() == ServerEvent.Type.FILE) Utils.checkStoragePermission(this);
}
@Override
public void setSite(Site item) {
ApiConfig.get().setHome(item);

@ -1,6 +1,6 @@
package com.fongmi.android.tv.ui.custom.dialog;
import android.app.Activity;
import android.Manifest;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
@ -8,6 +8,7 @@ import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.ApiConfig;
@ -22,6 +23,7 @@ import com.fongmi.android.tv.utils.QRCode;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.permissionx.guolindev.PermissionX;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@ -30,12 +32,13 @@ import org.greenrobot.eventbus.ThreadMode;
public class ConfigDialog implements DialogInterface.OnDismissListener {
private final DialogConfigBinding binding;
private final FragmentActivity activity;
private final ConfigCallback callback;
private final AlertDialog dialog;
private String url;
private int type;
public static ConfigDialog create(Activity activity) {
public static ConfigDialog create(FragmentActivity activity) {
return new ConfigDialog(activity);
}
@ -44,7 +47,8 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
return this;
}
public ConfigDialog(Activity activity) {
public ConfigDialog(FragmentActivity activity) {
this.activity = activity;
this.callback = (ConfigCallback) activity;
this.binding = DialogConfigBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
@ -75,6 +79,7 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
private void initEvent() {
EventBus.getDefault().register(this);
binding.storage.setOnClickListener(this::onStorage);
binding.positive.setOnClickListener(this::onPositive);
binding.negative.setOnClickListener(this::onNegative);
binding.text.setOnEditorActionListener((textView, actionId, event) -> {
@ -96,6 +101,11 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
}
}
private void onStorage(View view) {
if (PermissionX.isGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) return;
PermissionX.init(activity).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request(null);
}
private void onPositive(View view) {
String text = Utils.checkClan(binding.text.getText().toString().trim());
if (text.isEmpty()) Config.delete(url, type);

@ -48,6 +48,21 @@
android:layout_alignBottom="@+id/code"
android:orientation="horizontal">
<TextView
android:id="@+id/storage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:text="@string/setting_storage"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/positive"
android:layout_width="0dp"

@ -9,7 +9,6 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application

@ -5,7 +5,7 @@ import org.greenrobot.eventbus.EventBus;
public class ServerEvent {
private final Type type;
private String text;
private final String text;
public static void search(String text) {
EventBus.getDefault().post(new ServerEvent(Type.SEARCH, text));
@ -23,14 +23,6 @@ public class ServerEvent {
EventBus.getDefault().post(new ServerEvent(Type.API, text));
}
public static void file() {
EventBus.getDefault().post(new ServerEvent(Type.FILE));
}
public ServerEvent(Type type) {
this.type = type;
}
private ServerEvent(Type type, String text) {
this.type = type;
this.text = text;
@ -45,6 +37,6 @@ public class ServerEvent {
}
public enum Type {
SEARCH, UPDATE, PUSH, API, FILE
SEARCH, UPDATE, PUSH, API
}
}

@ -2,7 +2,6 @@ package com.fongmi.android.tv.server;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.server.process.InputRequestProcess;
import com.fongmi.android.tv.server.process.RawRequestProcess;
import com.fongmi.android.tv.server.process.RequestProcess;
@ -150,7 +149,6 @@ public class Nano extends NanoHTTPD {
JsonObject info = new JsonObject();
info.addProperty("parent", parent);
if (list == null || list.length == 0) {
if (parent.equals(".")) ServerEvent.file();
info.add("files", new JsonArray());
return info.toString();
}

@ -1,13 +1,8 @@
package com.fongmi.android.tv.utils;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.IBinder;
import android.provider.Settings;
import android.text.TextUtils;
@ -16,15 +11,9 @@ import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.BuildConfig;
import com.fongmi.android.tv.server.Server;
import com.google.android.exoplayer2.util.Util;
import com.permissionx.guolindev.PermissionX;
import java.math.BigInteger;
import java.security.MessageDigest;
@ -177,21 +166,4 @@ public class Utils {
imm.hideSoftInputFromWindow(windowToken, 0);
}
}
public static void checkStoragePermission(FragmentActivity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
Utils.openManageFileAccess();
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R && ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
PermissionX.init(activity).permissions(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE).request(null);
}
}
@RequiresApi(api = Build.VERSION_CODES.R)
public static void openManageFileAccess() {
try {
App.get().startActivity(new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID)));
} catch (Exception e) {
App.get().startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
}
}
}

@ -111,7 +111,7 @@
<div role="button" class="weui-mask"></div>
<div class="weui-half-screen-dialog">
<div class="weui-half-screen-dialog__hd">
<div class="weui-half-screen-dialog__hd__main">請開啟接口設定</div>
<div class="weui-half-screen-dialog__hd__main">接口設定</div>
</div>
<div class="weui-half-screen-dialog__bd" id="fileInfo">
<div class="weui-form__control-area" style="margin-bottom: 0px !important;">
@ -123,7 +123,7 @@
</div>
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="fileUrl1" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" readonly />
<input id="fileUrl" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" readonly />
</div>
</div>
</div>

@ -74,7 +74,7 @@ function selectFile(path, canDel) {
current_file = path;
if (canDel) $("#delFileBtn").show();
else $("#delFileBtn").hide();
$("#fileUrl1")[0].value = "file://" + current_file;
$("#fileUrl")[0].value = "file://" + current_file;
$("#fileInfoDialog").show();
}

@ -70,6 +70,7 @@
<string name="setting_quality">图片品质</string>
<string name="setting_size">图片尺寸</string>
<string name="setting_version">版本</string>
<string name="setting_storage">权限</string>
<!-- Dialog -->
<string name="dialog_positive">确定</string>

@ -70,6 +70,7 @@
<string name="setting_quality">圖片品質</string>
<string name="setting_size">圖片尺寸</string>
<string name="setting_version">版本</string>
<string name="setting_storage">權限</string>
<!-- Dialog -->
<string name="dialog_positive">確定</string>

@ -70,6 +70,7 @@
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>
<string name="setting_version">Version</string>
<string name="setting_storage">Permission</string>
<!-- Dialog -->
<string name="dialog_positive">OK</string>

@ -7,6 +7,6 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
}
}

@ -7,7 +7,7 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
ndk { abiFilters "armeabi-v7a" }
}
}

@ -7,6 +7,6 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
}
}

@ -7,7 +7,7 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
}
}

@ -8,7 +8,7 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
ndk { abiFilters "armeabi-v7a" }
python {
buildPython "C:/Users/FongMi.DIREK/Anaconda3/envs/py38/python.exe"

@ -7,6 +7,6 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
targetSdk 29
}
}
Loading…
Cancel
Save